From 902f4fb0ea23e2702f029f8c8b42aee79039de16 Mon Sep 17 00:00:00 2001 From: terminx Date: Fri, 5 Oct 2012 22:32:48 +0000 Subject: [PATCH] Remove dead "polymer-perf" branch git-svn-id: https://svn.eduke32.com/eduke32@3054 1a8010ca-5511-0410-912e-c29ae57300e0 --- .../eduke32/Apple/include/ogg/config_types.h | 11 - polymer-perf/eduke32/Apple/include/ogg/ogg.h | 202 - .../eduke32/Apple/include/ogg/os_types.h | 127 - .../eduke32/Apple/include/vorbis/codec.h | 241 - .../eduke32/Apple/include/vorbis/vorbisenc.h | 112 - .../eduke32/Apple/include/vorbis/vorbisfile.h | 183 - polymer-perf/eduke32/Apple/lib/libSDLmain.a | Bin 27120 -> 0 bytes polymer-perf/eduke32/Apple/lib/libogg.a | Bin 67184 -> 0 bytes polymer-perf/eduke32/Apple/lib/libvorbis.a | Bin 1226512 -> 0 bytes polymer-perf/eduke32/Apple/lib/libvorbisenc.a | Bin 2686248 -> 0 bytes .../eduke32/Apple/lib/libvorbisfile.a | Bin 216720 -> 0 bytes polymer-perf/eduke32/ChangeLog | 84 - polymer-perf/eduke32/ChangeLog.html | 103 - polymer-perf/eduke32/GNU.TXT | 87 - polymer-perf/eduke32/MakeDistributions | 47 - polymer-perf/eduke32/Makefile | 305 - polymer-perf/eduke32/Makefile.common | 101 - polymer-perf/eduke32/Makefile.deps | 67 - polymer-perf/eduke32/Makefile.msvc | 186 - polymer-perf/eduke32/SEHELP.HLP | 35 - polymer-perf/eduke32/STHELP.HLP | 25 - polymer-perf/eduke32/backtrace.dll | Bin 707166 -> 0 bytes polymer-perf/eduke32/build/MakeDistributions | 48 - polymer-perf/eduke32/build/Makefile | 264 - polymer-perf/eduke32/build/Makefile.deps | 47 - polymer-perf/eduke32/build/Makefile.msvc | 156 - polymer-perf/eduke32/build/Makefile.shared | 232 - polymer-perf/eduke32/build/buildlic.txt | 71 - polymer-perf/eduke32/build/doc/build.txt | 5081 ------ polymer-perf/eduke32/build/doc/build2.txt | 1655 -- polymer-perf/eduke32/build/doc/buildinf.txt | 882 - polymer-perf/eduke32/build/include/a.h | 157 - .../eduke32/build/include/baselayer.h | 181 - polymer-perf/eduke32/build/include/build.h | 755 - polymer-perf/eduke32/build/include/cache1d.h | 73 - polymer-perf/eduke32/build/include/compat.h | 573 - polymer-perf/eduke32/build/include/crc32.h | 39 - polymer-perf/eduke32/build/include/dxdidf.h | 55 - .../eduke32/build/include/dynamicgtk.h | 629 - polymer-perf/eduke32/build/include/editor.h | 229 - polymer-perf/eduke32/build/include/glbuild.h | 328 - polymer-perf/eduke32/build/include/glext.h | 7271 -------- polymer-perf/eduke32/build/include/gtkbits.h | 9 - polymer-perf/eduke32/build/include/hightile.h | 40 - polymer-perf/eduke32/build/include/kplib.h | 21 - polymer-perf/eduke32/build/include/lzwnew.h | 2 - .../eduke32/build/include/m32script.h | 296 - polymer-perf/eduke32/build/include/malloc.c.h | 5871 ------- polymer-perf/eduke32/build/include/md4.h | 38 - polymer-perf/eduke32/build/include/mdsprite.h | 248 - .../eduke32/build/include/msvc/inttypes.h | 305 - .../eduke32/build/include/msvc/stdint.h | 247 - polymer-perf/eduke32/build/include/mutex.h | 21 - .../eduke32/build/include/nedmalloc.h | 302 - polymer-perf/eduke32/build/include/osd.h | 201 - polymer-perf/eduke32/build/include/osxbits.h | 8 - polymer-perf/eduke32/build/include/osxmain.h | 11 - polymer-perf/eduke32/build/include/polymer.h | 506 - polymer-perf/eduke32/build/include/polymost.h | 141 - polymer-perf/eduke32/build/include/pragmas.h | 1909 --- polymer-perf/eduke32/build/include/prlights.h | 40 - polymer-perf/eduke32/build/include/quicklz.h | 150 - polymer-perf/eduke32/build/include/rawinput.h | 24 - .../eduke32/build/include/scancodes.h | 123 - .../eduke32/build/include/scriptfile.h | 27 - polymer-perf/eduke32/build/include/sdl_inc.h | 51 - polymer-perf/eduke32/build/include/sdlayer.h | 21 - .../eduke32/build/include/startwin.editor.h | 19 - polymer-perf/eduke32/build/include/winlayer.h | 28 - polymer-perf/eduke32/build/obj.gnu/keep.me | 0 polymer-perf/eduke32/build/obj.msc/keep.me | 0 polymer-perf/eduke32/build/rsrc/build.bmp | Bin 26774 -> 0 bytes polymer-perf/eduke32/build/rsrc/build.xcf | Bin 129379 -> 0 bytes .../eduke32/build/rsrc/build_icon.bmp | Bin 3126 -> 0 bytes polymer-perf/eduke32/build/rsrc/build_icon.c | 192 - .../eduke32/build/rsrc/build_icon.ico | Bin 2998 -> 0 bytes .../eduke32/build/rsrc/editor_banner.c | 2260 --- polymer-perf/eduke32/build/rsrc/game.bmp | Bin 26774 -> 0 bytes polymer-perf/eduke32/build/rsrc/game.xcf | Bin 86377 -> 0 bytes polymer-perf/eduke32/build/rsrc/game_banner.c | 2685 --- polymer-perf/eduke32/build/rsrc/game_icon.bmp | Bin 3126 -> 0 bytes polymer-perf/eduke32/build/rsrc/game_icon.c | 192 - polymer-perf/eduke32/build/rsrc/game_icon.ico | Bin 2998 -> 0 bytes .../build/src/StartupWinController.editor.m | 189 - polymer-perf/eduke32/build/src/a-c.c | 299 - polymer-perf/eduke32/build/src/a.masm | 2668 --- polymer-perf/eduke32/build/src/a.nasm | 2758 --- polymer-perf/eduke32/build/src/a.wasm | 2425 --- polymer-perf/eduke32/build/src/baselayer.c | 365 - polymer-perf/eduke32/build/src/build.c | 7597 --------- polymer-perf/eduke32/build/src/cache1d.c | 1420 -- polymer-perf/eduke32/build/src/compat.c | 846 - polymer-perf/eduke32/build/src/config.c | 556 - polymer-perf/eduke32/build/src/crc32.c | 26 - polymer-perf/eduke32/build/src/defs.c | 1940 --- polymer-perf/eduke32/build/src/dynamicgtk.c | 182 - polymer-perf/eduke32/build/src/engine.c | 13899 ---------------- polymer-perf/eduke32/build/src/engine_priv.h | 120 - polymer-perf/eduke32/build/src/glbuild.c | 1000 -- polymer-perf/eduke32/build/src/gtkbits.c | 89 - polymer-perf/eduke32/build/src/hightile.c | 305 - polymer-perf/eduke32/build/src/kplib.c | 3300 ---- polymer-perf/eduke32/build/src/lzwnew.c | 122 - polymer-perf/eduke32/build/src/md4.c | 275 - polymer-perf/eduke32/build/src/mdsprite.c | 3319 ---- .../eduke32/build/src/misc/buildres.rc | 33 - .../eduke32/build/src/misc/enumdisplay.c | 156 - .../eduke32/build/src/misc/gameres.rc | 31 - .../eduke32/build/src/misc/getdxdidf.c | 129 - .../src/misc/gtkstartwin/gtkstartwin.glade | 452 - .../src/misc/gtkstartwin/gtkstartwin.gladep | 11 - .../src/misc/gtkstartwin/pixmaps/game.bmp | Bin 40960 -> 0 bytes .../eduke32/build/src/misc/makesdlkeytrans.c | 163 - polymer-perf/eduke32/build/src/mutex.c | 35 - polymer-perf/eduke32/build/src/nedmalloc.c | 1603 -- polymer-perf/eduke32/build/src/osd.c | 2125 --- polymer-perf/eduke32/build/src/osxbits.m | 52 - polymer-perf/eduke32/build/src/polymer.c | 5375 ------ polymer-perf/eduke32/build/src/polymost.c | 6678 -------- polymer-perf/eduke32/build/src/pragmas.c | 245 - polymer-perf/eduke32/build/src/quicklz.c | 854 - polymer-perf/eduke32/build/src/rawinput.c | 293 - polymer-perf/eduke32/build/src/scriptfile.c | 422 - polymer-perf/eduke32/build/src/sdlayer.c | 2200 --- .../eduke32/build/src/smalltextfont.c | 180 - .../eduke32/build/src/startgtk.editor.c | 549 - .../eduke32/build/src/startwin.editor.c | 491 - polymer-perf/eduke32/build/src/textfont.c | 261 - polymer-perf/eduke32/build/src/tmp/keep.me | 0 .../eduke32/build/src/util/ase_import.py | 452 - polymer-perf/eduke32/build/src/util/bin2c.cpp | 151 - .../eduke32/build/src/util/cacheinfo.c | 90 - .../eduke32/build/src/util/generateicon.c | 111 - .../build/src/util/highpalookupmaker.py | 83 - .../eduke32/build/src/util/kextract.c | 148 - polymer-perf/eduke32/build/src/util/kgroup.c | 171 - .../eduke32/build/src/util/kmd2tool.c | 58 - polymer-perf/eduke32/build/src/util/md2tool.c | 249 - .../eduke32/build/src/util/md3_export.py | 1219 -- .../eduke32/build/src/util/prhighpal.py | 300 - .../eduke32/build/src/util/transpal.c | 270 - .../eduke32/build/src/util/vgafont.cpp | 139 - polymer-perf/eduke32/build/src/util/wad2art.c | 283 - polymer-perf/eduke32/build/src/util/wad2map.c | 1615 -- polymer-perf/eduke32/build/src/winlayer.c | 3789 ----- polymer-perf/eduke32/buildlic.txt | 71 - polymer-perf/eduke32/eduke32.sln | 20 - polymer-perf/eduke32/eduke32.vcproj | 848 - polymer-perf/eduke32/eduke32.vcxproj | 281 - polymer-perf/eduke32/eduke32.vcxproj.filters | 653 - polymer-perf/eduke32/eduke32.vcxproj.user | 3 - polymer-perf/eduke32/eobj/keep.me | 0 polymer-perf/eduke32/eobj_win/keep.me | 0 polymer-perf/eduke32/installer/eduke32.nsi | 179 - polymer-perf/eduke32/libiconv2.dll | Bin 898048 -> 0 bytes polymer-perf/eduke32/libintl3.dll | Bin 103424 -> 0 bytes polymer-perf/eduke32/m32help.hlp | 564 - polymer-perf/eduke32/names.h | 765 - polymer-perf/eduke32/nedmalloc.dll | Bin 88064 -> 0 bytes polymer-perf/eduke32/obj/keep.me | 0 polymer-perf/eduke32/obj_win/keep.me | 0 polymer-perf/eduke32/psd/game2.psd | Bin 4721930 -> 0 bytes polymer-perf/eduke32/psd/game3.psd | Bin 2920684 -> 0 bytes polymer-perf/eduke32/rsrc/build.bmp | Bin 29080 -> 0 bytes polymer-perf/eduke32/rsrc/build_icon.bmp | Bin 2102 -> 0 bytes polymer-perf/eduke32/rsrc/build_icon.c | 417 - polymer-perf/eduke32/rsrc/build_icon.ico | Bin 26694 -> 0 bytes polymer-perf/eduke32/rsrc/game.bmp | Bin 29080 -> 0 bytes polymer-perf/eduke32/rsrc/game_icon.c | 417 - polymer-perf/eduke32/rsrc/game_icon.ico | Bin 26694 -> 0 bytes polymer-perf/eduke32/rsrc/manifest.build.xml | 22 - polymer-perf/eduke32/rsrc/manifest.game.xml | 22 - polymer-perf/eduke32/samples/_clipshape0.map | Bin 23858 -> 0 bytes polymer-perf/eduke32/samples/a.m32 | 1145 -- .../eduke32/samples/duke3d.def.sample | 69 - .../eduke32/samples/enhance.con.sample | 389 - polymer-perf/eduke32/samples/m32script_ex.map | Bin 52514 -> 0 bytes polymer-perf/eduke32/samples/ror.map | Bin 3306 -> 0 bytes polymer-perf/eduke32/samples/spriteclip.txt | 66 - polymer-perf/eduke32/samples/tests.m32 | 177 - polymer-perf/eduke32/samples/tiles.cfg | 215 - polymer-perf/eduke32/source/GNU.TXT | 87 - polymer-perf/eduke32/source/_functio.h | 384 - polymer-perf/eduke32/source/_midi.h | 282 - polymer-perf/eduke32/source/_rts.h | 50 - polymer-perf/eduke32/source/actors.c | 8218 --------- polymer-perf/eduke32/source/actors.h | 202 - polymer-perf/eduke32/source/anim.c | 312 - polymer-perf/eduke32/source/anim.h | 35 - polymer-perf/eduke32/source/astub.c | 11497 ------------- polymer-perf/eduke32/source/config.c | 1065 -- polymer-perf/eduke32/source/config.h | 47 - polymer-perf/eduke32/source/demo.c | 702 - polymer-perf/eduke32/source/demo.h | 60 - polymer-perf/eduke32/source/duke3d.h | 128 - polymer-perf/eduke32/source/enet/Makefile | 48 - .../eduke32/source/enet/Makefile.msvc | 46 - .../source/enet/include/enet/callbacks.h | 27 - .../eduke32/source/enet/include/enet/enet.h | 540 - .../eduke32/source/enet/include/enet/list.h | 43 - .../source/enet/include/enet/protocol.h | 196 - .../eduke32/source/enet/include/enet/time.h | 18 - .../eduke32/source/enet/include/enet/types.h | 13 - .../eduke32/source/enet/include/enet/unix.h | 45 - .../source/enet/include/enet/utility.h | 12 - .../eduke32/source/enet/include/enet/win32.h | 60 - .../eduke32/source/enet/src/callbacks.c | 47 - .../eduke32/source/enet/src/compress.c | 654 - polymer-perf/eduke32/source/enet/src/host.c | 479 - polymer-perf/eduke32/source/enet/src/list.c | 75 - polymer-perf/eduke32/source/enet/src/packet.c | 157 - polymer-perf/eduke32/source/enet/src/peer.c | 818 - .../eduke32/source/enet/src/protocol.c | 1710 -- polymer-perf/eduke32/source/enet/src/unix.c | 438 - polymer-perf/eduke32/source/enet/src/win32.c | 348 - polymer-perf/eduke32/source/function.h | 106 - polymer-perf/eduke32/source/game.c | 11368 ------------- polymer-perf/eduke32/source/game.h | 338 - polymer-perf/eduke32/source/gamedef.c | 6443 ------- polymer-perf/eduke32/source/gamedef.h | 938 -- polymer-perf/eduke32/source/gamedefs.h | 181 - polymer-perf/eduke32/source/gameexec.c | 5187 ------ polymer-perf/eduke32/source/gameexec.h | 139 - polymer-perf/eduke32/source/gamestructures.c | 3822 ----- polymer-perf/eduke32/source/gamevars.c | 1689 -- polymer-perf/eduke32/source/gamevars.h | 97 - polymer-perf/eduke32/source/global.c | 192 - polymer-perf/eduke32/source/global.h | 145 - polymer-perf/eduke32/source/grpscan.c | 242 - polymer-perf/eduke32/source/grpscan.h | 39 - .../eduke32/source/jaudiolib/Makefile | 66 - .../eduke32/source/jaudiolib/Makefile.msvc | 50 - .../eduke32/source/jaudiolib/include/fx_man.h | 114 - .../source/jaudiolib/include/msvc/inttypes.h | 305 - .../source/jaudiolib/include/msvc/stdint.h | 247 - .../eduke32/source/jaudiolib/include/music.h | 92 - .../source/jaudiolib/include/sndcards.h | 45 - .../eduke32/source/jaudiolib/src/_multivc.h | 303 - .../source/jaudiolib/src/driver_directsound.c | 497 - .../source/jaudiolib/src/driver_directsound.h | 31 - .../source/jaudiolib/src/driver_nosound.c | 76 - .../source/jaudiolib/src/driver_nosound.h | 30 - .../eduke32/source/jaudiolib/src/driver_sdl.c | 279 - .../eduke32/source/jaudiolib/src/driver_sdl.h | 30 - .../eduke32/source/jaudiolib/src/drivers.c | 154 - .../eduke32/source/jaudiolib/src/drivers.h | 42 - .../eduke32/source/jaudiolib/src/fx_man.c | 1075 -- .../eduke32/source/jaudiolib/src/linklist.h | 118 - .../eduke32/source/jaudiolib/src/ll_man.h | 76 - .../eduke32/source/jaudiolib/src/mix.c | 353 - .../eduke32/source/jaudiolib/src/mixst.c | 297 - .../eduke32/source/jaudiolib/src/multivoc.c | 2765 --- .../eduke32/source/jaudiolib/src/multivoc.h | 124 - .../eduke32/source/jaudiolib/src/pitch.c | 112 - .../eduke32/source/jaudiolib/src/pitch.h | 47 - .../eduke32/source/jaudiolib/src/vorbis.c | 423 - .../source/jaudiolib/third-party/README.txt | 13 - .../mingw32/include/ogg/config_types.h | 11 - .../third-party/mingw32/include/ogg/ogg.h | 208 - .../mingw32/include/ogg/os_types.h | 148 - .../mingw32/include/vorbis/codec.h | 243 - .../mingw32/include/vorbis/vorbisfile.h | 206 - .../third-party/mingw32/lib/libogg.a | Bin 51492 -> 0 bytes .../third-party/mingw32/lib/libvorbis.a | Bin 176500 -> 0 bytes .../third-party/mingw32/lib/libvorbisfile.a | Bin 28858 -> 0 bytes .../third-party/ogg.framework/Headers | 1 - .../third-party/ogg.framework/Resources | 1 - .../ogg.framework/Versions/A/Headers/ogg.h | 202 - .../Versions/A/Headers/os_types.h | 127 - .../Resources/English.lproj/InfoPlist.strings | Bin 204 -> 0 bytes .../Versions/A/Resources/Info.plist | 22 - .../third-party/ogg.framework/Versions/A/ogg | Bin 48348 -> 0 bytes .../ogg.framework/Versions/Current | 1 - .../jaudiolib/third-party/ogg.framework/ogg | 1 - .../third-party/vorbis.framework/Headers | 1 - .../third-party/vorbis.framework/Resources | 1 - .../Versions/A/Headers/codec.h | 240 - .../Versions/A/Headers/vorbisenc.h | 112 - .../Versions/A/Headers/vorbisfile.h | 143 - .../Resources/English.lproj/InfoPlist.strings | Bin 204 -> 0 bytes .../Versions/A/Resources/Info.plist | 22 - .../vorbis.framework/Versions/A/vorbis | Bin 2639520 -> 0 bytes .../vorbis.framework/Versions/Current | 1 - .../third-party/vorbis.framework/vorbis | 1 - polymer-perf/eduke32/source/jmact/_control.h | 246 - polymer-perf/eduke32/source/jmact/_scrplib.h | 209 - polymer-perf/eduke32/source/jmact/animlib.c | 318 - polymer-perf/eduke32/source/jmact/animlib.h | 92 - polymer-perf/eduke32/source/jmact/control.c | 887 - polymer-perf/eduke32/source/jmact/control.h | 224 - polymer-perf/eduke32/source/jmact/file_lib.c | 143 - polymer-perf/eduke32/source/jmact/file_lib.h | 260 - polymer-perf/eduke32/source/jmact/keyboard.c | 286 - polymer-perf/eduke32/source/jmact/keyboard.h | 109 - polymer-perf/eduke32/source/jmact/mathutil.c | 59 - polymer-perf/eduke32/source/jmact/mathutil.h | 34 - polymer-perf/eduke32/source/jmact/mouse.c | 84 - polymer-perf/eduke32/source/jmact/mouse.h | 55 - polymer-perf/eduke32/source/jmact/scriplib.c | 937 -- polymer-perf/eduke32/source/jmact/scriplib.h | 293 - polymer-perf/eduke32/source/keys.h | 148 - polymer-perf/eduke32/source/m32def.c | 4000 ----- polymer-perf/eduke32/source/m32def.h | 557 - polymer-perf/eduke32/source/m32exec.c | 3051 ---- polymer-perf/eduke32/source/m32structures.c | 467 - polymer-perf/eduke32/source/m32vars.c | 694 - polymer-perf/eduke32/source/macros.h | 208 - polymer-perf/eduke32/source/mapster32.h | 219 - polymer-perf/eduke32/source/mdump.cpp | 114 - polymer-perf/eduke32/source/mdump.h | 30 - polymer-perf/eduke32/source/menus.c | 5392 ------ polymer-perf/eduke32/source/menus.h | 40 - polymer-perf/eduke32/source/midi.c | 2062 --- polymer-perf/eduke32/source/midi.h | 100 - polymer-perf/eduke32/source/misc/buildres.rc | 72 - polymer-perf/eduke32/source/misc/gameres.rc | 80 - .../source/misc/gtkstartwin/gtkstartwin.glade | 517 - .../misc/gtkstartwin/gtkstartwin.gladep | 11 - .../source/misc/gtkstartwin/pixmaps/game.bmp | Bin 29080 -> 0 bytes polymer-perf/eduke32/source/mpu401.c | 497 - polymer-perf/eduke32/source/mpu401.h | 68 - polymer-perf/eduke32/source/music.c | 597 - polymer-perf/eduke32/source/names.h | 762 - polymer-perf/eduke32/source/namesdyn.c | 1582 -- polymer-perf/eduke32/source/namesdyn.h | 1500 -- polymer-perf/eduke32/source/net.c | 3254 ---- polymer-perf/eduke32/source/net.h | 207 - polymer-perf/eduke32/source/old.diff | 177 - polymer-perf/eduke32/source/osdcmds.c | 1563 -- polymer-perf/eduke32/source/osdcmds.h | 50 - polymer-perf/eduke32/source/osdfuncs.c | 194 - polymer-perf/eduke32/source/osdfuncs.h | 34 - polymer-perf/eduke32/source/player.c | 6125 ------- polymer-perf/eduke32/source/player.h | 294 - polymer-perf/eduke32/source/premap.c | 1961 --- polymer-perf/eduke32/source/premap.h | 51 - polymer-perf/eduke32/source/quotes.h | 96 - polymer-perf/eduke32/source/rev.h | 1 - polymer-perf/eduke32/source/rts.c | 298 - polymer-perf/eduke32/source/rts.h | 83 - polymer-perf/eduke32/source/savegame.c | 2301 --- polymer-perf/eduke32/source/savegame.h | 46 - polymer-perf/eduke32/source/sdlmusic.c | 559 - polymer-perf/eduke32/source/sector.c | 3411 ---- polymer-perf/eduke32/source/sector.h | 118 - polymer-perf/eduke32/source/soundefs.h | 417 - polymer-perf/eduke32/source/sounds.c | 793 - polymer-perf/eduke32/source/sounds.h | 93 - .../eduke32/source/sounds_mapster32.c | 502 - .../eduke32/source/sounds_mapster32.h | 63 - polymer-perf/eduke32/source/standard.h | 73 - polymer-perf/eduke32/source/startgtk.game.c | 927 -- polymer-perf/eduke32/source/startwin.game.c | 805 - polymer-perf/eduke32/source/startwin.game.h | 47 - polymer-perf/eduke32/source/winbits.c | 129 - polymer-perf/synthesis.sh | 159 - 356 files changed, 239179 deletions(-) delete mode 100644 polymer-perf/eduke32/Apple/include/ogg/config_types.h delete mode 100644 polymer-perf/eduke32/Apple/include/ogg/ogg.h delete mode 100644 polymer-perf/eduke32/Apple/include/ogg/os_types.h delete mode 100644 polymer-perf/eduke32/Apple/include/vorbis/codec.h delete mode 100644 polymer-perf/eduke32/Apple/include/vorbis/vorbisenc.h delete mode 100644 polymer-perf/eduke32/Apple/include/vorbis/vorbisfile.h delete mode 100644 polymer-perf/eduke32/Apple/lib/libSDLmain.a delete mode 100644 polymer-perf/eduke32/Apple/lib/libogg.a delete mode 100644 polymer-perf/eduke32/Apple/lib/libvorbis.a delete mode 100644 polymer-perf/eduke32/Apple/lib/libvorbisenc.a delete mode 100644 polymer-perf/eduke32/Apple/lib/libvorbisfile.a delete mode 100644 polymer-perf/eduke32/ChangeLog delete mode 100644 polymer-perf/eduke32/ChangeLog.html delete mode 100644 polymer-perf/eduke32/GNU.TXT delete mode 100644 polymer-perf/eduke32/MakeDistributions delete mode 100644 polymer-perf/eduke32/Makefile delete mode 100644 polymer-perf/eduke32/Makefile.common delete mode 100644 polymer-perf/eduke32/Makefile.deps delete mode 100644 polymer-perf/eduke32/Makefile.msvc delete mode 100644 polymer-perf/eduke32/SEHELP.HLP delete mode 100644 polymer-perf/eduke32/STHELP.HLP delete mode 100644 polymer-perf/eduke32/backtrace.dll delete mode 100644 polymer-perf/eduke32/build/MakeDistributions delete mode 100644 polymer-perf/eduke32/build/Makefile delete mode 100644 polymer-perf/eduke32/build/Makefile.deps delete mode 100644 polymer-perf/eduke32/build/Makefile.msvc delete mode 100644 polymer-perf/eduke32/build/Makefile.shared delete mode 100644 polymer-perf/eduke32/build/buildlic.txt delete mode 100644 polymer-perf/eduke32/build/doc/build.txt delete mode 100644 polymer-perf/eduke32/build/doc/build2.txt delete mode 100644 polymer-perf/eduke32/build/doc/buildinf.txt delete mode 100644 polymer-perf/eduke32/build/include/a.h delete mode 100644 polymer-perf/eduke32/build/include/baselayer.h delete mode 100644 polymer-perf/eduke32/build/include/build.h delete mode 100644 polymer-perf/eduke32/build/include/cache1d.h delete mode 100644 polymer-perf/eduke32/build/include/compat.h delete mode 100644 polymer-perf/eduke32/build/include/crc32.h delete mode 100644 polymer-perf/eduke32/build/include/dxdidf.h delete mode 100644 polymer-perf/eduke32/build/include/dynamicgtk.h delete mode 100644 polymer-perf/eduke32/build/include/editor.h delete mode 100644 polymer-perf/eduke32/build/include/glbuild.h delete mode 100644 polymer-perf/eduke32/build/include/glext.h delete mode 100644 polymer-perf/eduke32/build/include/gtkbits.h delete mode 100644 polymer-perf/eduke32/build/include/hightile.h delete mode 100644 polymer-perf/eduke32/build/include/kplib.h delete mode 100644 polymer-perf/eduke32/build/include/lzwnew.h delete mode 100644 polymer-perf/eduke32/build/include/m32script.h delete mode 100644 polymer-perf/eduke32/build/include/malloc.c.h delete mode 100644 polymer-perf/eduke32/build/include/md4.h delete mode 100644 polymer-perf/eduke32/build/include/mdsprite.h delete mode 100644 polymer-perf/eduke32/build/include/msvc/inttypes.h delete mode 100644 polymer-perf/eduke32/build/include/msvc/stdint.h delete mode 100644 polymer-perf/eduke32/build/include/mutex.h delete mode 100644 polymer-perf/eduke32/build/include/nedmalloc.h delete mode 100644 polymer-perf/eduke32/build/include/osd.h delete mode 100644 polymer-perf/eduke32/build/include/osxbits.h delete mode 100644 polymer-perf/eduke32/build/include/osxmain.h delete mode 100644 polymer-perf/eduke32/build/include/polymer.h delete mode 100644 polymer-perf/eduke32/build/include/polymost.h delete mode 100644 polymer-perf/eduke32/build/include/pragmas.h delete mode 100644 polymer-perf/eduke32/build/include/prlights.h delete mode 100644 polymer-perf/eduke32/build/include/quicklz.h delete mode 100644 polymer-perf/eduke32/build/include/rawinput.h delete mode 100644 polymer-perf/eduke32/build/include/scancodes.h delete mode 100644 polymer-perf/eduke32/build/include/scriptfile.h delete mode 100644 polymer-perf/eduke32/build/include/sdl_inc.h delete mode 100644 polymer-perf/eduke32/build/include/sdlayer.h delete mode 100644 polymer-perf/eduke32/build/include/startwin.editor.h delete mode 100644 polymer-perf/eduke32/build/include/winlayer.h delete mode 100644 polymer-perf/eduke32/build/obj.gnu/keep.me delete mode 100644 polymer-perf/eduke32/build/obj.msc/keep.me delete mode 100644 polymer-perf/eduke32/build/rsrc/build.bmp delete mode 100644 polymer-perf/eduke32/build/rsrc/build.xcf delete mode 100644 polymer-perf/eduke32/build/rsrc/build_icon.bmp delete mode 100644 polymer-perf/eduke32/build/rsrc/build_icon.c delete mode 100644 polymer-perf/eduke32/build/rsrc/build_icon.ico delete mode 100644 polymer-perf/eduke32/build/rsrc/editor_banner.c delete mode 100644 polymer-perf/eduke32/build/rsrc/game.bmp delete mode 100644 polymer-perf/eduke32/build/rsrc/game.xcf delete mode 100644 polymer-perf/eduke32/build/rsrc/game_banner.c delete mode 100644 polymer-perf/eduke32/build/rsrc/game_icon.bmp delete mode 100644 polymer-perf/eduke32/build/rsrc/game_icon.c delete mode 100644 polymer-perf/eduke32/build/rsrc/game_icon.ico delete mode 100644 polymer-perf/eduke32/build/src/StartupWinController.editor.m delete mode 100644 polymer-perf/eduke32/build/src/a-c.c delete mode 100644 polymer-perf/eduke32/build/src/a.masm delete mode 100644 polymer-perf/eduke32/build/src/a.nasm delete mode 100644 polymer-perf/eduke32/build/src/a.wasm delete mode 100644 polymer-perf/eduke32/build/src/baselayer.c delete mode 100644 polymer-perf/eduke32/build/src/build.c delete mode 100644 polymer-perf/eduke32/build/src/cache1d.c delete mode 100644 polymer-perf/eduke32/build/src/compat.c delete mode 100644 polymer-perf/eduke32/build/src/config.c delete mode 100644 polymer-perf/eduke32/build/src/crc32.c delete mode 100644 polymer-perf/eduke32/build/src/defs.c delete mode 100644 polymer-perf/eduke32/build/src/dynamicgtk.c delete mode 100644 polymer-perf/eduke32/build/src/engine.c delete mode 100644 polymer-perf/eduke32/build/src/engine_priv.h delete mode 100644 polymer-perf/eduke32/build/src/glbuild.c delete mode 100644 polymer-perf/eduke32/build/src/gtkbits.c delete mode 100644 polymer-perf/eduke32/build/src/hightile.c delete mode 100644 polymer-perf/eduke32/build/src/kplib.c delete mode 100644 polymer-perf/eduke32/build/src/lzwnew.c delete mode 100644 polymer-perf/eduke32/build/src/md4.c delete mode 100644 polymer-perf/eduke32/build/src/mdsprite.c delete mode 100644 polymer-perf/eduke32/build/src/misc/buildres.rc delete mode 100644 polymer-perf/eduke32/build/src/misc/enumdisplay.c delete mode 100644 polymer-perf/eduke32/build/src/misc/gameres.rc delete mode 100644 polymer-perf/eduke32/build/src/misc/getdxdidf.c delete mode 100644 polymer-perf/eduke32/build/src/misc/gtkstartwin/gtkstartwin.glade delete mode 100644 polymer-perf/eduke32/build/src/misc/gtkstartwin/gtkstartwin.gladep delete mode 100644 polymer-perf/eduke32/build/src/misc/gtkstartwin/pixmaps/game.bmp delete mode 100644 polymer-perf/eduke32/build/src/misc/makesdlkeytrans.c delete mode 100644 polymer-perf/eduke32/build/src/mutex.c delete mode 100644 polymer-perf/eduke32/build/src/nedmalloc.c delete mode 100644 polymer-perf/eduke32/build/src/osd.c delete mode 100644 polymer-perf/eduke32/build/src/osxbits.m delete mode 100644 polymer-perf/eduke32/build/src/polymer.c delete mode 100644 polymer-perf/eduke32/build/src/polymost.c delete mode 100644 polymer-perf/eduke32/build/src/pragmas.c delete mode 100644 polymer-perf/eduke32/build/src/quicklz.c delete mode 100644 polymer-perf/eduke32/build/src/rawinput.c delete mode 100644 polymer-perf/eduke32/build/src/scriptfile.c delete mode 100644 polymer-perf/eduke32/build/src/sdlayer.c delete mode 100644 polymer-perf/eduke32/build/src/smalltextfont.c delete mode 100644 polymer-perf/eduke32/build/src/startgtk.editor.c delete mode 100644 polymer-perf/eduke32/build/src/startwin.editor.c delete mode 100644 polymer-perf/eduke32/build/src/textfont.c delete mode 100644 polymer-perf/eduke32/build/src/tmp/keep.me delete mode 100755 polymer-perf/eduke32/build/src/util/ase_import.py delete mode 100644 polymer-perf/eduke32/build/src/util/bin2c.cpp delete mode 100644 polymer-perf/eduke32/build/src/util/cacheinfo.c delete mode 100644 polymer-perf/eduke32/build/src/util/generateicon.c delete mode 100644 polymer-perf/eduke32/build/src/util/highpalookupmaker.py delete mode 100644 polymer-perf/eduke32/build/src/util/kextract.c delete mode 100644 polymer-perf/eduke32/build/src/util/kgroup.c delete mode 100644 polymer-perf/eduke32/build/src/util/kmd2tool.c delete mode 100644 polymer-perf/eduke32/build/src/util/md2tool.c delete mode 100644 polymer-perf/eduke32/build/src/util/md3_export.py delete mode 100755 polymer-perf/eduke32/build/src/util/prhighpal.py delete mode 100644 polymer-perf/eduke32/build/src/util/transpal.c delete mode 100644 polymer-perf/eduke32/build/src/util/vgafont.cpp delete mode 100644 polymer-perf/eduke32/build/src/util/wad2art.c delete mode 100644 polymer-perf/eduke32/build/src/util/wad2map.c delete mode 100644 polymer-perf/eduke32/build/src/winlayer.c delete mode 100644 polymer-perf/eduke32/buildlic.txt delete mode 100644 polymer-perf/eduke32/eduke32.sln delete mode 100644 polymer-perf/eduke32/eduke32.vcproj delete mode 100644 polymer-perf/eduke32/eduke32.vcxproj delete mode 100644 polymer-perf/eduke32/eduke32.vcxproj.filters delete mode 100644 polymer-perf/eduke32/eduke32.vcxproj.user delete mode 100644 polymer-perf/eduke32/eobj/keep.me delete mode 100644 polymer-perf/eduke32/eobj_win/keep.me delete mode 100644 polymer-perf/eduke32/installer/eduke32.nsi delete mode 100644 polymer-perf/eduke32/libiconv2.dll delete mode 100644 polymer-perf/eduke32/libintl3.dll delete mode 100644 polymer-perf/eduke32/m32help.hlp delete mode 100644 polymer-perf/eduke32/names.h delete mode 100644 polymer-perf/eduke32/nedmalloc.dll delete mode 100644 polymer-perf/eduke32/obj/keep.me delete mode 100644 polymer-perf/eduke32/obj_win/keep.me delete mode 100644 polymer-perf/eduke32/psd/game2.psd delete mode 100644 polymer-perf/eduke32/psd/game3.psd delete mode 100644 polymer-perf/eduke32/rsrc/build.bmp delete mode 100644 polymer-perf/eduke32/rsrc/build_icon.bmp delete mode 100644 polymer-perf/eduke32/rsrc/build_icon.c delete mode 100644 polymer-perf/eduke32/rsrc/build_icon.ico delete mode 100644 polymer-perf/eduke32/rsrc/game.bmp delete mode 100644 polymer-perf/eduke32/rsrc/game_icon.c delete mode 100644 polymer-perf/eduke32/rsrc/game_icon.ico delete mode 100644 polymer-perf/eduke32/rsrc/manifest.build.xml delete mode 100644 polymer-perf/eduke32/rsrc/manifest.game.xml delete mode 100644 polymer-perf/eduke32/samples/_clipshape0.map delete mode 100644 polymer-perf/eduke32/samples/a.m32 delete mode 100644 polymer-perf/eduke32/samples/duke3d.def.sample delete mode 100644 polymer-perf/eduke32/samples/enhance.con.sample delete mode 100644 polymer-perf/eduke32/samples/m32script_ex.map delete mode 100644 polymer-perf/eduke32/samples/ror.map delete mode 100644 polymer-perf/eduke32/samples/spriteclip.txt delete mode 100644 polymer-perf/eduke32/samples/tests.m32 delete mode 100644 polymer-perf/eduke32/samples/tiles.cfg delete mode 100644 polymer-perf/eduke32/source/GNU.TXT delete mode 100644 polymer-perf/eduke32/source/_functio.h delete mode 100644 polymer-perf/eduke32/source/_midi.h delete mode 100644 polymer-perf/eduke32/source/_rts.h delete mode 100644 polymer-perf/eduke32/source/actors.c delete mode 100644 polymer-perf/eduke32/source/actors.h delete mode 100644 polymer-perf/eduke32/source/anim.c delete mode 100644 polymer-perf/eduke32/source/anim.h delete mode 100644 polymer-perf/eduke32/source/astub.c delete mode 100644 polymer-perf/eduke32/source/config.c delete mode 100644 polymer-perf/eduke32/source/config.h delete mode 100644 polymer-perf/eduke32/source/demo.c delete mode 100644 polymer-perf/eduke32/source/demo.h delete mode 100644 polymer-perf/eduke32/source/duke3d.h delete mode 100644 polymer-perf/eduke32/source/enet/Makefile delete mode 100644 polymer-perf/eduke32/source/enet/Makefile.msvc delete mode 100644 polymer-perf/eduke32/source/enet/include/enet/callbacks.h delete mode 100644 polymer-perf/eduke32/source/enet/include/enet/enet.h delete mode 100644 polymer-perf/eduke32/source/enet/include/enet/list.h delete mode 100644 polymer-perf/eduke32/source/enet/include/enet/protocol.h delete mode 100644 polymer-perf/eduke32/source/enet/include/enet/time.h delete mode 100644 polymer-perf/eduke32/source/enet/include/enet/types.h delete mode 100644 polymer-perf/eduke32/source/enet/include/enet/unix.h delete mode 100644 polymer-perf/eduke32/source/enet/include/enet/utility.h delete mode 100644 polymer-perf/eduke32/source/enet/include/enet/win32.h delete mode 100644 polymer-perf/eduke32/source/enet/src/callbacks.c delete mode 100644 polymer-perf/eduke32/source/enet/src/compress.c delete mode 100644 polymer-perf/eduke32/source/enet/src/host.c delete mode 100644 polymer-perf/eduke32/source/enet/src/list.c delete mode 100644 polymer-perf/eduke32/source/enet/src/packet.c delete mode 100644 polymer-perf/eduke32/source/enet/src/peer.c delete mode 100644 polymer-perf/eduke32/source/enet/src/protocol.c delete mode 100644 polymer-perf/eduke32/source/enet/src/unix.c delete mode 100644 polymer-perf/eduke32/source/enet/src/win32.c delete mode 100644 polymer-perf/eduke32/source/function.h delete mode 100644 polymer-perf/eduke32/source/game.c delete mode 100644 polymer-perf/eduke32/source/game.h delete mode 100644 polymer-perf/eduke32/source/gamedef.c delete mode 100644 polymer-perf/eduke32/source/gamedef.h delete mode 100644 polymer-perf/eduke32/source/gamedefs.h delete mode 100644 polymer-perf/eduke32/source/gameexec.c delete mode 100644 polymer-perf/eduke32/source/gameexec.h delete mode 100644 polymer-perf/eduke32/source/gamestructures.c delete mode 100644 polymer-perf/eduke32/source/gamevars.c delete mode 100644 polymer-perf/eduke32/source/gamevars.h delete mode 100644 polymer-perf/eduke32/source/global.c delete mode 100644 polymer-perf/eduke32/source/global.h delete mode 100644 polymer-perf/eduke32/source/grpscan.c delete mode 100644 polymer-perf/eduke32/source/grpscan.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/Makefile delete mode 100644 polymer-perf/eduke32/source/jaudiolib/Makefile.msvc delete mode 100644 polymer-perf/eduke32/source/jaudiolib/include/fx_man.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/include/msvc/inttypes.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/include/msvc/stdint.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/include/music.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/include/sndcards.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/_multivc.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/driver_directsound.c delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/driver_directsound.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/driver_nosound.c delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/driver_nosound.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/driver_sdl.c delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/driver_sdl.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/drivers.c delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/drivers.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/fx_man.c delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/linklist.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/ll_man.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/mix.c delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/mixst.c delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/multivoc.c delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/multivoc.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/pitch.c delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/pitch.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/src/vorbis.c delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/README.txt delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/config_types.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/ogg.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/os_types.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/vorbis/codec.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/vorbis/vorbisfile.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/lib/libogg.a delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/lib/libvorbis.a delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/lib/libvorbisfile.a delete mode 120000 polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Headers delete mode 120000 polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Resources delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Headers/ogg.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Headers/os_types.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Resources/English.lproj/InfoPlist.strings delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Resources/Info.plist delete mode 100755 polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/ogg delete mode 120000 polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/Current delete mode 120000 polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/ogg delete mode 120000 polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Headers delete mode 120000 polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Resources delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/codec.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/vorbisenc.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/vorbisfile.h delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Resources/English.lproj/InfoPlist.strings delete mode 100644 polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Resources/Info.plist delete mode 100755 polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/vorbis delete mode 120000 polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/Current delete mode 120000 polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/vorbis delete mode 100644 polymer-perf/eduke32/source/jmact/_control.h delete mode 100644 polymer-perf/eduke32/source/jmact/_scrplib.h delete mode 100644 polymer-perf/eduke32/source/jmact/animlib.c delete mode 100644 polymer-perf/eduke32/source/jmact/animlib.h delete mode 100644 polymer-perf/eduke32/source/jmact/control.c delete mode 100644 polymer-perf/eduke32/source/jmact/control.h delete mode 100644 polymer-perf/eduke32/source/jmact/file_lib.c delete mode 100644 polymer-perf/eduke32/source/jmact/file_lib.h delete mode 100644 polymer-perf/eduke32/source/jmact/keyboard.c delete mode 100644 polymer-perf/eduke32/source/jmact/keyboard.h delete mode 100644 polymer-perf/eduke32/source/jmact/mathutil.c delete mode 100644 polymer-perf/eduke32/source/jmact/mathutil.h delete mode 100644 polymer-perf/eduke32/source/jmact/mouse.c delete mode 100644 polymer-perf/eduke32/source/jmact/mouse.h delete mode 100644 polymer-perf/eduke32/source/jmact/scriplib.c delete mode 100644 polymer-perf/eduke32/source/jmact/scriplib.h delete mode 100644 polymer-perf/eduke32/source/keys.h delete mode 100644 polymer-perf/eduke32/source/m32def.c delete mode 100644 polymer-perf/eduke32/source/m32def.h delete mode 100644 polymer-perf/eduke32/source/m32exec.c delete mode 100644 polymer-perf/eduke32/source/m32structures.c delete mode 100644 polymer-perf/eduke32/source/m32vars.c delete mode 100644 polymer-perf/eduke32/source/macros.h delete mode 100644 polymer-perf/eduke32/source/mapster32.h delete mode 100644 polymer-perf/eduke32/source/mdump.cpp delete mode 100644 polymer-perf/eduke32/source/mdump.h delete mode 100644 polymer-perf/eduke32/source/menus.c delete mode 100644 polymer-perf/eduke32/source/menus.h delete mode 100644 polymer-perf/eduke32/source/midi.c delete mode 100644 polymer-perf/eduke32/source/midi.h delete mode 100644 polymer-perf/eduke32/source/misc/buildres.rc delete mode 100644 polymer-perf/eduke32/source/misc/gameres.rc delete mode 100644 polymer-perf/eduke32/source/misc/gtkstartwin/gtkstartwin.glade delete mode 100644 polymer-perf/eduke32/source/misc/gtkstartwin/gtkstartwin.gladep delete mode 100644 polymer-perf/eduke32/source/misc/gtkstartwin/pixmaps/game.bmp delete mode 100644 polymer-perf/eduke32/source/mpu401.c delete mode 100644 polymer-perf/eduke32/source/mpu401.h delete mode 100644 polymer-perf/eduke32/source/music.c delete mode 100644 polymer-perf/eduke32/source/names.h delete mode 100644 polymer-perf/eduke32/source/namesdyn.c delete mode 100644 polymer-perf/eduke32/source/namesdyn.h delete mode 100644 polymer-perf/eduke32/source/net.c delete mode 100644 polymer-perf/eduke32/source/net.h delete mode 100644 polymer-perf/eduke32/source/old.diff delete mode 100644 polymer-perf/eduke32/source/osdcmds.c delete mode 100644 polymer-perf/eduke32/source/osdcmds.h delete mode 100644 polymer-perf/eduke32/source/osdfuncs.c delete mode 100644 polymer-perf/eduke32/source/osdfuncs.h delete mode 100644 polymer-perf/eduke32/source/player.c delete mode 100644 polymer-perf/eduke32/source/player.h delete mode 100644 polymer-perf/eduke32/source/premap.c delete mode 100644 polymer-perf/eduke32/source/premap.h delete mode 100644 polymer-perf/eduke32/source/quotes.h delete mode 100644 polymer-perf/eduke32/source/rev.h delete mode 100644 polymer-perf/eduke32/source/rts.c delete mode 100644 polymer-perf/eduke32/source/rts.h delete mode 100644 polymer-perf/eduke32/source/savegame.c delete mode 100644 polymer-perf/eduke32/source/savegame.h delete mode 100644 polymer-perf/eduke32/source/sdlmusic.c delete mode 100644 polymer-perf/eduke32/source/sector.c delete mode 100644 polymer-perf/eduke32/source/sector.h delete mode 100644 polymer-perf/eduke32/source/soundefs.h delete mode 100644 polymer-perf/eduke32/source/sounds.c delete mode 100644 polymer-perf/eduke32/source/sounds.h delete mode 100644 polymer-perf/eduke32/source/sounds_mapster32.c delete mode 100644 polymer-perf/eduke32/source/sounds_mapster32.h delete mode 100644 polymer-perf/eduke32/source/standard.h delete mode 100644 polymer-perf/eduke32/source/startgtk.game.c delete mode 100644 polymer-perf/eduke32/source/startwin.game.c delete mode 100644 polymer-perf/eduke32/source/startwin.game.h delete mode 100644 polymer-perf/eduke32/source/winbits.c delete mode 100755 polymer-perf/synthesis.sh diff --git a/polymer-perf/eduke32/Apple/include/ogg/config_types.h b/polymer-perf/eduke32/Apple/include/ogg/config_types.h deleted file mode 100644 index 496e900f2..000000000 --- a/polymer-perf/eduke32/Apple/include/ogg/config_types.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __CONFIG_TYPES_H__ -#define __CONFIG_TYPES_H__ - -/* these are filled in by configure */ -typedef int16_t ogg_int16_t; -typedef u_int16_t ogg_uint16_t; -typedef int32_t ogg_int32_t; -typedef u_int32_t ogg_uint32_t; -typedef int64_t ogg_int64_t; - -#endif diff --git a/polymer-perf/eduke32/Apple/include/ogg/ogg.h b/polymer-perf/eduke32/Apple/include/ogg/ogg.h deleted file mode 100644 index 9082679d9..000000000 --- a/polymer-perf/eduke32/Apple/include/ogg/ogg.h +++ /dev/null @@ -1,202 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: toplevel libogg include - last mod: $Id: ogg.h 7188 2004-07-20 07:26:04Z xiphmont $ - - ********************************************************************/ -#ifndef _OGG_H -#define _OGG_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -typedef struct { - long endbyte; - int endbit; - - unsigned char *buffer; - unsigned char *ptr; - long storage; -} oggpack_buffer; - -/* ogg_page is used to encapsulate the data in one Ogg bitstream page *****/ - -typedef struct { - unsigned char *header; - long header_len; - unsigned char *body; - long body_len; -} ogg_page; - -/* ogg_stream_state contains the current encode/decode state of a logical - Ogg bitstream **********************************************************/ - -typedef struct { - unsigned char *body_data; /* bytes from packet bodies */ - long body_storage; /* storage elements allocated */ - long body_fill; /* elements stored; fill mark */ - long body_returned; /* elements of fill returned */ - - - int *lacing_vals; /* The values that will go to the segment table */ - ogg_int64_t *granule_vals; /* granulepos values for headers. Not compact - this way, but it is simple coupled to the - lacing fifo */ - long lacing_storage; - long lacing_fill; - long lacing_packet; - long lacing_returned; - - unsigned char header[282]; /* working space for header encode */ - int header_fill; - - int e_o_s; /* set when we have buffered the last packet in the - logical bitstream */ - int b_o_s; /* set after we've written the initial page - of a logical bitstream */ - long serialno; - long pageno; - ogg_int64_t packetno; /* sequence number for decode; the framing - knows where there's a hole in the data, - but we need coupling so that the codec - (which is in a seperate abstraction - layer) also knows about the gap */ - ogg_int64_t granulepos; - -} ogg_stream_state; - -/* ogg_packet is used to encapsulate the data and metadata belonging - to a single raw Ogg/Vorbis packet *************************************/ - -typedef struct { - unsigned char *packet; - long bytes; - long b_o_s; - long e_o_s; - - ogg_int64_t granulepos; - - ogg_int64_t packetno; /* sequence number for decode; the framing - knows where there's a hole in the data, - but we need coupling so that the codec - (which is in a seperate abstraction - layer) also knows about the gap */ -} ogg_packet; - -typedef struct { - unsigned char *data; - int storage; - int fill; - int returned; - - int unsynced; - int headerbytes; - int bodybytes; -} ogg_sync_state; - -/* Ogg BITSTREAM PRIMITIVES: bitstream ************************/ - -extern void oggpack_writeinit(oggpack_buffer *b); -extern void oggpack_writetrunc(oggpack_buffer *b,long bits); -extern void oggpack_writealign(oggpack_buffer *b); -extern void oggpack_writecopy(oggpack_buffer *b,void *source,long bits); -extern void oggpack_reset(oggpack_buffer *b); -extern void oggpack_writeclear(oggpack_buffer *b); -extern void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes); -extern void oggpack_write(oggpack_buffer *b,unsigned long value,int bits); -extern long oggpack_look(oggpack_buffer *b,int bits); -extern long oggpack_look1(oggpack_buffer *b); -extern void oggpack_adv(oggpack_buffer *b,int bits); -extern void oggpack_adv1(oggpack_buffer *b); -extern long oggpack_read(oggpack_buffer *b,int bits); -extern long oggpack_read1(oggpack_buffer *b); -extern long oggpack_bytes(oggpack_buffer *b); -extern long oggpack_bits(oggpack_buffer *b); -extern unsigned char *oggpack_get_buffer(oggpack_buffer *b); - -extern void oggpackB_writeinit(oggpack_buffer *b); -extern void oggpackB_writetrunc(oggpack_buffer *b,long bits); -extern void oggpackB_writealign(oggpack_buffer *b); -extern void oggpackB_writecopy(oggpack_buffer *b,void *source,long bits); -extern void oggpackB_reset(oggpack_buffer *b); -extern void oggpackB_writeclear(oggpack_buffer *b); -extern void oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes); -extern void oggpackB_write(oggpack_buffer *b,unsigned long value,int bits); -extern long oggpackB_look(oggpack_buffer *b,int bits); -extern long oggpackB_look1(oggpack_buffer *b); -extern void oggpackB_adv(oggpack_buffer *b,int bits); -extern void oggpackB_adv1(oggpack_buffer *b); -extern long oggpackB_read(oggpack_buffer *b,int bits); -extern long oggpackB_read1(oggpack_buffer *b); -extern long oggpackB_bytes(oggpack_buffer *b); -extern long oggpackB_bits(oggpack_buffer *b); -extern unsigned char *oggpackB_get_buffer(oggpack_buffer *b); - -/* Ogg BITSTREAM PRIMITIVES: encoding **************************/ - -extern int ogg_stream_packetin(ogg_stream_state *os, ogg_packet *op); -extern int ogg_stream_pageout(ogg_stream_state *os, ogg_page *og); -extern int ogg_stream_flush(ogg_stream_state *os, ogg_page *og); - -/* Ogg BITSTREAM PRIMITIVES: decoding **************************/ - -extern int ogg_sync_init(ogg_sync_state *oy); -extern int ogg_sync_clear(ogg_sync_state *oy); -extern int ogg_sync_reset(ogg_sync_state *oy); -extern int ogg_sync_destroy(ogg_sync_state *oy); - -extern char *ogg_sync_buffer(ogg_sync_state *oy, long size); -extern int ogg_sync_wrote(ogg_sync_state *oy, long bytes); -extern long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og); -extern int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og); -extern int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og); -extern int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op); -extern int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op); - -/* Ogg BITSTREAM PRIMITIVES: general ***************************/ - -extern int ogg_stream_init(ogg_stream_state *os,int serialno); -extern int ogg_stream_clear(ogg_stream_state *os); -extern int ogg_stream_reset(ogg_stream_state *os); -extern int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno); -extern int ogg_stream_destroy(ogg_stream_state *os); -extern int ogg_stream_eos(ogg_stream_state *os); - -extern void ogg_page_checksum_set(ogg_page *og); - -extern int ogg_page_version(ogg_page *og); -extern int ogg_page_continued(ogg_page *og); -extern int ogg_page_bos(ogg_page *og); -extern int ogg_page_eos(ogg_page *og); -extern ogg_int64_t ogg_page_granulepos(ogg_page *og); -extern int ogg_page_serialno(ogg_page *og); -extern long ogg_page_pageno(ogg_page *og); -extern int ogg_page_packets(ogg_page *og); - -extern void ogg_packet_clear(ogg_packet *op); - - -#ifdef __cplusplus -} -#endif - -#endif /* _OGG_H */ - - - - - - diff --git a/polymer-perf/eduke32/Apple/include/ogg/os_types.h b/polymer-perf/eduke32/Apple/include/ogg/os_types.h deleted file mode 100644 index 32dcb8bff..000000000 --- a/polymer-perf/eduke32/Apple/include/ogg/os_types.h +++ /dev/null @@ -1,127 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: #ifdef jail to whip a few platforms into the UNIX ideal. - last mod: $Id: os_types.h 7524 2004-08-11 04:20:36Z conrad $ - - ********************************************************************/ -#ifndef _OS_TYPES_H -#define _OS_TYPES_H - -/* make it easy on the folks that want to compile the libs with a - different malloc than stdlib */ -#define _ogg_malloc malloc -#define _ogg_calloc calloc -#define _ogg_realloc realloc -#define _ogg_free free - -#if defined(_WIN32) - -# if defined(__CYGWIN__) -# include <_G_config.h> - typedef _G_int64_t ogg_int64_t; - typedef _G_int32_t ogg_int32_t; - typedef _G_uint32_t ogg_uint32_t; - typedef _G_int16_t ogg_int16_t; - typedef _G_uint16_t ogg_uint16_t; -# elif defined(__MINGW32__) - typedef short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long ogg_int64_t; - typedef unsigned long long ogg_uint64_t; -# elif defined(__MWERKS__) - typedef long long ogg_int64_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef short ogg_int16_t; - typedef unsigned short ogg_uint16_t; -# else - /* MSVC/Borland */ - typedef __int64 ogg_int64_t; - typedef __int32 ogg_int32_t; - typedef unsigned __int32 ogg_uint32_t; - typedef __int16 ogg_int16_t; - typedef unsigned __int16 ogg_uint16_t; -# endif - -#elif defined(__MACOS__) - -# include - typedef SInt16 ogg_int16_t; - typedef UInt16 ogg_uint16_t; - typedef SInt32 ogg_int32_t; - typedef UInt32 ogg_uint32_t; - typedef SInt64 ogg_int64_t; - -#elif defined(__MACOSX__) /* MacOS X Framework build */ - -# include - typedef int16_t ogg_int16_t; - typedef u_int16_t ogg_uint16_t; - typedef int32_t ogg_int32_t; - typedef u_int32_t ogg_uint32_t; - typedef int64_t ogg_int64_t; - -#elif defined(__BEOS__) - - /* Be */ -# include - typedef int16_t ogg_int16_t; - typedef u_int16_t ogg_uint16_t; - typedef int32_t ogg_int32_t; - typedef u_int32_t ogg_uint32_t; - typedef int64_t ogg_int64_t; - -#elif defined (__EMX__) - - /* OS/2 GCC */ - typedef short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long ogg_int64_t; - -#elif defined (DJGPP) - - /* DJGPP */ - typedef short ogg_int16_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long ogg_int64_t; - -#elif defined(R5900) - - /* PS2 EE */ - typedef long ogg_int64_t; - typedef int ogg_int32_t; - typedef unsigned ogg_uint32_t; - typedef short ogg_int16_t; - -#elif defined(__SYMBIAN32__) - - /* Symbian GCC */ - typedef signed short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef signed int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long int ogg_int64_t; - -#else - -# include -# include - -#endif - -#endif /* _OS_TYPES_H */ diff --git a/polymer-perf/eduke32/Apple/include/vorbis/codec.h b/polymer-perf/eduke32/Apple/include/vorbis/codec.h deleted file mode 100644 index b23fe0af7..000000000 --- a/polymer-perf/eduke32/Apple/include/vorbis/codec.h +++ /dev/null @@ -1,241 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - - ******************************************************************** - - function: libvorbis codec headers - last mod: $Id: codec.h 13293 2007-07-24 00:09:47Z xiphmont $ - - ********************************************************************/ - -#ifndef _vorbis_codec_h_ -#define _vorbis_codec_h_ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -#include - -typedef struct vorbis_info{ - int version; - int channels; - long rate; - - /* The below bitrate declarations are *hints*. - Combinations of the three values carry the following implications: - - all three set to the same value: - implies a fixed rate bitstream - only nominal set: - implies a VBR stream that averages the nominal bitrate. No hard - upper/lower limit - upper and or lower set: - implies a VBR bitstream that obeys the bitrate limits. nominal - may also be set to give a nominal rate. - none set: - the coder does not care to speculate. - */ - - long bitrate_upper; - long bitrate_nominal; - long bitrate_lower; - long bitrate_window; - - void *codec_setup; -} vorbis_info; - -/* vorbis_dsp_state buffers the current vorbis audio - analysis/synthesis state. The DSP state belongs to a specific - logical bitstream ****************************************************/ -typedef struct vorbis_dsp_state{ - int analysisp; - vorbis_info *vi; - - float **pcm; - float **pcmret; - int pcm_storage; - int pcm_current; - int pcm_returned; - - int preextrapolate; - int eofflag; - - long lW; - long W; - long nW; - long centerW; - - ogg_int64_t granulepos; - ogg_int64_t sequence; - - ogg_int64_t glue_bits; - ogg_int64_t time_bits; - ogg_int64_t floor_bits; - ogg_int64_t res_bits; - - void *backend_state; -} vorbis_dsp_state; - -typedef struct vorbis_block{ - /* necessary stream state for linking to the framing abstraction */ - float **pcm; /* this is a pointer into local storage */ - oggpack_buffer opb; - - long lW; - long W; - long nW; - int pcmend; - int mode; - - int eofflag; - ogg_int64_t granulepos; - ogg_int64_t sequence; - vorbis_dsp_state *vd; /* For read-only access of configuration */ - - /* local storage to avoid remallocing; it's up to the mapping to - structure it */ - void *localstore; - long localtop; - long localalloc; - long totaluse; - struct alloc_chain *reap; - - /* bitmetrics for the frame */ - long glue_bits; - long time_bits; - long floor_bits; - long res_bits; - - void *internal; - -} vorbis_block; - -/* vorbis_block is a single block of data to be processed as part of -the analysis/synthesis stream; it belongs to a specific logical -bitstream, but is independant from other vorbis_blocks belonging to -that logical bitstream. *************************************************/ - -struct alloc_chain{ - void *ptr; - struct alloc_chain *next; -}; - -/* vorbis_info contains all the setup information specific to the - specific compression/decompression mode in progress (eg, - psychoacoustic settings, channel setup, options, codebook - etc). vorbis_info and substructures are in backends.h. -*********************************************************************/ - -/* the comments are not part of vorbis_info so that vorbis_info can be - static storage */ -typedef struct vorbis_comment{ - /* unlimited user comment fields. libvorbis writes 'libvorbis' - whatever vendor is set to in encode */ - char **user_comments; - int *comment_lengths; - int comments; - char *vendor; - -} vorbis_comment; - - -/* libvorbis encodes in two abstraction layers; first we perform DSP - and produce a packet (see docs/analysis.txt). The packet is then - coded into a framed OggSquish bitstream by the second layer (see - docs/framing.txt). Decode is the reverse process; we sync/frame - the bitstream and extract individual packets, then decode the - packet back into PCM audio. - - The extra framing/packetizing is used in streaming formats, such as - files. Over the net (such as with UDP), the framing and - packetization aren't necessary as they're provided by the transport - and the streaming layer is not used */ - -/* Vorbis PRIMITIVES: general ***************************************/ - -extern void vorbis_info_init(vorbis_info *vi); -extern void vorbis_info_clear(vorbis_info *vi); -extern int vorbis_info_blocksize(vorbis_info *vi,int zo); -extern void vorbis_comment_init(vorbis_comment *vc); -extern void vorbis_comment_add(vorbis_comment *vc, char *comment); -extern void vorbis_comment_add_tag(vorbis_comment *vc, - char *tag, char *contents); -extern char *vorbis_comment_query(vorbis_comment *vc, char *tag, int count); -extern int vorbis_comment_query_count(vorbis_comment *vc, char *tag); -extern void vorbis_comment_clear(vorbis_comment *vc); - -extern int vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb); -extern int vorbis_block_clear(vorbis_block *vb); -extern void vorbis_dsp_clear(vorbis_dsp_state *v); -extern double vorbis_granule_time(vorbis_dsp_state *v, - ogg_int64_t granulepos); - -/* Vorbis PRIMITIVES: analysis/DSP layer ****************************/ - -extern int vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi); -extern int vorbis_commentheader_out(vorbis_comment *vc, ogg_packet *op); -extern int vorbis_analysis_headerout(vorbis_dsp_state *v, - vorbis_comment *vc, - ogg_packet *op, - ogg_packet *op_comm, - ogg_packet *op_code); -extern float **vorbis_analysis_buffer(vorbis_dsp_state *v,int vals); -extern int vorbis_analysis_wrote(vorbis_dsp_state *v,int vals); -extern int vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb); -extern int vorbis_analysis(vorbis_block *vb,ogg_packet *op); - -extern int vorbis_bitrate_addblock(vorbis_block *vb); -extern int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd, - ogg_packet *op); - -/* Vorbis PRIMITIVES: synthesis layer *******************************/ -extern int vorbis_synthesis_idheader(ogg_packet *op); -extern int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc, - ogg_packet *op); - -extern int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi); -extern int vorbis_synthesis_restart(vorbis_dsp_state *v); -extern int vorbis_synthesis(vorbis_block *vb,ogg_packet *op); -extern int vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op); -extern int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb); -extern int vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm); -extern int vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm); -extern int vorbis_synthesis_read(vorbis_dsp_state *v,int samples); -extern long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op); - -extern int vorbis_synthesis_halfrate(vorbis_info *v,int flag); -extern int vorbis_synthesis_halfrate_p(vorbis_info *v); - -/* Vorbis ERRORS and return codes ***********************************/ - -#define OV_FALSE -1 -#define OV_EOF -2 -#define OV_HOLE -3 - -#define OV_EREAD -128 -#define OV_EFAULT -129 -#define OV_EIMPL -130 -#define OV_EINVAL -131 -#define OV_ENOTVORBIS -132 -#define OV_EBADHEADER -133 -#define OV_EVERSION -134 -#define OV_ENOTAUDIO -135 -#define OV_EBADPACKET -136 -#define OV_EBADLINK -137 -#define OV_ENOSEEK -138 - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif - diff --git a/polymer-perf/eduke32/Apple/include/vorbis/vorbisenc.h b/polymer-perf/eduke32/Apple/include/vorbis/vorbisenc.h deleted file mode 100644 index 82797a496..000000000 --- a/polymer-perf/eduke32/Apple/include/vorbis/vorbisenc.h +++ /dev/null @@ -1,112 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: vorbis encode-engine setup - last mod: $Id: vorbisenc.h 13293 2007-07-24 00:09:47Z xiphmont $ - - ********************************************************************/ - -#ifndef _OV_ENC_H_ -#define _OV_ENC_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -#include "codec.h" - -extern int vorbis_encode_init(vorbis_info *vi, - long channels, - long rate, - - long max_bitrate, - long nominal_bitrate, - long min_bitrate); - -extern int vorbis_encode_setup_managed(vorbis_info *vi, - long channels, - long rate, - - long max_bitrate, - long nominal_bitrate, - long min_bitrate); - -extern int vorbis_encode_setup_vbr(vorbis_info *vi, - long channels, - long rate, - - float quality /* quality level from 0. (lo) to 1. (hi) */ - ); - -extern int vorbis_encode_init_vbr(vorbis_info *vi, - long channels, - long rate, - - float base_quality /* quality level from 0. (lo) to 1. (hi) */ - ); - -extern int vorbis_encode_setup_init(vorbis_info *vi); - -extern int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg); - - /* deprecated rate management supported only for compatability */ -#define OV_ECTL_RATEMANAGE_GET 0x10 -#define OV_ECTL_RATEMANAGE_SET 0x11 -#define OV_ECTL_RATEMANAGE_AVG 0x12 -#define OV_ECTL_RATEMANAGE_HARD 0x13 - -struct ovectl_ratemanage_arg { - int management_active; - - long bitrate_hard_min; - long bitrate_hard_max; - double bitrate_hard_window; - - long bitrate_av_lo; - long bitrate_av_hi; - double bitrate_av_window; - double bitrate_av_window_center; -}; - - - /* new rate setup */ -#define OV_ECTL_RATEMANAGE2_GET 0x14 -#define OV_ECTL_RATEMANAGE2_SET 0x15 - -struct ovectl_ratemanage2_arg { - int management_active; - - long bitrate_limit_min_kbps; - long bitrate_limit_max_kbps; - long bitrate_limit_reservoir_bits; - double bitrate_limit_reservoir_bias; - - long bitrate_average_kbps; - double bitrate_average_damping; -}; - - - -#define OV_ECTL_LOWPASS_GET 0x20 -#define OV_ECTL_LOWPASS_SET 0x21 - -#define OV_ECTL_IBLOCK_GET 0x30 -#define OV_ECTL_IBLOCK_SET 0x31 - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif - - diff --git a/polymer-perf/eduke32/Apple/include/vorbis/vorbisfile.h b/polymer-perf/eduke32/Apple/include/vorbis/vorbisfile.h deleted file mode 100644 index 569b3f44a..000000000 --- a/polymer-perf/eduke32/Apple/include/vorbis/vorbisfile.h +++ /dev/null @@ -1,183 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: stdio-based convenience library for opening/seeking/decoding - last mod: $Id: vorbisfile.h 13293 2007-07-24 00:09:47Z xiphmont $ - - ********************************************************************/ - -#ifndef _OV_FILE_H_ -#define _OV_FILE_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -#include -#include "codec.h" - -/* The function prototypes for the callbacks are basically the same as for - * the stdio functions fread, fseek, fclose, ftell. - * The one difference is that the FILE * arguments have been replaced with - * a void * - this is to be used as a pointer to whatever internal data these - * functions might need. In the stdio case, it's just a FILE * cast to a void * - * - * If you use other functions, check the docs for these functions and return - * the right values. For seek_func(), you *MUST* return -1 if the stream is - * unseekable - */ -typedef struct { - size_t (*read_func) (void *ptr, size_t size, size_t nmemb, void *datasource); - int (*seek_func) (void *datasource, ogg_int64_t offset, int whence); - int (*close_func) (void *datasource); - long (*tell_func) (void *datasource); -} ov_callbacks; - -/* a few sets of convenient callbacks, especially for use under - * Windows where ov_open_callbacks() should always be used instead of - * ov_open() to avoid problems with incompatable crt.o version linking - * issues. */ - -static int _ov_header_fseek_wrap(FILE *f,ogg_int64_t off,int whence){ - if(f==NULL)return(-1); - return fseek(f,off,whence); -} - -static ov_callbacks OV_CALLBACKS_DEFAULT = { - (size_t (*)(void *, size_t, size_t, void *)) fread, - (int (*)(void *, ogg_int64_t, int)) _ov_header_fseek_wrap, - (int (*)(void *)) fclose, - (long (*)(void *)) ftell -}; - -static ov_callbacks OV_CALLBACKS_NOCLOSE = { - (size_t (*)(void *, size_t, size_t, void *)) fread, - (int (*)(void *, ogg_int64_t, int)) _ov_header_fseek_wrap, - (int (*)(void *)) NULL, - (long (*)(void *)) ftell -}; - -static ov_callbacks OV_CALLBACKS_STREAMONLY = { - (size_t (*)(void *, size_t, size_t, void *)) fread, - (int (*)(void *, ogg_int64_t, int)) NULL, - (int (*)(void *)) fclose, - (long (*)(void *)) NULL -}; - -static ov_callbacks OV_CALLBACKS_STREAMONLY_NOCLOSE = { - (size_t (*)(void *, size_t, size_t, void *)) fread, - (int (*)(void *, ogg_int64_t, int)) NULL, - (int (*)(void *)) NULL, - (long (*)(void *)) NULL -}; - -#define NOTOPEN 0 -#define PARTOPEN 1 -#define OPENED 2 -#define STREAMSET 3 -#define INITSET 4 - -typedef struct OggVorbis_File { - void *datasource; /* Pointer to a FILE *, etc. */ - int seekable; - ogg_int64_t offset; - ogg_int64_t end; - ogg_sync_state oy; - - /* If the FILE handle isn't seekable (eg, a pipe), only the current - stream appears */ - int links; - ogg_int64_t *offsets; - ogg_int64_t *dataoffsets; - long *serialnos; - ogg_int64_t *pcmlengths; /* overloaded to maintain binary - compatability; x2 size, stores both - beginning and end values */ - vorbis_info *vi; - vorbis_comment *vc; - - /* Decoding working state local storage */ - ogg_int64_t pcm_offset; - int ready_state; - long current_serialno; - int current_link; - - double bittrack; - double samptrack; - - ogg_stream_state os; /* take physical pages, weld into a logical - stream of packets */ - vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */ - vorbis_block vb; /* local working space for packet->PCM decode */ - - ov_callbacks callbacks; - -} OggVorbis_File; - - -extern int ov_clear(OggVorbis_File *vf); -extern int ov_fopen(char *path,OggVorbis_File *vf); -extern int ov_open(FILE *f,OggVorbis_File *vf,char *initial,long ibytes); -extern int ov_open_callbacks(void *datasource, OggVorbis_File *vf, - char *initial, long ibytes, ov_callbacks callbacks); - -extern int ov_test(FILE *f,OggVorbis_File *vf,char *initial,long ibytes); -extern int ov_test_callbacks(void *datasource, OggVorbis_File *vf, - char *initial, long ibytes, ov_callbacks callbacks); -extern int ov_test_open(OggVorbis_File *vf); - -extern long ov_bitrate(OggVorbis_File *vf,int i); -extern long ov_bitrate_instant(OggVorbis_File *vf); -extern long ov_streams(OggVorbis_File *vf); -extern long ov_seekable(OggVorbis_File *vf); -extern long ov_serialnumber(OggVorbis_File *vf,int i); - -extern ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i); -extern ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i); -extern double ov_time_total(OggVorbis_File *vf,int i); - -extern int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_time_seek(OggVorbis_File *vf,double pos); -extern int ov_time_seek_page(OggVorbis_File *vf,double pos); - -extern int ov_raw_seek_lap(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_pcm_seek_lap(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_pcm_seek_page_lap(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_time_seek_lap(OggVorbis_File *vf,double pos); -extern int ov_time_seek_page_lap(OggVorbis_File *vf,double pos); - -extern ogg_int64_t ov_raw_tell(OggVorbis_File *vf); -extern ogg_int64_t ov_pcm_tell(OggVorbis_File *vf); -extern double ov_time_tell(OggVorbis_File *vf); - -extern vorbis_info *ov_info(OggVorbis_File *vf,int link); -extern vorbis_comment *ov_comment(OggVorbis_File *vf,int link); - -extern long ov_read_float(OggVorbis_File *vf,float ***pcm_channels,int samples, - int *bitstream); -extern long ov_read(OggVorbis_File *vf,char *buffer,int length, - int bigendianp,int word,int sgned,int *bitstream); -extern int ov_crosslap(OggVorbis_File *vf1,OggVorbis_File *vf2); - -extern int ov_halfrate(OggVorbis_File *vf,int flag); -extern int ov_halfrate_p(OggVorbis_File *vf); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif - - diff --git a/polymer-perf/eduke32/Apple/lib/libSDLmain.a b/polymer-perf/eduke32/Apple/lib/libSDLmain.a deleted file mode 100644 index cdb70ab16dc31805b69528beedc6d36fbc99c45d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27120 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 diff --git a/polymer-perf/eduke32/Apple/lib/libogg.a b/polymer-perf/eduke32/Apple/lib/libogg.a deleted file mode 100644 index c801682022f304971dd9180330f92df006c13af2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67184 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%0AWM&-$ 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

|@xw-pLwUI;K0F+fXIoq6a9x6l% zaUb~=jJa^F8(JGXSID>@J1XeW(8SS{;>f#E-yOKF8Al({jQeqWaP)#Z;t9-PEm+N1 zHy^b6{$`&eYg8c&>5gy3&)at>}kpZgsqDh`d{CO7w>6FiiYivx~ZU|F=Gx9PmG{(4&k zS2qV&qswv+7{GnEYhv9NSGBL@q_zo%C2aE&R5K>B&D@vb$-M~=-&N3f2Jgjl7q#h| zgO5R}$X;qjD)s~}FJ&M2i8rtb*zRw(2M&E_p_8K4&Hd?Ln3^!h2|Tb#!7&Xqxu|>2 z1p_h7)iFaNjk6^BDGt9ZGiG^1YrMG|atc@bjnciSa1G|d8eYzYYcLmf#B8QKXVQoR ztHNZRa_QJ0>g!{A)YABTfX>Cr+JtIw);rr66XtV&vFY@MC=K=yTYabk>{Fv1?&s~j zm}7F+8b$xA$gxNOIj)WzW17I$+MGHiM^k1Z&yn0`F~LUy%MR4UoMFcUu35)o1xjZ0 zyVRRdC3bz1PZRq|Y92bs@3`b1RdL*<`g_nm*!Dti{RTY`BIu+d{1ktMp{%8~qsX;sk zszYT08))|j6>f31MRMn7rbv*=Y^lM%&-_5Gs^ZLOq??w(5_UkJUBQ%4EWtj;K zH=c0BL%yew)S8T9$bk%b0JixEnPEz2JR_JlxRlAkjnAIETj+fvz2gS@w5d1_*jg0W zkz6!xCq}{=|J-}Hf(fp{L!2jng?pUfUUZyj%KS*~Qh&G#T#sVU=?_!k=jN_)3s<}7 zU7<~QcKC~5h9#=+#jRL2Arfgo{muUH4|r__>=K?Qn3*mx^D+FloEIs)7sL@DKCkM` z&y>y>0=Dz7NB+NrdIfn#zaEH|7{sdM^9KW914K5`ZU?n8a5GBBTEUc-=3DJ8qfrgE5@C;<9RQXhRN;Y{L^U_=`5&CWZVA6yi_%_`5LQMy$3J2aiUX>|c&5 zZEknFQKRp%`f#%}jTW7Dr>P0_s<@W^7rd**Ts6Um)zWV=HmTCmbNOl9_dNsqn3mqC z{7eG9yHg`?*U^7g$eTU7bSZo_9f#I)`4tS;th((k)7k7_ZuW7~I7FiTkYc2St2lr0 zCn$8JggS+YS6?*_;r#p@p%fP8rpvuF*I}qP-cf-FUxy zAT^=>t%9qBez6t7gcT{JjsmYDpuW4Fh-SQky&zh`9)3Z;Vj_XpNa;fOGoCQgDxDb` zw&>DUnUYPx4O`Df1L<>IbHYLmvN^(XL(e)T%pvtFgUBfJqlS=v4 z`jHY2h?Dj+|Dd0yzkk$E(=oKcjrKqeTI53e&cY@|a_9JqkFtaCRE4?2jzk*i@K}iK zc+gr$e&pCIy%9E%vJD6s39rSc$yH20O-Gb^2mUJc)4@3j%IQfcpViRefE-2lmM|)6 zrgP_bO@z`+vnRx#-+!y0rjP%spQZ=sr%fSTqiDA$Sa_IPEp-6dJy}c58ZlbxHZc5I zOWg=fVYJlq*jc-w`Tj;f%^0wA(j>4Ibq6KcM5JR!e`lC97n(W1$=#Y2r6q?c=L+l) z?a2g=0~k2+W2Cem+z+HBw!b+EfI24HfjUti~maSqw3(ZQ-X)jy1%%9 z>p|0@aGbZ3d9r#YmfByO$>~hx-I*2TGb29LamUQ}f68cE9++q5xl*bFBZW&{b8t~) zw2YYBmL_o6{9TX^R`mEVsyhsy+X~4l{(qyEVXvQ)mG){*dt?;@6a7Z zD36;vPwK0=t&ocfqwI1^Z-G($(JJgh$=RE6_I(;>fcVKbjsO!*zWF$Jrj3l9S5zK* z+o!8N_AcBFB}f~*aF%^Ew*Eyq6{S7zPBrJ<>;P)=Kb?0oozT;6iD_X|6#rfK_*jn& zQ)JHeoMYP}QR*9GI*>hVhjROJ4NO)|CpDx|Oge>oj4rbBklSb^_dv1BMmOrnuBa90 z8%=qN%;^IalH=VnI>b)uppWF(#+C@(JEm$h`pDFi^pR#s{!jWyqpYMpl0|aNlSfN} z#YM;vm65@FbIg;+KX(jLuP{Y(qqo5rJH@3AWab7g@T90`WaXw^SQ{MFFB_F3AJHgC zr%FY=?V0MIg(+wlY{Ky(!d$yZ@tOspn&=vFba_AD$CTBM;#RbYLT&zzLIfkkd8)y^~Aw0-ET z^9JkTJp(ho&)<-+M;ubE5UhsBRswv9T)u81NglIe^2-ho*UyXKV)yo2DBGG7i(uuSG-_1p=T z73TEBo}t7RP}`7~{jZ|?Rlb8mCGkO6vnuR*4d+tlx#pb*7Tmn7!*?8^Gp3%{c6_Oo zPSO{f-u<1;U@yCRcS`pmYR4p?LHbbS@ctn`aZ;!M*p&2P#2m8wi$|gp#FY>;%vg}x zf3F(WzD8u;34kUt3|-h7=G|ZXI6oWCFhWd!U_2*H3)wS#H;`$HvBJD}qmx~}b(5-a zXqdl$-^R>H|NVU%`$~>|-^L6Dyl=Ax+hMQCLynz|!=u?Ue8qG|>^&R~)r6_&r1~}b zr=o-Xup@R;i+*(?!6W|J{IXMIo7*qh?ds!us)3ymyrewYhnJ^A`~1bY`v*P!NHk+* zBzQ3X{^wpZUUCoZpN0BC8eFpA$&VwZ+4nQP<1GSviz*y{Ab=|MhufP-c06pcIR%R$y= zKMZ@$UcrONE?%P8wC>l2$Nq4GN1zspY^CrEUM7r`L(dlNS>az^o)tJ`4lbFwKYUPa z`on!tU2ZP4?|Y*e{_xSLudaV~73MayJKE#+6UMunb`dxp+<~QT@ z3H>VaW~;349PDygSM_YovC1eWW1fAP&| zEevsX5|j`6aGK&B)#z3C-)?%4r>Fw`a{%0nD!l&LeD}l+>_h*YU1W@`>}X;=Gq)M| zOFg-+_eM;c{JO9H_n7GqwFvAh`h#74AI=%j6QaGaAl>6%e#i+O$_XCy&*n^mPJq`` zQK7*-tccs@V_C7)zxT5l_?PB5 zgxsN5su}m1+C3CWX@U;1uXuk&g}OVlg_My$WUex2;Sos2j4ZVmYoj0w2L?F9ISVge zhIaf-f8F}e{WW(VbVjqkW_e8?vpHima=fsR7&3?Ub=b>fyLw(lkvuJe`y#=8``<)Q zV6O}uva`DDKv5*=KCYUMY82e`$LcYQ!w9*$vvTZI`p!nK_VdAM zTf%NB!xHpepoV<)~3C#63}8e^lwdcSD$Sd-`Iw<-R7FaNPGYt)U<4ne1X+ zR+!@WXAi^@+YEVVe#~+Y8zq6cB^t{A@L`7f+meIbVUy~vOdFtXa?LYzh;K7_+^a~F7wotLwF2hL%lJOVw zJG)R{GD#db#OD*UIN(ZgL|9}8T3AttydCwGf~_G3&92SC9M$YJiXqQV8(WH#q}`+3M^TJE#ca4?LK zyhvIBs25pMyxbD`1LGm;vUCWFU4N=MJK!m$2}(m+N)tx1bYIC7-1yMYzP%Dy3OjV6 z+h}(^k1UE1Dc*3%2`rfY{GW3ezMh@MzN8e`T2Rvs?v8B3k=6eF=(;iOHyX#T2he}7 zE;^WDUgj=nhdzkeC7J#8G$iKs#4CSRtPZifDhlE$=S?p}GEuZ49Bj#K2g-?nhti3I-Q7s}f|`{ga~ zpX2wX{^A!Jjz9Z7R2z2({2%kcFEsN7&%ea`H~C$G->=<|^!_h?7vZv4nsDiSY8mp||t!;)h^}JUn z_B}_R)9bQe=Ea#ETDNVTo!PA0#ED~vXZ9ICv~}i?Q2y9qnH@WH?vUkiVqcCP>S+_4 zGJNusHj_t97(PCKc$+IHgeDIiKBY~dM`+CO_U+n?%^z~pgvmqlr?kp$-L7?8%FK|5 z-)QE)B&X_>{E_2_56c`nYVc%;$)WKlStM1NGHSx)f=qtZJ1OZDE5!X6TVEB6Q%<%{ zt}=GQ_>r0B!+1zOrPAVLuRiOQzP!FukSCiNpAGOQzrGP;Ck#erl6}J_gocbAj-TA7 zLeS@Hfl*NM*p@WBx8tzFttp^;F8vCkFnK(ATK$fTT z3aq5Y$(~b&O&(EjgMQIJ>5NNYojh#v;9(=$d7Q}*@Bl}PJ3;YWts!A zM#1Em=!~ja(AMLG7%HUzaT(J?MuHzB@oXxkpuMCE5lPL04w7mXbc~zMmFd*J*==F_ zFyE+Ek>UMmhm%M$CI=_TpYygweu@bXf=5$iBi%-cMShCK;yawC$VQ46SyBor0NH%n zRzNBwWK&W`jZsr36~Ofw)0SR-54a|3=vh-%RF5&NLHspX1xE6Q=1n)%V5I$UOJNK~ zs)OvCYA{kKBcWVI;^H8MRbiyZA=M~Abr{JTS~fjpC>!88X5<@s9h#4P8j-(90ud1z zF$EJwjiGEFBYH#6PKOxt>?fj5f^(-Fc- zx4}6*?zs~t=ydcY>&Bn4N*^1O-b=<8zVlH6>zJM&_jedBweqLLT)d$@g|*lRGfW1& zp}mFa9E(w{dS_Rn&**Z~}F^sid+f-fpVD>y~-oc=Q*~hK?qmkLWtelE3 ztfvoVx3+Q)rIx7B*X|;w8ML(%)((#67PeWMrE-Uv%*jmG;#NC}S zaLq<*S?AG8DsC}{Y2^=_h{Wod1TxULaiMnK>}(YIc4rsrwNBsc_Hfzlz_vXq@jp%@ z6a+#Cl%!!&7Gkn}eF%I_#d#5yFF)aX`c7~hTGaOSsY&eXPr$3`+*bTIMRw+?N$kFR zA(|d*MfP+vk;lZ8TIg>7G7%+(Ze;(mf;W{-f)&Pff@Njkjir06UhY{ z7G6&98q}q&jpt1v_;b9bHmul(B5UJ$QyZg(+YL=f~*$M3i3+TVPDpv6;>j8Q-?9Pe(2;e$E5iaYjLQ>+^#Ys z%}TpXKvZGOaiFP1D^;z9PR4;|#qE*NAn7xXr3yc{lefLYlaS~Wf0JSbi? z#TW;7$f#T^^GBj<4dWoQvNJM$Sf%Sz#y4Bax|Ulx9{P|8UFq)Rrw`)`TmMNRjB!rR zR^%nhkmJFFR*nb1*UIta`NKh)1+u;WZV>Mnn4$Z49d4%@W1Hjz`Qy&EWAyfNPUIyE z=J{_$-pOG4i52@p)brn3#Ge1Xy@}8Nn3QUs|9#|UpZ_sQ&wndUX1sj<$6Pb*^ZydB zef}>sJ;*%&FSXgU&weX-Lp#i~-%1Z7Eu$?TLSaIx8kHm6wy7c*y1dT=$=+wZ$$J@ zD^6%kSM*UU{$fPTM^+rvgt_7a-^$+5jAXjEq_NRmgThkZbDFE(omo z9r`s30xKUiGW(pB8=g&f_Bku(L$(V7E87LZWhPy3XpR;Hmz#9Fp}Vvou<~sPYZnAo zjxPwT_@I))1IAjs$+YYmpr1(qkNvjj?PI*`)u_8$yyH;G5V9d`_g;)jgclZkg;z_2 zK0X-Qp(e9^@Yf!7IL=q2B|3Rs?)pZcoEIiJ&K-ER)*DYV`+q%5f)|>3tsYmaGO}yR zm_K5$@xmP>C$)=Au#7Q?O-8PcV@700#_@=vi~J&D8OM)^8@cH2YCYuNTxsNE%eSaQ?q|l%SOTY#X z@MA7MFi1R}h8tn(2v3(k#vy8TZ9b=X$xak-&vSY|-JH{+utYZ|JV5Vcp$c_;+qK#x^ z$Cz#XvNwdSk-Z^iL~n>0+30aI8Z%~QFNvF(juqJU@U@TwAsh40MjAMJo-hVA&Xqg2}gH(4RxUHO5*PMptQVJg_sjq3LXNIk=xsVj{YP#M7>i$JAJDRLMCtP#NA>M>IcH>3r;SsBpc% zBRkd`HU6;~Dus|vXD@Bl-s71|@1OY^aA|qQ^aK8(K8I!Fw=d#atVG52^WY`0#z=-`q8`Dwc-c(9-FdX~wW@dM2;t zq1q?2xiPGmp2_v87kh(-U19hJi8ky5LzU*}vi*(In&}M(!O#>ojYh!GXd*r`r{W_i z)FYGk&|;a|uo&z~FAHF3^cX*$<;P3-$XtgHEDJNY81`$lla^l^;i|I^f-JyUM_>ri zZ~}&vFz}xydi&#_&KEw13Tmo^o!}#?+b>Mr<{@$0Fi*k0g{S2WH(cEF;tAuY6bv3; za3%Dr<40aRcJP!b{fCbjK6&`~p~F24?>G*2q0ZUK={3B`XC$XVag$mVnQh{!QR5<5 zp>C`ZRqBUbAJlD?bf-p*^J<)5!+}t>rpKF1p-+0}>iD_NI&l%|$kvW^J12z^cdgC< z)vCmO@P5PU2_nMR=uqhjF(pBS=bDuwbY#`#m0#8NE2%1pNu?_8Dt*$K6s|!u*`bKI zYbi2`=?Nk{XH<$FPi-Ytg-O+k33y^wrkZJLqh4haXu8%;mlT^~Vy;ea;AE$>J_gpv ztAfs61$QPhd-aV08G}xZw}(_r-L=XS>Tx<-;Jsc-YNMW$@~Fnrq3VPIU8IFdM7Z4 z{EjAVUIQ89>vS1UmvWf0K%OVCHnz&g`{IWnYwIJ)yF|Xv!kB&nnfD`-dCp1u+G0KN z4Dn2md29@_mU(W$bi078SPIhLE0Whs z-Y9t+$hzJEvV5OP=GUJo?~{BGWIBgH#`m*i9zN3kOp!mD&iFb>K2N+5^oCfHi($$H zd(x(WHkZTH7~~JLGp?Z^>tG(pxb71l1ex~3ApNz+xbt4e7y>X|2wp-PbfYRsePzQR zySFxjWHUT&GX|!M;Fl*w-m4iZBtKK*er}V^bdYHlfy~2v(9}2Ry^3Lz7!20hBdNF9x zW-wg}UIH@YWg@Rqus#ODlna+Zav2OVj?t3Gft)oafgHZa9S;=GLZGVUh+oJ_M!J+;)vT0 zvM=$vVcTn&Amh7L_Jtthn<@7@K*r~StdP4w`oB-^OF_oBLGD{6 z?~=S5+$;AI*)J5A$o+A-KMAsBo(DN5)__cZz1%lReplQ9vc^7^ z`~}GTeI@xD&^v}D{thNSDNcaQDX+mH8-lF+79eBl3Npn@K*n^b8m7vW;#6 zIWleo8Ge@BXG^|Q@;u47p54U%Fv$3yk^BP4lD`Zx-nFvdB7Pw9I&h}*yI8dvN@!-X zwlHy~=?F50&LB(J4`hk10Xb5x1DVoD$)hDtkvvVDCq4$|!2fcP@w^5y=j$YwgUuno z3);Hg4HN77OOWGZAIOvsgN)%A$ef*lH5%Cr^e!+1zaNa#VHE^fh=KAl1Y}U&ibc)< z*|Ca14&gZ<{DApP@3GIpH{Wq&cqaD60SF5U>z|4@*59VUC;fX4VIig$^R zfvn!ALFRJ}$mLSG+}{P6&JM}PLB`K3A($U8$Sze?ay7|mAk%9g`^F%<`q>}{XO`Ss zfqanND0wKz^mtR9$**Ld22s9QECiYU43O#HA^A?p#gchb9+w`6Kz7`tAnWA>$a3(; zKE}%%{Agbbxq!iibeYjc5Y@52 zIR~r@GG9FZ?g(asEJtUMee!(Cqd@u_53)Q3Ak({9_Jv}R7!lWk-fs$7l{;yC6lclE zC5>Mg+n*|JQ&Vjk)XFlg8^tN&?I6o`7sxuA3vzlY0a>;Mk{=bAd8ATdsrEfDl{7$3U7S@28peY>FKn8ChHWpig%uXwi&2%p44X`dQ zhv`Z%2(lsufy^jxn`TTmfed-GHx?J_#NbUsSfQJCANiuKirvIK|U(obnkPUD*$oL>f2h#(pZu#?GL!59FQn^nW_Y)Y^jd*B)f59VF+9!^Ke`TV)K$+>e(`1utjA zsUYK-4Kn_@AoH_G?n~rOGFjx&VC6k;k zxgJP=XMim6nINCFjX;KL3YurG>|4vez3k7GeJ_ylUjcGpT?O*FaGm4{Ag7^QK<`B6 zbQ(-ez!`Cy2u$p&e2a&*bvMYom4GbueUevzOzTCEd0Zv=-{KzeEAbo9j0upnj;c2C zr+{otKghmP3uM_dK-R_SAamLPq`yp%`8pe9zM6qdzXizrw3YouAX_s4GT*tfp9r!y zOa&S4Um(NH7VnU~EBPMre%U`H`BCw4knukSGC$ADeig|0S4&U4tk+;#I}PbQ;M%);+E)J`S~I4=SP^h zM*f*LxeWCiO!Qj;GCnWfV)FK*OI4V9fz?6g{Zx=XYJsffI+B}9ZUxd`JINhEma#YJ z#k<~6z`%4VI2dG11#}rrmwRAhsqO>Yfe+AS2wfJ+=Fzy#GMGBRh3{LjF5dvzKh{g$ z1TuebgX~A!K*qEKq`!|q*7L1Tw!zK*oCvWO+`2jIToUL6=SY>LA1W#oDqz z4W$42AmhuFdzS25%D%1GLH6g1T|ma)17!S{$-ckruao_7ahy0&oC4bQ_-!yz-Eq5I z=7B8PVvxOfEyx<#3Npt#K&JeWtqRCCNXDE%H?@+CCGMr8DxH5mHq3oUoZR3AoKYyXh+O8 zm^flS09h+LLDuu9^wF1TeFal*@IN5)dyp=d(&aEr92-0#VX9R?#$H`=P0;iv(A%3K zTEmnJULYS`K!)fcxfjR~*MMI9`V)2rFkKFgrj1$mjg!qyAoCNU%P{)A3#PWXj| zVQL4PCA7JLex8D*&=4G3>UG^V?T(*BH84qo<*Qfp-qlHh|3G7SJyFx5GrA zJLU43cucIuH?rWK#@FA#x{@1-=YTA0E6MFa_Qnpf?+CJPJ4wy~8DAHWb(kypO1bAr zz5!%i^Nld}kSVecfy~EkAk!_991-WrekI7ZSq*aCvkqjs5=F_>M`gooW5G z1X-i)K<2-*>@N~~fQ+{<$T_J$*a#d5+P1k~HpAjJ6Jg?fQ3x_Gb3x8c3+cl=Q`f@O z2{s!+=5hrD@@aIFhe7tLMIh5%BKZl)&x4HbRoSlv+28pdCez<2_qRaK1Q;~Ne_b&fWcnRI z_NwzFUjQY_DP!IbGKW8ajQObCf0g?MO>GXZ7srYJ5+mYVkU1&=8Q(*) zUkq|&KPC4y;tsGS>^}nSesq^?_R!{cqdEHzjYUT7a}-AAH}xD_({(_$aYK+b+EzSI z_UB9PAzlKqt^123K(^2=AX{#l7?yif@=}oTKP|2RneI!HUjdn~^`LjZ$@Lx@A2PZA z21d5yck;!rBr~?EAY(a2avSkdaRA70H-K!F5Xjn%f;r#<(EFW9Z3T?Xz^k+}i=?eE zae{mwWFk92Ci(EGGe z743m>0<69US(1J7@*~KoPHACT2jrY}8pwWkCdkTeB)O^NEXl1UcL5o1caUq8-XODb z8E9WUxk4@jK&E(&cw^khSeTergf?bv`zTCox~(9?YzNs@K9syu@>d`WydPu?--7H4 zhva?~WcU*xpHzH_+&j;7{WKVv(Rv{3FjH~|@j~%pkWG0x$Sh41Zw0;EO&4E8;|nI% z$6=)JW%9KaWCq>>*;n5I`KbFy^2d_DlKef$@JB!v=Rl^gLh_5CcbAXFewD^2O%3psc<*jw%U8_34;kCGZD2H- z@lG%?wjm%#3|~lRjq%NE?@uP&P8b>MCm^%7U*x;i-W6tC{sALf1Uwfuj z<^NIkF7Q!RXWRFlWD+J}NCHGbL=6y?073#$IjKp^0W4sGB;cWjKoSUsBqSLQY7#V{ zjN2fsCu*ssmd8>bZFv+ewb%ls1}JS2sai`dk5WqnTWZl#YUR7GwXT`$fc@V0&5z-~ zj`zCPy$*Zrwb$(7VP~#Mc-EQM$LSzNg+P|RN`9V>w)b#Pz*UTxZ!jdE#cxo^GtrQj z;G&e*KuXyG(uO}*_&)JhAT4zOWV$yM{+7buQTTfb|6h=U<0xq6J^7D;lye-UoWFrA ze`uCXKLWJtXdE;)D}{03jYu(>F{T#9aNUBC*&t=y2~y@<`SHDFGh;0RIR~r+*&gda zdo<^paIw@KAb0%^fPA=)TTmyqnwE-%iz(tk+9M!;ikJh&E@sM=aIsyU1zE}wFc&-l zQo>(BO88X%e~2mLZ2Sn3XP#r%Eu+Y56~sfp_C(MEg)A0%DwwmzJ@P*Y(i9s(n*F;V z3w=)h7eLd|L8jwjV$LQngH&=mXeZ}AO7RxRdFFRY@kfx7{{*s{$3aTM&W&LV$P!}Z zkC#6Qq^5lpj$^c@!~q~X#-$+T;xMZTzXGIO95^-daMaXST}+C z@-RA!`yNRDb0F3Gf%uxZUpxXby*VxH^Evpt5g(sZOz@2zG0xYfFgWs82#3#^Nhmr$ z5=CMagXj`M(K&FMKNRI0#0L_K$)hL^?zvtyxb;!tc?zy3q*psq!L#~67xha z&j~`^^=))0!5xtVE0Ew4n_xp59ZC>2&8n=Tt|6cm$S5QhmV-jg`uuQoh`EkV7UnWlH!k|fWD|b#wZJT!e~-MBj%VqHQjllHf6#Rldzh{ac$|I zB0c3)drebj@+_q7vyJeD-NK_y!GoXIo0cvn_*NG5fI}@2L5%02Ps|U5;tzaDe2FK1 ze~zo3x6oe9I@ImU&TQ5#>9G+2vXJZQ; z<}i=*wUupWQ?L&2rx-eTb_Hgkf;^pJ3ZsKZBaAFM9>NESz6rc(oe|Y}@RWx>O-Xb- zV>RB;MhA~hGNz3VY6#EfHad8!5S~qKbnpltJkPh$!82y?Y-yw8tEdR9Lae|C;al5y zSZfSE2%iD)yb{8FbQqXgGv>?8mMl`>i+jqX$X8 z)ReP%42%c9dRTQft;&xnCSqd9;889a_^~!R_(4|ov;p`a36CdLTW1}R0$U@L_E%S2 z)kcR*zQ$|ihmEJfn07Y7BRR+%u`+v-Ng#G5rB10v?yf)q$s;dD0oq z_t7_-kQcq32T-pzww_rE@Z2T}AfC6O$ABSbCYW6W@R%eL5Y{=9_#Yd}&ip&$Ea9xt z%QVqU_R#^xq9xt^w1n!eG}S4IR3{nQZNdjeKGs49M;E4@9P+o;olmmc@KQ@&iVDCz zg*{-XIZQp_YB<#sI5=O&2ZH&2tCwM1IC)H*6EhlOODi2bCJoQ?t#k~qo^7pk z(6orzYGz|QJZBO-?27R1t#r^%@a$;i;Oc`9I^M+qO#&yuk4aC5`t*)g4kI47L(KE7 zbg-82Y-x>D9iFYmqp5sbD;*jK+gl@D%X67o-@=(kQ}gatI(W(&gO)gg4`d!{^+9ht z$CMG8nD?}LCYCwq9qbiIf1veCXOsUhG4E*&ch_>isii8m-V9@Tc1LRoObakKSoZlz-$s(_dct#qiFHnn;hWP|ZMYFlS> zD;;W`jZy7PkwnqRCG&ns|^(kXfjx>Z*A&wU~ zJu~jfR?ozF(mMg3=%IlM-PjUoNSO0+6sqg1r_f{GW@Mqfk|MRI(4(eMEv`03Ct8ZW z#8jfhBkzcjN4ugWJVFjf^oHlmh|1R3nQ^dk@ujP=c_r5TQSw$38RZtCVCYqJU0tdacL{;Nrah4G$ZD=Ha8Zta#@|O`jW{Ug`%+EuY=qvjw) z;!#mgEUWyfiLK)C)a@p=iqfo@s)!hD+BiIHiM#~QtD%}xywN;Dg{uN**Q6!3WU`Ngk|3 zYcS;tCS_S9WjSJb+!7Pf^KEq8X_A)kARmwHq2VG)c?xr;iJi$<9_@pokyvUp-^3O( zmb!av&GVK#XXv?`=CM;A%fvw8*~g1aY*lyOsQD?G`H`0*tmNpheH3DNY7_Uq1P?@F z$ajm0jwBwm9Bc}Sj$}%+A#jlCVnQN_-$VjU*d`18jb%LnRw(64gEuaXSC43b4i}dLhuQI2bNImsx~^F z#K+Swx*%b*kx)jQ#0L^8c_QrBMnc)2BmphU{7;zt(cZ!%ncHlpe3DgwfavDXal}83 zaP*qjfxjE)Op4!V#LuLzJWGZI6wmyg9>x=z)C1~2)<(xU#g{_fTqCo1FYvK(mQXy; zvUvniHy%Gkr{I}Ao<4)KyToXxV8W>;;UXRjOg0G@btjB=1}5YoNS{;7vwnXy<<)j4 ztc{EVCgcf7>@NKR;6XPyyAwv|eJ14bN_1PO|EBc)m6M#b=WChO?AAW}~%>DdVzhQhA2K|CX>n$VUsB#cOFt5Sq5BwDG= zX!a^*=P^MVDW2f9*%vUo zdH~Oz(r_>uv;XJLun~G4HM$iO!>%$tv3t{q@jR@Du|X)ld()^pzQhy1rzO%pjQ@0~ z88L%N9(}@GK~NS36122`Jd?-scqnQ|n&a?*4hF@;ZFKO|2|VlC=rD&pI9zxzqY)pI zj1C@qz|jBw2sFb;*KL_|c9`XtEXrA&to^@?}8sBCTm307V&=D7rh>AS^ z_bPNlf$y}?!4qik9BZZHaqBtSN(WCwA?8FY9oz7M7~(w}ezKKEmUtKm;l!KxApPmq z?N?yBzz5+x6U2|4=4g=fwNtG;^COFFY@vh4V37IqRyrQX2RUdQeh_}N)#Ewl^_+-$ zdgeH3!g}v%gI zR3MUUZewSiWBToEo_L#W8gn*}vhlbXl5A=@ZBnahmFS zJkOgU#sE`GI@lGEgW&lmgl}#0^ayqg+c{R63GS6 zp;n#-k~)W49sNZ*HBxMBVYl9l4?M?O==eUmFy_x3lKmC#DdZaK&LcENi#Z3~W&7$TfSnPk=aBJG74BK&Q`UV4$$BDu?q*OOW23PwJ&4F5<<9rGr+D1c zJnmw;FU7~yiw-ssOP-`o19$$T>N6&hr#slGfdMQ!62TlE_Y{wNn#W!2anJI&=g@tX zm3arrhJnn=bK3)Gw~oM`ck>*rf}sioym&IvQTVJ?GA2t91lTBsTKpIRbV$dO-m$UAYs39s&jGJNPe#|%?7h|w8dN4y?84aQI<896EO;k_kd&i7uwb|+D zr3+?w$6NE$-pTE>x4d_}Ez`XZ%OWK8bMI2)bCXxL`8;YHPx4jXa#wk!uZj+&vLSeU zgGR+nrw;14@UlSM+(x<=oSa%&nCF%^Vr<-sb|+leop519;ysX9X_i0LT<9hn;nh5I zZ_BCf&R)&zJba8D;qHY_bwm=S%!LTge(_&%C-^x&xHlevPRwt5dG?XIb*$+wq^4WP znuz4?gbTV8F6d6UAd-+LmZ#bacYrK0Mkyv1}g6f~1bpB5)1>bv(B4uGLI=EbScnoossN3j?DAKv?|FH z#OPZDU&!n=Hj^?OVL`IRBrWLxerlb+22NQg&-M1j2Q9;+yJM^~QtDMmG{Yn;=HXED z>gVo9AQYjzOOQ``%#CFJ3Zi*T7c>60Hae7`GLm2c!Wa%kb3E~PMB;h2m*;p<&qxr@ zrT#$mC6D5RXyQW!N0QEfBgS~%yb!%F1ye46SuXNseZEWH1VrDm&i7uM5c9fgzW>Dd z>>HXX2$QNu;u@b4=(p;aBJ$?_BN#NC{33smcd_&6I=k#l@BXWA;QO%O ze(9?>Am7ja?tj_%8Rka-s~?L`96mS&!ZbT9SKe^yOaAu2gs@ZGkHu-?c(LEr&Za$^ zDa-lJDOBSt+0LfT9)C9c-uPR_Ih&sM#HXQ0P=12=OUQr~7Oxh!nUUedT`I0L zgT{$_&CE1T+{5B5vA?+5%vny{5i>D5aZN*=O}nMXf1?#I!8MV3#EE~u)Y-%zG-16M ze*}JS`cE!#Hmy|r0X#=|4}SiH4%5?rcA&F~znw(?MRg8B z9ZKIH{qAsYXVZ51FYbjMFMOzPxj4O-v*|HU{6zS@>2Hj8HZ>^zCUk;K_}6*-$9&GF zx$@(Yq;m+3fPenYB7aMe{$ep*JdLyr-!E-{!wZY!qw6-}bZdZ-|@3jp9RnZTx+rJp$qQ>*cQ&e}hJ# z{=XFYHZ=O55?3T!e~Fkcj_HHd2-39&ZG4+pCw`o0;}?OHS1tMzZ1~>-mMtLTSBMM6 zdh`p1^A)7zZ6f-K@n0*B!9-y6z~sPmZDO4`5R(PtzlA=-_-}||@i_!C{8_P4?OZ3q z3?_c)D9b@&KQU2^5zk;JgYrHRKN9~azAgSr{Dt@v@g?!U#qWyW6uFy4`L5V5-Xk`N zcZu`G+r?tBK%6L!5w8?469BWrv9}m2{tI{Itl!_o>p*eWg+>%?mDPO(g! zA?Ayd#cXkeI8+=Y_7f9DzL}r;ow?HT6Y(SQeeqrKptw)mCB7=YDB4Fcj{h0?pAy%J zYec(o>-d+-Un^FMcZjpZX=1)OS;ta7+yk5LU94%fUUMgNFCW-Ol7ubxWe7>{6 z)K~mad`~E?J|jLUJ|aFSwu#HcdU1is_v}#aZ1HBXNW4M3RvaTy@iCyA*;#=Z=aksc#+$ugVZW1?$kBJY9tHgW7X0cYR z6z>pciPOYsvCJSO7) z-^BB+YOL1*agVq|+$L@jH;Ws^_2N2_Z+@e^mEv--L0l-#73YY>;uJAQ94}^y!^Jdl zpqL^CL`OV*iPh(%cuYJZz9SwG?deL#zeE0Q;udkUXb)sM{`K;&6W53<#pPmyxKNxc z&Jl~nDPoQ|Ud$ASi)rG8Vv-myeqm1R;kqW;gN=^=efi%N4~qLlzSWWK$G1I__S_-* zz5LIJPl;a_c}9`x?-%bD8^uN9Jn=Shrg)Q>Cr%W{iX+6K;vlh~m?*}GXKI?y7*J^715rI$9{3>yxQREwo z8NN~E8;afVnZUN2rFjux*F zFBSRrZ|cprgOh&ob8P0)e@Z+d9u*IZhs1s2F7Z|IMe#ZD8SyF6egVhvKP3PC;@x7S zxJaBQ-X_izZxZvwiQ-ssgg8_jB=!>%#TfC7_LDymKN8;;-xUvv`@~)1tKy5|bK*vk z-yWiU*NP8_tzxrSD^`lPi8IBU#5{4LI941X4iyK9{ltKXSFRX+PG4a87x6>!uy{z^ zFYXeziCe_Y;zn`3xK?~XY!#P^{2narQZ3#omWeaOLh*X>8gaCEg?OoWp_nAbi=U_3 z^7zB5ESJBuN*)yti-$!1!UN-Xi`&H)#plFl#HU35f&}wDB;GIbH)0vyC@vD`iMNR} z#hb)DaiTa@93c)B2Z{Z}L@`D@qvsl*h#!gXi|>jD#eL!~@m29f@j3As@hS1^;zQ#7 z;@x7SxJaBQ-X_izZxZvwiQ-ssgg8_jB=!>%#TfClp4*%hKNQ~+-x7Zp2vEnVbFZgm_du zEFKc~i@Qbs>^Jjm6`vP3i5tYn#D~RI;=N+CSSwbDW#SC6P`qBeMjS0(Azmt8C?<*V z;um_p_L=w>@k8-F@h$P!;_Kp1#aF~1i2U^;+9UED?+N+WiVujb;!?3rtQPMS%fuOC zp?JM`jW}AoLcCPGP)riz#V_<6@sxN%JSrX*4~hH5-Qug_55@0^-xePiJH*u@e|d`b z35kovD)FmgsW@FM5U&%j7OxU77ws3hu^%OWA2Ck+Hy%c^{7=L`i+>c~7Jnmlia!&7 zB>qtRp7?F?Ns-@-XE_gwZQ?SqUR)rSi?hY)Vu3hO94n3xhl+#5eqy2+BcAD_dW#>4 z?~Ct>2gQBjF42C2-0}ZV{!QXH#I@oBB7dcg_2;j)k#%CVc&At<&JYX5>&0ut(c%^2 zrQ(HRk{B<35wzv<*XvmRU&If^_r$lvUyHAcKNVjQe;__9J}o{Wt`#2;Tg9bfomeg2 zDVB*d#C&n0I941X4iyK9{lr8uMm*Eo*83CjBk_IlUGbo}PuwNGD!wQ_Cq5%SC4OCe zNW5RXTWk~;iSxwU#F^qvVxBlr94n3xhl+#5eqy2+Bc4fA{l$;O_r-U`gW^7Mm-wpq zqWGNnjQEuJb@3tbe(`RxQCuX>6K@k|iZ_XQ;zV(*I6@pM4ifu`0nrgpC#c_xAByjZ zZ;AXFQI3z-#h;3=h(8dY6`vNL5Z8(ii2ONI%Hz+Ql6Q&o#oNVO#IJ}qiW9^vF+&_8 zUL^Jv6GWf*&wwqL=UZ5Qm-xTp@5DF6z2Z*s$Knsg?}^_QpA;Vv9~9ffWn#U!Kr9z$ zi#Ll!;tk@p;u!Ht@iK9Mm@M`Z&-SwQ{fGEh@z3HP#ka*@iN6qE6JHiz5dTa3mdKwJ zrd>P4)nbbn5*LeA;#b8|ak^L_UMF5HUL{^GULsx~_7UU6f5%(BJ{3O}|0Moid{g|T z_;c|m;!EOxi{BN$DLyLl$D?V7cJUsOKSFK#y*OXIUA#s7ig=?qNgOAR6o-iyi~Ysk zVyws?*JinY7mte{i2PY@#=jx%6@MoFNc^GrU*fmK$HfkDwRpGKC@vD`iMNR}#hb(% z#A`*KBcpzoip>|@woVb$e)I1`Zq=XbUgh##UG3RBYt1}j`$7n zYhqZuPh24`5o^Q>akhA~SRmS0f;#@I<+pDOMZM*}SnMw*h(7Tjv9=z675^muLHw=w zEAbcNPsEqR?~C6NpA;VvSBouTlX#a{A>JyMh*QN}ae|m7W{8)G1H?XJocQk;wXgWG z_$ToX;%~)YiN6qE6JHiz5dTYzoJV|I{tj`q*dm6+#bTBCRk2i@E*6N_iC2qPiIiKjd zoUdZOOW}_pJfv{GA+|+szC~-b(yT|Cb#iZj`VuwL^83hT7ro+xjssjGI%=hrvk|LVr7D!40ZYwPDzT16$kL{q-7 zX-V_g(c`WeH%?*MPI+@f&FFFCv&JiAf#p1;ZmtN`jLsf+b(V29(wV7P7JeeE^ZUSpEaO`L}s-8H%%*224n&V2j@x`Fxr1ucrH(wT$n zf|F+3;v@sU7FQX6{_NbDg(i;woksq2=vI5B{rz!lqAs0$+`>&hunc%$wI(wUm1GlriWQygU+mtmVM#`FFmI z#)`THRZZu~xS`CL+j&WaA6;*44{_(oSX?pRROehh${~Y)Z%T&sng7p|QCm|-lb)vs zWqb$E-Xk(jK#$qB{m++yLGfiWoF=>=9D}=gnThuPcb<%f(7ZadZqvDS`RIPU%>teA z&Ii5Ojr+@FG_PnlU&f=W@ULY8z4+#t(Gm0c!*&jC_*zdH0l$M<;tMzUl$STu z*VHvvHNyV<5b!_!ZF&jc>;00*((s>Vm)+8SVw77DbVGs8{PaLAl7VP2e3#CjeryEP zbxVWc#+=T)X$1?YRBU^1VN2o+${=I@{^z*MFR2S1M=0(eUfx zyoK$%{GB;|XY%0J!=*=#4^6%dV%&nGZt0P5@o={=Sk(Typ9L<5joZ&AH*ab`+pGCK zicN*Ih|q(G4HpKFzhUwl{o7BZKzFw#=$1`s@9fq7=hGej0h0=+wdT5I`Ku2$4?|uW z{8%FLx@E<&WmCds#ctWGaIqgL!YSdxS>e`c;mPU8j=8A7!OlWf1jXcs4|Jpshy@{e zcM7YSeA!CI3DNQk0&c^s)t`k@j%QaJ&Fuf-FWgqY8_#N;fap%PvC~;-jhmf*>}>?D zJ{x++Ee*JN#W3iA@PW=8Q+j8P>2)eLHg8%OmT>d(DXS3KkR_a#@8(U5%`5KAE2iLZ z-ZZx$@TK{^`r7sm9AlQ-SMNw(#UDvPMmNXbS#X4*t9OJ84mZcU#e>mQ?(~2=wQ}{| z@bsg}t7f8QUEk^*%@6w1i%?*b4A;C!3bf1$Lb#CcVH!o=Yf1=-} zLY}uHu_@sod0~1=V?E0IS0yGpSZ{ zBzgAv$y1qp8>__R*-T!b~Auexnm(>qjLue|H~Q- z<=vyq{9wm>>Cx~>4D{^SJY&31k-(jPWYUVk$sOPS;_O+pLy!31M&s|@-L(b@qSar; ze(JbSreVr$@ASLvPpJE)u5)vc5%Z7_{pprwF&fzxuP}wfo^T{VTjLYwzlVt(PZXrv6bB$k^wGPPzU}H-FvdZt1bG z{~>pFYVL%6Z6CPPPq?9DBWGu#%LdaRB0MeKAD)#S2xDfx09E?KJ8n@XQX@XV_>SOe z{O_RdF#L&*)F(3bA$hQU*Gj-#yDp?5ZcbgjxAlsw&yp|0s6CbOH+OcxO^tC2j{QA3 z1^x2x$$j%5`W&ey{H^VesL|PilkEkk{BG&V3B~^8M<&2z9aX2@OZ_q|N-?x3B z5PhImhks4R0d|Bx!tAgb0%xQl90RQ*b&Xq?>M;}AAY#vqJv1d}srQf%&2bjpx!}}< zTz_jJ1hoG%C;5@PIoQeqkm05dfV_-7w)X`(QXhgGziALiXg^0n+fS)~)()96ylYzv zB*m7cPAW@j`^aq_94<@6mG?auV`N$8q!NGYo8gnk?tqc9b{yXaX9=8LuV9Fu(|^mj z)+obx#;^+|-?XXM6jn8@`VQ2EH$Fa774xKrsnw>eO zQf}$i&OBR%JW~Zz#CW%4GGvDfCx^>&xSB{_Rmf|0%NDnAxI2BD>whp8)+yNG_9Aw> zv;A+LLC$dL9yfPRc-PJ|m-!0w`<6{{bMKIET3@W_a_7o7t8dvHH@8y0JNlN*bwhi? zq5Y_LX91@k$8F0*>nDao2RaKldqDN)-6`g3TVY1eei!A24!F~Iu&0-a1}Pd&+x#AvEEv+w3ydt-#!*&v9|AC` zOh3gdjL{%AJF&fG4_f#TXS-x~a#rgtP&w(tNNyZoS; zlIHBew3LV?`h?J)(C^rhLP0Jik|55rp5^tXWnJv#v2N(G*lZuHgQ@P4ti2KW9jRFJ z<7W_E|Ak@yfC&-JTHU_oZvejL-+-P_j2?s%XZtwheI3Pf{o#pO{Rno*Z2r)GyAZ=jV{^Z#&1 zGyca2Y`)rkoK72@btda%!mj2alU`$3a>vE2;manQ31JCVXlW3(zG)QJmx*ZE&fGNg zaOb|=oHgt%O+J1I$F9$8kK2nF)8qW=aer?`0J@v$YvF<;?0x8Z1*g#O+|o7S&`~!z z>uhW)dc-OWoDAFmgdd*^wJ?!SKN5?JmA!3pUuIy3UrUhEqwI|FzFk;n+pc-5Kfb$b z+D~19g8?JJ3JDwA}&4Z+ll-I4`-YXcdm1Nh3z~2;TU%0FG7Fo8pn$s zIz&;VA|t#N;apa5j1wo;LZ&X^&oZda$9;`K9sZYL zAg9nRJwg3@q5KwJ+%dFn_4hhY{}A-&a6&mrEGcxVYwPEnG){FrPkQxxsKpvOw9;+C zbn#9^xgZRk@kRJ$7S9n5eRsRrSuk_xaO=zN^mmMg>)e*ZQRNTZzn9s|y!!yRa1zX+a_qq+sC;T({k^2yn z+;NoM33+lxVLDs=0el&6VU%C=8xG#&7ruD&Z20uf)0cg=GcCE`AISx$-MoRmlbis! zq)eS~AbITs$O)GW?8*YY*JBihOC%ekGv{8StK4Y5KioPn+?v|;*MA}3KfA*JJbSh+ zILQo-4`TA?~`p3cDaxipCTNOxv7wlLlf+u>-& zVAr>h(vBgsvfx0P@JVv}BM9zFhUHPk0&f*&RtX6-d=wzhu9hxb?yAh}zFOGwc5uj%00{2?sr zb0^&7Z~K#56y!Eej7gH(zT2O1(hmNWw425!g0aXzRl3&~?I$p42CXK+pZqZgW3$ z{D+(ou=YNfyq28|S0}f0zdL<@sEU48{t-C3U@mz}&$bS(GT`4{t77w4~!%>3m}-_0d)>8S}=pZddZQ4!@F); zo{U?Tg23Lc53r}s`-{CdUzRiY0PrzEdB zgA%e1M%pv)jbovIxky|*ijuIpib@I_Ne~k}H>RF3(|2Hdfid3A*HRnfmS7$^H*P{C zE+zao%ra(^cgVo*likUCaw$c_5<74Q8va`(R{MM_6l?AX`r7&=0_W7HBkv3Z zgwaT>JUjlXS*SHCKV6lNu4hdBBk6g~q-WFEH?Oe?s# zDJ;NmY7A3n!eG(3JhM%B%oK#UY${uvf^PE&Cp~vLZd}_2XYFX;eMk4snjJ4$2fLEE zN%eXbcFJG{_W|yYx$bCOBe9Bx7k6pgXJ@0JgK~=uqh^O&g3ZrYQBKjM<*E0gS08`I z<}cl`4Htae49a+`e$ENUwxF+lS1NAa&F;e4W)y%n&y(mK?K{#~!9Oz`$?r3^Moax1 zHDE=vX{6l2Ok?w+L9zTj;4T@A>+mDIjewOqeMnBhU3ckEuoR=KaxwpZV>+7bj!iqhTbi{u{3qz*=fw!Ct&_(-!qPLM%OZD%**DtTybLRsCc9Bo`+u=f zly&g`b*rd-HzptK7DdgqifTh|f7Zb}!v`X(AgwpkXe3{w7I_g z$yrwcrn(;ES@tQWeXyv+jX(F-4w(mI?_hH+jAt}UCWk{uuvOzO%VZD4R=OSKZ=BBH zI)nGdZ41L#1uh@F`fT#5E-2Z)JPoctQeD*KVH}BQKaFKi@~SGCs5>LJCa}75iSgLuiw~CxT!D7F*gd6-IAPe(Rl1t zhG$R4c4atsa<~MY4r|EI9jKKQjljJe+OL0Hn z7q<~dU<}R<_F3n6>M;Gt@A^WK-`$DZwL=t81rnOFWi&*NgNU6P8>g?j!*;B%^i{06# z$k{BiXch#A8%&Y!V?d!kC^gTPisym5yd~nECXD-lL*{-fd2JyY92+rNXU$gW$>Yn> zne2SSt>Rc}o5Xv_+$k`ZoRqaOo&6AaB z>49T+Qz<^N3A#S_Lf5}7w%{bM>7heK6I%VrYj@J_uqRIx1Y>j4-KkT0T7&ISi@tPD zJA8VV&G#SLA!?LgFOv2=~tt>5c*mPWT3SlOdD+pvP$Iiwftky7!9@z-NW{Nh?0P;q0=RYqE zmu>7W-IUo}l5rYC=2a?!)HffP@CKeCwcHXu9X^9G!M*sRY*Sp{+2gzVpuq5fuG`E) zB;YotaZ}|p?84xw0*Z0Evf$=GK4Y>l_loSkCF8peai?Za#(|7Z6A?bcsMhShW#hYk zj41V*tk1&Jd+bMJV#K_R)oJRMLN_-Rdz82Uup{ASs>7ei_0F+^MXd87J`(>;SASH) zo|$2VaCY(DK+x}B1LK-?J9Wh0Pw?^6;7NhiF@6kQr%#-p7r*wn2mBAlM$_&<5LO81 zr^Tw;}|f^p~YYnDbyPUmpv# zyLH}(*=*I9rT55AM;`uVB6B-Xz0I zzfAaLX>FzaoS4yc(YBk5^v|Mc&(p&rdoc3wFXaOKVitIA+DO^Oi05}A&W$&I*p+3o z>qPq44xH1yuZKLQKp*pz9kDClY4coPEe&K#YUHaxeXp|&b*YTf+NY4bugwUudCXOGX$aD4VK>wITSX%h~= zjcHt1UsYFAHRhK3P~-fnrZENip}VTajU7{4GjC~qm{PS5=ude_=%bFUm3e5+dtTKL^p+{Q3KhFOk6p!-hZrH?|zg z-nI*I0eG*;ruVA{>8)R|pga^w5*uJv6BbDpn=l7K390@e$HBy^y2^PgnyVcD#s5Zb zynxVz)HFN(!7Mpum_Kn|sJgnU(eYn85*cEK1ri%@tkQp(^#v1~n(G@Y7C=Ipm5^e} zYp9riS9v7okhRDe=cmBlEAd}i+~Do#3yDk7ur>8{PTVE7EGPJ9#Kv73DY>x%n#Ema zbEv_IyPDrah#5B6=|iRCuIUAxdvAktVceuEFkBKVP}+*7nkJ;3 ztQsUPt#RV6V=PVAFn_TVcf%;-gWcvYZmeo{;&N<2kOAcp^Tp*_2`MIYeyFjr3Y{e` z&xWR&P~;9ZqANRbH`?HVi48c+z8q$0sIN7~DzFiQ6RYa0t7|J3IB|tGBrUOawi7qS zRx~{k?y1&2Jh2X*o2+M4;(Qca)rgR<*pSTN23CIhJ;oNCn>&p+) zUU4PXH!YY;-%RV96=e5~yT$tMNaTTibUoDGXkBV8jf(l%G2;AVVX`>?cpA>{udc1H zXmi|XI1bc-?LDr4_hQ|`80?~NR7|A9t(rSIwyXDHJF3?Ef@>`MCK&9#g+4$%k@ha@i|>6GGSe> zk#Dk`ip33>Xq;Zd=;I8A08UZ8(rsz^P`RQp|3;_R6(5)sQxs5MF@L_(>q?dpJ8YFN z653GF*j!UlYa)l+$Tc?7NX?+s*kKR*oOni3q?wyjtpD#3f07fZs#{uBTi;MsUR_fQ zgR8gq8d-ug2`RnC&cS6mabDE|*t*x~h^g2WdyR=0N;6ci%!sK>r*L{@S<3`Hh0Lp9 z&awRRPr}w-MN6;%N}RvY>2-BPGGx_O)h%d7*fkOPO)$;;g-y*>4Nk9XZD1e~(`Z#) zRpWvcPOtGQCy@={^qR<)jTx3=yyXz+^qOQfOUIaI`PZ@Bm|?>cZJnK7*WZVL*kS8^ zxKdyOqeeHdpx9v>e2I%I8t-y?<+9mhhizmMdok&CBfDzsuuZX<-m1xF#RV7Ng&X$x3BT?HVD1a%j zydt!`oMQ*&EUsY74YUPuM#yvm`BoQ9!Oe|XPN2Ygan*AIMG>*k0hN1s%o9UZ0qy0&2hD~z2jCDWedJd zWytbIwcD*~DHs{eb`%G6ZAxX3ZQna>qJa!Cxyo(8V3Wj--oRWNmWCR912yQw&KtP? zY4r8p(@^bEf%$w>i0#Lf=k?>NNI%A|I|T3Lnmt+!M7KoiDZWJe3^-oUSSVmW1Es%sjXn(Y^30!yrzv~wb0 z_eN{RbQ80Dxb5v-b;H+Vf&J{zu?!^}zzHFXP|gmE@It`|~`Up6Z@3!Q}Qu_z^?h6$I- z*YpUCs(fvaVDwU3#Q20@;>AOfVC*_4abQGUUg_so%wJgLBwl2DkUz1hp|+-3frD&+ z2{-}sy-v-_i5GtWoe~E3zVZhY$X0NAU-k>QIVFecY(Ux(6Mz}Hz8>*Ie94Rt1oxsL zdJpYye8J$G^bO-XpLpS_!8N(DsVd9qonB~yQX@fQo!(d6Wr7AeeSJTJ=ziuuHZ+=e zBNU4BQ=R@Ml4bYfLcgC9{L)1I3;*-ek4r!!0J%Pfh&ca;2=42nT9NQxaQF35wSLTl zG#A0$-^aC94nxgSZoc|p?<=!WNV7FvtKOOcx7Vt-<(q(rRqv=WURm|4%ZyJ}y)$flm=kI%nwp&6bAN37n9u4PmsK=Y zI=$zAVnPN+jO_HT8jM{S-c|MWVPWU=GylniFB=LJ#+S>Tx9%NG$ZSLZXRzzr;)NpgGB~g@9KxpmSz`VI%Jp$=LU%0kJ_f5L@B|T zVEX<2HA@69j|{tt=7r@Im5VBxo1LIp;qrEfftd14pjp{+;nG}RSA|e40daGU)FUX3 zbH9nOw}bQQ>#^7gjjv zSXW=uRE09{YH)&@*cL_tmp9@5-U(`fTWf>uq*q(-1jkyb4c_pDHBNAx4R7{_*K$L^ z31(ZPEcZq&gpP>P+W1~?RCUdA++qjK5;=C*N-X`UEpDfs;I&_eZS1`Q!{*m7Zs4Lf zIDWGUKM;c@!SZsfSeI6nSLQjviBu|f*vVMPXk1)T%Nwh@x~kf8RM6}g#11VwlJHuXJJp{>u6gzrfnZbhq4F&P>3s;#MHG1y&d;Pe-~#mYV<+cKfCV!R!|j5Yow>rapPeF}}t z0OlIp(6pj_0oEPZ&*|SY=mUxDmiDXmCMfJy}1$xngOR6I^Ilwb-5GO<}OcdbtwDQW4)u z4{En$aAMQKnraiGt&%j`4Hw&Ph?^j8oRnL+n2qXi_ZFAR|NX?;zj)8~@NavS}aeby6oX=KUGEZ75S;=X1d?RN%w>(Lz=*BfD38HGYfLEE^N@LMABHZ2Qr&PJ$-1QHj;HSh*LhHVHDR zs$H}fx+Ww$5#z*3DEgZ5ji;}i(*YKv2~(alfs+##R#jA@Srca14f7lYWH|{p+mL*P zjCB%eb+lSbRnJIo5xOgFqPVg;0xX=5r) z3>Js=wIMvgVT{IfEiY%d9SmW=33su0YE+qrX^>a+q;WQLv)L|QV6OA(h1oXd-b7O; zC+QmY4PMoqcy`?7@R=?j>-1soNg6*9p{d`4b4pUeo&3ETo3jbE#z>pb5KbMuA%=gE zHG;W+hW9S(#iW6;jTdnw)Y^cQ$c%s>U3_r$!tjS**Bd;cX<7kqz0EP$lu(X^TLo_M zm*kjY*_ZH^5bho(G+u|R54J+Nl5B{iYbrxJ1p2K4O4_WX@d}mDP_<2Lrd&=}O1@Od z6C+ATq%T`)GvGm*x%6AzmOo%alM<^#wY93$iVZgKLNnE=zPmI;fM-%Bu&eFenj=^@KJyQ0%ZB@Kw~}O+e@p=3!OB{WMeTu-${5cy@2vM^jgP zG2HwZKW~A!HxkdAB34+T@w{VaeIkC|9I_@6{}XWYWBg|!MO#O>L63hC;ry7mSj6qZ z1+x!3O+tG+6u!`>y%Rf-%v+{>b9_{pf26N8120_}u+;IHhf@q5h|8^Sj=9{1f)~{| zKC@68iI_oO!GFwk@lu$`SI(@Qk>7_hgMH;a3bW6Kd`ryMfNu>_UP8G`DEAUR!EJ(v zCcE@*#9fR<&s~mhDId}}mtD-Kj=uXjV`6F_gZLeAjD^=%dI-KDCHQYDf`;48Bl zKg53tNU#F|!xrN|XHXivyga4f1Mi~oD3mX;dKxg1hkXm6jmi6{ips6AGk%0X~a@2F*hp2Dg*m8_~NF;y71E zTBEY5q1?Xa%Qwd7<5`znl;SJhnTFFDXo)dC^E56L$bgYEO>@1E{3GyjMq&x;8|&jX zPE6>Ik@Mjj=i8Y^-`tU~Z?><~cq-X0+t4@S{NKVQX;h@_$P?hmqi){{pN}g?o}#IY zrxpc6tQIRGT3lszp^=a+KOfpst-Fm6Pc5uQ_ei7W4CrvL(cviKoYCbypZAt8tg7Xj z(f63o$HO>J<57mMbO(yO3Kf6M6v>wbjzkfUn<8RD4P($m%=3f^7*pFY-|;=^<7#}& zvU;q%ed~=UW0B+ghL2rpBqV%Em6tWvV}<8?*=OYNY)?A2OMIoZLv8Udo8rrnSyg`7 zBz&Cu(Cn|MlC{R{Ka$xSMqr|FB09cmvd}_5F|N0f*=oGqC^;e%i8JaP-*1ej#}SRc z%t-Szt*C2Wh(%iySKa0&+V@0^5#-x36bB(;q$gt7JH}9;b~&l{8uyxew_ZAKyV{^3i}_}gMMa~PBT*k~9VdcMur>{X*>Y-mdx`|3|(*jHmi zTiY_I_jaTA66itmy=Hum(ua1nKE4KY>=fw9-xZ}1512$3!3Y_3nU3!b<1I1XEXQ}y zc=>MAjOK+kO*fi@0*>#H3Es(Ibk3!b;NP0yecYHo17Jc(-z$GSdDQ&Go7AXP`r~tj~(kI7fe zdOvPFA438=zV%&;K{qxNJ%B%W%tXI7i5^9;GjuL4`rpRqAmcEOer|fr{~#^{7TRrm zzcDFOu)lLNKA$V)HWT-;QvTTZdgJ+=GiW7JZN-QE>3b&pCWMbDh6)+YRk*|TeLt2P z5Uot@F{MXY`WRPzG5?%{mz)t%w_Ky8=5)c z_a?~(lrjbr#^Kn`G~^gp!_yg#Z>XIZ`6JkuK=jaEh_g$FVP*!*E?-)STREJf!(&6c z_^~rOk1M{2^|i0`55w)^=VkWKS5eFW&Z{r8KmLwBJXc0tU#7TW7)o3Xy+RLPg{~p5$iES)V$_0YG#>Ft%-RAl}A2(rT2}p zCjK;HVsjn+)Tiqxhx=!y4t;T}U?$9eXdyDoTvSi{cB0Uj&>UV<|Ecxg9U~VwzB4|v zr^A&Y&+K5x{mZO6VnUS}_BqK6o{duI?M6Ho_MiJ~{cFbtVlcKwvY9aqf-$@b+=FD! z*fc~;M8p_Vv3c0&!CaGO5;zlRwd1JYrC5LZ#>C7=I%~G^$YspNADDrZIq*M4DRtO6 z^J>&+F2)&)>z7vHs9Q5MZ!#f&VZNb_koy=uFCeS6_ypc06yfs=e0-%bpCM+*Cb;L} zVbu6N;%@y&@@5)t&{h@cV6X${_-ylrv}`WI3T84?j{cfB7*wu#Q9 z^70!CZ>+DwlCZA%7CfP@TW}*EV9u<rG=}zz7*CPmP zHtWPLS2DtIlR-?yH7MTao7&$8N3S8y)c#`-g`eJw4NUAk$wVjg_x0{g50fPJiN=gi z#4zjci%sf|4I(zl=3{Ihh>;hg5lI8xNt3TYSvU|7DG3i$FYsL%WEuV9OjLjRtzxOB zn7D`%7eJ$^=fcsx8-i9_CTGQS5-DatTvXK@;Hn{0>03aW3ucV_BE=M%J{^zAR7qL*ksQ{w#T@mCba+vJr+3L@?@dZvj^P6($=r zyfPXWcV)1RtNR=Ud>4m@%y?v#?NKYsdjq-}}+UP2eFk~A&8f^qC_b6~o zw=66NdrGn@W0`HUu|>yH1J-q%g!N{#*o4{MpzbPN-EDJL>6%Mq$2q-kH5R|t6M#$p zcv=Xf-W$pSCt?^nlPGIy{~LnYL0+#XcZTU<~6A>jnKqj`7p`EhLD+19}e4 z&pu7$0EOG}jUGLwrfz;Mb`Zz>f7HEqd=*6>#=9rygd9R3LAta+K&n9K$yuaEKtV$Z zMbQu-Kp;R&QLrEwP~$NQcEtjUsILus*94WKsHoU^6$O1!EC}k0qH>>S=Gl{_c<+1f z{pa5OAVAkxyd@LxnVli$(SWqdKXfsU7%>~&vZ49D} zofAN|hLq7W!p`#XaVLwt#fUf!QgoTn8wK_2W$X&mgEA-3nVWAo5KETkTI?R zn}d9ys|(%%GUmI%CSVoV3fv4bo;N|-zb(ECGQN)_e*rQF-$>ps9uip%=%4!;kQ}*U zJbZzIGT&z+TY?NX6=ZtbO5a}kj*>adMgN1u5g_9~L-rhvVtD!D0`X#zBULG|XD_n_ zcmv4tSS9=*&xehisYH%`QjBI!{ff#^mm*1FYyJC{x?Y8 zB7P$McOd=$Ed4<-jO&s9nt`-W1sQ$^k>3rW{xp#8rb^H6k5IozGT+zYd0#2{cCkw2 z_fS|)pM&)Gjr0dWhI?50#%P}ye`gWtqFfiZLdyKYk-37wI*@ySv>z{f4u-ad%%LB;TO$1xAk%*h$Qpl} z?C$~@?>fnkf(&mP$aLGhxWdD-xQ$e;tCxNt2 z2bsdYk|%(SkKY~(mN6yMU}70w9n;(f6aB6O+kubL28~~Q+~Y9u-tl%!vlFI1(0m25 zr1)*MUkr#bNFwNWwTTIT_AJ%HOO@Bk^X0p;r~}M zzwF0w>w(NiL$Nu?^tS@(o?jBAyQ#7-mA+j1O7Sk)uM-~xnZ8FrrtdMyugLx_@iXyT zkn!+~i>Y8!&;^@=w&t{giM62($UXsgykScD4M*#umt6FfiwxS#XMGqfo6|tvN5_FD zffHgb&Vh;fol1?VeOwvNcnZKouu$>>kS>cs>v9E6=1RB|CYC0Lf0>)-C0B{Bf=u&P z*>3}RR^ONXXX3xXAUYFh-(VUI{teP+0G&0)Pz$7-AURnw2c7#s-%E0a><5b3U~t`~ z40xe%$!?G({VPbXe~Vnm&I*L_0HaS7 z`GI0a#Wmz~&kq-qO{H%xnIAT$yEMsMVIF+cB%ue4Ghx-2sz;29pGn3`hHE`)u$ukSA^& z$a*_RTnMu1xD%wmhr}u{IFqUPkfs8fcF1locm`xn0Wquuj1bXpBam@$TBt3U1@cC6 z8c28igt@&5o(&UYT|~`+#SEM?LYu%_K+3B?2D%1hppQuA{14^#C4U7nqkE<2+z{=5 z2N~&~AQSPo&?B{~4=KNkg?_QPPmWO%D2uLXG*Sr4*7dIe-d^D5W|d;?_qJ`}$M8U7EFk$KZQ4uT9f5v2P% zAoJ4_WchRe?LA+Ksr<{TxEMic3Ffz$AKqhUDqrB$7N9d`%hFd%ze)0UVmzh~nX?8U{kH_!jAnqrd5kGXHW!IYLB_C5 z@~x7qK;Ad2L6*@*keA(CAj8=v{VtF(eJlPVeIjNL>8~!x3#J*!l(h$We*4Rw^OC_O zK?XSnMg}zwWRfO>)aOdiNlBZDVwjk%GLV5Sl8Z~kCE_yiDv*&^f=tv6(ysy;&T7eb zgN*rJ$@hV*2oHc9D|txrqaX|8X^<&?O?*@2)G6<32S7eK{3;o>$O-;{McMIjVHlYt z&T$5@zdRnqVCoDujA@#{#Nau{Nwycei>}D|PiA8T$a*>n}N{PrId_wg}6%g z4}v^LPl7DYS7iUGxC^wsmP0TxB>~Jal3|bq#yQpC7jeu+M;IAN7qOd|4lQgKh#+&)L`D4W>?akm_Wy7s%4dl+0zS z%-vKFJ8Q&E0~u5i7(8fd3g=uIYMFScc(us+SQgAJAXD=&7<|CQ&Si-7x(#I6d?NW5 zF^DNp+MfV2?_DGh7CEmQyvyYIG^s{|EY^vV&yswO*x_$yO zX}hKW6=dlgl3cs3?IN52Qr{G$`{p21^xjjht9mL+!_XX)MLvjRUcvHaO za?_cZBdhbl6|lMn8I)kNC<#~MA`x8oe=FZ_@gPRgX=2V+-& zb1%pN@u<~u7G*Z(AK+jv@R%`9B&>15PcZTa2dy!_&!3Dvjd3E8VYOZYIAL)fekkH3 z@&jW%k@!eza+g&TZ820&*Q8mJT~o}Qeb{bXPT<6Y^)$f%j***oF+UT$1aJmKei%`} zIGn)1=@{wv9C8X`nNejEw_`lscZT1DYP+$WK z7`u`#Mo8R#0Kva_DTj)7djiLJIF4g%IB;WzYUs>M1&7h;7o|GL^GdVllV;B&&7MCF zyUX7&pTA)~f5UwKhI#%tEH8f}eEvrG{EhJW8{zr;sm9+ZpTAK)f1`ZleSQ+?^1dK`ZX;?YJ{Wxq8`llywdFXq}lUG^KtwY`ur98{1y8A6&~#miP-H=>+Z##Ph;bGHNw$; zk&a2eI45~NsrNk6e6+v+mvK(<#W}?n=M-O@Q@l9Y5^(y&*P^gi?ZFR88&5Vd)?*3P zmhrwA#`|Iz?~7r)7XznxSdD%4b{nQXzQ7NW9zu=ofX2ZWKgV$&zz^|?ddBaAQ4z;P@ept>GE zU*b6k`;Jjf?84ZH=DaVu;I) zYAkKJRfg~0!{OQ9_`xs7UB_CZ=a*?ewsgX9lxZAJq#tGisqxb7OBf4`W40)74%Oak zjRZ$v5hd}u)p}9VPq|Tz<#6t1YxHb6vg+aozl3>>z=@q-j;C?}74Z>V&5u%y-4|%h zaa3fVcm@M=NGwP5UbV*80gmKB+Z-cfFXIOz2g%Hf0X65EAzflZ8bc_e*o}(=ko+O? zsXp@znmLFF{V4L-6fk!F;9`c)JeB6ptbP>9!%Y#FxzAO6! z*zP^j0|$OLm`Eou?oX_dh4P~DJK=AjGYSBi^CID3BL@;u9!catjF+Lv2)+zKwda)M zj2u(+`Q{KJ#|GgnOnzali7%xlf3s?WFGA3@7bwROml*48x;$u&o-IcYR~uEVRF+{J z>`VNRNY51q>slJs1mYrV%b_$m zp6LU1M zB!=MUS6jYF=u7t43M#`itF?n`19>AG5M=<#ND6HZ?EidGEmf zay(1##nh(lkKWy!{eROn4#-8s6@t7L&pQzzDZ8aOHb0c(bTl85lAF*{hMrn=0bFkOS{(a54 zAGjjtj!h1?uJ+5^s#-Enr`_wCyDT50995$OpOklxuY|3KSt~+O=KYO%}d$j)3?y%fV)o175 zzLndQ`mB8Wta3e8EXG;5Bg6!5r0Fk%*aCWo8zdaxh8r!)h8feohuj*_uhk1W4!6kh z>tnlUI^0`AHZ>b%u0Bd>cgf_Qg?^`A;M}3lulM%JY=fs%|5lfLtw`>CTQ%}cBEQxP zm77!fL*)iU+@|7aT|0CZj?#I%iE(yYR;G;1u0?jEG42R-l$G-)bb1j1+XQm6D{muf zZclW48}83^w2iq$xC_W}Ex7eiQE|cf+zP~ADBNe^NDVt$v9};{r!6v9hS@fSd%hgs zhWozM*r*EHJ%l)M_77I&uwp&brvOm%aCvjy5IJ2+; zu-&q2y4}05#LKU_Fj)V*Evp?=QtQ-TBKG|nv%O1c!90a^KOsJ=fR|M&sxm9OC5KW3D3RK&E$a{WI4#b5%1}GSgb zeCYQMu2|)2Rj$C~5=yQy<@!>tM&(LWu3P0=Rqvo%u4&~8M-EDHeJR(JvYq3aQ~Kp< zRIXWNSPX;fSQ$ny{Jeugw5iPo*AG%@O-odaKHr+7YjEgH*85iUB4z7*jb2`^N z@u3>?7!KD#c?VYl@v)IBez@9)D}lHQ$UD5ZuDNuBj{x4`y~nWJ>NVXh5qpWP#cOaYrG1fjy4YQ8Bp%Xv zdQ7}ST#0L({(nZBKz06rh_uyrz3laA(8L>QGdUPwE{-w+${BWLe~i$L_CzYimSy^afFD=$GAJct7Wk` zLL4Uc5W9*k#b)B+F4q4c@jv1&al5!pd|G^5yh~gq4iyKA(>vSnbH#M=WU;PTTYRsR zb^o?_g;*|57IQ>L{IjF=w@$oUyihz}JVQK9{Gx;P_nA0C93}?DzfQ95J`&#-9~K`F z|7vgD{VuK-9}*XerQ#`KrifRr%z6E@o#htsb+I`rBI`#JaZ6h(zb`C^{9 zKh@g*C>Dyd#UbJ;Vq3A5$YnhYzgm1;d_?53A=+1pO~r=dSGa%B{&TU&v2vlvZW`@x zLj@}mtc&~Vec%xV;E*CEm%fvaN?xUfzB##wO6NiYIVo$NN z*j7AIJV8tp_9{8W5Td_&wIJ}*8l{!6@DyiL4L zyh^-GyihC_=ZMq9v&6CDaB-m6PwXys5L=5)#AGo+w38rC=oj>dnD6h!-Qo^$ySP=X z7M~Lz6CV)Qh_{L>#R_q;$VnW=J71hBo-2+MPZx)Z5wVxZrQ-~T&nl#yBXU9wB-asx z;vw|s=t;EJ+J+YSfH~Oc{*KZ5yj$e6B=y&d zSBRI27l;eQSz@j@Q9M%|E)Ep?iR^DPo(^Jbv5A;0CWvx7+$nx6ZWHa)vlFV4{H(ZMTqoWs-XwCWoAE3YFBVJ1LNQOAAf6$f zDxMABb;=9Dt?%dGT@aU!q-CfPRW(euRVW zuM#g4FBG}(fcA65Y2sPpSn)J*h?pt%6gkera9WE^#AGo+JdAN6y5kB7@_TW&xI^47 zZWUh>UlgAd9}?G!w~IH3SBp!u@iUR{Pg4J;_^SAV_=NbNc#p{UGU@MnF)Ege7l|d}TyeU1wm42aT^uS# z#9m@2v5nYFtS|EAQ>N!II?m*O#h=9gh+l{wiEoLoi!X^!i4TkSimSxy#i&>=UL=-? z1!A5!SsWvd6bFkLV!GH#Y$G-k>x;F;fXEksng5@~Z$-W`O#LU~yW$qHT6|7?OngA( zi_Y|atH|*h$`#^LaglhQSRm$!lf^OONO7>3A*PF+#5Q6xvA$Savl%@ip;9@k#L^@ow=JafQe? zh$o1NB3|_|@f^fp4ddG;?3f<;xf@L%XLEMNiGn%1qI`qAf7G`6(gcup6P_TNKO-*iw(p&Vo*F($A*7E z+$-)9KNH^<-xRrj2h;VexL&+pTrJ)ra$be*uN0Sv3&kRFw#c~|x}PLwizCESM9$~X zT{rP0k#kAZHxRiuB;}xZDACFX#J%D!k-MkCO1xg=u0C{EE?y*-h;zm1;@RRj@pN&h7!iAkUBoo8x!6FgBL+q8 zn8frP5ci6^#LvX{#W%%Q#TUdU#0SND#8u+;VpJ>_FA__{x#D#3Y;l};x;Rvfh}?UM z`RF9J5u1ti#oA&({5`??`&s;t_=Wh9$UU(b{wDDy@hS0P@gC8>XM=h!xkBV_T@2>} zae>Iq;Hl?3I%JMGTFep$h<(J9#r9%Lv5{C;j2HPj5X0xLW8@Fw*W$m$55%{`SH%~^ zC&UNEd&E`Z^k7cUY^#JS>h@oaINc)B=LjEKF&E@GP4Tx=lL5rZOkePh143mmyu zv@dEoq0c10FTN?hD!w2-AwDSHBd!v!7dhX>c*@0##1e6?I9)tj94DSG4izI}FR_c5 zCN>uvh;_uEi1{{~e{rw4OXMzqOz-<5=Hra~s`!Fv-?u~iE_sc}-3IA@rO0nPP+lr7 z63-J0#5{4bI7S>Pa*Z3q;d~#NE_M>zh|R?MVr?-X{vNdce-^(LzZ5?a-xarr)#7vF zW8wqi8u3<<`$00D72;BHk$9e1Am)ja#WCVYaj=*nri-1#HexfezF1ofh`(z-ko#dW zecy^-irhDo`gcX{r%Ab5d`^5!d_Y_y-YTvXE5xPZBJn)2K+F>-i(|x*;$SgDOcy(e zZNz3`eX+I}5V^l8^YgR#t@x$*iTJL#MXVN|6CV@#LM#44Ys6c{m12dsR9qyUCvuS} z{zAFpMDa|K%S-VW8YuP??d!W3Z55-Z{4f;lw85_ zAEu|c{D-d_IhN9k_N*`hQ11lOk^ zom~@P-E;q3PtUaro*A3d#LTz(^mqI8VV^$5XTHv7?(U2CVV~d2edZxP_b2+?@AT9S~?b=fN365g| zFqT~Kp6mPcKyK_y1z5FPh%L??SjI{@KR31jd>+5Hn`_pR+bFRN-mG%Jptztk-#b@6 z4<-3|#nWdavh$0yq&Sz$MX6X&JPqI4vKh^tmCqEx5f>QSaOUODn_jdCvE|R>wT6S!A`DOb{$Iz zRsk#DDp#8e<4Bq#0y(nunPhzLYDU3ygyOAtWeONRlEIb2Hv9O#CBKJjKbIaWkRwC$ z*0|cl9dQQaaJtUjF;Uqi!!|1Wy=eOd+T4HmRvc1r)MtF0L>y`9-Fx;(tvS+rruXmP zzfX@oy;4*A^ymo-Yn|SsN8jGPDfLgMHZ^r>qF0x?Eilc1`Sp(>XtVz-^jxz4jy}|vEx7bZ-?fLn?j-qa|*NgZjw1Dn!^jjEDMJw zH}}XexXZxPxDR&3y^6=}2!r=i9LI!_H*Ffens#g$Cw0I+0&x8~I|xS}$A*DL-m~xp z$fMJ77jE3C@H>&60UR!}XVH98t z#|vW^(!n)sIF1biEftTW!|2!>>v?ffclI~d{(r}WQB*c_#CdYP(P14jtK)zk#TZ#7;|0QpGg~hR0zi@51ra$$|Dtd;9f5u z|DT3|59{U^=M}2Vj=o;9k%vJ@LKxQxuTSsbwc{PR_<*_z1Le=-=rC3w4E8}sAdFZ6 zK=y~1n>(j$9=>p!H?2_hW8~=UGsniR+-DI+PxvW982%$1GN;Rlhmv8l&->7s+(il3 zWj0=M264H@wzgrF;*aim&7#Wv#4p$6Lie_!wv~(?$OYo}*M8}3IwpH(G9oY8n!HT8p zq1!a9U5Ev{Db#KWuxBAM9nA?>3~5)ft-LCQ*3?&o+U?1N)uyc7ken3=y|R2D6#J7q zXYJmfJlTns?T#*Lw?DZ)Ty}#+^*3?CiAAqtSk{K*&cOW^X)`8^7RZ!JB zoV9!DCA*g(xU%&Xn>G#V$imz-h#x8i_~ALgWvOi%G=c@UY0xN(N$6EWni4jcjrj#g zg;rX~)@{?Ei;cA8N(g+8*|g+p{5QI+9c;Y!wn9?MFGWHRB%eFHH_|h_cloB2!=ra3 zFWUOKA-VN1l;4My<-=86+bgf1XpECkdXuxN@Gs7m+i$o6qobcR zMfWU=?pYRHdNgZi)Isn_F;hAz)WanAaMt!{&i0I)kIUBlV_uf`K79BvD*?{q3M96A zXRu4wHs2ZzqN>nW7y2p-&s-5bwMY3zqiPA&nPopAtSIUf+$7nMqn9yaDh@?VR8bQZ z72i>TT0N{?_(`~7;sE3Jby$_ZmSPfP3O2d*655&Tqx}1@iDm{%YhQFoC|cYxdRmX@ z!WPkn&n$nha!4?F+7PH-{#!-PFUiZ^W5^%crfh#@()wuc^~--NO+py_$e+Vt zhGhIv`e1Z$sJuF~ysGr)y}J~ycYctgCSHzBJ_6O>4ntM&>{VW=(MytWzAFBxIEbYD zcX2p+)BTLK8g<{u6BYG1PRT;VpLa3r)yFEQJajGt7VRU+#K9^T5 z40k$MAq^Xt^4C&*`S!YQDXwYf61ycLYB>q+H1_jP)$a#*_* z)OXa{tQVs<-wr!mcx);v(1?})5ubcU*7gcq3R!4WQi|MI`&Pau?m%+qs^pGuN7)2T z*}NR)>I2ES<&WTIc_8_meT&ngIWMOFmfU)f6CKW`DfAfHrqKFR5nWvQhEPV?=CW_1 zSua8?yPw%-t}BO|YTXlIz&Dy>_$#{~{}K-*pEV?ei_bX{u|HA z+wiPy$=724S6;$VoZB*%&JgMb6GmSz8f3PU6RGKU8m{3q#2hw=6%rxEl*~ zL^z5{c3Jv+GrjtPAe{255Kqs_AsHVbIh)J&MzeM#cl;!|<42VfhQVf1Qbo@0=;C3? z9d}jyfzxza@`!DfWm_zp+2wgaJ?k~{8Qjtu7RL=D)pxLx`d(~O)}{>S0UA@!5b z*f!X>$`}pTx!d4obJ;EwRg0ISS-X+tuaY}%1ip=?q*o0o|D(Ps(cKksY@%}zS4-|RCwE%+u0HUyJ6v#xsBT(&T40RDZ|wz5&0@6$i^VA;CKNIWN9@Fyn9d!G$yV zb$iYyZ$i<)?GzSK7Rso8=(0<1__i(*9y?!ZU$RZR8j22Tfh#n=H@YPiSszD-%!u}n z-puAAdS=+RG{4i~*oJ5e&~Tcz=XbQv)s@+QJ_~0~@`!yXpvu8PqkpL=+x+bnbjCX`l7#=!D^^3Xd`q9rP+UdU_tD|u=(TM2J8jJP z8P)od2^pimUz`#x#EqA%@xKW?=zQdjpl5NhAzXcEIwoOo{PstuV9*j zqqla++L}>)Nqq!z=~i>|D}ODUw-ex5mNv~5rcT&9RLGtj_98Ctg&56g|MopxAn8>V z*YZBKm&?S=slqts#o?q-=t`W%j?j6><)~Yx64VPXkK@ZvPTlwrJD%n7mxu7NuC8*( z?}?See2iOGiz|X5c2X}7)r6gj6T#=pW8AZgYeKGZn+<>G9WQL3TQ42k;PxYgeN4DY z2b)TrDFg88#j%|GKHoKT}U(rL&#rK?~l0co;{30V(ExDAEkL!5i4RkMdj@T}L7 zlUnfIw|6c=IOhXqEEK{k<#|YSI5cBH8J{|99kIDbDBPRDQ0Ms!)y{${KJ+sDCk(;A z)c6)>;M|4JM-dk+nD4~5q*Yv+6OO$IAK%KVLScTU(TQ)(r_Z>waM&BpD=R9>FLvU4 zSbb7VKYzizg86y)DgnM$P9G^To5BSb&<8%pO?|_dUW3Q+y{tvkux}>>@8}C$f|+J_fcR6bCN*3*(TN{nGukc;^GIv%7@iN|G%IvXyoXsm-AX;ezKssz zM|1O*xU}Bk*vE&r}CwFVtxJS!5qe9d?; z5{-EhCn1dzYcdo?7^6yPXJZ={o{zEpVMCpSlYTWWMo5vHH+{O3(1CFT)0PE1ZBbrv zX+d70vFvCque6pX)J_aFn09r*Nuni#tjkYwrdT;1t)P+XIkmh-?Z~Zb61s4QhdL<< zJ-O>{*nD-{N$BPkRX#qFozUGYC|w~5J-nhST~LZkEFs;NOp-4WvkOi_&$bA(&XWnl z%W=!WMeQW?@j^yeh57Sml|t9o3*SzAl$7QdISKu&G91QboIgLmc-A5(p}*n@^8`2v znLM++vd#HGfKEchrmP+63{yUU@y4Zf49_em#0Z;{aLV;i1k-K_gfVcKU&<5>WJJNV z+XG=UO_MN~r#+aqnojK1m@t%AKrn4>AnaX=3B#=FextG;v#jbNqbgZ|*iN;Y^*B2$ zUB+$BMlDoVo|>9-qAh|FhF=PG!Wl?W?{K?kakC50D46Gj+cO~6CNu-Z1sH}7pJX+m zur0(we5lq5cc2eeVQhqBHf;%awxyU9J}(#L=!CmlZz+&xIPBTnIg!@GzSehhn-D z&axs}T_-%;E0*(|@Ca*83g?wAbi!)&Qf%x_SPfr8MEx>~(jT>dtEH5%$&4)uYvF{? zv{lcsTATqVoUKG8K8O<<9%J(rROIq{!{O;pcozM~r6q+?VrBU@Wren|Q_MZus^*m#XAMy-{1Ehve4O6}wh3=)biAG0 zs|D9jQ8#l%wJ%|G%7S&vMwydDK4=c*W#OeCARnSm4^+K@@CA*D=l>r%{`4BASzLA zMrrP4Y^q8Z%+H4wjXpYfaNU`q@oXE5>8KI;#h7+R^Oo4fR`sUV%1-tscD2eDR+%@g z1d}QA3gG%=YmsU!OwirzJ-JsFZJsS*#&hHd)q=;=(n1UG{Q=E!;Ae^GYb}?Q7xeIeu>!?EkHk=Hm3azrX7sgVD7&d1$qke5ls6trZ;_)Qg+-EbrW3@@?uh} zm^kPhlZ0g<+aX~FOeKo5G81lP^IzST7d>qUr#35D;^2v>Zzp^oNX!W*C;@buXWa=j!BrytV+M=d(SW`wm#^*RH&XhHJ|OBXqbBkk#QO_!R1;dH4Nl6ac6 z8^o?1%NunI9Y2<*kN3=1%jqDP0HsLhIhvI{yfBIPd&fx#nT5P8YAa zN9jq`)obrra@N(!UR#egDZlvq1qH=+pRzjLtVI%^31Sv`B~G30tW@myl@#V*fCVim zqB`kT*VL)awAAS}4M~X)-OAe#WG6N0gv&8jVp|Db`Z!&srEE=;8d#sQE6UHCYtBlI zgND{Y*j|Z9TwY0yWg{;w<}$_3j^>)Iv2Pqp7n70H%kdLQd=8m$JnDW8>^%=dpf$tw0Y+{N$sq%hfirwNK$(nZ10#2 z&bX7LeybbP#?Gyi)WL=|=vX^b=1x*a8|1K9F6^2u6rTFIqjZXFb60R-KH9USE;cvW zxXSa3^B3gWhAvi;C)+^B@zqNg;tTmYpq~L8NJN2Dh!Zd%@ySNR>m+x$s&jgtk}ZDkc)dk-aM!Fc{iJA zS(mUFVNnq}B*olT56@G)IboribyxB*+(8-AAb@pRDyOximE*FPtmCkkIE8$^oF~Tg z@^Hah)&oX^xLi!yh5xqNdf}O6g@wx0q61dhn7Q&?Ui7d4W*@ z4oo*-d^!C7C(|-YX=#k0M>86y>58*#$EZ_iUqb+LSIpdllCqz|Km5Um9(@ z5F!m}p|~!?!FB~sTqi!mw43R~b*4L~aRD54=?Y7nGVXtpOm%zKAl`ukxh8N9;NOSm zz(CH@W>{L!B0h^Hybx|rVjVe~bz}`Cvl2Bhg^zMokQ;K$rUV5(@M~1+3rrSlmYJ&UP z1Se2HIj$_b@%d!@vSMFM{_DJrLc!mz*45BBhT7cB>yb@0@rm)gV@=VO-XNn2OJ%y;vaVnYQ(X=z`YFX1BQjCUfwwa z>!>jjZpKz>wGe(9A?Edr>Hu6fDxF<`A~JF<VlfQS~#bVmuCc zj`)4CM(9NIrf=Px0}ZM)=j9q9IZohK26hp&CVPExx(D)<-)6GcstWE**47$-tS%h> z>UvZaw`-gOc*6vNaUO^3LQ!o_L{-3L`iZX6#=I^+`UPL|gsD4N)7@=MBbWm7wR3=TyCY<=2G z^-?%#_amz_JE#p zu%71>FSvUG?dmiL)c8vZ1V%Ps0Cn3qBO7!_boCH$xW+;9Nzh~1!HXL`6BBd17xM`S zE+#bS78sah6WJk&c^j0-z#GQLQWu95H0oU=BJYiBM4Yx7fliyo0*vpFG_pZWkj)fi z{Ky7$ccQ#WY+fVcywwPCh^{3>mJOXkY*iR1;0AFB-UN(+!2goHH@0rsOdW zUUOE`n)u4LUClW`W9s)=6aGmxzL}T~Obkn`W6MCg$?c>%lW|fy#XITHcCLe}a{{Vn zm)?-+p=&JJCP_5`pWFr&vm0|hvcbTl-bwuMmw9!`wn?V)LQ^xJNi$zTk8^&4DG>PW z*F;uUMCJs#b?aU*e|jOhz1{8blhb`cQEB)58Fs2PW{D|5r+ZmRaZFLrtAAevJOBLr z!UaY7-KH~=63)4lbel~xJBKvlnw!30{>*||rvFC`l4&OCU_=r)4Pbr5!ZQBpgxx)B zXJ_^B?44hXhkdI<-_IH}t7wJTp5a!+MP`bn7l^)-`C28~BJ-)t=3;y4Ii1Z3{(6-+FVO4)1> ze*o!YpX9&9hA2a(xHZTx!uAFk;{cGK+RX(S!(xyn$o?OBgLo@Q|941UFTM;izG}(u zfDC7+__LVAdjjDvV| zysssH3o^dFAjA7X@=vlq2nMkcZ+zTeFm(b$XaQIq6F|n41Ty9n$&En9)Dz_Qx(7>U zr?o9)-eMWvxgf)t4KfAuL8hQcGT&Nh4f$@6DZU?MxDSa>iqDJeWCs6p34{JzsxLu$ z{g34DK-Q<9rTjA3qZ|P8YtVy0%*w;#*Ed!#=g9+Ev@I-3FuuDJ&!|$t7zDn{nlCP8e zh~%AMd${`!WV9iSzA+mKAmt><$&wpLZVEE_&A~QcD=@guB&rRJc~G51)e}b52}Z1v zi0cY6Roy|x(jR1DW`S%zPXih2Xpn_}ru5^apD6uQ$$8=&ko9ve$W#@946j5ocdKBy z7lACyOF-7&%cNf}J$JcavwAhi>thATLcb2A{~JK2`$oyDL8hO(W{~SZhW{YQ^uHi} z1_mdX>JQT?u-P5c{0P$!Xnv#S8B<)`)PvFe2{O76I*^o;K*|jzw*z_EvO`aMcIs(A zL^3xWL0!4Q1j-i{LV=~Qo&yt0i7zd%3NHYe+6$!T>kHH`mi`)$!Cxo)n?RQKD(P2) zbkApk9Pn9?;k_pNt>U{NJzWX>N184hX9Rc<431(>55q*4A@oNXa&2%l$o-Xq!|9@_G%cvP!&IfVFf!O7 zAXaR}@j(#XN_MVJqshDl4};@eiy!+c_%7QFlA}~Gk2jY1$6NIM_~CnITL7*kgps$g zdicTE1~9`xH6Nhk?VY!B-)Gx+C+A%pL6?#?$O#PcQ~dCyGX`1L1UZ2>KO5u(FBuGu zcXkk4rnoxWn6P9)@%eSdTC?)s&%&L(!DDM!h%J>e&*Ve~t!i~A5#L~z&#DH-Iq z=Isud^i=O5ECvK;qdeUdIN@ytrTQfBiH(l1F^~B#jJ!V}8iMx&1j%6dgEuD2j5*aL zZ7%}ltu5fp;;o6d6ByYLwlR5_MOZ(xyo7XyAKu;r&Rk-)G3N8eeTg+PO*YE8o*&+x zi%mQ;X=4MQ>DlsrI?dRQ^;8Vw8>5;{3^56t>Di`3s7X?R z7ey<;3x*Eq7bkQWZx46lM>DDV zFwAqy_PQP}ZPcI?;6!U=J77kBYEE7sG=Hb#hf}*7V5|XB#|&o@o3}pkF%n#l&<_jc{go;n3`*gw3h!XZ!4Dd-iN* zWnbvCFZAq}z<>q}2VZ687Qx33$KQLj){cyGF#HI|X3(2M+(&5b0Pz(VRy+CNxv+R6^$7^j#i$9Lm6fpmI<+!GP`+Rec4&R5` zVpYK|ahmAVe2r~2E{ZDrQg9uxbHS(YB>eb%&yEA1`}xf89lXc#d5!HbyYPG_<4un@ zRX(Tj8II3y-oa-yK0$nrADIldWq+pRpd9ObUtAe4}FOYmm&lHt|&59(9YVc;-? zNB!U>XTG`#zv2J)KR;%_C5LMxzBlrK1~R@R?5w^06qC|5-{4&Kg#3_C?hN^UpPZTC ztbNiaSJ!gZuJ_67AYbW|?}WU>C!Y`5AK!_P*ZS;FfV|o#Cqll(CvT5;*77xa945Vw zK`!#iD^d5DztPa&;M3oNyip%UJtcoY>rd_w-xQx0?-S1x$BJoj&RXt&!1(LqANPl1 zIPV0UwX=Qt*C0>w$@fE^>XVnq-$dyB;XQ&d8QzVUxy$ysUnYHl$diY^&^E~AT5+K` zLTn-OLz>2&I76H&-q_UId*9vQ_s{5lsdygd2`SGLt8r(i{E`?D|3b@0eYNO)2ceJT zbddwhbhki6+iT=$wqAzL632?eMP8Hi*GD{AY%jJH8;Etppm+$^I{hCI_lmp3&&2n| zH^o=Q7sMyT2gQ5DRpRwxR4f-S5=+Fn;&kzBah!O%I8=;?y~Ivp8?l*KU#u+##NW~W zG5?F1kn~C+s1o02tH<+LO;&gb(k9e}!UTi5g66=cb;$OHAFx+3o zAH=W4&&0Py4s+A}%i`1GBjP&oPVpx38u4;*v3S17VRwc*Q#@CkAf6$fDxMa6^TJj^}I`K~NCh;1vT)apu z5$B52#k0k6;_0FtadJWt$-TrbVw%`oY#`PVgCbvkWBv|^oLi#IxhL`y@m`cJss@e>$kk1TX~FlES* zaXhc!hg$;smJXUo=Vkor!7s;Fu~^gW(aNc9sABuIc9c04b?Z!-IS0bU1AHf&<04PP zY*rS55BkhAeCE4+<|RIJna_NU&wR7b%&{pi{KtG|Y)W?Qj*&;Gw29&oIx{GBq)+V= zd4w}>yUSyC(KMq#+D#IRJ96<-)CGCPGkm*SVw+2h0~~LY$r3DI%f%`Zvo9y3<03_G zA4ct~m}-vLK8)CN@p$_%_UhNGx81jKYNCA;$nL^;y!{s&;v6}t_Plal|9D60RoGV! z?nu@V{#a*t{4e`2axYo>XH?lZktF^tA$WLuC;rp^i&w(`47ht1_b^mJrwCz?IE0!o z%*V?j&>Xo&X%nePaq%b8Hy@wErT*co1dcg^_}E^ss>(lMdEM9!Hlc z8;xcNqlZ@+tbhJLCX9dDf05ty7y=I?>(zLc>3Ct7rBz3#<7|Y1Q8p*~KZNm5`!CMZ zIlbe52;-mjU;H1#;C{BT19=%desD~5mLMIgFU9&&qyyF6S+N4kAZx6Ri3NklZf6_p zSOvzf#JCnnb2ffF*q-x8x5ri!DF25eXAd1suK1dpNiAD?A(F;D)P{Nc`s83M9qf#l z{u_1@OO56z0z9IvWC&oEwFD^<@Kk-WA&GD*g1z=g@rD|R#ebOLt*Ym z)bKKFE(FifhBtEusfN#Bucv75WbBqxUL9Osl{|9vZtNXb{d*jC>B0tb?{Gu4O|gB( zDnkj}Fehs_HpmHP?SA**^4}^$0qliSc`Ejs+epV*-&gG8?paAaqGjKwSH1gt;O*sy zE6VmQPR5=)n?jc{kApG}mi-*b+H*D*RG)BL2w-?{}!8P*P3&;_KkYfA8_WOW9cOq`;PL;v9cPZS zlT0Y|B61Q6bw-}zv1DZLwDiEE7WPj;P>d_C ztYIym(6knIP>ET!s67-;xVgM~4x?b{Dz+)oodMkd>82(k69dD4n}BE3DTFl0NL`?* zQw(vi5xL@_PGSDcQoCbEV5rf~f;N#_?%NR}p376EEwozWa=3Iwb+B}P zq{-GQMu1lftn>~fo)M-iiKk^R3ZiZz46U7d=cCa2_I3hIK7%qoxVl1alF|P$ZU$O6 z={@^9fwqUOqbud8x98|m>!@d+zD}SIUsOOym&*~K;!H?~t)o8a*u7^GpXK1_GC8^w zVltC-IH34?^hByw&9}}jl(Tg)XF(^CN$=UCH`3KAaHDlMNABK^xl6F_diTgc(%Qsv zNd}@lP40e+xl6Y0`ln|gb?ri2>H&9Xtdm%~TB1cTc~EdpphK7|NaBOMM-D-R5%oBY}=aH2< zJ`v82^YVZk;1z{9xKB1O72xKa(gtNv|9@DG?zMGr?%ao>jWcW3k6exJ#2Qq(!lEMn z4?c!hHn1oOMiND07AvKKTrS1L0S#l4_eL;qkA^lL0%c@36=0hCA zIa~4^kc*=@7|(dl2N~}okc*`*mi=wAe?anP$?t;<{{xWA0zZ-bndHwU?*tkCcOc{c z31mEcUxj);+*03CavRB96;5}9q#q_d*8$MqNXdMdrkpK#5=ehV(qAY&+db;d`3eM5 zkqk_*;dHG`A#cPFYe5LQpc+PVuw-`OhjlPa{9$Wk`nu!iTOGq9W3l*FZ7{t58r4L4 z$S@uzGL2KMk;z(Sjc{fTmT1tZvgxObHPUOLHPVl{XT*AhxB~f3lZl$(QhKaCVLbdH zLBuqxrFZ_ICCaTjXKGujLp=>feU+0yRuH7n>SbY$^Ldg-)H`Nd*5ysf7kccsLZv2(`2?)@^Jcx6~dtF2=*D#zz#9GFy; zaqcIVX6*Xzii{IFtjHL&=9Y|t$!jvMJM&)|PnAEB@zJj@X8d~Z#*BJ5Y|Cg{^=U@8 z&R=I_y!TUv`|KYX&3}x`YyGN0~yW@hQx6EaV}>zvHb1NoU(mKSDrZdaQ5+OCT-yMDPe^XD&? zXQuyHk@;htYcktsT$lM#*-e@88*a;dq~%?i?_PON=KSFOnU_~Sl-abyW0~!?J(c;u zmCt8Bko`(#n~tw#Hb~x*xj6pq%xQJr&wM5IdqOUU7z4V{VT`50g-cqtZ z^R=)4n>lONUzvk14n!(Og(8*h5+b8QiII(alOl&cO^)n+_k_re+ZsgfEa%I!Dk&gznk9;wwV`R-;T_P=abc>8j?HL(T*eCMcEBzy*n!Ax%iw8y`-wugv zI{VZ}(uX4>iIYZ0s=v&R^e7o0nUFLo(&yo`BU^KFBPZ6H9!Y(9X5{lr=0wJ3&5vB# zusD*pw=8mK%c97r^_N6Cy|W||e&e#phRw?&6W_c%vhm$3BlUM&73ufg)scRGUK2Ut zgq4v^U9OKz9C>48!z;|?~b%zwl;Ek)w)QP^FU<# zum>a6S3ex7`1sLCr;d+D?z!m6$gl4`9ck0;xyVVCFGNE7UWz zrQlU_f_x;+^tz6pLZJ6A~U4CaaxsSd*+Fif$O!t-vW87IS z$GNS)8SlQleuA5I$t3rQ)6a5ix0vD%|M47m?uK0Vf?M+3IYramVW;K0@h8o49}X6{ z?yfoRmmyI~z&F!<$ZQJfb_sxbEyJsaVcDEh6)NTCx z61VTKOWo73F+}XpfcW)YVgZp&ujqaBDH@R;uzS({4+FRU**4*k| z@#JmpxXr8F`v1P&t=@l!JFWIz?ysq<-3v3;xId4*+nqe`9{2Gp*SdeLz1Pjyu+E*e z^FH_T!}q&4xBi!V%b*9{=(LC21Hb`%|TW)as+iu$vwz=tJ-gSGde9vw5 z-uv#K4L)$UO!&}Ue%nWG`WGL&Tibo=PMG_dyY2BEZvR97c2^Ah!u{}?oo>>nU%EX` z+T{){+3jXkf9>{7`H$OZ>K=F3`fuIUaeLj=PXD;7|}ilSn{3RdhW_Flhz)_Tuc=i<9Kcjw}_c4o5cvnP|8kR7HEWGDI!Vjazc zSYhE{w#`MAne|m;mY3Anz5;c&*;RwdD{HbxS2fw#m0Ikp*AQl^K9sfJ8_IfZ)@ED7 zbXbj%E)%`iWfq5qvC14hw$y$&d(~$ItGzyg{adfkYC{ZI$7n-V^wp46HjHEzON^Mv zdlWmUJDP3o9L>7d8nd?fW0=0D345VCmTA2o%g&uJWzP!7vCM$+OfWWMzy6r9H_a26 zdzm>iO15B`6D^swsufG@uwt4gteN!+5xW#FW-TJd-1-xv7sNIn2g_V#!%oN8vOIe` zR-C3`0{a8hSKl8H>V0j}0nO46bX80|LRXmu*)}EWqe(ers*VcqE^*N#JMsygH^9pCB zh+un-BH8%CQEX(_XtwNaG>dABVF%C0vZOBht$qcww_nLL8doxdDXUoAl~t@` zdNJE{rg1ok~FORmfld%=-%=ZfRcU~on@4tf$+_ZyzFsfqRk5sX# z4%MvrdNs?RwUZ^i-N}k`cCoj8b~D+!-OS!_55wU-EP2vi)_QX<%M9DcT)*sNGxPVe zwSx{Y(_LQsRbTqULTLM^Yc%zM9q3Ob#FbJ?a;ugS{s-_;z`!p;}knp za*91NJ{Y=7^EEOEy}7VP|pEqwKewJ&`H(kiot}8XK=}PlDyV7*~ZX{aA zz3WDv4&7;fNq4&Tp*xv5^`O0*deFo#J?P^Uc{*G!Ppf~(Q{l9pw4tIWo%!37dU*Gu zz+JuQO84I6? z$rP#kZAE%wqC|HWD$&cwN~A1Orm3rxX?MzXVNWTUH28d7yqxT{VBCuoq_at(^@)SxCx+5dKA%jIQ@toPURPdQ?TI(vRp8N^q-F)BL{tQ*s4z% z-3+K9*nqT88BnpVA?eOBq_d9UYMN-VPr_?fGM<^Z6K3bTXldJ4|SKpRx2MW-P^D9!r16n9`PI zrWEwiluSLxk@}%=q^dTaMrDsDuY2QZ6`4^-nHhO^n?QHMCQ!op38Xd3oE{dM(~Nh#seFQnWa~tf_(w#Uv&B?= zR!of}87VJi6#J3U18<`6I-+hmpqhCg=_`=$R2!Odz=o!)*;0bkmde^~>4l>m+3m8U z0|V^ID$|}??%UH``-$YZVPm7h zQ|bJHskBwojf(kyJzD?TjSftoMvv>J(Xip}lv&_Tk3YLpP=E)0IO{=c#!M&oHPcC3 z&Xf3$$I!QHo+KyoqM=*8$W76kiqpO6?L%+!bDlwM`)5$1)=W~HKa*PC&7>_pJ~aQd z59Jv9()=~Pw6%*L-Hh=gjaz<{Y~xS&tNh7-PyoFX0%%o70J(Yvl14)y{V)omH^o8p zQEnC~#Lgm%+p{RcZZ({;ZPn%5XY&f`N#r!{S+4O$gJbLAqbTU;cqxf@C1Nm2A=e-t%nN7KfFXe#^>P0PY#Xj@AR zU9yQK`Q5SPp&3Ve7siq9*Erf55>Hmw;^{FZ(E6PT6t0m-6Bj0u+1Es}2u-3X*OMs8 zCYg5ZPNq*_=lE`#mUUoM1>By$7J`$RCK|+dFIn-8}L$zvBs$M9iUEihD5GkXl zcVwjDEYPf@0^J*!OZ{AP$u&QhRvyo#$6s>EV$2*`9X^NtY??!Hx989^^%A>cr zd6auJkJLZrQJv9T3J;k}Y8&QK%Z<6TT5%o)Pnt&)gn88e$UOS;ejc@t%%@wy`P5R9 zPj_zQ(=)~S^mEdDQq7%D?C5-o{y3k?MlGQGp$kZF(*jDoy@1a3TS$777t*4+3+daj zg%taBA-ytLL()l~g(HNDkXLzdoaXz}tj)P89V+4fpX74~aMMOaGDc)~AsjXR0=dZ6PL8*k; z19_!wAkn@JWYD>R)JJZl0b$(cjih#eBMn#IL>69~Xxj2klz4d)t?pgQ-$zR6>zqA|hUK5V7#W46)N=xtP9v5h28w~>$Tc4C3s z$)IFAsovR6eFs%gPmc=fRa8OBmnulBcO{LPR7sQOR#Ip~B`y3@N&BpK(8G)!G_Ym| zP5roo3Qel0CANx&R8>*jiz+%jyqdIwt4S!Wrswyn$z5Y7otm+etcrJ1&GnsR-ftHj zcilzKOLkG~`CXJGznc^%?xx*yc9U2AZj$@6o42utA~N@o-l0A8qV8DWjFAY6mFS`v4WJIzSt*AE5pH z4$|eR2kA}0LF#w$AX)XUp$NwsTAyD-*G|`vV%I}7)#ebblpUh`#}3ixUx!GrI!w1S z4wKoT!&LnFF#Q^Lgu;@J(2YGu$notFsvmunL@`I{*p8!Q`|>C?>DSWCuv&V(rIzNj z*OHcQ9UTj*qo7T7)boBF9n?HVp}xmRecds-e)|{|4L(lOypGf0RmbV!_2aaw{|OSN zoglBG6J*kSf)o|&>D`oiy1BTX>MzvOu3imP>exWV^Bbt>Yy%Z`KS@RQCuvpQN!oPs zBvs3uqGLEk*JP)tk4w-k+mEV;didZY1-!jkMADJoSt_PiZ^P z)AQHo$#>KRx)yzbT&gZm)2jdwjclTsl}*(CqKOg>E>f3>i&VV*A{jrwNR1;d zQE1pD>b~s~RX)8$Q-@!s?;)3I>z2zj{mEtOq1Q~c!OfIh-b}{r&D5cLg{o&?q4>>L z$n5bI`lEA|&d<6^tIMuZ#G|Vu(z!`b(;F{I$3D9 zkZw>5DVMg;zXvV!VdxEd9(aT9Z@NLZAKajpp*QJT;7z)|=_cKLaFg1G-lF!vTl8kr zE&Bf87WLG=O=>~6$*A-;;o)tXp?!xEgYM9h(mS-{;T<}!eV00d?vhg3T^j%BF8S%S zQvR$~+FRC24<5CWqHY^ub{i#cZlj9FZS+9*9;pW3BaiZXw6y&mT^e?u`i9)6sax*T ziYNE!w%!9868eC`w?3e~Pan|l;Sb3<>>;h)_K;padq~#$k7#N5BYLv^5m~)>M9U2x zQ%A&Oa;SVvn_oVre}?T87}ZWEcC?dDM?1|mdO|OvpO8!S6FTtv32BagO7mi$(%YR+ z$+z<2Bd>p@Lj%5%{q%2iW#u>WyYY=)4E#pQ8a{-BLBevtm!AGGJr z53*GMNew3T{U3cs{+8tN#cE_h5-7!$32h6N{z|*$}QnGts`T8E%Roeqitv&GU zXAk_-kcXN`9%KFF;UtkqV2M0Z>*TSpO&%q`;F9p2N=!^5#eNpM#7xT0GB6xjYP;FnRw)VyQAAQlNu80j*ib(WP zgk6>*RMsit$q_~Dy`u=}cSSgm-M zW!(2t#_BX>Of6PM_Znp!xuJ~c&&tpo*bhzP`yq3BKMYUlhvpUikiNekw66EV$q)Sy z+P^>KP5WcpwEnP9?2m^<{gJh&Kl)$kkBYbbAyyiIX5#?}avgxTu>&9}7=WHT2VmL7 z0Z@HC02}+LK*vZ0<@^WOhDE8MbfF3~D^*b3r~<_oDwr!j5Z^`&M5Mz&+zB0sN%IC` z|CWK!JUtL|+Xv!RmqBpR9faLBgP=HT5Tb=aIJ;>Ov`-8|+WkRj`aK9kv<4$iG#JNx z2cuW^V0f$>jCDr_^Hb|!4Er`1p@UUXK0y@^JyoHRstS*ls#v&R6?NBC(fM8#TK&}E zY@&vgscI;RQ^UyuH9W0WgZxD`4DV2bZEtn>8LA`2Q5_4z)lrhKj_R%IIC@$gXWP}$ z+(iR7bu@4n8fXjDK&w;(w>N0udYuM8PBl>fLj(KOG*ND$iDllJkfdoMbd@G1AJD{@ z>zYvhpovapEnFC*g>qLdWW{R1b%_?VtF+L0UJFNGXz@4=!Q>G`pfqs^t^^Ok(m8y) zYzVs54?*qyA&CDy1lpQIaoK7pvStp&u#BNNUpy2s2Zy3>%TQE(7z&4e+PFVP8_BNP z=n<=pRg1NuyF(k*joKLZTpNeF>%dY^2ZwBRFm9F(s$@FQ*{Fk+bvo$Qs)NMuI%plN z3)>00*fw1k^2xdgU8alr-MUb{tc%#!x;W8$7!(bM!DrGil!p$(%e-M2wRsp~>W87? z{xCfLH4JJRdYEFV2Z^^HDpU2)vO*6(_Ud8C6+KX=9{d!BBYos>6gm#a=CI+|H+MMd zHxI{!`r){Ge>iUZ8jhRlBXHef1TJ}v!0D6`IJ|rWD)x-Ps>>rFdp!bSz4hT_pbtX_ zeRL1e$NgM=9N46f`N#C()v6EO@A`N($N;;?8z9l$0Amsi@T$N7WmN|7Ja2&R&keA@ zn<4yk4bcUL*y?Wx`)orzTw{pL8bcmaLu`6)h*3%-acI;?h@D5GA$%k-ZzSqAkAzwM zNbI;b5*j~8Vxg)LKAIW9$HNH65{#f#XoQR^BV27X!tiHCNb5QZr?f|*FB=69-%(hV zF$yiKMnP%+C^%dhh0HgjP}zGlZs?E3Z~M{Eojn?Mve5`C8O_h7qp|enXq0{&ja|yd zI5OH8C!CFOGTa#TbB$43W{iEujj^rO7^}V+BX{5!M3|1jl&NDdDrO9NE*yhLTgTww z$uXGsU<}-Uje&-m2_Bf4pw!(2{_!Rlw8R8W6(*3JF@fP@6I}aaf^?0sP_-C~gVV>t zHE}H33&tX4$5_an8;eElW1;kKES74TLc!7$^E^%QJ<$|Vg{HW*!xVJR6y@!v==#qT zL7L-m$YLD&c#eZ_;y7$C7>CZvaTt4c91#@pv5E zJ|5RjjYr3W@sRs99{p6!Fl4+LM!1<_WDK`}Ki*;nt$H&kx0&J3S2MgEFagbDCSdR6 z2`CJofbhHt5N(kpU%SIqIS z!yFQM3k(=$fo;qJWSHOUIev#qc_#|pRBSfR@SD;PFgVe%_0M0B@C zuC_H+SzBX^mo;`LTI1jnYaH5cjRPmGQGL%ErQfWvbbtt%#v%kdiGUChG-V=uS}VfY z10t+y79rr32*bLI(LPj+jaFiKdWz8_L5%&2#PHiH#@`cs|6MUGK8tZli6LMl!%KUH zgg}N5nGEqO8D8vS@H@|Np`Bs;ABMH6gde5^PZvUUIN^6L!MTL6yoPY&3PGiV;KJYD zbB6+ZErB)!AnfM*>LeiKM}2S|F`K+v;+l-VGCh7F>VY~Z`Z1{1g0z^L8^ zeeT-e*+&~3>uZZbeOvh2*h1IW7Ee=bvANI|J{7i5JZX!%R$GLAwnZ-`J5(6h!PeFe zw|wmoo@$2=g?7lOu*3HTJEXMQq2rSs{1olcsBaGw8+$DGvB%qFdpH!>W9>G3JU?NN zF?Z~d^uZo``b@-2y@}9b6EVemB2p73V%@@tII?*nuGdb)^OlMD`eq{JpMo3nI) zoVx?QL^6aQf!}b+t)&Hg*!KohKnScoGaHlki~WBoytO z1ku?^Xum%RbH7f4wz4A*892hx#t|(u9pRhgh083W%= zMstrT$Qv>RrW2;1)ny7~p;MrhGX*s(r@*Ot3T~d7f`Ha3c=Um%y~eu{#sy7nF6j5k1=IStVu`LR8Z2G$-p!Tgbp^>>5m4-k^qsC) zblMebT3u20!4+G2O+}gZRID+dibbwdksdk~0g|bp6;q+UV=CU&PesG6saV`O6>i<# zpseYJ3#M+6I=Nv~kQ;8Kxgn##4THA0Vdqgd;Hn!gK6iu1A2+n9OoN-zG@P}Wh6yvK zp)_t9y3d=2koD7WeD5^$Yn+C_`_oYIX&PSjc89)>I|9tzQRL!|x?p!a&U8nYB6nzQ zbH~^^ci3EWhw}?}xc+g+6crEHkMzI{5WTyvWPVwjNc;IKJ z2aa}|jwJQz7-2FU*C$R#mhW_ECQirU{ONElnT`j0rz7&*bab{&N9>2`crNb=A1zNb zntEc4qbHX8d!jSR6ZQ){v1)@S9`5smUZW>M?s;Ov2Txp)_rf1dFN`qtg5xAFg!p+O zE71#!^Sw~K-V5vYcwy}sFRZxhh5WZ(NbcqhUo~%tjlH2}=Z&}C-Z&BCjfJ`1{GP!Z z3RT`XbHW?xE#A<3>5YrOy%F1g272nxzy|9X80|I#heBq+I&%gN7tDak<{2ojnE|Dy z8AyFF12;eNeLZJlp5{!nn9PLM#F+@1ITIUV`F8G1bT6I>lN~eRb$ljLug%2LXERa$ zV>vcB1R*Rx2;pmj zFndQ3yz7GCa5)HL9tL5+hakM`It%9p&cYh~SqQeA1;fd+@WO8v%Hn3hQ<#M=%V(jo zd={J!&cd^^vygpz7W%xJg_S>NVQ}BsST$re6ijAAYBL)z-Dkr!WHxrC&W8N_+3;O6 z8x@ta@$TqsjJ-G;vG-=9ymL0L{hf_p%E1__8w~NdV0hXGBg``xNnydrNaq#=BXMmo zLU#niqc#}U7lWa7FBsq61mp6bU~E(hL4~ zv`RuTqdF7?b)l%e7>Xxtp^$$Q3ccT7B5wkrU?KR<;el{E@ZiGYcX*lveg`=%&1jY=AK#pz%PLGX151R&0X!oWFEh%Smk-Nq=$?~KBf+9)hJAB8iwqVWA`6!bqu zVQQCXBq~Rva7Z+^jEcrVt7z0aM&pbZ7ZQ!*NzvFRM5DAY8VgFI5xpZClMY8?$k}MT zy&jF)N6`@8Mgza2@uPPPcB#g|Z$u2bkB>oxO$;VZjX|4V4C10<@FP72!n_##TONb# zQvPYv&KLyN#-On=21Ykyu&_M_kKV=b>!ldv_KC$g)mZcz5exfqvB*L!cDTf%#U~cu z!(*YE8jG=WVli=PEIdkL;aeFC|C(6%oQlP?E3vS>7YpN8u~7LMi%(tS(5xJXEn0C% z9vKI*c^u^I_*G9-aT<(XNnyYpMyT)l0x8lLSab3Gi}Ez{u$d z_!gLe`sf7Yr6&M+e7i6KJJuz@ds_nj>`g%Fu>^?DC*XQZ0zw`p;9W-o(!M6(YnMbM zD<P(^v1n2vp13E%G9VEPBNK5wB@wDZB4#X3#PZ@qoGnYl=jucZ zJ)8);Q;C>;IT4aOi70xKh>dR(QSl=Y)!mb@LpcfM8cA3^A_?=xCh^Y~lHfim2`27I z=;fb;w(ulWB_$y_Ckf^YlJI$X5_WA!!mNrUe&3da!^e`~*O-JK*OIW}UJ^#UNWy^+ zNf7@|LW6uVsDCmJYbIlqelpgNO-46SG9nz3an>yv+P=w12~EbS_+%(#CBtoQGKvb5 zaehrQ{%lUh=$*-!aVQy*hGdj9CF9VIWL$iZjJB7_c>XaNuYV`wjeH7T^h?2gjTAHw zPeJXN6qH$}AkQuZfi5YS;GKe=vr=#)Dg`Aee4jK0nhR3UvMdGj*Qda2D=)h%1-XY) zpnWn0N19ULdLsq*?x!I9MG9WOPeIJj6g=;i3V+2^TpFATOPy4dj!cEz_*4XlQ*qEC z74mMW@SK^74YO16Fgg`OQd2QQnu;a!Q&C%#il=K+(YrhqBdb#}@n9tu;pt_*eKQRq z57Kb`c^cTeG?af!=@@364u89JteBjR(;n$~ z=bMhfA?dJ+;rUY1ktj*Wyt(OEwIm&zR;FWHNjkP~NynDzbd(%O$I`lVNKdCD;$k{n zTGC18#vCxEGdzu(%AoO3gr2P6nRN&EWS^8Mw3}16J!ZP`)_>@;i8*y%}gY zoB`E(p6^@+4qeW`zZ)5tcrOF;IlJwFpJ z1(_JKG7}x^GI5|Rli!zR!eVzOJ|4`(j=D_vpUQ;7g-q03$%NmnO#Hr=iSema_bj~clZAx-S?EyB!t9}0Xc?XbyHQ!#X_|!rmRU%pEL@wI1*0ih z5ZtqHbw(D31ZE*DGz(SHyj)@y^fR&$AkD(^xmh^5C<||jvY@g$3+5ZL;8mW5#L6tp z-<^eZ2eVL7n}z)iSvYbo3$>ScdYy0I$wK9WEUbT;g#{g1NP3@z8DFzt`8x}PyJq8E z&upAk%*JY!Y=o+3!&o~TpN41SpiwrG#%5!bc{U!2va!N88*t3VE0=66^~lE9nb~L# z$VNm+HvU9rqbNR`zmBp|k;Ur}vax3#PZwvSvM3uvi?jJ>cl9%f`dc*--qM4U2!- z2&|AWCf=b$7z2ODKP&Ewni`ToT@$Xm+ut>F1r^K$EX`Axi@a$euI z9NgZKgZ;a5uxMWn0&8+$ax@2jj^&`SAqPcgaxndT4hCMzLCcjK6t?8R;dTyww&tMv z0q7PMQkdIHQ8ZDCXO2=> zPLX2KR4I>%6uMqgM9!3Am!A~x0;L!eEJbvf6k8&Bxfm(>CP=}O`MxwMiZi7+E|H>L zCPnu=DTe1uVY5)m&skC=E|nsGxfH8cNwIZ}6noc8ade{;^<`3=+QMy@qG5*=bvt?A z_DE5=pZC8;iX}&+$gGnhr4$=pOX2fY3Y8C1T>Qk#e3fGS4=JAfl499kDMVdlc+yRV zMe;I??k&S51sS51WRUMK!zL9OCJdJ0yqXNYnlii`B15W<41b5okUv6(K87+B7|GDr zn3p$^q5C))a?E7-Xf8vTl?=B;GE5{H_S(pxVK2iR2N|9_%HT9vhDsM1dbr6j%Uy<} z(`8WhmLX)O3^l&Io&Xu#gJdX~&HEN2!^m(MVk2eP6)nS?SQ!ixWC%`@VSS1WSJPzZ zmMO#dY`!l?hNUtYj^xVlD38~l&+{&j!FiDkkxOKlS13bik&J)d&d0fu=P8!)&qrmD zTQ7s+1{u^g$)HmvgMPUTMq7D2wsV!d{VEwo?37{XZW#vc<>THj!=D2(yseSp-eDOo z9F^ff9q;dPKE`@J_LDL=o|eJjEbl`jZ|A%WwM{ZCza&FMvkcZ(dCacM(AL7^a8rhq z+cL1beB5oku6sPD4`gtC#PhVv(Da1I`k4&$LWVCdWvJ?qA@B{4*IOA*yyJ2CAcN{B z8BTuYWBe+E(svp5|B%7+mkghN^EUs=Fh)+m`7Q!xbrbNdyMQI~0*3Yyu&1{GQV?*l zuK;f)0S}c0MD!QXIY2<-Kmi{I2}n^D@Ig&LyoP{RngW7{2)H{`z*HRpr*s9F=?U06 zT)+T*0fK>m4nqOcjRe$=5};!&VD1PlzxNRE%vFH4n}C_q z1QfXoIO8GU`*Z0;)2l27b;^Upo+YjMo zLIpU6@iB%A$cYfJDpEjolz@h40XJg!IAVGH;snSi2pE{i`;{bMbh3a6DFRrkfQe}W zoYMukW(aW06fiA|%jU6?2$+(?$0QYCBNJdH2pF3yK!1(^%{<<(xdP{mi2(Zo0fvPF6qfQnbC-(*>{`a>b2*>475w>?0*0&-@Rhq< z%*(G9khO;QXDyG>IzErw$@K!3mGJsD@bPXG@P(`2Bw%4F?{k@e!J7rNai!%v4qF5a z-^ydhZP~`RxAS@``14$GCC|S@K+h@xC%Cj~Uf)gu_qk=e1laB7#}8M&hsR*A!0(56 zy!Q$4+ArWQS8;%sKgj#aZK&aKImFxH<{#!`Ji?DxF5)PUbuDk3Lmh9IOFPEnbzH!9 zj-BB1!bR2d`nhEd0*0Lw_}_#0T$~cn!Udle@Q#z5;e9>Jk10;`9Iulb)hJ*;XL(-0 zanAMvKYqALO#&J@$BR7W94-ks&DmTQP{)}!3)sgQUE$;7G_LZtIr(e69qt_$d|kjz zZc>YY!<@kl0js(0Hw7ef54g#<1k`Xkw*@TXK5{;H`0>UW+!av3ec-%W`7z9Cw(;YV zyU($E0yc8LIG_8x4Nm2OfCR3I8~#v$jJwU5JmPWX?sMZG^R~GAoN2p&eC{?k@`-?K z?joo8R6sO$l*Oq-^Vc+YnNxki&na9b_l`4vDL~4d=6byn;KD8AZg8p{ zyr0~9u8q@rEx?~E;aWMhH~bvLt>mt73Y|RuTpo9f`^uTT6%fglad$Z7cYJO*3Ac}X z&S}2q#}${y9pYYc8XtIHI4QTAd%!7u<=jE;Husa$`o_<_To9Mbm2oGz$DG`E z{yO7`3*aQ&TJ8|n!oBDE{@||@ZXy@NWpl;c9xcZ}of4*9hMpAW9rZ$5s`m;>j|1#>CfJg%7A#vS6$ zaW}bV+-I)aAO4=f>2f97r~`+d0Y`!!c}rL+)3^-cb9w0z2|;$@_z;N=d?I| z&Xf~z4xAh3!v%A(TpB0i7I4eBwcKWI2e*$q%AMpca96oI+(Yg;*U5e6esNv@@fdJQ z+#pVq)8z~}V{RO0$uZ8JbK+b%4{iqM&&}e(xF{~3OXkwKY);1Iar3#w+){2iSIn*D zO1M(4oZH4#a@E{!ZZCI$JH#E~>bT=v19yr$!=2+Ua2L7D+!gK`cb&Vz-QwW|L}`H{%^ne_wAC);jXHtNY)Rfeis%`YBn6?tfil}%%$ zRnMn$t)l!_S=C?KW+gx2h?Q;eMXRXJhgO;Fi`9`+J*>9}_qU!e8)EG~*vPuKk%jfn zqZ6&o&w5yIbD3@Z(=E~30TCH!WKeKjgcxPR)^`~{*ldht)mAyn!!Ac_MX#+(n0UDylg*u|p7Jbo6 zv9W0S+3}*SvDTv2akipQs!pPJnr@;?(j3w9 z3;Cj?TZ=@;J{F3ShOQ7T_gO8{*t%ZS_wOcAc*GWw;iC%Cw8)*J2mkhpu5GUo83xpf zo(`)Qb^U%?H226eq6AO%gYGq>1N_&Jy2Jl!|9b za>bid^2ECn=J9&wiw#p2ii@)si!bLFh?`d}6|b#WCLVoag?QneRpMP=SBuxHtrJhB z5^+<+MzLaXsaW;gX7P)kTg1}w+r@ViD#btcREZyc+9_Tn+9Uopf1lX!)&cR5k%z=L zg(Ko=t+nC;%j4q3>+8jniJND1VP?|? z6e_cB-TJeW*#p>&&noO}!XVbCb1*ZARbv{R>g;KPCY$$Ji~Y(T${f4tu&6>^HcMTP z8CMKv&F1>d{=5Mz^c%^l-y5+F3r4e9I%C-PS`!vB!<3bM8OQb%o3UjU=FGm$f;Hw^ zF)c$8v%Mx}mN~@!8rrZ`w{6+a1@_Fu+JTLKJBjt!>cqDDO=bfJxv*(hU72s88#8rr zXE*vzXA`e@vfP#4Y=O^A=Bw+=zIXVs*@ptys<}aIxyNiaQ!j+Q{1VD+o5ERWStOg9 z8O^$Q#4?F-JUiAWk)3^x$>u#vmcSpM=1wml<@6$D9`g|n1xHxpRrvRoFma1J|{ zo5y-&&t)T0=P`qXeAYW=KD!jLfF*`4WS>J8v6&%@*~XA1>||&GI}={WDx#LM=(r-L zki3j7$ym-hq$`+V{z_(FxQemW#cW{NYIdP&4f8*=mR&rxj;UQ;&+HzQ@O8Btn9-k& z?3H3Eo2OmIewuD(E)L}^+h+^Qi{Hw^=51qoCEMAt{S|!uW+lscx`UPftzui$ce0!b zyO@c`ZdRADhiNa}%lvokV@a3yv%t3pm|njc)-di6GxI*ogzO`%tn?^bcea*AzNur1 z1CO(X;uGv{SUvk!)WCk$o@7nWPq74*GwhYkS!R)Nj`?hAWK)~ZGu3|=*nzPZnO?{x z7Pk5_%W7(7v;JLS>JzT9tufb`+?Ez*+;)SF9(arWa=p#gFTBJ0oVm*;%e65dc8^&~ z?z87dAMmxu57}<3$LxG|JKKBg2@C)Cl)bWh&a4-_U^6ehWOf5O*pHd7Sx(s-cJXB= zdv5xUU6QMzXb$5+4s>~a!pMNyrD^p3bm-e;}H5P zHv_}a@fZE6{-L!;j4(4z`n`VcaV0(A69|GpkgUO$|gW{jY1gY>DbMW13<7|=|2 zLn`ezl5DPyB+)V>S~hJIq5o)dx;~n!RvJ^d*BHuHHKCVxO=!=CvD6%7N)CGCXwZvs z#Hz>B@dPtkWj29M|Cm6|_2#6XZ$W-jEa`cFD{8!BMgK~zsW3uBNhV^d{w5|-10(H4 zL_Qv%mzp+o>6s1n*lSBGvhDb~HhZeR zeKL)nIE6|FxKQY07s}r2N{@x9wBF5)uceqq|K3fbss?x3zTAU822ZC#Gf&Er_o9P$ zy!e;Myh&X)gKXVr($V2QB>V0|D=+!dmoh)vmgY}eCI`@4?Lb=aC6MAS22tteSu`|r zHock}OkMOtDD+PVsoV@DrCnj;x{yw06&aM0pUKyjWYHPB zY`Uo{q0wD(==`G`J{~DuEt8RGjzC|==2F7uTv8Y?hc4vJp~_ElXh&!sUAmb^%8qj> z?Z{mEHF6%6m&~IW#eDJ<@+sg$J}nHHPuFkq^>t1Q=zQ%0N;O_cC|gKIDvQW${vrze zv4|>T7gPU7i)r2TC1lgMgycnhecW!oR&H1!^Rei5I? zWi+*M8O;(er=oq!>7M=ynzUgBUGBeq5O|2c2wR#72_N$_d zB~_#*Uro)q)l~AUnxyGFDec2f%8T7a+g|LV`@y@(=)rC(@YzFMZ|C-YbJq!H0TO3xaof5=H1{`e$K3OYp@_fOFgzthyS^)!XfJVV!RouMgSXX!@E zS&H#ENBypyqtkAUG_SdlJY3I{@ul-LXvzgrXu3d(&P_Drd=ptZUZmOQ_}VCkOLXhZ zB^oyIGD%KfriXUT*QB|okpXDde*nl zYq~+LCvMPnx=Af3Zqfs~MITSxB4ymB3H7%r1b1kC{T;fCyQI@_mlADSsj;Dz^ljUy z;A9*9w7o}(r|!`kyZe-Q`ab=%e?UvlJfL9?52@koLkgYrh?E*1(Q(Jelyd$tjd5wA; zVn_FTV)3baVtkMLBKORFk0xppHJQDpbJ`zCzk44nw$0DiU6QRBO zM2s8oRQ!DXsaO;EOzgY)Ok56rE?)fgT$Bp?ThzV#w-6C8M8N$QA|>jjnDp?aSUKpG zIP&;_Z9!SNaF>`uzuC zlJ!xP{q#}P%=si5e)%NqwV#D^(P!Z@aWz6=7Vz5^}@%-eX}U^tx3E>uObo*}%%^Ij1tFU9OB1m8;-O?<%M}tqO3q z3Vdy*&)!`zl<92p+jNDQkHQ!ao3g;TI zPpZLp2sKdtX$_<`u89+oHBog*P4xS#CMMOYh3)-o;mXWfcz&T4-j%b(Yad(O8)u87 zM{KdgtTvL{)ke#qwek3m+L->aHk@14!GYvD=)9&5_CKiur$%)#IlM0JEvSp;*Xts> zsvTzZw!@amb~t{5?;=Xo!>RW5uwz&~{Jf(cl0Mdht4n>n7+fE7SJsEe!}>U8*8tsv z8esqI259zY1B@!$5NEqKMA?FdXtS>&Who7j>D~xKQX3&-O(TRnZUj-kF)V@`Ec&ShuAgcF^ODY})7lx0 zGo4X;tuxFXI^&8hb^QHXqQ}IRczLiTh8DF%k&6r86u98P5*Jusb3upltq|9_6^0IL zh5Rk8kn(pc_%?7w&4JY0pX!RCM_p0L$PKey-B3Eg4Y5nyu;q#yUfZ~%dPjFSY2DFs zgFEU!a)*hn2TuBVU{s+8n(g+$uD2fWY^uS^U=7S>XwdDL2E)_}7P%-`8>3+Pdk=YY8#a9)&@<7wt?%0Hn6|n24$1w1z+2C z!Lg(+7`~tj>YwUDnIo}TSH83BiW3E0q1xOP)$esho$}pa)2169C3M4zx!vG@v>Tqi z?}pg=-EqEWcita$NARld77nk4rqKjQmEbZPCkFt8A;?kaIdb%eX zf9?sJ2EA~zM=#9G=>_*+dSTz`UU2!`3zO^n;ewAJjI#Yud5Iq?p7g`#_kK85r#JGu z^oCtpZ>*Tt8#NF2M#jtD*jlX*?zZcL_i=sjdU_vR+}Q_99`r$98-Kia^M^LXA5X^k zqwRWs47=iwWyaKhZW4gCJp(W)I{z%q?T1Ug{V*c4A1cr9hp7js!~CQl+Lh~%47dK67T6y%NA$Zf<&}1}qg_j3m&50nKd=Z2T z<%6-mRWN4vrCxAuFx2ydF>y~Y%t4GF`RVbsxG6o$on!|>*I z80<~L;cFL;{_VoiEi4?3hKJ+HqHxUE8;&No!|{tz1T5-Apik=v6b41$*SrX<`Z(zqJPeCM z$}r+Q+W&|`;pHf7c^8F~<)d-ZF&e*ji^iy!XzENvcZ}NDQ{;#^8^isO!2u z2AL;f(DGpnE*r-ps%9*1xW)oKV=+1|7TZR};=+Ph-Ydr9@cCFQcpi)3l5w!88;5zC zI8^H$hoK2^I6XR!dVX)*SQ-_N3Pa-&KQkU{ z*2d%N;ds2bMfwnr%QgvE*(d>nS|`9dAOQ;!6HtA00`*T5aPs#An4L&K4<^F&dLrt+PDJBUgHgkldYUZcw(1=)vZ!6uu}@&_fJ7yLJD3CO@YtU6wF$hf>WDQ@bX9s z)Ynq*=~)W?Ql(;J*;J(1rJ|NgDmHbXu46zdmJdpWc@Fg<$5Bu6=Tt0Por=x7s26!U z6|?_JMdGVeIGIrAuzVV_>!rciB@G$v({QPG8X88XAuK%&V@IW7;SB08{*s1io6?YU zFb&F|X?Sxl4YS^+p=pV9tf-KVs`b*5>YR>0+NR@`Z#pW5q@&?r>Lw0JN4W{(e1LZy*u^o`eva;L>77vrrupn77|8fA#`#UI?km| z-mh7>vo4EcKMQRRW#RG}`d!PywfkA<@G=VvKWE`tiEK2n$wol6Y-H5SrY=x6#<*o8 zr)@TZx@PmOQ8qpYWn=vy>aV3xzb-c$`JX-IaO$It%|Xo69JHR3gOZDLuzxvq*w*Ku;Q=R(PMJ4#wtRB2zjrRW4ami@&|HW?xmc1&owW2^_~cS=Ek75>3v%&k zLN01d&xP|G>WwYTMeAR4sY{xRIva9fv^5uh?##u4{kaG_O1-wzx!7?b7Xz;5;^nPe zqwaA7R-P%!)$Xkm)yJ|7cmpV#)w7Aw!i?kr>f`!v9ntD(1T41UR^{_6J-!(0o-D21~)E}en)9}Yy+^61Co0nQl zdqcgd_gdI}rVd$=7E_IQXKTuPNOS5~Sn@8`iuxI4c?Vm8RGGRS)u-k9eH=|oQKd>)GKi3U9*OIOkmj7)Ej8WcpdUE&YOA(U8w)i zjdzwlc?j%DT?aqj`TA2YpfB%H`|}PxkoUU5yqgW>eRnwHMNuze5byD0^N<%$_e9QM+&jj9a zPa^Nh)Z>^+U83o{gPlSBote}Jn9Y0LIeF;&GxI%>UgZBe$_hOr>>{Y!p1yI{++rCo2Zwuh59F3S@vzr^LEDn zgSulosZX#g4>7x`qq2wh&U@*%kN3si4dzp92q?K3LURT+c z*Ldelnsc2x2RB%@o7CeW4ZOwlsLQg7|1F?=kIvJ4)aWVi*hyudF&^m^Dd>3~j*(ja%{-9QFL;MfIzX!T zlKq2po#gt8`URx>B#+m;zbD-wHGe}r9?~IFxwq6)BP}95BsF_S9UjtJ(%&Te_taS+ z{X)7$s!E*>U(#sOcGBOZIv?3rN%^F8q?;tmPb>o|m^6m8j&zAsM6&x#T?A4LX&h-K z={V^r$%48R4M|?4AW}AI8fg{jAn7{k4axE=`#s5p)QL2Jlt>yzno3$i+DO_@I!C%q zdO`Y1vM6G|BH5AbNggCGQg>1SDU=jTN+IQthLgsUrjTZl=989^R*=?_Hj%cIc9Zs# zj*w1}q%OmG(nZo$(hZW-Tew5IN0NF9Qb$4RCp;%f-GrBgCF$^{+CX{|6l!q*LOcyzDxo5!FY>piOO*zVCg>VQX8pHm)zsh2%!UA*JbGvm3( zYrl^k+Ra9qwPEI(N%mzlRjQQNw69%NQ?8?}Mmw&)X6TEinkp$RG_5PRYu=vo)Htp0 zpn0{ro5ty=pXRa208P~aVVbRHV>Ab%k~Qwtvo&VvLp8M%Mrb0^3N+`&j?+Z1o203I zf12h~<5`+lxj$=4++3(}>hX&v`Sfzl!JsvoCPf=GvsP@;l#AY>ne4om--17+nfCse zrre9unu7NiG;hjW)%0|}rI{afPxI&U$C|fa{?>dL_*QfE#3#-1r7C4+oUwA!ql6M? zQ&LHKW}#d?Q%3n^hmCS}ZFyzjib_hmRaKP{n`$UE57{b~H|r|his~!3>NQsO^=ziR z8ttIO?Qfyjmu#i9>gBEsTdF8ls@BTopmxe%hdL;AT{|mtR&`UnoBApZ*ZL`~c>9=q zs=sn+P>>R78KzX(7^yr9i&1V@OHf{4N>XahOH+bkvXtM2R+(TqRPp{YOd0cHxYGUM zNM-t+(aONvW0YU+j#c6wk5^W|o~XpBrzneUrYSw^%}_ElGZmXYvz3~ubCucC=P9GN zEl~cty+~PRwN$w*epONi|E8q;vO>9hbCt5N##-h0fb~kB1sfIdV3RV;X{%y8WV=%F z^bRGY-fqPxcdzp1&;5#<%OU0Hj3dgj&&QOrVJDS#r%o%M#X04}nhT0+{Y%Q`pRXvX zRj(@vGjA%3s@+z~EV!$zZuCGIzVVSVrrlFz=Y{7=ZGM1smB||=bpAU<;G?44`m78X zS)_EUq!yoJjfCqyV^LJyRP;zMA)1{v6O$ZDirfjM#IxrX;!cm!V&KLyBA}|ZxG=;< zoOw`IboDJSy#A;lHaDsymd>awN}E*`PtvQ2){m+Si-9$T_t{$FqjzmleNP>+(!)-y z_`RN}+@gW_drd>(@Wp)vDD|Zvq zHgy-B{CkKtAALpU++O1E*1g4|`+daZ@d0A13%@aXv%gq7W}wJ%2@+YigT=B*p~9?n zxR~-HLUdjfC7SjgBwR|xiin+YVq0p0Xwhsi?>3Xf@OdesZ{IZ0xnhR!JDVvoCS{8? zKDpwHb)IM*Jw$|e8Y=9X4inL3@`dw@d@=0YaM5e?2(fI=NRc;mlsF$TS}gBUAc~yE zh|^UHg{_+3t$Z+6G(SB~JlQf{)LAq^oEke(yiS`W#s^OpbGl3sHC(3(8@p*D&3d}% z@@2Z1_-KY`d+{d`dSIq_zG0TQw`jKLFlCOg$)79QCjTt1gw7L}d(G!}Ocw}a*M*`< z<3(a)^~GYo)e`a0XsMX=cBz>5=oj(k`mbWm*=1t?q2Gklj^*O*`W3?Fx0Pb({8hqh z#%j@T{2H-u#9EP?yH1QqT`#W2Z4g5uHuC#(zl-Jmn}ogZX7Rc67GcwVtBCd7CM-O* zi{~x*JweAELfdqwsNZmxC~db}w6NVHrdQu9oU7~;mKFDln&l3NDC>jbVd+C+p2cA? zrsNT^%$^(oOqby{pJIxX51oe}T9o)zc6o)Z_po)<-5 zFNn@Xe~QgT7exovW${LJMeJ2y6)TOdi4DfQfik%vY)ae|;bynQDf7QXk5c>&oy8q7 zvGiTh#p<4@Vsl@-Df>X&EdNkks`yA;tNd6zsrp2i)_5u!)Osem*M2T?>;5g))O#WB zHFzm%HGU=ho4yv4n!gc;9NvmAPVYpsmhXjss}CZ_?W36K@ky-Uh}?)TVtwncVo}>7 zvA2#2D;KFS-cF5(C2F*+Z-kFajj*ACF+zVehG`=c%wA>!yT+!N_nRp!o0LHG@)Fq8 z#EkDw&0yQq93Ct9U9qMm;l83Isy8i#$IDA$aT5!8FSo$O#+LB;%@S)HmBy!EOQUJS zGVuDP4BFMVLZc;CcvaUL3m00WWo;YE1Z`kivnet5Pd9`t`avhYKTnArD z)y0ndy6F13E|#U(;p`JT915$4F<0xMVz2s$KUyCX+B87cmIknQXowX{8{$RvM)*3p z5zd%5My$3mj=yS*S5ZwUyJ~_7zD;3#uqiw|n!#mtGrX?T94XVAW&w1c*oDu1_A>QQ7-S`37?-lxp(q}aU{P_bG$WWB5km7RvRo* zQQjWW7KKOKBHy7M8cl15oDc1gJ-`bMc6%Yuu04j2YR@;0?J>Sf2TWbn0qv|iV&346 zSbU}Wo<@I%7i9E@(2Q3*zs0K|s5%cr>3f z@Gq2y2Xw=T4c)NDsyl`Z>W;Vjx}$6@ADqeXf$JF`zLo5Om-#*5b+rc+XJ1?@^hM>{ zzWD6c6ZsQ+V%5E#$kz12lS#dxy59?%Jp5oi(GQk){P0_=-grEwH%?sZjh+sDkU6Xm z+MMfy74`hFIn5v82mP_366MX20cg1?08u3W}0d{qeNq0GRm=z@B*nP~#E5ap61=>vIR<`GJ8rY88l%{(%UaABfry0-?1J zLUvjZD*q7#KjUDu@D9e>@xeHGHW=e7hu}&75ImkAf-!eOaHK&f-+YFm@ybwie$H<= zIEEo1DGW*L!%*RM82UPg11aJBZW3j>FT=6HF#kF?qx=!@%m_3KZ(XnyFu9Be-Nfl9R#yu{LX-J z3@*6Ez&Vk!)uoiJUWtL7O)Sc`kHzAwSX^Bdi_L$ zXA&u2qZ4xT{lEgQ1NqG1!2^VT5 zV{iw)1CLL}%4x~)*`CaAcqLE2D5M}D4B{b%~Fx= z!}r(8sdzRm6)iTWqVeTaoc)vvhZ8Pej z$Ed#PSeB8F{OOb-Zb;`{1L;{h%3EY$cmvA%+Gb!^@|)7EAn=vW5s-^)NF zHQ)7C%ft<5zTxebiP4dn$QY7|dNVUIacw5H9Hz|gRwg=r$iyn^ESzhQg)JfrL4H{{ z5JS1#&@5b>k%jz~S$MH03$-t1@oqN@N7UJ9S1}vI8fRmK$VOM+Y+MSb3@?-JW3y3b zUN#P`&4%+n%H%F&BlH2^qJGTA1`Eo}YUH3{^BmY92m88Hjuu3jS|a6cLnv#TNV(hm z9Q?eRZ&7#f-R5z=@4T9WA&+zL=>y+*n&)C*#awi-%SDl6E=D64x4Q5RXWv|yMdtF( zFc--~_!e_4oL8f7Rl64Br-}XpxaiIoC)nCXc5aYdU3Q^C+YG zh4Q7D`g;pa)P#e|J9La?yi(K`0{+&oALVP!99p? z4Z`^TCz@yeIG$+-^NgKJnNTL>IJtb2FqH3IM&zMN0rmLD@*TlM>h(|IdxIG~C(q*B zh`CIAK4nmgsMk;V&hlkEE3e>rd^OMcYnjFdroD;h<1IYXZ>PLy2W0@eC_~uGw-%Ju zBv4K>>@eR!P)4IY&Np@^`3CAV`Jbgc;2ht6T;N-Zi+R|2iQ%tM=5dw&*C{8uLAe%X zE&V8GS#+E7hC7sFP_E)Zxk_KkRN^1<{lX)j-6=;&p$sMLDa%i}N#o~~l~7)Ck~HlF zWloflSW-5!ofJ;Fh#BP}3rVdg2RT6MM)}8SQdi17_K{pZ(4SP2@{L&1VN#t>YzNW- zQd!C`0!VX7*GN^rupLOFN!v(|NEN^G9TzE*R7hG$I!1a#GUfTcCaEQ<6KNnRku-!f zfi#!2jI@EYlXQr5iu5Px8tFFa0qF@z$`gv^2=8f@@&hS5_)PjjlJbHdT!9&5)W(DW{=Umj(S+nyWx>`)B4T$IVycyfR3WJS#!tug=q4PaLJ$I(LGmvDr_WDl6w}5+^Lv zR9dx8^VWR3=GDCYnm0)&HMfRd(#$z_TT`m%GfkNaA2jVt8Yyd+m?_%=ODjEEl~W>` zR#EPWTFTz|ddkCXO_UDxos=UhU6o*8DDTR(S2ACAQO-Q=sr+r)Pub=kqS%g&R?I&p zDg%aRD8nlZQ9iuQSBBjirIfo*Tld>#)j;Kp$vey40I{mg&R9U!N zT${C5jGww+)R}Nlj30AY936R79M3;4#t!AT%JWW(%6VtS8SQydJMT~NIq#D2A9_VJ z%cq{*h#R8P=v$&n;cXE+{;n{cd|zCd_E6lJ`B+r=`KgFl_*@)a`a*ateq=Sl__G{Nohgqa$16ZN#BcHL zsf5&RmEp9Z3j9{^8@Y?B;rCh9@nm8Rq>ikKuGzH^pJ0m%A+@3PtAnr(burA9-+OIX z4}B`vhpAZuTzTC9=WjK{^W%+Rx1})#FKU9*W1GS=wHbA*ngea^aj>BSx|Mds*}om( zbJhuaH?%;5Y0k(>X^G9g{I;ikE8Mkk#ff{an6}FeE;HpfH9hd5y#^JkD=2!dVErEM z>8ApN!#t7FqBUBn+wj{cZSedj>dl0-!^kFHluz@!j+@(KPHqQ$@$3jQV{dHU>&>^w zolv56XUzN38Gml>f)z>BMQPFv_5bRIgEPA0OJ^Uxi}OK)H9b%<$QRSg^u*$AJ%Pwx z)bsH})vbQ$9o!q$&HC`{*axDUKYn`dkBkWcxYn#M4jkzVr-**2t?G{{KT-d}egHo0 z8-SPo0}=grAm8u@;)+EO&d&^jPyJwYSsRSQ?jbn1Cj{-iL($O}j@b49l zu(RR3i-|zV;}KZYf#3hy6^R(vDBf#C!MAQSrc94Ukoh2N&KQKb_Xok+F9zjy$6#rb zSR9=i%Xf;gI2{s)4F}`k&?Fx1#>M0H(|CAx<(>TU1Z*@*#I2A-tlgf7`V|JFZR}u_ z+A|p075V+5=p+olD;2Ou^@~DVR|$6>oz1ZJ%FwkNr3m zyPKt1Y|ub0Dpa1Otvkb^0sbMWw&93&m!H$(35dm?InC!$6!4!d$s)sy?MxLm9o znG4N4emi0l@kA~*-{E&DJ`$~X2WQ7UkSq67oq4}EP>c47yjL8`J=0`9hmgm&lcTto7|-{c(HRT>6lk^Aa9jP(b z_+F$8(sa^l(q7V8(oNDM(hHKjXOMRbKkf_uy&qU+nbFE+q=j4k1H0V@{-wA-dOFA5 zFZ_|a>u+^EPF@M{SoT+;N8@#?JWBUF?{Vx(kw?EOl{6olJ81Sa>#UhmK1$PkaK7f& zktv!j6_;q#y*6py3_YSbFz>o%_KH`UgJ(^Y^Bt`DmZ!S1YEnZbJffvCZgm@FY^;y6 zd(J>*1mcuNy>gV#Pev$JABBC2r$?4~n z!hjn}i-d=Y(dJi5bc?UbphOdK;YLZZJkm=)EW&2l;wA1 z%A-Q(inuN+qmM&X^siMN2Q6wM^-V3bxmp{RyXs=i{Ccp|Ho(_DjS$tm2^y%Ip~fkG z<9fCOT7)>EQaxvEzugihKexh#o^GgQ>VcJOH5d{gknx!^n^~=q)1oZ~9Bc>6-tCco zqXWi-dc)-}e)G0p7k=-)E9xrUF=>epx|sW-b9he-+ujTJOZP@nKp#|{=a0+R1F)iU zKaAgQ*W$n1V)sK9s(sXz504u}7UM{rI8(pvI6b`KNLW5!^#^i0CJ+euJ{B_qFD3O27! z;eWVDh3jGJ`gBV}-;<=y{I1s?>esZ)K!wE_a43@r^OQ{dem)c3TV&z!Sn8epm4!m* zZ0sDC4Zq{rh$zpqsXui-e#*h1^F%A^LbT_3F^hT^%c&D_iQoD$FY>!G{D#WJ(md1DT@xF2%&lJl!FKpyI zvXf_=L%bV5#WDUT&luPEZl7nNV>|V^SqU-H^P-{lVQrdkCT)RCl@O9 z^EN0eOB__JLoO>A_e^=cTP?QCw-iHeRuaE!>x!ir_9Eq|hp3a%QH)FQ6ERyuM9&_H zVuOQL#5W!(KKCCdO0JqJ##Eal!WJzOiEWpQ^bhNV%igVGz|VWcl+i~-THYBkYsh6W zzThu$X~rXAwCtrQ-1<>`3R5F=kSSWnmP9~wX`}?%V4zP0+;3F{_bb$Z`$JpoUt@=q zn1&FQo1*UT_Gr?s1>$zQpj0!;G)F3^dd!n={o5j@S_h1;+X>GqbcNN+?ijww7th1} z_-%nc7@E@;nmheb!8s6LV}kLvFcf8`h9hKnBx(k^SQ_`%(gKdJe{l z$w|mRnT!|j_>DhHeh;s7I(C1iZrG&^gf5{zR!|nKEUDM@E5GyQl7kMLa?q$rE=o_y z#ir+!TeQ|9U<_pqhqd^mVjpne88(1xTQ<+{Kk*KK4bPVQxW1ibKfB30W}cHdZQEwoEOss{!V(*a))m@_wif+`y=%JIzq3H}59a^zO8iBb zT>V{apLBqq6}liCCf*ab*S-~{ql}Rm!?zLv<Yy$M3 z;Dx+-ow1}(4@7O~jezz2VBRwbpC^Z5Z8CK}-^SoTjReF!84M9YUB3xwh>GK0#xx66 z`)6Zj2EYFmlna}x{65lhejBO^&)PBkj>QtnE{;)#a+lw6;M)5$*Vikoi_3=cS5{@X zcWG~-d3kJ?Cgrn-(%XBM@?yXp<^7@>V#EDz!e#C-(e3Iyv3u1H(R%oGv2xE>u{GQZ z?^U%><6$#=xI#Vlg&i^9rWfj44Mg(^5lEaC$N!;_jCrHd(PncN_PxwO=SVH~d2wCd zN?8fz77IC6<@vp%O0{@MDV6*!XvsfTKiEsqt|6&aDwFC4Y-*xXm8QL<0dE=W?OO~u z$$*0l=w(1#1Aa2nhc8W(d`lW|J}uHd$AE(j7-7J{hVM}v8OflB38Y#yyrwJA1_RH-@_ zn}?}XGOsf3{4AAfV6l0SN)=UX?xa#B6`RSw0?k%z4_hKZXC|mrfq`iWNg>h6f$7ol zVF~Ghk>M%d-GUPnV>1mts=zb`(f@UE)}y17tKQ($(nW7*>F8wea&R&Pa&mAsgmQLp zGX!&WbaPVGb+mVMvi<&ZbaHfcb#3X;(%IIwrGxZwa*)1`4h}BPbaQlV;h=M{4Js9z zoY*`;R{)jj#K)&!&1mK@)0Iu4ohkp=>h0TQ#s81rPA8Shli?)F_>yc4;Q|9w!ZT97 zM+yw=<>fCc{fA$Mg+9KHy{k$!K>C@eh7<=03=9hoNsSDQND7V%r(NshV|P^abx+%Wc*F&V>WcI4 zvfLsM`KxU!|Ni6mA0DyM@v=()lMl&bCM&VFt@Kr?e3%b&)-iwo<&hAo^Z0i@vg}kU zZ!Q2^{^eQ$ym}y2=0MvA3~GHG^@D9sbFHw*SQ=B{T8AJo+|ayD-A6{|g?; zDRQ*`w?5{Phy306zu;kL+W*w4{6FvrP6^hhCI7NMTK8)G-EP}VrMkm`62!5_ zA@@Ijfq}8nDd9=MvCew$e~&p6#+Air*XoB#q+O2p;@>wO9FOw%Zyv7X5k&V4^7t{H zZVbx^`~?PvCd4OyAN>F3F`qoF8SW-|{1{Ic+3+VYa8PPoVqi*eNUWisdUy5d?)z;9 zSwkM&Z>atzj~{>LCaU4mF6&5k6uGv{VJDFDQWU2Sxu$Zst9(fEC)XB9?5?UZq#w&f z>py-I$>)Fh`#q4s0t)UHdYNAuK6GnymFnO z$|}Ii{FPPzp|^FGzPnyp*?2v;=Jnu;-{)%=3;jNiIFr$8=*K|Tk5!*tc~uKe<^NS{ z_j^;uA3ijjoq-I7Px{nU8f?7oT=KdjlhhTRF4jZu>)3wx86vZ2RZ9oV33JL&=7nCC z1eN2i!&df(tS0YrJR@<&o<^sB%s<2TDLC1?;6TrDCg80i zzY%8&ZWV-I%rtpicA}@-o>x|V+l~CpGPT?NKKJ>EGkK-Pg}-*()o) z5mtTP7I^^Y1MZx+p5Fof<*!9Wx~hD*h9*6marw%(ob^9NW-QA9)x%IG z%AlJGMY@VFt{>T+y$de%WHT0c-DGprWbt$jT5#%HYx-R+=z6gr{G7I?Jn zVTFFOB~12sx_MnqeN^amwJ`N+p&!fL=MHOPTb{j2bSwRh-j5w@KDeQXAk@aGed*~naQRpYz-G-sA7JA(oafWG|XVfqB zy6Jev*y~ip#5QzL%u2gNWMlguO1;BKyF19rXG5^vZEW&)o4e(*F9pbE zdyu-QsOyuI7HpMgR-=+wF)YN0UE0dBj4WGUlRdh!+L#Q}m+^;Q`_Gyj!a^30r+<#` zzFp0kT0uX~0x~nq$IwuknHSyo9yjR|mjnGM_xjAySA7^eHZ#}%5H0P7nXqtYIWe%W z$Vnl9{nY<7bH-Y*@zam3UpJ*@6!T+zc zt!jCybp40DM^l(mq}cA6e*iQGIBOoMwKQPh~xg|J?c& zNA&0XN31X#&(E?uoXovj=y!*mO4reD9yGC$tYjD3rER6>S8&MK>*oI}zyAN^*Y!^B z9go~QRujrH10#yGwV9i(GB3tnSD6RT&+Lf(<@~Ep{?A+v38rN=p)vy%re4f1QZra# zC0$!smtf=UX5bRq4lMKzxj3=d<4j6T9Ov`C;KM)5XXH)RZP=7HMr0uk{<~;tW6tur zozPxu@AfYD5N8K=FtR0Un-clCchuUhg1t92l+~yYsB1;P zJGl=Z?vNqbFW8)3=N@G1l2094oS$*)SAQxhdf?1II(Elop!(9r45!#x9&BgFeE@r6 zj-5$?rQL%H9C3wS$D|jt`pwtGjxHt--f`fJD9Ur9*NC@yW{$faR%MwS-xm5ED>PYG zU}E>+6hjntwY=2-g-Lt2)H|tn8Rji>D8rmGgjrz-Q~d?oCiVW~wcqPoKVI}BCI3kd zhkMuZoZ#}iG76_Ex#Hye>CAm)BYPdYlzTHm&Z|R@6upWl;HZzgQ9CPewArk9!}do`cvOhg{h;N%rV1!z(vo-Yt1#U zHLb7s-Q;$|>n0nb`p6$AqLKe!6H(dxJtl5ltEVn0>}oyYu+{j6Z1h5}>V_P#KU6Qy z1~WBoN=xRmz;9~)O|IqJ$9df;@R~R-zXEp>r@t0>jh)C{$hh+Qsl#t`AxmMh`IS}U zLtOXee0GczA|JOX~c&5;+^8cDlS=7Q8JetT!)vDp8h>3Ji z$)UW5$#J2x_B6@gW$yOU;BqMSMxo#K5ofGM_;Fa%JO2$MTQ&TPy_VIci*;K+wgYrn z=tYkH`}Fg-4Lccou|@0M6}wyRx|h3O|q?`4oQ9;kP+k*GBWNdCmX- zC}W}DSXn|=JsIpZ_PV1_^v6Xbz|WS6OdU2vH!S=6+0iyd&8lRKDW*E?dxqV?@26{C zKk1Y5yUEgyp2`Tt8_>i5*np1BPpv282aKKa#!fc8Wuc$BvESx#mYe13OAjM zChR8pyG`7@&ZXRQ%eCf2%0Xkb$?uGzQ|Ir?(aj{RRAy3NvCI~0Hh{~WtW90*$|;T| z3)uZ|0pl}Zp=^Q2qvRQaBeh7aQs&ymh5RAD-rsPvQr)EAA@cstU+=H8k1{rq=Y)|aCZ!4aru@T= zy6(4z!P@+cWoY;Ynsya_rE}&$g|tb90C0jm483+%_aNIyTI< zrL(JZBb8bTnnG3fe#zlU$@WQ63E}b4;r2ZfQjTsR<|bhYsq#!{WMUc}PX~30(5T=fiOJEC@!?^%2CI2$ z{68FwOp~J$l2UASk&MjrmTzHnt|n&xw40m8Cd5bD>i*~gn45if_-9ZPeNY+7*u>1p zL?7@UVNB@h=n|NsGU>UQMKVcnSAt6SkZmgE^)ThwvtQu zNA063Rh&XfLbS>#PA$V5zm>5gXw9R|g6@erHs8{WNJ@wcYokxlL7!kNb_bcDgG`=L z)Q&QWW$D{wWm)D4|MF)p8QapZkfin-$~Yw}@{dufxm7Kq+SgjMf46zGd#Y9jMc zwp)05NSZ_faW1lYO+Bu8)SP)YT3BTV3OSbyit; z-NZ{&`#Ey{F1eLP*;)5WrwFTK5`1)hwhE2Sq_u{w&sLG`|3iQMHgt5uRiCT6`dnp^ zvCLK7;#}Dk=c?ZS%9YHAobI2<#QcuRT>0>i%vAu9xeAe>&(&-O+9U(k(~qQL`wuy* z8X6TIlBqJTp;oI)a5<!l9S4Kn$BfE zgIA1n4Ai-*jHl}yZ|fYL{^_V@mt{zm@eEx$wmK{M{G_uAy)V1nOr5>I-kbJWI(wG1 zvy`)S3H(G`4OzJrSS1-G+0H87b%TJtRv?heYom% zg5{*$T6T1!R9k6Fh=^c$zq#4ju?5=5&MKDVBtuOmk z4`w)wWZZro|CWxUQF$>8tkROMF&uPMj# z5mHS#qOXy3V|uwEc=4FtB{}QYpdcDm4djd*Lr(QL(RJ3Bu~)spT#Hr4UG&y4JDR)7 z0(>G@yTK~sZqj1UE@H>2zPq#xmzIbWSv5Ygsu$93!Qs+Fve0L|D--b{8F!zT@0_w_*ohlK`x;(SNSA$je|0RT!n3l-M$y0zMM=NvZ-5;j3cV?Z|QM#s$wg7 z%jx7EsivGzun5q2W4OTap1+Us-ok8NG2Gavq|p*S34lz%JdpclPs9 zm8d8?u&J@U=+K4RUL4L=RnNOy@18xrh4fgV3mHT)r7q;X;*g$(kWOCyKHoxnU(kj2 zq$p1px;%5GOTUh)UVGo}UBlXZ3mR@hKU3rRl>6v{qBv-+;-F67!Vb3Ag_YMkjS5(- z2wIz{ng#~8ZQoX2q6EjM^h`;Lj*o21jYP6)yjO^F~f=;Y9y^)PrQDtoIZsB3!U5;6^VgP9<(OeBny?X;o?{c;lYC4*k z{t(o>x!SRuWb9c=`js?QIhHeGMU-l;{&zeJ=O5x(TCinG%g~%1opoR(LB_SNVc_X+ z5x`Q|Sg;II!dBM6(^Tf=dz$48`7!m@#V%i;wN&8;Hi4wtrLOj!BM*_^>g8W~sqsVBO=X4D)D?;hYyIe>QrUj5A3gut-&k5Su>4-Q zI^Qc>=C1A!Rx-8wUZt{J^?tB2aQz>W)U{j#SvHxghPq~A4DOP>%So5UwN>8bWLIla zo7LA;GV(45OJ_@sCGGN1%;Cu&rz*p*_~<3A(>RkDsYcPHR=<5yN_IT9mr8A)keFg0 z9;QFT*+<8R#-@ga+w)+fvQJG;`sNVb!qtT{15YWb@+`<-LUQvciTcAK4Z8bVx-l0# z?LW{K;TnBf}UQzh?PNjn>m5BknceK4LlA&l&7Di8X0|M3l^45GAwM z2Kxu1jQ^ErO*COyWY$U$B_BCPqdD0PjD zQ>9BkgUdvs%*7<4)hQRZ$fu^RD=!Tl;x#=A$9xsc18%-w5)|5u_+(S%iQ zMYJSJ{?=8ucBwZcu+M47T~8%Z2y2sy^!K9*RO?h}cn zh*HZ<_L^x#nZjJ6z9kpYWJ{Oj(uImGrba7is!LoaUE-z7cAA(!qp~!~5#H>Ziw8~ibm>Es)f!EdBXTfNa!Du3ag{@qr5Hn$ zxm#ke?={#D5@q;54en2fvQ!_4GX5unyA}6C(p?^PjECrYzdenTr94cS7&+1;j}+{J zkuuAXI#(x}V)U-M2`KKH>);<;<@tjBnKuNcMvG~d8Ty4NGawHW`mrTXAmpx_1h?y4 z1^su^Bn!Atx~PryL+h|EsD{p;Xp-#Y!9~smHbnhg(2%D3baDUY;z^UNLwRZ-D=re8 z>7?1%lct_}*B;WfkIuC%O?`iGl?MfVR)^3eGbN7_-!ipJT8zEvypJYXbNh+1OB^T4 z;AaeY-hh7^{BICt_*({iLX?gEi74Y05oO~Tb6+FvW<+VXFxah#vJ&Kxh1qE>iy+S< zCPslY$wLh5RX1h2=tJz(%`Dw@L4p}1j3&uAQtz#wc;vA|&*7xOTOLZtU$;jnl4fIB zO=c*7bA1hqP6smmA+my$-3xD zly%p`VD~fF<)&Er2NPu-gcBwIcp`J5YgFCtOs&4jorTvsom%N|5V0UF9+^7j7E=%PC57(g|I4%D1`z-_wbfzQ603N6Vc@V;!4t3Ho%R z|IN`zH7Q6&$|Om%#2q>Y;r|Y*Rz=E?Lv_B966EGct%{ML&r;-n<3z|fdf$j*Uzvau zgQ`{GGFxNxxs=-&S$4V>2bB93DcE9FNRYx-naLl$Z|J;zB^bQ>|JS?658nR8-nSU# zqb|0O+~>%hfm+o^g4_%+$-9KV^{&NnWWZFNQ@Grz9M>D=W0>zzgrbM8wgecT?yzQz6K8_sM^BB@n9HWH+qkVXm4`V7jYR}x(%=nLp83n+=M z-^=PNm(|xg*WR*zO6juMLoTSYVmZCv-L?87gT2LUzILb&}sTctSnKkP|St|IWMs-Di_DjquW=VcMrL4Nl6HM zq?`+N(#G%2EEmn=x_}YIapihgl9AXZ%^5*P`k{F?(MPTxYE^`Us+_FZS!EzOuhLb5 zoHBpt!eBtT@X>b%;hoMHB|)w$YE|@YfcLfGhz-Vt@qDK#*h+DuF-}WW6q;h}x-!o@s&dhZrm7^GA23O?HI5<3T zMB|#5!vjY#w{kUs9(07`je?^SVBNA4$lVn& zwKrb4wc+HT_C2`CAcl^81Fliqrp{GqMrH(lEz#m0sl8*$#c$^hDuhg%i*w7AOgLr6 zplNUt$x)~pKlaL;ICD~JKmX1hC%N{+sUs(IoUU=I#t9uKarR?x2yybn>5~1}OV*Si zDLYcWq-1G7_8K)MLyCX)V=qS2oNdB>C=jwyu`F4{6#jYwDHc*Bv>$s3nSvfAIEsO6 z1@>bv15F2Vbr& z3qFRs2;TWsNpSe88NnBBEDC;{IxYCYr;~#dej5&6ynjNl^S)bxp0~#a5C7@LV2LX~ zcyF&!!PB>m2yT6RcyP@hhXki(=LXN<-nX0nel5-~<^+omUK9ND#J<4?{?IEp@b0UE z^}e3Lq@P|9M3D!}R$U(4a`2bK_diiRyu-Jy82;A&{lg{=UNLNKAY)j{p0|d6|J@Zs zli$x6dVj;OhCElXa>%0ZWe&-C?bp|rUr=-XyQMv^PyR(y?&+V_7*fK(3y z4K#pThk_mo8fXBw;>1k#5YRvaxb=F_*MkNcz^yorRhi%5tnbSWAK5^{npn2l^!JoOl7ko79 z$>2*x-wpP7?(txUe?1y}=Jxf$>)%=z?0MtE!PlGC23O2{F!-*qCK%lGKyb_yD_C{m z{lRy7!K@)mgF9004L;SlBzXGP#X-+2i-H}$sKj@PD)3FCyMy05G(R}K zrY!hBNp}Vh-8DNnu=kt`gTKw~ z9DL#*-r%q&6LJ3j%<#WX{djof+K+};AN%d_H}C!R@QeQb`taVPwhceH^o8Mn{_ck1 zIU61szHZIx;roBRc=(0W?ijx7jr`%y1o{oH$?H12;-xQ!4cfkUnEQv14$J=6m|>ff z_pu%rz}G-;hxvBcZ-=|>aK8iocEJA*@Yw-=JHU4b`0qeCI}qLugu4Ub??60uAU-<~ zuN{cr4#aZ@;#-e+*CYP*NJl-=Q;&4jBYpKqXFbwek95}~{q@L)dgMnv@}(a6Q;&SA zM}E~K-|CTn^~lG1yiKUD2IBKM?K1=9_3Sya;isp)uY_% zQGWF($9j}!J<7EnipJhA4b26AQ@?qc8Pc{yjzURZcvx`RMDP!XZc=56EWH9yWQ4{}l zc~ai_-Dw>;sL3tY{vb@YevE}3jg9I3mF?4gFu>f{hW=MF?6Et##G@?`yZIb#sxx0AZV-uo#LQZfwt36 z`)beuhkZZLc6!{fzZ~=&u_t{I{X6JxiN?msLcg7WB?Hjo9Q4Wr~4Y5gZzu+$fw+cQh__Sc9-~z$FqCS$(M}l0AB>l4B1A?ms zf2Zr8$vGq4aYjkJPOzuo<$_*8y#!#G|Eue*$@O9SyHfB9!Pnf{e4F44f|~@XI7@%a z1-lAfAow@bQQ9{Peh49)G0w-NGs6Qo-qhlLT)T93@C$p5bN-UMYB)U{^t(pdt8~l%rkl9}0a) z@Rx$G3;sgz1wl?o81AEj_Y1BR{I=ji!8-+K2u>B8Ab6ADNWtp``wR9Kyh892!3zYv zf?T*@ygn6d7W}>7JAz#Hpu6pYKNb9;;P(X|6O0Mg304WBUsild1*Z#66dWTsTyT)! zHG)?Nb`|sq8iJp-X(va7J|y^-;2VP51-U=N^!-@yS;40S*9*o3>jbL=BZBh;O9XEh z3=4is@CHGy5;0uvI}xuE#Q3D>Zi0S6kKkEpx1S6CUGOi0e-wOQ@YjNkg7tzg3%)4$ zKZ4&Ed`$2`L8@6Xo=XKQ1@9E3mJ{u#3QiClBbX;RSTI|VTaEO`El8r>KXn$mgWy-v zKYb>s6gc6Y>n8MfSn!}ARncg^TkthOZl2Qo1;LGiPYOOF_<&%o;8MX#!P$a5Tugow z1aA_|6Xc#R?Xv~51k(jm1v?5R3jS02-xGE}EcjbNy~b>qdVL!0Q_Qyta@U*TJ}bz@ z71HYjEx{FnO9aaWXA9mg7#1uL3<(Ys94L6TU{AsBf)@#P6igKSmy8Ra3LY1vjw<8( zJHdAZe<}F7;H!c^6MSA!Z1#b}y2@Vq+D0sDC zPr>ej7YW+;?YM>h5`i=Pe+d3f@Xvz37kpRnEx|Vgw+n6+{ITG(f=>yq6SM^NJ`K_> zbh#jQYgK%T1PcXk5zH6VyIzoAgw{J*=)Z*SA=pjOFX$0GE93j;f`1kKQ1G{c2L$&B z?hv%)%NK;+DEOoxy?BQUy-kyB)fAmlGdoRGmlpal^ zn!v}tbEmy~d&ag}7>sz_p&6aaqkN{aX?y3+-!ShS4%g4xl|lRG|8sb>cW+N0^i?C_;ZIobX!D$p z$9eDVnFk)I5=Kw{YyF(VqrH23mV*bM>%IYx_U`Q=j|E@L1Ny4}=B}HQ;K6=;6XL=4 za=z#5?%d&Ez-qn?JW#~($I0*O?#uCl2is{woBTN6eK|wB>TvD=4uBsvk8$x(^$QDv zKdI|&Y&AI;{?BJ`-ybp73a40+lw)*#+s+RYVS@)exaWv5}W4vgWI^v86Dn zI#{_VF?@)(jYPw^ufvPm25@5pE_Ud3veo?|Ln65NAnRaNwpDNxr@*Ul#ITxSwA_C% z)%Vy)9F=zQa567`!4dq)O_9G?;f9;@a2EOk+!IqX@2H885mMwuE0khY9je2T?LZIz znp~ub=eQ4}Xo0tQRg6yK|690M@3PvoFf4M*=@P0jJS0?l0jLE}h^X z7ZxCjxYuJkE~x2};*FlnIlJ>%57$XtgVC^Ts1-hfYb@;e;y#l=5}Y%pBXK{>WZoEn z`%bzb{g_y|z_aaE z*cVO7Ja!FwFS#1xH~;%OE>x*f7pgQ`Rk&lQi+LX|R7r{a6{p^R2lDpazX|QOFOq=E zR^^BA&G$zlR=DKFoBJNGMu{Aco^F1Vr^kEb#qS^S;{Flbcz~N3VrI9PS$7%Yu4+u( zzG%q_f9-bAIs0(6!!o$4JFu+G3Z2OL%wKpQ8j=d5gT=)oCy`Uj`r}q4tKeiTWm`^z zw$cA_;@p*os)8fv>VlBm(>R#EH*zdyUT1|*AT_>~$Q9z|(KVryW^N=k^1Pime-B&* zg8L0(%-IpS|Fq1mR^&v~?CP&AWpvP|f zF!=nRoa)x+#Q*OOciSh<&v(fCJO|ZHHNSAjPu}6gBqd#SoWXDnb8+^;N3Al3Gmyz0 zc+vq@)OWz?&JK|IaI9KLUx)d4{{=kY_+5v2@%I!@air344JQK+d>F1EU%mRott&5E zg7JdY2zu{@pZ887CV;@IA=Jm<%!>oEqv`$+G)bm1k9Q#smePpzBzZDTcx=rzlV(sT zRkB&&tsDWD|# zluxog%GA-xv*l!w&%qJCI@u?II$w@-;w;wJ9ssi2AeMO-bD$HL5r1@2Xn69dm5&eOkVV*1W5Fp*(0py8=?*QqK^JFSi ze-B7y;Ae#XDUj~A0I5*>GLQ22sZ*rj|DPsxTeI=Cjc2b*PKYt6uMOCG9Wo}kA-E% zJs09yAoJ!sKz$_QNxbn$#P{PSdVK;Zgb7o=4M<+wh2ACf9-+CuM&4X^;A)86J0_YE~ zti1d|5tGnUaVlh$Lpjp48lYF+CJ=c13*HzMe{ewfNWB&kn$_z#Rt-m7E>!U^LSl{OgKbVnuav;11MO=@Z=QNBW%RW7(v~>Q=BwsZYICAjhabIY zsQfUm9Ey>wx~zWCa|{rVE9*kS-^7@x2Bj87R8~~IF*u&E6hCNIE(5S)BF9+EShJv{ zOZcmL9miUrImKs68(~Ao4#mtzKt8FBX!Blc+ggx}ks}Smk!qOWVKvM{(rs1AR$@di zxN%t6!!G?{-sj*zlRNNZSITbm8T{<$b-Yv~gmf@tp0nd%m$3mqmJB;0c0%l;*gdiH zV#j4a>=xPevD;&p*Y>GyZE!NE)KFmf9vq`myFbBxy^1gP?^9sj2%7U}Jc=HJ7dVaY z!-o(_(jx?MK1b24RWzS3?(Y-~2o6A2(!Q@?reK<2iXi&}x-$jONI0Je>Y{JiXa232 z9}wItxI<7~Oap#D5&Aj7?+HFCxJGc5AS)l^u}F}Wne;5dse%&(ZxS3Sc)ehM!QO&b z2woz1fnc&=g5VbjjNzRWgdT^Yj|d(T{FUGy!Pf-s{qh%t-YEE_AS)C8Ojaynt>98Y zeayr#?-cqD!O4O*3v&F$pE+D`kl;0fR|;Mx*j13@JO0cLf?r8J`AqPC1wRt}gCOMx z`ummO9>E=gKNtLo;B$g(c=Y$E;2ObIg3AOK3CkU zmEp(N_w9B6JXrKmcC^J4Ur}$>**Hz@o~CGC$vj@?VXtrNi|5nz6Tg>!U_1BHXJ4B= zSUJ5Txp;nY*^-L674b!GMB{w-(^FT(NZ08Yr52z;w|NFZVP`Mwh*%y~KP-!?=bNl^ zufQq?{j0@}E1=q8Uui)Oio;93JhhbKl2K z9nUSoLsRPiIXv21=Oz#CAJ{zZKs;{HjLzlJ&N}z6QQ?on&tu&kF=&TJd+Xe-Eg5r5j= zPd^Pj*iJIRBVG`3*ZKwb!Xp{D%S6oE-V1*Rcx1yat4%zd{Niin18knHzbmm8JUGrz zZW9k_cgj}Ru$luNPJc|F{e0aW_ea1Z9ga7Fhtr?!pZIla_LyiHoEz^2 z59i}tvo9)IP>wS(xLi@YC@N}wPkw*!VEA9O;n4wR(xs^KV%M+{0|fh)$ye#U05)o*9tRzb?NY>(`T(`60k9ZIN_>ZrYbrSS4gAo zOo#h+(o>fWPbxn{kI?BbI9;)ug{~@JOMS46o^ZL`|8mpLV*%W7j5PFq6PpS(YY|Ue z8O(cbYaUVW(`p`9IJKeq3G8~<`w+bgaJ6u6?lnxY9#9UZ??rTRJ@RDhNzlkF?(oFM zARO$U)NF(qXhiA}G;kD|veB-%={2Qhi|yj~Pca#AvR>nqbuVbE^@Cx4Y@+tB2%8W5 zTf5;X?p5UkxxS{n^1}=2?)qK4mKYVKc_Gpgt0{#oGwNdSY##U}Gp`!C#eJQc6RB(p zx1Z9DB^o)6y&5)?sx#KBeK2lELnpA|$E)IxMf}$7r>w|ntLhBDeUXPkI~F&Ih632_ ziQ;PF(8*}XyRW(Y40cTP*nsr3+B50Pz~%V}XrfZK+A|@In|aw^@*3PMAfJ=?aTVws z_gqPr`*LmG>F6|zVcd>e6CxUdSY?ictf$AjZ@AAA7nuL+%@&HeeE$D!wj>turrSXS zaQSWGHOyh$-qLcDF05eiO|I58akcKh+kJ7H2x(UFLVRbd2=@!}uHE^(9X7FaL3srz zcVQ4k*`cVYVn(FY@VaME!^~4Oqqw5PaL*)>kO8`4?zchD+QEosn1%o}zmU_kEi1dWvwz?Cc7|z4{5o&Ig0JWndrGbY}#Q z`*rT0sR9ppippk`>hLYiA=LvFqw>4v!poXr%266j%E}q#2R}zd5;D>~MGH%cXBqCb z)L2Z&$V3uKO71e;4{t-D z<@UI}dK3GZFzu*W-GEo06zXKdFV4aToW|?eVay2QdPkH1FnOeXRj|Y z!is)vf7G=OQ{MoqM7!R1xSjPrkw=yzwiAzc2RJJ;+nFcn*D&&@crTxUR_Q63KWoMk z6rA_cE({QrlO}U34R0C~gxcvrQQ%HM!+V*oieAqGe96k&LsLEv?*c8J4G!s=LqLVM zpm^q8MYhk&dDh3D?k)ZkgQOLT${V(;HX~4BcqeK92(YNU2y~&Qy`B!s(hb@;)q|xO)vOnkxLO8lw}M>B0Mr z`aR1tAH+?X=w-n>96*b1>Xbtf^6f3{vAYH8wDq z)C5gU3``+)tEQ%TX0ZOvpM}(`Sci2^&qCX0?eLmBbmTRkM=QC28J;xh6&QEn&|H=@ znI}}3A4bwtos)*Ae8CJO={B||W;;`QyN-S;Q#xJ0r>T?{X(F8*5CtRY4xK@no_Q#I zBdJ)ESuHs@Q=9bFIWbG8AzSA}iKYg77J*YKW0sJShf!{3ahblLH|b8Dwo%%!vK*D= zE**t2+Nih;&W)rpZ8+9bSzcLO7D3OSG*26i^PuC0xB0si`-wW&@79)+b*?Ye)HI#z z6`Hz3=X#~4W_i&6lq^&&WRZ^49At7IWOWA>haxmVe7n-C15#Z~Qnhwyc;@p%k4Y7(PZ}Ac%Io&QHTn0R^c(IXuISW;FX-M^5 zTrn|{uh1Ec7NWYP8D-@&jO0vmO33gTord9sKh;}zM$jzh3m9H<);oyBg>i-B(()o) zV!VKh56OeQCgbH#>9~SN=@f6H(RYa2KySyfYPEsxy zj&>yu{ufp$E(WFi!EqAa^|;31l1nrrUfZip8Kg3`J>H)V`oPtq?ZI;P=0Zsd_@JmIJOi*5t9~4kJQL4ES{#0AIG_L$wtr|uNS~XY2i*$bZ+zKe{C_%vGPUIS6Cn^~8*AwaH!g`in zvx~+VzRS{KH`^B$2M%>`OHC;JtZaFSKhLv(_-;4~p&0Wcu9ASb1r+88FDqfLH zExOu6Jk0Qjm?d#oSTcJqmgbjeJ6o6QT4=GLuTVN%9B`;p(-}xTAFB6L?}zd)X)Ng| zWRX#SCQGoNU>=bAKHRIMcFcGnb;B4L>g<#Qsb#YSm{>tgqX+Ruoup@gq(#9KjoPqNuY% zAFKmrLLxT0-3c5COjj=6I36%X9Z*=j>6e{+HgGtQ;f(?^$9TSz^jM*95qiAf9b!IH z=rW=26`JQr$wxINmum(xdKP}rZz%=bqh1SHfJ$^|QK@0wxIx*D!+-U#kXS&_%}FOR zbG>+9XFim<&LqW=JK1<>^>P?JfPdoAxEFRzXrl4Z+W3toOfgddc3vW5i1!7yCx^Yy zVPAG0`+&ncC$9F!SLLkEW%N_t(}nwMz-%FJ=vP3T!To~I{woL`({NXc9bA?-sBr=Z%( zfYS@-tb~HT(*c)Y^kjzO=J{gx`|vn8w8$*^N#2f&8UuA)KL z6Gn}V5aVS~b#KyNn zhEbirb5q{H1y=<}k&j_C1@Z65L%}h`ylb!Rod;|f_WN6h1Jmn{yGS4TaL^^eGe7+J zK*5Z3x&xcy28G7S5gP6PN8)trYlprGrFm4Lav^>0JkxlFG9aF(b6^(059{V`?1yf= zQ_Q)({#V>f)8L>Fg5K+(d51dvy$JKo4)aGqZ*$N~#oa=fZ*rJV2fe{T-wc}j&Wsns z$2sziPdaFvC*SzEgN7#Q#z!19mp&Pv*90FB#JTQ`O%8Wq&?g-<^xrlfanL6aHu=1b zdvy*u%&B)pb7)O&e86FT8|c*zn*9siT?_L$4)d$UJQL=3ILx0zg6aM{g4KezVk?>Z z&Ul{gihnoZM|X>XU}cUKq!ZE*Eg@SN=1laHq>BVI1=9sn1OtLl5?Aiepzo!>TLix) zct5H*%~uIR3{x~^4Vni8N1&WZ=L+Tsa&L#`mkUw@m~}13a$`bB8d8;+|3m%5^Q@9K)#p<1+NqACwP@$ z4?)T=4Bs#45yU2%GXGrg?}C33{G;Ieg1;7Q6s#9~S@1={{}FsjaJ^tmuuiZ_Fd~Th zt>RN6c)K76N&J}wf+0aJV9|V_AnQ5lo`M*OSTB`IDtk+eVd{_!#v21w%;}?Azv+0t!|^`X@$L{xv;bmj_Std?gb4e!&GO1Q7H}%-YnX=@m2%iIiYjobXMQD) z-OG4pFUQXV*V$OCF0zG+*(H^>U{Qpz3SMm+z57s9YICy9F=k@vsi;)%gcV`gpC1;4 z$f(cP|7ZG#0|#bji~eE7lKGW$N?I!*o=^X9G7CLjm*GjY|MNW;_s2O*xFfPI@yGcS zpKqdn_%!&^KZ9BeWzGxf@juW%+z9_i;UyIn7ERX3x=z<&ypmMU*XbXwM&LVp7{(b^ zdOYL6L(*^#kM{HrZ_LDf(Wu7TvosIK|8se?qks5^o+`VI3B9%N2E;?RjC0e{p8nxi z;K661@X(a{e@;Bw(?28+mWj<{FXF*Ah38xz?dTuUFLjzfx<-3+{6B|Bd-{h*`)J+L z$=MFy`t^J~&Z~b|+ZVG-q~-KC;L)D`;g8{WBGPjCz^{)-d-{hiv=2TJDlE5t9BH`| z@@r9LF~9wbr>&kFc|bMv93KCPuG~f7f$T7%ZQ{Xxp5}ZQA*ihwndtD7flmSt0XZIw z!_WD+LD)a1x$`{$|8&##QMxc=p#Q?JYe%RN0~Hv25#1V{7h7f?qx0LWakHY~!&aUd z4IQz@q(uvkQcY}c4mFz&S|d$rlvxSUp<1Ksd6@I$Hd_tMj{OMqD@&jX1C_W=(3^=i z*}61V!C`AeU)$eGxT`r0g_}eET58BgM`u~#LpWM*je02EqDI>2G=E(^xHgVv&H&O0 zIMr?C2du)B=;-X|Bg#A!*U#oSE0f^10LhEYCeGrYWzI%U^*gZrL47TA52FHMI$&G zeg?^*{?AQ;eP=(&Icts1bnxDUYHM|kny*-)Bl)?D&E-dqZ*XQ#4EE8{sZOJBE2H#0 zf87QImCK{~SysU*Yt#x|7WrwB z8yfR&>?b9P+wEVQv&qIt3qc2r)VW#Z1M%{<(uu|?j{)-mfGQ?vN zqO${WJ&Wd2lbh%NUIP>W*YB#`73t{z`L3MLqANyWaEqRtPK7d+4qNvW>4ATgrBzKQ z`(8&H1Ne~{WVHDCdvvMs=SQfNs<}D7FR#wu43y{{ zLO(RKoh2rXg^?%4yqq&BudNJZUWy$qY%psRCk?0vCQ?Ul_&^Rj-*h1W}EAhU<2 zd|q3l1juY`@;BtuWSSzL;;_sSZd8PL;^v|agq0DMhE%Up z8^}G76UT&%G@~OU?H;rknT8Lf8pa&=kjK!@y!Ipt8iPY61zuHfb}d37VRibd=PsnwsWqtqtT3>zszFqsfZlHh+LDbDKY8#+fD-T8k?U z+=l?ONrPdZoDODX?#W#s!7*bD_f(ywhL>tV?%UX|nEy=j?K&N)O!9R7o~Dvqq=|HL zpjwdo4xLk(UZob~F4kmLOIFU*CVh35%+iU;)>%@bsli^T1-VNZGpGf59cn@DJ9Q#Q zX+x?7x$n|Z7^97}T9CU;8;Pznl`;SE;QTdFqFldkl|JBv1F0aVc0)ZI?#;Q>|*o-p8osb);j}xwDS$mHFj39 zDth|a86`cGC)>^{RVfTlj?NjMBaj)z^x1y}n0mH&@;~%~`OG2yFvWzn>hiBu*}{vTkR zyc;nZ;LYrYxu18|+SuB`4yQF-+m=4*aO#6COTQ8Y~kcR1y zu(@n9wmxiDK{K+bII_5iZ3p4ZD`v^1>VViIWEKWdAJ6rBH zykqpc&kJ^jS4N$H4&Cs|z>|WYyCV(Gpmkbw$N{fPjLr&eVR&!RRnO3-C;`JeP9l*+ zNzFT6r^_qZ0>vzp;{t~6=_YGEOY42 z>e?|yg3M!I~bYe%UxQND__L7H-+Td(&HZI+G{ zB%>@lvhsR|`?2?#>_M_Ih&N&$qU-UjbLw%4U5}x0I;$w2fKqMj_0BZBv*{nok6z?h zq(sN8OlNjL$w=C0-T~z-1=%ta((SAglyAB2!c&zQYmsg($oB;URf|efHl=eHR#fU$ zAMf3oO?n#(OFT>1j@I4S{Xz0e0~MgL7{Zq*Aqw@P>a?6q^ptBN!dDd!>c=I z)$Eg`33F%@f7)CcvFad{nrhOuQa6kajxFXQt%^M08iZm;L+xNoln1pkj7RypR>r6> zI*7p@U-G5hF`vaCoSbS$mxJ!i;+b=xe|xbmOw(JjploiX7+#`_&TDj-wXifk+9qH6 zN5si(KB@jUBfH%u$9cE;Q)TiMOgb@$=?G8twL!=L9aq#dc*_1z!TlZH*_Xyua6eN9 zrq`*03mrVwleVbfUZzZZ5Lav!++1Z6FuJ(j1&0eLXJ4S+{)AW{N_$n581#k81;f#< z#K8wJ=;C5f${)O(QI44a26w?wkTC6x_X}M#Wsu6$_K*n!yXaae6Leg`EJ)!oNMC|4 zGm3e)sxZEub_o<$&M7LMb!Ty9rQuU@2ZdA`qHZfgC2w#zsVtvg0#gjkm;}LfZ*pUc zR2EuDpHW_pA;{N9cSot(3QZAO*uK8nFijg4&!{LWn>!D4O5fGmB3)T1*4JpcDbvf% zq7sC8*8;;Qb$pI(xVQqdF2g5cN0~O(^}np#@b%YR7dXx5%r$)1YV%5`c^MCF7`_2I zQx-d|<{*x+5{YH0)2ejtV(cvWl;Dz>Q4N8Nv886J@4D|GZ?ptQGv3@xQN%a+MP=TU zfR1`G4_GWJDT21I?|McmG2>(+cr2V(Tt+Q;9z?;(FQ1ynC1#w8+o@yNv{7SZV#evX z4U}DQ=d^D)(~+2QCT_0e$4VY`@rj^QZQ3Ep$mPqc*HMNhEhEDOsHTIHNu(KZO{@PR zTGEfAufn-Hb5?nTYvvtQbsI4imGYt!E?@W`7ogT%f{xEO%C2>sBhH*tUStQJPd93M ziu%*aW{kE;w?#GVzv1veCF;|Sx*&(D2`8DMphQOW-K6dED0nlcQLDId2T^9G;Tx+h zM`75Aps$$^)uOw`eB1Ed;>NZYWbvej*j&b41WFZQi?fB$vcW_JOby?7x<)2L(2KJ{ zbbZ;_V9`M1goReYZaVFOqn}H(4iGuVwf|EHJ&Z(Hd@}L$q$4=4lTrigF0U zRDI|syr^Jx;0f`LMh#!iz;CB+vS)y=;zewapqux}bQP;A2x$gQS;XuvRLw_5%-X69 zz44~QtyW)&y&8dj$ned!NBQ!ZmBoun4Bs3rYhcZUqPlNxi+q9s92;RinZu@eE9T5C zRVFflP1n_Mp00)vO?k?tNb^N+G#@gxZ@#w7@~WjCU%8e+`g-RTQHkDnx6Vt-rL5p? zlX11n!_E@JSFs0q0Z|U3Pp3;ZUxfUyccMF8YBz%7MYD05vZ7?+qVl;5jZWQdAqe%D zb=F~ZnJoy>3-!Wy_N1{Edi0Ln2rh&GT2adtrr;JjPZUDn1>C5_hOUod?g&tFO*^H$Y-9|s9Oa^$-M2w{TA1G=t zsUr3S<#*vA+z*xEQ12X^spZ+goBJWwT%^$kIY!bg+GLcN^f!{mX_GPD8S`*Val+44 z@r?CWApK<}IKUg>iM@$>>1Qzt=``k>sv$E$x*;2#?!`NQLc7fsAl&9fkX1TSNMmZ^ zc7tHxHpi&{ucDmYCi{er%+{pvWE6JtJiMlNzF-74gH-dTm~aqVe3H{d$w{1T(Hv`4Hh<8XEh+wOLp*iKrEFSBE#8&W)tJtP+1x$_o8 z%D_m)wlcyH(zRWBybtJnh26>63&m&~MrUb@edCM4#fyy2nY#XGI}CMY@7z`d07Mp zZfPUUyNn|nCJ7NN2w-jlRpD79(Iawj?|iNHT&dRcW~(7zYT*EFv(&4VX*&;M-QWOk zbYjK5AC#){iAG1(p3Z~E!ZhVGypHLdG<_ttue48|I7iEyNfY)WoF;+3Q)hyjRe`)q zljuJ_2-4fnE2g2K?TdY1RVvQ zTufScGnyvWswh-0u-#S6fjbytLc<7%(@JsLK}>~dWU+RvdS7;5;(U=fPqrg%bH8V` z_TW=dw@nv6u1!08OCx1vlBgv=(S}`B*CzqqyG0pp)P~gUR*73msUtCCOIK7-BWW22 z5+vagFXZ;5>)`6aDP}c1U7~7=E1g+&iJI5zcOIiuhChS_ zV$V%DxA~$P4BkYt&W*lqaOLyMa9VDHN(lFpUxGhZ_?pWkArqL8MsU2837Noz;0UKm z$E{4qm#|_wChBx7xP<8lGaV`slXM~~bs`Fx2(Fz;#3wTmEiu!3dAJG!8vN=q2-kAn zm#uWxZ^X`wE4&-gx|AU-X9%uwDpJcCDc6KlW?D7F<6h3iD%V!1y_(1@2~X9pw2olK z+dRA9fWTcb#(`U=sW`g0hC~qvN37z-U1Zl*!}Wy9E^d>rz|R%#-b3Q`gv3kLXV(*C zhwM^W@f4%x8sC!Ka~Y!tc0H?Db7!49+OF_yoAtAr^(9Q^bL6FEfrYTY%;@p8=OoDo zx!LJCAb+^~+6+SMO?RkZ`Y(Gzx%!W;C`UE3&o_3k&m5}hgY)2`x8)!p4=yIPKF65c z`W$0N=Q&1S>!X$DIUuQzPzLO@nEcf>b88IucJj$Njxklgk`&5IDnIMLO4KGAtP zvRmsDijL!u31|Tqx11&9(ZWkwNYn|3PuQi|XBE4{k(|^di_0!YX{v*dH(nU@4e;?q zVtNaopfXTe7igS#Q1|7rwH`?FOIr!3UM%O&{*lbmW=(eew?`EF@!%j&7TU_KGZ_lI zA07Zi<@{y`3AwkUj|kd3R+{4SEeDnsip#wE5RNvhfLu~mDxO=PJ;bo8-H6nsi8*s; z&nYXxwwNZ*e?akS97dz66A!gr3gjU>bSt>T&Yh46Y4Br;| zh~P&+#^4j7lTg&;cOj7OF9tHaG$4-$W(du@(`epT%=3iC=|JUSM-eiqLZe?-KKQK>Du~^KSzKpqB&n74Z*?&9j1=fEjQ>r7Ol+U+U~m_@&tY3aCmI zNKOZZZU)kQ0$SIVKn_(pgwA+l+|z+fqkW-#2581D3&`B&z()JwK)UA`MUJS4QJ zTW}eLtjctOSKF3?59<{pM%0(W7ZO;_XiR(wKZh^Y?FikqE$u#fMw38WcMd-=n(cO z+llo#5*G!mbG*jo9*Q~b+Cq5Y(^HK?d}I8mp4Ot##?HmoQ{#SGD_u6Ob2t^*D7t}W z6zyXklxgWiN86yvltf2ev_kD3Crxc0p<50`QW51GLvA^Vp`KE5J*<@h^-!GZD^yi* zs*P~_-yYvuYh+MUAa0}77`ToTH{tpbZinLjDi65Morz@;Jun)aoU}FLHgEb>Qxh9~Y!>M= zxZ&qCR8w1nn|@AHn>lyhoaXjkBp0}x+ldrt#a*k-Gp_GC{c|CY)4R52oV2zvvlryK zP$pI?H`MB%UaRLyS{o~atEll6A$4-e*3jWH-}!C0#M#zHRcy|l&uhUYI~;Oa#3{5s z9?c0~YZES_#Ra3H8B0_JSCdGtm7L#(>m@BVQgQU!8|UurSaFuj+9NlfL7KzuN1S_} zW618IZGv?C+c__-BCRG>j^Z&m{RNu}#}VpwqSj*U%z)Mz<=Ff|C#82Z&wnC&rhT_u z+t%rbToLOS>aSk=wiR#A&5C$)Q+hZ`iKGN#EVgZ1ZDt7PmVT^l_NmN1-|=YXHJ)sA zhG<3Zf1uMO{#lUUksxgerVE}y_e=8=f(Hd37F;d}saLtf`Nxes3xntB4E#$J^ZW5m zJ~IS4wvoPGa6b@E&5eSK1;+}a`Y8L+oSDMiNWtS6sYw4t@EO7H3EnDri{NXVeZ&1W z!B4@M^xp+5B^-`oG!F>Q!_YvwMDTXOuwa2;NN||oK*6g8IWCeQGZ-vs|G_9 zpZSL1cEPQJKNfse@F~Idf-%85!FvU@WNess2|ZJg@*4ikTLr%*c!MA%J^Y#13ic7? z#FOTbZ`4^<$W6Gk1swo>{qXa{vO(v8dWVrQM$9>RnJMp_h+qg-ZYZu-;~k)$t?FG< z-*ddb>3Dy@@g6^092bwzHE{^c_DSS(q-EP8&ZcFFuzf4Y$*qn(+cGY1v^4@tuhFJ)pOJvfns|M|1#tQ;8q85MR zJkYlIwB_Nw$ffSJ9|P4er$1*G@pa!m;lgz`c;}(bJN>Bu<=@wR`y?AYz6G}nz{B}C z&vP@4sD?)MO)jH1a4{Ao#=sEM;P_c=%%hdY5Bn`HI$`$M?lTH}&S$UAVrTIzwtW!W zT9(FhtC?WcXl62o#|jW(Ym&L5aR7pkjx({*HZ*Ndbg?)7NrL#9Ql5>)M@8xmRQ5dc z3l63^4bk^MeLfoY7VT?3fdXiA_7sPI^`Y06v#gV9PTUNB`ZeQih#?UDy4xd$TbJkdS z^jc=NWqN8F)#o~%gU_0?={R=GkGH_CgM2wA28*+yQ#Dnmx

qmJDf;gfz|P9(>#eEdi}IQr;m1U*%G&-??zqXkXTlD+;l6zr_fp~lcrdXw}8NTyJ~!|BJTd=FZs@2#Rt4Vv zej`rbb5HD+GtraLf)ij+^S`ER=kYP>Z1qiG5iK}LE~owdcKYw*F056B4{sdQJgV|) zzHn6ziRGWEX*Q#w6S2{_nxFw++VJU$P>H5x3)=TI!pM^--%} zf7Hye3U-gQTugzP6Ahm_8#-!5j@E>B<0I-#{<;fzRJ-aFzk~|a?Un}j^Nc8 zgD-$cz6_~4R&}ox+8ayRP8(MfVxDK>OErtitnhwo)GKB@1FPv^NT|twOQD4)wxE-+!93FB*DHeMcm+cZ6l`h$htRGKUnr7WuoY;7I_E6L`$~d zOERw5tDb-h-;^ox;PW~DER^LGd?;p$)lr#t@mgVgd}hkW@S1E@y`~TTTcK^BabkZ9 zCt|3iRr^uR-ol&a_6lkNSO$XrtPlKI&5fahbk!JYBIpF@|8RrCs9_AOs@?vqKO#ov zL;kE^BR)pVTu=8S{aGlcDg6Bw)_;}vU*i2wcz+%E34R4|FgbJ(@#0$-_14#8RU!6W zGJ&r#EZUeL82tf2Nx#9g_GuU4@gN4yG+O+d@z`yz{q%yXSv5cOCkKX>m z&-{h^8bc~;{e`G#CmB&*_diH8D|`$rmra1LC+I(CAFq7~?e}NB z(C&lh3AEa02hk#v?j9Id395=)o8v zgfjh&UQIFIgZ?bLy&yi0c)X$F;P2HBvL@U=Fh^1kph{dGeK|jXPp9_Mmh~NN_fhr_@U|qOc+i%01LAV zUXYp7KK5t5#aErq6EH!wV!luNtG^H~nf=q>@b}y0ugO7$z*nuBd#P4>!u3V8X(V$T z*Q$is`VR5(ilJ-c4ZfO@Z%IQeMTw1w#sANAAo7w3Bp?gvn1b@ti9nh{d;R@9s_ZT4gF}(n=0<#XNosgYmDlYTg|p&Aek}<_ zgri2MztbOXP>=&;f9rlsgc7s%|Q%PWnRnXp9pOin}B!$MQV@+odFLA+63 z({y<;UoG87om*y;b6b*pPPw7kpi=8*V+L5`s*d5yPdopTfC^@%tdiD!9TFKchc^$y zcc0Mt=ArF`j;L0x+K;opilx|fGG?msj3-y6RMkwReOd~WEj1IgN~v8lNvG+Qx717+ zPC0;zq*9Gm19ET7dZeL01~FB%_!OM#P9sNPJs7;XlmQjI4VP0&So@!d5&bXZ32UjNv=IiEoS37uFrFjn)zkI=(} zPL{53^DLAlJV}4`@R$aG7p_ptFLUEOPe6o4+3KaZ{0W0V5QD*REU)ZPU=5bxDYP zDAF4~l4ku6QggiD+E=au7lxS!VdO${KJoW$s`=uo?$?b z+381jl=~~IFaXbH0zNm$3{Hsr!OA!JX+&JZbfY&~&|nRUM)s0HVADyJ+G+Dr{A)~% zXow-MW(qToKl_UZ@CDHNDqCC{OKxPi4VJjuubut>>AAK|W zPuC~MFUEMZf5;d!(j5_;!NCV(X-$I}{bzn|)!yYF#s;X??azXE#CY!U_cOEot9aQC zMfuQv>!$Q~PX8i+e62YhSnkQ$hbhR77(Cv-EUp4P zqMj#PtxQ#7*C3L%gwJKsKyFq>f302vrg@ay~LvM}!SikUB2;ijC=`h+(|!`tfi zExXtXqeDU%lZ{x){n7A7f4_u99L5t83pVE#yx?C$m7USZjUkb3kzd(mk`*m@!CI6V zjci5^`5#<|!P$Zdv;4JVH-8F>w^*fE*?sOwd%J3LpUCFM&|zkV?n^pewd~gQEq9tO;q+@X^GvgUz@9+3Rh(8;P%JQf3>Ij1cq1WH<&B{bnESBMW5MR;B<-T3@TP0E-c72>1+Jf%DzvjmX zI=A4E|G|xnL+EfUrOw3Lao^hL`_VTs6pn}%Y(kN{Fo*G~OhGhZ;Eh%t9x}LU32IdA zCex}qGGu51XGoBV4_n5_Xm}G+hV=O#$Ury4NJkE%-$$otjm*l8Y(Z>CtvC}iUtZqn zc&6%gqHod{=Nrs=$Tpi0b*>c@9M0{$`~$mrTA?k?jm&Cqeza;+bZ@j^OY_Sr>vc=9 zOXU-ki~3TciW7Q`mL}0W7Vg*D{bxW)ohj0Vc8i8jSofeIMY%Vee z`GRh2Of-D5az^yM@@2BC@S!cR=;@@bZHcTqK1Sa|qqw&uZ0s;Q3TwOArVW;wb{b zL=FR*6*&ffzIYHS$lJ&0P$ruQQi8G~=}HKiW_I=W+r8)(LF-$Dv z5!GkaCTu{VD%mx~+DzAVpDpi*scFsbX&xT)q}m}P_Tk472U7m{otzJkK%Sr;oke#X+MgRbR5>-eOV1E|5Gn&H zDC=MPSFJ=a{(kS=vmG_ZUkDL?uYVPHiO3OL$W(Efrueqz82O1kK1O%thMW8kK160c zMlp3M7?io_aF%e?%vE{pU$d93Gkmo9IM5+q`1`%*UwI=^ihAfTZ1neQ^4IhP*^(|D zKJ1$Laao;Krg_@iNH1fqCjEANkX4M(no78Z^op65&*Rz?-IarHr7|o1S=q=(E7a77 zGrEtWp}oh4Ipx=ua3w!OyYo2=?nI5m!VG#W(-KHW9G8}6s8ETT+0FHe-7bi<;e)whjKnNo_E{mU;O#|YI-0wRdEj5OfeoqZ zNOM;>D27D~;D|mUA2UNO-TW%@SF7q!Zq*V0 zgY%I_yCTKwZ{eg{SDbhaQGh_w(xs#3JYwCistNke7qHdJPW^2wf)T$KDV6@&dWijT z%=f63iVla@JyI{ycYBOvG zqa>nrJM$9Y`0A{rnCOqUo$@2RO6`HhMPFS7~Q$qYgZyhl1Cn^CG+rWjY{j- zLTk%vG<7UZ9N(%c%%W#NCRNyOS#{S#IK zv1HU3Y5+sS)rbl1c6LY03Zsoy_;F_O9xL>u>l2K4m`H?BY<>L?<|8PpU;`$f^o5q0 z--wYPj}_k7XrflaFm%YQ2^}_b6}!mZc>j&5DLxawStTBYaaj4fg7PPe27ldbcxj!#XyP&EXtZGMkk0-X^=zVh zo9paRGPmkA|C-O4pOB~v4uS0x`@ST*Kr()p`?I*55ZdgY_^H3&9{;NDaH&?Qcl#&4 zu7>oE^c&h}g*RYY;yQ_vLN^AXJiOQPUZ*H%~Ye6+iz+cO4 zXVssm!Mau5^4HD5=-2!M{PXufR&2;QU=?g+Wo>dX^Rn>6n%i3xgC_n`vhA^5IS_a` z_VwBo#pcPgNRofzpZxt!`S07n_d-}V`Bz<~@|(-PSV!yPf?NSWuLPJ%vETy##CPzz zi^B8=s0OHp5VO=3zg$k9QnN(Y4VRTL5NxZX3C-6dtu5;j7)im#F7q&FOkRo$EZwGi zaxkjFB)$2RO5G@I<@oFF00S((`};L7x)(EVJ8sRTFkg#{pW)#OOmsC1|9yXC?rgz7 zE22fWqZHkSsL`fswpu~SYTawrzWD`RAGKDoZ)|=C6q3?FK^*^3&zl#q`Z9sj5PTPx z7Wy>Ze30YU1(jQv{QlhMctEDGIa3{6CzTg^gJpSus(V*9csYCkG`GB*Q2%WC33D-fy$-3_ua>i#tktTQ$L-$RI7G|p zSMC@7g7>lBY*n9vA;hZ`6pGrg7zDazcbT4uRM~r-=*l1b32Y#3ANONK#(m#Y&_ef9b2a82t+mRQ&5;kF4wm#OvXlKBA>g|ZGd@n{gbqP)%{&n46(;S z!EXH{w5wZ-|4_mhg=igH2@QeRdhZJQ8AaO^r5nMsOtvmVwC({|9IJ*)Yb)KvV#nw{ zc9QQk&pysDrmAqk3CqBrAQq|09XD#DTTk(Q>oM3wx1Yv)W8D_~N9Yua@D^P^k^f_3 z_Ib$n8u_DZ&JK?3v{Y2U--Aix@gW7qm65(Rw1t?Gx$m^u^n1Fn(1Tj0uCzY+gyw$l{B zPBm9%Q2e-rKN$n+G^|if#nST5k%)61mpt;$U>Z{M zMK0zKs>Z~N0iO&Qi%j14F=})TV{v?tO`e099^Asl96MlI2uaTVEvA*Nk<;4_&M0Rz_tU~ zRyf(7KjclA=PhG9?jH5wo<-%o;0e)~sB!Mx{m0)U|4MS=r{AwPyEn-M3Z#U(a*S=gSwQ z%YL=3{@=&r#p~S9`+d&)oX_PPKF2iuRTbEyCo8$Cg08VHtP^`K-$D1Zh_6`1lHc{K zP0VI(T__0fkhHp0(Sr|sd|++2;S_gYou$I8Lr->g`5 zpWGA6Pq1N{8pKtO^TtbEAi_Ju#Jc{pO;>%2Y%6+g*clR)Cx7v7e%2$N?iwu8w zPo25;RJyd1sv8zQF+%nekRY|Tf(MkIBK;EoeA5D3Sp~eJVwb6fD?O$E=-(`Tj?$m8 zgEDH=PG0=E#=WOvyFv)qQ_@dY7&&L{EHTqCTskt-76|; z6+FZA30)Vg$dLch*J4)eC^ETU*WXGb_@f7#o$~35ia`ocS8=I${q}d&Ro7F$?J&I^ zTygzYyrVy>ybs5U$ljF|Tq^WNgLSMOYvksNReM=R+8HKB!^{YAhN&g~8jet_ydE{H zDo;|Q+uAjt)X=s!?No#vjVhDN28mh4uEg?>fwpMWIJIp4TCVzrWxz?KbBrV6=JUJ?N zVpFA$OR9Q^HaW@=O-pe5`g&KD*Q-`9AhHe*ypNWTKhMy>`%oeN97A80KSx5Pd@A$F z`qXyYz#X;-Ln}<)Gj{Ws`$halo^sEwyq+Gdin}*-Lsv#KRo+K4X)4on<94wesXzc- z5Gswsc7FU%cb@U7DXR2|Bc{2_O#?@k@1S9|Kj=DUw(H4yhPmg^i?J$GW#qM$RS4JX zneJ6YSMH#9A3mVkRd3{3p>=xmR_SS`Ph%+N?^ULw?PNtZTxS?FjIa8W9%9PPl#~#^ zdYY_}?Tv4pTxsU2VU<-|sZ4JIBV+btM90XIcjpo+Mv;&s)8t9-|Hxpdk3l^)%Wn8~NysG@G?QqVHK;`M)^-YR+OzqoT| zrq!;;-}uqTOkLZQhVH9(my)EwZ*rG%k)FKj-KjkB#^_H>bKJLHMa1`fKYqysnZTD+ zlkyF#VOLp$YTlIabL0?u11Ldn`Ci2#sna&K&OqKW1QVr%J z(wn)+WHc9|`g0MjS8m!^Mu|srk$Go+y~$zbqWIM>%YYl1k4RE^ALg!VmoX*PpN$?b zeff>smGw)^DpeWdyZ!lS12)^Y>fdSWVdR7OorfbdB7PU&ZFl_Gr{c%$iXZ=I1B1Ko zjmthX?+oqp<2dba|C`w)ZC-;Tp%z!PSdqYm-MjFEU+@YzX2p;sUF!*P&uVF}KdQas zf4*pqCWa_(aI602-{4|0n~1zARfAflT4DL(%r(}YmMBv1kgLkCRi3J~Q{+{u%88BS znN&_FJ-*_yL{&Aejjq?3tyNCudJTYc^ryu+%gw8y7T0H~I*H=$v$-dm$W>S39IHaA z%4hKRyg=33xsB8`(W~KJ^x1>f{*zhtq3|+WO7bxZS7|AStJWH^D-nA|aR&*-ma7C; zdyd+lowFA_qkJudam!VT7A&qqS1W?4zseNQu#LC`Owwi@MpLG$Hr8Hy%HgyXLv)l_ zYrRuian2?!Fu&ec#hHFd(91^xy7&Qln_~i6`T=@hAGbogDKcBHh|t3Eo*}7vH8S|B ze_WF<1xD)i`bsHoLXq%iD>X#bYsr~y+$#jhpIOW1MAldI)}U(bWi({vX#SSdmZW}F z5=T_6y~=pay^VtD1KNMXt4Eu|M0$`L=8H4+hg2JtO6xydg3j2pV)vEPDpbaqww^-@l;ZK~pSV3c+9r`lw=d4a=nYtC;fhw!E%lE=@1SGMMU z#_xz8XXpc`IG4w$R315_k1tyVMwU zeZt5#<+VvH8tr;l1O1$s73nb=Cvg(#_3QrXdMM6y$W;Vr>14G2LE$*ofb|~>ubLVc z558&_BhS2eyXwj|bJl5@rGp$>f29dy^>prh#>J?M`t-SV@EbXJGh_CorM_@$@!&T` z$m{mqOJ*9?3T_)$+t1awxAiw8F*);~LU&1zbEaJUfO%bYGYblWn9g0y#Uvn^@yI zEw!=Z4!Y-TDSm-wzZQ|#mTuOHYiliI##g+j)_P;LX|jDP%Lq5&w{Kjm3M$97d4wrI z<7`jnHWOL8ZBJ&+O^REwFYsHv==kIxD=JFljlbtUsH*Y?qjd69@%LyW1(j9hC|ttu z_Cd{rSwH?V4V1jQYVA!*T~)q9nkz*_XzX8a=f{Z&O7Er-KksUjH^G#ub~3RVqbi5x z)5>dYQCeuP36CU2+&w?7CaakxtJ{ zz4}dl%69*k_WLt`@q63$d`N7+1rk;qj=x8Hq5MuaZ_jl7@SE~l6(Efo>HNB$4;AXS z1%?;uc4@E8Z{@9|&k^>^?>~}R6EyvqWvt*dg}?EU9&_Ay}pL7mcGO*Je-60rona z&V@Kxw#y})DJ!LRMdZW!PoLKD6~#!Mr&S{L788uTdXLojIgcY0Z`O(%Ip8%euW z*TcUAzgf9!)S*{=!*UZ^>g@K$`&_U_>l^yGOY2t?M;Fnda z_|@M~#_Z!g@6ATaa!p^aP1D+V-Ye?!hV`0{I=J@t`!@AN&tr-{Dy`&_tw!oO*mRjM zv)56dUv1288tJd>PM-H#^G3>6`!%$Kw4ORUJSIFXt=?RRuhgYIx0nAdwQqP%DIZAq zKc7&_mks#+AWtZbRriIRO&YwQR+@y)CJkP+55@e`6zdKUsefE)q|Pf-uJEtCMK(=S zP;~1ioeqgZ$CWl||1S#EH@P{$bViBSq{9OyK;L#REhx|z_M4nY22Qi#;JhXst*`F5 z(k6+v1btpHvI1HC?`-(_JFQUuCXp1|bf*3!Ms?UBI}Dv08g+uL(Tmml1uyDEzkYMb zK~zUux;K+mO`QEhvA^rKT8*0X6x`HP}*)@yz=$Av~+ zU|Z5N$Av~+$p6^W>^d$q>LM#X$Av~+Y~AL#(5T7Qljt888kK7s$Q>6NHN|?ng^ml2 znr1^%Y)j->9a3#e7aBFw>Xu>82IaWWs99EoddG!E71_YB<3gh@ zu|e**(5Tt_Oz~rFtIxHOIkwg3S>Ghv>hrBH*S30z^@SZ58g;1^isM4hP*c}GF4R_J z276SQP3Y;I!UZK>)Kyjljtjk6!Zf2tq84PRh~{+G-xYRDv>XXu(~au4zR^kl(8a}^ zU>ALo6@z)kp0yX<)rP3U>P}*eKA9X07kzoqd^;~X*|xub5@U2vo2~97#%MPc)Sbi_ z-OJ{we-dMKZyOqZ5@U2Nond8>b#oG9bf)!k5@Ymmzggyb(OK3V zXHH^_cH`JTi80y@Wlmx|qNWV5I{Z78309eUCox8!$H3!SU_Ozj9`K^Goe;6})UVN_ ztzPv`VvHVR133ZdarP^fzSt%Tox~VD*#?B4#2B4x!xE*z+tQ#J#v6SW=G>I8Z>2;} zyF*V3){gUzvg3T;j_aMo7+qk4If*fPI{E9L#28&<8$0YI#^_77nPlN7F-Fgc(A*c% zrHwf}k#88<(K6qQEjGk}9If?Nei4cFcEV@bL zRF&V128b?wKmpMSF@4+X0U`J8LKgF+=ZPAWW(Lat2;h1rjP5;&^b_i zBFY}07}NJL$x!b|MElXwn8uG!jA{J%#F+lNkVxF-)U-+tGd1ah*O6I%=q-NeV4Lb* z-_MB^ljUh~kyKqC*R;Gq4?8jQOQ&i~=#-JAzV6csFDYGMPSI>yL1A2e?BOLQsn_)C zg$mVyDWOwBY#CnDtljpKV&_(}>_mZo(vmrR-NHLawAV3*}#;Zt-{P}5Z| zyoJ{cX`8ODLGaI+b|PYvs&yA{IxO}iU+A#o3u90AhhEt6g|Xdi;8DjH#wJr*qsJG< zcDH%z9bXumVgrvlzA*Mw8b&e-vUW!SdUm8|}ug|Wl^ zBSVWD99kHgWn+#$v@mvr?Y_niEsPy$=0zlK2AQ< zaiNhYsY7QH#*QZSR~%XxJH{rciHNL~b{K>0ez-C1PC5px%F({;7Y`TwE)g-^Cq$(p+3?o51yB z{gdY6j`byK{G_?K<3iFQM%?iW)leET#^ku`lPwIlWei|PnwH!&peHtG#7WWE$d59nv3gZi#+X)b0OAv|E%ljdS(+D33E z&Be^J-q1;NF-0~Y?4-FEH<9=!&BeI6!<{r2GsotrchX$U+}5UAY{{K87c=iVbK6!O ze$rgb{A8sIHaKZ6ro<(!f6`n`=>VHJbPs7ynv1#AC2x4rT+EL~+6;O(#&H7nptzU? z7ueA7ljdSBE4G2*C(XrNaj6MxaME1NLM|KrNpmranDV58IcY9tF&)&%NpmqvXeN8o z9Og~?*b9!=JV|a~{G2q$!$ouM!BNB+(Nt z$TMT|bT0cg$LWDJ3VzXmA<{|DhSYl@k-TUrtkAkn4h1Y$9dcH zrPCvU083KSXr6H^w1Cl$*!e_oaqpt6Cyqs;M@&&ewO0uRp|mAHD$DSzMUpdnewz(9xw1456T9f2E2j0kY1*EX3}U|h#`R=^GsXnwL(Yo}xPIz$jY3}1oH4~$5b z??(9&&6Pxl2u7GYnbMec?nWojF(OrI9w3c9^<35TQ;3eK>u|0Y=xj1{$ngSQoJ-Cm z>zpVPbAfVpHO}@W%G51_JCyw@vwew@Tkr8&l#w^&f57;a(MHEhGew8|m*ZD+onrKR z5TDL|4|F%)rn;wTucITK_g1`Pyg-VnH&cDnKHUqPYJAt=8{!3e7~fs^GQ2=f<9i$5 zk7V!0cbeX*v|r%+CgZ!z_uVX?2Ifg>n0O4LNhGZnkDBqczqQ$U`IpSmvG4XZK;Vmr z01K7Fbc+@k_mq++st^Aef!PMK6FDr#3;fG8n%X*%cP4opI2`ya!n{i4c)9&$H2HL?X5t~ zg9sEMizu2i-3oO~5F;6+0z1D=b@9d@QJO$)Elh3G71>_3S>Hx{KboT>y8|sv+Itkx zQDe;Ol&7ZeXR-vwXq1@|so6v=@lzc~7p0ZVB)K=3!JOpI4%cytCPEgxF@OapnRdC! zx+%g7+-yc%l8(!s#@V6j&W#D(N8UerASL2ZdSJNqbS}7L&AV2b1sTHlIFH z9oTGA)37Tw zK4RS6@>OsL-HeX+0#RmUb+6Q{Gr1WnYGgNV1RY_YxHCg7`IJx zB*W%R-%1l@r8>9U3!LSQGS1rQVBba)r<+4~CWkB|Er?}Al(tsZX*v@=6p`*C+F;g0 zjg9WakfpEn9mHpwCDRoD0Rg-R3Jf!OqjdE?g@M#x7wmyTV05rj>)pw}R9NyR{;cQE zYW?ZHSbri)(~?WY9aGg1DUZr^>Juh7tH<-=o+>Zppd51kNX7k0Zz@hx3#7cGupa-= zpUadYwWaLrBNrXm7U)$h|0YEw=gEx>{T zkY|DxD4DhfnHwlgL=1QxzcfXcu{A+63$PQV$TZ5RPHGf0S*6#R_JB;B%Dm)Ccm&bQC=lfUSa|H37IF_hf8oQ`Gzh@;BQJF)!9 zm*@iQ1>Oh-cq772n#;8VCNS=$&giDP{uX>zR-ubs;&d-?$jGltu}tGNV;X_+i75Sg zkPOTiwkO{RnwLSPW}cJ1$}u6jd-=NwxlkdgbXB(QyK{xWhrwQR<>wH!Ueo1x zN)Dx=U90u1uvG|r9PCvse;bX-UO$#&lpI{qSROb{O9OM}NxIL2W+G<~5&MJ!EciyET5H4D^Nd zJ%>*>BG&gIKJ|?CogjO)UDGTQ5p>RW|79vG5N8TH6LYq=G0ja~v>Eqec8;;Hj%Lr9 zr(weC8 zP0Ag{Op{pRQ8C;%b|}f8uZkbBbAtbvQER=X2$S(qQ-#;XNm8VTtD^k*YNned%pVX& z72jm#P@T>-SAjR%D(5QHI!%qT&!3t)y2{Hv*zL9g?~GFQ0KMkv@LMLGK)bH$uLbhr z8yFdp7_WdqGrWisSxOvK;6-#K#yeJ5l8D3)C5y8FE32L_BLi%K>#R$CVBG87)aN>y zXX+)JFv#w66;# z)128RCeCmV8F?-wNtd+Qm*>xu4EfHmx^*@W3k6Q36h=&;@f^gmWM|eFEM2ph5o3K# zH9=x^e%!jn{c6+zubj-#(M+|_SaGm){o+pZ)EQSg@5aTQ<|=lP^H$5N*u~DfX>lhb zuTtm(MjBDU(#iI)_-#t6tzvQ&fzm zwNz~S4|=57F9fzkCcj0-mO$kDM{1*T-m*JF(SY*A3k6gd=AL(FdDZW|~pm^?2(uXI|;j5+G- z+Qlw+2hZ7~P4wJL#ZNcb3)Dm`9UDy$uusqnvqss*J`w#wfLZ zXX*AYe|9PR2;GBUb|A1{B@d7>XEXZ_FgJ+V%wNY!8?zI}JBu4Zm*MO{Af~&`Fw$h0 zri=O6xJW;WR|!f#W451uSRl~frOyndALgeYZqg4nizAb{KegF3rA-L1uEq}C(|giM zGkfTU#K<5CC-YihJcV$R)@JIA*;$t>0I9DfKy5vqlJCVcOUS-O15A`&Rz!XMid#m7#ar;Dk77;#{dX%utkcQLy6D9g+AWGOS9L;K?5p;qO32?S!|TWQSUS5xo+tby-FA8X_9=KE!6w6dM2sM!cRNX(Ytp;oUnFk2 z;zGs$k&qinZFeqUSmvGo>DG^38GnNL8yz0E#gFqt>)w)^LjnVFdcUoK#-{SXxFd2g zZ8tNoc6i=l-fm`Ij4>th_!bx7?nI9~YP>k}D8Lhs9Y=BIMNWi$;%RO?yCgR=qV=7p zTVC@%)_ND<<$bL6{#;&Oukrrt7?ZnaaWBuy=&hHJk}UMfyPK(&1Bu&DH81H;F*j)Y z70~<7E`uJCi%O>GO|QLomOCOu%HE&B}HVJa3nn^IoPhfkgiR+~_{|(lB zuX&$DrD+n(eMnhYFr4ORiSg33eQI9*oXK{RW8s`4-o|x0-=t5x&!u1cmFXv&r%7Id zb}l#hIQGqm_B%h{5wFv*QRkgErk9py=3J6DWb%k}$4^$k+2gXkz^@}7GTF+gjtM40 zO>MO3=yfuW>t>OuRQB`B;QKbIEZ6MB=%%DYy^P6|hYlM$XSOcYvrEp`KH1sRhZaql zKYvWVcH--F=zQ-4rPC`$FVG@zQcSC6!I<_jEdnhA2~nyo$!pf^ECp$rwN6d1@d{Iu zK_fITM;+${V+J%EXgtxa0?nG?2`DC}c_^lTtac5w3Iva-i;Y$6F*YBu+G^l?wHB+S zF?C6s2LdBnQQ|S3yb-N>s&?ImQFnr0w-#l&WngRg;tB>Qc3HshW&vMOp1#(azhU z&a3659#UOe)XRUO^3zr>L&s);aVjP;tW-(gsje85=^U0v-Y#|JCYs*SfuOb`8uBFN zbrtBXFQ4N)xh}i@;i*}G<~rqsKrhpJIn5?EAt1Sl*GtqLqRy1Q#(ye=zlU*1)Sk^` zT`f%^so{m_Qe^TfNpG7(*N*Tu4DYSJbt;T#WtHehOCZT<;c;~he|lHVA^q!=qxH{l zNt)Rd{C`Tq-L^CFAIlX8eEd-?16rNv1$y-8 zIb-&;BE8k>8a<5S^0f>_Y6hqKWx07rSs>70%r8-f0}Oj%s)-3p!s?o zpFh7xp`4yMn^R8B%+uz~E|@Xh>>eOe5~?8UV3BN^oDu^k`v&CG&qQcHjwaXHQ;KZZ zRISx&;lWivttP44En_{QbKtF)6$njc)}#5zw9e^b-BNnTiMcm8R;>F7 z*}UV${apA!G3m~7{%pr%#Q}v+aPb#9p6+<2n0kuDEyZQdzsB)T#N^)~ru>^7-|v_^ z4DvrLCjUO?Kj`>1G5OyVlmA`EQEE~AO~vFtMoj)h=T8*}Z;2o)&$=WTDkcjTIC!Sx zGRM_on&j8wR^si>&jHo?C#;CQ;x=L)j_|)IZYO?IO!*%nJAv6vt`e z3G!!&k?(9V@?79}lDMt>7mJ&V^Tgzz?!woINx#AQA94Jw3x81@yo8bu%attFo=Gn# zb(=(dB3CD|ZV!xXF=EPYC8o@5@iF4_#iX0$!e@ztMU=2eu0G;wF*$D|Moroz;+Jv_ z5*{41AY zhnSjb#gzCPF*WebZ>->1F_JwmW`O-sj1Dik@Yfu_>-ZBf<)t>U+)qsYf#MUzXNi$C zT}+P*6So(SaQ<_|!3&UdtX!vy$BEHtl9-xv#k6yt^A|dQk>g?)UgG=<9A7C$vL#}M z)YZgB)!4$?T+tu{E#>}2g#n23;W~Wo5=Bn_!Kc0ApA|lNEjog#uj2Mp_4dR zObKanbrla4BMbj@jc&umwDQ?va!wFa;)TwiC#Lmgi93id6_f7@7r(;A|3rMM!mGty z#P^DWbE$csTqlX&5mPf8Xz2HVHZcU>T11irIp>R85j2~SwsIkEr%=dAE+jb=a;jXW zF$KTu4%vz$NO#gB5~)11H9@q94?UMj{g%UpQ57}b}FX|gpge65)B zf8zW%y7+1_0vP?J>~o_l0uIpnrm^H8S*o^DE)|-Qk!bk8vik3 z{H?@Dah&tFcm5Ndzl)fRM0sDtuR5^E@-S6 zfi4tN@x@}Ae5#n{DsbU5UHEJTKc|uI* z|H1iRaD2e=K`~9h#swrhEJo4~#N1r`Q;e~EE=JNXTzo*!m-vHX(zkK`c4C?;)rAjm z;b)1Fhy7aAGtv1ciIH!rm@dwD;nT&mz#JEUg$rNg{1wjsQ!(kbiuErR5x*8Qp+D{7 zKXLI1dOirwr-pWNbrL6rLOQ#UG;t5bWQvisKup`r76&gR?`3ig5LbxNdZpuPF)(q>_mbn6#kA_HV#+_{{BJpbljgSkXfgTY#Np&D8aix={YJE%>?#-7F_%)`(H=F)?+&D5mUJUHrSw z|B*O29)Uk~A)kwpCUA^xrYJEp+=*gJ=pv?uzRo|u`Og%SFVlsOapB{|NRsdTh0cGO z^DlJ%rOy8oG4-&kh|s=3uot2u#}S7 zr^J2N5tkw&!IsoSOvy3M-^}@sasJlM-_>zX7tWri;KN3KHZ?I`Z*xiR6r<{0Vhrsb zF^0!ylL_D9c(+)4*CY0dgX0kL4Y?5JZSh&+4?-~?%0~yz_SvGh25PQ|BnLHN5lWBIS57B}^0}mBU*f{q212@07r(&yuXORN#aupF z@g)DvVkCZ0%QFAu`w?(=_;ImxftE5#N@lpagCV#kBK{q_ld1J z9d;=`a~z>pQ{-$Srlc6>Kfy6ug@PBOTdrKEi)V>Rd4)?+K?>78t6j)i$G3}5Q_4F? zVamA6g=`Il)VPoxVoH5RjN}K!wA5e4wAA07KS3)_!2;xID;JWdiD{E*VrnZQMF}a` z!ep;ITjlDZkiBARd0I?f7QBLaqNr(Q z`2)n1&juzQ*QSc8XS(B=j*A_aJ6<8C{#9aH;2P(zcJcQ+e#!A?juW)ZLixvu(f4@g zXRA2=u43frEoPQW6LU*DN=$v{iD}_6Vn%b03%|&P&l2;HSuCc-=ZooqGUvZjjNW&N zkz=dazMi;WE-oqCUCd*SpK|>iBIjlE3Htk!@|s(PF~moc~0}om_ZV=TCDy zQH;$@cK%t;U*i0$#I(S#T=?(AL2bv@sFQ1`_zf|0B0E-sdN-#TU9K_WPsGUbg&3_9 zv;oCFUnk0i)_ujqEOWfpG22xlBZ436^D#{#*tZfH2rkzvLXARskoQ1%ibFQVN|WMs zc_{N8F@1ViOxu6%{H?UV#m)+;axv4gF`5+YehJ=YUJ0-X<~;@7TNm_p4-iuqTXTXpFCfcQIpIPvy}Lln^Vde_zeP-CcRPMkj1bQ{ z|9&wFXLYu(|8m4um|1c$!<2|=f-*5VSBkO6wPJ+bAhs_w?vSgWLY@{Q=8IzL{)dmy2uYz);A!E`$v(HqC`D{Y(S2-c( zHO{kgov)C;5t5E{hvb?pexDF?m-LZbjOyWCttMwX9wkQ84bFeN^FQePpE~}+aqwiD zK2}T{pXmHu#PrfBF1)AnpDxBc7difgi+@r~yRpTF!T6Mz7Cs_Ip0=l0|A}JiIm!8Z zJ02{i4=)l^&Qvk=6pE3f)bSN!GuXwHe~;r|xp=ns&~NXG>5Ep$HeENzsbb3OE4Fif zu3V=omWRgP5A%cl=K=l16p694E$}n~Rx7dOQDFVsnQj zrbPHmzfU|%%myer zr%+6JYsIK=m-F8%Cg1&HI$^u>KjPw_aQvc}az7Dc44;XSBcg}R7w`C3G4-X0sgGS* z@L(6uW-N?>T~;*xtuFq4#}A8sBa#H1CF;)IujOw3=Df*vcREq6s{hh_A zbgCGU*?@J6I9*KspnGcGveSQrmO!XC!&5LCTUb3dnN87Cj4A6Rg4!?#pTYw%*Ed! zrmEkIsp2Iu<^09Pf9Cv0oWDt58y_R4d~J>~=}#78rDup~;VlQn{Mg>`feVA#YaqoSwi{3a z%$5TMLwt;YV7~-Dvz%(fO8l@i`Ns$WFB{_11Im&U9({?49s{}Pu}4Rb4vVIZ&2N#i zyd|i_5_njUipH?hAlEus?oSsK>SwxMF$619t{?UzWnQgth2_EgBfgYuAtGs5|K6b3 z&4TpVDf+}Z*>}MI$0@W|C{IXCb{4R!K(P?tE>K0I{K|=DiC;28e{F(uJmf{0Oso@s zVVvVxDsC<)0qca@n;Iv?!j>usFSLotGn$0_*KWWY9UjYWgn*Y1If=6T=;KuPYetNj z7ppRsV*}pIt}26NO*tu&HAp!>6|p8Ir=Pu*vT7Hcf@VN$F9>)A5NqrTWeJ^Sayg-` z#yK4|(J$alXF+{( zT4~BJM3?hTp@nt2%wma_W!QjMh%P4?1q%JDPEh%*s!M^fFe~TkOjf6_F-7IGbjxC^ zLRpJs`A|+jf1L8Og+ey>p=h0CR8fU6vdUeASjc1CVw#aOurrt2P2v? z`jRmQx|n)L(-D_hCsb*i6CmpxjbK0n1>&2m8u@IV7;mH*T_>1vMwphKutj7Ia5TaI zl>qHA&I!<)Hk373D`99XVk+!KQSU%ItkcM0YR$)L=wl_Io9SaY>03HBtW&W)E66M? z$JR5;Z;5vl%SH|j#cd)sLddx=Bz!@k^04f!&f6`6CE;4R<&=n$>QL_apWEk@o^I6)?fR(P0@cAG^7Fw>?f!m zh}4WOmYe6=U_TS9;kTQh(7nkE3Sx0vnf+AnDFrLUx^l1}%;IiXENjgy@`jD4caG7~ zAVS!sW|va2Y^t7PRno>5Oiu8;1wvSV=Bg-GfiB)-k6IP=}l?(L=OU>t5g~E$L5LGkQmjkySkN!Q5&azk9$#z*| zwo2yvnZsv|Q0$muRY3|FnqP8kyk5N6nkV^T|5OgvnPnDGXX6|*S#+0mviQrwugV#& zyudlnGtST;Fss!jVF6ASey2!_qqG3pE}ELUrC{Z^1+L8Mf!)_w&nBU6IJV0D*u-7tw*__eY5#Im|8by%Eb zu~p8dD$Z6O5}AeSXH13ptW2}!tb~;0vint&h+r3M>nWg~btbd`y4@zAx{s{W&(1RM zP^(Q0JXKIpel)ARtn7x3dKP5&nxO1=MIT$|p;nqa)E;4T0SQ^PRYQ#;CEuRF?Uzmb zQ-XTJM4Q|bSd}zisi^A+5csts+XE3NtZMBSC`CdIT;uq=%w)&AD$7tX3KE4X1Z9Sgjtn^fcd zRBPqkXo9kTrp2Xa1T`A#O6Ic%b&WPb3wkW(N&N)HwiLoz;-D5CS(20{ZIrN!AZK@_ zA8hiBK2NmBIxp0^8LMAPz|t0LS#tUUQ4&jwCSlPZ{DX)J!e#*$_bwOcV8xzk5{8iKD$VAQ zOHkcdf-zwUHa3=^AS}W9#u7{qOR%mkLATBtp(h#1wq3OdSLVq`6l&u%C190IqAy*t z2-mHG6140h+Z5z{QrUpglr350`(%AM|6(IPyJ``OFe^>zV}31q);P20B&!p7vq%nu2o^ehpE-MrIl1xB_4mKXckSk@2ejs^**nS`Sg6=P#VGgw$N z)YfYT`TW|$((J02Mm|3c%YH2Ng-x?z+4k1UCZC^eU^m?u3ChNT-0gy#teKrCqmh$k zG3-Z9nrGOl#u=Wy#$=yh*6B>b3FMh;o#dHq@`Ow#OspsBi6x(3E=z7@ri9U~s`0si zu-S}-IVTefOim`&lzOY{Bq_^0cUY%iB6*xlN>95GS&?KBr!k?Rj)BO@zI{CopQ&6W*s2JK8ee|x6 zwU;cDu<%|Hi52P>6Q=m~aK*PTW~Ia_zCEP)oB;jAZ;Yh-iEgqQenk1B`eEin#(eF# z{-=%knlT}vuNU*dVv4H!K=A-w!wISP`By&pN?_ghSNYy1A^wK~Jocav(BR{RdlGGM zy$|^PLYFksHvGVv`QqImO>>P!nvX`c(KJP5qn|Hpr)h*p_hl=-WmWIfKzt0Sk<1>S zqad6{FyEh`p;Lq5P2N)-P|CmL_US#j#7mP;?$i3pJymYb{44b%Ii8FFKf&A9U#x%N z^}ntXqrSBNY^+oTb39I93-|A>^XJVko~$nul;nGy8s-w!1!mL*>Z@JTW_cWt;8NLu zn-yRV$>Q75`nCusEK%T$X=*3?U&kJw?`{~zOH+OQKuIP~DP1tR-Vs_HITaQce#X_? z^`pWLqk2Gjy@!wYg5Qaui#2#=6acznXVVHh7~ZxH6bYVO@p7sa>6ja}Ifxq2KC;d1#=9*0MS zPCYQ^AwjaaCN&_8=mo_d+-X>;mRu;rJ<98)jG^`1QkVpQw!O!cBBD2jfX zrjLh~longL_|W=MfsC2PWolG~x}^2$GecJ$XFuj=zciUYV|pRq9GX@#Mc<>=r+W2~ zxv-Y^<`>P#Ba4olEY^2BJbin=WQO?`7*j^R;_~tr9A)3r=S`ViTBI{)<{zy~-VpbJ zBUeq`c$;2Ss&6FCD4Fl^X;eN$tx+|5c79Pkk?3)6e*WB2>6Y)wMr{^XnjM$sulZhA z$&5=}ndY-{Hf?Bd7=4TL=Y^}R(?pDU%UVnI(Gq<#b-q`v`HI!cM1iGF|Cbi0+dYAQ zU#b@TA8&|xCCoqk@V_Vij~7<_8wIbMc&)`h8}JVX{F}p5g8zz)f2`;tzyD)n|G`#T zc#y^L3W$yKY?}9fY#?XzIIkplL*W0|=FApn_JQ(b$v#o`h_bzzhsgQjGQt0`X_zN; z((_R5r)T3W>HQy1*lZ5=)3G6zc+#;=*8lN5&y%?SG|YZhHn6fqmOZXKg!2UM|JYW{ zb1qwe+5XGsVYUVPKmV(EY$j$8vH$ZwgU1ss+jjjQ`)zraXVWYC_&@fIvS;)UiT2r& zy`fjj%@Zg)M*UwCg*6x22%QE0$8A0v@%(2W9vRr(#J(z?G5jCt*tpm*yiAv2wj;i# ziz8ctc+Oy#6y>nH%K!0P$o4+UrY_1R4IBN~)#d-#PRISVAMb~Af6HAnH@D>Xe}u7d zjm>9lJY%yO8`3Tpvw_Y3ai4W^Uweba{hI&dK8jr;>=0r1$5;Fg4z`hp9e?WBOS9pT zj$1nJ1V_&Luq|{jpO;#V#nS(7z-WLbH} z$jue~M|K-}>d5t5JC98LO`DO2i{nRj+Zr{p?C@tJ(yn@EL|X7KBg&>fJtD1o*NCmv zH6yAg-8G_Y?=2&?zPNtG!HR1}c)OO3$UXMT5eb_v8L_X+Mvq9`kuhT5L;Xi2 zTzcw=+=HD*Bphxt!n-kkMC}VvBdP~{o^^2dJ6UBJf5|$y>FF%*kGrxCK3|hncFkQ` zX`kMbRTgzaR^rxcvdZ3CmQ_3X%B`zFN=G3xVP*t!^>WIdU#o@$A))p{=o40JMS9auG_7{3;NtJ zJnfIy3~$%!>f!C~ymI)4p0kG^x_$ESK7ldAH>73`Kd0Ln!w>!G)Zt!Qm*Iy-v>krV zd-1~$b&Vcg@cYk)Z5Z?Junl|uGR#YSX4r;v9vfCL^nqaoAKf*~%ei$}LGBI13L@7G zdvd_l!wNpUa@dB_*~1E6pFHfzv&IZ7n3*~3$&1ez_T(`=hIz$ZhP`}g+hNzVO&E5~ zxzWR3X!}Lx73<&4oYeGS=7x)&$((!jW0@~p_CV$p-R{nO`|4XWCso~$S<_=pX2H~} zGh+uY%B*;3cIKJMxtUii9Fuv)rp(Nb*PW5sdPtAV7k=6$^Mza6X1*{qA@j^jqcg9_ z`y!*@rFS#>oP98(&yCMyWIg&=#+a=SWK>*ucZOGUYsNJX-jMNe&YFxfS6-d5Va1}1 z6@fV!pU%q7IP<|V%9oi@`nxkSI+pgxIQ;uA86WR!o6&D}LPq4x(HZ}|`-`C)linNp z?y7@BkALx*p?Uv$Z0K(fJutLp_1!}czjo`;s@HB9I<|bx(6@hi_0TJxTQv0U;d6#Q zdsptzgipr|UE5~Z(71>JL+5YqF;v@0hW7iS?a;OB6NdivvFM?H`o|YT7SDWd$cs-M z91?r{vqM(*+dX8&2@ei=|IxdL1lw#Ha!>0GLw4V_X2`Y|uO8B=CS{9Ti%HtvN7XG`ukhoOaEQM%jsW? zeK!5(IlI$8J^#VF=j+NYC8ACjHjH^7P|oE>2H*Zch4|UQ^QFnty)! zYpaH(&zLhH{gGpOrVq(YN?)DRE`8xU3F)hjjY*$-&5^XxpS+j0W6aBGpIrBB+G}_0 zPP=;LgK1UW?nx_JuqiEh&W5yY5!a@zIAwX-$J-XCRkkZmdvyMkwBWtxr?uEKEbY_V z2BZxe(lc$znxwQpRkTYBv}utx_sp2I(SJNL_{K924-Q`c^5CSWpB+5#)!l=;Kl{^W(aSYAl?|S;yYu!B2KC>5e_8hS{Fi5Ke{M>}_Ti8J zc>8bi?%aOmrM27d%y@Bo>rNkS|9#Kc9l2ZE?4JKPi^w>pMTQo;o)y|e)zJ9eIEYlp^S%rxpKn8 zy$8;Exc3{2AHJ=2<-;vMzW!m|2JF-q9EGt$jxb5c74n2ap-3neN`wW%LZM7pA}ke_ z3Co3*!YX04utvB}SSS2gSTAf4HVW0kEy5<@c44z{r?5r1TiEJwuNZ6-?supWKPYS$ z9u{gHc8Yg7>=uK)4v&kU5S|kD3C{`7H^4LU6HhwQlb`Y^pL+bdsK*aO4rD_g^v)6z zg~N~52W|K7fHnrSFKtM>(!OAsKwV&s;J5G1asy{FWk!s~)38PGXR$actbe!@n% zupBXZq9gG88GY$juwJMZZgIF%47Lcq-h1W#7B=jaN#?J@a>cI~s)elrx*ilh6%tkV zAfbZ;{%%5wKsdVQ3ADo`2XrnJ==+7jD#7pPHFBdj{fyr9@$CZh-Zo*oKtJyj4t=wJ z*6ud-$u~fv(xeK-0{YVDhlLo`g|4_^zmMY-j;?8rQ^oy-EC+PY7K#M=+Sfl^clzAd znZ9N$ZxqlS(C?dttwOl|kIRp(9}p2|8jvbwn{)>^lLb`pz9`qwntyupKI*H z0{ZS3UjJ_N^%7Lp*P*r2fFvPR@bxT|dx20a$mJ%GgmNQd=(g5p6UXTLY#oE8A6t0`ajJfTRciYXLKwP&>Joj!uvP8 zZ_#tJz#Qt&DK&D}3h4U0aPZ&jS2I^IUwj#=6}MTa5%vq{ihcFKkKp037 z(gbXItbopNu7IwELb0$+SSp}1{k%qC9>K1CeSKa1G5fgU(Dl`?*VRjqykCV>#iuzG zi^~LbM&H9iYt<7YL^}RdVV>NejX=MmKRPEme}Rc*NC%jyst^K-jBf~}kIW`HK1?+8`uw9_-8cXUT*^!Kq+Za{z2?|?q% z8sd*Jha>W0_{k7)dFR&cZ?fbBMy7p62|1&CSZHdf3v#7<@mPlqx3)) zWJF$U1iPWlmN_gJV?Ta4w&k}e;n>t>0bOBqrG4*ppq+OKwB5n~jJ~F9zh8WP=o9*5 zwSW#_iLlTC+W=((;c$sS7-{e?708F~V4Z-@luLX0{p;&nqp+|s^=i?~O>)rn%H}X$%!0qcp7;+>3AR*NOop2`!9UQue6NUc5C?P{2ov-&oxr>Do zfp%OP2JE|Gf72e=y08EJa@Pt^2nW7e?@-$#14s*lFBh`mM&1+wJ>rB&p^cCrc!K}z zjvJ5$-APY6KpB+R*SXOdzmFWb0pTE5$P{jh^ z)Y#mjuxf$!^xG6a^}xQJZIzp`^px;5?d#X~-(qvUM6O)|V*pucBXrm(pciA+A5Z@L zL7UjPuDR-n)6Gx`OYk$th;^~N?p!+t*W&BoEc)6YkZH|8s3K`vi6^vM;{gjC1<#URBoabT2yuAoRL7RV3K zAJFGzj+cw6XPw};1?{j!px?hmpMR}x$bmfcRff<(h!hfqIKdOzI6vWpwHDAjN$4xk z9{9UCKkjTHD-1bu1M0~W76|CSRPgm*FE@H`6ZQ(jRa}R#P z?-uSA?iZL>b_>r5Z+`do_V3u{m!&oR8m=FD`1VSBt`pWc4xcw^3v{g!e0{Mo+8ccj zen0fBryu=;Zd@N03T47F!M7pYj34G%bj60~U-F?ZdSX-bD{Zz<_@nUZ|4vtPjjojp zTLt7rKl-gu$PseG7&qa?0{Sl%=--tBeGJG?n6E!&ZW3q*`WxM;Z?~{d_!eX9OKoz$ z%6&qhp8EybzFI&obVL48LVqF6af-OFFvuZ8OkA!oR+uE9d!B&qeml?xWx_Inz6ZYk z=)6Vn?Hk><3y%x*``iCszklhy%SM%j&H1_^Z>kU{v~h?Lg9IT_ND@dhNo#GFz<5D7Y-pup-0KBj&&_g^7P~@M z+6LRAtfz$Mg#-UvU60ZYJD`uM1^Nx$!tDo}StXz=`lBmt0mz5W4d;*lk*-ILL;3;R z!xoW!wXi^#BosR2hyh_mLWw{cbYAMP%=y=dX(P%)Zy#IbzF*iT`1bvT+_b}U!hvt! z=k;{kt}>~McK62_^9*vL*B~KF=qn^SP7|j(WQfsult4J?2_p|-c>?8N2MYykg7$!E z!*#+&VUvIy==`|Acs}s&>uU0m-ybiOd8dF)GGEc|ON3kjd0PvKLV^(E+{lg|ZG@yS zcbwcETzHC@e0>Gd!?X$c@J|vbA7l$l1@vAo__`wF|549|^HaS(WuDj~Futhoc7ZWQ zJJ8SAGHG@RPYBE<2mk%HZYaZl(*LFUVMFxmI>-K;vRQug-6qrs=nJDW_OW01p6Gm( zZuHScVYz^tAEzdnE&7oBlvn`U{=% zghC-#7$q=PK#l`(ONAn#SXk)%E5)<{{q5^rEjM-!sAH>8BkU3wXRmzsZE)1R3+<0g z$cJu&1oVMZg}y?TKv*}2vEmemG%@W!drT5YM>*(UBG6{o0CvAoK=&=eb^$$~5)OPf zdLGqp=tiBZ1Y|+ZBq32~S88KRI_&wviRv*d^2m=u$0U zN6aH@g!KYp=)FZiSLP9P{SMpuyVTXlwNLWVZ#xBa+bW;~x|9h^g@s}6m2zJv(6`u? zKZfXY+K2L9`fkS1x7D>#{TKu2w@%0t3WaQ8l8_^0Ils^7zCb{4`WU@8Ixtsl5@@sS z!d?Np{x9fn>R}wy=8S3d!Y=6#vgp z+Q2+gBVaGozh8LuyYKIBq+egvogyR&zFwo`Mn7aHo^ayP749IAr;X5BNEG~d@}ch% z0UM`(X;WX{$K`%T_@nU3e?VvEiM;~-NjuZtexG7v;q%F>-+lexcD#L6elr$nKXgME z>~y_AJFgLF>&*goOd8sOwmu*n`u^)`=Dl5#6FJ3oi-Z!@f20?UZcv53)(hA#@w5Rt z(;nodj04|4T}|KZm2BGue3kw8v2F#o2jK1XEB4Ee0!V|(Dh1dVL zIvX3q){qPNkd?k-F3A=K36lhLD-;MDCG-_Cge+mKkRy}`tA$mejTE;LS_`QHdC;A-3x(yvMq!hH zJ#QCw3+PH8zxv5^DRek76yECuQpUBlvHpUyW9s2Lc_Fc@S##Wgt&})sbPM|M+ zte2a(`-KMu(*A(-WLy}z=`(Cy^@4fVUY8~iGsiPp8fae8|lJHPd?hGNLVFsy}_oLvo;CXhjjlYvVGTS%pA)6 zfu3CFvA6IscHn;_*LS67NI%*gpyL+7zi#c4n=$pA@B`D;=*AeV7K()>0`tf^fjMNW zK;M!EduHBvUig9NSx-Oa&PhUsuvAzstQIyp&<5y>{nEG0AA1Gnj_;|y_4H$Y$QF`> zA_sIu?_6P_fZZ}@Y!m!3>i6lv@7Fjry3q&NAM;&bAyJ4F(6vNBzZ@aU0UM?bmI>>G zTZ9^+R`{OvrMbR8C%G6`$jE$NEntJ_P28dHSD$>-IhAKLbFch_n7M=TM1QOi&`;MY z6Hfde1*QL{Wq%*iHL4%ig{1;|(wEFDj5l=MCSZfiB|m^ZMMiTE!*y-DK%b#ou23SZ z5|#+)NT1#=Y!>`E<$FA5Vn1eXK}O#;H_4qRWIGgz(G@NfRtn1m+JUqHo2G5{3j4o5 z_G@&b->^6Aj=sSjnI}_(HbRz=CZI3e&0&-a8!JY4`q;lla$Qt=eILf3FN1ejGSQD) zgyjPE=wILHmjmA~d40LRDc93)sr0!{pf9mQ`WM{~{V;V5>BhCMT3}u&6X-|$%$vmh zK>N|?w@>nO|AI|2)`|tjA$l^W(3j}Se6m?!jG;IEtFik{?c{%vj{WMUZ;%%~GK4H4 zRVWnbPq0j29$63u{L8=R`e|I5_a*cTvZEimwGsL|KVi5#2(29_in|FZ-*5eVn=#i5 z>}{PuKVpjjTihmajoU5k`(fzg>*aGuzopV)m2iu|n1ktCbZ3k{_ygCEv9?e^N3Pj^ zf1>N{g8I{MlOGbB{@Wt?8H4BtgF+!&$a27)^TX27%%S@wH+DGI>EY`$N&Z1XUx7Kr z;Rn@sZ%gjI0{1N`LTjO$bE9t?7ZxW5^8ZluGj@q?%pIGBbpm6p0e&d@G?cSZ{gz9= z256Y?hvExOQ_rr|9_9wAg?c<_|o<5H9F=z~A;Cr6G9?qhz>x_th* z14*@{){%E_qExNzU^vtOSn*U#^l zuY9H)zn-){eUj4@m{{>v0QP@nz5_mT_!7tWpYCni zcdR0H@Z@A2Sg~3DyJSLh&sO;1)^+L5m%lbF-3a+>!u+3}ru1R{_vQD({0DTv z1m*r*;h%+-`!o4p4@-BWOSeejpN6G-yI=kC|0;iY`A_z<<^N3K^~#e!yuNE)x|s?O zFaL|a^~?WA{_yhuA8&6SA4QS>|Mw)5FieI_0tgX70txq(g!@nf62JouNB~6~LJkOo zBqSLQxGIg3LcBB;<563y{cY4=>+!s`R_N6 zOrHIISJk`j>gww1o{#ZE8BG7<(0lDa4B2b{9{F1dz1RLz1DlrDm5}|Od{2k$t(P+) zd+TK^e!zqAw}akW4-e*9{jK5^AZjgXW?oZ&Kju0c4|~e^#k8W!qH;*=;Ev$+7W0lhZU^PeAs@^JmE3eBZBd7dH!6582y3 z2RF0Rx0#*pvh&G+ruFb@Gx&4P<>E~=*rSh54 z1*=5(;TDFw6#69|eGTLqk30|ZogTSV;l?xzmjn4`kH6lKH+bZZkiB;I_idVd6)AVhDe4oeey^y_jZ-?xSw*!7Xj&^?O*)%@<%v_Uve+1cUXE$VT zzF)x);n2?JX5sE`7H$J%Z#i5F*_)nIAkX!r|6e_trt32NhAQJZ+}(0__onH31@aZ1 z@H^!1MzOY;|H@|m%jIu6^!q&JJy`k^#1y!D+r^LFnx^9$$liRs-_54?zHIbckKJ1! z&+?@AQpnRi^0I6jZWQ!|9{u60rr{1k_J(VpWyAfatL5wBl&;Rk4?OXo4cQ$B*sczC zX)3=B9n1Rx@d~)ldd7|$^q(XBQ<>J^Jn`I2XXD$7C%rSSOd-GLk*_(~**HP@IUPR` zH5qcgM;_YA*_heR$B6Elh9AmGgS=beDgV;Z**Hx8DUZaDO);HqpHe=^WBtD!#8nyOJLP_hAG6SwP36sjrt%3bn#vC)Hi%pqd1x~^v6=j; z-`Tj)lfEY)d()edVCy$Y{0y0AeZM9?E-n>I#7Sa;_!ycb!*vr^C7N>dPZ4{HM-UH! z_+Jz66zjz)Vo&i`c&7i|;zn_ac(&M4{0{Ns(2twMhPR9L;@Kj)vvEH$7kvc&zrlQf z{EN6!JXh=}Zov7R_J1dG&P;iR_#%Fcjq-D1zBo$!1m|zMe<&^$qax4mbe|;_if4-h z#Q|bx@gy->Ob`#@N9Abm8}S|SP4Rj0S#hIyr#Q8b4L@02i+KU<*`I56{Ey=NPWfT+ zD9+QAalSYFop^;` zr;GLfhWJIMl|L2V#JPm_Ul;EY{~)dr`D23gcY!!nJWU)ab`!gZU*KHCaG#2Q79SKh zh`$q05r?~a{NN$OUm^0x5{*5vNSq|zi*pyjp9|} zW#S64UaS;L#S6tL;@RR@ag;bn>?>xA9mTd{Nc4-ps@)wH4~qN555zacm&NDBr^H9a z`^CG&Tf}R`2645xR9q-lh{fXh;w145akMyG%oTfyUBnZ`bg`xA6Ms^___z3__=)%r z(e0NnOMYH_N_glh^xh=;zF@PEEdlfCy8f>qs8H3uGmZLBAzIwi!DW;_!EA}m-X{+@k{X&@gL%w z;>+Um;#1CBpAa7w|0w=myg^(qt`nDwQE|RlBF+%c6VDP)7l(_vVlT0ac%qmt zwiJEhPxx_YQ_td;;z#1U;v3>lahv$0_>j0!yj{Fr{GE8Ic(GV3&J$;g)5St@f|xH3 z6Z?oKi|xdg;;$Jte}~0`;y&>M@on)nafi57+$=sMZWM17uNAKp`J>(}*Ck?=ST0^9 zP8H7)$BCzkL&W}Kckv{#jhG@Pioa;y_q}*Pbmx`tOMXjyReVu=Mtod+P`p#TS==CA zA+8b^iSxx0ak^M2P7vMs>oCbVVoxzs%n)0N3F42M*M2L0E`BJ!Bfc)aBt9!XAwDer zQT)AlgLtKQskm6=x(@4mjyO{+5+{mS_c8uX5p%>W@gy--^oc)VEy(m!@k{X&@$cf_ z#9iWZ;uGS-;vdD^#OuVExJJB0tP|&pCE^V6Jn<~?baA9OQ0yaSi6@C|#1t`6{H3kU z_xIuf@e}bM;+x{j;`8ED;-ljI;$7k`;x%G}xLRB)E)*-oV)1-&l6ZzVS{yFsioL`x z;)!Cq*i!U~KVf~()Vuhl_=)%r@lEk%@p%CJq$`h&{y4VtX+xwh)hE?UMQaQT$f?m-w;xckyrHF7Y|>FXErYKZ$=3ZxGju z>%`?^ome3ji|31z#PQ;3;!tsb*hB0rwijE8N#ZY9oMXPf7Y~S^iT@Da6kisf7ylyu zS^Sgu2k|EHYVmS$xfm4}h-KnTu}GXK7Ko>agT;PgH?fm=g4jw-691cK^Zg(3Yw>gO zeeo^vRq;jfDe+P9e(^5x7V#RfL0l~^6&H#XVzGF>I7u8Yo+b_z2Z%ky&SHBpEVdAj zhSko+uf@;B55>2{SH%~_XT-=f$VQN5%Wa zyTn_>Ys3a|wYXGVC{~EY;`!nv@eFaaI8+=U_7FRZ?ZsANlK6|gFXh*LD*pk=pNa2_ zZ;7vpFN)8IkBbkA_lUah<-bmHOk5*gBG!rX#S(Fbc%FEcc)B=J94Ph?v&56cHe!mH zDE@+bZst5D9uPkh-xuE!Ulm^zpAjDw?-%b9ZxOE%8^qP(QgNYJE?y*_C!Qtdi^Iem zv8R|RW{7EGKy<_-E!D5Z{o-EnJ#n}AS8==er1*%qQM^^WR=iTYRJ>TM73Ybw#S6qj zae|mH4io!}-Nlo|c4DfSEdCa-`TarsM*KqjNPJg(L)?(E;TZ=(4LHs$%=KGNN zmH4UnPjQd%~g3RJ>4}BAzXd z5l4u5VsEjl*gJrnC0-`35bMQC zu~fW3oGhLxjuA(Qd17y|tC%6CiOJ$`394`L8}SSABk^7F4RNQqO?*;(M7&qLL%dPE zO1w;5AubZD#B%W>ajJNZI8HoO93u7?yNf4_?Zgx@QTzps-OOLa10wg`Q2)O8miVgp zqWFx+eL48^KPcWK-X>lr#>6$^C1Ra8Un~)4i06rCiKmMr#erfUF-ts2Y$K+KiDI_n zI6d&~iEmeYaU0a>hHo!?acj`&j&B!yar?x{#5W6H+&Xe_`^>o;Hc~PF=RUb@I_4g^ zJv!#Tyo2uXQ;zeqj=BHvsE)a}Fo?QHg`5wvo_Jh?{@6#y++R0P$Aw*N8p80i0cps? zm&bd-YjvE4HI_p<&c`}AMB}FrgjaJ6I3WlO%S^u~J=d#?-DAvgSLk>HuH*A{oP#i3 z6gGbVp6->t1`%!3@ph#7T=y7r#u^=O!ga%MI?h1>FN7VRNfn-W^BmvmIiBe`KErc- zndjKH8z}G@>(Q_G91rjupW`_$@f;8J9G~hrp6WSvB9TQkkvWysvx_SumDSbrn<&a_ z%gU&zh|H;}TN-H;y;4ntQb}c5ajgwpTehHjQCXxM=A@~ruBazGlWNvw+wyZQ-QeRPBb=)vk$qZIhRlqDPRaTcck%iV)ZABH7 zmDO{cNZFDaIF~IbsX>aVFLxp(Wfhf1i3~dN;;XKmT~QaA4LkEAGN-btwDyYYi;gU#$)yZHBIC|J_uR?3h^=}->6pkF=S+=2 zaaK_wa=Wyqy57`s6lonjWr7oNtD+9J%F0S3C3B1GQ023WYv-fjP-_S@ySAcq0Rj}) z*i0ic(HavnQWC9QR91&}nw2{sH!rjClbe@2Y}l~DIfI90W)9AwOI{9Lb8~Wr3>uV~ zIdIs(JOH0r!HTN#>i*THxjS$C{Pk~`t~xlSnVv*uV?N_#TA6c_<9&XvMW2R0lHvKq zGNt)MBK2iU>Lmb?$drQVQyOI+rQzNq!_)kzC3vczO24y;;3tB%I6FEArCPk8%*bP> zjh;NtxbYvu-;8ms5aR&gRIb2yWL+tmk86YZr6Lk(YU4f(%tvzYbY7Gtp# z8^yC{*Oo0h*2bM@V?Q2TjZ6ew1smRQt}PNaP!ttabEIr;V-{?5gWH|3 z;r+xj0%asJFS-DORq^afwXriM7M?pf-uu_VMg{!6)XYY}@2sUwR2gj4RAW3ZtK~pv zY9UTv1lMR zF0kIej(!`)X8U8w4gT!?Ly@(H`(tn*-vi5c`EyQj7-CR1fskge);X_(e-6Vj*Ty{?r8mj*!aM@?JF*hwa@**7F*2!*t+fYL53`*q4wj3 zFAl8ya^0T#KttQ?{S&Dh?}ry;H+%o7Mhv;)0EoMIW^#6ow^cLVR?T=*HOh9A`iZqa zaF12k|F(W(g&nux3D={DHaRvi6!Tx{R%=o2_J+^b9L#8l9zm5pMf1NlEdRCP$L}B9 zh1~O&$S!|2TiX67YFL3CWAM5B*LZlghx67P?297W&y>!H<#$}Sy`f-lcn*@8YqP^qS?DUVkII!&VhBsrQLk+K>{DwCCEna>%Wunz1 z-6zB@&!oNBT@2=5jnX?>7>E_@9k*tee`HN)**gs{#Kxo{^zeqi=l&4xY`UWpyD1YT zr|>w>#bST-gb&5Tr`hmrj}sovM_0^gcsKXxu7Z6mjRU>a zZ`|}G7VKk&S=k*hJR|-!1^fDrT#~W8f9$eM)U{hW*>s(_H?}$xU4Gs6=+1_}j;B|a z){=~6dyv~p>D2HhLZr~1Pazg|L?QmLvLD;m*Ej{mmfL#G-Tv$M53bqKcZO}dDxZma zzg&kV-S9^4QTCtMW!W(5Ch=JYFW5VBNylYhG`w)&;qnb=PiqeLj1{Gs%03?*blsjM zXC4aoekE2E=!YDyIut&?Apzma!&TeA4}Y=!P@wB=5NpXI7dm@=_*cvV))MJ zqvMA!|1SFOfqUcQ)p@q(tT}jLL&27YqRp{2A5%Ow$k0#EQ0{Yjcs? zVHf9&8O7DGYyY3%xc;2vhKW1M`@7{I-j+Ph^=*b?BoKC%!Rzqoj_6()%cK#GrYQGW zaKl*GlbsMvc#|6(#gIDAV`CU?{22W(R@W%ROJ|EKmzw(cu!+(o@5}UaBXu;Ms1>0eI>&S(H@b50c zFdHi{CCpJ1k^4y&+IR$7v*W_t?WPBMN{*i3ht;sZD-(5$)o!qQ;69|s^aqT$7dDQ! zh5m-3EwTJkj=EdJYZqX=T0imahKZX{j{6_PJQB&#po|i^1cMk$gw?O#c10i$u?>KGs!kb-XsSZG~TXvgxB7K zX#%U0rq~)$YskPRHs`@D8eX7PlZ-KKy=Ah9Hc=)^ z+BQ7D?r8YxA5{m&>*$a-xxAica%)5Deh6PZ&+Bnaz-zOsY)%NQdpUgdV@Mn$Hw^$K zN2=t0Dx*cT&L^5)-Yy*s`_IpCZdfpR&TeuMFuBkz-GLS zZZg`8|GSMMOXy_YHaZzWG2S@oAA;d6@T) zkJ77VGD=&%pydM!l{zddbMzw#%Muc=O9mzaDLz zUan>JxYxIw53gUokC(VF&xXaKK*N#!oBnh3=+kUmxLhcw(_uKV58O^BQ}Zc3x3eb_ zwEct3(f&K>49Azi+&#O-v0$BDO12)fBo{;OrbJ8Ci;#{)1tt-AEK>ux5s84b}ul^ z_=@`SGd)aSZ+M&#eSdwyrws)=8g}j~_>`v0cNKiWX`n41um7KmF~up`e?{`R;qOMj zh(&j-f95BsosB6sum_imwq`e69UaYw^Xo_n;{UmGwToVa-lGl}76T_pVr4KnJWbG%teo2^0oZeXzQoV^l#?jhTU#1a7tc3@ijXG3d9oZw9Mo?8)=Cx z=kz$9!wFC|$rjRMvinfO&iMEd4}c-0Jp!zsXtMZ5^s`v>q4m#ngv!n0#^Yr1>1C#c zgx3{;YnE?LtUn9?lfrBNY{-4dX-W#~tM~JhS25^~(}C!HMS?tvL%GS*O3DPKz4tqcmF5#6&EgG>i^}uXw?6 zoO}jEGEEGJBQ}N>t`e&?`RpI>!=Yik-!9(N?0^pDS2F}mS5EK{I(1|e&^w8rx$+#Ad~1Sd9d#JLPcKulne+@pn|x*zU;aV@qkZ825iLxI*WN~NZb`L0CfZ_8 zw4oK#juY)^@L_U+77<=|wu$u-#flY*=6QvCcrCX*#3KzYd$?I%4_?@q*FgBHt*n{9 z?<&{<@~q`IGf*{ySKzl{d?sg1JL!g0m=1g&^~tE2*y2n#46Ano^;p6!YT|%;U2Gfz ztRox3jO8fTi;P1khDav(In$eqIIviV8R^x$=gnD9erV*FPSy8_ zdm{QlvmTQQdlSOzy25Yno-Z%Pw8V}_#~ndFnGqjBzO2DHR!uFFxkPSWfb-KABM#I+ zi}1RBFs9~eQjcui2_GCVnhtMQ8f`!+GuF^8>Y-(gjp2ec3ylu@FQRs00Il7toj~pK zK*RX9N|HNt4KPMFH$4B=rw#2Ct#Lz9wt-v2^H|7uYcK2ITuhu-bc#*$<2t2XtlgTQ zPg@ZlzI$29DGnkIU$w&w3TCxA|0{P)IrAsCyqc}I?Ysbey7_wBL9Fh&>urVbfJIym z6SvyK_sjMM1wg8lXL%=#Ku+4ij|IE;3*Z)9O$ z`8=#~qOl*2`O_K-zQb$XQYU?vNT-m*7W_b6O?! zlv@sX`*GaOwdiI3%P|(2y*Bi|8(%DM9b@Zwe)Exr>;DhGZW{N(Z-?Xf?F*gxAjuCe?;r|=hZ1ivQZ2YfDGP!c&&Vi}9O>8$UpF83H!ExM= zm*-U&Zu=qlG4Zkx6|b8{?yLPbzQ_1wo|^j&R;O@CSj6vr!LlmX%~whyCmu{3FQ{5eILr)Li8 zpVL1#v*+j<>~6_CqpGBT=Im%iWohQ%LBj_1a(rf!M2Rz?s1Elb2h`53E~~028*pBA zw6>(IZa~4<==`#Qc>^jdW-l_^OZw&Z&+DH<*+jza3H&7ZlItqwRF#!xVxvbb#6YyF zi6SAXZZ7uEWO83iLP85G#QhkpKZ!_;M55rpyadmt)u^wH zRv8=fC&30fNGIT0d|PzjKgY=22500XCz+wSUSVXP6Yw)YViX&JY_9zmFxQC?hYUh= z{+XXaY?+ocH47CRj9@cUm6J5N0)Y~;j9k3LNjlHUe!3UeI7w5i9Dr>04LC_f44#k` zLWIwo^iM{*3##gCmpVyP--ET5futGpZ4_0y&7X8W6KkV!RTt1tLY5zPdf_NBLOYYW z;{$J;8wpLzwn?)dksWSoNxF!Vn^x@AN{TQ630Y~jY_`GGltn8UJ00bGdS!84os%?c z4IEQ03?;4Prd^Y{ITa;NQpu(9?3Y!QRG0E*eo`s@BxEtqb#uzgsi?$R#Yv*Ca%(m^*z@XTMitkV9_~A^X@gi2SJIlt*l;LR_i3qe-g^Xtj&xK z+GtG;wUyGQc?@6&SG|)|w-7mj{|t{6>r!uBw#vm=vMy2UvV$&*ifb#(W`m@~tC07^ ztk=BSNM#us#S+snvv$*^imkPTrHGw4Nz1Lv+jME-uwtjl#(NpIF3yBx>Y_7tKC&!I zp=f3Pb%WHZ8X_uw9+1jr8}QRD;AgmykCEJpqgD*rifz1=2}K<|Q4#Q80wMW%C|Fb` zuA@#e1283$1AaCN+qBNE#)dW2!pgU)s-82aaePP)@Cw}M+}@Jh@@1%6wr$a67DmNj zSyk!mrS)Y_i<7uvlx>h2Y`AOD(Y9=V_z5JX#mV%|rc;AGGA%k=DHN=$udXdd!)}pj zgQp?=m%%@ytSQDeyV=q5a@2c^F5DX*@Y80?%ofE57&kp&dtQqoYt0Gs+}vWSwd4=Z zj#NkLoEFop90-DiKqs41C;Tg111Brr!P;V!OQ5qGJqm@Ih;7J$93>;@>Z__T?i5!#fn4j7 z7I(27B9LeGZR2{3ucg(CoxnirkP$>bEi1uxK!OJ%doe! zvUrXY7-uz^!OCe)V1mtPb`ZyB*yEnTDhOv

MDR(U#RhbC%WQm|6}@v{gDNd;-cO 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

>nczEuuL|;&QHEP3_>kZV!Nr1nbuF zi_~C*8TFY|NDf06#iPsr3}-xrw*{EBli!4-w}R8_+{Z2 zgr5}NFT7j$G2wvlR^cY$jlw2jgD@uKd`-DHUlXf@QDK>|L>Lg_&9({uw#GGkGUj++ zk^6-3e+hZ8MgFc`v?FpqDm*Csx^SP6_a+$c6TB$mKWX{-y9a;nTvy!b8FX!u`UBg%1fI5bhRk7p8?t zVY~1a;dR2Rge!#nEP?XbdpVAGrrhTXrwGp!hJ=N}cQpU-e4Tt=75-89YvC`1_K4o` zJ|_2fh3-7}RkT8+lT6UNK{S?28@DuX2A`_*vnQaF1|@FeB^{CWJQ&d3lcfuM+YL z8oDnN&J)fQo-dptJX07F77E|dy5L`huL}Ptq_ttD^9$iKLcW_K{ZZjT;n#)xgxq2? z+$V&4ggb--!dr!#gf|PX6J8};A-qgDPdHP^eFM{*B0N(V5<0@Swca@;|>bTTf#Sl{QAt~Tlh=ibHb;Ej|;yi{CnZogkKc$^(^`A72YGfL%2oQ zE9?+%5UvqkBfLVmOt?TeTX>;xnsAbEqHu!neeBmv{)KM{Kg_HSSMT}tQF1_ z@`C`zD-)IoCkWq%C;fS2g7~`7UZilmFUtMA@R*PnB=FD6OBcjL!UMwn!iR}Lu!dhXquu@nqEEPtCUg5jix4HZL*X4dm_@eN6;W6P; z!o$Kt!UMwn!iR+q2_F#d7V<+Dp5XCRZW8`*8i%WNI0D39DgGwo4_ip53G(t|dY(;v zhBQ3$F2yB!=I08}=$S9`F-@B=QJ~?0@F(yL$k`OB(sK;NU3%uNj(>E+fX^d(J^_Zm z)-zw-{aMevpmnXDdHtlz4Ff**EQKjTPJnBJ#M*qebbd7G(rq1Cx~*6HZ0pQENAtqx z+cKG*M~A|EYr7-&=ES^9iRYZIp_2T!DC67Z7~kB7UQV3mbALCE{R-O}2N`KRWaRhR zBg5lO3SXE=q`a@CM+D1%RWjDYzC9Q=Nn(tdB-^RRBHokeF&0lc1`;rIavMK$HSeAJ zV8SFh&<(X2@&3Nsop_tfnYj7|P>&(}V5em6yy)<6?!37R7cRV{W1MX!{dxxYO{!sA_*MkMZo2Fcd#2cX_1IUle%^kMZo2 zFn&GwyoG)@>Nl3hIQB`t4<7t2M*5?EV|a{bpX9IMF`j)A@~F&{V>jfHXk+A{i5>n% z*UN7dA^s8aGM;^szmmsk?URrP$McUO$9VQh*tYq*?IYx6Jo_Xcg$KS?P`mqxy3o{t z|HFFFY_^c7*K6K%JB0yndtYW#G69m0V-GZ>wZWPZkqUSc?NK=cncfkELSL#2Ls!&9 zD)d`NE{vf<50e|mxC6dqUvFpB{AUUNVZz9uUK^C5JYIhxG?Fpqh%jEx=A7kx&V&#B zs(dNJ{WV{eyI)NErX!IFqrUBpf>vl22_wJV1=)U7i==P@tE%Ndp`UwR-2*qMUh428 zYFxJiw;imbxp95&IOF=F8V&3lLsaU}nobNGp90^}<2#4khdEY7ZQrgPJ8r=fA15ur zg)#UM-SM4kApSne_+Ey!3geS~!*YH=gWq3ae~R&6LX_i}R5@&LOOo_-g`>DfV#;kMYL$#6>74gq}LvM$G$vERS)<_l{YnxSeS=HgCDr z`!e35AIjW(AVW#TwS7pl1HvSIBQ26r|Je2o#gwb(Hr*i+BG|kh7~IR0>U@vR4IQ zE9z5Ik*_Q)dt_dMd8cP#QR?T}GY4UBV~cn2Uk6W7ll_jT1~W&XZ};c~GzVw!iZW>N z{`rol5WF7$!C(TOb}|V#T3~YOCQ@#K=>b@*dga%P86|=stGupPJp$41apPA)KZs(Y z8E!YZ0UkksqgRw8RX`NuWDHu#865m>T7`(!M+TvT9r}OQznMkmcf3pU6fwswpSefY zQdjVwzX^T5R-v%{U-m0vv20WOu6GWli?i3Qew3MmDGSfDKl;S8bB~M;55@9#z0TQ` z+Q41ASlL+DAXN6Rh-DkvcRjIsu<;=6+teS*ZY>}BK1&4po>9ij%WZz2LzjZhfk7BS zsk_Tq*ZDpuL$yB!Tf?`he9te6ck|>0y4I;}{K~Sy#@)r=ZYUXSJe)O8rGt$}2A{~5 zeio{gY0HJx5Myz~SRBU(Tb{`-f{Cl$lhL-=Hl7)5uFPHu4fcbL$BOq-`(E~AH&OE|yMnf(RQqWilY~y6FWD|t*uK+-#$%oaFKp-B`J-hz>b-N(~sAV(axQ@qD9A7AwJp0|eX z_~4F>&gnT2-*;$eq8;!txkQ|I|HbJno~1J6yO; z_-o)`EdqS$Nj623!KDz<00yT$AEdp--)=6u2>jt!FyOuG zDUNMM!9C@xKa5%8OHZ(8pl?5uE&>m-J6y0l@Y=W89JU4)?RaMU(%rCY@kPWmo{>vSfkG%?qD+` z7Vo7UJJ@6zTpl=S4DFcCGK6IjLZY+e3IJOD7d=@#*hkX~^(S^6Wj86#96z~%Ni{yh z61XaG@_kcj&oBdEc#5v(O4%(c-s5FjFn4ie@V3g6e=$uM^>6HL?Rq`R(u%e3Iwlb^f^6fP*}8u)_4afv zoGp>T!aUkxOFO!PEx@7n`c>6~Dpbg< zgi`6gf!0oNh*}OM5Pp!dx>m5=_|qRje7~1$gHdnmy=ZbE^Q}i&h_~?D;y6{$KrO%}vrNv)ogxbDTkv_x|KIW0 zi)^sYL-6_#3RsEC~zz)70pTWQHQK5b-I~m#5VgmWnnEx@k7&KEhW!n; z)Niw%H`-Dku&!Hdsi&-Kqb>Ecb+v~u3?&9k57}ac>Ovv^1Vug3$PmW?ZFjE|unC!w z#<$Z3bV9voW{&SJD}opC=0KPt)`)NG3t$l}oe(?9is^MGEV2dWAb*|n;J(bdy`eO9 zhfY|++T~bgRmeIMmQFGihv5vxmT)Fq&WbOrC~*Qk?QQ9}J*##m#CUrq_zC|ks?-X# z_ViaVod=&tMv!irob+724U;-K|OE zS!F%%vz~_QMda$KcmV1z=t-7lx+t-3>hdz~iL{%rC6VmwPsBUAlPGXCa{nw|E((_T z=lua;Lz@zvC~N<0x2V_@{d3%c(!k`eaf`|{3dcX!mP{lskxi|PIq&me8a(7*#hYxQ zHdO2-E@$wPMtJ`MmwyUH)7E9war-Z|#6Sq6XQDST(7Da=FH|}qR)FKbj5Ui2G0r#` zI{w90vPyJiroWWw!hA-^=GpNt;}ttk#penzM`7HeM3*xmPsPIpA!@RB{L5MGo{D`8 zVy7|xN;Xwb#r}ejI|BOaEa~fpWFyvF(g8!lTTRD*g{2%s?U>R<+NL%pprNvAhU-L) z$-j!<-$%ZJDFY>yxGjTsz0frrm}jZwArs1` zS8LOYn#KyX<#CiL5?%BSBSvM&e#0i}W#u?ZV_n#9)I?qUJ43AwnZBNAM@ma=N;N1X zN;@&{Q?-$%Ol(3N5o(-3os|VcaC%^_6R5XNOmx|28`0KT(Mr%W z(zX`|G&hx!Wb1c>4OB*oi50hmaudWfJSVWx(xS-0`KZexHr~Lp8EET~TafMQKpVA- z+jiVOrX45Tc8sZ|J)X-zhb0F>ZBC$*@nO;=gc8dntYk@B*d=CZWJx`*nqZ|UmbSQ6 ztR3jHLwK2?aTR5I3(CEpE9=6Fa^us{J&;PLTltzWaGPZl9p!;?AF#z(X?%KGw`%wb zq%6G(1wg%L#V?^0{N63#U&I0kWc~#Nc;J0e@VpkBEOL&AD6QMD=yjJ0m?pr|2~Kyb za}#Fk&88Cv&sS|~EeoGbPOy@kP%4fufd~F+p!a*Z;D8$=Z`Hpe-4fj-;TXePDj1o9 zGe-~y5~=R?Ou`Ay8bQVat~b@uH_+n*tAi!M+B0xm5 zrEBCcqf&o&Z>JNSZ=++rkZ63-6*mi=U@bq&aK$imiM(J0F(>k+Bgkl_Hi?D7Na);e zKw!-Lp)yxo&h%}qZCwc`bdGI7-cYI^FEK=%V%tl=3A7J%3u;d6CJ zB3ghUnu(s{c)G7Q0V-xhY&sBnCb_XI7!SKB#$6wb{oz@*;gne~^Z_)laJ40tTVm^` zR6N<;gPmOXV(Sq#9)|U7yI`pd_4akA64deD?}Sy)T`qBJ3cDO9toc4^$+it7`<(DR z%e6nB4sGz^`Ier}rzg2Ba>BK?P`2iKbwNgWX{oS1->aj0D>fQovtsa6?8Hil(qdEL zgfE?mvaw4i(%SlZ`nd)OFN_)b@j{G{Te*eVl8CpjaKe{SC{M*H4|ojpv?jUE?Cnh? z3ay)hTetaNYdWe%Fzy*n5gS=}`DkBhb#7bZ zPOPn~FYYF}iebzq5Upl}PlNS|x+|kNrjyoW8m;I`TYXE+wvNn(mt^6qtY3`lT$V4| z5+Y)CnP_vutF31pM(GTCS#M{&e{;jfoba^|7$F+Mamw2CFkGhMhJy_xOo@Z36K-Z` z6fM?OIW`b}IKXu_z@vqsRIOR~hi z;Tvs+?TJBHv#>YRi9WE70nw*z zo^LtFxH#=IO_TT>kW8{R@xt8bXa?^5#Md83oM3G@wE(Al7~sO%9pdZ)DQzN^Rm?%c zw09Il`w~M8z0HQ?y^%mPA0fA4tEbP2QXjaJ$hJM z#_~|AtGmNcv|o(cX4qq!Ay$IiJ;p6xj6uCv!iIaTXI01?sD%6MlwTd{iPOqM_%>UX zTn4g%`@NLatq-?I(A*nQY>_^6r0U3&THJU=H}A#aQ@ay6*X;zYTRP*IFcJe>`nm_4 z$W(XDfp*L`o98vnU3V}FHi9Xh=|pta6XE)6nCc#GnQFnr-&JhRNaJ1jLe6BG&1w& z%&W;64=W#x6Fw&08Nh!R0TR zK#@>~rdubtf>(+QD@x752aDASYBZ}3btJKNsV^}BYAC8*wp=mEP-;WyBu;Quxp6I| zE6%Z?Z?h9@INuPLgt`)~?Woh>HTHNhCc<1Nc&(+>i89X#Hd#tTXj2cQxb8AjL90V4 z6hblqO&_$G7QDfpwQNOAm0;29dlNb0pY6(^z5|EfOI;*BE=VYS&hJO2W%D~+zjp;H z7Y7(<&P6QCV9SdvRz!x5s55_nSaufY)XcL$7?0_6iq5iCA;11a>t-{<4+ki<0o3tP z+pVc#&$HdiHPa|^Wai9a|4F%urWi$&=R=A!8t{luQP27FIS|PnN)}CV4`krR;+yA( zy$PpCJrHNMt*OK?+o`Th>>0!4X|6Q3>*Vryo}>tM_w;9yU}U6CXP83N`bBfSzDTR( zs@!oZI)qcC-dCNYwr+8XDs7{$$s^hpUUY$FTbuJi7jlZU>0Xkf=6aD+G{f?WjrB8S z?i5v7mUX#Ym=!+O6h+#kueM_|a>wNe>{rommK_J0Fe@hp5`DNj&4oy=XfC!)Z@`(B znepPBUyEj2>MdqbX~r5(idgg%)mWc)TEMo!Dc$k0;d-X1$$Ok4ww|JeKW0Os8it06 z!3{q=7Y)h8Od;3kX>Fu%=-`$B?ptjkm>mS1o2?Ur1~)SxBrT!D9T7m%%!8>5-5+jE zHaMD2ZG*GV#wa%_z$zpzV>`jyerl3sTk4P7z01H0=$beT;^ML24VU@@!hz_u0w`!& zK_`eRrkVd^1Dhe2!QSgu}w9EbW0$iE__lObQrEWdLQYVHwGRdSewQYtaPBKHC z68!kZhPdAnvE;Iu+s<`{r{d5gG*Bma2WJl?G9`rddGJnFkf-7ZT&+o5Oh=P2r}V+Q zSxlaar=TUA&70+;q09FhJoC@Ex$EKX(8qlcGc2m_F}Rr@*ZnNq%!%usj%WTE_Xpr& zH_xZAZS^e$oqxv913#{Oi`Zy_yCy>5vvStx?DbHLJJ{O5W+*~9d|g`5@)txe#hR#K zD&KwZclM?pxJZWqx=C&Dn)aS?v`*g#2EX{20+?l5ufC6j9CRMlH)AiIH|O zr7c+NoI5(d?n0*^R=|2H$Rb8LmJ$UqE+x*v*?+-up8cN#(h7Q>!_2QFJIGOmE;yBm z#E@h=C2sj4T+`a{UqRD(J%ICW=YKo#A6_YItIpGLHjvi#cH7wtt}?0fUGX{`UKX@; zo(I7x##LrT1AC)eShQD@?#Udub20^6O~IPMn8GzuxJeZ58Vcvh9K3T9YwcRrnkRGU z&dIE(CRS8CqD&&YX4aG^^XQ$^xn3%`{xST2H~uEm3Zh-q6x_f@%hH_8MG-b?otT}> zlA@r6UPp`<7Dpqz%!@`|4w{^+-?ijkh+~!MrfSWrMqZ~nA7os(VNk4&oPth{gDV*B zQ}8J0Vj>&iG~RaWUC_-iJ3(|R-ooo6nsBKGhjTE)aQJfyzR6fl#mDjD-Gf4EBzwqj zJrB|I0ArW&>sx-AYt#BYJ>H@R>UJ|08)Is$1Fvto^xCuFWm9QW1ue6q4k`^5 z^D--@py_P95h{3@RP+zkqm|{sZGyI2-2MI zns=)hHb_=!jhk#k z+mcxQ%(3I0GpDaVJtxtg*_@a^Z%)n=7a5#6nbbgz&^>?Q0_a%NhYD>>gDZ&C>@MDX zZtLsq=a2@FIO7kyc))F6np#>43&v!JB4dSP zsjf7JWmk7+S2BTDfYuMK-i#GBKqPG}ETBw`5drK&j2jb#abvDEO778Lu{VRQ3ehV? zpCLNuO)ACb)JdiITnp+E7rok0J`*9%U ze?so(h5shxXB|w}EA#^yJ|g#2;SAt3(B}Xt?@}P;XpleEoK1&&9nhM?;ao<_rX1x~ zQF?Ne0a5tTIi=VqH#PXv{U;!$p^Y}WsrQnpdV!<|fuzq6&J>+m?n#dU*{XOYgYnji z-XZK3?gFw^>;*F1XGQ;p+(+d836SP4{s)ky@N2nWmH#OrC+jHu@zH>hBMhXxXUJU! zWI9xeKwKp{CwLk5pqVyiVGEE^x68c`cp2PZll!>*X^xEznELW4;vaw%@fEqFSR#;K z0VKalAo)}89_iNuSyUT=p3Q99{dl?o$i)RSvlGY^b^&p|T=)Qx93BLc<3nynTbS-fpa=cNSIAow3_%lXOzD0gjT3!R z^nJqb1Fab(zWt}k9~x0(%wGxrnIWzq&%fY_lWMZ{LL!u#=;$Acr%7vPJeHWJzQp=z06 zAJ-B%5+D`YxVQ&@i2n}&vO~OfvizK7`(FXP2!y}{`?!|9f;|G%GtvCk;SXsf0pCJB zlLe9O1e^){Bbn9As^znrMUI_+Gg`{#eK{%DaJae3q_&3E7oV|@6h$(yGg1zTQ*9sF z1+8SwgnJBi4ZF$BMzA&O0nHF5PZKrAZ`vmJtetBg8uMxRym_RTi1*WWUdAbF>N4Xh_#F z4g;gnyE3tVhS2O0Ap$U)onaN~?219-yJk|(m&+6L`!xPXmhkJ2LKiM}pQHA`=D;C{ zWzi_Q-OWEZ*2CSgbE7>fPHsQlgWb|7zx!k^xU7ZBuQUW3{D z5xk0!Pjz38vlr93I#y#_;_M-f_q$TIRg%kWY1)^QJ>S-MxOn_Z;~*DEI;| zKOEoF@HB5Ujc1gjXzm+Vz88^~$%lElV_(Md#mOiyhi}TfzT%sVG&Z};RZ!`0c;zoDOPFyU?Bylw$H8xA)Gdu`&;x~ZDvkjVGD2^!_a}bWV5Zwc~pN4CsNhjUiBgP{u+H@7As2#gAtTumi`?1Z1 zTQ06JxC7wY-2HJG$@L!Bc=_iRuK%ga?UReMW3G>Ir|bUzt3QXzeWX&1(}07*KV#6P zo4WakzZV`9RtbLviRs@gTq&g41Ja*Hu85ZiD};Y2boOstVx;>o_hLGtt}}*%F0%bi zdGu@HZpd>#i?9qwT`t5|z=C*G_)Q^JBl}~DR{`1){2_|>Az@mGaE4wkoE)|8vxI)3 zNBC(>%jEN*@H*i&!nwkWg{8t0;R#InjQ^tW3&PI`X9z2V{{+Dp{`bOz!UMw1!cO6U zW5f3f`8^rqKZp7xJ|#RXJS03I+%J4s_>k}c;cg*KVUr&Xg%FcMUcsmPCSkMiO5t)L zZMHGoT%kE`hI^XalY|q66NK-h-7(%x9<}uNHDVVEDzt`NCPk z3gNlJvxGcWVLXrU-!X2`{b%88!haI}M#$qEhWn}TN5UTp|55l&;a7xzEBur&E8Hdg zxG*K$ENm056E+L46kaa8RA`MfI^GN9o+>2g4wT0;djtMn5CMP117|&+GNf zgDN<4dKjzq90T#kc*gg|_}?`HYo8y^qi@T5zAx|jVBWKn(+HUV=6y8L?t({C-7WBF wdT#$a+9QAS8+SLWw-0pV(%VR9dLYx=HcT_`dhK_rajSOFjch+Cl`_Kr2XI-01poj5 diff --git a/polymer-perf/eduke32/Apple/lib/libvorbisenc.a b/polymer-perf/eduke32/Apple/lib/libvorbisenc.a deleted file mode 100644 index ec030df0aeb38b1476d78b40073e32d9a1c834ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2686248 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'i|^d<7z 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

s5crg^sM?x{6M6`rnYPe1rCVz=m}4 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%0A$Wd|eLb`g{Fan|bS8K! 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

%fy2N>=8bA5za&eqWkD@@UAhn;hjV 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 xFYB2(@`_@0rY}`OEe1{{i-|fKmVe diff --git a/polymer-perf/eduke32/Apple/lib/libvorbisfile.a b/polymer-perf/eduke32/Apple/lib/libvorbisfile.a deleted file mode 100644 index 0942ec1d70044db0916df254601bc0de736eee96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216720 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

+yR4ZS_?eOjXUgy2fVw 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 - - - - - ChangeLog for EDuke32 - - - - -

ChangeLog for EDuke32

-

1.4.0 beta 2, released July 18, 2006

- -

Core changes

-
    -
  • reworked/enhanced Polymost shading
  • -
  • cleaned up code to properly build without Polymost/OpenGL support
  • -
  • added widescreen support for Polymost
  • -
  • added support for toggling correct HUD model rendering on/off
  • -
  • removed broken support for linking OpenGL statically
  • -
  • added support for DDS textures (JF)
  • -
  • added support for dynamically loading GTK (JF)
  • -
-

Game changes

-
    -
  • new startup window (JF)
  • -
  • added support for using the mouse and a joystick simultaneously (JF)
  • -
  • fixed an issue preventing skill selection, bonus screen and episode ending animation sounds from playing
  • -
  • fixed a problem where the player was unable to exit some pools of water in some maps
  • -
  • made further adjustments to the weapon properties in order to more closely emulate Duke 1.5
  • -
  • fixed an issue where you could disable map exits in multiplayer, have all players quit, start a single player game and then have exits continue to kill you
  • -
-

Multiplayer changes

-
    -
  • fixed numerous minor bugs in the voting system
  • -
  • added a more noticeable message to indicate that the player hasn't voted yet in an active vote
  • -
  • added support for /me in text chat
  • -
  • increased size of player chat icon
  • -
  • added "nat-free" support from Adam Fazakerley
  • -
  • fixed inventory respawn bug
  • -
  • minor fixes to DukesterX 1.5 compatibility wrapper
  • -
-

CON changes

-
    -
  • reworked movement_lock member of the player struct to use bit flags
  • -
  • reworked findnearactor3d, findnearactor3dvar, findnearsprite3d, and findnearsprite3dvar
  • -
  • added findnearactorz, findnearactorzvar, findnearspritez, and findnearspritezvar
  • -
  • added WEAPON_FLAG_RESET (65536) to weapon system in order to properly emulate the chaingun and freezer
  • -
  • fixed "eshoot" and added "ezshoot"
  • -
  • reworked weapon system; note that your custom weapons may need adjustments to work again
  • -
  • updated sample enhance.con
  • -
- -


Please see JonoF's JFDuke3D release notes
here for information on features JFDuke3D shares with EDuke32

- -
Richard "TerminX" Gobeille (terminx@gmail.com)
- - - diff --git a/polymer-perf/eduke32/GNU.TXT b/polymer-perf/eduke32/GNU.TXT deleted file mode 100644 index 358ef6fb3..000000000 --- a/polymer-perf/eduke32/GNU.TXT +++ /dev/null @@ -1,87 +0,0 @@ -GNU GENERAL PUBLIC LICENSE -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc. -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. -Preamble -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. - -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and modification follow. - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - - -a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. - -b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. - -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. -Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. - -3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: - -a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - -b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. -If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. - -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. - -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. - -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - - -END OF TERMS AND CONDITIONS diff --git a/polymer-perf/eduke32/MakeDistributions b/polymer-perf/eduke32/MakeDistributions deleted file mode 100644 index a30641076..000000000 --- a/polymer-perf/eduke32/MakeDistributions +++ /dev/null @@ -1,47 +0,0 @@ -# GNU Makefile to prepare source and binary distributions. -# make -f MakeDistributions [source|binary] - -SOURCEFILES=GNU.TXT buildlic.txt \ - Makefile Makefile.deps Makefile.msvc Makefile.watcom MakeDistributions \ - duke3d.def.sample SEHELP.HLP STHELP.HLP enhance.con.sample names.h - -BINARYFILES=mapster32.exe eduke32.exe GNU.TXT buildlic.txt \ - ChangeLog.html setup.exe duke3d.def.sample SEHELP.HLP STHELP.HLP \ - ChangeLog enhance.con.sample duke3d_w32.exe names.h - -.PHONY: source binary - -datenow=$(shell date +%Y%m%d) - -sourcedir=eduke32_src_$(datenow) -binarydir=eduke32_$(datenow) - -all: source binary - -source: - rm -rf $(sourcedir) $(sourcedir).zip - mkdir -p $(sourcedir) $(sourcedir)/eobj $(sourcedir)/obj - mkdir -p $(sourcedir)/eobj.nix $(sourcedir)/obj.nix - touch $(sourcedir)/eobj/keep.me $(sourcedir)/obj/keep.me - touch $(sourcedir)/eobj.nix/keep.me $(sourcedir)/obj.nix/keep.me - cp $(SOURCEFILES) $(sourcedir) - find . -name "*~" -exec rm -rf '{}' ';'; - find . -name "*.orig" -exec rm -rf '{}' ';'; - find . -name "*.rej" -exec rm -rf '{}' ';'; - find . -name "*.mine" -exec rm -rf '{}' ';'; - find . -name "*.c.r*" -exec rm -rf '{}' ';'; - find . -name "*.h.r*" -exec rm -rf '{}' ';'; - cp -R source rsrc $(sourcedir) - find $(sourcedir) | grep -i svn | xargs rm -rf - kzip -r $(sourcedir).zip $(sourcedir) - -binary: - make RELEASE=1 -# upx -9 mapster32.exe eduke32.exe duke3d_w32.exe setup.exe - rm -rf $(binarydir) - mkdir $(binarydir) -# mkdir $(binarydir) $(binarydir)/models - cp $(BINARYFILES) $(binarydir) -# cp models/* $(binarydir)/models - kzip -r $(binarydir).zip $(binarydir) - diff --git a/polymer-perf/eduke32/Makefile b/polymer-perf/eduke32/Makefile deleted file mode 100644 index 58df36edf..000000000 --- a/polymer-perf/eduke32/Makefile +++ /dev/null @@ -1,305 +0,0 @@ -# -# EDuke32 Makefile for GNU Make -# - -include Makefile.common - - -# SDK locations - adjust to match your setup -ifneq ($(DXROOT_OVERRIDE),) - DXROOT=$(DXROOT_OVERRIDE) -else - DXROOT=../sdk/dx - #DXROOT=c:/sdks/directx/dx8 -endif - - -# Build locations -SRC=source -RSRC=rsrc -ESRC=$(EROOT)/src -EINC=$(EROOT)/include -INC=$(SRC) -o=o -# ENETROOT=$(ESRC)/enet - -ifneq (0,$(RELEASE)) - # Debugging disabled - debug+= $(F_NO_STACK_PROTECTOR) -else - # Debugging enabled - ifneq (0,$(KRANDDEBUG)) - debug+= -fno-inline -fno-inline-functions -fno-inline-functions-called-once - endif -endif - -OURCFLAGS=$(BASECFLAGS) \ - -I$(INC) -I$(EINC) -I$(SRC)/jmact -I$(JAUDIOLIBDIR)/include -I$(ENETDIR)/include \ - $(ARCH) - -OURCXXFLAGS=$(BASECXXFLAGS) -NASMFLAGS=$(BASEASFLAGS) - - -JAUDIOLIBDIR=$(SRC)/jaudiolib -JAUDIOLIB=libjfaudiolib.a - -ENETDIR=$(SRC)/enet -ENETLIB=libenet.a - -include $(EROOT)/Makefile.shared - - - -ifeq ($(PLATFORM),WINDOWS) - OBJ=obj_win - EOBJ=eobj_win - LIBS+= $(L_SSP) -Wl,--enable-auto-import -else - LIBS+= -ldl -pthread - ifneq (0,$(PROFILER)) - LIBS+= -lprofiler - debug+= -pg - endif - OBJ=obj - EOBJ=eobj -endif - -JMACTOBJ=$(OBJ)/file_lib.$o \ - $(OBJ)/control.$o \ - $(OBJ)/keyboard.$o \ - $(OBJ)/mouse.$o \ - $(OBJ)/mathutil.$o \ - $(OBJ)/scriplib.$o \ - $(OBJ)/animlib.$o - -GAMEOBJS=$(OBJ)/game.$o \ - $(OBJ)/actors.$o \ - $(OBJ)/anim.$o \ - $(OBJ)/config.$o \ - $(OBJ)/demo.$o \ - $(OBJ)/gamedef.$o \ - $(OBJ)/gameexec.$o \ - $(OBJ)/gamevars.$o \ - $(OBJ)/global.$o \ - $(OBJ)/menus.$o \ - $(OBJ)/namesdyn.$o \ - $(OBJ)/net.$o \ - $(OBJ)/player.$o \ - $(OBJ)/premap.$o \ - $(OBJ)/savegame.$o \ - $(OBJ)/sector.$o \ - $(OBJ)/rts.$o \ - $(OBJ)/osdfuncs.$o \ - $(OBJ)/osdcmds.$o \ - $(OBJ)/grpscan.$o \ - $(OBJ)/sounds.$o \ - $(JMACTOBJ) - -EDITOROBJS=$(OBJ)/astub.$o \ - $(OBJ)/m32def.$o \ - $(OBJ)/m32exec.$o \ - $(OBJ)/m32vars.$o \ - $(OBJ)/mathutil.$o \ - $(OBJ)/sounds_mapster32.$o - -# PLATFORM SPECIFIC SETTINGS - -ifeq ($(PLATFORM),LINUX) - OURCFLAGS += -fno-pic - NASMFLAGS += -f elf - LIBS += -lvorbisfile -lvorbis -logg -endif - -ifeq ($(PLATFORM),DARWIN) - ifeq (1,$(SDL_FRAMEWORK)) - APPLE_INCLUDE_DIR=$(abspath Apple/include) - OURCFLAGS += -fno-pic -I$(APPLE_INCLUDE_DIR) -I/Library/Frameworks/SDL.framework/Headers \ - -I/Library/Frameworks/SDL_mixer.framework/Headers - LIBS += -read_only_relocs suppress -LApple/lib -lvorbisfile -lvorbis -logg -lm \ - -Wl,-framework,SDL -Wl,-framework,SDL_mixer Apple/lib/libSDLmain.a \ - -Wl,-framework,Cocoa -Wl,-framework,Carbon -Wl,-framework,OpenGL \ - -Wl,-framework,CoreMidi -Wl,-framework,AudioUnit \ - -Wl,-framework,AudioToolbox -Wl,-framework,IOKit -Wl,-framework,AGL \ - -Wl,-framework,QuickTime -lm - # I like to have the SDLMain.m from the OSX SDL package to be in this dir: - LIBS += $(realpath SDLMain.m) - else - OURCFLAGS += -fno-pic -I$(SDLROOT)/include -I$(SDLROOT)/include/SDL - LIBS += -read_only_relocs suppress -lvorbisfile -lvorbis -logg -lm -lSDL_mixer \ - -Wl,-framework,Cocoa -Wl,-framework,Carbon -Wl,-framework,OpenGL \ - -Wl,-framework,CoreMidi -Wl,-framework,AudioUnit \ - -Wl,-framework,AudioToolbox -Wl,-framework,IOKit -Wl,-framework,AGL \ - -Wl,-framework,QuickTime -lm - endif - NASMFLAGS += -f Mach-O -endif - -ifeq ($(PLATFORM),WINDOWS) - OURCFLAGS += -fno-pic -DUNDERSCORES -I$(DXROOT)/include - NASMFLAGS+= -DUNDERSCORES -f win32 - LIBS += -L$(JAUDIOLIBDIR)/third-party/mingw32/lib -lvorbisfile -lvorbis -logg -lwsock32 -lws2_32 -lwinmm -ldsound - GAMEOBJS+= $(OBJ)/gameres.$o $(OBJ)/winbits.$o $(OBJ)/startwin.game.$o $(OBJ)/music.$o $(OBJ)/midi.$o $(OBJ)/mpu401.$o - EDITOROBJS+= $(OBJ)/buildres.$o - JAUDIOLIB=libjfaudiolib_win32.a - ENETLIB=libenet_win32.a -else -# -lGLU to build with gluBuild2DMipmaps - ifeq ($(RENDERTYPE),SDL) - ifeq (0,$(SDL_FRAMEWORK)) - OURCFLAGS+= $(subst -Dmain=SDL_main,,$(shell $(SDLCONFIG) --cflags)) - LIBS+= -lSDL_mixer - else - OURCFLAGS += -DSDL_FRAMEWORK - endif - - ifeq (1,$(HAVE_GTK2)) - OURCFLAGS+= -DHAVE_GTK2 $(shell pkg-config --cflags gtk+-2.0) - GAMEOBJS+= $(OBJ)/game_banner.$o $(OBJ)/startgtk.game.$o - EDITOROBJS+= $(OBJ)/editor_banner.$o - endif - - GAMEOBJS+= $(OBJ)/game_icon.$o $(OBJ)/sdlmusic.$o - EDITOROBJS+= $(OBJ)/build_icon.$o - endif -endif - - -OURCFLAGS+= $(BUILDCFLAGS) -OURCXXFLAGS+= $(BUILDCFLAGS) - -MISCLINKOPTS= -ifeq ($(PLATFORM),WINDOWS) - MISCLINKOPTS+= -Wl,--large-address-aware -endif -ifneq (0,$(KRANDDEBUG)) - MISCLINKOPTS+=-Wl,-Map=$@.memmap -endif -ifneq (0,$(PROFILER)) - MISCLINKOPTS+=-pg -endif - -ifeq ($(PRETTY_OUTPUT),1) -.SILENT: -endif -.PHONY: clean all engine $(EOBJ)/$(ENGINELIB) $(EOBJ)/$(EDITORLIB) $(JAUDIOLIBDIR)/$(JAUDIOLIB) $(ENETDIR)/$(ENETLIB) - -# TARGETS - -all: notice eduke32$(EXESUFFIX) mapster32$(EXESUFFIX) - -all: - $(BUILD_FINISHED) - @ls -l eduke32$(EXESUFFIX) - @ls -l mapster32$(EXESUFFIX) - -notice: - $(BUILD_STARTED) - -eduke32$(EXESUFFIX): $(GAMEOBJS) $(EOBJ)/$(ENGINELIB) $(JAUDIOLIBDIR)/$(JAUDIOLIB) $(ENETDIR)/$(ENETLIB) - $(LINK_STATUS) - if $(CC) $(CFLAGS) $(OURCFLAGS) -o $@ $^ $(LIBS) $(STDCPPLIB) $(MISCLINKOPTS); then $(LINK_OK); else $(LINK_FAILED); fi -ifeq (1,$(RELEASE)) - ifeq (0,$(DEBUGANYWAY)) - $(STRIP) eduke32$(EXESUFFIX) - endif -endif - -mapster32$(EXESUFFIX): $(EDITOROBJS) $(EOBJ)/$(EDITORLIB) $(EOBJ)/$(ENGINELIB) $(JAUDIOLIBDIR)/$(JAUDIOLIB) - $(LINK_STATUS) - if $(CC) $(CFLAGS) $(OURCFLAGS) -o $@ $^ $(LIBS) $(STDCPPLIB) $(MISCLINKOPTS); then $(LINK_OK); else $(LINK_FAILED); fi -ifeq (1,$(RELEASE)) - ifeq (0,$(DEBUGANYWAY)) - $(STRIP) mapster32$(EXESUFFIX) - endif -endif - -include Makefile.deps - -.PHONY: enginelib editorlib -enginelib editorlib: - -mkdir -p $(EOBJ) -ifeq ($(PRETTY_OUTPUT),1) - printf "\033[K\033[0;35mChanging dir to \033[1;35m$(CURDIR)/$(EROOT)\033[0;35m \033[0m\n" -endif - $(MAKE) -C $(EROOT)/ "OBJ=../$(EOBJ)" $@ -#\ - DEBUGANYWAY=$(DEBUGANYWAY) KRANDDEBUG=$(KRANDDEBUG)\ - USE_OPENGL=$(USE_OPENGL) BUILD32_ON_64=$(BUILD32_ON_64) PROFILER=$(PROFILER)\ - NOASM=$(NOASM) NEDMALLOC=$(NEDMALLOC) RELEASE=$(RELEASE) OPTLEVEL=$(OPTLEVEL) $@ -ifeq ($(PRETTY_OUTPUT),1) - printf "\033[K\033[0;35mChanging dir to \033[1;35m$(CURDIR)\033[0;35m \033[0m\n" -endif - -$(EOBJ)/$(ENGINELIB): enginelib -$(EOBJ)/$(EDITORLIB): editorlib -$(JAUDIOLIBDIR)/$(JAUDIOLIB): -ifeq ($(PRETTY_OUTPUT),1) - printf "\033[K\033[0;35mChanging dir to \033[1;35m$(CURDIR)/$(JAUDIOLIBDIR)\033[0;35m \033[0m\n" -endif - $(MAKE) -C $(JAUDIOLIBDIR) #PRETTY_OUTPUT=$(PRETTY_OUTPUT) EROOT=$(EROOT) RELEASE=$(RELEASE) OPTLEVEL=$(OPTLEVEL) DEBUGANYWAY=$(DEBUGANYWAY) -ifeq ($(PRETTY_OUTPUT),1) - printf "\033[K\033[0;35mChanging dir to \033[1;35m$(CURDIR)\033[0;35m \033[0m\n" -endif - -$(ENETDIR)/$(ENETLIB): -ifeq ($(PRETTY_OUTPUT),1) - printf "\033[K\033[0;35mChanging dir to \033[1;35m$(CURDIR)/$(ENETDIR)\033[0;35m \033[0m\n" -endif - $(MAKE) -C $(ENETDIR) #PRETTY_OUTPUT=$(PRETTY_OUTPUT) EROOT=$(EROOT) RELEASE=$(RELEASE) OPTLEVEL=$(OPTLEVEL) -ifeq ($(PRETTY_OUTPUT),1) - printf "\033[K\033[0;35mChanging dir to \033[1;35m$(CURDIR)\033[0;35m \033[0m\n" -endif - - -# RULES -$(OBJ)/%.$o: $(SRC)/%.nasm - $(COMPILE_STATUS) - $(AS) $(NASMFLAGS) $< -o $@ - -$(OBJ)/%.$o: $(SRC)/%.c - $(COMPILE_STATUS) - if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi - -$(OBJ)/%.$o: $(SRC)/%.cpp - $(COMPILE_STATUS) - if $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi - -$(OBJ)/%.$o: $(SRC)/jmact/%.c - $(COMPILE_STATUS) - if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi - -$(OBJ)/%.$o: $(SRC)/misc/%.rc - $(COMPILE_STATUS) - if $(RC) -i $< -o $@ --include-dir=$(EINC) --include-dir=$(SRC) -DPOLYMER=$(POLYMER); then $(COMPILE_OK); else $(COMPILE_FAILED); fi - -$(OBJ)/%.$o: $(SRC)/util/%.c - $(COMPILE_STATUS) - if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi - -$(OBJ)/%.$o: $(RSRC)/%.c - $(COMPILE_STATUS) - if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi - -$(OBJ)/game_banner.$o: $(RSRC)/game_banner.c - $(COMPILE_STATUS) - if $(CC) $(CFLAGS) $(OURCFLAGS) -Wno-pointer-sign -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi - -$(OBJ)/editor_banner.$o: $(RSRC)/editor_banner.c - $(COMPILE_STATUS) - if $(CC) $(CFLAGS) $(OURCFLAGS) -Wno-pointer-sign -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi - -$(RSRC)/game_banner.c: $(RSRC)/game.bmp - echo "#include " > $@ - gdk-pixbuf-csource --extern --struct --raw --name=startbanner_pixdata $^ | sed 's/load_inc//' >> $@ -$(RSRC)/editor_banner.c: $(RSRC)/build.bmp - echo "#include " > $@ - gdk-pixbuf-csource --extern --struct --raw --name=startbanner_pixdata $^ | sed 's/load_inc//' >> $@ - -# PHONIES - -clean: - -rm -f $(OBJ)/* eduke32$(EXESUFFIX) mapster32$(EXESUFFIX) core* duke3d_w32$(EXESUFFIX) && $(MAKE) -C $(JAUDIOLIBDIR) clean && $(MAKE) -C $(ENETDIR) clean - -veryclean: clean - -rm -f $(EOBJ)/* $(RSRC)/*banner* diff --git a/polymer-perf/eduke32/Makefile.common b/polymer-perf/eduke32/Makefile.common deleted file mode 100644 index 02f636251..000000000 --- a/polymer-perf/eduke32/Makefile.common +++ /dev/null @@ -1,101 +0,0 @@ - -## common definitions for Makefile, build/Makefile, source/enet/Makefile and -## source/jaudiolib/Makefile - -# Use colored output -PRETTY_OUTPUT ?= 1 - -# DirectX SDK location - if nonempty, overrides the DXROOTs of the individual -# Makefiles. Should be set to an absolute path since this Makefile is included -# at different directory levels -DXROOT_OVERRIDE:= - -# Engine options -# USE_OPENGL - enables basic OpenGL Polymost renderer -# POLYMER - enables fancy Polymer renderer -# NOASM - disables the use of inline assembly pragmas -# LINKED_GTK - enables compile-time linkage to GTK -# -POLYMER = 1 -USE_OPENGL = 1 -NOASM = 0 -LINKED_GTK = 0 -BUILD32_ON_64 = 0 -NEDMALLOC = 1 - -ifeq (0,$(USE_OPENGL)) - POLYMER = 0 -endif - - -# Debugging/Build options -# RELEASE - 1 = no debugging -# DEBUGANYWAY - 1 = include debug symbols even when generating release code -# KRANDDEBUG - 1 = include logging of krand() calls for debugging the demo system -# EFENCE - 1 = compile with Electric Fence for malloc() debugging -# OPTLEVEL - 0..3 = GCC optimization strategy -# -RELEASE?=1 -DEBUGANYWAY?=0 -KRANDDEBUG?=0 -EFENCE?=0 -OPTLEVEL?=2 -PROFILER?=0 -NOSOUND?=0 - -ifneq (0,$(KRANDDEBUG)) - RELEASE=0 -endif -ifneq (0,$(PROFILER)) - DEBUGANYWAY=1 -endif - - -# Tools -CC=gcc -CXX=g++ -AS=nasm -AR=ar -RC=windres -RANLIB=ranlib -STRIP=strip - -# compiler flags etc. -LIBS=-lm -ifneq (0,$(RELEASE)) - # Debugging disabled - debug=-fomit-frame-pointer -funswitch-loops -O$(OPTLEVEL) -else - # Debugging enabled - debug=-ggdb -O0 -DDEBUGGINGAIDS - ifeq ($(PLATFORM),LINUX) - LIBS+=-rdynamic - endif - ifneq (0,$(PROFILER)) - LIBS+= -lprofiler - debug+= -pg - endif - ifneq (0,$(KRANDDEBUG)) - debug+=-DKRANDDEBUG=1 - endif -endif -ifneq (0,$(DEBUGANYWAY)) - debug+=-ggdb -endif - -W_NO_UNUSED_RESULT := $(shell echo '' | $(CC) -E -Wno-unused-result - 2>/dev/null && echo -Wno-unused-result) -W_NO_UNUSED_RESULT := $(findstring -Wno-unused-result,$(W_NO_UNUSED_RESULT)) - -BASECFLAGS=$(debug) -W -Wall -Wimplicit -Werror-implicit-function-declaration \ - -funsigned-char -fno-strict-aliasing -DNO_GCC_BUILTINS -D_FORTIFY_SOURCE=2 \ - $(F_JUMP_TABLES) $(W_NO_UNUSED_RESULT) - -BASECXXFLAGS= -fno-exceptions -fno-rtti -BASEASFLAGS=-s #-g - - -# Misc. stuff that is constant between Makefiles -EROOT:=build - -# will be potentially overridden in build/Makefile.shared -EXESUFFIX= diff --git a/polymer-perf/eduke32/Makefile.deps b/polymer-perf/eduke32/Makefile.deps deleted file mode 100644 index 9abb7cd36..000000000 --- a/polymer-perf/eduke32/Makefile.deps +++ /dev/null @@ -1,67 +0,0 @@ -duke3d_h=$(EINC)/build.h $(EINC)/polymer.h $(EINC)/pragmas.h $(EINC)/compat.h $(EINC)/cache1d.h $(EINC)/baselayer.h $(SRC)/jmact/file_lib.h $(SRC)/jmact/keyboard.h $(SRC)/jmact/control.h $(INC)/gamedefs.h $(INC)/function.h $(INC)/config.h $(INC)/sounds.h $(INC)/rts.h $(INC)/_rts.h $(INC)/soundefs.h $(JAUDIOLIBDIR)/include/fx_man.h $(JAUDIOLIBDIR)/include/music.h $(INC)/namesdyn.h $(INC)/duke3d.h $(INC)/player.h $(INC)/sector.h $(INC)/game.h $(INC)/actors.h - -gamedef_h=$(SRC)/gamedef.h $(SRC)/gameexec.h $(SRC)/gamevars.h - -$(OBJ)/game.$o: $(SRC)/game.c $(SRC)/jmact/scriplib.h $(duke3d_h) $(INC)/osdfuncs.h $(INC)/osdcmds.h $(INC)/grpscan.h $(INC)/demo.h -$(OBJ)/actors.$o: $(SRC)/actors.c $(duke3d_h) -$(OBJ)/anim.$o: $(SRC)/anim.c $(duke3d_h) $(SRC)/jmact/animlib.h -$(OBJ)/demo.$o: $(SRC)/demo.c $(duke3d_h) -$(OBJ)/gamedef.$o: $(SRC)/gamedef.c $(duke3d_h) $(gamedef_h) -$(OBJ)/gameexec.$o: $(SRC)/gameexec.c $(SRC)/gamestructures.c $(duke3d_h) $(gamedef_h) -$(OBJ)/gamestructures.$o: $(SRC)/gamestructures.c $(duke3d_h) $(gamedef_h) -$(OBJ)/gamevars.$o: $(SRC)/gamevars.c $(SRC)/gamestructures.c $(duke3d_h) $(gamedef_h) -$(OBJ)/global.$o: $(SRC)/*.c $(SRC)/global.c $(duke3d_h) -$(OBJ)/mdump.$o: $(SRC)/mdump.cpp $(SRC)/mdump.h -$(OBJ)/menus.$o: $(SRC)/menus.c $(duke3d_h) $(SRC)/jmact/mouse.h -$(OBJ)/namesdyn.$o: $(SRC)/namesdyn.c $(duke3d_h) -$(OBJ)/net.$o: $(SRC)/net.c $(duke3d_h) -$(OBJ)/player.$o: $(SRC)/player.c $(duke3d_h) -$(OBJ)/premap.$o: $(SRC)/premap.c $(duke3d_h) $(EINC)/osd.h -$(OBJ)/savegame.$o: $(SRC)/savegame.c $(duke3d_h) -$(OBJ)/sector.$o: $(SRC)/sector.c $(duke3d_h) -$(OBJ)/sounds.$o: $(SRC)/sounds.c $(duke3d_h) -$(OBJ)/rts.$o: $(SRC)/rts.c $(duke3d_h) -$(OBJ)/config.$o: $(SRC)/config.c $(duke3d_h) $(SRC)/jmact/scriplib.h $(INC)/_functio.h -$(OBJ)/winbits.$o: $(SRC)/winbits.c -$(OBJ)/osdfuncs.$o: $(SRC)/names.h $(EINC)/build.h $(EINC)/osd.h -$(OBJ)/osdcmds.$o: $(SRC)/osdcmds.c $(INC)/osdcmds.h $(EINC)/osd.h $(duke3d_h) - -$(OBJ)/astub.$o: $(SRC)/astub.c $(SRC)/mapster32.h $(EINC)/build.h $(EINC)/pragmas.h $(EINC)/compat.h $(EINC)/editor.h - -$(OBJ)/game_icon.$o: $(RSRC)/game_icon.c -$(OBJ)/build_icon.$o: $(RSRC)/build_icon.c - -$(OBJ)/grpscan.$o: $(SRC)/grpscan.c $(EINC)/compat.h $(EINC)/baselayer.h $(EINC)/scriptfile.h $(EINC)/cache1d.h $(EINC)/crc32.h $(INC)/grpscan.h -$(OBJ)/gameres.$o: $(SRC)/misc/gameres.rc $(SRC)/startwin.game.h $(RSRC)/game.bmp $(RSRC)/game_icon.ico -$(OBJ)/buildres.$o: $(SRC)/misc/buildres.rc $(EINC)/startwin.editor.h $(RSRC)/build.bmp $(RSRC)/build_icon.ico -$(OBJ)/startwin.game.$o: $(SRC)/startwin.game.c $(duke3d_h) $(EINC)/build.h $(EINC)/winlayer.h $(EINC)/compat.h $(INC)/grpscan.h -$(OBJ)/startgtk.game.$o: $(SRC)/startgtk.game.c $(duke3d_h) $(EINC)/dynamicgtk.h $(EINC)/build.h $(EINC)/baselayer.h $(EINC)/compat.h - - -# jMACT objects -$(OBJ)/animlib.$o: $(SRC)/jmact/animlib.c $(SRC)/jmact/animlib.h $(EINC)/compat.h -$(OBJ)/file_lib.$o: $(SRC)/jmact/file_lib.c $(SRC)/jmact/file_lib.h -$(OBJ)/control.$o: $(SRC)/jmact/control.c $(SRC)/jmact/control.h $(SRC)/jmact/keyboard.h $(SRC)/jmact/mouse.h $(EINC)/baselayer.h -$(OBJ)/keyboard.$o: $(SRC)/jmact/keyboard.c $(SRC)/jmact/keyboard.h $(EINC)/compat.h $(EINC)/baselayer.h -$(OBJ)/mouse.$o: $(SRC)/jmact/mouse.c $(SRC)/jmact/mouse.h $(EINC)/baselayer.h -$(OBJ)/mathutil.$o: $(SRC)/jmact/mathutil.c -$(OBJ)/scriplib.$o: $(SRC)/jmact/scriplib.c $(SRC)/jmact/scriplib.h $(SRC)/jmact/_scrplib.h $(EINC)/compat.h - -# jAudioLib objects - -$(OBJ)/mv_mix.$o: $(SRC)/jaudiolib/mv_mix.nasm -$(OBJ)/mv_mix16.$o: $(SRC)/jaudiolib/mv_mix16.nasm -$(OBJ)/mvreverb.$o: $(SRC)/jaudiolib/mvreverb.nasm -$(OBJ)/mv_mix-c.$o: $(SRC)/jaudiolib/mv_mix-c.c -$(OBJ)/mvreverb-c.$o: $(SRC)/jaudiolib/mvreverb-c.c -$(OBJ)/pitch.$o: $(SRC)/jaudiolib/pitch.c $(SRC)/jaudiolib/pitch.h -$(OBJ)/multivoc.$o: $(SRC)/jaudiolib/multivoc.c $(SRC)/jaudiolib/linklist.h $(SRC)/jaudiolib/pitch.h $(SRC)/jaudiolib/multivoc.h $(SRC)/jaudiolib/_multivc.h -$(OBJ)/fx_man.$o: $(SRC)/jaudiolib/fx_man.c $(SRC)/jaudiolib/multivoc.h $(SRC)/jaudiolib/ll_man.h $(SRC)/jaudiolib/fx_man.h -$(OBJ)/dsoundout.$o: $(SRC)/jaudiolib/dsoundout.c $(SRC)/jaudiolib/dsoundout.h -$(OBJ)/openal.$o: $(SRC)/jaudiolib/openal.c $(SRC)/jaudiolib/openal.h -$(OBJ)/dsl.$o: $(SRC)/jaudiolib/dsl.c $(SRC)/jaudiolib/dsl.h $(EINC)/compat.h - -$(OBJ)/midi.$o: $(SRC)/midi.c $(SRC)/_midi.h $(SRC)/midi.h $(JAUDIOLIBDIR)/include/music.h -$(OBJ)/mpu401.$o: $(SRC)/mpu401.c $(SRC)/mpu401.h $(JAUDIOLIBDIR)/include/music.h -$(OBJ)/music.$o: $(SRC)/music.c $(SRC)/midi.h $(SRC)/mpu401.h $(JAUDIOLIBDIR)/include/music.h - diff --git a/polymer-perf/eduke32/Makefile.msvc b/polymer-perf/eduke32/Makefile.msvc deleted file mode 100644 index 36d15829a..000000000 --- a/polymer-perf/eduke32/Makefile.msvc +++ /dev/null @@ -1,186 +0,0 @@ -# EDuke32 Makefile for Microsoft NMake - -SRC=source -OBJ=obj_win -EROOT=build -EINC=$(EROOT)\include -EOBJ=eobj_win -INC=$(SRC) -RSRC=rsrc -o=obj - -JAUDIOLIBDIR=$(SRC)\jaudiolib -JAUDIOLIB=libjfaudiolib.lib - -ENETDIR=$(SRC)\enet -ENETLIB=libenet.lib - -ENGINELIB=engine.lib -EDITORLIB=build.lib - -# the WDK allows us to link against msvcrt.dll instead of msvcrxxx.dll -# this path should match build\Makefile.msvc -WDKROOT="H:\WinDDK\7600.16385.1" -DXROOT="H:\Microsoft DirectX SDK (February 2010)" - -!ifdef DEBUG -# debugging options -flags_cl= /Od /Zi -flags_link=/DEBUG -!else -# release options -flags_cl=/O2 /GL /arch:SSE /MP /I$(WDKROOT)\inc\crt -flags_link=/RELEASE /LTCG /LIBPATH:$(WDKROOT)\lib\wxp\i386 /LIBPATH:$(WDKROOT)\lib\Crt\i386 -!endif - -ENGINEOPTS=/DUSE_OPENGL /DPOLYMER - -CC=cl -AS=ml -LINK=link /nologo /opt:ref -MT=mt -CFLAGS= /MT /J /nologo $(flags_cl) \ - /I$(INC) /I$(EINC)\msvc /I$(EINC)\ /I$(SRC)\jmact /I$(JAUDIOLIBDIR)\include /I$(ENETDIR)\include \ - /W2 $(ENGINEOPTS) \ - /I$(DXROOT)\include /DRENDERTYPEWIN=1 - -LIBS=user32.lib gdi32.lib shell32.lib winmm.lib ws2_32.lib dxguid.lib comctl32.lib \ - vorbisfile_static.lib vorbis_static.lib ogg_static.lib dsound.lib advapi32.lib - -LIBS=/NODEFAULTLIB:glu32.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcrtd.lib /NODEFAULTLIB:libcmt.lib \ - /NODEFAULTLIB:libcmtd.lib $(LIBS) - -ASFLAGS=/nologo /coff /c -EXESUFFIX=.exe -!ifdef DEBUG -CFLAGS=$(CFLAGS) /DDEBUGGINGAIDS /D "_CRT_SECURE_NO_DEPRECATE" -LIBS=$(LIBS) msvcrtd.lib -!else -# comment msvcrt_winxp.obj if not using the WDK -LIBS=$(LIBS) msvcrt.lib msvcrt_winxp.obj -!endif - -JMACTOBJ=$(OBJ)\file_lib.$o \ - $(OBJ)\control.$o \ - $(OBJ)\keyboard.$o \ - $(OBJ)\mouse.$o \ - $(OBJ)\mathutil.$o \ - $(OBJ)\scriplib.$o - -AUDIOLIBOBJ=$(OBJ)\midi.$o $(OBJ)\music.$o $(OBJ)\mpu401.$o - -GAMEOBJS=$(OBJ)\game.$o \ - $(OBJ)\actors.$o \ - $(OBJ)\anim.$o \ - $(OBJ)\demo.$o \ - $(OBJ)\gamedef.$o \ - $(OBJ)\gameexec.$o \ - $(OBJ)\gamevars.$o \ - $(OBJ)\global.$o \ - $(OBJ)\menus.$o \ - $(OBJ)\namesdyn.$o \ - $(OBJ)\net.$o \ - $(OBJ)\player.$o \ - $(OBJ)\premap.$o \ - $(OBJ)\savegame.$o \ - $(OBJ)\sector.$o \ - $(OBJ)\rts.$o \ - $(OBJ)\config.$o \ - $(OBJ)\animlib.$o\ - $(OBJ)\osdfuncs.$o \ - $(OBJ)\osdcmds.$o \ - $(OBJ)\grpscan.$o \ - $(OBJ)\winbits.$o \ - $(OBJ)\gameres.res \ - $(OBJ)\startwin.game.$o \ - $(JMACTOBJ) \ - $(AUDIOLIBOBJ) \ - $(OBJ)\sounds.$o \ -!ifdef DEBUG - $(OBJ)\mdump.$o -!endif - -EDITOROBJS=$(OBJ)\astub.$o \ - $(OBJ)\mathutil.$o \ - $(OBJ)\m32def.$o \ - $(OBJ)\m32vars.$o \ - $(OBJ)\m32exec.$o \ - $(OBJ)\sounds_mapster32.$o \ - $(OBJ)\buildres.res \ - $(AUDIOLIB_FX) \ -!ifdef DEBUG - $(OBJ)\mdump.$o -!endif - - -# RULES -.SUFFIXES: .masm - -{$(SRC)\}.masm{$(OBJ)\}.$o: - $(AS) /c $(ASFLAGS) /Fo$@ $< - -{$(SRC)\jmact}.c{$(OBJ)\}.$o: - $(CC) /c $(CFLAGS) /Fo$@ $< - -{$(SRC)\util}.c{$(OBJ)\}.$o: - $(CC) /c $(CFLAGS) /Fo$@ $< - -{$(SRC)\}.c{$(OBJ)\}.$o: - $(CC) /c $(CFLAGS) /Fo$@ $< - -{$(SRC)\}.cpp{$(OBJ)\}.$o: - $(CC) /c $(CFLAGS) /Fo$@ $< - -{$(SRC)\misc}.rc{$(OBJ)\}.res: - $(RC) /i$(EINC)\ /i$(SRC)\ /DPOLYMER /fo$@ /r $< - - -# TARGETS -all: eduke32$(EXESUFFIX) mapster32$(EXESUFFIX) # duke3d_w32$(EXESUFFIX); - -eduke32$(EXESUFFIX): $(GAMEOBJS) $(EOBJ)\$(ENGINELIB) $(JAUDIOLIBDIR)\$(JAUDIOLIB) $(ENETDIR)\$(ENETLIB) - $(LINK) /OUT:$@ /SUBSYSTEM:WINDOWS /LIBPATH:$(DXROOT)\lib\x86 $(flags_link) /MAP $** $(LIBS) - $(MT) -manifest $(RSRC)\manifest.game.xml -hashupdate -outputresource:$@ -out:$@.manifest - -mapster32$(EXESUFFIX): $(EDITOROBJS) $(EOBJ)\$(ENGINELIB) $(EOBJ)\$(EDITORLIB) $(JAUDIOLIBDIR)\$(JAUDIOLIB) - $(LINK) /OUT:$@ /SUBSYSTEM:WINDOWS /LIBPATH:$(DXROOT)\lib\x86 $(flags_link) /MAP $** $(LIBS) - $(MT) -manifest $(RSRC)\manifest.build.xml -hashupdate -outputresource:$@ -out:$@.manifest - -!include Makefile.deps - -enginelib editorlib: AlwaysBuild - -mkdir $(EOBJ) - echo OBJ=$(MAKEDIR)\$(EOBJ)\ > $(EOBJ)\overrides.mak - echo CFLAGS=$(ENGINEOPTS) >> $(EOBJ)\overrides.mak - cd $(EROOT) - nmake /f Makefile.msvc "OVERRIDES=$(MAKEDIR)\$(EOBJ)\overrides.mak" $@ - cd $(MAKEDIR) - -jaudiolib: - cd $(JAUDIOLIBDIR) - nmake /f Makefile.msvc - cd $(MAKEDIR) - -enet: - cd $(ENETDIR) - nmake /f Makefile.msvc - cd $(MAKEDIR) - -AlwaysBuild: ; -$(EOBJ)\$(EDITORLIB): editorlib ; -$(EOBJ)\$(ENGINELIB): enginelib ; -$(JAUDIOLIBDIR)\$(JAUDIOLIB): jaudiolib ; -$(ENETDIR)\$(ENETLIB): enet ; - -# PHONIES -clean: - -del /Q $(OBJ)\* eduke32$(EXESUFFIX) mapster32$(EXESUFFIX) duke3d_w32$(EXESUFFIX) \ - *.pdb *.map *.manifest - cd $(JAUDIOLIBDIR) - nmake /f Makefile.msvc clean - cd $(MAKEDIR)\$(ENETDIR) - nmake /f Makefile.msvc clean - cd $(MAKEDIR) - -veryclean: clean - -del /Q $(EOBJ)\* diff --git a/polymer-perf/eduke32/SEHELP.HLP b/polymer-perf/eduke32/SEHELP.HLP deleted file mode 100644 index c2f1130ec..000000000 --- a/polymer-perf/eduke32/SEHELP.HLP +++ /dev/null @@ -1,35 +0,0 @@ --Sector Effector Help- - - 0 : Rotating Sector - 1 : Pivot Sprite for SE 0 - 2 : Earthquake - 3 : Random Lights After Shot Out - 4 : Random Lights - 6 : Subway - 7 : Teleporter - 8 : Up Open Door Lights - 9 : Down Open Door Lights - 10 : Door Auto Close (Hitag = Delay) - 11 : Rotate Sector Door - 12 : Light Switch - 13 : C-9 Explosive - 14 : Subway Car - 15 : Slide Door (ST 25) - 16 : Rotate Reactor Sector - 17 : Elevator Transport (ST 15) - 18 : Incremental Sector Rise/Fall - 19 : Explosion Lowers Ceiling - 20 : Stretch (ST 27) - 21 : Drop Floor (ST 28) - 22 : Teeth Door Prong (ST 29) - 23 : One-Way Teleporter Destination - 24 : Conveyor Belt or Water Current - 25 : Engine Piston - 27 : Demo Camera - 28 : Lightning - 29 : Float (for Waves) - 30 : Two-Way Train (ST 31) - 31 : Floor Rise/Fall - 32 : Ceiling Rise/Fall - 33 : Earthquake Debris - 36 : Projectile Shooter diff --git a/polymer-perf/eduke32/STHELP.HLP b/polymer-perf/eduke32/STHELP.HLP deleted file mode 100644 index ce0384de8..000000000 --- a/polymer-perf/eduke32/STHELP.HLP +++ /dev/null @@ -1,25 +0,0 @@ --Sector Tags Help- - - 1 : Above Water (SE 7) - 2 : Underwater (SE 7) - 9 : Sliding Star Trek Doors - 15 : Elevator Transport (SE 17) - 16 : Elevator Platform Down - 17 : Elevator Platform Up - 18 : Elevator Down - 19 : Elevator Up - 20 : Ceiling Door - 21 : Floor Door - 22 : Splitting Door - 23 : Swinging Door - 25 : Sliding Door (SE 15) - 26 : Splitting Star Trek Door - 27 : Stretch (SE 20) - 28 : Drop Floor (SE 21) - 29 : Teeth Door Prong (SE 22) - 30 : Rotate and Rise Bridge - 31 : Two-Way Train (SE 30) - 10+++ : One-Time Sound - 32767 : Secret Room - 65534 : End Of Level with Message - 65535 : End Of Level diff --git a/polymer-perf/eduke32/backtrace.dll b/polymer-perf/eduke32/backtrace.dll deleted file mode 100644 index 0ff6d6187672eef6a9bf3c74e66bd715da115eb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 707166 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
^=L z?a4I1A|9vt5rdxKd$V)CXI{w14uiMNPWlV1X9nR*$W=@+4gM}r83W=+Dsjg(REWhH<+~h21JW_yYS) zCt^m$0JUW24ZTRq4364>@=7*Ju#7(p3^R9B&U6#}?%cVZdmb`PPU-?P7D?kgLFenF zUbWZs)k#n0a}8vK1|mGkI(OA;}9-OKN@XC5{svdk)511kzIB7XUYWx-W z@@jgV^lF}%v_u{5yY)6QN4Or&9rdOMNxsGZ6xo2D@x)308{cfZmDvgYQ}tv|`>RHeQ|n2VupVXLKT^$U8e#V9BaA0LJm26K3<_0=mX312B* zW-yso+kU2ouhG?gy1IfZv)(G794@aT(V#%3zNAt$T)EAgJ{;C2cfMdBe@qvN$@&|v z?OGpvL3m~>ALUlN@krFH_WReE0|8a^E&eR-pejfo_O9G*yIYNJnS(-e{J8OHy41IpDbZH>w2IvE0C)a$Hc$ulr6Emd!A4q#;2pKC z9bW53$8{*`En4d*I{ISk_&^>$eKBqLf&&vnd1^k^$+5jQJE6kx{d9Uwq_;M)(OJEc zdB&}n#myj_3HwVMB0&N1Ikp=W{&rLG)^^mvu!r*V6Ugm_9GnOVFeV zXqF-Vm@x#4?PYCrAR6W%aK}aojT?>D0WxmEv}Rr9pN@Z%hGNM*~)JfUUrnp5gju`bb#J$^Y0Oo`@{H>=!Vr4rcH%Le5; z^kZV8Ls>J{3rcb;@5MGUtA1kR!DTfbfzd?qQ`xs`@L{zM6||>$R@WrUuRS)g+4t zmvwwjmR>K=bRKKnvo^MVvDdmT@TkZ%SzHk8M9N{Yiq8!BgeQRV9G_5e+p+JYuF1WN z9`{c9+;i`;w;uc5{dslnyHdXxkh;xthj(@(F?MBM5#r4Q_K zZ*79m{e;aDZlb|IX#&WV4U_W=StVS$(7)&^7%WUnRBC3E^V3;%fI8)~=c{lx&v2*u(z!7rpGh3%ale>MKr`k+eCUo_0mCv+hsSY;+F7IS=IRirCKV*AHq} zXssK8S`Q38DG|L%e8Q|K zs-`iE-NR+eKkPi#O+m9-_&gA?OIprACsbj*2Y!GDh=%K%;}buzhq+SU_8je7_O}Cc z44s%cM*+7RO@u}c)C|4AMiTzd{w4_$+F|{sI2e~KF8xk(nIGMliMIRWNGySY!Fe>! zoJ>0*K6hfQtou;mSGy{U3R(Rz*e5S`SCq*kqqTV2DMVFNQDsMRQb$zV{NkdP@`EpV zmlX$xbzfh4kQpxy-qa09*2?qQWsl;x^%E(Q7WH_y)(77KgQ#O``3(ufQF-0wqf1Vm z8z1>}uo8pUaHkslYUEi?eqmp?XCM|8QZUKyX7BiU77NCRw@mFH^i!vcYJp!avNa6KOQt6?%Ww`J(qq z&M_&p*woUAM-(@3;sU*m@9V86^2Rqe^4%}40dW%c2-7JKljBjGE+6=q@C&*}GsMQf zYly%7gs=d(gTyg)9PPSKmAOZXiCVlx3s54e|fR2w;slp7WmZZ>V=tWtcTNKYc|2eE&7P z)$#WK(VF;;72f>|ctX0Q^tF03Yl)KnJi3Hy!QCl*>EE&doVyp@jK8#rcx{otfqce; zw%)S$oO+{aaQ6=BMdA&AgPN!waDIAuUD5rj^b}K_x1ow_@0rN`=J)sB-}=&%ctSS{ zPI^>Vfg(aVKV4c+aJi@A`$_lj@4|Q}c!Qo{3I-FVmN-$e^OJ8D9gh5*T!S8Ny&cfTm} z=n@98*fkxDKz-GP?5z`}Auq=61=kBRU@ebt!@UH^eT1({o0&7Sly7`Mu3kFbmtH}& z>YU$L*_V!oH@%3jaF6Mg+&k$OjjoYkkx5f<{z89Flh>N^=U=VhN9(-Swf=lg9y-w4 zrPXsff(?-FG$P&ESozwv)Cw!hKwjw+79J;%&)Y~wF&z;oWY)P-r>&9?{4!Exs zS@7afFONV{oYotVBJt$w6+Ge@>bZ*C`g?tPh7#h*xztCYH;TQCAdR5?Pd1rH?XOAd zHpPlN`A~tIirgLbu7PSqn-p`&sZCLGr*s}8q)jOF9~FG7WO8S*pIM+AQv|Pb?HdZJ zy#J`0)!~P}s`oQ$61xX;oAk{fb9Gj*)y;Fh(z0!vUKfh|UTi%geCm%!Cv8^lm7f3C z(dW&2ZbkmYXzzXjANb9mUzcg#lzCE6#Q972zOvEV;g9_d24IZz=U+crgh%Xg$fF%R z+t7;CWI<9ZL0&c)(GanN4Uzp82XVD;k(`^i1C6I4w|$Vcmb`M&N*hj6_J3n|)@KkN zqbFdU_tJrr=#MPY4?C;Rq2I1jebvq{O&st|IU&Q3Ydnnvq%go+=xrFsFuY8e{)#}F z=OQ3GKgtd;Z+-KYoxEAp8N4gP^ji+Mk9{3a8=oc2`I!j?4|3#UIpi-K*Zv27joP9J z0rg65Y7cuakiX`VGGft5;aft)L6kUr@=I7tXU*OG1rHOVKciW7 z|4a(C+GjbtS^kd2n<$!0K+ANcj%M15`_jb*-5?eBrB5@L{$*3$eN5#+sur&qYJn#$ z_R@yU$<$CYX1-4v6anD`l7Li26yc{Zxif-=f@dnrq|2%D@dZq~myT-Y`n)}V`wV&-#g0WY^SN3W~ zcm?Bo=~4ZIF~GJANw&Yz1hqo=UmZoRZhumw=(cZc1Y$p>oowziv6nQ0I^J9DIKz-&SBF{@k~7ijJ4eC^8(LcEtz3HsT~lc zb!cVn@wF(THNibR!yd1(?1ws%b5h^u-p2%~H5q(Y#UJ^I#_1VY2x8KuNFV6E5OlF= zN|Hf>AuaCk%*qGn48J$qFVNwq_9&j-r|P$ao%{v9V~0kA%k4!`&|)tl!7MKPCkyDR zQGbRw{Qe18f)~eAn$7Kp4PaT0@!m?Dc&{QH;i{wOc! znVlQSX#bvczxHqN$%A~7)_N>55f_)FzK22Aj z$n4Ad-iCL!)B(u&k34AKeweqqul%{aKSiZKy9BME82SyGLhlujZl*4+<;w-swd|mQ za_#sZX~$nQ19-BM;BZuFi$v5TQI_kNQL$B>+JwduP;T}dWn9|SPDUD`-kI8g!(_#? zla$sju_SF;3!-$3nlrc<6!ECp+h(!-k~_RioU&%sL5b#ukoFP|KRaz){0jf)Nk-wD z?qgt|sk^`*#k&UYer-wb*F}b?A8`DU-a+V>*7O`W5hYRyMZ+m)Nmxm|VhK4Job8tv z_=fecPr+zKGeO-b0OD1q@v}+aCiiaCs;bV6oosT`FanD0bncv}ha1%MO!G^b#13E; zJ11ZIy`0u|u@~Ewz35pw`A@)gpAdgOxEh6_`+r`g74e>O zQm3=SLb^c|w+%_nxG5PT2Q@pS0G_!H0cXY8uhA&`h}1IgehAzF-67nnQSa6+#WMI; z>}g-X_o6;gfXNl~gCtFq4FPzTCpRo4cJ4zD(C z64AOhn^voKSfEg}P)F6(L)jJ> z2LB9uU?ALCEF2nIftJ0F0wYr|AkqB8g~&g|&Tf0{AxGysWu>@I0f_(nGWlDr913 z=jA+_=&b$M+2X#`H>hGHGnJ1s(Z)eq26dGCGC3>^ysrJDNJ*->6!?&H)-!YX* zG0<7k%A;4D)&F50eMFDqdi3kgdVZGnv=8FFThRG{o;}t+Sf!hnb@T7|r~Sav!}h_C z>v2DWh~ML^e#caGt{#n3?~|STF9Qp#O0bmegG6X3=$y-QCv}Z^P^||^^I$#?UAi~J6kO1`f@yG4YxVp=U9M@<6C`4-ZQ`yw4-}parbNEMn6-%>lpv1&>tF*pYLB$ zUVC|Y+_)dT5T(pF~WKbbNN3Hj&3CDCe>AE;yf?RVTmW8$O2M$s*r3_}l4x-Yp0hL4#q z2w#Tz)t?Tcbw$SB)#xLIX5AH4L-CS<`tu4C45fxM1=5c_9c&GX2uJxe%0tVqwLXrq z1o_;IlG7;pw-wA_gVt2~lR0-EBb$JFV`pz#^m#5J6I*1vA5447mnqA4xfKyf{_pOz zVkhST)|B$Xrj~m8+9$lZ~b@$zBPU3tn!Xq*d=n9PJX(=Nq?Q2UdYZdow~7P z+b9NZGC1qdeL96i?BcQ-}bZ;5vB^ZqHEQ>wn1_BD0gC8me+r=r7d_c(8LhbCpXOs@Zr zH&LCpTBoO-Gq^08BRgHKgAQj6(Gz8K1OjE1*=LCse#|s=5Kj5ndAj_6o~M{z=k?a@ zE*qZA|GBH?ZL#eu1F>H{UQSOLrAc%sd~fx?=AerB1tyj9#Z6wUA1QOL|5;+BdVAuv znajwL#5~16+JTfh)}I%xogXFB%!0)owJp(jvl3_}{+mqdWO3euVE&R;?sT7uE^6wV zr72S^EbML-*^2Z%=RHu7I1kHPuZ=S}0=i)0W}HfcXHSGC&nt)>Z0HAFWtRT;vZpeuM$#U} z=9z~-!o{+OEwAOZz9XP2qY~MN*>Agt$2)6eZDe-(3;jPlp&*Juzz^&?6_Q1+zkO4n!r>Kg}g%wNvF6DJoH|5S5%c>2H-#yt$Z8jHG_8bofvR6^L)V>6JN?L`p_IU5sz7(GfTwOpKcGElWL&t0-yDSfs z#!ncSSy*9umpIuX*<%n>TQLfKGAX1!FR3V2&X5rtV!M_}94o$Kp49^^j~-p9saLZI z?|#&K)k%xXaNEX>h<|V(HV!MMR_?c*MaP3VTtUBvDl0+gEZ7%n3tnjTFGdpv) zzpz5#@tWny8C{tN3irMwP}oYmP*_=6XUQ&$FcOczfn#LRCGCbl1S5i>-{m;tH2f6I z&-3(@Tz8xhiNDJAIjTOdxx_pn*U+xy%Be>(7Na{`W=tJAM*wra%OA@gNMyZ?nt~7U ziLLHb^KrS`RZ<(n232593?Fy!WUAu;*x9nO_K4Tktqsr2+YU1#gXnVx% z9zE@1I-%HnxFqt>*)rD|!kMrAwL_G3yOV^8FfV)DH%7Tbtj%|a%O+Pk(JYQBda#1? z(Grr4WsxLz`O_;1d+4lMrZ>&ICUnCx_|dfj+%M`;y^&}aa_Jpze+{NdIak8WA`Lth z#3%}z*5F@R1I=yg*6gTLB-@!-gObgH*{o^KKE}+hPFFO$46G|UZ59K2N6XGo2_dy* zWwB|lD>tq^f)AV>N122#&!}V@^Cz>gY84#H8p%kH9(M8f06gJQA`^}@e^$Q>5F)%nb3l}hp|yPp9jHL z`NnRCiCk?HUI@UBGh zjabJkkO&08@! zxQu7HJ&}?hf6&VlHWmtktt#KlmUP}@Oa4T6Z9CfEFbg!q0^Mgy?tn{sTYbrJdo2C3 zsMIEfTB5iOa-=L9D2yad^k-L1?s9Lc8jXPh0V8{s7^_fgM%bCC&y_+(5DdO(R4^7dF+na{*wgauGVVozRF#n23l3%Y}0VXS*}e+ZFxDxkE_a{Zp>BQfJNe!d6%CG+%zSqKrf` zmO6U^S{AvZHk1(e#>ivFK1-|wGNVKm1Q#4ETR8~9ra106TW*fF{{kcq{(HozVH%Rwv!Bt8aN zKt{2x{z4njM&Y)MyUO#SqV5~2#J^-o2ng2-1shE;@?ymdA0UkkykfKgT!4@I++&_l(T-Y9R6B4G(jcOHSAFL zsp8s2J-ultpkKx}5EU~I3C3zX6;q$LNPwvx*hv;yJ#uv8wwEAhH z3H3D?CmoE@z|VFYI_cfIuCMgJAqTwfY?Q4=0xS?3;ns!5+jhH8DR7l{1mH2}F;Zzt zWms34E%>-}uU&q_)dWss?yMHJj^NMag2BvoPxe+yWacw5r2-reH{S5mUriFt>H=u} z>DTCMacI)v=6_w!*Y4MPB8l6X#b5&cQT!|rgXUilP_Id>ubcpVy@^Xhf2p)R_g?3R z5^0;J;w0j?)D+DtuO;)1IempYEo#D!c7LEW1L{k=fp#0*$t-K2b4ByUEO>pT2)T{` zrKQk9BjLV$O;lY;8zc6I%xs1W`7bOa3-!K*JV&A8d;eDpX;wJgYwX?nB__*GA?O>w zM)quZQA3R!a>Yon=L8R7Y0~1I_ns0csR3v+%0~7#{4*K^K=Vq!eBW{3`X!eYuLt)YD0w#3hkHQZYSB?CSnA zp;&vmUoZ3&3{I4fgh2*T?JBx>NpEDRcY5TU-s!-}bl?PMd}q=1HAOdon&7=UrHf0f zAG&lhyDdYoak#)$cKu!dydmc?62QmT_albeCY zYFKu;OLxCU|3?w*Aat`OA>FJc>N2J#29$OQ*0Z0QAVkwS(1Z#%I z<8D>oSc%FE zY*GO|0Ls+7T6p2c=(ZU%Q4s3H9XFk^xkYf&U*>h~6<0gy&#K(;m%wV@^wPHtZ)4Mk zL%(qSweerv*WlbgC?4nbp0Jr_4dCIOx&weeqq`fXD$n0C0)==4w!s7nsgv-DyNmFh zZhP6kWpeu)Lj{;k4UOS1=Ldq#wvvHS!0Ep+uMeQ9yjjmo8$esp^drI_x}0LJ8q}h zodBvZn=OQVZ3(z%vjIq2N831mvlD`!AbD6H`an{pe`6JU-~Dr`!3H~=E!FPp#opV* zjzDA>Kj6Mzm?^o)f7npq*NXgQOR&a7mbhKu>t8t4dzOt}bWwTchC=(S=!P19_SGIO zCdk=XE|SX3n5`7iRw9NEW`guCJH**E-STfYlM+&v-UE@S5cHwJOKP?E#kt zKc#@R4`Icro;SlL%icGoI`0%!ex1kQhM~DukNRV<$wlS# zYIjiVwv`lkiyl%utPR_#tHgWh=sDjTgkCQlJy`ux^)qTF)4HA?@-KY?m;9%QU$hsG z27HL%2l7>=mVZnU)xIg}9=>eZe81EU7J8V0+`Q16$`Rj`>aNF6Ro{Mx?TA8V6nhQj zKH+|JvN{BVZGS5DBjKLI$5SNm5&t9?XI_iBP*pJOmfmQAw>@_7Owc&uyRSvw;KB33vGyR#~mZ=J+`nAMvG?70r0exfVn1b~|5& z^o&k)B3&m+kJ|j&pr&48li#+5x4d!GMqZ@Jbe}0 z42OvqjQ8XWsu~fcNiW9A_xKG_XUkieZWS6u3vmEGy4k`d1FUGZ($L z%*kBZ&uK*FqW^Z*ym1;IKl{}eYrMYhzZAD`*CB(~`T)ZTbu4|3`&~xhFCs$GHbqJ< z{{?O%a=q7fn(EJ~0W=qN5&Q!VH?kvw(s6zXGPS$U;b4~YXPN3RB2Y$A_1@mtgAvGM zYLZsO=I(88>oS?pOJN4vZ<=cDdES*>AZE=G(&?IfApqa0{`|>Ao)elJv}p2FN+GGZ zgH_9~8>-xJZ4<{M%;Q}>%$~%>J3h!SQtr?=mD}v!Qt4kZi5F@21315$IM+_<%fKcS z-W__+S+j)?RB)AQ2nj$=wDIRnCFaXS96`}YY(-;DA6gg{ytw3pm{#va*Jy0)MWZg(R@vJZdr*UopG4&QxnAr+x9veRdh^A5wLYYo zB6Zu!$_mifIO+1t(Z+pt-q#BI5kAgn_6)HuQ)`;ZvPy7B_RxN-zgvmw9{t_f*j}DU zy=0p1$idfM&PBCYFKV&oSNd~WFcSANGTa=%f7VHVUZ4*|dWOA(TfV`35&9hyQG0#` zx~jn;<`W&lS%jWg#}LLi>th@FE#~o<*v7T7B%U(DY_W9$PE)_(8YiGF@K?RV3}hBW zU^hS^JGhzF!cjq$U>?}zAz_yr%8S}nuEKf!)#pFxK>mg3m9Q-LWPE)X+Yob4+Y-?UEqYo3b59??R*tA4-}&~dEf zOy5!R%R`%)OscyW6sy(TI51Z?_su0mL`IojMMRBcC&fUFM6o)f2lpYqi z$rzoWLQE_@o-8FJ(9y18vw8m)Gq+BFdk(nYol_YJwvN(wrD0O`WIy=c`DJu!ZcC+q zEap7+AU5d*!FRcS0A}q5v(3r|8p=wsw9-wR$m+#a{#|ChfP)ci{h)+DAR9KI-+Z68 zBdMkB<|}3B;4UF5MpMQ+w7zT2j+CRQSRaebP#a~hea-I2H-+?L``tsQU|vZ--9u;F zQ}a1&)Et$+vH^%v%&&2v+*9A0g(h-F>&GF!3x&^Hn%H*a*8ZOn-;LuzeDDe~ytGKjH{_*+C}Fdz@-{|G`GnT3!D3^E z7@`5IYxQp~Hv}uVmUj=}EC?k%Q#t`Bm1OlLx6T4_k4fG#nMYHZL&4Qu+L*%PH`h#n zmf6~isX2f<%UKl ztj`V|F=4NX0BUwm8HAf90|nYuy9lHU$|co3N6RQYQs-)0w!xo_Qa{e(4iN-J$XKo( zC{2_N%u+b!(dPLS;C=|hRy%?J%~eR>Oq1%R$r#{w8X||}Qe8&nvzCb7eMFa7w=_Q} z#Beck{e$9#&2}f1h0p+al^^3ZaMRcvD$uOXVV;7uI#hvmeIBfsTY4uQLHrMfM1vRI zr`6f1?bdpq_wIzJ{PKIz+hke>iO!lk53_g6{+eld&qNJh24PV?q#J;FGBxQ`H+7!b z+000x8CJ-sku&zQq`os;LVR>}mszO|UG&JZC1x`tooiRa*eI)s=r}QSv|NU=N>UrA zx%jB*q*@3oH_TpNY%5U2ly=!4p^<{%@P7mQgM@PHf{~TOCv4%`)(3;FJkOmk#JUFR zPfK!W)T%nkZ2vnPv!52X>7>?E4qgBbmr(6R2@%x2$A~p^XgEEVVI8N&CTrhp< zGc@+*jn0;cfBQp};>2Y{P14QYX3ib>0!ww~x6A7;nvEkq4=&|_sbU$(0xsobtau9p5n4c2wuF^pH~y%uNdsn&gyC6K&~Vzypy_%O-X!ve>mXJI`~6SuZ)cR zC&ZU#Ki!FxhE<7B_#e<>uxarJE|nb0_8oeW(n9Uo^FY*=`wY(^?fE3LvSr>lcVB;U zupS-b-*7$~OggDR7i|v~#J}J#DkF?~Mf`F}Am%j8Cm(Cm)wRzon>hhdt;gfmT}Kms z%heNSqZZZG~&F#U`M4*{Xz0FD4SDPa4*B-*2vL|?%sT9tS0Z~X2CRchb|>;l$%RZ03qSy@ zRXU>+fts^~88TIggp2b`Wj}$k#JUfB0|bMK4(sg`QH;~)F0T<>;6o`@1?F?jcy$DMm*_RQSzo3SaT1Z?4&LRTHQmKR^3ygiz+9* zTg0xlhgwGZ?1&d7^fiy`jYbyt&WJ=hf?j5y-WI1o=eXFI8l)FyCO zzN{Q0z%P|y2|6CnI4=w!dHTXRnEF0vVxVCh1zx2BW;y0?_j zow<|Gq-qtV44^jFkCo}f*B16CvtM!H3; zT3{<5neg0%!%TbgR(zSMDEN#an9v7q=wt=#lIj;%fjS+_k>ZdZ*%LTGqa@o{fXVOq8&`#|ulJIjOK9I9*-klW+F$i73dInFkT-&bN3F%D(AyH7CuR z-N$$Guz&*?b(#67FDIQ7!W%>tDyxKm4Y}iNmIc73bB|S|KTQ?~)qgO|bYA=haMXvA8Pm z*fg@sYTkI1f#*CVUB}i_&I8N0-)&Gj)A0!ys^mM#j~}^>-Fuc{`EuX#mF3OTQ_Z(k z;kO|<0387s93TdN5+4+zVuQKuZvUhnn^RhWLGuL zAuI65m?pMvRm8TEF;4p5sYQgO!}b_|)u2$Aqje)*bvo%m2pVdsgZe_Myrl!H(@EC3)+{&T}+S1B=1!oM?$q8v&p5Lf@Ph8l<2d zt|y53v&tvzD2lD8GlUS?nkdOMye(5G0?%xXx`U3B{^Eb(dP?W7HuH?})!Wiz*d09&z*8AV37ds91={rUG3 zK%skuQF02W)J!d?x$}+w){l1jWls=jz}v8baRetADCrT97baI09YGH}w+OCl4g92= zMejGxKXX4~W@I}y?q_Btg_6ki%s0&iI=pe-Gw!}o?lZ}?3r3Ez&~!li7aX1_wrJeH z(;&dMasFqE$*yV-Lh{ie2xMMO5h^I+W6qy!q}h|1dvO?_&J&I=m_mQ29S}eXPo(}L zl`=}7!R|ldySYIejTHd3*pkQ~(5boVOpX@#ty?V}P)qYBONF2ckQDFQ#n(~+9sU#b zLvC?`>ElHZn0vF(Sm@hTu19GyO0lSCVgiHLt z##u)Z77G|^K_Hd)%&G+vo`-+pyLpF1NX_5!nRH-szuJ|CR6vghYI2| zIcD(S>kRLo>~IJd2Lkb{MSoZAWQ-ExB|#X1Y$(t?I2nnIm=i_@;dFC~e~_z`{3wxz zmHhvh?OQWaY~O?K=tyv#>55U`mG;g!>4qNr`?XXO;^xC;1nS>RFkF2 z_(?;n74!<0?$>6iS^ML3s2>9~gKFt_SQ|J1cBj$K5#58PeWTX5dUaHs$MN94DI@M@ zcL*Hw@<98OAE)L|gfC|0y*QH>W~DX5!4}P&p?q#hXC$}_B;7|b8|!l%z61lb1mH2{ zB1wix0i9=GU1pe+^fZ-uNo5S5<)yFEd`M0(AORcH6&25w(etCIij`Asl3;Qi0YZai z3MwUNH7qG=sKkUr+yTA?t6yUKXxYD+H$(4Er0s5A(7$8!ahy>YHXeWv_OR0Wur=?) z?fURdVC(^S;~lW1M&A+q8&|zEMvg2BPT=Y&CYqYJm)Gzqs>Bc(Jq-O8``sq?yLp)X z&iZ55&Nyi(SP7c%E$HLjDZ`w(`10V3yvVFP<-PYKtqpL3Iiz(P*Z&)&mFOW=;Pw&0 zOqo6+5TaoFkeK`HCkN*NvKsyPywUf3jM2Zw+Pks!QR5g7?`Vl84C84!sD^r`{z~iO z98=G7p*o84sAvE8(Jb|fxEdBguS@b?ck|lv0!p}S?E3_B!#+&iU_^G|nEs)m%@3Ur zT#D!yD%^sqeb~x=A7(9>%hTS1&cKJzGmF};#gfT~r@3qGj4?yO67$-KKo~0=ed(XD zcE*WAK{Kx{m&+6s1or~n^mbT%G6!0bqi*lw-eHT1=MS!Lm3iNtcig)Ld3@(-_FZ&e z9`kkbX02xMaXY-|U-Moa{GNGra`DVTFy4Xt_m^xWg#eJ-z8ryTe0+`Kvue)QNL-=5d2y}Uct zJ_vgkg^D#E5A{`YcLH}Q+0<3u9_xYAQln&0JDij&R*PipH%-E1fxxsS1C50hPWoCH z6LC~m)JeGenw0B{_WO(W95@wO3CE&MKqC4ue9clVMnc$+peCc5M87>J)XSISFXT*Q zp7G}`QH%Z7W0%xh;bDkz0z$A}>Mhz6+LN_J+Xs!+$LRK(jmZao!;AL#KQ|V(100Oc zo@$H^{Ay!%faT{Tv{2~c&+#8#N58PORRYm1_i-J$sFE|tV&asxmbkN*L}kB7#}oIe zMmnLK)2LstAvW~kWr7GX90@+BiZE>VlWVEPe?o_z{?A1_jCl+8zB1hL@7c+dX_)e% z$Z6f};5;nWoS_`JsSczimz6s5wEk6fFttU+iBsyv#2s?3olsXCAN7Fx6aS2gWN5Z- zjFvGzhSwvj_fi03rQL2L4uV^vW9vBie~M?()LyOA9^c(ft!{lKriID_RExp&>K~hi z`un2y(EA~OJd1Znif6V0@~#z==MFN)=k|CV%R^Vk{K_7NAt<*CIb7|ZxQKj2WD0#m zt@r5^3HDrlFjbWBTg>><0IWiRc@h3(7Dm0#R)#%IEA(rIvz?jdNid{+8d0CBrx2~L;|)@e?@GlE>d)SG0vQN?p_v5youhN%N|WQqcA!nw z1~^@`Cbpkv?20`H#uBQqxP4ApK@xiz8;CA7f+C#S08E5HEGR9AzfpUycCPVJ^p7r(nWu@r1tx^6;CLRhd@$Cp5EblIGvzzTZ6)DX6Y%Z#j)>V}?i-ib z{0Qg?m03`B{q>cl!=M)=L8!+5ZRs^KhECH6J*gfz@U3uWa_4QWdz4|Wz@I%y?XOW? z)|k~ve})$Zb~Q8BZzp|;o+*u1VgYk&KYhaNbu=Uw+OKi%<3Km;@~^9ngUE)bf{DEC zpc7`W!HF8&qCI`Cz=P|dAS=#T$7`a1JT&|QYHSn9e)rd`KI?TUc#m?Df)h?wr1;DJ zEG+Vr(E%G~Q`M*l=O_k%?g)!)QV|*KErCOwZH9DQyBw&SFRrp*q~&54e8tqPyj{^6 z)>td@@*j^F-@yM+OZAm%sIPuW9dCnwrF3p6lQpO)2mYp~qrytR!$u3rY-n*d+bzu*(lA^OmuYc>%by}FUQEh8zm1bK; zYC%Q_XA4c6_!C6GDkxAECMX926gtO|@l)JGqX=3aE2$>(Qk8K6JcEelxd?;iIbNam z75P~jC!ZsG!t<>;;X3x1f02Rchp5}1Uxgy;j_-46wVqprq>R3wgDVX6Zq0e>R7#lq zGqay*!b!2;JDhqNugnCAo@Hk71*&zsN@d{>32CUbZhmaMsJ~j<+h8{1TjZ`5o{m5& zFA$s+7AHRG-cp62@OAafx(u~oid70$JaC5ea)g-Hp;>w2onBccp!s?48%zxnsFHLy86Y$1$M3FXiT%g`#V)e&#zMc^T~gv{Qj z_0@c$@$~cA$NZ+K<@_$3I?Vhz-|Y6DC99_Qx2eBQEHo7qCSLRx_4DQMtd-Gsds6&& z_3SCXF&Y{MJR~j=a$bv?#XqCFzbHc3mc5Br%%?}ugPg!k3Q*!@c5{g)HfLWVycEqt zS${ucXz0Mt`WlQ4LuV<~<3muvPf$QF7I)Z9xq=D+VkiAIK^8PhQSPk&BaUlY>8l}b z7DkoGj?oCvrfa6J<`17_8k=ZaSV41MqLvKX6V?+w7ZIs17*93ce3E003-004?2nRg z`GdbhDQthTv|(Z36}2X8n1k~OV|8t80hjF&SDf_wdFlztbq|hT`XG z9vHrvhwyip9xVvzYLul1h(;z?Odc6OKIbp`39|2ojEs~N^Q&w;Q8_s#o+tPMQwuNK zo&>bLRz)14&2qKn_A6gY1q=#L#)YkmPRf18DBQIhcvozC0<c?CDkz#=dG^sOHmu8s3yb>e4V6sRRm6i_@AiJzt|k|-6eFos+q!EkN1K)^5bfyCQx`^5#gvick7WLqC2z{4{mn zFzDj>#QA2M;4#q>^)Hcs$w*0miH{hW?@#V)ubO7o&Y5D;X;^;2JPO9Dn#M^C?Gt`u z8Ik59@e}>kZ!(J_!O1!2)%&Zn+g9;{2{ zfLoE5Zq0^VV+>E_wLg4R=I4#~n!8c1VQ_*mm+TMVHHTh6nYKt1n@sX) z_45bcuI;=}Og3{n)Vy$g&k&jg#XZJoL6D`aKbs`~S!MrV_{P274_k5&wnBH#$MVOf~setG+!*Rc37@S-TmqX6#zv}@oOvoF779Esef7*Gn$51HW)aNy~L}^6jW#TkCX(f6! zpY&iyZSCnYms$(D2Q@-r)a?EpIZL_r(DKpb7_yd+KVz`}56j2;JMA6`jUT@N-OJxE!zaB{$IG@wtVwA3h#|X^ zTFt$)#wfsL;J%P&55m;6fPk#8R8j>eltKUe!q`~($hrqJ3sbEVlHc4y)IO}h&-5fcK!y7b_3POEOy zlF~qNoh&{D>u#Z@hb_DRb6IL{=t{+Y9w!v%n8XO$N_@kQb%LeFxQC15-@?v1zTSuy zu}&41UrQ$zBFrZ5ZJbtPi+v@SB)u1Vq&b4Be6+hc4-NfiCO5^yXhnx^Ap%SXQ^6;#7V=#`Vx-gs3NEsZUst%IMv%7HK zBCRDTf-R;>QBdVNl)b4^7zhVhC;dD;A+c=#P5A*<{Yq@=p)t;CWv9XR%31Yuo&@J` zcfNFqPD;7soHdH{nrZpHED6`#r4lxThS~Z~>NeHFZUi%Mr3L*OzXQf@{cTt^PM6aE z$uF2}pkC(dFLML$2P%1#aAs&(1ax&fY3&EPv-kY8Q_>l;%xHP}S6mgX*(s+FL(w@@!niNj6txtiV-3D$ zs>NZpCQ$G>VZC30_j5ejWoVzw`Ie8?x3!DcMie^^PH!;Y?y?N2WIi+sY;lg#_v~H7 zoDn3v%4kXKMFDkB==oCwn$eq$n(K}0_}l)Ju7lN57`5*Hsv+@&1>0l?WV|&_4$wt5 zZwhDlc2!D~cR!%fuQKkkvE9b|w9~5PGi9qhj&x%WcpXL?FR#8mbyW_!)Isa^yXG1R0APp5KLm_M_*gpp* z$qx(-G2Spgx>cM1f2_TGd{ouB$32so;Gn@BG}@@CMvW~NdJa+B5(zaV3{WJ9LXawH zZKYICIW5ABpb{O}Gm`CQG^Z7{t+ceIJ@&0V(iQ_ENCGqiN|jp?FI7~kGlsT!X#lb2 z{r=Y8lMG(Y=X~DJn?Evpuf49%de*a^+j(H)k&YgzQ zBY*zfyAG|ATFc3veIA`NlT38VKWjKfa4KcGBqWtg^?oBOE;m|yBd7eDJ0pcnztcBc zY`Fe1wg#?0Pvz@98F|>Gy{iQNGWHSgfhWlc`pejYjsCi9MSCJaVwe8Z3I8`zhrUsh zP^w?pJN5p-gN)J`5VDJw0D?a#l_T5+6da-Ih<)05$=*__%iWqcqc1?vn%q$w=^C}>HCtJGSx9XeV-V?S&p5A4_AeLYO9xeXF=-3^nGnAXSW`oc%MmZ zD@df)rC#~_3Q{M!KTsw#boNqyW2ZCKr_8bmZpOth8C&1dnl=q@)}r^~!Pq(caA|8fKU0GyYwX18 z4&Jz`;a;XVU)t0E3m=*{7wSi7Z_2f71sS7XY3*n{lFa`-#_wm_F2+i zGY_Z}>LWFyBL$^CRDZM8o>&b8I4kI2VW$3r1${lW|CuI-8S5T0ca?UpULYBZ6Al zyS~&)K1VSnofIEq^2YFhEwk2KS&7PqhB^2nd!x1ST8YIRD&QFM?WY(ij{4vpFpJkb zzp%$U?sehm_Lf@XHQ>=Nsr86zb8=2`M9Ghn&zqe5a!$9BaZ*fIxtyKHp;H(p9ph8# zTfD0zC&<2UFa?Lxo$gf;`&Ky6)Hr=L7p{6=FFZYW2}$00uPe*Y<#6tdM42-1D-a3O zJ@$~~4tA}qGeEofi#b`86=2G<1HTG<@;Sb(92k|!r27>}7IT%|agyPi&QiIa59u#4 z8r9xhuBOHpG<7x=DOx`aY?h`O|JsA!>iyof&1=`1pIL2dJHBn+mzp2m+io!LGt3X~ zL%jF(vy|+|o98UPAtR7Rh>c+>+@=cmtC)#SD~(6Q8g3IV>~iNs-03B;Q*161AH)G0 z`xbHVz7iY#QCSFFZHS;wh>b9w_M26#BmNDm{Zf=@!<-}M!Gj+yIi>43H7@?pA&N=ltgv(BF~Bz?(6=RQsO&Vf%`8+)|oudeMj zL4&q1G(k)&ArJc6VnA=0xS_w-%$r$a4DJ+N0C>7PZ#e3A3)FssS?JyUdhTL=dPbKd zVo?S=^rlGeJQ51}G=x66eO*FRd+w%!9+~b8&wYk6KEBS09DXS$t+w~>?YG)o_V~U1 zMVaaCi(Fcgy*u2;=pBa-%HQqhUt5s>Yaf^2)5qQ=g35ZG;!dCH&MC``HhKr=40n8~ zJ)tb@%pLDcsB_-#d^H^0nJznZfap7iIbQ{l-X*6h&c8`R1`ZkQ#VyL{yvyV%;aI!#G~JX{cv`0OYX<^&+N=5 z_^ZF4mZ;V?X3@Jkn}99q;QiW$T+@a#xzxR1`{I zCV9A|s7&1@#<)Kj;Sf4}zc#W=-3X;+>U2wKpr@o5;`O4~*`Vp5 z^nwL;*PO>jkoL|m0bBo~u`eGH>3$I~<@fK|5?-)A*W(7OlYQO|ROXU0ckXrW=ppco zs9Te#N%OYOtYD(buV*pSe@)l)1xTx@7QNMtcnFsv_p8IIdxFh72FLfP;;#%}v`#Wr zFT-}PjX8~5oaU|b2SPm(2R?9!xz`lIZ=!zoI>7^;?Nk1G;69Vh*pcHs>9XYpRLE=N z-u9-?N*)1B@-x43cJ(&a=ioM{td;w7IhM{w^G@e0MVT-#1Hg#=QEAgkc1${|MQ<2t zF{0V}cARPml8@8I!v3_I5={_BJQFG0686yu0)bqaNJnNRV zrU?FI*l>bD(j({AQs-(p_&Zn6ac@=ZT>_~Eo!_@o0^YRdxw+fK9%fe;2hg2xZqK^s zFts6ATaVzy(}FQ-2hLOkm<~2>^_9hgo431PH|{5wYAg%8{5M1bryN8oK?U%((fUC5H&8f@A+n23>$9W^Jxc>*(6Y3J;K>(zf#1_0#>pEy6Xz$raze|N>{dDe;jzMUtU`X(@@LG zxr3Q1Kf~eY&Lv0$F3cU`cU)BkD6Xg)+PE^*xYfC$Dkm3Mn#|N|I}bQl&(0~hAzP1D zboMQ%q1$JyxDZJ2WsFGanp-?AVXV+tv5UysP^hnc9g7s_!JqZ#;rLGL!0nc~XA=!P z-%0R9I?lj0g49UCM3vTNbAXuNI+f^nZC4l>y;Cyz}gHG)1XqGILp` zyb2T_ocR6mX_zn46GF~b4!GCsq>eLo4cy_eTuyzZ;r$ZMYU->+E$qi>_uFGe$Bp1d zR7grLjvfS;Xiy-Kn=W;VhvqGjuIL*$vh>=!dL@L4ERaP?E29?4qR-auV5NSjaYWyc z7D=N}MOwJ`V>5J~mk}hTDa}nXSh61fn?UXmsx0L>>379}+~?2=`HGnS{m95m!*q;J z;lPnD4**nrYI+u%5fSZ!W{zJA_(3X6Jz+d+KA86@vfB-nL1?v+VBm1>tT{YCSMz}v zJ?3+`KY=-hLHP9hD5)-=>g|_Yw)xb+-Er)J!#oaI^BLs?%KlRu5A*>+jFZk?n+xvyp);ti|3`=`Q;U!XekH^UT;>aYS{qaU}Q zj+bIq!l^`Fc6zJ5{*>BJ#crE_6Gq{9ZRl}ve6cHPZ?KYD;J2jX?<=*zBgoHx84 zBpqmExf#T$4=498AC7)!<2P#s?UBf<8K=v=&pP|GABur}zyCg}+8c2iy(8{&o33f) zdHdE#(Azi9c;WDFdvg)R=%i$8tq0{I0HE1q^4aXyKCm~3`|^2+*+2jG!4ZA(y{^zX z0tU#}%GXi+Xt#VE58&?$f6^8IuBAi^GJ;>=_( z!bdnyh&hsQZddm&^ZUQq-e8kvYoj*oiaUa-K2a0~y$}=z_6CoG?9*RSLr{&_0Y4u{ zRx606*CC%OR!H{6U4|fFr`c4PBma4W|9MO77v5)o7vrdj9Inxt$)(aIlxp*KKX$W2 zU;s|F?qPc&7zP^P&R2`sjhx!MU81jsxCavrh_$i4%(=##Cg4O2bICxpVn*EhQl}x3X)r7>VQz6A@V6&W_$-@kBpn+NtRa4Se2;bKvy`wmSLKGW z91=%ww3b|Anz~``?}*r(W;J_V7aIT7sFPRA{Celzu@|@rIHd6cIKEWH0-`SUtWHbS@_phDM)5KZ+;oc7M8C z){1#yqL`u)?rpP){Rr1^`9g;qFy@2}rdi2fuzjwQ4tBWp zF@s@$G+T&f_LdzUiotx|ELMo1yJ)?@j%nAqlV-ZBq@;1j#jHoh*0Ii=ec4ukDXe9K zC&V_`g(J&)cW%s?Fh?vxKxyzjPiJ6D0A?n-h5!6)*AMZFt9x_Hcrx&FoA%q$?QoY? zs{&YigB}TYZp->F)FjsBRT14kI4x|{+=IfWqAn+j!UO`~uhuqF`L({S-DzBveeNb` zQ{yV574--&=X^n3XKn>Gjl{OqxZ{itlzxYIaC`c>(XAtIiQyAHZ#*ZxU}%VLx?js9 ze;KRid0c_+4I+)BvIBOHW%?L4#pNzfaC-$W-9eR9HFvG2&2i&v0kkM&b_v>h_Db!5 zCR!gimuQg-2xgPa_B`!P!B+2r8>a8maHJd`gZ)83ju$)fo0s=|N2KPxx!tT(f)yLm zbwvUDEf;B!y@P|Ln!j;{GacTdr>}#NTvU#Fme2+&=d)LVlV< zuJi+T2;@D^e1FHU=^!i|;L)+Y8$du|-OVKkMK}(mz63hU8!Gn{oBz+ue0wvUE!>4V zvj6y=cA?c~ru|)rnf3^7T{*Tea3)vGaw3K~)+jg@Ysr345;w`YpZ3;EZZWBeqjzxR z&OE^Fnp=3xM(7UL!F3?fw7Ru%l~66&-+}B+v~IP7XgGQ?%{XLi(?%~Unm=Anh$K-= z7DOPYyL=Ky%i@IQDQdwtQ1c(H?XOz?U7fE!oJYc0>5RsZ&Dt?pMQz~6g){`M;n10|EU7Nv|$ir}^I=cwe%jrgLpU9fQ zEunErot4meQpTH1vGJFl?6Gy{VN^X+uzq#MTCnb&! zvX;mVWL8`5=e%np>gN}xa0}f*)kRRX9!;v53Yf0zuy=7k&LvWxeb#DkI?U|$aLsA( zN$1pHF_z;w_LeHc`k}}0*9+NtoKw5^XT(zBuR#udEYz3izC5_1yyd~S7c>lEKR6T^ z6$s1;#4fyfArGqpG43{N1mL{vK#juB{y?mRpN>HMWJ51Ivt=+F&e&SlXzZmLyo&;E z{ScYRR_GDqLMeJNTyyY!Cx$ah3}vf^_f(C{Mw6lFcW?m)-V)yfN zT_D!RPhBAX{q80Hcx9)&0XRYZrIh3FwxN@5T`iFGxPF#??rj>#Xto*d;gD1^!#*WYF92Y}S#LP|L1CJ|sT;n|^z~e`G%>6h2{PB^alpM>v z9F^qwfpVny=j~VH6!~*Dt5t3Ho+jdSoF<5Yd(s^JzU)au*6$RP9cy$p<(jC*-?Ys3 zOP;gHBN|pe#Jd;^4?pb_UnHksSbQUknJUj?DdmNbEcXZ(emkS!+jhSB46;re_35LA z`Nkx~xdG{ECGdGTW_gw_8IUl8Mc_+3J*#;YD^l=^3$ZLw#@a;Ya;Jfd9r|7?a4;@- zt#TSF3SQ5%(W>FFn>SWT1IaU*x#w{(Z<;7xP^sO!veUMca@XHf);P4CQH?LfD4CW5Rk>1m~ zCqoANSgDniox-|D`V&QO5Bh&t zj_!ujqug#0KVebh3bBvGodXasA}bUZW`G-gu)r}%^>6&UfYL`$w^B!5>(P0Gc1z=! zba*%GPxm_FYa-!IE3tPkEi*V81ncG1pSziV3@i``W746UkTvU`O}vu`D7fFkj721o z6qGPHgLu#M)jLn7fi!9$(ylU9UsA$UC1BH4!e^AwtOT7hBH=V8d`}60hy*Jo?{tm7 zl2hmckCnQUlpLy(-ZuMKot4~2Mt?r6yX#C35+qs4v!TlLj1(eokbPqp(8-~!_J&m& z`+{}%BjhxLthAE5nJ)8O$H5up`qm0Su+eW-epb0}Dp`{ei1^9os-nwD7X0;zO8ieR zu}$TM^J(KzH9S*K2lR9ePiDTAKhc+8K8Lx0a{X4hF5$^;Tyef%TbsVV%0JUZ9JZd} z*_-RbyG10zKrKJpyJvZ`{n0tb;HHXx$iG=_RK;eG?-XwvpI4(Bd9sgH62(^!jVn&| zTUQ{I+)Vx{h(k-6fdSqz@S8&}qDz@pK%%8$PLbUG5O3~i7Eqfz);ILx{2aJJa71DW3{urC z_hL!=J5O%(UeudQX!ZH@2u#tiXl7q z(knnqEUVZca}n55(r6s^F#1F-Q4xB{;F*(ak*BwTHH(C}{}TW6xQ9cf{wz*}{mcD? zfBt%5f`k62YEs(_KdhihaxiIi*J2KXCZwOPp~!Ttt=GMG#dDhpK5!HUFcNnj4c0wTn{`R3;_> zTE(Z?WTsJ8zuzK?lHu4##Bl1a5T7dhG&;AQByW9*d?h$vM1uXT6^H$?Mpf>9{-x{u z4lJchYH0I=l1=D?mHa25)AYenr3nXSP|bQ|{3XGsbGK<7G`Hp&siHOLQ=^`38Ka`uK)bZ+Lt|{+rY#d7k3l z4}GgG__p9f-;y28Fj^KA93C7GCh3m$p^Dmq=YEUqCkztYg9ZK-^qTnR@+4P_7B zfYb}Cg4oH)%)Q#E@2F2%jvNEcOrrd5If8c(Evv78H2lC5EAYTDK@<>nOJwed<%9KP z&-$@ko?@TEie}^WbnLYF%l+O?v)aD1IqwN2Uk>AcWc1S$J^rg_Y*`}qdEIV$cN+tv zqElEcB|k837o|0u=Dw4zusvBKe>Ts(y$&J0oHFD-K<--QwlgMo_YV8^@c}Do9MQc+ zbSvRs2sgR47e4248DyqScPGt&;d0lCEK!g3$hcZiokf@3@Ftl%NkgI1i9dM%TD<-V ztwl^PPR2^^r=U=FpVlOYpQ1a=%wg?lmNsSNr16&RcOi|Rg>oD)IYgB`VK_VYc`b&0 ztbe!pMf(`!!gE+zaEc6$#{FaDH4$s+n-nxMzgESef>jaSp8eqKS{0rTun4-A!}gz5 zoB}s~0%4tB@PqEgPKUbg|4zpx_FDPU1PBE@^pTM##U>7omUSK} z`c6kxsEFA=(XA_=WiKcTz%?~RMxJV=1}bX1zmtr5i9iY^Ul?g+)=&Pm14*o z7s(ye3;3Z$0+AbVHjV=SBSlX07U%Z5+)tq(>R2nk{>IQRFPr;YOA;d{#s+N5m0ae# zHuv8z>EI`%Ge3E zV;)qmw!(S8*Ci;_i6a5a6(QTuce7rrd#H1m362)YjH}hwD8OsKKln?DU>t_tGR#-K zYwE-!>g!L|>uc=QuDUZr?)@^SKRy$}IV)3FPKNq&mtdI(x<4oSg6_`@vEh9I@LTtb z3P3xO9r0S@9$998KnQ)8Ab-8_XWWMOF*#`d!P4v;&fb{J-8w5Q%)}-d-O*##o#UBYdqD{fTVK{RFP_6^XIyQ6ap+lIekt*S*f6d@_6Qfo z`#b9A&!V8`iEvef*hq$ra+byZiIa_O%wx`z?k#l)DwM}sVLftKB;&`L4d>D8$mTXw zI?HGB;B+~u8*SFA@&31`D}lh^#;pu9m-Zm?I!27$r7V=CjSTx1G-KxH?Vxdu?x$7imS z9DBXHL7+yOWn$bpF{#VUTyl5cqxzDmyH4H7)XmgSinEN$>G$7+EX~wS*Qb2;8Rn&~ z#LEa~FK4D_Wl}{3!aa2(kh{3+QVJoq3Xl0Wp&$$i%P*#BY?91f>O|#)`hL|oLR_kl zL#aBt#pcgb1y5=&lN#3dG@|cmNZ-@&zNbt2o@)IkH}n{71U62FSUO$r{3??Y5LGKj zx2^AQ8nH9}S$1$QS=gINsi>Y9qTUzJ;6?B04L7h1X4z(}L9q`JQq7RiqdfitF^F=w z@ikI&CJNdnjQvSY+DwB1d7)2)m6}BF3hwT@t*R^f09FXGy_wV;+T(%w5ca^9ZdgDH z+6n1skixm3Mp@jn`Aj_AmymLCiO86kc&21Z=;cnC?ldLbDc9)|HqNs*wYpPcvd=BW z%_t?HX?)Hmly#N-E))LYwYf~7V!e<@AXXj^4GJY{BH|$@`{@O8w3Qr3x~>2yb<$%f zZY6`PR43zf*>8lLPRC#~ubURVA&J#~z0%q6J|WQa)DH-w zs1uT(>xb9<`A`z~=bY4+E#0NRcwGi_9o+-6(U!AX(4cz1qIe3|wd4$2U$UV#c zt(IZ%u$gp0&q|)htVtA_w9su&P@!B|P9`m5XekN!LpjfPpNuJ~=BRb&pICWzSJ*wf zW=d(i+clX)WWS)k5m6~+@VLlXR!*0kbeaCMpSdPo8&kNAWnjL#<|`CprFMO2yEeQ* zr-O~heU7DID%8ZSU~*!?S@hZ9^z`yYuL=F7YX~9uUdv0(QD--|_+3?IcT`HTT*7^8 zD2FJrfqq*{e#C#K>ZGo^(~Ep~)ffVb(r&=KQ@nLz|2^!UUh_1jnfdQ}WEnlywI%X) zdj<(q{yeF$p=LldlRCvb;#Fk73Tfk%u@a?;0U*moDs=r|{3JhTFt94}9-GQs`Q@FLokQ>Z z##tVw7O|tSCo9prijrdRUsgpj{ZXltg03Sf#_O4;&yqL{UxcQ5)&&!T)F^$An=(6I zdL~7kE6beGrEbGQQRoH+>~0vM?)DN9>``T~Z=VdvM?w8O65-CRklpn#Vws!v>M=*x zmWx>9Kz_Dso`@bgg^LfIWfe3?G|GkwCpAoMr$ydbHD|kz>WO^QOukAl-&pcVhvhEQ zIslSY?gl*(=LM3OQj8ZaejHaZ(&U;qz|U>`56ytw`UOsEh-w(ELrrEU5*H@y7a7;D zlPV#DAh`~)8?2pMs6cQR43Qn+r>Hih9EdfE(gW@KNP5{qbtP}CHM)fu@l+>sZ-aLq z5H1_Ek-eB8E(m{4Cfm8RZ>KPdnwndOSjih%VB9tW7nBc@S3fMIJv6uGh!_VE7WK1w zSM|0`N<>cGuI^bIsnlW?k<#Z(O0>&+5=rx(G--Oez>xQp$a{51CN;)S&TW?>V)bW~ z#l2XaG#gd+Iy!0}fo*#mxzkpmxBKK1n`HX*@vs@^gYa-pq z2acgXxene%t0IBe+4?PkqJ4uQL8-#Vm5qmB?g}p@WP+ALE~{V24%-9DcOU^H8PO@7 zS}{(%9wm03%w?Em3D>?EY#0mL=!w5BTDBoTXN<9eP2-*4q@#OrG)NPFO~Na4B9i?7 zJVoCd_d=u<>^EOet(0WUXZE(YAS_dK5R!q9tgrPv1gc*+9$C#S&a%^@mXX8z&iBYk zN@O7SuBHy@MdLA5jwtoURH88X&`OK1c$4+;r&7d1T>%r*6pk}u* zLXo;5;Ed-dZQnXoF`=f7U-X_hY-`CM7)Sq(=?f-Ci17B5krPlra3B^^skO$nvg(t! zySSIE@#eupYHpf6-IXx?wUOnqYurC1l+my^9QaAse%U>NZ}rY{EmG&H(4$(}-IhCm z%j&zr!h~*^CATh|7o~sDYL39Y5XoQ4KatmSN|Do)Vl%8cIK9fVI%6)q9KJ?mM z@{j;xq_o`f!@>}up@-M*;M@hEQBNHw?~*biWjv4W++;of{~|Bu-dAgIQJxB7xt4S8 zH2ML8$%c|WYcI&>YvSYq6<%3@eJ>FlLTDq%`1--!M6^6#1DjitQw)FtiRaZ&UgB}O zJZVQ_k)dK4#34`E@r0qg$RlaTh#*vB#50pAVnnwDaN8h0Ay-Cw)!saF2BR?&8YSnE zJn{%*S`KKoN%7DKPwvgA=rr;31@q=eIxY`l4{yM87LtjLnVsE@_sbOW`1}I;ANjxH zri$0PIg7s6CEgbvtGAWP&K@n%38QC2Q>HpZ84Nk|!@iEx7$ursl+19$uOLB9FA_M% zv2c?`4GOWj$e951j5OT({f}pl@k< z$Vx_3lpAD?j<4wX!R@DML+ zTPK|9f1g_d0LuV6UWH?vY2{q+<=kE>UqMELNBvm*8ivSMXM~!($lerorf_a&m7LM- zhKee?VK`xbCZB@ugx2|$i=l3K&cGOSWykQ69y1^qY8W%JVZ75YW*#T+XBgjNrerLe zia#HIYVLYMa-c61B+k^=aFsb#Hj(7q7WM-lpEk;SEC)sL`6=laooBrn8KyM_YJevI zun5N(&r-JvU}#R^)&_+}S4t%lVbtXL^8Ma6)Oa9tc{nrHXlBuPhl+@vZ`-EW0Tt^n zvE7uYMb_m^pmU$#4C~~Ko$XAiMWu?92zNYkh}FF^Z13m|4R(xkjomQ}XO@~B^Cz!+ zQPaH7IjVs&uZFh&H{=Q6dk!}Cn?YxCS-%oh8NXftkxRD&k(pqJ;UD!iUhuVouiZZa zkp24XMF$tab<6L(OGYV{A`bA+I_dpAP#dn_3gP-OztP@b(U~nGh`p0Kz=xY}^N5)0 zulz>;{#h{&3bsr+3|yu{$Uw8*tS`i}zEk4nQb}SU1zh8&s7l^1AcN12HLi1>L7d{x zQnt|Fi^&(=$zEa9-&kk4pGuW^U4|IFen&CtD9!1zE$RwWxtk={yrq-%4$@M34E~jT zcyj}D-1vZ#-lLqGoY80_%+ULaKA@uP*&uFeADOaCl#te=S7T~ddg*A@>6-89FvEt`Z5~jha5)q0Tp9w-Pe5c2?>q`_k+iI#%q*=C$28mP`?*FNsa{cZS-uXlr>-_A7K*R z({`NM%klP@WvwZGm`Bb~BuH+8_Z2bc0b~K78q7kVc3x@q;&N3zkgyT;&G;swmdBfPH6Y)*^hr}dbaSW0Su z?}%?OIH9-rX1%EzlPB*p;gwyivRDVag6m8{O_&PSQZRQ#|9+4$^G*IhI{hwr2(OS{ zt=?_W|HnSd0(<8-)|!;T{7m$&a8SfZ`O#w_3on3>X5WAl5cgTHnHn4MYVvh9@{N!u zU<{p43sSK9hC+etH{O`fmejjM(|X+&x6mxw9V9pC8~ zwoY1hOb3}2EM4~sG}W3f4Z!Ey{{Wh40cvoZ=A>Sal(<)iSrM+uZq`LfRqCoo*(W71L|2)BVK{%v1DK+2bgP|}$SI_LRyrE9sp{>koUhF( zs+$>x38&h(f4QT>xrZcselh^BQF~@qbL@OZwU#GOQwzvb156cc0{qjWgIPgQF5rei zZ+V|Fe7q900z1}zPY$>k&?5wh^Vg6;0mI6yCzOFsF{MuBJNhECb|&JrEU2DC+W%Jf z*ZsP6a4P+1EvTHYKH*p2tm-=wR!X+veD%{uHC}@jCUu?HWZGP7h}pt84(HoLB9}S~ zE3qc-pD$|^@te{d{6K-XOuC(XTbR}Z*>`cmbWO5-q&)r=HD#(BH94xL{z)FYD`7t? z_<9nr*hH_5?EPNtr%HYHof2y9>i(3^zh!?}0;-A0dpZwy~L@$#sD*c;E$2}QO zabEiwvaQ}8GzOU{J9d=WUL&SyqX^NhLtslFdwB+Sa~k0B^p}1zX9F+Nhf#dU=R8*l zI_oy-2B>aqnc0u6C5zP`Y)yffJ!%#|R#G%~)F#uz|Kzd1ONoLm{Q(azcKi=@Nx_J+ zYrAL&RSc?J!11CtF-DP7b1&gCvmQEa>YA;(=I86$4*)dH z)6-3_`nQz%6F*(JlhWv1(~QBQmpLy?yEq_yK{YH>`JEm)otQyq(}nNVm=8C9&t0aLoTIA9TrYq{NC{NBPE(t`0E!`U zzfMy+FOqu{axp4tKq@=V{O^sDCdEpv;3X$5>!?}Grj`5``R4!UsHEm0W$R-%Dg6+e zS^%-?ksk}OOaF*E%lBTH^kbk`qqcu;+Wv_ie`Q+!j4Hod?>PF>vaQFNcdFf!^l2XN z`D#v3HE+XGwn-jG3Rm>j@5(*xQvv-Wz;ZY?)<39au*q7pK=G-=bz=0wRX6aH9egS9 z(TdMwRem9qLt2rvG64V~_O@RxVtgMP|EbxnTj(pQKkAQ!zG2b98O#`$*~1_TZXA{$ z-jzDQoNoDO`UI6_<35FX-3k^4k~A7XRg$FYSAm|eShCu z&sNQ41qtV*uL*|I27I@Mob*=JFrmmvZ!r&H$9!_SI{zMV-tu5!ze1-R1Fe(POi4k) ziMrc6-{;m(AvT+exG~p6(B@mPE8p9}uBqFfVKb$nN7a7cwC2|Gc6hT?7o6C7Eo2CK zQXN~aF?u+chlzpDGSltlf=t>#Ba>2%z`(z#z(dnVO@<8uSH?7KG9W|c-FMf2Rw+iG z`0@I>E6@EzeH};LW!-ofo}N0)F|I2Zfo}QbVkk()vhT^1ImB9Gr1@}&Bd4r(z9WVh zJ6p^MyjJojl;<3mdy3p+R$0l1dH>mUp9bw3SEV}KTi|^DL{g?$X*59_tI&*3$A2Jx zO7~4|aI(Rd+-pi|USb)xtTsh2e5Ypf%|%j>u5t-AUME(=i9VEV<5({3cc#PVpjvPa z9e&Ggd?;Ol8gM0NN2NWiHH3|BX7?ERF}{K@(;VXW?ol)L(56-SzNV(Kg^+ihHa>U! z0;(CRYD~~+k|eq6C)-M0s%3ND)ZDmo-M{!S^vXyLVY5G{o#-@;FLw@)YlrYDr-@SM z=Ps0G?H78h52IYZE5TQ7V;p=Q{#{NB09Nr8v{eU%CxS@yVUh9d#eWu$!v(}*`>4t6 z4alKVCBOoe@wp~rrOwvZM$=_bPt}Z3HL|n3wMRAJgn>~G&A&Lr02C~`Iyf@E+PeGi zyy^-u0Mhs{(b}c%fpTY094XU7{MjDP!NzxTn%3Ud`}Y6%VDZ}+r#9&2;hpJQdb6$h zhVJnO-PctdVCd?Nd{$R)($^`a>BfyNS6$ath8iNF`bz|W398Q6Pb1l(S{F?lyHC>H z0qJ_K)pa%{E*%~_#97U4z0R|5|4+L9gTp(!xV3Rm`m3R?@QEjO)%R9))qhYaD0zF2 z1e5Gr1d^yh#ySxY<=&-Q#%WyZ!f37psmXarWyonC;YfgJOs)si?)P6e!B(WS2QvtR zxt@>5`OkxpeIFGj_~YVxM1Hmudjh(WqHUWq#d_9C*p~a=&%=R_<~RQ5c*o+LQsT~E z=vjDDJ?`W(ZiE)Dz$Bv%HDnpR%&7nddHYmCZrGd3Yr5vYMWoX3&0LP6B`X$de4AYC z*8&E4gKY6CbjO#VR>g~?!`Yz_ELVn|5jui;WyF_k-GOi&X1?o;=@Ws{?kLAiXAgSa z?z{T!8OA@jIg%Yr{hCe53!))AK?jAAiB)@H#)vLfC)Ir*qcI?@N=D+x6RnPus`J6e z{CIog?W3GK!ek<)?OxQiv9DR}ojpl-=)j!P*mqhRUrM*U)D?ZX-w}NVbITOpqbXMW z6K){`Exn6Gef|XPp)c#se;fv-kT1a|1+R3F?>gj`y_)acFB$%wcC@%O&S|O}@ZN&_ z*?ngLJPOV$A67<l4%>$DYRf)_t=yj+`@O-jY$l}a-TV9NGxn85 z2bT(1c|kO~pEpB1{9p7KUL!+ydGe_E-89E?U-DI?>6ZPOsHii_(zV{tYSXc3(s>Wt zX#=x|FEq=As_Y|!aOgfVWma4KDvqtkzG>Zk0h#S1RUEfB4^xQb&jaBgu)!UIKyxNG zD?Jo9mrKQ%qX|xwYuG`2brx+=_xr-*bGrXirkYB>ck!P%ifyvRc`v(;O6Z8RBe#Nn zIAFzIS07%XQ}AcWU!9;tYFN$#GlUCJAo~U5HXd8tS`M2-Bq)(|?ttztZe?8%^g$I% zsicZg|6NGMX1DiosLo2wqd(3|L*wg-Rx*Fv&Tn-nh!?t+rlne4T1lv^zDqN1(^5$q z>jwbeis5SH#|k&E@tGw_-(sWatCd3P?alp^e+Ixh2&ix8(uerpoOg&s@tBsR4iihP z$qp9rk%~ejI`?fJ&__sJ_0Th*2%?{GN$cMsZg$gOo#+a{p1l@bo!KWOyKj)3PM8{{Cf+0YMw8q@oGVU|q{~Xv6{plRKdh)4L(BvczOHet zMm*-*Xw+HEd)UGd?G!`gWIF9MKdjlMQ$EGb?#3_$wN2>)2=M!_ZsQit+HbM5!@1F_ zc3^8$heOJeHuJfI2nt(RKE%6$L`)f5?ED3YzlvJ@p5e zJUk0~n*5v0)ZPi<1+1}&!j^-=mN&pvq0pzH^$4;1x-E}tcfKCB+FyWew%T`C?LRUA zIR-##AVywYmwI)@|4d(UR|C|(iQ?=G_D$l(nd$nbjMMbwJbIEFz_1jx=bh?p-1FhX zzm<4)?ez!`Yt;;o{U6rz7V68k3V>~4B7#S-{4?I7Xh&<5$%(Gl86UV&Y$lfs=Vz5z z)998w%dfc$bM1V~s)1XXWO7G3UkRs6tbtpdh6OZHY_(s-cnvoA(=YS#jvCJE{TWp1 z7jz%&r5wSN3 z@u1_V?WI=xU0%t_1X?LlVdp8D%a8Q6Fwh9@2FcSUCkC23PHKFBmQ6Xc5?Y&n%2h`+ z*vzj<>3l8R+Vqq3#K+(cx6S+^Hy>%1jrp5(~AB9koQOoBD_M8WQU;4NE43m zL@dndMZF(<0KaqY)(aB+#oqjNB7vwepfg(vkOLj|^P!?_x!VQE@QTM_Lo^1#)g9SDYgo+_pS@U zUi9DW(%vl;T9yV)ucAhODHyzACur}`dU%os1ByAcRx?-|?0kb;8HzlE22oKsVZdL` z)f$hkt=^VG$GN}ZrXfEl$Q0%X@M4BE#A@|B`G)}4Hv2hIQ-W5<(UlYMLu<5wETZ6Hm3+lMSV zx!cuX%UYu;*9qU5ln^E7>@viB{x`sc=+fLIrN-CiMnS?nq8CNm?`^uNr$L5XfG?i? zFutF@raq&3oBet@@>Zf6noYfs>vQ~id&m{S#5=kw_q2c&-;yI79W!M;u`M@QPxU3{ z;@9Ks@rw7(=}sxz-_LFb_kpAU`BC~x{Z>fv-<|3T4cpN^P?Wtgo7w69pV z4{=FNd~c$qrz(DNqUCT^{PXS~jLb`2byx;K*P-ma%K#pamBx!Z7A8C_4&9ONp)FG_=FM4*^OMJSP=0y;%lKv^IDXvt-eq^} zH!MITu18VpjW4Y6y*nlTRaWOe6K1cuJ~ok;p8U&Yyd2KIT+|PM%Z%1Eb}<0B*T8~! zX`gYYEQDs|L6DozaPm;NVwIp^oGm^c5R<_BK0u73q~}jGUdluTd&DGFE*>6-3+}ak z+)PB12@q~n`+)L6*cgBO#CcT6#a#-aPAKv+`&DkR3+X!T0u7=YRRBKmXW4J4=w=-+ zh`p$A-1v6z1xe6+ef(?1fuFS+F^qT=%qcof1?;NuJ^v6$6@)Ol$Bpg@MfaWB^kOKw z|5V)@6<9d%_B-&x5+cwXr)5Ljar-r{%O?Ix*qNkIC&eSjN9IL2e)t}u^NHPq&?+HB zo8SM6AawEh|XB| z+{F9BL8JtN@WV?Ke}}m3+(R~L18#~+P-wq#pw$iFN2o9FNTzv!FJwLV_or1PeYW#$ODmbk7+h~tJ3Kg(?h zJ9vLKAHf6aAiJPWeKTnXo4bD~Y|pcN1BU{4vVuUwv|-KTyTe@z?^Eg@l=6z?r)UXT_RCo^w?z}9RXN4lJR+`WfgiQUmXJR4DK8Jb`8u9!C;&A++GQ)OFNLA`CFm- zaj0hKVap_3ChV3y0k^(t;R$!_sEO{F&+cF1IuZbMJ^hYYHK-SA-cg_n&yJb_<^4$9 zZpcJUX8zJ{X?#$w8TXtYCnRE&;2NWdYl~GYD80=)<&&ozm^QQ62MpCdao2U(;~5ZOaMSSAFK zekr8Gq#Y-PjBM_3nzrAJ6hi-zLNH;opFVMoCxuMH+e|#m4l6m4CWwJ7NHBF`Q`zvv zJx!n!5=4yI1wo|tBJN^?@2S1mO5RR`wbe*PybH*OwI?^Ps+myb4fCCXVZLf)JtBwD z3tFJ&5%fYUDWOTB6Xrm;VDOiMV!xr7H*}4)kn_$-L87pO|G7QrHt%3)R{Lm=Gx8Z= zSm6i68o`F9E6#wS^td2jd?crRE-3Sv!ux+2f z(zS*yDaMcW#)%P&I8V^S_30Vq|AIZt{ebGgcSenauc8&{Xv&?l8h1E&lEMINRAVo91^yrX0kt1=Yw~7gdDLFgpBVHPt`1`0v9ouox7+f*J$K7 zO*A3Pm}rXsSu<8rQ2Z#OZTCi+Jeej9eUpE#;YWyCVSIC2Dm<5eoYYj>->guZWe+aw z+po$}yY*wpPF27lMJC#glRGuA7$K~7mHKbw2ydNKjkUUX2 zpzKVGu%}Fp%o{-lH)!@6OIIAT*PKB5thV`Y<#(HE_jGxn-DUuMz?m1$&EfI*-Q}im z?phMHQS|#qdhr83dB3Q^8>?`?F#5{bl(>9h?RnbUyrMQ!tn$osAp0X1rS| YU-pgC7xMb4Cw3O^2-Z(|xhM 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¬SVd-^k|ge~GpY4h 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 VK+>VD_-F(z_SpP*_Y%mDn$FgYE?Wf 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%0A*$=& zy|jX*Q-=?FnR%L53$ayC6hRRXTliP&Llf*axxy<@vX(->(BB;iKrA(R!vHAnP$zE~ zFo{|)3~Y27KQ=mrV>0{4jo`ox$(^@-r&}rFUCPWU*p8gLWsd5(y(|8iY;W<-Lt7y3 zB7ZnxG}&@&z0Gy0{r?=gV`($41tW^|&ZXJQ8L^lC7|OcSB%}(Q#?`_XI&DT1qZxUb zE8rDQ`9Qu7g(Pt_RM??ktWW@(ArPDPMNOvCJWge~-n1U)!tTQqG_k+f+km=;Tv z?&UM1ySzuH4aaPIXy4E+7)3c6?K^Ht$e^h%900WZmAJQ0)?wG=aY1`Sy|tM=IBL5> z&`<9aEv=~FXT$;151YKzFzO@o-XblL$q23bZZ-u$l*UO%reYiWNyE=pT2JNt%{@ix zNI<8a%;&WCg&?a3P)ViTkTis9Xd}eXV`(wQ)ui^qoE#u}Y6k?fpQ6Y9w2=;G-^6gh>6-G@UgA^13h_6w#LadW7Z+!Q3CbtV z`8l|bw_$VrF2_9+$6JW8E9(BM<0%F?ZIn|yeKbUMBUBUo(4wEt9mZ5xK#I&x+ZsmS z%6!Pa#d+j6`PyS72P|1SZ46Gz9Xd&k1<&m>MY}q8l<&BMiMOG6^ZwJwqjtJ$NS@M;E-gwUeM!l)ofv^{k+$~Ri=;4VpNAmoPMnZ!MD-FP zbS@}vBmjGsIQs6JEWTPTUPvOW4JNL4e1U9DN!4?p^u97_8My~_HB&BQb^%*hUZ7ce}fs9;J`gG zRAsHmUuVgJ+trS3U8GBUZ30X3#s1HP_v#JYg58-sV+ctL*hlOY@fl>hJUrOT^eNEK z4453>*Kdp{EZ{$}S87u<<#K0U5{VG1EaJ1NDK%}?;V8ZVF5JmH&_=@lq>DUWvQ}d@ zIGy7ON_WqgCwu7q$i+xk>25*6#N^w`JKU0}3>(}KB5TRgSD3$;+$RKw2^3LFR)p31 z-B_t5Karo_gYARs_a^@qv`adeaat5%SeEjgib}!7Dl@W_WZT_mQ%?| zV{Fn+kopdI%pn80JUBMsjuh0o!v{6l_&RP@XGy@!#xZMo8!O#W1WvO_wXn_lB{fxM z%{R6g%gy<%BfD?gimemoj}#a>I#ctz@D!fzJUAsp?`0=jt#$HaRu-;iA5@my)J(=T zKoX;k+#!+(ZdEo%t^7i+P^f0lgR{U4l6elA_;U7=Z@-O4EQXx=B#PB%grUuqep&bpjRkY}gyM=QX+P#d=PFw+rO)4WjoJvNu5>7+`*kd z)mHQQ$W08BFs~RIJMwC|mo0e7{u6z>R1`F?D zJtFf4?D3ow8oF^3gtfitrQffPzNvOh-8NIfLd*4j$6b2Yj2Wgh}8qV>Uq;R zEpY-4B@;AO|F;Oml!xe-dTJ@|!>|7pV6XeI00E!yjdO*wRlTP@pAOxSHRQ}c#)N&^ zw!IxUufk=|bH|z1qP>hXxxg1eiiga8g)7rc7jBVr%{OCO_!Zrz8bkBQ@N$6Y5UXT$ z8K~u@|H7Tr{zDGabVx2#c)n|+7U3T7r~dS^I>eyX z`6Q-c2_Mx=!6R_wCzlA+;wBpIIEEOk*Hz~yi@fv*U7{-(8btf$u3mFh9D^3_-?4^i z`nwV0zIoCZ0bD!x(zAfv(i#syPaKZ^hIe{3=U8Q@b72~0))Lu>ixrEfXF zGW^`2WM;c?HaCc?sUmK5BBI3|J*d}u5>f1oUyIh!fk^EQZIx$Z{&$9We^~f_%?Yu5 zip=4rwf-Bn#w3-cFBY-3Pk+^nvGG-uw~-ktz6x|nKPTgBJIR=I^4wdpnGu64^;?rK z`!iRCoAs1UwRsT(1B5rMAZ-gxd$h{@-mp@8$ct zu~}+HqsUBQ!BBS!7~HcfMp^NQA%76;Go+Z8SIH%0Bv+ZSZY=r~vr z)8DL&Ty9VA4~d+0)8WHv;$K`5m@lz(eT^=~PSAvis>~g)fn=+7H^JR1eXK0^P7`;{ zwHsuL)cXn<*isA1ITc>zPp@`I7|Hl$o+;O|)V!0ykjQ9MwG`d-!#!ULCROHpMn>hn zr=BNO7H?+@G$c`{>K2I>{r2|}H?`tIK33meJ#VL?I2dLWsx=H3AF5Dt`8>(GUL&^*DS0eCyv0gntyT(oT>K zGe5&4)Z^-Ru!i3g$B&nppCDaHgI|<{$MR2ksXNNfay~2EA}(=arh-X%83+MTTc_!sNi)kXxE^p$~A(%5y#3ryh#t*Y?YqrNu z)}AiQChd}%8q9zEBdA_#-^eUyIpX(b<7-(3w8d5Y<0z<-&s1mI?v0M{b;s8TxOrK~ z!wMFzzn%z6=>?me9J-EbNth2d*m!$w9*t}>Q}b6NcPce2yO+FP6f2mQZO`AVSnGIzhGUjp$LWaLR^WUqFdodq|-+;DKn?`~XMVvoRH;Nk)YDA}#jKsO_Cvjj~AaQbzI1*Px$$OIc zDbF#^A&yfzPTJ2eBaX`SwBXO4r==9v#E2*5h7SoVa$EHvVw}=*BRROB3Lj`N8B#TF zdJ|D>VyGlxnA$4auQ<5BNgUiap6(kX#1M-XBrbccy0UH~E^BdLf$`X~o(AKh=ZMoX z6e&{TwBt0CJf}@QE3Ro;nCYLnQ+X<`xy@Nui=9<_{G@U(^#=M@Fr??(sV$d;SE1hn z-n@2p`Oh4}bcI@kiHwTvOan?MK$nK}%TaWSxfm!i@zLLwc0BlEX9r_%B*@iy+lX2)-3|8zv z{4C!NvO*v!SbN5o6s0ze(o8tCs^M>vp@@q|xFA1~N6=sWdfoFD|Cn2WH4dsCd{>I< zp$%qy+KnqZ^)jc|isx)srs_^HV=$(~g-gRCEW<-{OdD=zpb_%qZe<+c()O5#K|q)T zD9i}L|D$~qjqFZa@qg7{LPi|HtArGv=U#T@_VT+LCNDWQq#BOMqkd~SXxZO(X-*E`r12=CM;+L_)X-6LB$wtladDwEzezq99<)Ye%2 z)8694BE+#AmU)$fK&8nLG9DEf&+~Sbfzb>YY_|KKNOi{|{OciOnkXqZfx)_fmtax? z9q9e=U9Bo?k@f0NWVzsvLc!}bz+}UKK#ufx*|;H!I>!~wt#S7^YTaFw$N9Wvk%^Ux zZpj>$XJAvUgUnvd+5!gL?sTiJEwgq^dut7D))o19b}xP82_C!fw;MQ))TJiw?1F!{ zF2X<2VBr>Nz^J<;-=MX*3rD=R`Ebb>yMFih;Schqa7nfB<7u1G(^vn$Uj-E$Z8!~wj(f=L*j5X`Z|Ic9hCE=w4d1VV7+D&1qTAXYt(@Y4&1EA zX4Z7>qi~xT%>~2jTZem@|Iik8T4jBErI#6@-<&Qqt=QOzi#044vo{-Tln%{q7h2{M zPR*zkF9dO-QNSGg?v%$BlyXCf%u06(wY4AF_>T5$&J0&?o?mbAD((d(Zo@$S_<9po zU;vnw+FabTFIaC3dVZ&fwe#ceT&J=H|vNIbS zwmTQWxoUB6v7J3VABk~EEC8zhd^RH8Cr|1_K(c{kzD2{;S)N{AY;lsV16q9JjL z%=pP)4v<-^eZ+B#c`7Eu`Ega+Dqy`My_vrA*)8j%i~n)61POD3;|#aCwIE1>}P{hDeuBQdWf zoebwUei2iaDjJU`Gl~RFHQXo?FzrNCOQt^|8w$OUN8^ug@O=OwGGlMN$yf%o#r#~V z-jpF`QS!9ZrgFwwlsuCUbMUR2xtBRz4K@U61Qrl;B$2V#e{`!O#@UmGw$26SnrOy$mx?t`H)pV=| zh(s|YsaJO}y-(Mf_vI<%;UE$`r8#s{)U(-1xYUB{k+v7xXIyCRIF7^#oQ|*dO(#s% zOP{R<7$;D3ub36y!3TP`RePBXKNj9>S>O`$D7sK=E9gFN#$ah}{RfPhrlvQ-c3l2; zFFpSEHoby}TUws^3_*atDc1*IUq)Z!e{mOo6PVqi@XXxGF?lYovGx9rP8+N7%?8fHAl?O}|CggAp5{;@;+yI=u`*6MfN? zy!3ZP+`rTyvTYk#2awisI%F5GE!;8j#qPPXCYSlXskNDdY|O(0f9A8)S}dHXeWZVj;y#R)I< zW(ofAuyk!Pm$OThzOQm-&^itSiPbyV+Mf@;zaG$xC>8lL$?~2N!M9feK}<(y;^$0} zlREh~L0*nR*&|OR`6UYGf1}TCtKHJ8f(_A$CIHyk61DD7*Y0pn2` z{h+l@yT;48Ln02{=a`Mz#rZ7}n)y6ttbFg#nR-9rsNS(2>%Ep*o4zYfmp)0itXo0T zDsZrU_`)Zhn3Ik}Sq+b#m0QNCNM5>AW|FyO1cp}xI9gq#2wPWf_xs)+7WVeG=y1n; zOu=s7Mrgz*+%KnZVBecSY-Hl3V8Y1Mma0^DF&9IXT9>=YL%~oETm320SDYHsZsrm# z`JSm*7A!bVBa>+Kn`U|Gp^O6mRJvGy7u(;Z_V-rG7-%@@$ReQa~ z8D6q6rn+FPf~yM7JX??rTaLBY{x1&j*zuu8@i_4wic262Y;>-hf8E5{xoL3zpc#!UF& zfQRO}Ndk{;>}4^{XrE~ccVK1^CxiX_uBQusd#amKR%O!LC#hY_$kES4II|Vx0cXsi z;|>=C%LFg|zk#Lle{0O9{gma-xY~j90a10w{?5+<&dFm+B0qi8sAB(yMr-eMI56k9 z`vAOMiMZ$Jy_WKRRCP2zO7U1WYR>o;r}mdwjlZsvYf4+nuJPkbv(2h$NBJ&-4@^0v z!DCH$neXQWg>0?~D_x_0nmO zxwo;hBKbZS+|kqR;(Oec>sn%~=K+V{1fY$JA~a3zq;?GUP4wjBJQAlMbT~L{%$+kX zR?jgJOSM*3z}Lbn7`@S>ZPo&1xzE_9*T^g|wU=?4R_RK^zznXFdi!6GI_~g{lt1$) zXg)9%JvDM(8nt*xEmD$-k+NfP4kTJYLp)vLszqnAKB#xp#RqBV;5;enV6Hl7xt>Or zo`Ep6{dfB<*Xsp0Cbo?>rjw!>mC)$SKPs%9CnyZt?%ol=l*2QQH2$?+3}Y&){;+Wzl#zT(Cm878K) zP!WgR>j;DIHeo(U*cT;N`J#O)m{M_#l7C&}f2}04@^#8>EG*nhH~Ccu$^#@|-5$tF z`J&BL?FgOBpiNcXO=T4TO>f`C+wL1ocJoUy|7+zDAGi2Dsl*&>R=-lgkMD#E-H5(6 z99`nvFbTP(7E~7dlb~A>ZG}IH9*plt??yY-C-v@vN>N^;7$)hqS(%j!39lHEAHQxM zHHEM4wkag<9o-jxus70Iv#~!(pd!!0S^B;Kjjs8JHR|~`%Zl`M@LKn|SOQ+>oW{{{3KtM0OfD8W* zJtOjyg=yG()1&vUI)cK{9Ser2@l+aXE%|4fN&gsD|G_QfMi#O|pSs8*ynbWcqK&}d^>vX&K5PXpAax#229}yzCr#p zB=E!_K77CmA2s;Nzc=W5>9^#Oj?fa{l`-0%KIDe`XPyNeRbV5?QZ=BfqmZTVcTral z4Cw0ZsH@LKU430$kpVfm!%ngQmbS;Kg^?^56cQsX4bO*(SM2A>YZn_&*3x9B{1flx zt|BjUp}L8W)Ly`CTSPFv9V7GCYpd<{3c+PcfpkJRpQk4OOb@t@E9?bjME*7uCwo-g zqLR2#DOkCeDY)ez8=TK+D(Qd5wQ{?8;5HuFi9<>?8V_edp0s3d`8pg$T1d9xlcoyN zq=iVZi)>(G>z`y^H3pe~t8%MPZEM{gY7E~5k!g?OKUUuLXhU8ocC8cvpZ;)xVf#pc_wkG zsF%?@9Y*vlbNp9CfAMK~c$qz0J)bZ@8{hFIi2PROf`YUf*8dE`N~P8Q&VSk(7tuS~ z0fvupQ)}4I9{t}kq{5KN0$|Kv+t63n8}(*Rl>YjDETX~jp~{>&tO%w;&(UT+^Pp4> z(*^TibbO1}#t2rquF`)r->PP<5%JHoKt&WSidy_qEg~(@ptF2Gi;>!>zog|(ZIlL9 zlsHA@h7S7s%sP=9G~JDKwsn6w{n~wf!zzCwd$)Y-?Y@Prj@MmGv+gFNiqO}{4fG2q z+tZ$}lU-SevOEX8KEPv%=;Orz26C0<3kzK36JWRFD!oLh1TF1Q(|_>o_ofQQ1n~8N z2PSJzm>353WBc67w1SpP{(ruE<5BNo0TP|Zz9@uaH~q(vZksTHQTH|u$AtO`{gRx> z^yoWRH1wPhS;m}GK5sBfhM=mn3JgoHlFcAIgDI)&Q$e4+Sh@6C9=wE%;D#ni+pTJQ z=oM>Qz&Jrz2>ioey5;!*3lr`c(8wVPmU?TpAZj*7&3;0&pm|mg_0-D6CO*SWm*tRR zbQQ_4-~2k4N$2US>P5Pe(NacNOMArF2guRt=u?&MQ|b7C!DyDJN6+8*g^f6Urh6Xy zaRk_TX9=)cGJu+)GMa&Xef0E-qn^&?sf*oL&sO=BML*Ztpxn@Np+w6Knry**G-)T3 zaGLst7OUd=D~3fC*AE>%8EUZ@aZQQ_I~S+$(Jj!?46e&%3&yL`uV8oHwJX3uf9Ke9*@3w9sDNz>VQTL!8n9y-Fz_W=HdY@ z)Qze1fZ@nmho`dshaaVp^6y#x(yD@c1$AI(&)MeDAa6@^<(b8u(prj>ub2&AI}Uof z>znE+xlcK@X3R)!tNP3ppN;CzyjOp72lO}ez51Itu)oVK>rrx8&xGafy?Twqy*Kpe zag_JJmwASfB!>s>m;3F75i!1C#tiJ_x%?Ra)&4Eh_ekL~hnr@Wp*lE6zN#lyEZn9i zHaX|N#q#}&)oQGmVhevWn`W%<8%tRP`33E6Fr_xQX(VQjUk6j`#LD-%U@uQ)bq|qY;TV5Z6#D4Scn4(>agBPCw6j}Mtc%-TxeCTI5Y3;D7=%=JByVB z$oWD^?=r}Hz&?Q}n^favmSI;>JV{e+cVjyPM&36W1wO=s)s0^I7^F`&TLq?)1Jngf zWK~Hk*rdM?;eRfA{U_PjAN8(y{8_|jOJ^C$8^mX8fHr78qA^w{hy}2NIXowM!cyN3 zrDg4`xb!SW;@_vwMY(-6pBA(>3+s?kVLdb)WNT;89YEIlS#fC;N^9xN?U(vQ-2axr) zAme(e3BF-?(#+Y2sl%ejT`x1EJ=sf6wgb})ll^}lpvK=TYjT&J=>S?}0R1m{2tfMt zYlA6u!GsHacaYQtT^r&FNly9=tz5VcOVWxa5QSyivJ{N^8lB}EVzXgbp8H!(9-OuM z(41MsI2ONFzuil{Pl%k=;Qae6lJLGVeg{_JyQe;Nm{X&_0F}KZ5AzrHm6-16*ZK{X zyF^({WQ`0a%_^N#qb}DA^(|Ya%TS0H3Sh^dAp1|^l-X;})Al@3;Vtf)GHr7?+a z2MdVr&%ba9DR0PpF0=S>Fht1_-*S|u79-x={ANk6=wg6P#GWy@+_z4EA}pBKCAHdv z5-m(%L)6~h&!nv0IU_pb4DAKQFrh}++gD`pT(XSLBYr`3a*J@zPCSm})Gm;F5}Qur zu>vh>-}``4p_9$NptW5+SZmHHr4E36oZga&{0{Hn&w0#fftOLS z6X8!dpC5svfEDGUfM2ZT8$=;~FxXV7>z3hKGbWaM4O^w(GF-;(WNzT(G_(CTzH^=M zN?Vml6F>&HMKKe#*l@G(XsuaUDFFM3L0!<*yJlEsjX!ld%X9s#Y{xR8r@XCNw4Gm) zVbjJ!Ap&z3#d23`ERaNMdxgAS@#We0G8^PE6o2Nx=WRua_R;tg@Qh(R9oXGXG{|?i zF5lgW@9J({HonHXdxX~BgYnzyyKh(*wA~~8o++qwsK#BvC9~nzLPK#h4omnGYI-ot z7S~^K?G0xPTr@47bf1kDDwTYe1^W}bC({nwP;cJ1Hi;RkIlNm>-@D~DKvs4JP70B}?GKSG5_;}HyblXrshhoTN_Fiz|5`3)(m?OUa8y`2)=ML?`u8h6_D zXzdr|dvZJs*8&C|a59`kMz$$Z&LMqja|LAt3?Z4#-~IcHojQ!zD^0Lxp7W1N6I=lL zNfZ38{v+d-p|3<7z|dROD5Z_8*e@)v#BZt}?l4aQH?{j~OY#CSK1;G;a zE8G8R>{fhq?0}D6$Va(Xc=pEu&qlrL*_;8-DtRV-2YW^86(y1;rY>l8wG@u^HcTF# zdj7Q3&d#NisR~CJQrXV1i3G=14;OpH=x0)|P!O`5y}i{e7?#>LQsoLTSp;(lSV%1B zokT94>w?dcZ8>qRKmPznxJ(`^Dl^fR4>FzTqA^ojt~Fc8C9tA~nnE;YdG0IQILhkj#Dp#32lr_LHYCQ z96G*~{FfBz9#{X^Egt!+GktTvR{WMft;WBoh5`;0>*7HLbq9FRo~=CDpH}Nr@a59# z)LVUtwHCB~VlZtSI$$h{p!vi)7}}-PLCZLQT6K3zHP9eS!np31aS&rsegw9D-OaVS zhxh-|+Me%`U)N=z)^&}slz+|tPH_-`Z3xy@(K&b2FhaL4W7Q^7W@~{zqZV__N2$gY z(=jg+!Z+IIby}BqoJJWhOKppNW@dOh48wj6i06FhT!tegu7zC4-H*kI!VFeZTlxH( z%KYaF5pHt2@5-INeRS9BKS}*hv47(@|HcM<(%sFCnsRsZME9?icG^jjYs+OiL!$

j`vo)ATSmzu4Rg4Ti&=d2mfm7z_BR8{&Ad5mRW9=0yWP%hPwz~giS8AgG zK1#5kEx>Q_DfLP$%C;J!OLez%kQBt8|B3Js#6=Kb)E<-|(ls@AR55vIF+p{%)~J^& z)?((?LjC5^T~+}mm|T|nTJ*+E_J*YfnduS}4}hoD5BcBvk6|bn(7)P?3Wonxm)HaE!H!Hm04Qm#1k&kD_BqyOl=Heib$Y*+jzo{cK(pD9c6fRYDR zNj>n*Xwe=U-Bmw@QrcZTzZYT*h^JNop35QA;Ck0BZoJnwzdYDKlzQP)sh2)Q9VrUA z`3E<@eEjB~la%7@MUOMpd-rE279C0LC_V&-FCso~AEBT8qAmL9h(AylO5rGbf^m`i zwygqOR7uTU*>cZ+?$C3ow@du_&ni3SoxC^aOl5INe}|udv8*c+#`6d(%j-ptwo&@( z?O5X6)Z1mrrw6vWbwI0c(#k5&nay{^4jt;;A8P-pe0?2d4^{ICwpO^O;a&vOx7QxS z@3v=)+qNY>UaVnJc2?`vQMQ>Frv7$ywCj1&+i>#c{bfUU^*pZr=I^7(7&x(O?@NcC zI=$O~Q5|`=lj9@9vx>hOyF0M?uce!hoR->NO1&;N$SO!s#&DcnjlKH3lf(ia$NWWY zMSurHp5U>4Bf0O4x}K*Py2l=6ZSPR6aa9p=pgYUp*O zS!4a#Ly;NFEx8A5v+R6~sNbmvxnOvbQeWz_T@HLZURJIgaYXVC66k(nw!?MaLXnh7#X zoLaxdotH@EicjC_UokJWtvs*RHP`e!PyaMT($nh`J+DOaX!@o8c04|>(0kBGy_$Q2 z`Ss|AY>Ccf0mG?vqldu>aDTk5j0JA+F{xvbLhwO;CM*2_<>qnzQB zR8#Ib15K-(v_cI z-+~F|r@n~}$G27hcn)(px<*8_Er%e>f`w_#9V3&)TZrZ7&b>_br*=k&yo#^((r?P- z8hwv2!Bb;gw!(@jDlG`A3hqf%pIMd|(_2)W{1{9nAlF8rPa+5VmfIQ8s8cT!8ulMh z^jT@pw#<(|qWZD%F72q|+k$4S-^ejI&*KFC_79EYIuaNEJug2%SDrvwfIDoA2Z9N8 z41^qJq@}~4NWbxQ0cf#OBl{4aB4j%_e_Scagzd4nA-*HZ9+*~U$)Igjz@W~b=eX5s z_iZ?XMNar_#Cty?v!3epN~OXg{0u&=Jh;ftUB)8ooc3Uw;u^R3{$OuOF*k(Y$#tMf zwDyE!%t&s5=h)%HBld$q{D2?5%_nvyJ<2_jkCjFTiJCzE+R3`ixuA~; z<%Qcsw*&mKZTECr)*J3dB~ht%H^`kRQsF~Ivd(399H{}84)-3~k`6a{ymT-ThW>;v z&}w-_3ZkB^3?O3>EblyceoCYVM$SM4R9bp zrwsBD)|vIY%;{>e+{IX}-CFyl(3ll`XGl7+vQdA+i|LNDVqWHh*j~ef>O8(`eCzcP zUw8{wz=xz3yZv1YpJ&NR7QV@sXk8;@aSM0jxZwQi`nJ1ZDYL&AB<~G2h=&Cmj7wn1 zUxn_Ot#f{(wNfAw(jTNhKmZb+si5ilSTz?YlB#sML(|=x(akMR*m{ zb^BXLA9CR01|KQJG6aGZs zo_}v}x2^fZw&obO9~H;#Sd(qIkLN|DH`N8CgN&l2I+kW*-=-`n)gYD2i2Ne*001}4 z5%;32MtIB;2>xIBbe=v?3A0Uy#i|yIp&;SUB%e-S;8(t;h8) zd7Ro_UY|so8AET0p_i@mx9;uXoxjx2yvti6OGjWn5&!A4Tw<{DyEz3nEc_He1OLyb zsCap{{ViZl-b{JqDfoA|ASY$d+8A&f3-l#l{3>GiDd~*3e-7U8wOv z$4aJI5yY1UZTF%fku*y#BmxxbNc~tkxU{K?@+#=J+>EiW$=!ihKpT}2NG--nX&7(G z3GnNFek{2!Mmb_{5WA<4oDCwdWS=fo8-q3wkgtJ$iu}35yBjM7EN_YOp$0QoG7eQs zOfDs1iiS3kL{lyv)+%(Zg4tGp(d9faA5k#G;Wh!6S2INok-%>l9!&M0Ivp^?+fcT& zZ4FgC3D^+L*b!sU-nX=Ny_QZM=Jo?MzSD5hLjHv<_@jp|?N|nOf|=PmrMux?$1?AM zgQe@WC-9Ri1DK96gkZ|t(kYzcTu!6j_!>$H+@bQ8b|NiVT6z&dM=R^?EiYw9$?b_h zb8UptEWjT?Wh~#=xI32hj71;*WOobb3z@V4YGx(it@IZEo!`s=BefRTh!+$dioU;L z56M|vIkl7ETv|N|e$oj@@(PQ091oX0{7--IobU27RWdr(216kW|C0#+-eRh{a+s@h zZk7K@j+q&T##isnA@mm2$3f9=iV%^(w~ER*p<>x6BV47RQ9dW%oa0S@J!G-Hpa9eH_A`a2ZH}9JXo}mFZ<((waF{TQ$#xLV-^-CHcmB4i9Z}gU4A|~q=Q2!-0eKH>&r)8va*=PW zC(6fJ>QeUF+UYeToK*%;ean2}rEjG(mxV*fM0WM~>N70k z(a>FfODuE=U)CHwM1pIy1R7m<6@LWPjWW&?R0*3gF0FkG=U~b7Csx2w(7faX*`1G< zWrBg_zR>PcPqPrpkLDECfDMZI~s?pX^+%#P%F=|AhOY7D|vD|aFx~_)wclA|uHHNP8_HmM6(FGd?aU@uG6d$qbI```1()pYY zd=9TJ4}1A5by`*18VSUJrd7RdooGA0OlUDm;=L^`;{T5BO5iyITP!#8H75`k^Mm{46~RR@z8)qtG8EY9b&<$I39cN2 zz>jchN_F_8+-%8vq^*5Jr?2>^bIOJ@U`!DSTWu(TTu0&xQ!Q>O3qPnEVkO_sRxZS! z=yvn$ZvbyWRiJL-Qd7^^1@C}a7B-5pk8@xlFA*M9_!CQGAa{A-!*9`=(eLx7Ll{=lwY%A;FhcOk#LPDaj-V>92mzyaA_G9RF0j?K+sYVB$vxZfU*_CxhRhl z>Pu`GTfT6qKP^gT#?M-V-(oCWt_+t|h_O-F~G;8!SiJHcMf`#18Po zC_j%6xBr5XIb?JIq9QDxW$ErUNLZL6cE^>1WS0q zfDxk;Bq~a(u|^AG&jIDMOoSu{r+pelLYNK-}gM9&m(zfzx&;nwbx#^ zz1G?gqufU3TENU9FaYNL1Tj8p?)cLOn)|w%6R(zuO2(bFxy?X?FQJFr|2o;eY<6Ep zs{_;TX@go=ObfKy|L&WE274v%9HcWS`$amxzH~yLJkFPx*a)fR)G$yFoztt(SSeS^ zR%}t7AmvKHFJc=;wBEHFew*GKjkR1LX>Z<{e)U9U%z1bx)St2@@KP-FK z#YVp^F%+KCVxR=LccRaCm@|cjHaLNl4i;6$F?fgN>~j_5lH;BPEUPdr%AvWVKJLxj z!W%QBw(K4V{vSyA?KjP1W-bENeI+5mJxSkmPf{n`)8gRCGk>sH^LWTjM~gh6+Mqo4dPxcsPS)_XrCe_MJDPsl#ee7OSflE-lt z7fSt|Ycu?!6<;jtqjlcCAp<&_dmF+AyWYBYH!20U8wY&)1_mqZ_p8Vn;xj`3U%78#Hr41JP%ok$+5u*@3#`6YT+wiB@N_Z zAUT>Kcpl^n`)qG*StL2CAa1VK>IF?)t`8*HrFKu~J8Y}_3rhX(${gkyGB;f`szU2YWImfN)e={;_Vbr%c`66~%tg6_`WU43EYtD^aq z^xU_E=%E{?OGErGwuCG2r(UhKIfc%8rZva!0@BL z)7&a2xj=x2NAbd8Txz8Ma1p;;W$L25FAgF*EZh1bb}+DH*dOqu^Y4BB&8G3S9qE2z)(!!M}wO9 zikh%Dj$rup^YGL3;x+Yvf9*TypY50`3^=CY5(6^^$jvE3ng zwI{2+md>ENTLyL4`>z_YwrlXM)#95ITq~q9&pp6*&@;;^j}i6+l__G_1wA;B4#3?7 zKFD3oYZ0_^Kc=eA2P{RQze>}0q3>PB?sZk6xteu(9l6IT3iyk=tMx_Iad!o*FtJqf z2ramn24^Ce@EqoWA+9%nMH6rL+hWHpPoD5k1a7hsyoIIyZSz1?R)%tsz}~5495!&1 zL7%@;sP0$S$6G}G^r8OxQ>RaE5n+t2oJlRuo}H`$UF!Y-x|I8pWC_bH7YQVt?1S$g z?CUUkPNT%Ti!%gt`Bh|z+?QnUIy?6P&(1!uqLq5NXZyaZ&F|3xd!|{&g}O zX*Xjv5Hllzp>12AdyIduMj#7hA?Jt8aDX_Ae8s zm^khyAp(MHOa0ZN<^g4|vAloenbY(QZ1$mJ8p(Fddyo4@Ii+HmQKertQl38F`VZ)@ zyH<0ZTKB)Fe?=hIA|w?={Re)kPAZwBv_IFbn*3tZ z@Xck}^$zBK#pYILTgT98K+s<}1DDu8O0f-YUwc5$?)J5!nYf?HL;-mQ>+U=HAAPwN zy}nCwuUfLONaTxOzkLv5StzwQB&-xB?q=_@cU4RWzGI0~W6k4q3iEKGzJ=AZ8Ly?L zyC5z1HVDz;1hg1&RT_cvY6|{*EJ#)EW{&)^!H~;V zsCZeGXOUOIT^>(TTX{@&ynf0nWLxo;P4sSzhCY~V8$R_1=k~9GU$BQRolJH?iNqnJ zC@owTrG4PnR3W~MXj-$LG2kM)hCh&}zlqq~aGm#zpzuFT&glzCm7mKkW0!LxW`}aN zvvD|;y+PhOoPJ`x$sTp4%i6a@sBNiVE)Z#`jqp)wvp>7k|F(TO%ltP}zb;5qZu#p= zoDphLeI)gx-W3{IMQWq>RK{X_ourlh_8yux(Ms?iNk>hd)y&^2`GiZEjW`B^1T;=D zR)#qH{&C1q#!=RvXkar-gP6ftgfD1i{QAY=`eggw;_zxQKPV-cCQg>DIwj&awHlBL zRQGsMU5F(w4fx_Kjj9T_m>rc%M>u?Gc|h9?!#$&)u?-g-!G)t|#5Qcplw6Q8cZ19= zcDU`8c2v_U?N-CQ=)bKb-U+F;B=Jo*a(di+hB%j#^*EYs3dTSEtLep6M+9r!{GyR? zn~(L#p%>?vk=R4^$*_IuIyK%c9zLz5s6q=XK;NI*-h6e@paNV8b2DwyRqQJ2}Ws#D-ni#LS5~`_nnp4|Av= zTlp7;UpSg79uV(ycWGF5Z#f2yBJ%%;BtV`Py?qFps%@lS+m5#li*30VV;*yay%;F$ z%U~#yR)gcZvHK4V8p@l@g0paLCDS0V!psgVG<#0xcfe4dCycnmqFijQgDeLhSGYTj zin@A|Fx-=*3q9pdV2qi&#xwRzYJEpSn9PyASsk|~+KRR&+W9GRbQoyO^D61=ta|5= zS6Xl$A8L)i<^6qJ`itWDx?sCBN@HQyn6>SE&w~Eai{}FMXCZGEG>|{Wy;aQO+_|xp z8+jqRCZe(()PQch>|eUXYuw`5v5MoWsiA&-Irq;xU>EQ};D?KwLD&Y0t#!JFi0|X~ zat(~pH~yVzUYrH7Jv+B*?=IFt79Hmp*mVF0R>dfCmHHsqM6<&GCq7r@#)-f?0_e24 zQ2XBKX##sDqOIeUEr&Nc;F_tM8lVGWE&b!ysemvY9@hO90)WG0yvIz%%Jw`Dk+nzd z{$la9CQN(%jYRGpgf^f5q|`JupW7lT%-Jn&aGt1&qx_^H4hRaFjV~?_8A%Em_U3d7 zfuY1{9FGfsG7+LK`4mw756Sh!4d)uD>NpR|z5lk&;xJCctc<#7C5OKdD$4CdZ!sFz z{5M*XL|Co;>R+JHWwXujca(bJZ<+pjnJ&6^i_8uxEpV6$R$3t@12ebU=JKI07-iqA z^8PK~(yTJ@^~Zl=7Id|Q-IOH&!r;GH{B2}T3qg5HaPFkuSDFx zzlQJOhdIzbv$Rv(FJsqoxYQ{XUxV={I@O6p%7;aHyi`|5V!Ozr)+$aiPrJLi%qDGS!A{vy&T$OgG`u050ViS&VT+D$($3oSHuiMLWnL=^l;x;2rs zKUK~!md&rej?p@n*jpSWarnh!I*c6hRZ;rJ@qDVIC=|x6i3gz*zl7*Kpm$_W!GTCm z1NCK&+NpO=16`-CTY8t>;4fa%(zo2MpFjGHfrY&6WUwCl@j-9ty6pB565F^bR8X!h zcjkn+X*aU8-z`C4=}?!ugXJ_HBCV7;<2evEsmU!YUT->TiYRXWijv%aXbtO1(l=l! zY$;){-Ez9%`7Oj0OR+5;@4I*edU*jGzvM0vbMjhGQ0TJuQR z)iOtr;AVqM#{?mijs#XuQd&CmBJ`$LIEf`wN7}ytTftC4!MI|giw+|~Wo^;cPyu0o z_c~2G>(ols24TlKElwNKZuTiLlocJ-*%g8X4x3yptPf4az@TZu(uz%*SGFpE$r;(`W93#lZ*v z!3Q0+(Uq$qY6pBIOSmb%Er!^hGeNTp8;aWf5j9K>CRh7AG2lZ=PRi37*P zR*5jC4~&SVPvi?-0pHw9Noki+u zp)MLeewQf!!czhj(cE19izB*wx_JyP&iEh3nvdoIEq-XoCX@TDcFutctTyb7*s7oN zZ~DNAX0PN<7WAOlsxADRK5)Y7RN@JxZWG0lhzx@N?$3gsQ;98vtJ@99O+S;`<18gs zT}WO=z|KThCAXN4pOB>_|EnitM#=wI`ansnxg2oBR{efa|>x^?h;*af|H#gOt!2EvGo54Y*VX!dyn29 zuLm}p)F@X=y)>ZLY@ah=k1D%U$mHVKFR_XD?Z|ETtNK0)?4l!3&9AuxItOXgoxS}u zncq=O-6cMd%$O%nxLOhXQPmL+u6Yx+5T6mp*~^sS$S<+eOLqdYu4fET5?pQsK@ zXli}_j$onzFn!)&!ocftBExAiN>jwu4%MSV#7_xMLB%hsiH2?&5oKgZ9x<8g>{ja3 z5fh|ht#s;>eq5F*@NX+Jt0W3+i-F=S1oNAO<+239ZN&^m1FTkKzuC3Bk%KwNrSvpP z5hmTH$$p0y!P$mV@@P*wVsGl&U2VeYFon9cr4J z7X!wkos`Em*j&(*u024CHR+D&j3=5wwj1|^-4>VYSX^ND@$3`FqK(z3-NMG2=Ucyq z|2IZZNPj@v0e?Bqvr73LaxxM9B}s#7lVPEHV(2B8S_BtNo47L`FtyO8`2AY?*vhYI zuzqCV3L6)YK~o1zeQxjAvu`92xb)p7juB`;Bquj%+A9tn4BxL&=Ks^LA*+PH zxDrENB(VP<*l%ZaGQcYV9dE)ciTjdwf|?H3MRNtUZ&Al|PyB;?&C*rS01fq_udTuDnDpzf=L*mlO*cr)&!*|7$us@6F3#@^r zQ#kPFERIv6dUupAv26_Vdy`okkh?K0e6(=>SC{^tqRK>6^h6 z=4qNW`?{oJ0-~SndZLA>?0@b=UN&k%+%?Ddm4=+3gw@Jq9P5}RQhv`H9s)01lg8bK{SYxX+bD3Mr}*= z7qLnphrTV1gQ| zHGID)`x#7Txps8ze?9^aA@wEd(Nl{qOS7>|=*^L{4gpFOXn^tv4GNS8n&Z@zxM4?Z z<@fm@Lx?q4C1#7Gsv|efv@6lU&Yhe=#ZeV!>J1&p|K5Ar;ivHN8-D;FZ6D-@Gi(t+ zQvmyImV;+L>6XDWA3X1Ku`uPfVJ#T|*>!_JhWnOOVu?06QN@0qxk$(Ylja(9Q)*23 zA?EgWqzKb9m;9MFhn@zO7N4Vk2$JEAlNBu)X{`BdweiuIxmYvwrig%t6(2g6=O%vs zOyP6M8>G`s8xy~W*%T$Ojo+ibl3((l(C_r}NH}%69|rMV;#^18;bmXiqMa*>CV}KZ zxCGEI!*`GcptjpnY!|=wI-3Q?26k8W?=Ly2@3(uH27_f5i#4AF z7j<<^oZXz?gz?9sZFcHAlur3*3Iav=Z=b&| z22DPMFmsr1(1^`I>@eS;zD+8r2LwnQruDsLC6^2;*=;3r2bFBIk}C(5JYpqR4=VYI zm3(1zN!A2y{pya9lyGzhC)k7nD5mIWtS?R~kv(25dbTmc5 z1^|K(`05J)>0vp*T?2mrdJlYPE4vx_P_MXv9Lxei6p)`?^hH5YP4UYb=8b50i58+C ztF*mEde_2vb@aHg9ZI-J&7obm(}V1lGuP1Xm0@Jqo1cKcS*fy6p=em?dJ_ z3kaA?d*J$`RsWC-yutxk$eF4)>e2y;zNVG$;o3WLEl^}4{-KWFBIyCq?NbO+pa4Gm zt^8Y}9m;8*`vVpJ5Bi7DAo{nNVHN1#Hz7UF(vo{nc1a^h1u*!lvQ+i&ev^Lmwp20y+#9>7gyFP)OsTtSJA%MecXx$$A=l6vD};J>FKFD(n2lp7iD@QAWFyH#bcNWp7~g{`@L& zzi;vw_#2rN3;ss_C`cxUDT94c1p%sSXpB6SujJ0tcd4F7adjm z@!p&CG|{oDqW*^EZ~bUKALVPYj7Vqtjb&m03nKo^3V%*y#~Y|~Gbhh3n|~38&2h6w z`GbSCjxEGzF#kdX*TQ#M-T?xP?OgjSI96*YB@vU0YKq*B{VH5b^04V8ZMjJEw$u;6 z7Nw@J{g(g3;p=CkyUr(Hli66BW{wI>OTa^U*rTy#8G>9WsfdR&Joy`CV@f4j`b_pF zOqDarPrEjp+S2r(VAzKHA-wzjYbNw&5^dS1FA`mfwLHbU^p@+qeKzL!2gyf>=>sC` zRQW|$_lH(Dxr>}D@rKUW$`HiITe=>)?Jq6OA7}Aw?eLebpRf&+VWKT#SF5(xt;>FZk{v|Ju3k$$l3HYky-pI!4Rz~sXJ}y? zN+O_~AZcUgWj;35<~IE<7!X1G{5+`fe7l~5Fd$?2pZ{rpekSj)N^esk9JmTsVSJ{qlo>lYr?58) zXwF{|1UVDf>bWZ+?#s&3LN3LEm1R*oUAW8G9`Q#9W1!u2&TBrsrQ(XKNGsJlK=0Tu zE8f&sdekXdaS#G+S(hy#t)0`{)zYfTYO9ru=KduN^j?H<+7BySNhgRaO{?-P?_R zooVdRfE)gmHsI$P+Pt&KK1rH>gv)Q{I66=DDE5;$OVGDar}Td6Tsnqi3ED8zRIRSZ zPuwZjG4sYGjeh-^vI^WG36E?ki>myl^^CNo*Gt@&{EEk!OGp05)dj+xtVerPN~_dc zCO@Z+%J&$(kjHcKMFi>7ikd2l&JnRsy+MMCXsSnnB89EXC|-rr;oMZqu0DTXSqT8`%v}Al(rVFZR9t&v&Z~XsoceN!F&>DVys=%V4Bi6sq zP)dRuY{-#O$xuWhZE~DovibBSkM(&?zlf_-byD#@DZ5TcP@vri%AmXLF{F`?&2qA4LNNYLEWeq@FWA;}TCKtHf%4Z86HVH5|X9~k2?Yihxc zx_F46ZlbCE`~BaW2XtR*=(uz%CH@@`umv(zH^&bq&-c3W!_sY$ctpZ<6zJc z;YHc_%(B#9NH!LqJu0=^pM5^eb*f)iijOJD!AiXvmmDmAhM0#8@o24RW7~nA7PZeH zT2S~C!xV*7$ZRM8m1v%<=m*$vNx@fpzOt~Vewg3Q1%#}i15N(FjXxnDMlJhXspP{{ zndC!Kv(7x9V>@<1%QhF~Pi+5@SlehgJ|VW@;KEatJ>mTwZ+Ar2QOh|N_X~rP`~WL= zfEn>5K|NKw(>Il1o56BHN|`g`&&Sd?^O(7$xNrZiQ#N_;dtE!SmP)LJBMtUuH^BG? zvxT?!cny2fSv$d4jDZe0(r*xI5xLI+j7-^hOZEu9C%WlK`{?5LP$V13L`PStry(+@P;qr@!=8TVQt5uw zYEln~m>YzNbCDXA(?Nlq$0(jl4DmvkkyM+SXdI)TGt4KtT&%)*5aWWLeW;IKO{@0Hs`k1rzo|*}?S2GY#)r7vI6M7@oq+h~?25+i-g{*4`-~h9s(x#^#e|ckI2CI% zk&#Vk32=<7qu2D^{#A{#Bc9s1@Hjv6+m^QFn>!-E74q>7rR1aL7WsY-C4F2V;${>C zqov(~^VMfNe~Cm-hJ~T+?9+P>^#Kw?D#wePwCl(km$L>Q{W6{A5D@#}pMGh>jXOt@&oaCTF>ib%5>gc zP3IOZK7u%V%!ORt?kCnGHoFx=4bv9vBu_0DPDw@6L6etSmp{6H+P0qtmdP-qw{}uB z38PXk!QfeKt+br+1dup3UWs{sZx7^%(Z1z(EDQWYl1E}#vEc8D_)Il;WZ&jR{W#hxml$Y>1o`>}fz7m-iY97z1t4*(`Ggv7K}hP&R2D_*6jn9C(e z>ZP?bVMpNFX1^rZ7QBqveB7p@g4E7Ob$8m6e}_v!I;4uX$8K+%)Sf!o>q@sBt>yX` zDriaHe@NtbCzB3m>O+z%|A;4*KaV5LE;Rd^Tm?83xWfjW!yw&wo7T_>UqX#`ia+S< z3uup`bL?{F=D$$EUlt)q(c3iPr4@VmS)A&@^va)~`@`~E19=bXX~Y9ukQiWclIeUJ z;@ezH0FC(N3R){ETJeFQX7gNVXl&IdMM;S#Q9?e<1x64F2tr%_Wdk)GY~!7==B2z9j8pvWsCF&kZxl>=Eu+VM_~qOjUI*h}x?N{XTQ%E) zg`luh$@%WSI4-2phg(x$^b=kFTmowyk`ayMQxw1k$fqn!^rkN9sIe#UdkA=AmmNxg)c+DT_wkmWf|uy&zRrfs zu(xOKfMM@zNy7&WdqQ6yR&;#{6ltQ1znW?zBMIan7_iEOx)@yVwW)1RUS_wJJPQIo zd5E@y*j;RLVk!+?eho_#Yraaq>La~1%(dJ<%W6IOH1!Qpy=P=K!eW#hr!e2tpK|}A z`gNsT3&6Epr$EE#`Md0-!qUuLlFuMJ#c!659&5HEdEnxpk&}0@a3;#DEEV)zQk0y< zCWux9UdaD3et`GaAAtAwpLj$DfoSRime&Lb(bzzq>DvL?<(dUERvrwjt(;s_8Eesr zgC_fR5d&nMMho+oh$ou|%i4)$lnO21r{X|=a|iYJ{CxF?SEjS51Y-FPY-nJMvV>+I z`vsd9`HX)05U$tuj1W_hL_>j8hGkmI zmG^(-HSYAUiuk|R(u!;ihR+5X0Gb2Fy`B12k{|LOkZw#bE`1jl7feZ;KSGZ;;>FnK z{T1QZq>2X1EjZ}6``#bO2p9Nm1h|>5~*|olRpDP1AMvLubW9^t>N=&BO?Ure$dOY@i?ra` zA3h$8cAKVDTa|CueT6(@zQSp%q_uuLX}J&k&-9&w3@H99^&P|Li4)o;4d)2|@PxJ3 ztWIwVIgYmGas;pEP3$bB!G%!#@yTCVIo~}R15)q()JI_P)$W~b-kYp{VW9{3vF;~8 zhNdSc-e8KyCMY-Fp^C0eR-zMX{g26h9#mmadCvVjDnmE=0e z{-)INfj(ElLOErwH;iR_jQ>07bEzr4tD5**`nxU$pB(bL$2AAwEW#8OaM{hZk4bMd z1#5QyiQSQ24T40eS8Czk$y1xIo^Yt?>a#y61a}CFAP$$F0E)YBkN4+%*~W@+ab%Fo zacj-^;=}dC!_F(XYkM|nwVC)(jwgzfB~I1{kW`bsk$qns&7Q?>qt0F|4GuV^t+oAC z2ji>hUkuxzPM&AR->@ARE75df6n7(|#m27Z7BiH$~5*LoOXq&_qQqCy#35N6Jql6X_@m1HIywp!@!EI?dD$PbE z8*|Ff(l#<=Q_<%eqBv66hTHtb6TPn0?1Ttza+$J`UOl&7M?>#&wF1%p*yQWFm%r*$ zl~x)zc7z!ej{72iu*<|QuK^8Ur$?6Z#C8wXEg0$Ij6gulEtq8TlI^Df{Yr#VNF^+o z^{{ql@;rZ?aq7Tx`)b4`Z)&+J?hPuAaTNqwF31k(8*NO5R@iATyIV8&Hv(X zd>^2EFuT+Nee${*hoU|0KKTk|QB83|uikP>bG62JRF#k@6(cE5;S@`|sZd!}M+8;( zPBwh|)8Kc<2Jg1IcaN(6J9KPE0_wfa^}eR?5r-_Qb4>8vt?s)Oh1YtA$G;72zP&4) zN8~PNWst9cH`*s>ZsJ~k_|uw5`oNHdtV`L1Hd4~}Rkj>r1Zv4ZfMDE-(~>+riQ3yz z*1wsYnlQND8mm`%cs*6nl=2T7KKK88#__Mg-(Riorx&834{xSGgbiP&!+Zl4!a)XH z>oU?)MEyH@SRa3*NK}Dj=)Qx2a}LRuckH1OmMk{TDp^5DMz=QFns@;dbJuBaK@-@V zy@?l!laX{?Pqa4_O&X=ZCZLCp!U$fyd zm2J^rkc{uMdLg-l1^~Xsw_(F!?a8_^XqZ!~JinWEdJQ0<i)~1Yqme@zK>?_hiUaD1%{=-ri5$tT3Z|7*xfPm-hd>~7 zkS2-s$;s72Uoock{6mB2i}8;$wcQ#yvMu)7)31^qwI@}kt7l@(H_~q}sk>q=Z9>Po zXm9OVA^(OksYx(gED+zZRAV!_gd_HyBc&@&tM+Ou{b}cWq@GWdc4&4E-wOxC>Z)c^ zzX;gdq^VWJn!Bl3U_$dE{@q>tmZkn4_4}Ppy&wLZ+fL|7hItP%DcByB{aXXFe|ryf?0AXoko&B>!_9cp0h+3 zYW2@AoEyzM@+p>S*c#Ch4(^oX#_-Cuw-&gxg0;CD_(${sR#hzNUwh8~j!~3Zl~|t( z_NM7kzbN+5Gohy-`|rxETwj?xQq4JfXs{=M;Y?1T{3{~v^i}x!WwrxG+M+ADFYJ-8 z09Ir?Q~=W)p67+|Is3%l4l0e<*&0jG-YRV@|8Cpoc$lv0*3TK0xvx-%cB9oasP+X= znu)0WX>T0t3kW9k@>1`Qx{*M)4n@7E<1cx2`xYJ(+Yrvo40%U4x7|>x!bNYVw?tq7 zy0VIQ@y31Lum#8ab^FqJQrwPg?;e)kyZnf*_>11K`EOFyR?1l^-9Q8RRM>rWL;C%z zy}u?$r}>JjElyo_0@>Jq7h#0SBZzbOO*C1ILAXoyQlQ9%G>w~ei*At~KCYjzsTy$& zDcp~f{OAdN)Tn!p>YcqHq68p?6Ms zmh)~Wn~OgeUiVfHDNU9j--MpY?==3z!_y8k`t7xxMnkW>&60(m7pdZ2l=$-tKN;Kb zxlB#S3wsAS%)s8f;`KJouyRG8{w_TBBVIAC)xOHdn^+>B>Q-&hi+QB{QsVc$aPxC9 zPk~4AtqV8j-xw&p;S5TCoqu~!NtBWw=HI?%HGl6OC|@iw#Fl1&>FMf=Ox?chyQuR8 zBCZUtq>TUYFqw{LVu+9j-S{!_E{`mtLA9$5xyIICV#NzNK{Mk@h3qIXw7V61;S1-C*NGDKu-wZ2!dg2@AuBNhh@B z-xoXrc`E&WgaZO@W_drFoJdCfqzS0P1NLO|7ub_udJR{#K*mC+z7(q=WSStnEoE0U z_H|SA8H(iUSYbthelPVqsCs5lHTXGZ;HSPScV7iBCk8L2&pLT8s*8ALaS=~)0vF~a zPZZ5~cF_1X|JBCF)M!FFGY2sBRsD_1isAx4_@;=f8{M1LgDQ`AMIW(O1pZ@YENT4v zgx%Uj?4jyNye5(y@e#(Z^E2$J@#55LJj5QUj$RY5iKbrUM`r$TNk9*k#YqIx} z7uz^+>UU563JB|hdGzPxgKDC>B3@IG`cHeTjMr4AWOeha$HZ&KqOSsPPK zI8-}-XO!UWottw6x(Xl7KEsg=vW_$GcsD;l*9A3S^t#{wgibj~T3Q--KPu&rMc&Cz zVl{-qpH`_oq10&wtA6uheqgl&M9#W|k}~Qyl8;EvPCo<^gcqL7c@dy9Y#Sr>MHYh@ z(fEu=tl92i=CwOwo z*ay0M z8SLT15+IuXiPC%)ojVvrd-o6#PTrjTCoKv&Vq?u;0W+>mY*#pBwmc{Xs>e&%1JK+- zOAcaq|ILzComUKwG{NF8Ig+xvHqssAyuw8??XX&}Zf9)ebo-pLwvL26L^wBGOZS=c zL$tR>N$|-O+xVCWF80qvHwz-4oG(<$GJsokx3_idGnw+UCi63OUu>0Jp8UoK{M2LZ ze;E>PY~$q&QXH@M7GQoV^JbQ1W|k^j>cR;3$6|~~m5n=^Tiw65?H51)`Ok?xn^_ub ze)H-;pz#^9XIxdTe7#_ zrCohX`oPH8DxEiFW)AnbA;*!sY^&ZTOc~>yS+VX?QC*qNmoR34L9-$ZHU1RyUNFM1 z+c~bTCq8_^Fn>mbJ0rf-v^eyYSo6c+bJI=H@WPX5j4zQDE`UW(Zs<%+p+-?^vUnk{ zW>$Fbax9%ynrARc!Zqm?w~{ksAs#`*K+%CU%aTX#>=$CI_OD_qwVe|kYhdJ|iaD|O=arKytq2>JW!IXNu7IT?R?{yXufW6jcz z+L3JDb)!O9VEcnwJ?uz7Dd5UpH-B8Qz3=d|{Bp5^>dJt!!P#eT(%~i3gi* z8h)c@BC@k&sAz;lbQb;`bh-!Bg^ikP*y5Xr&aK-Bs!Wb98k#>g9$j#x>}Oq)ALhTq z&~YSbx~aM-c{J_coFf89yDzbkgwNzF-^lWvk$A9u?~vB>M|@J<#+uKkeQ)15b-yR9 zidg$LvY*3=_0Vz18N&i(@%DwE!UzYnCYLTcDnA%nN& ziSUNR&Jf;k=lKomrKRd1UZYHR&r2UD{YcwUn2@dA`b;Dfu=4D_|CZI`0U#G{XoJ>r zxYhia4u&9Foc3(&NIa$`W4|$j{3lHQ%hGKWNdGCfctEESYE>KHTtm|D~XYLW92cSs_ zG@0{KgWRmw;qodv(E){&YxWtc5(;^6eYGwf3C8t+nU!e^p-w3+#bvPol9Mf3XK?E` z5ZLB*awkppGsK%9Y)L-35Bmu9SzGNpK>sCx&NU8f&&ME3tu>tTa->p*qaG(9@I}xw zJ%=wOk?aI#1#9Gyn`_i-OO@W#tsgg>uKT3}Zw7aMt%p+OqmxI(S`fVn&4)fMdPl?w zDFagXSe&7(YSibVbN4~va@_pq);+ee2gEL{`nkCwyvWQP=h^@+L&m?w+6P=SqDY|3nlPDRN=!qA{(j)b< zZhbx$?0=QLtnqIuK{7>6E#urI_ZHT|rkjrZD)(rJ0^-Y9wUD*HU33)@Wx z8tC~`|GejaY;9 zFcx}?lt=hX4{5-qjv)n03+dsW=Pu)&p=dm@CzgIv%&2is{`%h9(V^5OrZtZW=2?t9 zirln->oQ8yo1*bjXHr>C+XaN4w-cnbx4KUl4Fs&~YbZl7x_3@E?Zv7Z+>EU;;iHw)J$*CK@f!@BBDuaF8E@+WiL zJbEqR%Xh-Bd#4Slz+Fhg?f!@V+16>J88Go0!|*@jbV9udNR6Ap37o;P)T05thURI#_4E2&+; zF90!Rk~ejtY(g4`pv9V+Bkm80#n5l&j}@Pz;-7x3_*@l#=VQe(e`Oa_Ebsu{^EBCTGQX=H%gwYJ!wHOV_Z z8EKj^q?q~oizj)LZDZsffLz=D;xhD_2wUzL4Ph##GTwJg(E=dFl#=6u1vmFQMJ!mj zf-wi|O}A@QVu&4nv9@QjI2upwSuoaH+Joghwa4g9@6^%7vY+*M`@E~lvW=uI3vEts zt%&bm)T5@SRC4G^ zMk<8}*>hp6X8XZjWBG1_^ImR^lgp^i@gS?5okBgGfe^beM_wP}rw=o!rq2&4$vwye zm$uI151k}6>O@!enKbLrfcXr?E7m-nroE0wKf%lQe&QA9MhlVyVVYz13Y13F8@oX*(^#mWlkKggZ*B5p4=Z|qAatz?gf-m$1q#KKHjCnck`N@B~X0;$%eKjUUOoFR#w{z(j zj{VVvM+9GR;dBtOK)k9MOBIvY#Bl8gqabXyG~jBDn`!k$XS~q@1p_Zt$f7$>D)75A zg=~p3vigon@9l0nc(q)y177WNg5A#AqU-h$AHhW)SJ*bu7F3+tgl+jU*Isy8S^U8K z8JrEqpIvZbrhNFbdGF=+*M@LwyuWNz{J?^jy_e$8&VLP_si~fX9$H{`E2M5G_T)#5 z?FvunKenZr9o|c(gZB^@a%yioF<@&MN^d)13BS}s%~9B$@og>gZ^Z6(aY^Qq<1w1V zn%gKUd};^M$tk@xr$&>L(d4X7*ZlGR1jL;)WQ4w*+V1qfu{(dHUw&KW%9Eq<&B>)$ z1mn*yc-wF6WW)s;S4!>5#!8U$`F&M3=A*YJ7q|5auVbJWH5e9`@WIy`kat%{+g~Y`U!RA?^ieZ zyJ;=|2>;|tsY>RW|I~IkJRUXu<`Om@N}fe#Tum?-*1wd(&7rTD?k7Sw2eNl4$7;?|=63Huy)45su8!v#UOVBp6Q|9kK~910H$VSu)}9q4OkWqxlYd}*gN z`nSY&(`zU;2h06kr{F|}Q(SRoepF-=^)>!p^0VoD1yWRT>OG%>@!6&Eu7x>&W=XiA zEF6TV$p{OHz5{24_;UsM`@YC$)WB^A^>)(%83@fMxOOr&{kL39o3)A@h!Q@euS$I(G7{j_8U?ilL8 zLA5KNfX@{A&&GEoPZHYugV6rlMC8(hKh(*$sx5i0FyL7FCfc*9|3$%j97O)oUs~qv z3g1+QD;@h0!}8MZ?5VFxO^FgYUK7pCIb?QBOMK$jmc;iZxx%n#?ABnJjeE(w@T+A+ zic8pID-EHPuDQ0Wc`iN1Hq0FIBui6t${#V--L(mnJK_cJDc)n9I^ntfq}GcZ@xs~& zx?bQTme@0)t+&0DU+GOp2xb`Aw}iNecrLx5IbJw46tC-vtr{z~nCNa=d<6EI>-587 z;*1B>Z3#U$wo}l~L`L8ysTFPKb5uTK?VV%y=_O<$6B(+P54e}%x;=m>l00VXP=ZxS zm$)^A-rE|&e$!ja8T}diJ4F9t&1Yh2-8%GQfJWklx-F{r`iI%$_KG=evHA*U=w*F8 zB9))cS70A%{tv#@vJI1+HaL&n(Ft+p7U|fAp)?|!k`4rxb;)pY1NEzB+j^!t2!cXL z*d# zaMk8D;&IuXz4m1Z2Of!AE~5gg&53>;LHhI32W3C<66>YOwUNfZI}}f>PoBu43sy=4 zS%B4lb%5dxTha%C5}dnee}^zI)>6T9xN%QTu~xx;-EaA-lV>3jF__QQoRBgH^y~k~&h75&YYj8%+_g01Ryw(_(84I!!iR%eIR5Y!Sbu9F{}}c^gFtqO z736e404XC0-9?q;{Yw#x7;E_xgGY4+U$IYPx+;}evs?myDYG)kmEC6~G`O8~|7`;# zRQsy8eR!V;u5{j-zp3Le=`(GNz-7twg;}T_KH)TpNl>fJcFiI3*|5m9%3|*FSH~J`}56ov^*4E@Df%0i7MNfzJqz{ab zHNVfKWTR}}#)FsI&i;;)of76#OaJ4hOw80DK-FThq31OlY<=B92h-@luYk2BX+tNGQQtF{`N)v7&^hmWOL~nt>m)C*^U$3En<;UJz?O z24qEJMf!;932GB-86v>nR4$USnL^f9PRlr3x7KaRPT0*TW+PHTyX1xK$gDJ$wa5!? zqDvq!DWNGr!3%B5Tv8f+f*(j(+x_G5F`b^<4TZ3YmuuoTO!B#Bd1g6F%smiG_l#@U zKCUbt>hjSj+BxRXB3F?Q|7AM9sa!#>pPhe^1{K_j4TQpFkJz&GwhNuu$qr%=e!BUf#7m~7QcTKb;< zZRwA)K4Q%spdkI65YUn4%bB)-n><^}zWvl5cr6@6Ibj#a_;=g~Qcu1^niBE* zEVZC=J6?j&3Qxzz1DbLc%M3Lpi+;`h3*Hmjw$oJRq0s?W2~%wzS6bCmE0Bx@i(~euZ!O1f!{_AcClGb43Os@tj7n zdYA@p9;dFr#v1vP)+BcjBsYC%Q!x{xX&@a2(vvN!+O?2p_&8HDW}q+8g$y5Mg&NWb-oB&nI`Upxt}!CmayZ2Vh+-Y_mv?iFtw&3O95v_AH| zsmz1o9ucuXAVrcO$C*Xq`kS$^#p zANO!fpvfu7HQK}(eLz~r!VcoElWhuqA;biH@!Jp>(i$8dAK^Wf|Ggy;{8`5Gv_4v) zaofG1{^Lp(JfZEqUu0IUQR%}M!cx44l{Ud^xkUfc?6@BtLO57keGfY(@nF6ES$DPl zSwGMIY;59>yC*F}J|IhYH$hHHtL=5$8vQwcNEcneS4sOlYW_YQb<|dNuxr$DV|NQ- z8hc{R_5AE;iO{tw`%{yF9RAJg<#i{a_eenk@&W`R>(nnpoW4rpY?+K7<}_eJU_Xd# zBa~%e#awWmv5R8VfXG7jZ3`XsI+9nid9BTTL7RVv!b?EwnFq?-g&U#^xBe#yV(tcN z@y_|Dc`i3E#h3n)0oX4FNxA_=Yv(THAN+4R^Dp=|BUt&p?ny1(Lc95IyEV~9)jaAq zkgf(3G^BBLk>*LgLk}_zCPX+45+QS8*nO*IvCfqNCO;!!aZ%?sq)zdvyYw4EmmNn3 zxi?ibdrW*27rkzxlytSfpg~4yL&6Dz3SOerHo1A2Hz@yI|L$Ae?{A91t&xyvIW?7v z&@ncK63rg^sd2(#L0E<}!fA1Yp90{uRw30np)J1`vSIcu6RHYHxf%=ZkR6F`TXhSK zXdcQGeI~xRQXAlaTI>9sT+jCJZGR)2iCoNK7)R4BFY^Y_^wy9ssYMR3L6W3c^A`QM z(E`y6UXG;bkiCODuq%{k>GR08Ugr~P6$ZcmHCQ`sbF|9+U`kJb1ijv<=uhv^Dqsdd zavg;&wNxSUxQeWITo7N0fDxM1y%tqOrvw6nddt4>%}~LIQ|BBGeA!v80v-0l0XM{j zR75?T&#=I4{H?@g7sf#f;Gwa9HBVFl#Bf!EY$Ko4*+YpWJx-) zJz`aN`cn?2-+-5{0|ma)a@x^|CEUR7UfSrM~x=W#YqNMFhyAmXOn8Z zdd`pdliH5IiOwn6kwximYz*bMr4#(?;#bjC8}T3!zIb;n5$u?6^Y1jPSD>yB0Vp?wya?1 z$bSi6hq(|pv!{5edvJ#FwwilB?PVuFAYu%u@Hkb}U5p=HD(#9UiIq^dXH*#!WEDj( z^s4Rq|M-?Lkhi5j(1>HryFn=@fJdXJlv=G7fgoPDtk7Fc1r{GwoC#Zb5J+?14?oAH zws=cd$3Ju~2w$ZfwP6ciXMdy^y1M)PMDs^SXqGSf?j$c#|YKg zQC%W*QYbF@%n&+8c%>e;zp0E9QIFTcBW>|3zb?uk3|`nMS#+Df^iBo!CR+2Ka)_Rs zwBiHRP9BBp>Jc5qwhcQ%X&eK$E<6RtPWD%1#Ros4O6tGGFaF3AmmB2&i~^qDU%@C#jK0egWp2fa z3pfm+(7x~cF=Q0FNuEHKl{@xW0F-2R+(eJ(-Ky2>q&*xMn|tt@NiTh@$mN?M5$JO` zk6{(aAE^_79kG?a)v!udr>nl(mwFSzm4BT{1QUn;sAAOk0>yFx@A14(gD#A&U$N+<4TAJy1XR!88x+Zoq+Ri%3L>YX^)Wg77z)1Y7;*F z=3ljDa?;nWnT0v^^~Zw!23umTlwMo58GM|Jm|DrR+E!FR&0$0d=Y~)l;wA7lx%}Y8@ zl~mQK*K@`wc}T!`P^qDoLQH>!!)&?g%Oj)Dzi13fHKH8_MWGkrqVcDtQ>JBI{GG7U z>mVZCd*0|r`nIuE+%_Z>{V=H&4q$84lCKJ&m z5fTDX{NT`Av}8kW(Pl1%+<`p0Tvo?VlDENS<`8hx<1rkQE6m$9;9rtHFeW)9ec*JF zu~C`Y=s0j6jSVS_W^wLd7YbJwG3<_Ewxy6+b4uUspstJo)Mqfk$AiB*k7^9xt!@9; z%x2YDya~=1aJE7v?8#JJpbKe{n6AHueK!>wrn>vJC9TsUMtkvtF7&L_!@K?dxuLIP;(B>~4m2QuEALPU7 z_J~h55yZ^wG(JGo+%=ln87uB5Uv(X%uuX{nPjF7HGC$@x4v>?zm%JPLus(+y6@sD znoD<-Xfrf+$5zP)e;hCZ2sM@Q13~!Lpb>0&NHk1uX&AdWCa#Hqfgj?wVzyE!W$Mz= zVqh$IP}{=2qke5g;Sl|Nf8Inu$i6&^$@;S^ z{27xn6UR@!zH-rWdN(7GUo&ySbKxoVBWGQLPmQ8hoP z93+PA1>dhEz>Bl*eBifhz)VPxG9u|~p`+MxOetBhhdZjOl z`DUZnx%pA;CkmAgg!}M##=>y9xH~qpR+p~mZ zfV9gO{SR{JiGEE)W@`-e%iX(n_b&7_gNaEP>^0SQDuRkI|=y*x@M zLl7ZT-)AGg9!cFfQ0wFTCH>}^^5f|tNFodG!y$t>CK>=y`&y#s66sr*W!D!^=gG;BM6+f^8a11(C83V=2h&n-h!Svkao^2t1Q;=}k!;4y z>}d97=!ic$)B%xri*vjqg51P7>~P?~443^oGdzFT@WNTY#phYP^z*a5&FMGG)9+7R ze#+N+H4vA>n^|Te7hI8vtjshQkD^!s(?XIm2EAhIJhqe?{t3oU(G5smwTy=RF)Z$= zwyosfv6eED6l6+%re7&pIX{bL};LnhxCS^A!YJ353V8UqUKLGWuEn;%*m zN)Gd{2ftFMuhpVlPkv$+<=mpwacd)~V+K|v-PvRZY`8bRF)ZD^oDSb?4MW5>tBo_@ z1srjMA$ymzlgiRhHMNe^DR!t(M(vTVc5(7&{tb5NL(SEk3WJuAxXipz=smDMnmvue zfo`Fv4HGP0dsM&qip`(7D!O8;0YHoSl1vKk8aBe{cV(aAx7&!Bs!8cS&Z;xhLi?X1 z78y5aMInFGerEo#7a~S(Et(=nJG7VtiMvgn=t%4mnis@R%Wa)mj1;gPPc*Dw4coJq z)1R2ip44Y?>Pi#S7)tG0k=UsygBl-YP3j$Z}_8-@FP;oEq9XG(;2WtwW?hgH_-u z+Vt36)+mT2P67wU2QszA-EW_1jtULo7*0MI=Dk$dT1yxs>p4uUx(m0iR1anlRy9+y z(oby3{+fxidpJ=@ZF8OnIOpB0b@A_ObsH(xtl%mLBVM~Rqgl(ZN5a3<-*V4tXF==c zMg5h7HZoQoX8tKnW^O1~#6D$jM5AAHhZ1|W6p_j|CI0@H`>%u_#KYE=&eo(7CG56k zpTP-FL%7rSviWmWK+@t*CqEm1ap_U{k&v!Y_6nxdac{ z@O!eCi+ym$f`gr9^8HnVfTZ0wxi#2*sEg8j|YwgjfSgacL&HV zhEl3MgV|xA=rJooSKM5(;)6=w;$#&$$%~xqpMO%sJOAVef1~WCSDGdjC0}xTvqZ@9 zbJ4H!PmcC~nCcKVI}GHY^S;#qQ<|e?dL98W-5pk146bDhCzlH`E)!zp1H@Q92r-sP zv#c$Z6b45t0D;QcFAECViVvl^qF_a$+mWjtj<@AT)-RRSmi&{Cl?|3$cc$-H>loMn zS-tNtwfy%!itk2mmA_cQ=~G7u1}hPtL_@bH=TO3I9J4D3jwVs+@QM0o7O-#c^(K#< z2tZ)1OxnNQWC7BNHEeJC+!P}GIIzMHbsLT=g_Ovv{W+r~$vw86BXUS6gw*VQ zZG;^Y(MG&w*uo)qYG~i*YeHoRrX}J}w6qIJL?)Uv*g+^!V6w$lqS^`7Zdl)u=;STL zGj%l?LGe$(SM|B%5*<|{1lu}5IJ*AxU>|;w_y;5O4-5md=}tF>of|QbC{ie#*a;_- z%M;1iP_(yTkZpGY2fKKLb64+bB6L5gsj1Yc%96gi;ht(Ur<^UY5F{e2Ta zOTT%gI8tzbMahayw#S{@Z$r-z$0fTVcwC5y72sK4(SL}-Q=$fYTLr`bT`xrXXkdeg z5PA{$D*kRtH`kmB(-cETe9-(FcF9+xjFI3|0sn7#m`_%0);?VE!I&skvpemqF}>wV zC%u{fr`otcZIBe-a*JYF;yayLwDMQ2*6n0HB1x@Bq;ejAva4{7mg5F&U(k@n2wl+*Pa?oa6bN65T#Jl5cYJczV*F zzR6P|@!Ft#LZYv*>!@EUzBfY&kn7&`XGAb~>h$s@uMth^&G<_Ti@leC+gbd`Bu_xW z-51+%Qf5gM&ym=qr&D7X@QB!kD~Iy?!eM>*`%yTO-7R_k&2fo+=`Bv~jcp($(KddK z?HmNje*2a44-d|pa6CKgyy+GUJy7jqJF0d3MNVXszXNG};Ph#fU=Oyw#ql@QU(0VC zkQdZGD{&@OviIW&2BF)WoS{9VuLSDx8#q{mdVGh2MZTWgQCrEIqK?{f?d6Wzifa8K z`4d00m%Aov$0SEO4Z+*x#^L1u^2!Ojvp=|m)4taOdEe#-w`X`)>EyE3qCjq<3Tfu; z)7&@t;mEX|$C1G^kP37igEG1{omZ6nvOlL1dFdOnwlR1O&FmAV%$H<8=^^xNHg9J% zsL#R?(zT@_NZ?rE`6cv#aLwFnOP1Z}&ncfgry^N{?M^9>W|xtX(JQ~r$F+AbJBB_9 zJomcUk3kB|UWq|9cOxrN5aT1qaBNP(M&U3?@CC-TK*(!{OivwS!%6;}{_@{7_^7>~ z4r;GN?R{gQy^qLu%sx}gC8+;cbetJAQ~x&ks`3RV(vcszCtY0{`lwi^_8%YA{(~4K z@?9!btT=0Ev-mEhG&KK_{2xD_uc~lgfaJ@8{!hk42Qa6o{|47T4o_^4Qt`8TBKZa< ztQ7kxbT(Et5gRZcc%@eYHWX`{)WVC@CKfeW@J1ci8*6**H@r5gyh--JkGF{b~6zu5;jWc?eLHf15BXOdO4pWza1&3z5s72yT~!TueU7Mm zxWJIq-I*Ig-qJ1J;u3#x#9vqv*U8|XrKfX37nWQz`|}+?Q!vEY$GNbJnFZ@p_32<*jpbsUR0fm?IMGWM*0K!3ATe zDZs~Osz$_@Mi(BHJ~(7i=`|fw%ZrNEg;;23eh6n~aRTqsIZeb;ow;G?H4tPc-w!1@ zQpbV|X_+M09T=5qT$L0mKw7luqCfXl-gOC>@A$_x=>wBE!o3I&0|hrgC|yx2!Dp1%cD{$4A~r^N)V? zlSuxjhZl8B9i=t#rk3V!(Rz3tb0)OS_MRuohE#|%qKmGbJfmd6HU7mS&tLE_s?cHB zYQ8WM&Z_84TuHb5W##`5bMGD=RdvOGXObZVh@L1BB2ooKCG}FG)Dn`~Ko~$F7R3l& zqV^*8rc#^+Mmar>rk1w0)z%AbwOYkW5s^XyGy${_fof0+Q7N8rydYXGLFN5? z_c@aUNc($!@9Q70&m%c=&c3X@_S$Q&z1G@m8KvbAXY3$PffZ>;XWJi@70u{THZ^a? zc`{}lNd7o5BQ3A{HLUxBva9m=cvb$4uNv(ILXLMeC&N#$(V|Hph*Aj=GuW!_JZ~X1 zc=O|29E`2y5`DhiJH3YdpE9>K07}jkg=JHUtk{)8HeTMwKcITCITtNfpeE!_^V;{3 zz%3Ci*z#pJPMbE3AXJE@$?^NqPruuE;FQMp?BezI6$7;~Ygg_mma%y{n=*|cIgcGA zswAL^`Wib>y05n&d0ZTKD|XbYm|gL73@u3K;ctA~AQlmqf%5+Y0<&~rBa8{)ahCAF zt6JmKapc2srj+q6NKVL&t?r#OYY;1uVjj3v3n)P7pt2tiB>v=+PGo`o8cq`CzJPN{ zQF1Jr0TU_rVa?LG0>z+^)ekKh)3u$bDCy!3`pylPL3Ll^ww?~)U%~T(d70r%DaiRI zF&o&Nd&0qzcs(}cxmBD|*sw-g&xdwWyfCs-{8xLVhn0VU6>VsQB*d7w4dbs&^DQ#X zT$3~k2 zEA~|?IHL&G#vDX)b*+@S7#E}(Ck+NFkzQvjGgr;8(fTTT91)#0Prp)KCYUIRp~I4y63*sT4crEh!q=Oe@!a@mRaD{em}}Klp>yj%DO4kC1NwJO*{uaL#x_?- zyw55n^va#ucnMsg=h(OOTs25usf?v=AgDKsZIw~Mp?7m1*ZH{F1k1R|oRFtXs5nxkM)qbq=xl%uIUf+*Z!C9e+5Md1BFFO~y4fjVkvkdRn+<Z{ggSMqThq~w3|<7gXD;s zPwZPbC~`C>OyustEvHrQE^dj8B@ilaN>|MsV-Bn#4y?JX8SlUv@DHr#cXwbtxtjy4 zy{hBiR{Z?~rIr^7 zvUF-5Y#>7XuWhB1@(H*(J?Qx(wISM|YiKPUPXL%UfQr>A1I=l)afB61_eP8-EoxXpg1>L zo|6^v1izUdqw5#m`}q5#wPbkCyj^nl1q;c-evP}1OAbHJ-qZMQcFCU7#+f?;FX8W& zekNJi-`;OMbD**9IPtyJfsI1bY9zSSKeZ~*2a7iv=i?4R3QtO=n()35!C>#cFqLVq z@hy;Dfc4DHE@@#3%3x^!CjDx#CttY3`#bp>ZA&STG_XD+!K9PF8f%?22p}-aJqR;~ z*Y$M97cuZ$@8}OWF_Z;1nRzD%UuV)ncxIsT>dt$rPS(h%%G`2&oY zCqc6~m?gL(nJDC|$ruWuNL9fttZhaR+T2!(|Hs`rvq}3jOn$jvg)wZ(n<&jO!gb}6VM?}^;b*-`H{wB*; zAe@skdzMsXvZ3IywDm?Y)IzvocKBv;6KP8&)<%}o+s?zPf}_V+JX8yl(+l@j_7B)o zgY5g7zwvoK_U*|-BR@crI@%pS%+_%Y5>`j@)qk+-+pEk#A+h5z*?9YINkc|HJVL*c z9Ph*r*akxgUwZQtNCVi=DD%a$nlehq{3`pc2+9HA0t0wDy5iCbJ{@P zpC%IEPG3UCkqL!PcJo-Tja-_w&qEl8kcX)>cT4Y^V@fxNucwXtvQcKY${WO2Lsre6 zR_uve4OtEMjP%Xp3=KAqQ?abm`9EM!844XWj~k*l_PDd{Ie8G05$>dV`st`ZR`XaR z=A<-2+Ri(`W~V;zP|!(uK0n<{lU#Gk>_^yx3$RDT>RyI4zswLYCSW-fbFxLK=wEH5 z;;J?ezmcz{hSC)BYNSnGIJhhc7%#ISx9piD9YW;a)#mgPDYyA4UU0@G%saOZYg+fN ziAGkcAKeyiGXnM&MF_m8Jb6doLUZwI^IN#Vv12?z+gLG}Gcows>cY|;+}Evr1lJbC zgxAli-j*DFsH7!1KJZG4OTaS}UNlFk%_79dWw*v^;N-f$Lt@Z~eoGrUC||jyKWP?5 zLo2?A_DgqIcU4JPiL8O848d2!O2}ae4%J&M*30yz^L5LN53R(VX1I}Kb)w&vkdIZA zH-XKiJ7#hu=@@mQw~>Ed#z5_i9;Dt&HGfCdvhU1Q)bNaZ5M7wjMlSO}P62^PH;ZA8hLwv>9zx z3-rmDpERgj&Q9YgxsnxQ^8J4b^o?-~Ff2oU$OobF#vT}EwW`jokq!3C$9m(kV4R>ODO zv@nMlzOEZBeHk&PFJ)BS=G0;Y-pT3H-kv@c8Nuc*d(ioYGk0k5EY31S+xPDJ_j(2V z+oUWYT(Q(okG#;OFzwgvEN(Rl9DCeAFCa&({m=`GR)2O&*eabe^o5EwpWQN} zhk2oGJ~`)8Bwpi!Eyf_NbjyXZfxPV0lJ~R~-ywvU0O1!t43^fl&b&sna|)u!1YF97 z<`B%_5>jpD&!`|C8O)wFP`oO!p1aGDbIb7Jxg?0M!L6qe4?tW?$4{}~r|AJ~<=eLw zHdmS*jewTh(+@f|tpebduS-V(N@Q9YH3%l;vx!d3o*~iXp=&-^? zu{i}<-dK~Dk36(*$KZDR(!v~qz+N;EXZypl!{Qn<3DNmw4qGC2-O?dBTUI#eWTihK zdXsKKq6=LWxL`~a%qtyflCXd7FHCs!s0!wqV#6_5*A5HzI>hWL8N~*5^p)%vpK}c z>-=lZ?1DuBhI+0zGxLg{HPoeP(|_dyM_N&>6-)!-NhfyLRY|)2zGAakolgr3|6vIM*r= zj;}-Z_FI-gzB3-tzYQ|E-nnF!5r%(nu*3A)8~5#qH5AGa*}Cr|>lqSIZ%Y=AD6QT$ z^BgJ^+sNjTZPAfg8Cf~|Fj+Y_&`!K**ja0`ymz{=p7za|fZO#2G?u(08|Th8oU+>4 zHt93V{ecNjt3d2O5e%bn5;bN#{5J}c*Ax{NAI!P3uyYW2>m(-=4m5ekiQFh5SkTO( z=pDxuW<`1v1G6?uhNhme4+Ew9Yd?`7e!myv$no;G&%$hK9O0kR{v90hy7q1Dg>0~% zyd`(&ohcKd8Taf_tc$bRyuM7cks4<_nz-;tr`8+NUWUZ(Wj)h$)~I|9EcFfMRnozB zwGMfI4_j9@_|&D-9a%DnJkPo!wB5Z~nZLjH{A%3v#nG8RC18OFaysF8lpm-jq+ zdr{I4?ua6~2wo_#$#8CRYR}l)`%AapdiA`6hu9RXyYHe@rr#f$e#sZhJ7mFKE8RNd_fBr{R{N4*pp~s<&A?*M6MiMv z>kqxqLRnKXIdFh|axz#(Im&oiVKy!p^DZQFKat9+l#-2dTJ~qj|7SR)9M(nlUcNm2h46ef*DjXu~O4`<0G!~ z{AIYKZ|!l$Blv}f+bn9ORs+KUr&K%BCl?T|=wL)1avYMl>Nhnn+{-!1sbsf^kY6Ql-fA^e{4uig zRiMXH+3SV_;k13{r0@&^01<6xNBX4tl1(tq1*@c+cvb9ff!f~@#sN36*C|3ct!^uu z6r6DZ{L-93F*CI3+<%bWpOFofQ44-NLK;Z8WOZKgelVWtS1pdF#q?8{J<^+@XXs1m zCI%UyA}<;GB>9ls!q^y9krw&`b@~3bckSR^V+j{H}f>6Si6Y(Bwsu)X!qq^ zXc}%nPv_eYRdH#Tck~B{L?0$+<{+GM(!IGo#{C?A9v40EmB>f@&3kh`L>=?`(>^TeBK3 zI!^ZKO|(~&{*zX+_aDEp*CshEz#CXz8jnu9AnK<#;kkF1vo%#H-^Ct(2DpU#V<#ku zi_Wttg!sjJtwwQkG zJ<;}FGmo+NgCA=}OLBCJO~f?gbneLQri+{HC=wG9A&47)pqv|jkwVkL5vB3l)fE+| zZ*=5!k?jC&_f0>o^#wdrN)CA*BfxQ@wdCWy@e91+U1qI#V;bhbSb7*X61(O-dw@O6 zT5=H=3OjLd4&EbR0K-9Y;BS)GT#5RH*s}-r#@T2D&fC!g*BO%{^~1--*5vt0VxJyl za2RIqw+HaWaHj6;_422*S0@>&pW;b2Cn&)B5xkQ}NhQ+qHkF|9VD`GE1OP;;d@)_Tb^Jt8_9zA0Du_QHV<*#n$DGM?uq z%M)tA$)ATf#_h?u?_^l7xYD(B;p8+2N2pACtzmQ>{;Hn)INQLWWJS>Zjiyc9iW?LF zH>4|YMnG^TSFi)0=TweKG+^)A>jeKo;XW$7uY_(USAgTvTgS}ZC1GkOubL|>)UQ)H zk%IkQo#l8|g(mZLqP}_@d$s5z@`%wTwMGEh@o8f zS+EYx4%)XK?rj@uKV{`0z?qXxm<|B>&G*4vWIr|R+4v`XN~KCUxtcZU`^%!yHxw&! z-GDyMel7eZd%b(TH?R?<`#`^K^oysAcrV{sR+o|M4 zH0PRhIP<+#9;~mw$MF2ha7#m)|+QU*6bteCXlwyX|i&RZDLz zRDZ0^$W_kdiPBB31$jt;MjowFOUMJGC-Tvk0Gs_ADMB)-1T(@xicrdj>U{^16EgLJ zscV=x|Lvh^RG2VEvIjo2ZT9GjIZnymbT7@tMHPynU0LBz+Yn$&&I*X4*QplAJM3@4 zXPwa%a10Hn@GqLKE;N-oN5dI2_gQZohpFa$0Ooj2*`xDQj{z3z*Z*)s=0jd;fcN3B z^?KBLi5znn&t~zQ2IGMbI(=cUD8%~t^nuVYzi^oMc2(_19cv3#R|>o=(2nJ$6)O1v zNvL#vICov~E9rUl>oOM)I^i+)fFbbI9y-M#Ru4faFqHj?`~KOqS^Wv`F#NV&U6U$j zP5TRWrRK}DKNL9=j<8wlzlrr9K9`m_8UoZ)G{8Q!icnti_eBS8P%Ql=i|H=D2Id^T zZ2f_D!e{cc?iYXiG#Po#EU4i_B-2zN)3{}f+GOOLA#T&*wASUmpSN9+C38tZwEdiL zO|<>2@OZ>GqDy9?27G1y2^9!K_U>i+@NzWJb7Sg%N;dfzBCy;-o~z3iKWc=I0!k9d>1)) z6}l<3xd@c@1Z*}^ib{5qbZ6u%d^&sZiuEP?iu?X|I_sphpE#5A)2j~OZ@v2s-hN^D zYei9MC2`Dm-f;@s&9{<;5OI!?J26#HHYb~Y0tLT#e8;f$0b4@-NDOJ_9g9lRs=M^d z5DPl9$;cr+;iCn1`JI$!_pmDqpiF<)Xs#^k3i3!bRhgH5G{ditf^X7zdn1R7a;IWQ zY2~20QQW^03;|WtdKDb7SeW_+f}nb5Q*fl%IDFVHoF|BR?rNuiIThg(o8uwQFs8-d z78JqsV_k=D6v6b=-+&lQ-(~z2Sx>S3SA`}$M#o-`?!CgUvEB^!ef!rmr9&k zM?TS|D42QZdVVzZd)D@Fr&Ejc){7wHrE~eml>eD|SUM*2JLLVIkokR`_xtk9@0-m- z*Y-Is)I2)o^a6IbXJ4&PV$( zJ#enWuEqH-lz)C@@bT;jF%fs-L08&fH)4-n%grq(n5a;*{u$C6KfnC*v-i7t+4VnS zVd;>?4dqB~`uNhu@Ues)fzcx=?kQ=gS^ZcA!20Ji1Mdpf-=WDbs-~0-b$RLD0BKIc z=5Dj0x1c)|IGM_w2u6N%8Rq8&(H277%720wbMpob1rP^gp*&)~AoFMYi#gAV>)0qR zl}k&p2II2v?eEAf)LsM)!qg)S6fWt(Q(yAoI3 znjVOr$r=7x^ro!oG6w!ug~95hXTqpfvo#srl4urT>>O_h|Db%F@-k4PMJH0Myeqc2 zH&X}4ou=$lleY&9owLrg+z9G_vA$JpNfugs=7dAwQ{XMX&N311$}cB35VRMa9hhJx zHUKz53bM;bTk+l+#C4J0(b+ka&F2>g5`Y03^pWs~>wr1b7QL_>g{DgA6fXzH;2wso z#V)Kh2m(?c`Zuo4`o*|0pObBl&WTIbW=_blH}fO^2DF4y3lcz*Zy#CDFE;0{*slD@ zIu1=%B1BKI)vDcz^52ijO`1r~bLD${@n1&PG-sa~`q8(VM+d)s-Q?-hnn&l|@SWJI-c8wAsm-1k;4>@tDJ;TW zaA&utE~bD2_K+cIL8HB)*FO6Ix%Lv*@w$9!#L{5PzilPt$^eq0W#@)}XzWTC3igMD zRKcJ63qPX=LXmIqCOcUPHapL*Cgjc%mO#g=$otU)w=#Z2EwmS4VmD95=`ng>wAv#; z6>rjiQTLfmFnqT+OPSwR{8pyb%tTJ+U1Ybp%29r^6~Ba!@rI225?2h|)Yo~p^iARP zwHJD8fi!)*5F7|e<(Fvu8zX}u-7G7vFvaB|E1`rm-kU0cDBXAYq-pixt?4&CPSbJ! zV%~f6Y0)`BT*Y_^$PFB+1T&Hqf0R$j$bymvBlz3<_N@-$yz%jq94%@Vgh%WnEXgRY z%8cQ@@^`VHT8X6E!kc=x`{Sml?EuF1~ULFF&fHS*5|u|(Ddn!JiLhv0bB7RO4ese6?R`Lvcoi+dJl3m^C?K5072yw z$Vmg~lwWGa@6lg)Eq>mNpgAP}SSb5J;jz{I$$JFxA2EaJQ_I0 zvN#?WvMwqEvyneNlr04gRNrvX&xIC&t#IQx>pA3UZ#Ze~7_!NE-70fHN>;mU^bBp*j92A$13fASzS?sUS1e-hZ+r9swDCTASr0ckc+n|~$Z7|-h!;Re}&b#gIbF3b8 zw&d6R6%!)^vzEUxkS#UmjgY2=z2{{=7hH4bWxb#Q-ISMgYLapBkWWRex;M}p|1@Qe zh7@97ld>|QMdws4g|5_ge_;FN0JHn7COL+| z#UiaZ6<7T2rOxPJbk?B@t$0ek()18DeVUp!(OVPKDaox--)fAUK%RvGVyvOXU~m09 z!X5`zAR`RoV%$f_POI}+gZnfW4#|OBx@zu9mi*p8Fnj_*-&P(+2QPpxBS$IC7MEW` zOEFScH@HuVJi1Xf%GrmHX0|Bn;aS?dq&wfA85bSD51GQmO@n!KD|!MRp+e~&62VvU0wFuxkGL>;p!=!7%_@u(@jblG6x z`#CWTFIukgGeU{Z;UVF*=>8q{!<-UduL%XCP6v%7UR`CGV8v*N1~;nThJ1H9v(Y(M z#K+n17Vk0>)MVXjl0Ej+*iT?o820Xa6i%cmKSdx66A1kYd>>ls4l&$C>nBdIiLAia zQZp$Ey;N;W;*CIw%T%H&Up^0tVXCqHj?Poxq#VZx+=c`8TKCg`dkn3Kxb&v4<<6`M zl-#|_ro+(wU|xxews_@8nXXsdxgTv-C&Z>b{Q z;{UYMSHZn?nWh(|>~ckZ#k+0{`a$d7&nZ>1sX15=%w)wRvRGtKY9KHD^=w9zXypa7 zx&hRsUglZ7MYf%VuS0c1&ZQMzAa+Q}y+ge~8?d=-4{WCpJxMEazVX6mk98kDQLA9N zsB1K;MzkZtvQjTIv(E+0M#I#p*-2fRJ-ypzdv3) zNpD%X&7n3S(s#}wyp8wE@VX-y9pVT=(YY`gxHI8P1LY-k$NK?GfjDz7y}Z=A_eomj z}6QT#dFb74JF6Q^y>bRk)qSU59{1aQy%|U zOCxD%@7S}E>Wn?2swIi*9Pej9``-Fa+{lo`lP3j9E7`BJiQ(q`a(5pasOMf!Dc9y# zGW4?hQ}s$iw)xvJzo=c+8@We9d8xm#+Ew-j$|MQe`#MAaKCQwtLrbmrsb(w7K-310 zNa+rV7_6D+FgahuA&I9!Y>wSbgb{1CwHTLQTFP>_l8wP@FL4irQ~&T=KC3p3df8b;(IYk(D14>=9xPEjPh0%`B!?QM2BA468#g9)oTvEEgL0?4)&NvN6It z^!hBhRyx-Kb`{nvU|Y$RVo+D)5ht+lPW1z5H)uODac4uzmlcb-Pu820)z74y)Xm`4 z>rd;Q`-ZIddGG0*Vpq-Yei4uIkm_YBY!+f!^oEHN%2Pix@GpQv|GW|RJ@VY)MbS^k zFVbzUjJ6N2E%8^3^HI{^MT|D)aneL_A9Nuj@Y>(o zGduiMRAQyoE#c#-;q6=(u<@9F(D$rZ&@dP>e;RCYZm!9S(FEQ zagW_cm>*}Hu`Az+&R*$LefyJdU;1If&Z_P9wzOB1=W&Bzj(VOFOycPsyb~>*x#q!`JYhLUBR)fGH&ib%?}s$V zMA1=JO1h-(20zdrd?9~@(-INPscOSJLXM+HQ*YV%ng}}R!N*jA*WBKoL0mH8_Y17* zdd=!SRyBR{A}f{VS-^dTnzjLM9V^M{yYy1NMn_&69!UMJ+)d3-QxP58ttBmc&$M)^*3u{Z*xksIOA?9fwe9E#&hdx(IxlVfQ>vOnS|C|g;(HpY;XhYc@oE7P zvEo(wTWQ5Z{ADW3$HJlFZwUrJ((PMxHLX4apm*wYYY@2r%g3{h{i&bv4>N!3Ht?q1 zX=nIv+~!Qof^fy(OlWPl`Zx$IsdpZkl{U`(r4aX!;k7#hIi8`eHfz~g{xJHAok%U9 z&2he&ARSP$QWpakRn2(a_o;8DN{tOt6_YnC^Lazp&jEe@2Q5ML42xBx1*5p@`|avz z$6E21k9%qXOQwmkESUl~{4Y~a{Bl%*cGb939W^Uuugw~o!b({Uu=PG>p63}VV)cvE zekmCza*qV$dyKe4T#!8;&^=vr z38{xDX_lkMBZ}YfcmzS0S@iITLhD`vxE*q)>+6*kIzINCj^#gZ=6@cihnEf-HH#vuHs1Ap6}+Vxzn7g`I)7rg`UwOz4#vwnln_j zW=m;JOPDmw^F2PjfdR{AK@39LDcJ5Y{qHdVILA^X!z?4MvRdI@U3LNUiBQ*Aj2^Q? z_37Udf9KGUE^|^RK|s=fc*VyCOLIGm zkMN3LsN!dP#g%x%$iv+=pXZeisr;v6`Z=lPney77hGFHV{o^v=JYdQ|V%nQtgc9Ao z{9|n5b>@@TNlvOZGqI#iMceN4y?BJz#?H*qo6X`0@Pzvy2E3efKMW_~qWKd~_#Hfl zW@7C_?3{2<-_1^kqCTiw8mBG@S40eg9Ng)xyH-)Z$bksOk z6Qa9CXg~Ji<^de!t30RY|CdES;%cuy3!6qcDHHUt@-9 zOzx<$xT8ks@QEGfm%mBnPg8kqqN(_QE1%_;zgFcx{#RxYmv@vu3Ze}Z(y+gy8jT$_ zPNl|w8}@JfD)+0(y{aO$Y3jp+|8>~k_iH$+aZN{!zft4Ab#j4UQcf^e_sH>O%~ z^a2p!8mC}yQ&D)FS>)eik>eYUzT%!`gRP$-ZVXAxl{yu(i*JEINY_sVDK(x?kj@DdC!vLZUG*CmmqxaQ=I zoYXt=jJ0BuaLf)QuLt+XY{RVO2WWEHGOD^$-(bJ`gLi(=5XvEcn+0%MigLH6&WKK!Cd^Yr55RcmsLO!+4V0W-yOo97OjK6a|G45E!lVt8A!F zWI0>w9pKo>g+E6ROb$<+TM<1l3e%Rsa-LDV+Mm0RQ<|ceswii{Y?*Q5lf6FdVHwPL zAoaW}{!ZgcL!%P%_zT^tUSVt7Y>wf35Bq`iSKQ(kF^{ zY_)S4APoHjBdb{PTg1B17wKNI`~6ovkc|zinlGGO;#FRWWxo)D_rZHpr|^b+;}yff zZdPi@=g>a;t?>N^bqT%;dio@jkkr_PFx|bmnJ=;j>C2z}I@>Z|;w$-*tRRx+PK9Vh zxqRs>hR9?^dW>&~KHP~fea%YzoL|QDbq^03Uub7)CqNl{(MWdCFz-{+zE7*y=WNe; z&z!$OCAX;o-dy*Uew=Hi!L!iqt+7WBPxa%AXNqc_k9y~G?FQhw>M3cKnby%LwmMHN z@iQrI*EQH1AC)_p=Ns1Qu2rqvj%n&r1NXKAnDGQe;tqASz?-dKP{ROJuPm+1iyMbH zQaZ~-HJ~fSaydWh(i-N3Zb{XwF@(;G4Oy*;-9G$Kg!S2Vcv|TYFnaezhtqFA`Y)^F zPU+tuBfD;?C>^hy@%Tr;aLnyFRAFfU*SJrjsb=+ERu6Xc!G zTitb9PoV}i#ObFDZX`WoXeoD*I@FEEJoi1~s-YO=t5G+08sW^><9C?W8@WBCP%lv9 zbTwRMl#TCai_JF#`biZ`FaP3q>dOGZ%%#jtj-BE{8|v|Ue{F$`et3aW0B~ODCFzcq<=Ek zCFG^KtO;_Lr*^2tUQ66j_qW7=(IIEIJI3HLT!KbFv2M67_(P+R{8B@vkJAy z-m=F%2W>SdZ;s5AJ;K@uLaMj0fMwtc&*oO;ve)Rs9ZS1-s%7H$RBd7L(1zWQCVs%o zs)_L5by2%!=bXQ(nlZOoRMT?D+!mS7TP?YM%U)57pFrK|4Z45L>4s<}+uZXYQ~~i5 zAWtt=8%FYbNelN@QBUT6jP!5z2G2*G9S%3Uag(%fn(v7QKhyvh!T}Gw-UF!{rCi31&$}{1 z;!$0hnOA?LKc5s_xLY@bN4w8L4$e0xn#KKBS;1DBhL_L}?gJMG-C?xt^kLqscb-M$ zw!x4m&6(beZjTK+pTW2zO5p&F9Q)JH$zR#Oe^I_S3x>9aU`bZu53n8Qco2`Dd|iw7 zpF-_tY>V<=E5E^t%ag%)4wYXX<}Q~P9)@MlIO6MU0_6Xl0)8CBeK}cNMB$dy>_NS( z`{waM{Gqzd-SLvJXvO~sR1h)cSe(Q}0c$3t{``CSfD5X1Z-NI5WrSDDhqe6?>>IPT zQ#lDomokU@D}=B|KUdGax^R!ZIe`f2FznVOmj!ym*TLUdUWRc8R1((RZVxCm{a2PD ztA*~wHFn;%)ZUPi?${6?h3Z+WnO4@o`eBO86o;xjbHxaLH1i#ozZiq#$kpKOIhUC}84JCU=tiqcaU(^+&Gg7PU zNbd7=3TX@$AToJs^c-DDGZ{0$&PUlNn0CnU8sE1h?<}YUTrf803MQ0G6&} zB*XoAm}hIrCE3vf0QV3wuC?S9U$=k$ zpW0XS!g`7se_<;=PV(~k_RptNS}KIbPx))6~YcW^8g9$k;OXVrl#Ho_%VSvq7XP5Iku=}tUrg4#E z5R-;=+T^z=ZjlOu!k!z*O%5*Dn5wENj71{nN!gP8joroWt z!?)PMUe>*hq7tU`eNAake#Dw`6rKACJ*Io3l6gpjHW)h!Ul{!k!`DxlNpHku3Dt^h zcFbQSE4wk)+`F^^ysadzy~g`p3Li1vPK;5&^T#$A6S}G?u4?D-cN#%GzwRYyORZ*Q z$I>~61FC#<-lT?WyH4nC%&H!Mr5=D}f)$`XfH?-h)joi$Dg3_xG?Q=yl+REnH4KnS z_NI#Y1OJQ8$zd|ChH+tY(R)Tc3uq5Wc2bBH<)O@5y^EYe!C2+l#PJH6 zT^Iaz#G@s5Y5|`W9XRxIaSKZpsmr?eL0XKCgj3YgT&%7IJ|_Ow$;3>-4t)S3^H}12BwJ^s);x(nhX9pBsE@V?k}DC0gOqP#TXq+K+Zv6 zxq~11SYF`4r6q8!xKdpUY)NK_Oh~*r4HXVoKhi5A8LB zE(^6VXp9tu$LwH4FC8`Vz)>UrkR5#4F-PMuBHF+X(xyKGtiFD z9L%ymjCQpCf7q1o)QfKmXHRQ$lG(oNeV!@yYu=6IAKBZJlY`DF$%;XC)uQImAI2Nc;C+S%x3?A(nu=PV3h+>Bv-$=2~^dFK&>)OP*3dUp#eH} z2Q)IVv~oOu30T{Krl*9F#3sXRVJaz!@H($OAjb4>x|Vkkf}`Q!+&ICAQW=OhgwL{; za8b|;HV{6Un-6Iu;0Dfy9WQ&?rx+YZ-a&n6EkV1A2Sh{qOz|rx^tje)0?_$r?nvNo zcuMowVFnx(q>pn58d1!YoUJKYB)O_;kvSKLu^leUP zq5ZK&^PWZ%SuFeLn>?~@n7MA^S+aiocom*JOs4vL0aiIeFn$V&liQb*TWRlb0ciCO ztOHn}lyFD0e&pA*$j#H6PGa$4mDWy_fdC~q-M^p|^r!hu0pSze_tm$DCVy%Swo-d} zul49n!uNp%WEsQ~D53xykvlT;JF;5@9TL0-rz+-SJ@vF{-(c@Zhz0=>WS4LB8U>L9fN$TRn8Rx~)*j&N^ak@RY{ z$ByvnP3|mCO$Qurh~O7c3;%;PhOmO$I{FRLZ)Oqt9%gcaICYIiZ_HuL`C?X>-Y)-} z2-0vKU=_W_C(*7`{jd{y(B010RE2(fWIqQmn#T@@)xzVuHNUxOy77PtEoL9M!zggP zAbvuuQ?u5JV}vAn=5Tu}I#aHo)Dld2O`y^40Iom4c`V{|Ius+2x^^p}$Z9aNlWKWE z1BdFtjkN!%M&%p%2xfhR6RqzrH*-1rm>ljvONYQ0$0^!fu+-!(QBOk(UD`r)rS3aOsC;Vse|YYJwLF|+tq`&^!FeScyn(i z-CIgb<3A{E1{?1WT2nirt}Y~!dYaDyt1n;?&);M1salGf^C94frsBFfB%*8=?swa# zxF54Pz*-ri%_~rIxUX6LYUxA`8|5SDh7g`K>~)R%+>5-eG3?H#dwkvj?_3%-9%tgk zzZDPe;L?Luh)bUxNPUfAX8h|s!udU|rCbOROyUDryw&|!0zos4b;0cpy?gn9+7ymj z-3?F+z_Q|CB8fqiPFd zrC(C9OM>RSFiP9F zZY8*1|5$8-faG}f==V+g49`rgQ+We4J1{{naurR1yZyV}GMc1xvUdDSSb+{kr7TLy-@7!($}H77C}&P51Gyb@Jmsu>E6`m7k}60AQZH z<>O4iH@;v7=U&7_h}Z`6o59UnBTO3wqsH=)V{q+_$-RmF)CK{E72^fLffk=ZHUGXe znHOYVebBC6XjeTPEkn!m7#~-Dml-gYNPD}ETt8(3?CmRmskf{uU1#W2@JwSIIpyCc zcvkr|EAa_M2%@AMPvymKjSxW6_lk zjpf_=%UIsgSV9ZA)Ai6_&9<}Jnm@+S+ComRXn3mY-PpU7sje?wZQWPQr`W;Xa|U!; ze$A<~cl7pNm^2+AcR~-_Tiv;4#uw%k*+oXZkP`a`lGy4z0@n_(TikQ#&p3^9fHr{A zAtF1G_(AH!Gz42+je8~El946*c5w7lNCAy?x)AU$K}BDCJRQ=p>~H${x*Oz4n24uL zk5CIgR`Mf&Q_4cSDD_=6S*tmZU&-Uj^Jy;ClPAz$YbAbRo^o(tmQOONxY63luZzmD z)jj<2*!u|S?~CvAgiCNMr+eY{ZDy@}LcJ9q%!@7}s+AbVi>{MZ${6g>LZ@n>Oxq8; z7cHfmnuR$h+b4G|)|+CG$LY*K;`auU2faNot8)*0*v)56V>fnAPJNeInpV$f7{gl1 zTPrGw@MKKzMj!C5>v5^(PyJB^!OH2H^$b<3cSh0SIu=C<&fU9y>by&t!%h$MK#eRn z$l;T+@2c_tQ`uHYt}GrauKQ|3>2ki(yp&h>;lYTgL@49H~?!SrY@{>6>KYYVFo!lhQOTa2koNR zXtv1H)uPT1RS+MLfvaxu@F^!oc=};8Ss~0HvJ!H!vOiC~u1&PFnZuwuMo=}USHifn z|3a~oA!BI8{m(889ifHRy-iGpQLCG4oIt+pHxM#T3ONFQE=^IM#z&6Vt?U}jU~ z%Zd)ng+3}w9xCJO>|r*IP9AYsln~#((Go4q3UBDvq@Fogoe34AfRJi?`M=rF_vc!7 z{Y>v7Ei3;7x;kP8U`a49pY8hcSzgBW_qOi3-mlW(?;MA{uu1R^VTMq0&B-Id z#OLfUL&2ynK#rkXYYDc_j?gz&A`3vH?eLy`e2mQ=njMDC#%7h#h{*8)J!ErT{ALwa)=hs5O!o1XQ^gFntb7Us`?4F;93B&oXu#VoGs=8aR=BxLMmq&Ph}Y!`dGG^1_Z`) zOV}bks!LtPSD$`MBQ4~RN0FPy#ycl_x)nc}PPm2?F0_`6%@!vw<3%|i-sCUEt@sr@ zP!=eEDY$)%38_#2N4<-ay~dZ6t_>{v$Oqs&1AtixsjV7a9bU!|$CT_?BT~jH>-o4* zV%W{GcY=|kX#1t%zRYI$*l7C%JjdF{drDWqIxx(AFBB05(sDwlNOg(ZuJ}=COX@6I z2Tfdm(wd@>LDQXZifQ%Bj{TvBkH^?~{S{|ITL{?=U6Fkm6^G-snR4mDkKipTTmX}0Qn?M+M=*k zZnMgc7U!)q2swY$VIU|Jo;nObINb!&+w31O7iE+7mX&bzvdU@&Ux#yx8UTRB_d*9PS@ir%0asqG*`iApkHqD zLo)qS37uAZZU~`PPj`1MfOYD;0ok3XT|UDjjYG;v0Uz2HD3UK2nIa&d!Xb>tZA9{6 zi@69bz0q1Yy%bTerp+H!q6Dgy3%1X2b-~Ad|Iaj5wJjD1q3`k z65299)XdIBq}p}X5<9ClYkKs+H{hKxrkTT{2e{NFRu0o#vX1)|i9Nixmh>!bj8xJg zv6|H9diG8_Og|qzaCNvWdf=J}280%^uV+nhg#@OB#5t5R{q!UzrS4}K<5h=&s+NzW zxeBL9m%weyUeN=@AQ@)rWS6{Aeyz1&H7N;r8q8B4ESoj0Tmqv9r$#Y`X<0Fb>eix4 zSr8(B5Az+Z+Xi2`izh)VD7ubRdeGaL2aPUU9~!JBQK6vxD^|RXVN;|09D8HJ$evK73mi|VQ zK+#$XeDrO^RX_9 zN}Rx04dJ27&}0yXYE=LNixjg=dPU0^gPNdhq|Inmq+#w_F#Ha1BSUF)^-r)ll~IM8*9n^LU~#B z&hQ|>^eahG%aQ-;Fd;4?TPenOMR;p7@r2k2kK z1BMmv!)riBAX9)tZ#Hzko>rgIUTAMjB`G2PWfqGeD<(ZN0}a}!7N5ar{TX^nFN}Of z)z4_iO!~vTg&k>!UCyJ|&0ly*DG-WRK3dnDMFIu&X6mPY$S3A*Nnfzc+521k1k$`k zz*@~SHs$uONKZMQALTX7eE2NU;&6VlgfyWdroQFZL}VN8d=+`Wye5JNRja^R%|4Y< zzIZ|{=cn&COy(_MVEm^5eV2gR>>tGE9)sdfJ2RWC^aR)aghkVtRmpn3`t^BlW$h+W zdwW(CA&vOmV-(>L{HgdPihFNNyl=ExHI4goI`bii@=JN;#e!IUWW44VP6o>gs&20) zQaZVIdg7`K^ZKg2zIfFu?*>-cuQu)qmi_knSy|I(?ksJwUkMNB@}bmxxb+=VDe@BW zz26F!{n`}n>4!{yaieiX?0Xk4F=6XN1K;Ow7{PtvkQPqpFM^rYX3cUlLx}ER?Mw z=v;O-`_>`x?D$NTL?L-4+s7K4qz$8r>>rOP9#z;ps)*u>-Iwm?K@|(_#4x?HG_=LK zi#?U~P23S;9O1WD`!>BXkV7&w+T=1CHKMUCn0!EkccSLs$@z9oi;X!!!obV;fxo=( zJ47?ZV`Y(fB~x8-%PTIoDK@*-GoiJ`?3Zm0DSW3FB=djg;OG~gqKHcIECVtEX6wFh z<)MMErmEje@%mTZMX(60SNoga<eB5qvx`4gv&V79 z-KA_gCw3X$-Ge1%3V%cC^+pH1Kgmp6{0;0HqcFuE{@@_%E-9znRnW5#(8Qn}Z_ozw ziM#m92hFxY{=gxJE*k>c6B3}gop4zEN8|<5gEM(JaZZ1!UI~S)BYa4KfevlLKQD8m z!M*M^0wNvLW%YE>yHionN$=HpHKgi3YjhFuHCbQ83zec5Z)IhdFCx;Ln+xnB4juRf zC&-mMl-;bcn5jd+I#fMS+CKtchIV#P5``%5eX7h4)ACMx_6Ymdv+c?PT-dnaMri&@ zNT$$MJXBKR4Rb<+?8@PYd~{DRwoH_^L9oyuxuFzvh-*IPb>HlnY z5Qk9hP~mJM13|vT9cW^`eqj24zN7!idAz#q{dsjev$BF&wclJS&f@;(0K1}D$x996 zs`PjO{7XF3sf4A5m7>ODr-Ej(4_RftJ-Yx}N}uNG!@PVstfwrFipk*5%@Y;fzig7e z&G6Ue%0j*Fa4E0UfPYOWV)@}^T29-daKk~!WH%W~%}+1z{lAqTK9c8LF~S*J;LOR7 zjU^XlbsJkx(ri7>{Tc)~fZPa1j#vcSyRCQ?4o*(tFXc6% za9%J?t!xdR6jGwpLsvkE+S(I;=DRwclTUh0xW)V*b+CItU|WEr(NE*s!F`W?PoGFa z*`;TstxV_JHe=L)QLjQ{ybs1tRy3-TqMbDHHErB1u*VIWnR8anPG|V95&6Cv`#cbS zTTuBtXi5+ca*8u<5T&`xO*OAh?aQV@WTTM}_UL>?!VMDi>bIfyBAYna#ITKg>N#f~ z>TAM|qT1C&{Yw11BT)9y{K!9#;XYhf7+?a}slAvv&K!_dU?!veh`BJcu*GbCly5K- zu?C~DkBckv%|vWLCs4dP8GK08f#d-)Q4<)63gd&eT{su40WA-N!klPAmTN-hjPTu! z?EObh3P(et+z|HZ9r#VbzCUVGx`JTNxQr{0_^ zpwU+L_RK-i9}MS5I2&u@TJn7o6zlsca&u9jS@_{oNBJD6k$j?^FOr27&e%dCT@eH9 zZkd`;;6JjLO(WE*sxn+f{pzwJ`L@of@?BD}Q5#uf$w)vc-P;Claqe#EQc zSF#RVP9`3a(I&|U9b|MEzb(@IXGoA$o-deGNjNlA7<3iqi*OJEwI30~6@FgqZ&NcD z{vd_QB3wV%&P~YEBln;GP2V~IcGf+bzPU)$>bt&pgi|qerm5wCUENPA>4A zDnk5H_dxkFue*2ya;>-C{QZGlt**c!>tzLLLt^P;eED*9uylKE-&k3o_7ib=hJT2_ zehrab88+{4BwhDc#z%5n6Q~v6Wr+j@PG#X)WWJkR(AbtkI)DK-uaGnt0yYuGViIx~ zeQ2zGQ0<#22=7O|2K~L-P5bP>T>C@%2@i5E8-)L9)u(p#{*p~QZbHdP@QzP;*nWU5 zyEbd<2brDQm*17&k1%ZHGC~*FpL{((Y(S5)DLJO#zK;AxN<7fH{~G*A7JyYgPV^3& z369m}_p$DJPzP!*S-f!D*M3Xlkgaz0?qzzmmdxs5Et#6z_)cEq+Xcyir|^O_9A&)g z+4y#m_o7#F`1!o(-L+6&fRo>>K8^1bnTJ5&C2Ps}Y?XKud7Bu@Ba(y{TQWYU@y#NB zld#&}TKszPp5pC|sbfmk+piSA+W2N($w&6~;#cjLiZ>LmZ%iLkLTbn2*Bd{`FL{+S z6Y&a)_t0F)D>fA=w7z&lW4Z^i_ewVNW_#niImKH`_Sml$ztXs?ck$+u4OIBJF=fSW z+MQprHCDH~k9GG+kf{BV{ZS6uExou)79_L37O%HkfoN-^drZkHyM;#D@@QnO-Bi4~ z@q=TESCwox0HpE(U=;wYH2|~~lwkKMZfbnDM{y&)Z>C~8r?{o$B?j2q_-60o*Gn2z zw$Zg>Yl0>IhJio0nTVlu&vGymVP?SI$ZSM*;}0`6FK1RTry%fBal66Qjtr(=6Q&N> zJBnWe2^&339pvZhjUVQhyk;^y$*v+dCXjew^!$GYk7K z#NYW}Mt++pS%a&o)h`<}p*$U%Vu{%a9N9r(^&e+8MQi4emY0g@L2OA@*$=H zX^4wWjWzZvf=T5pg@O*jIXQcBv6Z&rt|rOMchRQlfMvhNC zNl}l#87)6?)<3d0TPqsXEZvNy8~5F{l$p#4H}Xbu?2EDHlgrOX#Xs|Sbd)4Lm`D-v zPc-sDV53)~_d#}3=G*L8lgSTqGi}(BEde~hUzc5AUZ~}KNHzTrT>&p2B7wEHx3vV_ zpHP;YhQ`Emp3)UDDil}W22Z-29omUs{g=b1>m~`pMMqT>6_dQ0jFf6AskOm??oP>q zaUQ7XeW;XL()o*d#n>Og@HXr`*9D zaA+O+h~8oK#KUl)-Z2=XN>PYzHd#r>gLp4(%ETcBY>w_+00q5ZAj_S66X-SmWoT0h z*)7NknEhOU{l(2fet@^((>d)!n_OR(a5jl zqZlPO99=X*TtM)s?av9i)#1q@Eu4~mu*Zmg2$pm`NGf>)@oBp=y|Cnsvgt*2Tap87 zx%Q2elQXrzo?gfp8wtNRAxI9Z^z#&bmPkUcsDAp7R9zQ-tfT6$(*8-cLtn-G`cP0v zt@k~u^@v6ATFFPPfG5xpXWpmTl$S}3n=q4uHd&gyly)l6b$=uuol@?hDzm8gnCr&}(hVs2-s;kR>^;J` zY6Kk__#!8ucPqhUP{1C30xU=oG%CUR_reue^xJC*xVzg2wgcIVjlMQHTNhr(YK>Ip zV-}6PDh|dWalfmDlg>+4=6m^bD(OK5{z?JG2iN)T33I-)H)b-(1%U&0n;uD0#L?vw zB3H&L^8>L%ffF~yDu?C9-uf)IY9QiCD?|^?XSvEnfQBPCd~R|&NzPTbe1<&it{`VX zWSMF+qAz(ZsP+Kb>6KnCH#wXW4O7HC^H67jlT3l%biHrk&$q#rGl@R94*_50fNdHTO)>XbU^yIa#d5DgyCszjI*l8615$^(fe138QTSG7F?yF!(YNW`$c1*WN+E{ zL00SrP!l7ww^K3D89pB%ueNvV6kM`yZ$(}nAt+gcC$P+qqo)!qgU83-tt51y^^3;n z!EpG@We?V8O&>WRd>SM+uYJrKW1D8S&#M%A9`zb`-Uhmvh$PB{5uW%|% zBD+aCnq7$Zz{s=0$E7y`3*HyJI*S((Qku_wpU&1ro{u*~o^wWXVh=xEvMDy=tgElJ zes0pnw$!XP#FyTx`D?z5kl<2D5&2%f4Zk01G`9ujq{E@~6XK^i*XAY1^bC}?)?UCt zmHrM-kj4nmn`b|lJ#&(cdX>-_Y&PF(Fpytj=i1kjomZ!<^>`*%=jHfW$JqB(u7Gk* zZeTyJ*@=$KKNfg{PXDBTXMSSN@22esSF-iy0yg&|kWUPU zIp-qiuADx{cR1!Y=a-ynvNG)EUSnRYiJjuQa1Tji=S1fOE(xE@N8{@vJKfNgA9mbdl}6BgV}+0` z{o^cMMvF&w)9|)p9_Nxf%%vB31V0;#V%>S&;OZx7i-6T-7|0&UKnY0VgtZoUJ(%OFx1}G+=oNi@bH21!d;az8bJYv* zR<9S4p@S(T%q+s>{!z94n`0Tm>*63jtsc6+Cdvx0TEO0YY0$-Q=1}@yPMv;E$#Wml z&kf!vS1g)~%sM-m9%KfId@=9y7kH)7b{%K9(I00&t_Pc8`eU459ql?y1la#F#%TJ{ zBf2EsJ9z!CU80{Gkd@WZ?WX^?-Tqdd+}u&++HL#?7!FY*%*F=MfsS*(4yo(%yzn|Y zFE*mYN<5~YRSQ5~Y~Y)WVBF(*4Tn&8p?byfvJz`f<)fhx z5A=B6(5$ScF*(7j8EjKbL~}JgdB~+dhfLwEZZCD%wbt*>^lH^;+cY1%x>$D?IOBq` z5ocQod0xZOVzctNT-?sK$B*cU3$4TlJkNVkRBVVd-T(+*>s}+pf~UBn<#U$38Ci~$_v%e`eY()&&y`rzROB&ULmTeDc}0Y!ks^^_VNB0_)BLXETWShTX?=U6TX7Nvwe-5IgJNDC zx%8Nc{$I>GsA4V*NuOrL&-hY?BnhY*$sQW{Wrjt4m%?VcH z7cTZmN|^bXD#c1Ku;LXoANxGdieImOv;c*L)8t}cQf8XQRxINH)6Up9z299 z3RQi2aMvxy1E7@kXs~46bqW>y(X-8L`Cp8X5VQY_$RF}aZ=H|$VsqZ@idLZr9_@ z$9<9bIR0ohFreFRe~$t3i@=9B=3gNiiTj*EyoQc_cp)#3=0DGILGFv|`1gLtT^9YH zyY04T!52B+=eis3OWk%n?+cyZmyaIr)^5A)Z+(&DeZ9N!zSnKXi;n#wJAVJ@@qX5A zx7Xn9{l$^h=iQCBZ?}x)>0`dg@fIG<&ra{Q+l#)KZujN{2|9DUkwvt#UX+J$MlPVL zdMo}PT=P3mFnc9zo#wA^bAD+G_?t_lKC`*3qKZEYgSrIZsb4>s0Kj$_?#`zLD zEgE%VI?1yqH-{e9SNl1Yv+EX0{0=?k5U${Hy^pyAblv9eeFG^STI4y9&kd@XwcM69 z$skwq;PqxB+*X*AuU%lT=d>zEfWm&Z0R=f1HICCi)=oT)(!|H<+T?O6r(M#1w=5M2yrE4`c40qoQwOtbdXfsP5#Wxps~ICb?lu6UOP zosqE*2gD9#*FNgh#WNC^T@`hI`;ibGjeUb5?50D!gyW^?c2I%XYk`hSQ+Y&koeh`^ z?2X9r!@A5M7dfb+1B=wAE`of zf}Qhg*VQ9EbLZ)94ay0Wa=X=oq+Aqe zgixJx|JqTXJa89uQ{M(a)xWSSB@%a&wINid{zwDPb4GW>?WFtk3ndOTio}1Z99agY z=CDU8J;=S|wID0<@M_lC=|*02DhmHQb){-~JMR5QGsXwHWsINp`U3frS=&Zp|2inp zaOZR#?wr)M*whVAIhJj}9D>l22AvUNDM+i2es}~+IZRsZWGEfd>W``L-x*5%{}n^= z5O;>pVbAjQJ)QDOMYoJLrxSvHk^c{R1F!c{NAved-F7>LD|cVqes-zf?P2oScf0L) zH#)p8uHzey9&cT@-9AX5iZ8C)Io*x-zHU4I0K>o+(Xnp$o5g%Pi7tVXF?q0MCPNr7s zMSV4F51jb5?a;$VG)wFVl;x&L_X^dhejHFr;^=07HHkIZZ?V}Z645Rvg*n1!FsEVuc ze>YhmVDLtb5;T=qSDOf8qF9MU4JE-;gN+3&DkyJDQ(I|6aTl=iC%C(i>#~@(_~&h{ zVzqB=zuIcci--sbfdueh0IT7jMn$=o1qoE| zJAclcbLPyMGc#xApHQa3<$e5{!@m}@wOR|08Fh<0jk>t+78QsswMy@k1AxVqj_Er3 z8)s~~QV_((QZ~YVgchf{xF;6oR+QqWb^p*T z{A&w*`k$c}u=`jszY+QyajN7$$w$ScT;8VGlsg0%SMqIV^oxRkYc=l4% zO!E#8>11UIMe>eRb2hPa7P;REj}MwF1<-~<(Z5`>r4f)P1-YS$iH5+=%0i0u-90p! z>t^Rvp)DxsWrTiCTwqSMn=9?+RHOZ=-K{8*S^InIyf0tBY9yl=q%4_RrwSaVr0 z1osE(KW|W(d&w&fh4i%M|L1^qu)+NEiURO`yJ%zT@Br6r5ys6k|QhNLJP# zp#E30Jo@hIW_9!?>Qicd*bti^f^Vh$%orPMT6}#gCL_8o{Ct7o@kuQxw0%t#sZ`P* zaEw$4Gbgb#&9R5#5Es&{{)^U_wR!#H-9##&5*Mrf)`JG^8|47~KU%Dc@%YcE*M3YY z7tR#6%#_aj05LIo>7?*$9K_BhK8UcDCgvnIF~`197x=k!9{$u%LVtl0^RF$;>^Bh78QQ9;NjLbzIO#6rd*?uUMh}M0e-HJXE~L)yIhOla7uxmY z{{XeaSfct;s5Qv&Z$hmWyDxi@$Rd3I@jk0%>dgoplV>%^8=)4S1D_=6G2i}xw=PO) z;&LsjLtG$Wx zq*le-;=AJW^p||jK-o(;jG@!6e$cUHbko0o*@HATg2(9o4h#HG^lzu?#~ocWVg2B# z9@WgsPRr*1s9L6AKTqQzlX3s6>^BOWz!A~`*duVFj}dx_80jUPqRYqT75bB;xL4NW zpOB}vEAfgZNk*cTxC(OdY{uT+0(KZw61(yy#2@6Cx{DF!>UZJhWokcS-bQs|-LQF;u)l7$#5RdqQIO8kUDtE!dR9GYE<{wFuzw4>Inr%1R zcuw4Qb2>dhcL^=Jvz7cuT*NyMTSV-qq=f07HJ1pop{VlObzG*3F%5LzHe^MfmKB9O z+qVh?r_%0jV|qxYNvD!;1$@qy*I3W{;V0xvkaBfUJ|={4Qn)z1x|R3 zh0}Q8G|QCv+zvNVL;XM#P*0F%T&pAQm5A$!NW|BJGU%#qukkfi@HI7#EPFt=^uOtr z-Y@C>o$2>b$;u*KVTx4vHb1A-{!TS$y{wj;3d%aOydXPAzFd~G+D^D@yz3qbN3^EH@?63R=oOQWwq&8Z+XK~1?^KWy&pPxgFrQH2RPY$)_8X_Oie7jtmU$)b?3+=&@=tJ! z;iN^zg261f&p)Et^{`i>D0XHs zf{!6A68r6?(ho0<_d{X0k`()`qo>%IlSlp+Pqjy#oVC}fqVVLbIf$`S!v4uwzxmbM zI+(00OLVUsyOmyf!CQc#rXSrjkE$`1oT=(!ofX^c$^E? zYy@k8qWhGiYJ77y3=b=*V!DfCd*Yq;|JrGPR;T^wp&r`r+YoQNvsL}e6F#<8{o#{Q{&){n8o`_C zGVyAiCFd_+ZH(VEy`MO_@;~)hx%hqkH&m|oT4ejWP)GI!FN6CO;S+ZSLw=Nq)qmDN zS|xAB`bXk^=I45ZSMGKBH^8d^u-<$lRV;tIZ$Jr|wf4OuDJ;SDxx1)GeQQlhgHmm3E#kBSzx=xty1&SGT!N zlg_9yB9|w*k&A1%zDS@_&8b;~$qt&vD##}7FzKM)C zzN=Wv^3CE1R|P7WsXm9#<4EgOVRe{_<)%x+_u;YEZ{uD|9cGonqkrPuGRCtO++kZ6 z$%J&yI-NP@Z!4S};V2PF_`v#Gi#1OsVa4lAbp|Y+3f`46!mDN8+OR-=<q8Ya26>-_y}*?<9|QXQLkFhUMqvEoOe+6w29|Ez@{!Q@)H>%S-pY9c`$_m%D4+vS8G0oZ7A-5m0FU@yv1Ybr9R#76j z0%uh;GX`k>k?ugo4`off=1opzX&l876hn^IKWfDO{W)m*eR$F;2SXEj#L(^kdl*t2 zWWOX*L&5J*Hxc*gDp*7`!=#fPx3cM|K&Djyd`pW6Bht@{<$~B+(7qAv!4`x zEn&BbbLqJ(^&W8U?@LlrB;E&M1=i)f+?Z=j?FZ8GSo&ZEfoLzeId1dgQ59B#g|bx&)<^$0Tah!JW4z4PC% zMDqL2HAPo z)!AV*oGd8C8>g$}%6MIAc0xyx z)gIqD)&=W8DTl#3k1)%5z!jo@G*rs3{Dmu(wuIjo)RY8M9)0rtI`S7cJKLhQh0o{f zE=xb95TR*-CS?Ije~PmD6yEPBLlHdHB1RD3BuENNzx z>W*zJ_YCsC6Mk3?JX$}j;$F4bxpZYcY8Er6(ttEdH#(XGwxpfWrE0#^g<-XS9?>Pd zatyte`$U}Gh`SVb!7V;-!E|3% z!HvF5bqDVaGdy`6QLnyfcbcfo3JTFCa8Z@lVQpCmm-!PS5;kXzS$4L)?cI5~M zAJw~Q=g#n`tP!KUbKVNym}#cZXMPZ7X=7AYv<^Y|%vk{4fXfEt1v{pnchXjd$7Y%Z z_jjg!gzwt_gj8`kRjj;#_BzgYly`|q%Nd%bsOWMBYa`uEGsF|mNVoV=FC$mL8XdVg zsUR1(IL5*OL}-^^j|K2A(pml%q{+&!cPsz+e>>&dW69SAp5IIQtZwOFkEg$|d-~~; zp3}-*;FtU76#Vw5eC|^IwhsETcH1eGBY1DZvxs&3%Y4HbR6S5yH&NP3HjXOi*m6_O z9F;S=k$b!%p2~44 z)Imcc{$}CQMa;Ui8hHp0dSv`9Xcd5yNh|FvZdCUfa5oVBg}bDpAS3^fuWw-ZMMmfc zl#7b6@*BX(O%$3i_x@e5XRjq8_hsKK-kpT%a#f;SWE`+^3vhI_9KAX+GD)$1idipK z2%FnR`p($TmeZ!3&Gg_J3X&dd1ZPkdu3z#xDz9c4N$4#rMEFCd1)EsJFb}T0Sg4>F zF4qH!`?!y%r z_t1lkB{d8Z<>vMM?BB@b&f%563N26OwaL`w5a4Nz3<>N9MINb~bMEaS*Cm~~?$Ws= zux}-oFvJ_o^j41ShQlL&?A3+ z$y$Lxq~B>Gtf7j)@NQ?V~X=PNPZXV7%tmLnKmXticSxmvx6tQKTHX>8x zIW|@!$8Ep#0otQ(ge3eu2^gQyfA!TJS-8q;DE^GL!wxPk#{E`7vG3Z5|Fh_&X6?#L zi0*Wg_aaw1(YW5e^A-D@S=nCf%Y^zFk!j+3&iY=feD^nC30s$?{C^dHhN5(cIS;$S zqHK8xTz#ScL)7ZPFVgz@xATxQHn*V=>Bq69SG(y;&ebBoS2_F!-_X3nlra=Cj1&pH zR$P(!&OmRb<6oqpv@!tC@uOVbDIC_acS3nCJM3TUeAVq&{(}p|S-3b09A00%2lEDA z{DyJE1y(jCp3Ct2S2cbQJ}+xTB%4Pnk8sKABh-g#zDM_+1?zczc^E%(F?geHh1?l; z6c<>VYwbbq&6|&Kt@tL6G|L4f4>T`CnEpzBnML3U)I2!+RsT?~TXYW}zsCr!qok|H z@0m9wT>KWz7*X8le?c%>pnb3E{fXuw^T_Z`bMYF_y<~VXmD>^hjnOTYbM^q>&jdwn z1wSxCQ$&z)KNcRgUiv4UVkm{j6)*1Pu|9lOkfzI)_g^DwK>%a2S({fQjsZgvkLoMU zNy(#>V?e}!R3O$$Dc)E;eouo-bZE1L!?(Gdj<#=-YA5Z?t8vEm$TdXtP|n4Y&fnZ1 zH@>^fX`UD)+FvLBL_fp3q?(~=kBN~IwHl*i z3&tBk*#%_Gc8P7CMZfN4hH#5um77mQ+WmVi|x z`iSrJyuO)R1t9-PzAO?p!Sx03sw zZxG>tGeD1dQ;L1M;BjOMIuoNpG{}8ql#dIjf~g$k79e~^Xs?VfH>TpQmKRw|7gw|* zXskP*leQUE8;Fb%ObkJHA4&xSF?Wzg@EIvVhGCI44ZRB~*ob(gYBc^~qVbEwxt~<3 z{({SWKP$Mx_k)5w)h;%QO8E(GGa_=M*GcU&f{jEAdkH`dz18GOxAS5m)}TMQY`GzD z4Fjpmej^qaeM&_{AJeUzYJ^%5-0@cSMG^`HjbJm;N{=o!LT^bDtw}Ulx6l~`5o;vD zSQ$RiOCw^L>W&JzQ<&@`ELiC`=B zo!xC3=45jOP@%ivHk^G?g6N40q#6Y6C+vt*tXvlujw7jML~Dhhp?LR|lJ;j@9s9l;uNv%h!r*9iE_M3>f+$7271oXzm_&;CSv$L~hNRGQ+O&(JtM(ed-NkI5b^4b3(Y=bMv5@z#8 z@LK(rGb-1%&;(Pmw)b#rd839Wf{VLl_{i{Ia*^nQHqMWa3vc63VqAxl9JwAWAg7TnM<<-SZ z^48G|1&o8A=mVrf*)s1N0)=9b3K}}?RbAv^L8%dxYv>Bb8NrBzTmkw%H58Ql?$ol< zSn#O4SNOT*+zndb#V(u<)AENJ%476XWFNzJcJKQK)8Cla?TJ8c+5o`$|J^*<6bViT+J8GEqU_MIlkV{Dhv``X3>( zKX_zd7Z%ejS@2&()Z4SbsnUOx{G5(oHfh{6Bb3937%bMCGS zn#s&T!#Cz8m!yPq&En>OjY^gq-)mhbb;Aqye*&X2!@evI%kz}vuy#F2f!T4q+->wo z74@v^fO0Fnih?+YAZJK}YbcMiFTQdH5+isG2u5x^3goJN4tl6RiTasUH(9pmn6deP zFjpv2AleTP!fxm4_T54W(mpEsHtI$*i)`VMsnJEGSRpb?O8TojH1P0W@^ECO=q?(~ z|9F~+gDZteb;LR%r1h7_WBw*d>TU6Fh{#a;)8%Yz8vTvSJ;$l&oeGOs-HV$){V(5~ zH9r8;P89FyYswSfjgaO^D@7Vu?-)3OGNc3i$~>vL39oO~a0iy$I4l=ySiVoC@T(tj zEWV?CQ)t?&5Wp@HHfpjeBtw1l1s<0%2+-nA#`^FnB0OIE?>gxcveCK#Tteyvk~)zM z|65Ymt2^rBg9c~jUG{cB=uv-7(63RdD~A{Rzd=sSaidbZY1g+>wxc&QKS85zvU&pz za_EYaH1SJGtK<+@cZe+Uzlnei7k@^Va*80(K6o`$N`8p_u&X{5uu2O~pCM+Wu&Bv# z?s|@n-)&sd#@MUIFF2yui*U`nhApK{*m&&5Q zdX#}4lL1p`tm-xa&?p{@^ zIi}I-%{#XofT^`eIl9}mzCnSuLY&ewS2M@IW?d;=nM>OxjS=ie^1zV}v(c9mzAqi^ z_r8odgCd@J>;vIS9MOL7lUsFC8(h~3N0p?Y>Pj~`xRM&Bp$|VP?NTNl8lde*BINS8 zZF{#hK@*J&8G=jUHkj2|o@*YG>m=ny(8w)MRJISCaZ%)!#>)1-GrndXs%$Uvom1I9 z%EvfU>PxL`=LpMF)TGCkZJ)sdH1~aCH0}ZA2vDRcD7cYxtnas~N1z3WG?T>tNf;iR zHDWAt#fUsJS1kCY8lAI%#umrmLf^P7y@y&<*IhXa(kt;%Ncp-#Zj=)1-V;k1vcu4Z`&s}ZP)f7A! z&{h}o%@z}{?tTLDO5UoaZ8wVS(e~=xL|dkPFCSuJ@*ap_uh*Tu0XDQ>;<>z<8G0(I zLUH{(SV48PEx?>si3?l&V~5AT73wgr_BDzf3SMlYgNnir4J2pOjs_c#V=La$Ku|ge|QECvh~Z1PZ`tvSB24t9T#1E zM!Spo>-rR3Ihw&>8>mfZkX4s@kMsS4miV&8HTn?8iN1F4Wh|Tw^2tx93>EQcm+?cN z=ZKovy<}GI+r*T-vi-Z@-3TtB{}~UyprpV^KaRq|jIhN@4qU{PKgFs4{2k4$k1nq6 z6d=<5?xlF#xT_MckP;XEh#0+wvI5Gm->}f5I7q~Va8F?P&>5$x7<)Od)!{U5jHn7B z9G8j3Rs2w43E39i>AbI;AsBA5)`4Cu8I;n88Wf;s2%tEW=mKb|0@VIMzTKs>n(?f! z5v#Jk4X3O$x@A2>XZ>R=(arIEOJY&i5+yJMVi9t!?n)WR;{6MK$ncl6^pXnqXl2o?e zVgzgWUfDjKbK}S0bE>|Eszonc{5}!f%*aVZ;nS_WF&J@Z#3U}XPF^iHT9z}JagzO+ zc&>kF_xjV-UEhostU_PK+%L7j%bZDEKR3_bhYKQ>6s(^E3{|*WDN~qYD!Fs~&4D?) zT}J5FK*k&)FsIoy?@3Vvuab!P#TkG24UMd~N05b*9uZl|qF@&U->;Koki=Miy_-R4 z1`Aww7kIe`o4D|e=_78;m{WFlZ7Opg8DnphF}6?|y?RT7D_`ovaQM^aq(DOwAlg5m z;|L_f<%^oH4x$Q#Ahz+)SU%c+J_=q&r6!?JKgpvqdPN^r8hrG@xIU!rqF_On3wBCC z@IWp>;09}qiUBUNlI3HWvpHXG^Y7Jfd}D?E4ip-vV|T7Ef3NfYk%@Xux&c|MV6=|k zNjPa)L-8tCp*+q@##WSn40daeyLLt@S0=01l<8;UL6g3lxn^DCFI7Vpz9%@LK_nuA7xHh_VGt&tkFUYraka~Tq1y8BHINKG zxEcv3Lfk#UmR$f78?RsRa}1IxiWK;^kVo;zy*_OML%B!V&%2HOeLHC!+S?=46(DTG7CsoyU1CN0dILsUaLj~$i z18*X$(=3QsKH<3-z^`^f@U4W(L zzobdz+A$(v>J)69{nvbz{V$O*EL3}6ntbDlia2K}W@;#I5uS3^Hmn`UT9`gFJpMDa zMT3rhn%ufa62G^^zQ->g6;{u= zjlMd~EtZKleg%8_ILIcw5yJK6Q|CQraub;@|H(&B$hHSx5_cnO62EpU&P(OH+@dbD`Xl3RkF;hC17Gy__pdHm*%o_l1fjsYx-m#Hjtg>i)E|3x439#`UOy ztCMHs1+J+&(|grJ%CYVis}UyC@a+C#Hd2Tla5I_4ZT(YuF*e((*^u_mroeC7;As5&xtlm5=xF@u|o7qGF)8s2eLNA>3cm zv#N1j_-y%3=e$zGD0L@7B;yFhO0*Jt8Xb>g&#_0r#SOhAJ0AgEij*g*IbVa_&`Us( zNL8k;LSCKrzMMYIJ#GF``89&FlP8?4sl`QoI@-TK5t^Q=i~gpQ-oh_m8v+Hm5-;Lc zU3>tw#aa-kD}-ZG!R=DPZ3?^~Y$1%qkVG@B;}aOHs07bjlB3YcAs0r1u5(qUG`TBJ zJc9_gU-3NwP8G073RoB~K+556owuY$C;xUJ4(v;_?}Q|@P#rN5plIm|X{p?|d6NFb zef3Y?C7ePNu?EdK2FzWXx1#1D*R)IJC(zcXp_e2UMwq)j(01C(5#ad{&??g>w^TyEO=O=;YIP*eT_TzW{r%07CgvjSnsNWdRAP$}YW^k{ zk2#y%?HoyouHcpT*y{sAQrfgnXm$xD2xsd*#g8dZj^nCHwab4%N27X)u&P?(M>~9%vUl^W$gtnZJNG4>6Zpi#4fp=T)K|0oM1|Gw)*~1q z(qtO}@;h%wG>NOPM!Cc3A;|&tTB5J;q3ih3e-=D}97)<(*U(Fz1uq+;^F{uu`k$

Hwx1pB+3h>fr6oikD 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�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 diff --git a/polymer-perf/eduke32/build/MakeDistributions b/polymer-perf/eduke32/build/MakeDistributions deleted file mode 100644 index 619e50a01..000000000 --- a/polymer-perf/eduke32/build/MakeDistributions +++ /dev/null @@ -1,48 +0,0 @@ -# GNU Makefile to prepare source and binary distributions. -# make -f MakeDistributions [source|binary] - -SOURCEFILES=buildlic.txt ChangeLog LICENSE \ - Makefile Makefile.deps Makefile.shared Makefile.msvc Makefile.watcom \ - MakeDistributions makegnu.bat makemsc.bat makew.bat NAMES.H README - -BINARYFILES=build.exe buildlic.txt ChangeLog fmod.dll \ - game.exe LICENSE NAMES.H neatsong.ogg README - -BINARYCHECKS=checkfmoddll checkneatsongogg - -.PHONY: source binary $(BINARYCHECKS) - -datenow=$(shell date +%Y%m%d) - -sourcedir=txbuild_src_$(datenow) -binarydir=txbuild_$(datenow) - -all: source binary - -source: - rm -rf $(sourcedir) $(sourcedir).zip - mkdir $(sourcedir) $(sourcedir)/obj.gnu $(sourcedir)/obj.watcom $(sourcedir)/obj.msc - touch $(sourcedir)/obj.gnu/keep.me $(sourcedir)/obj.watcom/keep.me $(sourcedir)/obj.msc/keep.me - cp $(SOURCEFILES) $(sourcedir) - find . -name "*~" -exec rm -rf '{}' ';'; - find . -name "*.orig" -exec rm -rf '{}' ';'; - find . -name "*.rej" -exec rm -rf '{}' ';'; - find . -name "*.mine" -exec rm -rf '{}' ';'; - find . -name "*.c.r*" -exec rm -rf '{}' ';'; - find . -name "*.h.r*" -exec rm -rf '{}' ';'; - cp -R src rsrc include devcpp testgame $(sourcedir) - find $(sourcedir) | grep -i svn | xargs rm -rf - rm -f $(sourcedir)/src/tmp/* - touch $(sourcedir)/src/tmp/keep.me - kzip -r $(sourcedir).zip $(sourcedir) - -binary: $(BINARYCHECKS) - make RELEASE=1 - upx --best build.exe game.exe - mkdir $(binarydir) - cp $(BINARYFILES) $(binarydir) - kzip -r $(binarydir).zip $(binarydir) - -# Binary checks -checkfmoddll: fmod.dll -checkneatsongogg: neatsong.ogg diff --git a/polymer-perf/eduke32/build/Makefile b/polymer-perf/eduke32/build/Makefile deleted file mode 100644 index 6799afdc7..000000000 --- a/polymer-perf/eduke32/build/Makefile +++ /dev/null @@ -1,264 +0,0 @@ -# -# Build Makefile for GNU Make -# - -# Notes: -# As of 6 July 2005, the engine should handle optimisations being enabled. -# If things seem to be going wrong, lower or disable optimisations, then -# try again. If things are still going wrong, call me. -# - -include ../Makefile.common - - -# SDK locations for Windows - adjust to match your setup -# -ifneq ($(DXROOT_OVERRIDE),) - DXROOT=$(DXROOT_OVERRIDE) -else - DXROOT=c:/sdks/directx/dx61 -endif -FMODROOTWIN=c:/sdks/fmodapi374win/api - -# Build locations - OBJ gets overridden to the game-specific objects dir -# -OBJ?=obj.gnu -SRC=src -RSRC=rsrc -INC=include - -# ENETROOT=$(SRC)/enet - -# Filename extensions - these won't need to change -# -o=o -res=o -asm=nasm - -# Debugging and release -# -ifneq ($(RELEASE),0) - # Debugging disabled - debug+= $(F_NO_STACK_PROTECTOR) -else - # Debugging enabled - debug+= -DNOSDLPARACHUTE - LIBS+= $(L_SSP) -Wl,--enable-auto-import -endif - -OURCFLAGS=$(BASECFLAGS) -Wno-char-subscripts -I$(INC) $(ARCH) -OURCXXFLAGS=$(BASECXXFLAGS) -ASFLAGS=$(BASEASFLAGS) - -include Makefile.shared - - -UTILLIBS=-lpthread - -ENGINEOBJS= -ifeq (0,$(NOASM)) - ENGINEOBJS+= $(OBJ)/a.$o -endif - -ifneq ($(PLATFORM),WINDOWS) - LIBS+= -ldl -pthread -endif - - -ENGINEOBJS+= \ - $(OBJ)/a-c.$o \ - $(OBJ)/baselayer.$o \ - $(OBJ)/cache1d.$o \ - $(OBJ)/compat.$o \ - $(OBJ)/crc32.$o \ - $(OBJ)/defs.$o \ - $(OBJ)/engine.$o \ - $(OBJ)/polymost.$o \ - $(OBJ)/hightile.$o \ - $(OBJ)/textfont.$o \ - $(OBJ)/smalltextfont.$o \ - $(OBJ)/kplib.$o \ - $(OBJ)/quicklz.$o \ - $(OBJ)/md4.$o \ - $(OBJ)/osd.$o \ - $(OBJ)/pragmas.$o \ - $(OBJ)/scriptfile.$o \ - $(OBJ)/mutex.$o - -ifeq (1,$(USE_OPENGL)) - ENGINEOBJS+= $(OBJ)/mdsprite.$o - ENGINEOBJS+= $(OBJ)/glbuild.$o -endif - -ifeq (1,$(POLYMER)) - ENGINEOBJS+= $(OBJ)/polymer.$o -endif - -ifeq (1,$(NEDMALLOC)) - ENGINEOBJS+= $(OBJ)/nedmalloc.$o -endif - -EDITOROBJS=$(OBJ)/build.$o \ - $(OBJ)/config.$o - -# PLATFORM SPECIFIC SETTINGS - -ifeq ($(PLATFORM),LINUX) - ASFLAGS+= -f elf -endif -ifeq ($(PLATFORM),DARWIN) - ENGINEOBJS += $(OBJ)/StartupWinController.editor.$o \ - $(OBJ)//osxbits.$o - ASFLAGS += -f Mach-O - OURCFLAGS += -fno-pic - TARGETOPTS += -DNOASM -endif -ifeq ($(PLATFORM),BSD) - ASFLAGS+= -f elf - OURCFLAGS+= -I/usr/X11R6/include -endif -ifeq ($(PLATFORM),WINDOWS) - OURCFLAGS+= -DUNDERSCORES -I$(DXROOT)/include -I$(FMODROOTWIN)/inc # -I$(ENETROOT)/include - LIBS+= -lwsock32 -lws2_32 -lwinmm #-L$(ENETROOT) - ASFLAGS+= -DUNDERSCORES -f win32 -endif -ifeq ($(PLATFORM),BEOS) - ASFLAGS+= -f elf - TARGETOPTS+= -DNOASM -endif -ifeq ($(PLATFORM),SYLLABLE) - ASFLAGS+= -f elf -endif - -ifeq ($(RENDERTYPE),SDL) - ENGINEOBJS+= $(OBJ)/sdlayer.$o - OURCFLAGS+= $(subst -Dmain=SDL_main,,$(SDLCONFIG_CFLAGS)) - - ifeq (1,$(HAVE_GTK2)) - OURCFLAGS+= -DHAVE_GTK2 $(shell pkg-config --cflags gtk+-2.0) - ENGINEOBJS+= $(OBJ)/gtkbits.$o - ifeq ($(LINKED_GTK),0) - ENGINEOBJS+= $(OBJ)/dynamicgtk.$o - endif - EDITOROBJS+= $(OBJ)/startgtk.editor.$o - endif -endif -ifeq ($(RENDERTYPE),WIN) - ENGINEOBJS+= $(OBJ)/winlayer.$o $(OBJ)/rawinput.$o - EDITOROBJS+= $(OBJ)/startwin.editor.$o -endif - -ifneq (0,$(EFENCE)) - LIBS+= -lefence - OURCFLAGS+= -DEFENCE -endif - -OURCFLAGS+= $(BUILDCFLAGS) - -.SILENT: -.PHONY: clean veryclean all utils enginelib editorlib - -# TARGETS - -UTILS=kextract$(EXESUFFIX) kgroup$(EXESUFFIX) transpal$(EXESUFFIX) wad2art$(EXESUFFIX) wad2map$(EXESUFFIX) md2tool$(EXESUFFIX) - -# all: $(OBJ)/$(ENGINELIB) $(OBJ)/$(EDITORLIB) -utils: $(UTILS) - -enginelib: $(OBJ)/$(ENGINELIB) -$(OBJ)/$(ENGINELIB): $(ENGINEOBJS) - $(BUILD_ECHOFLAGS) - $(ARCHIVE_STATUS) - if $(AR) rc $@ $^; then $(ARCHIVE_OK); else $(ARCHIVE_FAILED); fi - $(RANLIB) $@ - -editorlib: $(OBJ)/$(EDITORLIB) -$(OBJ)/$(EDITORLIB): $(EDITOROBJS) - $(BUILD_ECHOFLAGS) - $(ARCHIVE_STATUS) - if $(AR) rc $@ $^; then $(ARCHIVE_OK); else $(ARCHIVE_FAILED); fi - $(RANLIB) $@ - -pragmacheck$(EXESUFFIX): $(OBJ)/pragmacheck.$o $(OBJ)/pragmas.$o - $(CC) $(subst -Dmain=app_main,,$(OURCFLAGS)) -o $@ $^ - -kextract$(EXESUFFIX): $(OBJ)/kextract.$o $(OBJ)/compat.$o $(OBJ)/nedmalloc.$o - $(CC) -o $@ $^ $(UTILLIBS) -kgroup$(EXESUFFIX): $(OBJ)/kgroup.$o $(OBJ)/compat.$o $(OBJ)/nedmalloc.$o - $(CC) -o $@ $^ $(UTILLIBS) -transpal$(EXESUFFIX): $(OBJ)/transpal.$o $(OBJ)/pragmas.$o $(OBJ)/compat.$o $(OBJ)/nedmalloc.$o - $(CC) -o $@ $^ $(UTILLIBS) -wad2art$(EXESUFFIX): $(OBJ)/wad2art.$o $(OBJ)/pragmas.$o $(OBJ)/compat.$o $(OBJ)/nedmalloc.$o - $(CC) -o $@ $^ $(UTILLIBS) -wad2map$(EXESUFFIX): $(OBJ)/wad2map.$o $(OBJ)/pragmas.$o $(OBJ)/compat.$o $(OBJ)/nedmalloc.$o - $(CC) -o $@ $^ $(UTILLIBS) -md2tool$(EXESUFFIX): $(OBJ)/md2tool.$o $(OBJ)/compat.$o $(OBJ)/nedmalloc.$o - $(CC) -o $@ $^ $(UTILLIBS) -generateicon$(EXESUFFIX): $(OBJ)/generateicon.$o $(OBJ)/kplib.$o - $(CC) -o $@ $^ $(UTILLIBS) -cacheinfo$(EXESUFFIX): $(OBJ)/cacheinfo.$o $(OBJ)/compat.$o $(OBJ)/nedmalloc.$o - $(CC) -o $@ $^ $(UTILLIBS) -enumdisplay$(EXESUFFIX): src/misc/enumdisplay.c - $(CC) -g -Os -o $@ $^ $(UTILLIBS) -I$(DXROOT)/include -lgdi32 -mapdump$(EXESUFFIX): $(OBJ)/mapdump.$o - $(CC) -o $@ $^ $(UTILLIBS) - -# DEPENDENCIES -include Makefile.deps - -# RULES -$(OBJ)/%.$o: $(SRC)/%.nasm - $(COMPILE_STATUS) - if $(AS) $(ASFLAGS) $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi - -$(OBJ)/%.$o: $(SRC)/%.c - $(COMPILE_STATUS) - if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi - -$(OBJ)/%.$o: $(SRC)/%.m - $(COMPILE_STATUS) - if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi - -$(OBJ)/%.$o: $(SRC)/%.cpp - $(COMPILE_STATUS) - if $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi - -$(OBJ)/%.$o: $(SRC)/%.cxx - $(CXX) $(CXXFLAGS) $(OURCXXFLAGS) $(OURCFLAGS) -c $< -o $@ - -$(OBJ)/%.$o: $(SRC)/misc/%.rc - $(COMPILE_STATUS) - if $(RC) -i $< -o $@ --include-dir=$(INC) --include-dir=$(SRC); then $(COMPILE_OK); else $(COMPILE_FAILED); fi - -$(OBJ)/%.$o: $(SRC)/util/%.c - $(COMPILE_STATUS) - if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi - -$(OBJ)/%.$o: $(RSRC)/%.c - $(COMPILE_STATUS) - if $(CC) $(CFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi - -$(OBJ)/editor_banner.$o: $(RSRC)/editor_banner.c - echo "#include " > $@ - gdk-pixbuf-csource --extern --struct --raw --name=startbanner_pixdata $^ | sed 's/load_inc//' >> $@ -$(RSRC)/editor_banner.c: $(RSRC)/build.bmp - echo "#include " > $@ - gdk-pixbuf-csource --extern --struct --raw --name=startbanner_pixdata $^ | sed 's/load_inc//' >> $@ - -# PHONIES - -clean: - -rm -f $(OBJ)/* - -veryclean: clean - -rm -f $(ENGINELIB) $(EDITORLIB) $(UTILS) - -.PHONY: fixlineends -fixlineends: - for a in `find . -type f \( -name '*.c' -o -name '*.h' -o -name 'Makefile*' \) \! -path '*/.svn/*'`; do \ - echo Fixing $$a && tr -d "\015" < $$a > $$a.fix && mv $$a.fix $$a; \ - done - -# DO NOT DELETE - - diff --git a/polymer-perf/eduke32/build/Makefile.deps b/polymer-perf/eduke32/build/Makefile.deps deleted file mode 100644 index 15f0111de..000000000 --- a/polymer-perf/eduke32/build/Makefile.deps +++ /dev/null @@ -1,47 +0,0 @@ -# Build Engine dependencies -# -$(OBJ)/a-c.$o: $(SRC)/a-c.c $(INC)/a.h -$(OBJ)/a.$o: $(SRC)/a.$(asm) -$(OBJ)/baselayer.$o: $(SRC)/baselayer.c $(INC)/compat.h $(INC)/baselayer.h $(INC)/build.h $(INC)/osd.h -$(OBJ)/build.$o: $(SRC)/build.c $(INC)/build.h $(INC)/pragmas.h $(INC)/compat.h $(INC)/baselayer.h $(INC)/editor.h -$(OBJ)/cache1d.$o: $(SRC)/cache1d.c $(INC)/compat.h $(INC)/cache1d.h $(INC)/pragmas.h $(INC)/baselayer.h -$(OBJ)/compat.$o: $(SRC)/compat.c $(INC)/compat.h -$(OBJ)/config.$o: $(SRC)/config.c $(INC)/compat.h $(INC)/osd.h $(INC)/editor.h -$(OBJ)/crc32.$o: $(SRC)/crc32.c $(INC)/crc32.h -$(OBJ)/defs.$o: $(SRC)/defs.c $(INC)/build.h $(INC)/baselayer.h $(INC)/scriptfile.h $(INC)/compat.h -$(OBJ)/engine.$o: $(SRC)/engine.c $(INC)/compat.h $(INC)/build.h $(INC)/pragmas.h $(INC)/cache1d.h $(INC)/a.h $(INC)/osd.h $(INC)/baselayer.h $(SRC)/engine_priv.h $(INC)/polymost.h $(INC)/hightile.h $(INC)/mdsprite.h $(INC)/polymer.h -$(OBJ)/polymost.$o: $(SRC)/polymost.c $(INC)/md4.h $(INC)/quicklz.h $(INC)/lzwnew.h $(SRC)/engine_priv.h $(INC)/polymost.h $(INC)/hightile.h $(INC)/mdsprite.h -$(OBJ)/hightile.$o: $(SRC)/hightile.c $(INC)/kplib.h $(INC)/hightile.h -$(OBJ)/mdsprite.$o: $(SRC)/mdsprite.c $(SRC)/engine_priv.h $(INC)/polymost.h $(INC)/hightile.h $(INC)/mdsprite.h -$(OBJ)/textfont.$o: $(SRC)/textfont.c -$(OBJ)/smalltextfont.$o: $(SRC)/smalltextfont.c -$(OBJ)/glbuild.$o: $(SRC)/glbuild.c $(INC)/glbuild.h $(INC)/baselayer.h -$(OBJ)/kplib.$o: $(SRC)/kplib.c $(INC)/compat.h -$(OBJ)/quicklz.$o: $(SRC)/quicklz.c $(INC)/quicklz.h -$(OBJ)/lzwnew.$o: $(SRC)/lzwnew.c -$(OBJ)/md4.$o: $(SRC)/md4.c $(INC)/md4.h $(INC)/compat.h -$(OBJ)/osd.$o: $(SRC)/osd.c $(INC)/build.h $(INC)/osd.h $(INC)/compat.h $(INC)/baselayer.h -$(OBJ)/pragmas.$o: $(SRC)/pragmas.c $(INC)/compat.h -$(OBJ)/scriptfile.$o: $(SRC)/scriptfile.c $(INC)/scriptfile.h $(INC)/cache1d.h $(INC)/compat.h -$(OBJ)/sdlayer.$o: $(SRC)/sdlayer.c $(INC)/compat.h $(INC)/sdlayer.h $(INC)/baselayer.h $(INC)/cache1d.h $(INC)/pragmas.h $(INC)/a.h $(INC)/build.h $(INC)/osd.h $(INC)/glbuild.h -$(OBJ)/winlayer.$o: $(SRC)/winlayer.c $(INC)/compat.h $(INC)/winlayer.h $(INC)/baselayer.h $(INC)/pragmas.h $(INC)/build.h $(INC)/a.h $(INC)/osd.h $(INC)/dxdidf.h $(INC)/glbuild.h $(INC)/rawinput.h -$(OBJ)/gtkbits.$o: $(SRC)/gtkbits.c $(INC)/baselayer.h $(INC)/build.h $(INC)/dynamicgtk.h -$(OBJ)/dynamicgtk.$o: $(SRC)/dynamicgtk.c $(INC)/dynamicgtk.h -$(OBJ)/polymer.$o: $(SRC)/polymer.c $(INC)/polymer.h $(INC)/compat.h $(INC)/build.h $(INC)/glbuild.h $(INC)/osd.h $(INC)/pragmas.h $(INC)/mdsprite.h $(INC)/polymost.h -$(OBJ)/nedmalloc.$o: $(SRC)/nedmalloc.c $(INC)/nedmalloc.h $(INC)/malloc.c.h -$(OBJ)/mutex.$o: $(SRC)/mutex.c $(INC)/mutex.h -$(OBJ)/rawinput.$o: $(SRC)/rawinput.c $(INC)/rawinput.h - -$(OBJ)/buildres.$(res): $(SRC)/misc/buildres.rc $(INC)/startwin.editor.h -$(OBJ)/startwin.editor.$o: $(SRC)/startwin.editor.c $(INC)/build.h $(INC)/editor.h $(INC)/winlayer.h $(INC)/compat.h $(INC)/startwin.editor.h -$(OBJ)/startgtk.editor.$o: $(SRC)/startgtk.editor.c $(INC)/baselayer.h $(INC)/build.h $(INC)/editor.h $(INC)/compat.h - -$(OBJ)/build_icon.$o: $(RSRC)/build_icon.c - -$(OBJ)/kextract.$o: $(SRC)/util/kextract.c $(INC)/compat.h -$(OBJ)/kgroup.$o: $(SRC)/util/kgroup.c $(INC)/compat.h -$(OBJ)/transpal.$o: $(SRC)/util/transpal.c $(INC)/compat.h $(INC)/pragmas.h -$(OBJ)/wad2art.$o: $(SRC)/util/wad2art.c $(INC)/compat.h $(INC)/pragmas.h -$(OBJ)/wad2map.$o: $(SRC)/util/wad2map.c $(INC)/compat.h $(INC)/pragmas.h -$(OBJ)/generateicon.$o: $(SRC)/util/generateicon.c -$(OBJ)/cacheinfo.$o: $(SRC)/util/cacheinfo.c $(INC)/compat.h diff --git a/polymer-perf/eduke32/build/Makefile.msvc b/polymer-perf/eduke32/build/Makefile.msvc deleted file mode 100644 index d78bcbb10..000000000 --- a/polymer-perf/eduke32/build/Makefile.msvc +++ /dev/null @@ -1,156 +0,0 @@ -# Build Makefile for Microsoft NMake -!ifdef OVERRIDES -!include $(OVERRIDES) -!endif - -SRC=src -!ifndef OBJ -OBJ=obj.msc -!endif -INC=include\ # -!ifndef CFLAGS -CFLAGS=/DUSE_OPENGL /DPOLYMER # /DNEDMALLOC -!endif - -o=obj -res=res -asm=masm - -ENGINELIB=engine.lib -EDITORLIB=build.lib - -# this path should match eduke32\Makefile.msvc -WDKROOT="C:\WinDDK\7600.16385.1" - -# /D these to enable certain features of the port's compile process -# NOASM When defined, uses C instead of assembly code -!ifdef NOASM -TARGETOPTS=/DNOASM -!endif - -!ifdef DEBUG -# debugging options -flags_cl=/Od /Zi -flags_link=/DEBUG -flags_lib= -!else -# release options -flags_cl=/O2 /GL /arch:SSE /MP /I$(WDKROOT)\inc\crt -flags_link=/RELEASE /LTCG /LIBPATH:$(WDKROOT)\lib\Crt\i386 /LIBPATH:$(WDKROOT)\lib\wxp\i386 -flags_lib=/LTCG -!endif - -CC=cl -AS=ml -RC=rc -LINK=link /opt:ref /nologo -CFLAGS=$(CFLAGS) /nologo /MT /J $(flags_cl) $(TARGETOPTS) /I$(INC) -ASFLAGS=/nologo /coff /c -EXESUFFIX=.exe -!ifdef DEBUG -CFLAGS=$(CFLAGS) /DDEBUGGINGAIDS /D "_CRT_SECURE_NO_DEPRECATE" -!endif - -ENGINEOBJS= \ -!ifdef NOASM - $(OBJ)\a-c.$o \ -!else - $(OBJ)\a.$o \ -!endif - $(OBJ)\baselayer.$o \ - $(OBJ)\cache1d.$o \ - $(OBJ)\compat.$o \ - $(OBJ)\crc32.$o \ - $(OBJ)\defs.$o \ - $(OBJ)\engine.$o \ - $(OBJ)\polymost.$o \ - $(OBJ)\hightile.$o \ - $(OBJ)\mdsprite.$o \ - $(OBJ)\textfont.$o \ - $(OBJ)\smalltextfont.$o \ - $(OBJ)\glbuild.$o \ - $(OBJ)\kplib.$o \ - $(OBJ)\quicklz.$o \ - $(OBJ)\lzwnew.$o \ - $(OBJ)\md4.$o \ - $(OBJ)\osd.$o \ - $(OBJ)\pragmas.$o \ - $(OBJ)\scriptfile.$o \ - $(OBJ)\winlayer.$o \ - $(OBJ)\polymer.$o \ - $(OBJ)\mutex.$o \ - $(OBJ)\rawinput.$o - -EDITOROBJS=$(OBJ)\build.$o \ - $(OBJ)\startwin.editor.$o \ - $(OBJ)\config.$o - -RENDERTYPE=WIN -LIBS=$(LIBS) user32.lib gdi32.lib shell32.lib wsock32.lib comctl32.lib dxguid.lib -CFLAGS=$(CFLAGS) /DRENDERTYPE$(RENDERTYPE)=1 /W2 - -# RULES -.SUFFIXES: .masm - -{$(SRC)}.masm{$(OBJ)}.$o: - $(AS) /c $(ASFLAGS) /Fo$@ $< - -{$(SRC)\tmp}.c{$(OBJ)}.$o: - $(CC) /c $(CFLAGS) /Fo$@ $< - -{$(SRC)\util}.c{$(OBJ)}.$o: - $(CC) /c $(CFLAGS) /Fo$@ $< - -{$(SRC)\misc}.rc{$(OBJ)}.$(res): - $(RC) /i$(INC)\ /fo$@ /r $< - -{$(SRC)}.c{$(OBJ)}.$o: - $(CC) /c $(CFLAGS) /Fo$@ $< - -{$(SRC)}.cpp{$(OBJ)}.$o: - $(CC) /c $(CFLAGS) /Fo$@ $< - -# TARGETS -UTILS=kextract$(EXESUFFIX) kgroup$(EXESUFFIX) transpal$(EXESUFFIX) wad2art$(EXESUFFIX) wad2map$(EXESUFFIX) - -all: $(OBJ)/$(ENGINELIB) $(OBJ)/$(EDITORLIB); -utils: $(UTILS) ; - -enginelib: $(OBJ)\$(ENGINELIB) ; -$(OBJ)\$(ENGINELIB): $(ENGINEOBJS) - lib $(flags_lib) /out:$@ /nologo $** - -editorlib: $(OBJ)\$(EDITORLIB) ; -$(OBJ)\$(EDITORLIB): $(EDITOROBJS) - lib $(flags_lib) /out:$@ /nologo $** - -# the tools -kextract$(EXESUFFIX): $(OBJ)\kextract.$o $(OBJ)\compat.$o $(OBJ)\nedmalloc.$o - $(LINK) /OUT:$@ /SUBSYSTEM:CONSOLE $(flags_link) /MAP $** $(LIBS) - $(MT) -manifest $@.manifest -outputresource:$@ - -kgroup$(EXESUFFIX): $(OBJ)\kgroup.$o $(OBJ)\compat.$o $(OBJ)\nedmalloc.$o - $(LINK) /OUT:$@ /SUBSYSTEM:CONSOLE $(flags_link) /MAP $** $(LIBS) - $(MT) -manifest $@.manifest -outputresource:$@ - -transpal$(EXESUFFIX): $(OBJ)\transpal.$o $(OBJ)\pragmas.$o $(OBJ)\compat.$o $(OBJ)\nedmalloc.$o - $(LINK) /OUT:$@ /SUBSYSTEM:CONSOLE $(flags_link) /MAP $** $(LIBS) - $(MT) -manifest $@.manifest -outputresource:$@ - -wad2map$(EXESUFFIX): $(OBJ)\wad2map.$o $(OBJ)\pragmas.$o $(OBJ)\compat.$o $(OBJ)\nedmalloc.$o - $(LINK) /OUT:$@ /SUBSYSTEM:CONSOLE $(flags_link) /MAP $** $(LIBS) - $(MT) -manifest $@.manifest -outputresource:$@ - -wad2art$(EXESUFFIX): $(OBJ)\wad2art.$o $(OBJ)\pragmas.$o $(OBJ)\compat.$o $(OBJ)\nedmalloc.$o - $(LINK) /OUT:$@ /SUBSYSTEM:CONSOLE $(flags_link) /MAP $** $(LIBS) - $(MT) -manifest $@.manifest -outputresource:$@ - -# DEPENDENCIES -!include Makefile.deps - -# PHONIES -clean: - -del /Q $(ENGINEOBJS) $(EDITOROBJS) $(OBJ)\kextract.$o $(OBJ)\kgroup.$o $(OBJ)\transpal.$o $(OBJ)\wad2map.$o $(OBJ)\wad2art.$o -veryclean: clean - -del /Q $(OBJ)\$(ENGINELIB) $(OBJ)\$(EDITORLIB) $(UTILS) *.map *.manifest *.pdb - diff --git a/polymer-perf/eduke32/build/Makefile.shared b/polymer-perf/eduke32/build/Makefile.shared deleted file mode 100644 index ae1348889..000000000 --- a/polymer-perf/eduke32/build/Makefile.shared +++ /dev/null @@ -1,232 +0,0 @@ -# Shared make information between Build engine and games - -ENGINELIB=libengine.a -EDITORLIB=libbuild.a - -SDLCONFIG = /usr/local/bin/sdl-configinvalid - -ifeq ($(wildcard $(SDLCONFIG)),$(SDLCONFIG)) - SDLROOT = /usr/local -else - SDLCONFIG = /usr/bin/sdl-config -endif - -SDL_FRAMEWORK = 0 - -# Overridden for OSes that don't have the cutdown stdc++ that is supc++ -STDCPPLIB=-lsupc++ -BUILDCFLAGS= - -# GCC version, for conditional selection of flags. -# This is easier than trying to squeeze it out of gcc --version: -GCC_MAJOR ?= 4 -ifeq (4,$(GCC_MAJOR)) - F_NO_STACK_PROTECTOR := -fno-stack-protector - # there are some link-time issues with stack protectors, so make it possible to override - F_STACK_PROTECTOR_ALL ?= -fstack-protector-all - F_JUMP_TABLES := -fjump-tables - M_TUNE_GENERIC := -mtune=generic - M_STACKREALIGN := -mstackrealign - L_SSP := -lssp -endif - - -ifndef ARCH - ifeq ($(findstring i686, $(shell uname -m)), i686) - ARCH=-march=pentium3 $(M_TUNE_GENERIC) -mmmx # -msse2 -mfpmath=sse,387 -malign-double $(M_STACKREALIGN) - else - ARCH= - endif -endif - -# Detect the platform if it wasn't explicitly given to us from -# the outside world. This allows cross-compilation by overriding -# CC and giving us PLATFORM specifically. -# -ifndef PLATFORM - uname=$(strip $(shell uname -s)) - PLATFORM=UNKNOWN - ifeq ($(findstring Linux,$(uname)),Linux) - PLATFORM=LINUX - endif - ifeq ($(findstring BSD,$(uname)),BSD) - PLATFORM=BSD - endif - ifeq ($(findstring MINGW,$(uname)),MINGW) - PLATFORM=WINDOWS - endif - ifeq ($(findstring Darwin,$(uname)),Darwin) - PLATFORM=DARWIN - endif - ifeq ($(findstring BeOS,$(uname)),BeOS) - PLATFORM=BEOS - endif - ifeq ($(findstring skyos,$(uname)),skyos) - PLATFORM=SKYOS - endif - ifeq ($(findstring QNX,$(uname)),QNX) - PLATFORM=QNX - endif - ifeq ($(findstring SunOS,$(uname)),SunOS) - PLATFORM=SUNOS - endif - ifeq ($(findstring syllable,$(uname)),syllable) - PLATFORM=SYLLABLE - endif -endif - -ifeq ($(PLATFORM),LINUX) - RENDERTYPE=SDL - BUILDCFLAGS+= -DHAVE_INTTYPES - GTKCOMPAT32=0 - - ifeq ($(findstring x86_64,$(shell uname -m)),x86_64) - ifeq (1,$(BUILD32_ON_64)) - # On my 64bit Gentoo these are the 32bit emulation libs - LIBS+= -m32 -L/emul/linux/x86/usr/lib - BUILDCFLAGS+= -m32 - # Override WITHOUT_GTK=0 - GTKCOMPAT32=1 - else - override NOASM=1 - endif - endif -endif -ifeq ($(PLATFORM),DARWIN) - RENDERTYPE = SDL - BUILDCFLAGS += -DHAVE_INTTYPES - GTKCOMPAT32 = 0 - SDL_FRAMEWORK = 1 - # ASM won't work on PowerPC and currently throws errors on i386 too :-/ - override NOASM = 1 -endif -ifeq ($(PLATFORM),WINDOWS) - RENDERTYPE ?= WIN - BUILDCFLAGS+= -DHAVE_INTTYPES - EXESUFFIX=.exe - LIBS+= -lmingwex -lwinmm -L$(DXROOT)/lib -lwsock32 -lcomctl32 #-lshfolder -# STDCPPLIB=-lstdc++ -endif -ifeq ($(PLATFORM),BSD) - RENDERTYPE=SDL - BUILDCFLAGS+= -DHAVE_INTTYPES -endif -ifeq ($(PLATFORM),BEOS) - RENDERTYPE=SDL - STDCPPLIB=-lstdc++ -endif -ifeq ($(PLATFORM),SKYOS) - RENDERTYPE=SDL - EXESUFFIX=.app - override NOASM=1 - BUILDCFLAGS+= -DUNDERSCORES - SDLCONFIG= - SDLCONFIG_CFLAGS=-I/boot/programs/sdk/include/sdl - LIBS+= -lSDL -lnet -endif -ifeq ($(PLATFORM),QNX) - RENDERTYPE=SDL - override USE_OPENGL=0 - override NOASM=1 - STDCPPLIB=-lstdc++ - LIBS+= -lsocket -endif -ifeq ($(PLATFORM),SUNOS) - RENDERTYPE=SDL - override USE_OPENGL=0 - override NOASM=1 - STDCPPLIB=-lstdc++ - LIBS+= -lsocket -lnsl -endif -ifeq ($(PLATFORM),SYLLABLE) - RENDERTYPE=SDL - override USE_OPENGL=0 - override NOASM=1 -endif - -ifeq ($(RENDERTYPE),SDL) - ifeq ($(SDL_FRAMEWORK),1) - LIBS += -Wl,-framework,SDL - SDLCONFIG_CFLAGS+= -I/Library/Frameworks/SDL.framework/Headers - else - ifneq ($(SDLCONFIG),) - LIBS+= $(shell $(SDLCONFIG) --libs) - SDLCONFIG_CFLAGS+=$(shell $(SDLCONFIG) --cflags) - endif - endif - - ifeq (1,$(WITHOUT_GTK)) - HAVE_GTK2=0 - else - ifneq (No,$(shell pkg-config --exists gtk+-2.0 || echo No)) - HAVE_GTK2=1 - # On my 64bit Gentoo box I have Cairo enabled which means the libs list includes - # -lpangocairo-1.0 and -lcairo, however the 32bit compatibility libraries don't - # include cairo, so we need to filter out those -l switches in order to link - ifneq ($(LINKED_GTK),0) - ifeq ($(GTKCOMPAT32),1) - LIBS+= $(shell pkg-config --libs gtk+-2.0 | sed 's/\s-l\(pango\)\{0,1\}cairo\S*\s/ /g') - else - LIBS+= $(shell pkg-config --libs gtk+-2.0) - endif - endif - else - HAVE_GTK2=0 - endif - endif -else - ifeq ($(RENDERTYPE),WIN) - LIBS+= -mwindows -ldxguid - endif -endif - - -BUILDCFLAGS+= -DRENDERTYPE$(RENDERTYPE)=1 - -ifneq (0,$(USE_OPENGL)) - BUILDCFLAGS+= -DUSE_OPENGL -endif -ifneq (0,$(NOASM)) - BUILDCFLAGS+= -DNOASM -endif -ifneq (0,$(LINKED_GTK)) - BUILDCFLAGS+= -DLINKED_GTK -endif - -ifneq (0,$(POLYMER)) - ifneq (0,$(USE_OPENGL)) - BUILDCFLAGS+= -DPOLYMER - endif -endif - -ifneq (0,$(NEDMALLOC)) - BUILDCFLAGS+= -DNEDMALLOC -endif - -ifeq ($(PRETTY_OUTPUT),1) -BUILD_STARTED = printf "\033[K\033[1;36mBuild started using \"$(CC) $(OURCFLAGS)\"\033[0m\n" -BUILD_ECHOFLAGS = printf "\033[K\033[1;36mEnded compilation in this directory using \"$(CC) $(OURCFLAGS)\"\033[0m\n" -BUILD_FINISHED = printf "\033[K\033[1;36mBuild successful:\033[0m\n" -COMPILE_STATUS = printf "\033[K\033[0mBuilding object \033[1m$@\033[0m...\033[0m\r" -COMPILE_OK = printf "\033[K\033[0;32mBuilt object \033[1;32m$@\033[0;32m \033[0m\n" -COMPILE_FAILED = printf "\033[K\033[0;31mFailed building \033[1;31m$@\033[0;31m from\033[0m \033[1;31m$<\033[0;31m!\033[0m\n"; exit 1 -ARCHIVE_STATUS = printf "\033[K\033[0mCreating library archive \033[1m$@\033[0m...\033[0m\r" -ARCHIVE_OK = printf "\033[K\033[0;32mCreated library archive \033[1;32m$@\033[0;32m \033[0m\n" -ARCHIVE_FAILED = printf "\033[K\033[0;31mFailed creating library archive \033[1;31m$@\033[0;31m from\033[0m \033[1;31m$<\033[0;31m!\033[0m\n"; exit 1 -LINK_STATUS = printf "\033[K\033[0;0mLinking executable \033[1m$@\033[0;0m...\033[0m\r" -LINK_OK = printf "\033[K\033[0;32mLinked executable \033[1;32m$@\033[0;32m \033[0m\n" -LINK_FAILED = printf "\033[K\033[0;31mFailed linking executable \033[1;31m$@\033[0;31m!\033[0m\n"; exit 1 -else -BUILD_STARTED = -BUILD_ECHOFLAGS= -BUILD_FINISHED = -COMPILE_STATUS = -COMPILE_OK = true -COMPILE_FAILED = false; exit 1 -ARCHIVE_STATUS = -ARCHIVE_OK = true -ARCHIVE_FAILED = false; exit 1 -LINK_STATUS = -LINK_OK = true -LINK_FAILED = false; exit 1 -endif diff --git a/polymer-perf/eduke32/build/buildlic.txt b/polymer-perf/eduke32/build/buildlic.txt deleted file mode 100644 index 3a3985bb6..000000000 --- a/polymer-perf/eduke32/build/buildlic.txt +++ /dev/null @@ -1,71 +0,0 @@ -BUILD SOURCE CODE LICENSE TERMS: 06/20/2000 - -[1] I give you permission to make modifications to my Build source and - distribute it, BUT: - -[2] Any derivative works based on my Build source may be distributed ONLY - through the INTERNET. - -[3] Distribution of any derivative works MUST be done completely FREE of - charge - no commercial exploitation whatsoever. - -[4] Anything you distribute which uses a part of my Build Engine source - code MUST include: - - [A] The following message somewhere in the archive: - - // "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman - // Ken Silverman's official web site: "http://www.advsys.net/ken" - // See the included license file "BUILDLIC.TXT" for license info. - - [B] This text file "BUILDLIC.TXT" along with it. - - [C] Any source files that you modify must include this message as well: - - // This file has been modified from Ken Silverman's original release - -[5] The use of the Build Engine for commercial purposes will require an - appropriate license arrangement with me. Contact information is - on my web site. - -[6] I take no responsibility for damage to your system. - -[7] Technical support: Before contacting me with questions, please read - and do ALL of the following! - - [A] Look through ALL of my text files. There are 7 of them (including this - one). I like to think that I wrote them for a reason. You will find - many of your answers in the history section of BUILD.TXT and - BUILD2.TXT (they're located inside SRC.ZIP). - - [B] If that doesn't satisfy you, then try going to: - - "http://www.advsys.net/ken/buildsrc" - - where I will maintain a Build Source Code FAQ (or perhaps I might - just provide a link to a good FAQ). - - [C] I am willing to respond to questions, but ONLY if they come at a rate - that I can handle. - - PLEASE TRY TO AVOID ASKING DUPLICATE QUESTIONS! - - As my line of defense, I will post my current policy about - answering Build source questions (right below the E-mail address - on my web site.) You can check there to see if I'm getting - overloaded with questions or not. - - If I'm too busy, it might say something like this: - - I'm too busy to answer Build source questions right now. - Sorry, but don't expect a reply from me any time soon. - - If I'm open for Build source questions, please state your question - clearly and don't include any unsolicited attachments unless - they're really small (like less than 50k). Assume that I have - a 28.8k modem. Also, don't leave out important details just - to make your question appear shorter - making me guess what - you're asking doesn't save me time! - ----------------------------------------------------------------------------- --Ken S. (official web site: http://www.advsys.net/ken) diff --git a/polymer-perf/eduke32/build/doc/build.txt b/polymer-perf/eduke32/build/doc/build.txt deleted file mode 100644 index 56aacdf48..000000000 --- a/polymer-perf/eduke32/build/doc/build.txt +++ /dev/null @@ -1,5081 +0,0 @@ -// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman -// Ken Silverman's official web site: "http://www.advsys.net/ken" -// See the included license file "BUILDLIC.TXT" for license info. - -BUILD engine Notes (8/14/95): - -BUILD programmed by Ken Silverman - -ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -³ GAME KEYS: ³ -ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ - ESC = Quit - Mouse = Movement - Arrows = Movement - Lt. Enter = Single-player: Play back game. - Multi-player: View from other player's eyes. - Rt. Enter = Switch between 3D / 2D modes - Lt. +/- = Zoom in 2D mode - A/Z = Move up and down - Left-Ctrl = Shoot - 1/2 = Select weapon -Left-Shift = Run - T = Reset Timing (sets totalclock = 0) - V = Change visibility. In BUILD.H there is a visiblity variable. - It is initialized to 13. It can range from around 8 (darker) - to about 15 (lighter). - P = Change parallaxing sky mode. (0, 1, and 2 (Default = 2) - F12 = Screen capture (saves image as a *.BMP file, starting as file - name CAPTUR00.BMP and incrementing by 1 each time F12 is - pressed. - -ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -³ BUILD EDITOR INTRODUCTION: ³ -ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ - -There are 2 modes in the BUILD editor: - 3D EDIT MODE (Same as PLAY MODE but with a mouse cursor) - 2D EDIT MODE (The overhead map of the board with an arrow showing your - position and angle and a mouse cursor) - -It is essential that you use both editor modes: - - Use the 3D EDIT MODE to change the attributes of a sector, wall, or sprite - such as: - - Tile number - Tells which picture in the artwork file goes on the - object. Press V to change. - Shade - The shade of the object. Press -/+ to change. - Repeating - The "smooshiness" of a wall. Also for sprites. Press - keypad 2,4,6,8 to change. - Panning - The starting offset into the tile graphics. Press - Shift + keypad 2,4,6,8 to change. - Height - For ceilings, floors, and sprites. Press PGUP or PGDN - to change. - and there are a few other special attributes. - - Use the 2D EDIT MODE to add, delete, or change the shape of sectors. - - To switch between the two EDIT MODES, press the keypad enter key. - -ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -³ 3D EDIT MODE KEYS: ³ -ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ - ESC = Quit -keypad ENTER = Flip to the 2D overhead editor - - Mouse = Move mouse cursor - Arrows = Move you in the appropriate directions - Caps Lock = There are 3 different Z coordinate modes in BUILD. - Mode 0: Game mode (default) - Mode 1: Height lock mode - Mode 2: Float mode - Press Caps Lock to switch between the 3 modes. - A and Z move up and down for all 3 modes. - - -Note: For the following keys, it is important to move the mouse cursor to -the right position before using them. Also, if you hold down the first mouse -button, then the item under the mouse cursor will be locked as the -highlighted object while the button is held down. This is useful for the -PGUP/DN keys, when different objects come into view even without moving your -coordinates or the mouse cursor. - There are 4 basic types of objects that can be worked with in this part -of the editor: WALLS, CEILINGS, FLOORS, and SPRITES. - - PGUP/DN = Raise or Lower a ceiling or floor. (If a wall is selected, - the ceiling of that sector will move) Also, if you did a - sector highlight in 2D EDIT MODE, you can raise / lower - multiple sectors at a time. -Ctrl-PGUP/DN = For sprites only, puts sprites exactly on the floor or exactly - on the ceiling. - - V = Tile selection - use arrow keys to move around. Press ENTER - to change the object to the highlighted piece of artwork, or - press ESC to cancel without changes made. - ALT-V = Height selection - works just like V, but this selects the - groudraw height map. - -2,4,6,8 (keypad) = Repeat values (smooshiness of the sizes of pixels) - - think of these keys as arrow keys controlling the bottom - right corner of the bitmap. Normally, this is used for walls - and sprites. If you select a floor or ceiling, all the walls - in that sector will be affected. Perhaps this can be used - to make sprites grow and shrink as they get healthy or hurt. -Shift + -2,4,6,8 (keypad) = Panning values (offset into the tile) - These keys are - useful when the you want a long wall to look continuous when - they normally would not look continuous. - / = Use this key to reset the panning values (if you're lost!) - 5 (keypad) = If you hold down this key down in addition to the 2,4,6,8 - keys (keypad),the values will align at multiples of 8. - .> = This key attempts to match up all the tiles along a wall. It - scans along the walls towards the right as long as the picture - number of the next wall is the same as the original picture - number. Note that some walls may not work right, especially - floor / ceiling steps. - - F = Flip an object. For sprites and walls, this flips the object - x-wise. For ceilings and floors, the objects are flipped in - 8 possible ways. Just keep pressing 'F' to go through - the 8 ways. - ALT-F = When you use relative alignment mode on ceiling and floor - textures, you can press Alt-F on the ceiling or floor to - choose a new wall to align to. It actually rotates the walls - of a sector by 1. - O = Wall orientation (whether it starts from the top or bottom) - Normally, walls are oriented from the top. For example, if - you hold down 2/8 on the keypad in 3D EDIT MODE, the wall - always starts from the top. Orientation works differently - for white lines and red lines, so if a wall doesn't look - right, just press 'O' anyway to see if it get fixed. - -COPY & PASTE - TAB = COPY. Copy the attibutes of the highlighted objects into a - temporary place. The attributes it remembers are: - tile, shade, x-repeat, y-repeat, and cstat values. - Left ENTER = PASTE. Paste the stored attributes over the highlighted - object. Whenever you press ENTER, the y-repeat values stay - the same, and the x-repeat values are adjusted so the pixels - of the bitmaps have a square-aspect ratio. -Ctrl+L.ENTER = Left ENTER with the ctrl key will paste the attribtues to - every wall in a loop (if a wall is highlighted). -Shft+L.ENTER = Left ENTER with the shift key also pressed copies the shade - only. -Ctrl+Shft+L.ENTER = Auto-shade a sector. First make any wall of the loop - as light as the lightest shade you want. Then make any other - wall of the loop as dark as the darkest shade you want. - Finally press Ctrl-Shift Enter on the wall that should be - lightest. Now the loop should be smoothly shaded. If it - is not smoothly shaded, you may need to insert more points - on the walls. - -SECTOR FLAGS: - - P = Make the ceiling of the given sector have a Parallaxing sky - or just a normal ceiling. - G = Make the floor of the given sector have a Groudraw - (floor with height mapping). I do not recommend using this - attribute very extensively yet. (See the H key for selecting - the height map) - E = An option for ceilings and floors. If for some reason, you - want a tile to be smooshed into the normal 64*64 area, press - E to unExpand the tile. Press E again, and the tile will be - expanded, so the pixel size is the same as the normal 64*64 - ceiling/floor. - R = Relative alignment - switch between relative alignment mode - and normal mode. Allows floor / ceiling textures to align - to the first 2 points of a sector. Textures will rotate/pan - with moving sectors properly. Notice that bit 6 of both - sector[].ceilingstat and sector[].floorstat are relative - alignment bits. - -WALL FLAGS: - - B = Make an invisible wall, such as a window, block you from - going through. Since the wall is invisible, you can also - highlight the ceiling right above the window or floor - right below the window. You can block either the front or - the back of the window. If you block the back only, you - will be able to go onto the window sill. - T = Press to make a maskable wall 50/50 transluscent. Press T - again to put the masked wall back to normal mode. - M = Make a maskable wall. Press in the same place you press 'B'. - The masking wall takes all its attributes from the front of - the wall, so it must have the same repeat, panning, and cstat - values as the walls above or below it (if you have a step). - The masking picture number is stored in overpicnum. Also, - the masking walls is also automatically added the the other - side of the wall, with the picture flipped. (see the 'F' - key descripte above) - Shift + M = Make a maskable wall just like 'M' described above, but only - on the front side. - - 1 = Make a 1-way wall. - 2 = Some walls have two different sections. One step on the - ceiling and one step on the floor. Normally they always - have the same attributes. It is possible though, to give - both the top and bottom different attributes by pressing 2 on - that wall. 2 simply makes the bottom wall's attributes - separately editable. Press 2 on either the top or bottom - wall. - O = Wall orientation (whether it starts from the top or bottom) - Normally, walls are oriented from the top. For example, if - you hold down 2/8 on the keypad in 3D EDIT MODE, the wall - always starts from the top. Orientation works differently - for white lines and red lines, so if a wall doesn't look - right, just press 'O' anyway to see if it get fixed. - H = Toggle hitscan pass through bit. Default is pass through. - -SPRITE FLAGS: - - B = When the mouse cursor is on a sprite, this makes a sprite - block you from walking through. Also makes the sprite - sensitive to hitscan. Sprites with the 'B' attribute will - appear pink in 2D EDIT MODE - T = Press to make a sprite 50/50 transluscent. Press T again - to put sprite back to normal mode. - -ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -³ 2D EDIT MODE KEYS: ³ -ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ - ESC = Show a menu that says, "(N)ew, (L)oad, (S)ave, (Q)uit" - Press ESC again to cancel the menu. - keypad ENTER = Flip back to the 3D edit mode - - Mouse = Move mouse cursor - Left mouse button = If you hold down the left mouse button, you can drag - existing points. To drag multiple points you can use - the right shift key to first select a rectangular - region of points to highlight, then just drag any of - the highlighted points and the rest move with it. -Right mouse button = Moves the player's positions to the mouse cursor. - This is useful when you accidently get stuck somewhere - in the board, or when you need to edit some part of - a sector that is hard to access. - Right Shift = Select a bunch of points for use with dragging around. - Selects all points inside a box. (Use the left mouse - button to drag) - Ctrl+Right Shift = Select a bunch of points for use with dragging around. - Selects all points on a loop. (Use the left mouse - button to drag) - Right Alt = Select a bunch of sectors for either duplication or - dragging around. (see left mouse button for - dragging and the insert key for duplication). - - Arrows = Move player position in the appropriate directions. - The player will be clipped. To jump to a different part - of the board, use the right mouse button. - Space = Press the space bar when drawing new sectors. There - are several ways of drawing new sectors. The following - three ways of drawing sectors can all be done by only - using the space bar. The computer is smart enough to - decide which method you are using. - - 1. Drawing a FULL LOOP - that is, whenever the new - sector meets the old sector, draw over that line - again. In full loop mode the new sector must not - already be in another sector. The loop is done - when you press the space bar at the first point - again. - 2. SPLITTING a sector - press space bar to draw points - at which you want to split a sector. The computer - knows you are done splitting when you end at - another point that's on the edge of the sector you - are splitting. - 3. Drawing a sector COMPLETELY INSIDE another sector. - (for example, columns) To do this, just press space - bar at every point in the loop. The loop is done - when you press the space bar at the first point - again. - Backspace = When plotting points with the space bar, you can use - backspace to get rid of the last point plotted. You - can press the backspace to get rid of all the points - if you didn't want to start a sector at all. - - Insert = Inserts a new point at the midpoint of the highlighted - line. Then you can drag the point to wherever you like. - (If you insert on a red line, the point will be inserted - on both sides of the sector line.) - If a bunch of sectors are selected (see right ALT) then - instead of inserted points, the selected sector bunch - will be duplicated (stamped). Don't forget to drag - the selected sectors after stamping. - - Delete = Use this to delete sprites (blue circles). To delete - points of a sector border, don't press delete. Instead, - drag the point into one of its 2 neighbor points on the - sector. This is easist done if grid locking is on - (mouse cursor is pink). If 2 neighbor points are equal, - one will automatically be deleted. - Right Ctrl-Delete = This deletes the whole sector that the mouse cursor is - in. Note the right ctrl for protection. - (Note: to delete a point of a sector, just drag that point into the next - point and it will automatically be deleted. You should do this with - grid-locking on) - J = Use to join two neighboring sectors. Press J when mouse - cursor is over the first sector. Then press J again - when the mouse cursor is over the neighboring sector. - The attributes of the combined sector will be taken from - the first sector selected. - ALT-S = When you have a white loop inside a sector, you can - press ALT-S on it (highlight any of its lines) to turn - the whole loop red. - S = Places a sprite at the location under the mouse cursor. - A sprite looks like a blue circle in the overhead map. - - B = Blocks / unblocks you from going through a wall or - sprites. A blocked wall or sprite will appear pink - in 2D EDIT MODE. See the description for 'B' in - the 3D EDIT MODE section for more details. - - C = Turn a line into a circle defined by short line - segments. First press 'C' on a highlighted wall. Then - move the mouse to the right place and press '+' or '-' - if you want to change the number of points on the - circle. Press 'C' again to cancel the circle drawing or - press the Space bar to actually change the map. - +/- = Increase / Decrease the number of points on the circle. - - T = Type in a LO-tag for a sector. Move the mouse cursor to - the inside of a sector that you want to tag first. - ALT-T = Just like 'T' but for walls and sprites. - H = Type in a HI-tag for a sector. Move the mouse cursor to - the inside of a sector that you want to tag first. - ALT-H = Just like 'H' but for walls and sprites. - E = Change a sprite's status list number. - < and > = Changes angle of sprite. Move the mouse cursor to a - sprite first. You can hold down shift with the < and > - to get more precise angles. If you did a sector - highlight, then the selected sector will be rotated - instead. - CTRL-T = Turn tag boxes on/off. - - TAB = Move the mouse cursor to the inside of a sector that you - you want to see the attributes of. It will show them - at the bottom of the status bar. To clear it, press - TAB again at somewhere in the board that is not part - of any sector. This is a useful key for debugging. - ALT-TAB = Works just like TAB, but here, you can see the - attributes of highlighted walls or sprites. For red - lines, the side the mouse cursor is on the line affects - which line is highlighted, since red lines are actually - defined as 2 walls (1 wall for each sector). - - Scroll Lock = Set starting position (brown arrow) to your current - position (white arrow). - - A,Z = Zoom in and out. This is useful for choosing whether - you want to edit finely or not. - G = Change grid resolution. The grid resolution cycles - through this sequence: - (off, 1x, 2x, 4x (default), 8x, 16x) - L = Turns grid locking on or off. If the mouse cursor is - pink then grid locking is on. If it is white then - grid locking is off. There is no grid locking - if the grid is turned off. Also, grid locking will - lock to nearby points. - -ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -³ EDITART KEYS: ³ -ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ - - ---- Keys you will need to know if you want to select from a section of - a 320*200*256 picture file (.BMP and .PCX only) and put it into the BUILD - engine. - - U - Use this to import a section of a 320*200*256 .BMP, .PCX, or .GIF. - ³ Enter - Convert the image that is inside the rectangular selection - ³ rectangle to the BUILD palette. - ³ Space - Convert the image that is inside the rectangular selection - ³ rectangle without remapping the palette. - ³ P - If in the picture selecting screen (after pressing U and loading - ³ the picture), you press P, then the palette of BUILD can be - ÀÄÄ replaced by the palette of the displayed picture. - PGUP/PGDN - Select tile to edit (4096 tile maximum right now). - G - GOTO a tile by typing in the tile number. - S - Re-size tile. The X and Y sizes can be any unsigned short integer. - X ranges from 0 to 1024, and Y ranges from 0 to 240. - Delete - short cut key to set both the X and Y sizes to 0. - +,- Change the animation setting. (Default: NoAnm = 0.) - To change the animation type, press - when the value is 0. - Ex: If you want an object to have 4 tiles of animation, you can - animate it in 4 different sequences: (0 is the current tile) - NoAnm=4 sequence: 0,0,0,0,0,0,0,0,0,0,0,... (no animation) - Oscis=4 sequence: 0,1,2,3,2,1,0,1,2,3,2,... (oscillate) - AnmFD=4 sequence: 0,1,2,3,0,1,2,3,0,1,2,... (forwards) - AnmBK=4 sequence: 0,-1,-2,-3,0,-1,-2,-3,... (backwards) - A - Set the animation speed of the tile. Press + and - to change the - animation speed. There are 16 different animation speeds. The - animation speed set here set the speed for BUILD and your GAME also. - (Speed is proportional to (totalclock>>animspeed)) - ~' - This key (located just above the TAB key) allows you to center a - sprite. Simply use the arrow keys to get to the desired position. - N - Name a tile. Naming a tile simply changes the #define statement in - NAMES.H. You should include NAMES.H when compiling so you can easily - refer to sprites by name rather than by number. - O - Optimize the size of an individual piece of artwork. Use this for - tiles with invisible pixels on the sides. - V - View and select a tile to edit. - ³ Space - To swap 2 tiles simply press space bar on the first tile, - ³ then space bar on the second. - ³ 1,2,3 - To swap a group of tiles, press 1 on the first tile, - ³ press 2 to remember the region between where you pressed - ³ 1 and 2. Press 3 at the place to where you want to swap - ÀÄÄ all the tiles. -ALT+U- Re-grab artwork from original pictures according to the CAPFIL.TXT - file. If you press ALT-U in the main screen, everything will be - re-grabbed. If you press ALT-U in 'V' mode, then you should first - select the range by pressing '1' and '2' on the range boundaries. -ALT+R- Generate a Tile frequency report by scanning all maps in directory. - Use in 'V' mode only. -F12 - Screen capture (saves image as a *.BMP file, starting as file - name CAPTUR00.BMP and incrementing by 1 each time F12 is - pressed. - - ESC - Quit. - - - - ---- Extra features: (if you actually want to do the artwork in EDITART - or if you want to touch-up some imported art.) - - C - Change all pixels on the tile having the same color under the - graphics cursor to to selected color. - Arrows / Mouse - Move graphics cursor. - Shift + Arrows - Select color. (on bottom right corner of screen) - Space - Plot a pixel with the selected color. - T - Turn drawing trail on / off. - Tab - Select the color under the graphics cursor. - BACKSPACE - Set the color to color 255 (transparent color). - F - Floodfill a region with the current color and with the current - color as a boundary. - M,P - Use M to back up a tile into a temporary buffer in memory and P - to restore it. It may be wise to press M before a floodfill (F) - (because sometimes you miss encapsulating the region by 1 pixel, - and the whole picture gets killed, etc...) - J - Randomly plots dots of current color over any pixels having the - same color as the color under the tile cursor. - [ - Random antialias of colors in color band under graphics cursor. - ] - Non-random antialias of colors in color band under graphics cursor. - ; - 3-Dimentionalize an image. Makes colors in different rows of the - color bar either appear to stick out or stick in to the wall. - ' - 3-Dimentionalize the other way. - R - Rotate the tile in a specified direction. - - 1 - Mark the first corner of a rectangle for a copy/paste operation. - 2 - Mark the other corner of a rectangle for a copy/paste operation. - 3 - Paste the selected rectangle (Note: You must press 1 and 2 in that - order first before pressing 3. Pretty simple 1-2-3 for copy&paste) - - 4 - Flip the copied rectangular region x-wise. - 5 - Flip the copied rectangular region y-wise. - 6 - Swap the x and y coordinates of the copied rectangular region. - - ,.<> - Change the shade of the selected region. - \ - Move the cursor to the center or the tile. - | - Get the coordinates of the cursor. - -ÉÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍ» -ÌÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎ͹ -ÌÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎ͹ -ÌÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎ͹ -ÌÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎ͹ -ÌÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎ͹ -ÌÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎ͹ -ÌÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎ͹ -ÌÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎ͹ -ÈÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊͼ - -ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -³ IMPORTANT ENGINE FUNCTIONS: ³ -ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ - -initengine(char vidoption, long xdim, long ydim) - Sets up interrupt vectors for keyboard, and initializes many variables - for the BUILD engine. You should call this once before any other - functions of the BUILD engine are used. - - vidoption can be anywhere from 0-6 - xdim,ydim can be any mode x resolution if vidoption = 0 - xdim,ydim can be any vesa resolution if vidoption = 1 - xdim,ydim must be 320*200 for any other mode. - (see graphics mode selection in my setup program) -uninitengine(); - Restores interrupt vectors for keyboard and timer, and frees - buffers. You should call this once at the end of the program - before quitting to dos. -loadboard(char *filename, long *posx, long *posy, long *posz, short *ang, short *cursectnum) - Loads the given board file into memory for the BUILD engine. - Returns -1 if file not found. If no extension is given, .MAP will - be appended to the filename. -saveboard(char *filename, long *posx, long *posy, long *posz, short *ang, short *cursectnum) - Saves the given board from memory inro the specified filename. - Returns -1 if unable to save. If no extension is given, .MAP will - be appended to the filename. -loadpics(char *filename); - Loads the given artwork file into memory for the BUILD engine. - Returns -1 if file not found. If no extension is given, .ART will - be appended to the filename. -setgamemode(); - This function sets the video mode to 320*200*256color graphics. - Since BUILD supports several different modes including mode x, - mode 13h, and other special modes, I don't expect you to write - any graphics output functions. (Soon I have all the necessary - functions) If for some reason, you use your own graphics mode, - you must call this function again before using the BUILD drawing - functions. - -drawrooms(long posx, long posy, long posz, short ang, long horiz, short cursectnum) - This function draws the 3D screen to the current drawing page, - which is not yet shown. This way, you can overwrite some things - over the 3D screen such as a gun. Be sure to call the drawmasks() - function soon after you call the drawrooms() function. To view - the screen, use the nextpage() function. The nextpage() function - should always be called sometime after each draw3dscreen() - function. -drawmasks(); - This function draws all the sprites and masked walls to the current - drawing page which is not yet shown. The reason I have the drawing - split up into these 2 routines is so you can animate just the - sprites that are about to be drawn instead of having to animate - all the sprites on the whole board. Drawrooms() prepares these - variables: spritex[], spritey[], spritepicnum[], thesprite[], - and spritesortcnt. Spritesortcnt is the number of sprites about - to be drawn to the page. To change the sprite's picnum, simply - modify the spritepicnum array If you want to change other parts - of the sprite structure, then you can use the thesprite array to - get an index to the actual sprite number. - -engineinput(); - This function allows the engine to adjust your position depending - on the status of the arrow keys, and other control keys. It - handles timing and clipping. -nextpage(); - After a screen is prepared, use this function to view the screen. - -draw2dscreen(long posxe, long posye, short ange, long zoome, - short gride) - Draws the 2d screen - this function is a direct replacement - for the drawrooms() and drawmasks() functions. Be sure - to call either qsetmode640350() or qsetmode640480() - first. When switching back to 3d mode, be sure to call - qsetmode320200(). - IMPORTANT NOTES: - 1. The overwritesprite function should only be called in - 3D mode. If you do this in 2D mode, junk will be - written to the 2D screen and a crash is possible. - 2. When you switch back to 3D mode, you should call the - permanentwritesprite functions to draw the status bar, - or whatever else you have to draw. - 3. You must call the nextpage() function in both 2D and - 3D modes. -qsetmode320200(); - Set to the game mode and load palette (320*200*256) -qsetmode640350(); - Set to the 2D map mode #1 (640*350*16) -qsetmode640480(); - Set to the 2D map mode #2 (640*480*16) - -doanimations(long numtics); - This function animates anything you use setanimation for (like doors). - You should call it for every frame. Pass the number of tics (lockspeed) - as a parameter to it to tell how much everything should animate. - -kenchaintimer(void (__interrupt __far *datimerchainaddress)(), - short dachainpersecond) - This function makes the engine's timerhandler chain to another timer - handler at any specified interrupt rate. This function forces IRQ0 to - point to my engine's timerhandler. Clockspeed and totalclock will - be fixed at counting 120 per second regardless of the chaining interrupt - rate. If you call this function with a NULL pointer, then the engine's - timerhandler will not chain anymore. - - Here's how you should structure your code if you use this function: - - main() - { - initengine(); - - musicon(); //Turn music on after engine - kenchaintimer(yourtimerhandleraddress,yourtimerrate); - //When IRQ0 goes off, it will now go to - //Ken's timer handler. Then, Ken's timer - (main loop) //handler will make yourtimerhandler - //interrupt yourtimerrate times per second - - kenchaintimer(0,0); //Stop chaining BEFORE music handler dies! - musicoff(); - - uninitengine(); - } - -ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -³ OTHER ENGINE FUNCTIONS: ³ -ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ - -overwritesprite (long thex, long they, short tilenum, - signed char shade, char orientation, char dapalnum) - - Use this function to draw any sprites that must be drawn to the screen - for every single frame, such as a gun or a menu system. - - If Bit 0 of orientation = 0: (thex, they) is top-left corner - If Bit 0 of orientation = 1: (thex, they) is middle - If Bit 1 of orientation = 0: no relation to viewing window - If Bit 1 of orientation = 1: scale and clip to viewing window - If Bit 2 of orientation = 0: normal - If Bit 2 of orientation = 1: 50/50 transluscent! - If Bit 3 of orientation = 0: normal - If Bit 3 of orientation = 1: x-flipped - If Bit 4 of orientation = 0: normal - If Bit 4 of orientation = 1: y-flipped - - * If it works at full screen, simply set bit 1 of orientation - to 1, and it should automatically scale properly! - - Use this function to write sprites over the 3d view. For example, - you can make a menu system with this function. Be sure - that you call this function for every single frame after the 3d - view is drawn or else it will be flashed on for only 1 frame. - If you want x and y to be the top left corner, set the orientation - to 0. If you want x and y to be the middle of the sprite, set the - orientation to 1. The reason I included the orienation = 1 option - is so that if you want a sprite centered and the size of the tile - changes, you don't need to recompile and guess where the new top - left corner is. Oh yeah, and I forget to mention that if shade is - greater than 32, than overwritesprite does transluscence. (Try it - out!) This function will clip the sprite to the startumost and - startdmost arrays. Dapalnum refers to a palette lookup list - (normally 0). - -rotatesprite (long sx, long sy, long z, short a, short picnum, - signed char dashade, char dapalnum, char dastat, - long cx1, long cy1, long cx2, long cy2) - (sx, sy) is the center of the sprite to draw defined as - screen coordinates shifted up by 16. - (z) is the zoom. Normal zoom is 65536. - Ex: 131072 is zoomed in 2X and 32768 is zoomed out 2X. - (a) is the angle (0 is straight up) - (picnum) is the tile number - (dashade) is 0 normally but can be any standard shade up to 31 or 63. - (dapalnum) can be from 0-255. - if ((dastat&1) == 0) - no transluscence - if ((dastat&1) != 0) - transluscence - if ((dastat&2) == 0) - don't scale to setview's viewing window - if ((dastat&2) != 0) - scale to setview's viewing window (windowx1,etc.) - if ((dastat&4) == 0) - nuttin' special - if ((dastat&4) != 0) - y-flip image - if ((dastat&8) == 0) - clip to startumost/startdmost - if ((dastat&8) != 0) - don't clip to startumost/startdmost - if ((dastat&16) == 0) - use Editart center as point passed - if ((dastat&16) != 0) - force point passed to be top-left corner - if ((dastat&32) == 0) - nuttin' special - if ((dastat&32) != 0) - use reverse transluscence - if ((dastat&64) == 0) - masked drawing (check 255's) (slower) - if ((dastat&64) != 0) - draw everything (don't check 255's) (faster) - - Note: As a special case, if both ((dastat&2) != 0) and ((dastat&8) != 0) - then rotatesprite will scale to the full screen (0,0,xdim-1,ydim-1) - rather than setview's viewing window. (windowx1,windowy1,etc.) This - case is useful for status bars, etc. - - Ex: rotatesprite(160L<<16,100L<<16,65536,totalclock<<4, - DEMOSIGN,2,50L,50L,270L,150L); - This example will draw the DEMOSIGN tile in the center of the - screen and rotate about once per second. The sprite will only - get drawn inside the rectangle from (50,50) to (270,150) - -permanentwritesprite (long thex, long they, short tilenum, signed char shade, - long cx1, long cy1, long cx2, long cy2, char dapalnum) - - Added permanentwritesprite function for status bars or other - sections of the screen that will not be overwritten by the - engine. The format of this function is like overwritesprite - except that the x and y are always top left corner, no - orientation variable, and no translucence. - The 4 last parameters (cx1, cy1) - (cx2, cy2) define a - rectangular clipping window of where permanentwritesprite - can draw to. Dapalnum refers to a palette lookup list - (normally 0). - -printext(long x, long y, char buffer[42], short tilenum, char invisiblecol); - Use this function to print text anywhere on the screen from a font - that you can create in EDITART. Please see my example font in - TILES.ART to see how I lay out the user-defined font. X ranges - from 0-319. Y ranges from 0-199. The buffer is the string to - print. Tilenum specifies which font to use. Invisiblecol tells - printext what color to draw the transparent pixels. If - invisiblecol is 255 then the transpararent pixels are still - transparent. -printnum(long x, long y, long num, short tilenum, char invisiblecol); - Printnum is a function call that will print a long integer (num) - starting at top left corner x, y. Please look at the documentation - for printext, since internally, printnum simply prepares a buffer - and calls the printext function. - -setvmode(long videomode); - If you look at the top of GAME.C, you will see something like this: - #pragma aux setvmode =\... This is how you do in-line assembler in - WATCOM C. All this function is doing is setting the video mode. -showengineinfo(); - Use this function after setting to text mode to view some statics - about the engine, such as frame rate. -resettiming(); - Resets timing, such as setting totalclock = 0. Also resets other - timers. This is for use with the showengineinfo function above. - -ksqrt(long num); returns (long)square root - A square root function optimized for integers. Use this function - only if you want to. -krand() - This simply returns a random number. You can easily set the random - seed by externing the randomseed variable as a long. This is useful - for keeping the random seed the same on multiple computers when playing - multi-player mode. - -getangle(long xvect,long yvect); returns (short)angle; - Use this function call to determine the angle between two points. - For example, if you want a monster to shoot a bullet towards you, - you would get the bullet's angle this way: - sprite[bullet].ang = getangle(posx-sprite[monst].x,posy-sprite[monst].y); - -lastwall(short point); - Use this function as a reverse function of wall[].point2. In order - to save memory, my walls are only on a single linked list. - -rotatepoint(long xpivot, long ypivot, long x, long y, - short daang, long *x2, long *y2); - This function is a very convenient and fast math helper function. - Rotate points easily with this function without having to juggle your - cosines and sines. Simply pass it: - - Input: 1. Pivot point (xpivot,ypivot) - 2. Original point (x,y) - 3. Angle to rotate (0 = nothing, 512 = 90ø CW, etc.) - Output: 4. Rotated point (*x2,*y2) - -clipmove(long *x, long *y, long *z, short *sectnum, long xvect, long yvect, - long walldist, long ceildist, long flordist, char cliptype) - Moves any object (x, y, z) in any direction at any velocity and will - make sure the object will stay a certain distance from walls (walldist) - Pass the pointers of the starting position (x, y, z). Then - pass the starting position's sector number as a pointer also. - Also these values will be modified accordingly. Pass the - direction and velocity by using a vector (xvect, yvect). - If you don't fully understand these equations, please call me. - xvect = velocity * cos(angle) - yvect = velocity * sin(angle) - Walldist tells how close the object can get to a wall. I use - 128L as my default. If you increase walldist all of a sudden - for a certain object, the object might leak through a wall, so - don't do that! - If cliptype is 0, then the clipping is normal (Use 0 to clip you - and monsters). If the cliptype is 1, then the object is clipped to - the same things that hitscan is clipped to (use 1 for all bullets). - - Clipmove can either return 0 (touched nothing) - 32768+wallnum (wall first touched) - 49152+spritenum (sprite first touched) - -getzrange(long x, long y, long z, short sectnum, - long *ceilz, long *ceilhit, - long *florz, long *florhit, - long walldist, char cliptype) - - Use this in conjunction with clipmove. This function will keep the - player from falling off cliffs when you're too close to the edge. This - function finds the highest and lowest z coordinates that your clipping - BOX can get to. It must search for all sectors (and sprites) that go - into your clipping box. This method is better than using - sector[cursectnum].ceilingz and sector[cursectnum].floorz because this - searches the whole clipping box for objects, not just 1 point. - Pass x, y, z, sector normally. Walldist can be 128. Cliptype can be - 0, 1, or 2. (just like movesprite and clipmove) This function returns - the z extents in ceilz and florz. It will return the object hit in ceilhit - and florhit. - Ceilhit and florhit will also be either: - 16384+sector (sector first touched) or - 49152+spritenum (sprite first touched) - -updatesector(long x, long y, §num); - This function updates the sector number according to the x and y values - passed to it. Be careful when you use this function with sprites because - remember that the sprite's sector number should not be modified directly. - If you want to update a sprite's sector, I recomment using the setsprite - function described below. - -inside(long x, long y, short sectnum); - Tests to see whether the overhead point (x, y) is inside sector (sectnum) - Returns either 0 or 1, where 1 means it is inside, and 0 means it is not. - -copytilepiece(long tilenume1, long sourcex1, long sourcey1, - long xsiz, long ysiz, - long tilenume2, long destx1, long desty1) - - This function simply copies any section of a source tile - to any part of a destination tile. It will automatically - skip transparent pixels. It will wrap-around in the - source but not the destination. If for some reason - the destination tile gets removed from the cache, the - destination tile will be reset to original form. This - is why I had to add this second function: - -allocatepermanenttile(short tilenume, long xsiz, long ysiz) - This function allocates a place on the cache as permanent. - Right now, I reset the cache every time you call this - function so I would recommend calling this function - right after loadpics. - -makepalookup(long palnum, char *remapbuf, - signed char r, signed char g, signed char b, - char dastat) - This function allows different shirt colors for sprites. First prepare - remapbuf, which is a 256 byte buffer of chars which the colors to remap. - Palnum can be anywhere from 1-15. Since 0 is where the normal palette is - stored, it is a bad idea to call this function with palnum=0. - In BUILD.H notice I added a new variable, spritepal[MAXSPRITES]. - Usually the value of this is 0 for the default palette. But if you - change it to the palnum in the code between drawrooms() and drawmasks - then the sprite will be drawn with that remapped palette. The last 3 - parameters are the color that the palette fades to as you get further - away. This color is normally black (0,0,0). White would be (63,63,63). - if ((dastat&1) == 0) then makepalookup will allocate & deallocate - the memory block for use but will not waste the time creating a palookup - table (assuming you will create one yourself) - -copytilepiece(long walnume1, long x1, long y1, long xsiz, long ysiz, - long walnume2, long x2, long y2, char shadeoffs); - Copies section of tile 1 (walnume1) with top-left corner (x1,y1) and - rectangular size (xsiz, ysiz) to top-left corner (x2, y2) of tile 2 - (walnume). You can animate tiles with this function. For example, with - this function, you can make a slot machine like in Ken's Labyrinth or an - electronic sign with text sliding from right to left. - -loadtile(short tilenume); - This function will load the tile, tilenum, into the artwork cache. A - tile is not in the cache if (waloff[tilenum] == -1). If - (waloff[tilenum] >= 0) then it is in the cache, and you don't need to call - this function. - -precache(); - This function will go through the tilenums of all sectors, walls, and - sprites and call loadtile() on them. This function will not cache in some - tiles of animations since their tilenums may not all be in the structures. - -hitscan(long xstart, long ystart, long zstart, short startsectnum, - long vectorx, long vectory, long vectorz, - short *hitsect, short *hitwall, short *hitsprite, - long *hitx, long *hity, long *hitz); - - Pass the starting 3D position: - (xstart, ystart, zstart, startsectnum) - Then pass the 3D angle to shoot (defined as a 3D vector): - (vectorx, vectory, vectorz) - Then set up the return values for the object hit: - (hitsect, hitwall, hitsprite) - and the exact 3D point where the ray hits: - (hitx, hity, hitz) - - How to determine what was hit: - * Hitsect is always equal to the sector that was hit (always >= 0). - - * If the ray hits a sprite then: - hitsect = thesectornumber - hitsprite = thespritenumber - hitwall = -1 - - * If the ray hits a wall then: - hitsect = thesectornumber - hitsprite = -1 - hitwall = thewallnumber - - * If the ray hits the ceiling of a sector then: - hitsect = thesectornumber - hitsprite = -1 - hitwall = -1 - vectorz < 0 - (If vectorz < 0 then you're shooting upward which means - that you couldn't have hit a floor) - - * If the ray hits the floor of a sector then: - hitsect = thesectornumber - hitsprite = -1 - hitwall = -1 - vectorz > 0 - (If vectorz > 0 then you're shooting downard which means - that you couldn't have hit a ceiling) - -neartag(long x, long y, long z, short sectnum, short ang, //Starting position & angle - short *neartagsector, //Returns near sector if sector[].tag != 0 - short *neartagwall, //Returns near wall if wall[].tag != 0 - short *neartagsprite, //Returns near sprite if sprite[].tag != 0 - long *neartaghitdist, //Returns actual distance to object (scale: 1024=largest grid size) - long neartagrange, //Choose maximum distance to scan (scale: 1024=largest grid size) - char tagsearch) //1-lotag only, 2-hitag only, 3-lotag&hitag - Neartag works sort of like hitscan, but is optimized to - scan only close objects and scan only objects with - tags != 0. Neartag is perfect for the first line of your space bar code. - It will tell you what door you want to open or what switch you want to - flip. - -cansee(long x1, long y1, long z1, short sectnum1, - long x2, long y2, long z2, short sectnum2); returns 0 or 1 - This function determines whether or not two 3D points can "see" each - other or not. All you do is pass it the coordinates of a 3D line defined - by two 3D points (with their respective sectors) The function will return - a 1 if the points can see each other or a 0 if there is something blocking - the two points from seeing each other. This is how I determine whether a - monster can see you or not. Try playing DOOM1.DAT to fully enjoy this - great function! - -setanimation(long *animptr, long thegoal, long thevel); - This is a function for your convenience that will animate a long - variable, such as sector[].floorz for platforms, or sector[].ceilingz - for doors. All you do is pass it the long pointer into memory, specifying - which long variable is to be animated; you also pass the goal (long value - to animate towards), and the velocity at which the variable is animated. - Velocity = 128 is a normal speed door. You may also modify the animation - arrays directly if you wish: - - The animation arrays are as follows: - long *animateptr[MAXANIMATES], animategoal[MAXANIMATES]; - long animatevel[MAXANIMATES], animatecnt; - -getanimationgoal(long animptr); - Check to see if a certain variable in memory is already being animated - by the engine. If so, an index into the animation arrays is returned, - else -1 is returned. This is function is useful when you are press - space bar near a door, and it is already animating, you simply want - to reverse its direction. - -dragpoint(short wallnum, long newx, long newy); - This function will drag a point in the exact same way a point is dragged - in 2D EDIT MODE using the left mouse button. Simply pass it which wall - to drag and then pass the new x and y coordinates for that point. - Please use this function because if you don't and try to drag points - yourself, I can guarantee that it won't work as well as mine and you - will get confused. Note: Every wall of course has 2 points. When you - pass a wall number to this function, you are actually passing 1 point, - the left side of the wall (given that you are in the sector of that wall) - Got it? - -nextsectorneighborz(short sectnum, long thez, short topbottom, short direction); - This function searches z-coordinates of neighboring sectors to find the - closest (next) ceiling starting at the given z-coordinate (thez). - For example, if you want to find the goal z-coordinate when opening a - door, you might want the door to stop at the next closest neighboring - ceiling z-coordinate. You can get the z-coordinate this way: - - newz = sector[nextsectorneighborz(sectnum,startz,-1,-1)].ceilingz - - topbottom (3rd parameter) -1 = search ceilings - 1 = search floors - direction (4th parameter) -1 = search upwards - 1 = search downwards - -screencapture(char *filename) - Capture the screen and save it as a .BMP file. I don't know why my - .BMP format isn't compatible with other programs. - -ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -³ SPRITE FUNCTIONS: ³ -ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ - -insertsprite(short sectnum, short statnum); //returns (short)spritenum; - Whenever you insert a sprite, you must pass it the sector - number, and a status number (statnum). The status number can be any - number from 0 to MAXSTATUS-1. Insertsprite works like a memory - allocation function and returns the sprite number. - -deletesprite(short spritenum); - Deletes the sprite. - -changespritesect(short spritenum, short newsectnum); - Changes the sector of sprite (spritenum) to the - newsector (newsectnum). This function may become - internal to the engine in the movesprite function. But - this function is necessary since all the sectors have - their own doubly-linked lists of sprites. - -changespritestat(short spritenum, short newstatnum); - Changes the status of sprite (spritenum) to status - (newstatus). Newstatus can be any number from 0 to MAXSTATUS-1. - You can use this function to put a monster on a list of active sprites - when it first sees you. - -setsprite(short spritenum, long newx, long newy, long newz); - This function simply sets the sprite's position to a specified - coordinate (newx, newy, newz) without any checking to see - whether the position is valid or not. You could directly - modify the sprite[].x, sprite[].y, and sprite[].z values, but - if you use my function, the sprite is guaranteed to be in the - right sector. - -movesprite(short spritenum, long xchange, long ychange, long zchange, - long ceildist, long flordist, char cliptype, long numtics) - This function moves the sprite given by spritenum by the 3 - increments, xchange, ychange, and zchange. If cliptype is 0, then - the clipping is normal (Use 0 to clip you and monsters). If the - cliptype is 1, then the object is clipped to the same things that - hitscan is clipped to (use 1 for all bullets). - Movesprite can either return 0 (touched nothing) - 16384+sectnum (ceiling/floor first touched) - 32768+wallnum (wall first touched) - 49152+spritenum (sprite first touched) - -getspritescreencoord(short spritesortnum, long *scrx, long *scry) - This function returns the actual screen coordinates of a sprite. It - is useful for locking on to a target. Use this function between - drawrooms and drawmasks. Note that spritesortnum is the index into the - spritesortcnt arrays, NOT the normal sprite arrays. Scrx and scry are - actual screen coordinates ranging from 0-319 and 0-199 respectively. - -ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -³ MULTIPLAYER FUNCTIONS (multi.obj) ³ -ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ - - initmultiplayers(char option[4], char option[5], char priority); - Call this right after initengine. Pass option[4] and option[5] - exactly the way I have it written here. (option[4] is the COM1-COM4, - network option and option[5] is the com speed selection option) - Priority can be used to decide who becomes master. Lower is more - towards the master. - - uninitmultiplayers(); - Call this right before uninitengine. - - sendlogon(); - Use this function after everything's initialized, but before you - go into the main game loop. Right after you call sendlogon(), you - should run a loop that will wait until a specified number of players. - Here's some example code: - - sendlogon(); - while (numplayers < waitplayers) - { - getpackets(); - } - screenpeek = myconnectindex; - - Getpackets reserves the packet header range from 200-255. If you - keep calling getpackets after sendlogon, the numplayers variable will - automatically be incremented when other people log on. - - sendlogoff(); - Call this before leaving, before uninitializing the multiplayer - code. - - sendpacket (short otherconnectindex, char *bufptr, short bufleng) - For COM(modem) communications, the otherconnectindex doesn't matter. - For network communcations, you can specify which computer to send - to by setting otherconnectindex to the proper index number. You - can also do a broadcast by setting otherconnectindex to -1. - Also pass the buffer and length parameters. - - short getpacket (short *otherconnectindex, char *bufptr) returns bufleng - When using getpacket, first check the value it returns. - If the value is 0, then the buffer length is 0 which means there - are no packets available. If the buffer length is greater than - 0, then use that value as the length of the buffer. Getpacket also - tells you what computer the message was received from - - (otherconnectindex). - -ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -³ DIGITIZED SOUND FUNCTIONS: ³ -ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ -Note: If you want to write your own digitized sound driver, simply delete - these functions from GAME.C. - -initsb(); - Initializes the digitized sound routines. You need to call this - only once at the beginning of the program. Currently, the - sample rate is 11,025 Hz. - -wsay(char *filename, long freq, char volume); - Play the sound file at the given frequency and volume. If you - set freq = 4096, the sound will play at normal frequency (given - the sound was also recorded at 11025 Hz) To play the sound an - octave higher, for example, set freq = 8192. Volume ranges from - 0 (silent) to 255 (full volume). Ex: wsay("blowup.wav",4096L,255); - -uninitsb(); - Turns the speaker off, so sounds don't continue playing while - your back in DOS. - -ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -³ MUSIC FUNCTIONS: ³ -ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ -Note: If you want to write your own music driver, simply delete these - functions from GAME.C. The BUILD engine uses interrupt vector 0x8 (IRQ0) - and that may complicate things. If you like my music, perhaps I can send - you my MIDI sequencer program (It requires MPU-401, and TSENG-ET4000 SVGA, - but could be standardized if there's enough demand). - -loadmusic(char *filename); - Loads the given song into memory. Be sure INSTS.DAT is in the - current directory. If no extension is given, then .KSM will be - appended to the filename. You should use this function only when - the music is off. -musicon(); - Enable the playing of music. Use this only after loadmusic has - been called. -musicoff(); - Disable the playing of music. Be sure to call this before quitting - to DOS. - -ÉÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍËÍ» -ÌÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎ͹ -ÌÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎ͹ -ÌÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎ͹ -ÌÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎ͹ -ÌÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎ͹ -ÌÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎ͹ -ÌÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎ͹ -ÌÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎÍÎ͹ -ÈÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊÍÊͼ - -ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -³ BUILD Revision History: ³ -ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ -2/6/94 - Added this revision thing. - - Setup program. - - A faster new mode for standard VGAs called chain mode. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/8/94 - Fixed chain mode with groudraws. - - Added sector joining in 2D EDIT MODE - press J on first sector. - Then press J again on sector to join with. Attributes will be - taken from first sector. Possible bugs. - - Improved controls for slower computers. - - Made timer interrupt rate 120/second instead of 240/second. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/9/94 - Started to work on status bar in 2D EDIT MODE. - - Added special optimization for the Western Digitial (Paradise) - chipset just like with TSENG ET4000. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/10/94 - Added a door attribute to sectors. To make a sector a door, - press "D" on the ceiling of the sector in 3D EDIT MODE. For - the door to work, the ceiling of the door sector must be a - tiny bit lower than lowest neighboring ceiling. To open/close - the door, you may press the space bar. Note: Space Bar is also - used for copy and paste in 3D EDIT MODE. You may have to go - into game mode to test out the doors for now. - - Added a wall orientation attribute to walls. This attribute is - used especially in conjunction with doors. So far, you have - been working with walls that are start from the top. For - example, if you hold down 2/8 on the keypad in 3D EDIT MODE, - the wall always starts from the top. But for doors, you - sometimes need walls to start from the bottom. To do this, - press "O" (for orientation) on the wall, and it will now - start from the bottom. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/12/94 - Fixed some bugs for sprites. Sprites don't disappear anymore. - Now you will pick up all sprites when running over them. - Monsters will not stop shooting anymore. - - Made the sound blaster sounds have a 1-sound cache. That is, if - the same sound is to be played several times in a row, it will - only be loaded once. - - Added *.GIF format support to EDITART for 320*200 size images. - - Changed the PASTE key in 3D EDIT MODE from Space bar to Left - Enter because the Space bar conflicted with opening doors. - - Added music as an option in the setup program. To run the music, - you need INSTS.DAT and a song file with a .KSM extension. - - Split the editor from the game. - BUILD is now the map editor - you don't need BUILD.C anymore. - GAME is now the actual game that you will be programming. - I am giving you GAME.C to work with. Its code is simpler - than before because there are no more editing function - calls in it. - - Sprites move in a straight line now until they hit walls. When - they hit walls, they pick a new angle to travel in. - - Remember that tiny little guy with the "Al" on his shirt? - Next time you're in DOOM1.DAT, try shooting him. Then look - at the code in GAME.C. - - In EDITART, when you press, "u", you now select filenames with - the arrow keys and enter rather than having to type in - the exact filename. - - Board maps now have extension .MAP and artwork files now have - extension .ART to help distinguish between the different types - of files. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/22/94 - Fixed small bug with EDITART not loading right when names.h - existed with no names defined. - - You can now edit new boards by typing: - BUILD like "BUILD NEWBOARD" - - Added ALT-S in 2D EDIT Mode to change a whole white loop inside a - sector to a red loop. - - When viewing the tiles (pressing "v") you can now use PGUP/PGDN. - - Added a message bar in 2D EDIT Mode. - - Added TAB and L.ALT-TAB keys to view all the attributes of a - sector, wall, or sprite (see above documentation). - - Debugged and bullet-proofed ALT-S. - - Fixed a bug that doesn't allow you to drag points with number - greater than 1023. (There can actually be 4096 walls and 1024 - sectors, and 4096 sprites currently, an easy thing to increase) - - Changed overwritesprite function paramaters. If you are using it - in your c file, you must change it! Now it looks like this: - - overwritesprite (long x, long y, short tilenum, char shade, - char orientation); - - If orientation = 0: x and y are the top left corner. - If orientation = 1: x and y are the middle (like before). - - Added permanentwritesprite function for status bars or other - sections of the screen that will not be overwritten by the - engine. When using this function, you may want to modify the - STARTUMOST / STARTDMOST arrays. The format of this function is - like overwritesprite except that the x and y are always top - left corner, no orientation variable, and no translucence. - - permanentwritesprite (long x, long y, short tilenum, char shade); - - - Added an attribute to the printext and printnum functions. Please - change these function if you use them in your program. The - current formats are: - - printext(long x, long y, char buffer[42], short tilenum, - char invisiblecol) - printnum(long x, long y, long num, short tilenum, - char invisiblecol); - - Invisiblecol tells printext what color to draw the transparent - pixels. If invisiblecol is 255 then the transpararent pixels are - still transparent. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/26/94 - Completely reprogrammed EDITART. - IMPORTANT: PLEASE RUN CONVART.EXE ON ALL ARTWORK FILES! (If you have not - already). It will convert PICS.ART in the old format to - TILES.ART in the new format, so you may have to do some - renaming when converting artwork and also rename the loadpics - line in your C file. BUILD WILL NOT RUN UNLESS YOU DO THIS! - With the new artwork file, the tiles can now be any size from - 1*1 to 1024*240 and they no longer have to be powers of 2. - This feature allows parallaxing skies that are 1024 pixels wide - to cover all 360ø, or 320 pixel wide status bars. It can also - be used to display 320*200 title screens. - - When pressing 'U' in EDITART, you can now change directories - and the current loading directory will be remembered. - - When pressing 'U' in EDITART, you can press the mouse button to - readjust the size of the tile. - - When pressing 'U' in EDITART, press ENTER for an automatic - palette conversion or press SPACE BAR for no conversion. - - Walls that are Blocked ('B') in BUILD are now shown in pink. - If the wall does not show pink in your board, just press - 'B' twice to permanently fix it. - - Made smooshiness values easier to work with. Hold down 5 on the - keypad with 2/4/6/8 to align the walls to multiples of the - tile that is used. Also, when you do Tab and L.Enter for - Copy&Paste, the y-repeat values stay the same, and the - x-repeat values are adjusted so the pixels of the bitmaps - have a square-aspect ratio. - - Added masked walls. But since they don't quite work perfectly - yet, and they are extremely hard to edit now, so for now, just - enjoy the technologiy in DOOM1.MAP. Don't worry - you'll get - your hands on this soon! - - Fixed the "earthquake" effect on really high walls. The walls - will not move up and down, but the pixel fuzzyness bug is - still in there. - - Put door variables and tile information into BUILD.H for you to - play around with. - - Made walls, ceilings, and floors also work with the animation - attribute in EDITART. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -3/2/94 - Made power of 2 size tiles work with ceilings & floors. - - When using different size ceilings & floors, made an option in - 3D EDIT MODE. If you want a tile to be smooshed into the normal - 64*64 area, press 'E' to unExpand the tile. - - Groudraws now look more cubical than before. (But be careful of - crashing with them for now) - - IMPORTANT: Changed the Board format. If you tried running BUILD - before reading this, and it didn't work, shame on you! You - should always look at the history section of BUILD.TXT first! - Since from now on, I am writing Board/Art converters, I am - giving you CONVMAP.EXE to convert maps. You can type either: - C:\BUILD>convmap house.map - to convert an individual map or: - C:\BUILD>for %i in (*.map) do convmap %i - to convert all the maps in a directory. - - - IMPORTANT: Sprites are now on 2 different sets of doubly-linked - lists. The big advantage of this method is that when sprites - are deleted, there can be holes in the sprite list with - no slow down. Before I used to have linked lists for each - sector pointing to all the sprites in it. Well, I have updated - that and added more linked lists that tell whether sprites - are active or inactive (not a fun thing to progam) But not - to worry, you don't have to deal with changing the linked - lists, thanks to my very easy function calls. YOU WILL - HAVE TO CHANGE YOUR CODE TO SUPPORT THE NEW LINKED LISTS. - You should know how to search through each list. See BUILD.H - for a detailed description of how the linked lists work, and - see the top of this file for description of the new sprite - function calls. - - insertsprite(short sectnum, short statnum); - deletesprite(short spritenum); - changespritesect(short spritenum, short newsectnum); - changespritestat(short spritenum, short newstatnum); - - In your code, you will have to change the following: - firstsprite[spritenum] --> headspritesect[spritenum] - sprite[spritenum].point2 --> nextspritesect[spritenum] - - Also, you should change the part of your main loop that scans - through all the active sprites to look more like this: - - - i = headspritestat[1]; //head of active sprite list - while (i != -1) - { - nexti = nextspritestat[i]; //back up next sprite in case current - //one is deleted. - - //your code goes here (use i as the sprite number) - -spriteisdeletedskip: - i = nexti; //go to next sprite - } - - - - - Added tagging (naming) to any sector, sprite, or wall. That means - you can change a tag in the BUILD editor by pressing T with the - mouse cursor on the highlighted sector. And in GAME.C, you - can access the tag this way: - sector[sectnum].tag; - sprite[spritenum].tag; - wall[wallnum].tag; - Note: All 3 types of tags are long integers, but in BUILD.C - you can only make them short integers. I am planning to - let you use the upper 16 bits of the tag byte as use for - you only. (like permanently unreserved bits) - - Added serial link. But it doesn't work very well yet. You - may have to try going into GAME several times before it works. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -3/15/94 - Fixed maskable walls - now sort out with sprite better. Easier - to edit. Simply press 'M' at a place where a maskable wall - should be (like where you normally press 'B' for blocking) - - Can flip walls, masked walls, and sprites x-wise by pressing - 'F' in 3D EDIT MODE. Also, it is possible to save space in - sprite rotations, by flipping it x-wise by programming one of - the bits in sprite[].cstat. - - A few other minor things, but I forgot what they were. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -3/19/94 - Fixed one of the many crashing bugs. - For Duke Nukem III team: - CITY.MAP will not crash anymore with new version. The - reason it crashed was because in your TILES.ART, you had - either ANMFD:0, ANMBK:0, or OSCI:0. That caused a MOD 0 - in my animation routine. I bullet-proofed that. How about - fixing tiles #34, #112, or #114 in your TILES.ART. - - Wrote divide by zero handler. Now if there is a divide by zero, - BUILD goes back into text mode and fills the screen with - /0/0/0/0/..., then gives a DOS prompt. (In other words, you - don't have to type "MODE CO80" anymore for /0 crashes) - - Optimized routines in assembly for 486's using my great new - Intel 32-bit optimizing techniques book that dad got for me. - - Fixed ALT-S in BUILD so ANY white loop can be converted into a - red loop except for the 1 and only 1 outermost white loop. - - FINALLY! Splitsector bug is fixed! You can now split a very - complicated sector with tons of sectors inside it or with - plenty of sprites. Also sprites will not get deleted - spontaneously with split sector any more. - - Ctrl-Enter in 3D EDIT MODE is like the normal Enter paste key, - but Ctrl-Enter pastes the attributes to an entire loop of - walls (if a wall is highlighted). -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -3/22/94 - Added doors that open left and right. See sector[].tag #9 in the top - of this file for details - also look at my board, NUKELAND.MAP, - in BUILD to see how to make this type of door. - - Increased the number of status lists. You may recall my active / - inactive sprite lists called headspritestat, prevspritestat, - and nextspritestat. Don't worry - you will NOT have to - change any of your code. The only thing I changed is now - you can have 1024 different lists of sprites rather than just - 2 lists if you want to use them. For example, you might want - to run through all the brown monsters on the board. Instead - of putting all different types of monsters on the active - list, it is faster to have a separate list just for brown - monsters. Use your imagination! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -3/31/94 - Fixed some palette problems with EDITART. Now when you press 'P' - in 'U' mode, the palette of all the existing tiles are - converted to the new palette. Also the text colors should - be similar colors on different palettes now. - - Changed bit 0 of sprite[].cstat to the hitscan checking / ignoring - bit. You should set this bit to 1 for monsters, 0 for - bullets, 0 for pick-upable objects like coins, and 1 for - objects like columns. Right now, (Since it's not in the - BUILD editor), you must set these bits in your code right - after you load the board. - - I did not document the neartagsector, neartagwall, and - neartagsprite very well, so if you don't know how to use - them alreay, please read on. These 3 variables are modified - by the engine every time you call draw3dscreen(). These - variables are usually -1. These variables will be >= 0 if - all of these cases are true: - 1. You are looking at a wall, sprite, or sector. - 2. You are close enough to the wall, sprite, or sector - to be able to use the action key with it. - 3. The tag of the wall, sprite, or sector is greater or - equal to 1. - As you can see, neartagsector makes a perfect variable for - detecting whether or not you are opening a door. You can - also use neartagwall for switches on walls. Also, you can - use neartagsprite for sprites that are switches. - - PROGRAMMERS: PLEASE MAKE THESE EASY CODE MODIFICATIONS: - I reversed the way variables are stored in BUILD.H. - Now the variables will be local to the ENGINE and externed - to GAME. Before they were local to GAME and externed to the - engine. All you have to do is this: - 1. You can remove the #define MAIN if you want to. - 2. Delete the externs declarations that I used to have - in the beginning of GAME.C, because I put them in - BUILD.H. I will try not to put externs in the GAME - in the future to save you the time of copying and - pasting code. Here is a list of externs I moved: - - EXTERN short neartagsector, neartagwall, neartagsprite; - EXTERN long *animateptr[MAXANIMATES], animategoal[MAXANIMATES]; - EXTERN long animatevel[MAXANIMATES], animatecnt; - EXTERN short tilesizx[MAXTILES], tilesizy[MAXTILES]; - EXTERN long numtiles, picanm[MAXTILES], waloff[MAXTILES]; - - Added a global parallaxing sky type variable. Now I have 3 - different types of parallaxing skies. Here they are: - - 0 - Totally flat parallaxing sky. - 1 - X-only stretching parallaxing sky (This is what DOOM uses). - 2 - X- and Y- stretching parallaxing sky. (This is what BUILD - uses by default) - A good place to set the parallaxing sky is right after you - call initengine(). - - Added local tile selection to the BUILD editor. This means - that when you press V on a sprite, you will see only the - sprites that are on the level so far. If you want to use - a sprite that is not already used on the current board, press - V again and you will be able to select from the huge list - that you are used to from before. The local tile list will - be sorted according to how much each tile is used on the - current board. Note that the local tile list will be - different depending where the mouse cursor was left when you - pressed V (or H). -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/4/94 - Changed the way ART files work. YOU MUST READ THIS: - There are some two easy things that you must do 2 things before - you can use the new engine: - - 1. Type CONVART1.EXE to convert your ARTWORK to the new - format. (If I forgot to send this file to you, please call - and torture me.) Now, instead of everything being stored - in one huge file, TILES.ART, I am splitting the artwork into - several files each holding 256 tiles in it. This will allow - you to make infinitely large artwork files in EDITART. - - 2. In GAME.C, you must change the line, - loadpics("tiles.art"); - to: - loadpics("tiles000.art"); - All you have to give loadpics is the first filename of your - artwork, and the engine will automatically know how to - modify the 3 digits at the end and load all the artwork - files properly. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/5/94 - Fixed the "fuzzy" pixels on high walls. Now you make walls as - high as skyscrapers, and when you look at it up close, the - pixels will still look like perfect rectangles. Note: This - fix may require you to press 'O' in 3D EDIT MODE to put - your boards back to normal. - - When you pressed ENTER on weird-sized tiles, sometimes in the old - version the pixels would not be square aspect ratio. Now - when you press ENTER, they will be. - - You can now set the starting position in 2D EDIT MODE with the - Scroll Lock key. The starting position will look like a - brown arrow, and your current position will look like a - white arrow. Now you don't have to keep returning to start - when you save your board. - - Added some new things to the structures - guess what this means? - CONVMAP3! THE NEW OBJ'S and BUILD will NOT work until you - run CONVMAP3. (Please call if I forgot to give - you this file) - Notice that I added these things to the structures: - - sectortype: - bit 2 of ceilingstat&floorstat: - 1 = North/South panning, 0 = East/West panning - char ceilingpanning, floorpanning; - walltype: - bit 6 of cstat - 1 = Vertical panning, 0 = Horizontal panning - char panning; - short overpicnum; - spritetype: - char *extra; - - Now an explanation of each: - To the sector structure, I added the capability to pan - the floors and ceilings. Usually ceilingpanning and - floorpanning are set to 0. For example, a good way to make - an earthquake would be to randomly increment or decrement - to panning values. To allow you to pan the ceilings or - floors at any of the standard 90 degree angles, I made - bit 2 of sectortype's ceilingstat/floorstat byte choose - whether the ceilingpanning/floorpanning byte should move - the ceiling/floor North/South or East/West. - To the wall structure, I added panning also. Bit 6 - of cstat and the panning values work in the same as the - ceilings and floors. - To the sprite structure, I added only 1 variable. - The "extra" pointer is intended for your use only, so you - can have the sprite's structure extended if you so desire. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/6/94 - In 2D EDIT MODE, you can now press ESC to get a message in the - message bar that says this: - - (N)ew, (L)oad, (S)ave, (Q)uit - - And it all works too. (Press ESC to cancel) - Loading lets you select the file just like 'U' in EDITART. - - The old version of BUILD had the coordinate system all screwed - up in 2D EDIT MODE. I fixed this. Included with - CONVMAP3.EXE is a conversion utility that will make your - boards have the same orientation as in the older BUILD - editors. If you don't care if the whole map gets rotated - in the 2D editor, then press N. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/7/94 - Changed the way Orientation works ('O' in 3D EDIT MODE) - - Now, when you draw a normal door in BUILD, you do NOT have to - press 'O' everywhere to make the walls of the door move right. - Now, the default is that everything moves right. Here's a - detailed description of how the new orientation works: - - For white lines (no neighboring sector): - - orientation = 0 (default) means picture is aligned with - sector[].ceilingz. - orientation = 1 means picture aligned with sector[].floorz. - - For red lines (has a neighboring sector): - - orientation = 0 (default) means picture is aligned with - either the ceilingz or floorz of the next sector. - orientation = 1 means picture aligned with - sector[].ceilingz. - - Don't worry if you don't understand the detailed description. - Just know that it's better this way. I have included the - proper conversions in CONVMAP3.EXE. - - Added wall&ceiling x-panning keys to the 3D EDIT MODE. Press - the , or . keys to pan a wall or ceiling left or right. You - can hold down the 5 key on the keypad to align at every eighth - panning value. (Just like with 2,4,6,8). - - Made TAB&ENTER in 3D EDIT MODE also copy the CSTAT byte of - the wall's attributes. This means that attributes such as - the block attribute, 1-way wall attribute, orientation, - and x-flipping attribute are also copied & pasted. - - Added a new function, cansee. - - cansee(long x1, long y1, long z1, short sectnum1, - long x2, long y2, long z2, short sectnum2) - - All you do is pass it the coordinates of a 3D line - and the respective sectors of each point of the line. - The function will return a 1 if the points can see each - other or a 0 if there is something blocking the two points - from seeing each other. This is how I determine whether - a monster can see you or not. Try playing DOOM1.DAT with - digitized sound enabled to fully enjoy this great new - function! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/12/94 - Fixed HITSCAN function. Since it works a little differently - and the parameters are different, let me describe how the - new hitscan works: - - hitscan(long xstart, long ystart, long zstart, short startsectnum, - long vectorx, long vectory, long vectorz, - short *hitsect, short *hitwall, short *hitsprite, - long *hitx, long *hity, long *hitz); - - Pass the starting 3D position: - (xstart, ystart, zstart, startsectnum) - Then pass the 3D angle to shoot (defined as a 3D vector): - (vectorx, vectory, vectorz) - Then set up the return values for the object hit: - (hitsect, hitwall, hitsprite) - and the exact 3D point where the ray hits: - (hitx, hity, hitz) - - How to determine what was hit: - * Hitsect is always equal to the sector that was hit - (always >= 0). - - * If the ray hits a sprite then: - hitsect = thesectornumber - hitsprite = thespritenumber - hitwall = -1 - - * If the ray hits a wall then: - hitsect = thesectornumber - hitsprite = -1 - hitwall = thewallnumber - - * If the ray hits the ceiling of a sector then: - hitsect = thesectornumber - hitsprite = -1 - hitwall = -1 - vectorz < 0 - (If vectorz < 0 then you're shooting upward which means - that you couldn't have hit a floor) - - * If the ray hits the floor of a sector then: - hitsect = thesectornumber - hitsprite = -1 - hitwall = -1 - vectorz > 0 - (If vectorz > 0 then you're shooting downard which means - that you couldn't have hit a ceiling) - - - Added a position window to the bottom of the menu in 2D EDIT - MODE. It shows the posx, posy, and ang variables. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/14/94 - Overwritesprite now clips to the startumost / startdmost arrays. - Now the only way to write to the status bar is with - the permanentwritesprite function. - - - ATTENTION PROGRAMMERS! I Split draw3dscreen() into 2 separate - function calls. - - old: draw3dscreen(); //Draws walls, ceilings, floors, p-skies - // groudraws, sprites, and masked walls. - - new: drawrooms(); //Draws walls, ceilings, floors, p-skies - // and groudraws. - drawmasks(); //Draws sprites and masked walls. - - The reason I split draw3dscreen was so you could manipulate only - the sprites that the engine is going to draw to the screen - before the sprites are actually drawn. - - - I think I may have fixed that darn sector line bug! Before, the - bug usually appeared when you were on a (red) sector line where - the ceiling and floor of the sector were very far from each - other. This overflowed some really high positive values into - the negative range and vice versa. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/18/94 - Wall clipping now works much better! (You can still VERY RARELY - sneak through walls, however) - ATTENTION PROGRAMMERS: - MOVESPRITE and CLIPMOVE have been changed. They now look - like this: - - clipmove (long *x, long *y, long *z, short *sectnum, - long xvect, long yvect, long walldist, - char cliptype); - - movesprite(short spritenum, - long xchange, long ychange, long zchange, - long walldist, char cliptype); - - To use the new clipmove: - Pass the pointers of the starting position (x, y, z). Then - pass the starting position's sector number as a pointer also. - Also these values will be modified accordingly. Pass the - direction and velocity by using a vector (xvect, yvect). - If you don't fully understand these equations, please call me. - xvect = velocity * cos(angle) - yvect = velocity * sin(angle) - Walldist tells how close the object can get to a wall. I use - 128L as my default. If you increase walldist all of a sudden - for a certain object, the object might leak through a wall, so - don't do that! - - To use the new movesprite: - Works like before, but you also pass walldist (How close the - sprite can get to a wall) - - - New function for sprites: - setsprite(short spritenum, long newx, long newy, long newz); - - This function simply sets the sprite's position to a specified - coordinate (newx, newy, newz) without any checking to see - whether the position is valid or not. You could directly - modify the sprite[].x, sprite[].y, and sprite[].z values, but - if you use my function, the sprite is guaranteed to be in the - right sector. - - - You can now change the angle in 2D EDIT MODE with the - < and > keys. Move the mouse cursor to a sprite first. - Hold down shift with the < and > to get more precise angles. - - You can now press 'B' on sprites in 3D EDIT MODE. This in effect - is xoring bit 0 of sprite[].cstat, which will not only be - sensitive to hitscan, but will also block you from walking - through the sprite. Sprites with the 'B' attribute will - appear pink in 2D EDIT MODE. - - You can now edit the Hi 16 bits of the tag in 2D EDIT MODE. - Just like T and ALT-T, you press H and ALT-H to edit the high - 16-bits. When a structure's attributes are displayed, the tag - will be displayed as 2 unsigned shorts. The first number - represents the hi 16 bits and the second number represents the - lo 16 bits. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/23/94 - Added 'G' in Editart to GOTO a tile by typing in the tile number. - - Changed the way masking walls work a little bit. Now the - masking walls use the picture wall[].overpicnum rather than - wall[].picnum. - - Made hitscan hit maskable walls. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/24/94 - Made palette.dat support any number of shades up to 64. There - is no change to the palette.dat format. The palette.dat - format is: - - First the palette (768 bytes) Values range from 0-63 - Then the lookup shades (256 * number_of_shades) The - shades are stored in groups of 256 bytes. - - - If you use Mark Dochtermann's palette program, then you can - convert his data files (such as palette.pal and colormap.lmp) - to my palette format, palette.dat, with my great Qbasic - program, PALMP.BAS. To run it, first copy the basic program - into the same directory as the 2 source palette files are in. - Then type: "QBASIC PALMP" and then press SHIFT+F5 (to run it). - - - Added a global variable, HORIZ. Horiz usually equals 100. - Modifying horiz will move the whole screen up / down. I - added 2 keys, +/- in my own game.c to demonstrate this. You - can use this variable for looking up and down if you want. - (Even though this is not "truly" looking up and down, if - you're lucky, you might be able to fake out some people!) - - - New Key in 3D EDIT MODE, the forward slash. Use / with the - tile panning keys (, and .) to flip the horizontal / vertical - orientation bits for walls, ceilings or floors. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/28/94 - NEW BOARD VERSION! You must run CONVMAP4.EXE on all your boards. - Here's what I changed in the structures: - - Sectors: - I got rid of: - char sector[].ceilingpanning, sector[].floorpanning; - sector[].ceilingstat/floorstat bit 2 zeroed out - and added: - char sector[].ceilingxpanning, sector[].ceilingypanning; - char sector[].floorgxpanning, sector[].floorypanning; - - Walls: - - I got rid of: - char wall[].panning; - wall[].cstat bit 6 zeroed out - and added: - char wall[].xpanning; - char wall[].ypanning; - - Sprites: - - I got rid of: - short sprite[].vel; - and added: - short sprite[].xvel; - short sprite[].yvel; - The reason I did this was so sprites could be moved in - different directions than sprite[].ang. Please make - use of both xvel and yvel. Here's the equation I would - use to convert from the old to new. For example: - - old: - sprite[i].vel = 256; - new: - sprite[i].xvel = (sintable[(sprite[i].ang+512)&2047]>>6); - sprite[i].yvel = (sintable[sprite[i].ang&2047]>>6); - - The reason I am shifting the sines right by 6 is becuase - my sintable ranges from -16384 to 16384. Dividing by - 64 gives a maximum range of -256 to 256. - - CONVMAP4.EXE also attempts to convert the masked walls so - overpicnum is the masked wall's picnum. - - - Changed 3D EDIT MODE panning keys: - Since panning is now all 4 directions, I got rid of the - , and . keys and put the keys on the keypad using 2,4,6,8. - Usually 2,4,6,8 are for x- and y-repeats, but if you hold - down either shift key, then they act as x- and y- panning - values. - The / key now resets the panning values to 0. - - - Please read the updated descriptions of how to make masking walls - in the 3D EDIT MODE KEYS in the top of build.txt. See - the 'M' and 'Shift + M' keys. - - - Also look at the top of this file for a description of dragpoint(), a - great new function that makes it easy to morph sectors. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/29/94 - Added some minor keys to 3D EDIT MODE. Alt. +/- change the - visibility variable. It ranges from 5 (darkest) to 17 - (lightest) and it starts at 13. - - - Made 1-way walls have more options. Now, for example, you can - make rectangular switches on walls. Please look at my - nukeland.map for an example of how to do switches. (The - switches are close to start - just go through the door and - bear left.) - - - For those who asked, here's how some sample bobbing code: - First, calculate the distance actually moved - because if you - are not moving then you shouldn't bob: - - CODE: - oposx = posx; oposy = posy; - clipmove(&posx,&posy,&posz,&cursectnum,xvect,yvect,128L); - dist = ksqrt((posx-oposx)*(posx-oposx)+(posy-oposy)*(posy-oposy)); - - Then modify the horizon value by multiplying the distance - actually moved by a sine wave. (default is horiz = 100). - - CODE: - horiz = 100 + ((dist*sintable[(totalclock<<5)&2047])>>19); - - - Remember that moving block in the slime in NUKELAND.MAP? It - works a lot better now. I am now modifying the floor panning - values to make the floor match up correctly with the block. - - - Fixed the screen capturing (F12) to save captures as PCX files. - This is for BUILD, GAME, and EDITART. - - - Fixed bug in EDITART when you press 'U' on a blank tile. It - should not crash any more. - - - Made Tab & Enter a little smarter in copying the right attributes - to different types of objects. - - - Added ceiling / floor 90ø rotation attributes. All 8 - rotations are possible. 3 bits have been added to both - the sector[].ceilingstat and sector[].floorstat flags. - If you look in BUILD.H, you will see the new flags - descriptions. You can use the 'F' key in 3D EDIT MODE on - a ceiling or floor to change the rotation. - -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/30/94 - ATTENTION PROGRAMMERS: - I removed the function, getsector, and added a more expandable - function, updatesector. Also, updatesector is smart enough - to check to see if you are in the same sector OR neighboring - sectors first before going through every single sector. - Getsector used to go though all the sectors every time you - crossed a sector line. - - getsector(); (no arguments, returns nothing - REMOVED) - * used to make sure that CURSECTNUM matched up with - the right sector according to the POSX and POSY values. - updatesector(posx,posy,&cursectnum); - * the new way of writing getsector. You can do a - search&replace on your code. Be careful when you use this - function with sprites because remember that the sprite's - sector number should not be modified directly. For example, - you might want to code it this way: - - tempsectnum = sprite[i].sectnum; - updatesector(sprite[i].x,sprite[i].y,&tempsectnum); - if (tempsectnum != sprite[i].sectnum) - changespritesect(i,tempsectnum); - - Actually, I think the setsprite function is better for - updating a sprite's sector number. - - - Added swinging doors! Look at NUKELAND.MAP in my GAME.EXE for - an example. For swinging doors, I used a new math-helper - function, rotatepoint. - - rotatepoint(long xpivot, long ypivot, - long x, long y, - short deltaang, - long *x2, long *y2); - - Rotatepoint will rotate point(x,y) around point(xpivot,ypivot) - by the deltang value. The resultant point will be s - - - Fixed crashing bug in BUILD when a wall's tile doesn't exist. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/02/94 - I improved the pre-level check on the swinging doors, so now - you can have multiple doors in a sector that open any way. - This is how I do my double swinging doors (demonstrated in - NUKELAND.MAP) - - - I added a revolving door! See NUKELAND.MAP for an example. (The - revolving door is beyond the bouncing platforms in the slime - pit) - - - Fixed bug with joining sectors in 2D EDIT MODE. The sprites - don't get deleted any more. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/04/94 - Optimized the masked walls. - - - Cleaned up the sprite drawing code (and many bugs that that came - along with it.) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/05/94 - Made cylindrical walls with any number of points VERY easy to - make in BUILD. Here's how you do it: Highlight a wall and - press 'C' on it. Then move the mouse to the proper position - to make a nice circle. You can press '+' or '-' to change - the number of points on the circle. Press 'C' again to cancel - or press space bar to actually change the map. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/07/94 - Made a fully-operational subway! Look at subway.map. - - - Made a new type of door - a sliding door where the door doesn't - get "x-smooshed" when it is opened. (See description of - sector tag 16 & wall tag 6) - - - Also note that I my first subroutine in game.c! It is: - operatesector(short dasector) - All the door code is now in this function (with a few - exceptions, such as parts of the swinging doors and revolving - door) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/08/94 - Made EDITART and BUILD support different tile sizes in 'V' mode. - Here are the three possible sizes: - 0. 64*64 - 5*3 grid - views 15 tiles (old default) - 1. 32*32 - 10*6 grid - views 60 tiles (new default) - 2. 16*16 - 20*12 grid - views 240 tiles - Press the '*' and '/' keys in 'V' mode if you want to change - the grid resolution. - - - Added/fixed up a new key in 3D EDIT MODE, the dot key (. or >) - This key attempts to match up all the tiles along a wall. It - scans along the walls towards the right as long as the picture - number of the next wall is the same as the original picture - number. Note that some walls may not work right, especially - floor / ceiling steps. - - - Made 2D EDIT MODE default to this when inserting sprites: - 1. Sprite clipping = on for sprites taller than 32 pixels - 2. Sprite clipping = off for sprites shorter than 32 pixels. - - - Fixed sprite clipping with Z-coordinates -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/10/94 - Fixed some sprite dragging bugs - - - Made neartag? maximum sensing distance a global variable called - neartagdist. See build.h. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/11/94 - Added sector / groups of sectors selection. When selecting - sectors, hold down the right ALT key. It works just like - right shift. You must completely surround any sector you - wish to select. Once selected, you can drag the mess of - sectors with the mouse. This is great for separating sectors - from each other. - - - Added sector duplication. First select a bunch of sectors. Then - press the insert key. (with the select sectors flashing) Then - This duplication is like stamping. So, you must drag - the sector bunch somewhere else after stamping to see your - great accomplishments. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/12/94 - Added group-sector PGUP / PGDN. Here's a neat trick that will - let you move a whole section of a board up / down quickly. - First you select a bunch of sectors with the right ALT key in - 2D mode. Then flip to 3D mode and if you press PGUP / PGDN - on any of the highlighted sectors, the rest of the highlighted - sectors will move also. - - - Added group-sector rotation. Once you do a sector select (right - ALT), you can press the , or . keys to rotate the selected - sectors. Hold down the shift key with the keys to get fine - angle rotation (WARNING: You will get distortion with fine - angle rotation in this version) - - - Added sector count and wall count information at the bottom of - the 2D edit mode status bar. - - - Fixed some stupid bug that you probably wouldn't have found if - you made boards with BUILD for the rest of your life. - - - You can now press 'B' to block / unblock a wall or sprite in - 2D edit mode. - - - Made Ctrl-Shift Enter auto-shade a sector. First make any - wall of the loop as light as the lightest shade you want. - Then make any other wall of the loop as dark as the darkest - shade you want. Finally press Ctrl-Shift Enter on the wall - that should be lightest. Now the loop should be smoothly - shaded. If it is not smoothly shaded, you may need to insert - more points on the walls. - - - Fixed my .PCX format bug. My screen captures now load properly - in Deluxe programs. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/13/94 - Made my serial code in Game.c work better. I fixed the bullet - shooting and made all types of doors work. Unfortunately, you - still may have to run at slower COM speeds. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/14/94 - Fixed deadly bug with sector copy & sprites. - - - Added hitscan sensitivity bit. It is bit 6 (64) of wall[].cstat. - In 3D edit mode, you can press 'H' to toggle the bit. (H used - to be like 'V' for choosing height tile numbers for groudraws - - I change the 'H' key to Alt-V since I don't think anybody was - using it anyway) By default, hitscan CAN go through maskable - walls. If a hitscan is set to not go through a maskable wall, - The wall will appear BRIGHT pink in 2D edit mode. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/15/94 - Made more subroutines in game.c and moved documentation from the - end of game.c into this text file. Added some more comments - also. Game.c is so much easier to read now! The main loop is - less than 50 lines long! - - - Made some optimizations to my serial code now that everything - is in functions. - - - ATTENTION PROGRAMMERS: - I added one new paramater (cliptype) to both the movesprite - and clipmove functions. If the new parameter is a 0, then - the clipping is normal (Use 0 to clip you and monsters). - If the new parameter is a 1, then the object is clipped to - the same things that hitscan is clipped to (use 1 for all - bullets). - See the above documentation for a detailed description of the - parameters. (Remember that I moved the documentation from - GAME.C into the middle BUILD.TXT) - Finally, you can have sprites and bullets going where you - want them to go! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/18/94 - Added support for the Spaceplayer (6-degree of freedom Space ball) - Try out the SETUP program now. - - - Fixed some bugs with the 'E' key in 3D EDIT MODE. As long as both - dimensions of the tile are powers of 2, then the picture should - be visible. It should not be a solid color with a few weird - lines any more. - - - Fixed some bugs with the Z control in 3D EDIT MODE. In normal - operation, BUILD attempts to keep your Z constant even if - you cross sector lines. Then I added a special new mode that - locks your heightofffloor to a certain value. You Z will - change instantly if you cross sector lines. To use this mode, - press the Caps Lock key. Press Caps Lock key again for normal - operation. - - - ATTENTION PROGRAMMERS! I put all of engineinput into GAME.C - This means you have absolutely total control of the Z's. (The - only thing left is some key code I still have in my timer - handler) - - OK, now read carefully! Here's how to convert to the new OBJ's: - - 1. First of all, the Spaceball code is now also in game.c. - A. You will need to put this line in game.c: - include "spw_int.h" - B. And make sure to add spwint.obj your makefile. - 2. Heightoffceiling, heightofffloor, and gravity have been - removed from BUILD.H. If you still want to use them - then you should defined them as globals in your own code. - 3. You should go through every single key of my gameinput() - function in game.c and copy any code you want. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/23/94 - GREAT NEW STUFF! - - Be sure to check out GAME.EXE and try out these new keys! - - Rt. Enter = Switch between 3D / 2D modes - Lt. +/- = Zoom in 2D mode - - Added 2D map display with auto-mapping! The 2D maps use a - higher resolution 16-color mode. You have a choice of either - using a 640*350*16 screen or a 640*480*16 screen with a 144-high - status bar (remember that 640*480*16 cannot fit in 256K with 2 - screen pages so I have to cheat with a status bar). - - NEW FUNCTIONS: - - draw2dscreen(long posxe, long posye, short ange, long zoome, - short gride) - Draws the 2d screen - this function is a direct replacement - for the drawrooms() and drawmasks() functions. Be sure - to call either qsetmode640350() or qsetmode640480() - first. When switching back to 3d mode, be sure to call - qsetmode320200(). - - IMPORTANT NOTES: - 1. The overwritesprite function should only be called in - 3D mode. If you do this in 2D mode, junk will be - written to the 2D screen and a crash is possible. - 2. When you switch back to 3D mode, you should call the - permanentwritesprite functions to draw the status bar, - or whatever else you have to draw. - 3. You must call the nextpage() function in both 2D and - 3D modes. - - qsetmode320200(); - Set to the game mode and load palette (320*200*256) - qsetmode640350(); - Set to the 2D map mode #1 (640*350*16) - qsetmode640480(); - Set to the 2D map mode #2 (640*480*16) - - NEW VARIABLES (see description in build.h): - - EXTERN char show2dwall[MAXWALLS>>3]; - EXTERN char show2dsprite[MAXSPRITES>>3]; - EXTERN char automapping; - - - Added parallaxing floors! Works like the parallaxing skies, but - the other side. In 3D EDIT MODE, press P on ceiling for - parallaxing sky, or press P on floor for parallaxing floor. - -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/24/94 - There is a new function that I forgot to document in the last - version. Oops! - - doanimations() is this function. - It's not really new, but I split it off of the - drawrooms/drawmasks functions. This function animates anything - that you use setanimation with. Please stick it in your code - somewhere after you draw the screen. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/26/94 - You can now do TRANSLUSCENT sprites! I am using bit 1 of - sprite[].cstat to detemine whether or not the sprite is - transluscent or not. In 3D EDIT MODE, you can press 'T' to - toggle the transluscence bit. - IMPORTANT: Transluscence WILL NOT WORK until you run my - TRANSPAL.EXE program. On the command line, simply type: - C:\BUILD>transpal [filename] - If you do not specify a filename, the default will be - palette.dat. If your palette.dat file is now around 40K long, - then you are ready for transluscence! - - - Added TRANSLUSCENCE to masked walls. See bit 7 of wall[].cstat. - Press 'T' on wall to toggle the transluscence bit. - - - In this BUILD update, I have collected many different palettes - for comparison purposes. Try running TRANSPAL.EXE on each of - them and see for yourself which palettes work the best with - transluscence! - -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/29/94 - ATTENTION PROGRAMMERS: I completely rewrote the neartag code. - Here's what you have to do to convert your game.c files: - - 1. You should move the neartag variables that I used to - have in BUILD.H into your C code. - 2. You must call the neartag function yourself if you want - to see if you're near a tagged object. Neartag is NOT - automatically updated by the engine any more. - 3. I highly recommend that you put your neartag function - call at the first line in your space bar code. This way, - you can optimize the neartag calculations by only doing - them when you press the space bar. (Exception: For - ladders, I think you'll have to call neartag every single - frame) - - Here's a description of the new neartag function: - Neartag works sort of like hitscan, but is optimized to - scan only close objects and scan only objects with - tags != 0. - - neartag(long x, long y, long z, short sectnum, short ang, //Starting position & angle - short *neartagsector, //Returns near sector if sector[].tag != 0 - short *neartagwall, //Returns near wall if wall[].tag != 0 - short *neartagsprite, //Returns near sprite if sprite[].tag != 0 - long *neartaghitdist, //Returns actual distance to object (scale: 1024=largest grid size) - long neartagrange) //Choose maximum distance to scan (scale: 1024=largest grid size) - -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/31/94 - Added a function to get a sprite's screen coordinates. I put - some sample code in my GAME in the analyzesprites function. - Simply hold down the CAPS LOCK key in my GAME.EXE, and the - screen will be centered around the sprite closest to the - center of the screen. - - Here's a new function in the engine I used to do this: - - getspritescreencoord(short spritesortnum, long *scrx, long *scry) - - Note that spritesortnum is the index into the spritesortcnt - arrays, NOT the normal sprite arrays. Scrx and scry are actual - screen coordinates ranging from 0-319 and 0-199 respectively. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/6/94 - Made EDITART support sprite centering and animation speed. - - Now when you press 'A' in EDITART, the animation speed is - actually saved to disk and runs the same speed in BUILD - and your GAME. Press + and - to change the animation speed. - There are 16 different animation speeds. - (Speed is proportional to (totalclock>>animspeed)) - - To center a sprite, press the weird ~` key (located just above - the TAB key). You will see some cross hairs. Simply use - the arrow keys to the desired position. - - For both the 'A' and ~` keys, you can press Enter to accept - the new values or ESC to cancel. - - - Added a variable to BUILD.H, lockclock. Lockclock is to - totalclock as lockspeed is to clockspeed. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/7/94 - Made 3 different Z coordinate modes in BUILD. - - Mode 0: Game mode (default) - Mode 1: Height lock mode - Mode 2: Float mode - - Press Caps Lock to switch between the 3 modes. - A and Z move up and down for all 3 modes. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/10/94 - Added a new function that should solve all your sound problems. - - kenchaintimer(void (__interrupt __far *datimerchainaddress)(), - short dachainpersecond) - - Please look at the IMPORTANT ENGINE FUNCTIONS section above for - a full description. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/20/94 - Got rid of the comsend / comgetchar functions. Replaced them - with sendpacket and getpacket. - - - Added network support. - - - Got rid of qsetmode320200(). Just replace it with setgamemode(). - The 2 are exactly the same. - - - Got rid of clockspeed variables. Just replace it with lockspeed. - - - Adjusted my z directions of shooting depending on the horizon. - You may want to readjust your code for this. - - - You now pass the number of tics as a long to doanimations. - doanimations(long numtics); - - - FIXED DEADLY BUG! This may have been causing bigtime crash-city - bugs! The problem was with show2dsprite and show2dwall. In - my engine.c I forgot that they were BIT arrays, not BYTE arrays. - When I initialized the arrays to 0, I initialized 8 times the - length, possibly overwriting your precious data! I initialize - these arrays in the initengine and loadboard functions. - - - ATTENTION PROGRAMMERS: In order to get rid of the posx, posy, - posz, ang, posz, and horiz variables from BUILD.H, I added some - parameters to a few functions. YOU MUST REWRITE YOUR CODE - TO SUPPORT THESE: - loadboard(char *filename, long *posx, long *posy, long *posz, - short *ang, short *cursectnum) - saveboard(char *filename, long *posx, long *posy, long *posz, - short *ang, short *cursectnum) - drawrooms(long posx, long posy, long posz, - short ang, long horiz, short *cursectnum) - - THESE VARIABLES SHOULD BE MOVED INTO GAME.C: - long posx, posy, posz, horiz; - short ang, cursectnum; - long hvel; -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/22/94 - ATTENTION PROGRAMMERS: Added 1 parameter to movesprite, the - number of tics (such as lockspeed). - - movesprite(short spritenum, long xchange, long ychange, - long zchange, long walldist, - char cliptype, long numtics) - - - ATTENTION PROGRAMMERS: At one time, I used to have 4 timing - variable in the engine. (totalclock, clockspeed, - lockclock, lockspeed). I got rid of all of them except - totalclock. If you want to use the other 3 variables, you - must simulate them yourself. Here's how you do it: - - Step 1. Define clockspeed, lockclock, and lockspeed as global - longs in your code. - - Step 2. Be sure to zero out all 3 variables just before - starting to play each level. (You could zero out - totalclock also.) - - Step 3. Right after every time you call the nextpage() - function, insert this code line for line: - - lockspeed = totalclock-lockclock; - lockclock += lockspeed; - clockspeed = lockspeed; - - You really don't need clockspeed if you have lockspeed. - You should replace all clockspeed's with lockspeed's. - Before, I had both because both totalclock and clockspeed used - to be incremented in the timer handler and could be changed - at any time. - - - I added my own optional random function, krand() which returns - a pseudo-random number as a long from 0 to 65535. Notice that - I put a randomseed variable in BUILD.H called randomseed. - -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/24/94 - I just want to try to explain how all of my multiplayer code - works. Theory: Think of the whole program as 2 functions: - - Function 1. Draw the screen (could be 2D / 3D) - Function 2. Move things. (sprites, walls, sectors, and you!) - - My communications in GAME.C work on a MASTER/SLAVE - system where it would be nice if the faster computer was the - MASTER. (Right now, the first computer in is the MASTER). - The big trick to keeping everything in sync (and I do mean - everything- even moving platforms, revolving doors, & subways) - is to call function #2 with the exact same parameters as input - on all computers the same number of times and in the same - order. Now this might seem like a lot of information but it - really isn't! Let me explain the role of the MASTER and SLAVE: - - The MASTER's job: - 1. Read in own input changes - 2. Read in any slave player input changes - (getpackets function - reads in foreign vel, svel, - angvel, & the bits) - - 3. Just before calling the movethings function, send the - input to the movethings function: - A. Master's tic cnt (synctics) - B. Every player's velocities (syncvel, svel, angvel) - C. Every player's status bits (Space, Ctrl, Shift, etc.) - 4. Call the movethings function - 5. Draw screen - - The SLAVE's job: - 1. Read in own input changes - 2. Send own input changes to master. - 3. Read in all master movethings input parameters and - call movethings function for each packet. This may - mean calling the movethings function more than once - between calling the drawscreen functions. This is - waste, but it's the price you have to pay to keep - things in sync. - 4. Draw screen - - - You may ask how do monsters stay in sync even if you are - not sending any monster information over the line. The - answer to this is simple. - 1. You make sure that a random seed starts the same on - both computers. - 2. Only call the rand() or krand() function in the - movethings function. - - Before you try my demo, I wanted to say that, I have - ABSOLUTELY NO ERROR CORRECTION in my code at this point. It - is most certainly my next project. For serial link, I would - recommend a rate of about 14400 baud. In the future, I think - I can optimize the code enough to work at rates as low at 2400 - baud! Let me explain how well certain setups should work - without error correction: - Ken's guesses on how badly it will crash WITH NO ERROR - CORRECTION (Build the way it is now): - - 1. Serial link using 8250 chips - out of sync after 15 - seconds because a few bytes were missed. - 2. Serial link using 16550 chips - out of sync after 10 - minutes because 16550 chips have a 16 byte FIFO and - therefore don't lose bytes as often as the 8250. - 3. Modem - out of sync after less than 5 seconds. - 4. Network - out of sync after 1 minute. Networks love to - lose full packets here and there. - - I will be working on error correction for all of the above - situations. Any error correction techniques I use will be - internal to the engine and completely transparent to you (so - you can start coding now!) If the demo actually works multi- - player, then you may want to look at my GAME keys at the top - of this file again. There are some significant changes. - - * I replaced the old COM functions section at the top of - BUILD.TXT with a COMMUNICATIONS FUNCTIONS section. Please - look through it for descriptions of at least these 2 - functions: - - sendpacket(short otherconnectnum, char *bufptr, short bufleng) - getpacket(short *otherconnectnum, char *bufptr) - - * Another rule to keep in mind while testing: (as if there - aren't enough already) Always make sure you have the - same EXE's and MAP'S or else the games will get out of sync. - - * Connection numbers and Index numbers: - For networks, each computer has a given connection number. - Connection numbers range from 1 to 100. Player number 1 - might have connection number 5 and player number 2 might have - connection number 17. Since a player's connection number - can be anything between 1 and 100, I don't want you to - allocate 100 of every variable such as posx[100]. My - solution was to make index numbers. So in this case: - - connectnum[0] = 5; connectindex[5] = 0; - connectnum[1] = 17; connectindex[17] = 1; - - * Now I'll will describe some new variables at the top of GAME.C - - myconnectnum - connection number of your computer - myconnectindex - index number of your computer - masterconnectnum - connection number of the MASTER computer - screenpeek - index number of which player's eyes you are - looking through. - numplayers - if numplayers >= 2 then multiplayer mode is - enabled, else single player game. - - connecthead, connectpoint2[MAXPLAYERS] - These 2 variables - form a linked list of all the index numbers. - Here's some example code that traverses the list of - players: - - p = connecthead; - while (p != -1) - { - printf("Player index %d has connection number %d\n",p,connectnum[p]); - p = connectpoint2[p]; - } - - * These variables are used to record / playback a demo. (This - is like POSCAPT.DAT, but with everything in sync!) In my - GAME, i single player mode, I have it so if you press the - Left ENTER, then it will playback everything. These are - the only variables necessary to store a demo run: - - static long reccnt; //Number of frames - static short recsyncvel[16384]; //Vel for each frame - static short recsyncsvel[16384]; //Svel for each frame - static short recsyncangvel[16384]; //Angvel for each frame - static short recsyncbits[16384]; //Bits for each frame - static short recsynctics[16384]; //Tics for each frame - - * These variables are used for communications syncing: - - static short syncvel[MAXPLAYERS+1]; //Vel of each player - static short syncsvel[MAXPLAYERS+1]; //Svel of each player - static short syncangvel[MAXPLAYERS+1]; //Angvel of each player - static short syncbits[MAXPLAYERS+1]; //Bits for each player - static short synctics; //Number of tics of MASTER ONLY - - * Unless I suddenly make BUILD a 6-degree of freedom engine - tomorrow, this should be the most difficult update in a long - time! Good Luck in programming! I'm sure I left a lot of - things out, so I'll be expecting plenty of phone calls! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/27/94 - I scaled the vel, svel and angvel variabile down 1 bit so they - fit into a signed char. (Before they ranged from -256 to 256) - Now they range from (-128 to 127). -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/28/94 - Optimized the size of my COM(modem)/network packets in game.c. - I made the tics into a char. I also use some new buffers called - osyncvel, osyncsvel, osyncangvel, and osyncbits. Now I send - extra byte with bit fields that tell whether I need to update - the syncvel, syncsvel, syncangvel, or syncbits variables. If - the bit field of the extra byte is off then I don't send the - byte(s) it represents. You can now play my GAME at 4800 baud. - - static signed char syncvel[MAXPLAYERS+1], osyncvel[MAXPLAYERS+1]; - static signed char syncsvel[MAXPLAYERS+1], osyncsvel[MAXPLAYERS+1]; - static signed char syncangvel[MAXPLAYERS+1], osyncangvel[MAXPLAYERS+1]; - static short syncbits[MAXPLAYERS+1], osyncbits[MAXPLAYERS+1]; - static unsigned char synctics; - - - There was an crashing error with transluscence palette on low - memory configurations. When you exit the BUILD editor, - you normally get some numbers like this. - Memory status: 788979(788979) bytes - If the first number (art memory cache size) was less than the - second number (art file size), then the whole art file did - not fit in memory. The reason for the crashing was because - loadpics() sucks all memory up to the size of the art file. - The 64K transluscent palette is malloc'd when you call the - setgamemode() function for the first time. The was no memory - left to allocate the palette. I fixed this by making the - transluscent palette take 64K of the art memory cache if - it could not malloc the 64K. - - - I programmed some error correction for the COM(modem). Here is - my new of Ken's guesses on how badly it will crash (assuming - that it will always crash eventually.) You will be seeing new - and better correction methods in the future. - - ERROR CORRECTION METHOD #1: - 1. Serial link using 8250 chips - out of sync after 5 minutes. - 2. Serial link using 16550 chips - out of sync after 10 minutes. - 3. Modem - out of sync after 3 minutes - try it! - 4. Network - out of sync after 1 minute. Networks love to - lose full packets here and there. (not changed) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/29/94 - Added some code to my GAME.C that will let you type in messages - and send them to all remote players. Press Tab (or T for - those people who play that other, very bad, game too much) - to start typing in a message. Press either Enter key to send - the message to the other player. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/30/94 - ATTENTION PROGRAMMERS: I changed the values that clipmove and - movesprite return! Here's how they work now: - If you did not hit anything, then they return 0. - Movesprite only: If the object hits a ceiling / floor - then movesprite returns 16384+(sectornum hit). - If the first object you hit before sliding was a wall, - then they return the 32768+(wallnum hit). - If the first object you hit before sliding was a sprite, - then they return the 49152+(spritenum hit). - - Be careful when adding these changes to your code since the - return value are sort of reversed: - - return values: º Hit nothing: ³ Hit something: - ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ - Old functions: º 1 ³ 0 - ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ- - º ³ 16384+sectnum (Movesprite only) - New functions: º 0 ³ or 32768+wallnum - º ³ or 49152+spritenum - -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/1/94 - Made getangle always return an angle from 0 to 2047. Before I - forgot to and it 2047 and sometimes the angle was negative. - - - Made overwritesprite when using the centering option be sensitive - to the Editart centering tool. (The ~` key.) - - - Made Ctrl+Rt.Shift highlight points on a loop rather than points - inside a rectangle. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/2/94 - Added some neat features to my GAME.C to make multi-player mode - even more fun. I added a portable bowling ball/bomb-thrower. - kills instantly! (similar to rocket launcher) I also added - water fountains. If you hold the space bar down on them, - you slowly get more life. - - - O.K. I think I actually got the syncronization working perfectly - for COM(modem) play. I haven't had all day to test it out yet! - (Still no error correction with networks) - - Here are some steps in playing over the modem: - 1. Be sure that both people have the exact same version of - the EXEs, ART, and MAPs. - 2. Then go into SETUP and set the COM port to the com port - of your modem. Even though 9600 baud should work, I - would recommend going at 4800 baud because: - A. It works fine at 4800 baud so there is really - no need to go any faster. - B. Fewer errors over the modem so less time - spent re-sending packets. - 3. Then type: MODEM [mapname] (must be same mapname!) - This will bring you into my terminal program. You can - set the modem initialization string in MODEM.BAT by - changing the first command line option of the TERM - line. Please disable modem compression and - correction for least jerky play. Then connect with - the other modem using various methods, such as one - person typing ATA and the other typing ATD or one - person typing ATS0=1 and the other typing - ATDT(phone #). - 4. Wait through the beeps and buzzes until it says CONNECT - on the bottom window. - 5. If you can now chat with each other then things are - going well. When the first person presses ESC, both - computers will automatically quit to DOS and go right - into the GAME. - 6. Play! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/5/94 - Serial moder over COM(modem) should work perfectly now. - - - Added scaredfallz to BUILD.H. It is a global variable that - tells monsters what height is too high to fall through. You - can set cliptype parameter to 2 for movesprite and clipmove. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/6/94 - Fixed clipping bug that used to let you go through certain concave - corners. - - - Added new function which works well with clipmove. Ever notice - was when you're at the edge of a cliff and you go just a tiny - bit over, you fall, but shouldn't yet? Unlike what you have - been doing, this new function finds the highest and lowest z - coordinates that your clipping BOX can get to. It must search - for all sectors (and sprites) that go into your clipping box. - Currently, you were searching the z's at the center point only - by simply using the sector[].ceilingz and sector[].floorz - variables. - - getzrange(long x, long y, long z, short sectnum, - long *ceilz, long *florz, - long walldist, char cliptype) - - Pass x, y, z, sector normally. Walldist can be 128. Cliptype - can be 0, 1, or 2. (just like movesprite and clipmove) - This function returnes the 2 z maxes in ceilz and florz. - See GAME.C for an example. - - - Fixed bug with weird vertical lines in transluscent masked walls - in chain mode. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/10/94 - Made screen capture (F12) work in 2D modes also. It always - saves to a 256 color PCX file. - - - Made screen re-sizeable. Use this easy new function to re-size - the screen: - - setview(long scrx1, long scry1, long scrx2, long scry2); - - It is TOO easy to use. You simply pass is the Upper-left hand - corner and the bottom-right corner in screen coordinates of the - rectangular region you want the engine to draw to. The engine - automatically centers the horizon at the middle of the window and - scales everything properly. - - Notes: - - Since the engine does extra scaling calculations for - window sizes that are not 320 pixels wide, I do not - recommend making the default mode with a window size - just under 320 pixels wide since the engine can - actually run a little slower. (such as 312-319 - pixels wide) Keep them 320 wide. - - Feel free to modify the startumost / startdmost arrays - AFTER a setview call if you want weird window shapes. - Keep in mind that startumost[0] and startdmost[0] are - always refer to the left edge of the viewing window. - (NOT left edge of screen.) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/19/94 - Finally got around to writing the number-of-tiles-per-file - resizer. Simply type rsizeart. All instructions will be - displayed when running the program before the actual - conversion. - - - Fixed a few bugs in Editart. I hope I fixed those evil bugs that - rarely come by. I'm pretty sure I fixed the bug that made the - screen go blank in 'V' mode, and the bug where a few pixels - in the top left corners of tiles sometimes get overwritten. - - - Added a key in Build 2D edit mode. Press 'E' on a sprite to - change its status list number. - - - Fixed those lousy Editart subdirectory colors in 'U' for those - teams with great color palettes, but don't have my ugly shade - of pink. - - - Fixed bug with non-200 high P-skies. The p-skies are now (by - default) centered on the horizon no matter what the height is. - - - Added multiple size PCX and GIF support in Editart. You can now - load pictures up to 1024*256. (That's all that can fit in VGA - video memory) If you need to load a bigger picture than that, - it will be chopped off at the bottom, but will still load the - top piece. - - - I know that I have introduced some wonderful new bugs with the - sprite drawing. I know why they're happening, but I am - looking for a good solution so as to not make you change - any code. I will put another upload with these bugs fixed - soon. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/20/94 - Added TRUE ornamented walls. Right now the actual ornamentation - must be programmed by you with 2 simple functions: - - copytilepiece(long tilenume1, long sourcex1, long sourcey1, - long xsiz, long ysiz, - long tilenume2, long destx1, long desty1) - - * This function simply copies any section of a source tile - to any part of a destination tile. It will automatically - skip transparent pixels. It will wrap-around in the - source but not the destination. If for some reason - the destination tile gets removed from the cache, the - destination tile will be reset to original form. This - is why I had to add this second function: - - allocatepermanenttile(short tilenume, long xsiz, long ysiz) - - * This function allocates a place on the cache as permanent. - Right now, I reset the cache every time you call this - function so I would recommend calling this function - right after loadpics. - - I have an example of both of these functions in GAME.C. Try - playing GAME DOOM1.MAP and go into the secret room with - the pictures of Ken. Shoot some walls there. The pictures - with Ken and the Explosion over it were done with - copytilepiece and allocated permanently at tile 4095. A - good idea for allocating permanent tiles would be to start - at 4095 and decrement. You can also allocate a permanent - tile over the original tile itself. - - - Tile panning matching keys work a lot better. They now work - well with bottom steps. Also, it works well with matching - up windows. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/25/94 - A week ago, I uploaded a version of BUILD which unfortunately - had more bugs than the previous version. This upload should - have those bugs fixed - especially the sprite bugs. (I hope) - - - I think I may actually have the sprite feet behind stairs bug - working perfectly. - - - The engine should now be even faster the before last week. (A - week ago, I temporarily changed the parallaxing sky algorithm, - making the engine slower in those areas) - - - Added a variable, parallaxyoffs in BUILD.H. It defaults to 0. - If you set it to 100, then all parallaxing skies will be - properly moved 100 pixels higher. - - - Fixed some weird drawing bug related to parallaxing skies and - sprites. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/26/94 - Made sprite's sectors dependent on the z coordinates in the BUILD - editor. (Helpful if you use overlapping in your maps) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/29/94 - Made precache function. Simply call: - precache() (no parameters) - right after you call loadboard(?,?,...) and it will load - all tiles in the current board into the cache. Note that - animations of sprites after the first one will not be - precached. I have included my precacheing code at the - end of game.c for those interested in making the precaching - fancy. - - - Fixed bug in editart which made it sometimes save the art files - and names.h in the wrong directory (the last directory you - were in when you were in 'U' mode). You may want to search - your artwork directories to see if you were a victim of this - bug. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/30/94 - Made Ctrl-Enter paste parallaxing sky tiles to all neighboring - parallaxing sky areas also. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/31/94 - Fixed (most) crashing bugs - Doesn't even crash on the highest - skyscrapers now! Since I can never be SURE that the crashing - is gone, I need you to test it for me - compare the number - of times it crashes per second since the last version. It - should be much better. - - - Fixed sector line bug! Get close to a step, hold down Shift+Z - and the edges of the step will NOT jitter like before AND you - will not get random walls going through the screen. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/1/94 - Got rid of the OLD transluscent stuff from overwritesprite and - permanentwritesprite. (Before it used the 8K shading table - which didn't work very well) - - - Added new true 50/50 transluscence option to overwritesprite. - See bit 2 in the next comment. - - - Fixed overwritesprite so it works with different screen sizes. - You don't need to do any scaling calculations! Should be - compatible with old function. Added new bit 1 to orientation - parameter to determine whether or not the sprite should be - scaled and clipped to the viewing window. - - overwritesprite (long thex, long they, short tilenum, - signed char shade, char orientation) - - If Bit 0 of orientation = 0: (thex, they) is top-left corner - If Bit 0 of orientation = 1: (thex, they) is middle - If Bit 1 of orientation = 0: no relation to viewing window - If Bit 1 of orientation = 1: scale and clip to viewing window - If Bit 2 of orientation = 0: normal - If Bit 2 of orientation = 1: 50/50 transluscent! - - * If it works at full screen, simply set bit 1 of orientation - to 1, and it should automatically scale properly! - - - Made it so 2/4/6/8 keys in 3D EDIT MODE now only move the objects - 1 step rather than continuously, giving more control over the - repeat/panning values of things. - - - Made the / key not only reset the repeats of walls, but also for - sprites. It will set both repeats of the sprite to the default - size of 64. If you hold down shift with / on a sprite, it - will give the sprite a square aspect ratio by setting the - xrepeat to equal the yrepeat value. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/2/94 - Doubled the board size from: (0 to 65536, 0 to 65536) to - (-65536 to 65536, -65536 to 65536) Notice that the grid in - 2D EDIT MODE is much bigger than before. Since it is very easy - to double the maximum board size, just tell me if you need - a larger board. The only bad thing about allowing larger - boards is that the map designer is more likely to make some - sectors too large and cause overflow bugs. 32 bits can only - go so far you know! - - - I think I MAY have fixed a bug in BUILD that used to make it crash - when quitting. It had something to do with the vertical grid - lines in 2D EDIT MODE when zoomed way in around the upper left - corner of the map (I think). -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/3/94 - Optimized Editart loading and saving. - - - Made 'V' screen in Editart 320*400 instead of 320*200. - - - Before I said I fixed the bug in EDITART where a few pixels in the - top left corners of tiles sometimes got overwritten. Well I - lied. This time I really fixed it. (I hope) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/7/94 - Made x&y repeats, x&y pannings easier to adjust. It now works - like the default keyboard handler. It moves once when you - first press the key. A little later, it starts to move fast. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/11/94 - Added great new sprite rotation function which works like - overwritesprite (like 2DRAW sprites) - - rotatesprite(long sx, long sy, long z, short a, short picnum) - - (sx, sy) is the center of the sprite to draw defined as - screen coordinates shifted up by 16. - (z) is the zoom. Normal size is 65536. - Ex: 131072 is zoomed in 2X and 32768 is zoomed out 2X. - (a) is the angle (0 is straight up) - (picnum) is the tile number - - Ex: rotatesprite(160L<<16,100L<<16,65536,lockclock<<4,DEMOSIGN); - This example will draw the DEMOSIGN tile in the center of the - screen and rotate about once per second. - - Rotatesprite clips to the same area as overwritesprite but does - not scale or do transluscence yet. - - - Please look at the new permanentwritesprite documentation at the - top of this file! - - - Network should now work again - It now works great on my network - with 3 players! It may possibly also work with 4 or 5 players - too, but I didn't feel like running between 2 rooms to test it! - I never thought the day would come when I would get NET, COM, - and MODEM all working respectably! - - - Changed setup program so you can select 2, 3, 4, or 5 players in - a network game. (The 5 is just to annoy people who like that - other lousy game) - - - ATTENTION BUILDERS! Added TILE MOVING to EDITART! For now, it - will only work WITHIN THE SAME ART FILE. Do the tile moving - all in 'V' mode. Here are the new keys in 'V' mode: - - To swap 2 tiles: - Simply press space bar on the first tile, then space - bar on the second. - To swap a group of tiles: - Press 1 on the first tile, press 2 to remember the region - between where you pressed 1 and 2. Press 3 at the - place to where you want to swap all the tiles. - - Don't forget that this is all SWAPPING, tiles will (should) - NOT be overwritten using these keys. - - - ATTENTION PROGRAMMERS! Added ceildist and flordist parameters to - both clipmove and movesprite. I always had them all set to - (4<<8) by default. - - clipmove(long *x, long *y, long *z, short *sectnum, - long xvect, long yvect, - long walldist, long ceildist, long flordist, - char cliptype) - - movesprite(short spritenum, long xchange, long ychange, long zchange, - long walldist, long ceildist, long flordist, - char cliptype, long numtics) - - - Moved some com/network code from the getpackets function in game - into the engine. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/15/94 - Fixed some network initialization code and it now works with 4 - players. (I tested it.) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/16/94 - Added different shirt color support. Here's how you do it: - - allocatespritepalookup(long palnum, char *remapbuf) - - See more documentation of allocatespritepalookup at the top of - this file. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/18/94 - I made it so you can redefine the keys in the setup program under - the input devices menu. - - - ATTENTION EVERYONE - for this new version, you MUST go into my - new SETUP program, and SAVE CHANGES AND QUIT once. The arrow - key code will not work if you don't do this! If you are - one of those people who actually read BUILD.TXT, give yourself - 1 point. I wonder who will get "caught" for not reading this! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/22/94 - Added pixel height and wall length information to 2D EDIT MODE - when you press Tab or Alt-Tab on a sector or wall. - - - Now show the actual number of sprites in 2D EDIT MODE. - - - Improved digitized sound routines. Just thought I'd mention it. - - - Added a "save As" feature to 2D EDIT MODE. - - - Now show all lo and hi tags in 2D EDIT MODE on the map itself! - Note that position of the sector tag's text is put at the - average point of all the points of the sector, so if you have - a weird shape tagged sector, the text might show up at an - inconvenient place. - - - You can turn the tag boxes on or off by pressing CTRL-T or by - zooming out. - - - ATTENTION EVERYONE - for the new BUILD.EXE and OBJ's, you will - need to copy my new TABLES.DAT over your old one. Also, you - must go into SETUP and SAVE&QUIT. I have split the TABLES.DAT - file into 2 separate files. They are: - - TABLES.DAT - 10880 bytes - sin tables, fonts, etc. - SETUP.DAT - 23 bytes - (6 options) + (17 custom keys) - - The SETUP.DAT file is the only file SETUP.EXE accesses now. - This means that from now on, if I want to add something to - TABLES.DAT, you won't have to go into the setup program and reset - the options again. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/24/94 - Relative alignment now fully works with ROTATION! Relative - alignment will allow ceilings and floors to align with the - first 2 points of a sector. This will relieve you of - programming special ceiling and floor panning code for moving - sectors. - In 3D EDIT MODE, simply press 'R' on a ceiling / floor to switch - between relative alignment mode and normal mode. Notice that - bit 6 of both sector[].ceilingstat and sector[].floorstat are - relative alignment bits. - I have an example of relative alignment in nukeland.map in the - high blue room off the main octagonal room. Also note that my - subways and dragsectors now use relative alignment for panning. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/25/94 - I added a new parameter to printext256 and printext16. I need - to document this stuff! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/27/94 - Made it so you can't shrink sprites so much you can't grab them - any more in 3D EDIT MODE. - - - Added (G)oto feature into Build 'V' mode. Simply press G, type - the tile number and it will go there. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/7/94 - Fixed relative alignment bugs I noticed. My subway.map won't - crash anymore and the relatively aligned ceilings and floors - should not pan crazily anymore when looking from a far - distance. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/9/94 - ATTENTION PROGRAMMERS: I added a new parameter to - overwritesprite. Dapalnum can be from 0-15 depending on - what palette lookup table is being used. Dapalnum is normally - 0. Overwritesprite now looks like this: - - overwritesprite (long thex, long they, short tilenum, - signed char shade, char orientation, char dapalnum) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/13/94 - ATTENTION PROGRAMMERS: I changed the last parameter of drawrooms - (sector number) to be passed as a value, NOT a pointer anymore. - - drawrooms(long daposx, long daposy, long daposz, - short daang, long dahoriz, short dacursectnum) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/15/94 - ATTENTION PROGRAMMERS: I took out the COM(modem)/network code - from my engine.obj and put it into a separate .obj called - multi.obj. (I also removed the sound from my engine and stuck - it in kdmeng.obj) Please include it in your makefile. Here is - a list of ALL of the variables and functions you will need to - know to program for multiple players: - - VARIABLES: (You should extern these in your game.c) - extern short numplayers, myconnectindex; - extern short connecthead, connectpoint2[MAXPLAYERS]; - extern long *lastpacket2clock; - - FUNCTIONS: - initmultiplayers(option[4],option[5]); - uninitmultiplayers(); - - sendlogon(); - sendlogoff(); - - sendpacket(connecthead,tempbuf,j); - sendpacket(-1,tempbuf,j); - leng = getpacket(&otherconnectindex,tempbuf); - - Please see detailed descriptions of these functions at the top - of this file. - - - Multiplayer code is now MUCH cleaner! - - - Please try my game on your networks again! My game now works - perfectly with 3 players on a network that used to crash at - the DOS4GW prompt just a week ago! My game needs only IPX, - no server to run. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/16/94 - ATTENTION PROGRAMMERS: CONVMAP5!!! YOU MUST RUN CONVMAP5 ON - ALL OF YOUR MAPS IF YOU WANT THEM TO WORK WITH THE NEW - BUILD.EXE OR OBJ'S! Following are the exact changes I made - to the new map format: - - * Added numextras - * Added sector[].ceilingpal - * Added sector[].floorpal - * Added sector[].visibility - * Split sector[].tag to sector[].lotag and sector[].hitag - * Added sector[].extra - * Expanded wall[].cstat to a short - * Split wall[].tag to wall[].lotag and wall[].hitag - * Added wall[].extra - * Split sprite[].tag to sprite[].lotag and sprite[].hitag - * Got rid of sprite[].extra (the void * mess) - * Added sprite[].extra - - The only thing programmers have to worry about when converting - are the tags. I split them into lo and hi tags. - (See BUILD.H for new structure formats) - - I got rid of the (void *)extra thing from the sprite - structure. I know I may have made some promises it - wouldn't change and it was for your use only, but what - can I say - it's not needed anymore (in other words, - if you're already using it, TOUGH LUCK). I have my - own, new, method for extending sector, wall, or - sprite structures. You will be able to extend any - structure as much as you want AND be able to edit it - all in the BUILD editor to be saved in the permanent - map format. Notice I added a (short)extra to all 3 - main structures. They default to -1. But if they - are >= 0 then they form a linked list out of the - extra structure. NOTE: THIS EXTRA STUFF IS NOT - PROGRAMMED YET! I'm just mentioning it becuase the - new map format has this extendability. I'll try to - get it done soon though. (9/21/94) - Actually just - ignore the fact that this paragraph ever existed. - I'm just keeping it here for history purposes. - - - Renamed my allocatespritepalookup function to makepalookup since - it now also applies to walls, ceilings, floors, p-skies and - masked walls. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/20/94 - Added rotated sprites. These new rotated sprites rotate in the - same way as masked walls. Sounds like a waste since the - engine already has masked walls? NOT AT ALL! With rotated - sprites, you can EASILY do TRUE ornamented walls FULLY inside - the BUILD editor with even MORE versatility than that other - game out there. For example, you can place the ornamentation - anywhere on the wall, with sizing control using 2,4,6,8 on the - keypad, and even ornament with transluscence! In 3D EDIT - MODE, simply press 'R' on a sprite to make it a rotated - sprite (Programmers see bit 4 of sprite[].cstat) - - - Fixed crashing bug with sector (Rt. ALT) copy/paste in 2D EDIT - MODE. - - - You can now copy groups of sectors from 1 map to another! Here's - how you do it: - - Step 1: Capture a bunch of sectors with the Rt. ALT selection - tool. - Step 2: With the sectors still highlighted, you can now load - another map and the highlighted sectors will - automatically be inserted into the new map. (They - will still be highlighted) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/21/94 - Fixed bug with cursectnum not always being right after loading - the board. I now check it and make sure it's right when - saving in BUILD now. - - - Added 'O' key in 2D/3D EDIT MODES. It will push a rotated sprite - backwards (using hitscan) into the first wall and - automatically adjust the angle to make the sprite appear - as if it was part of the wall. - - - You can now press 'S' to insert a sprite in 3D EDIT MODE. Press - 'S' on a ceiling or floor. - - - You can now press delete to delete a sprite in 3D EDIT MODE. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/22/94 - Programmed Nick & Peter's BUILD stub to their EXACT - specifications. See WSTUB.C for code & documentation. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/27/94 - Fixed Rt. Alt block copying nextsector1 pointer bug. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/29/94 - Added special bitmapped effect which I either call lava or - boiling slime. See my initlava and movelava functions - inside GAME.C. - - - I added a bit array call gotpic. The engine will set the - respective gotpic bit for each picnum drawn to the screen, - including ceilings, floors, walls, sprites, masked walls - - even overwritesprites, etc. This array is mainly for - making the game only calculate special bitmapped effects - when that certain picnum is on the screen. - - Note 1: The engine does NOT automatically clear the gotpic - bits for you. If you want to test gotpic for a certain - picnum, you should clear it if you want to test it again. - - Note 2: It is not necessary to use permanentwritesprite - for bitmapped special effects - after all, if you see it, - it MUST be in the cache. - - Added to BUILD.H: - EXTERN char gotpic[MAXTILES>>3]; - - Example code in GAME.C: - if ((gotpic[SLIME>>3]&(1<<(SLIME&7))) > 0) //test bit - { - gotpic[SLIME>>3] &= ~(1<<(SLIME&7)); //clear bit - - if (waloff[SLIME] != -1) //if in cache - movelava((char *)waloff[SLIME]); //calculate! - } - - - Added what some people call gamma correction. I think - brightness is a better description though. - - setbrightness(char brightness); - - Simply call this function where brightness ranges from - 0 to 4. Brightness defaults to 0. Levels 1-4 are all brighter - than 0. If you switch between 2D & 3D modes, the engine will - remember the current brightness level. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/30/94 - Added a few keys to fake a multiplayer game all on 1 computer. - In my game, press Insert to add a new player at the starting - position, and Delete to delete the last player. Press - scroll lock to get control of the other players. In the same - way Lt. Enter lets you view other players, Scroll lock will - let you control other players (single player game only) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/2/94 - Moved all doanimations code from engine into game.c. If you - are using the doanimations code, here's exactly what you - need to do to make it work with your code again: - - Step 1: Copy these 3 functions which you should find at - the end of my Game.c: - - doanimations(long numtics) - getanimationgoal(long animptr) - setanimation(long *animptr, long thegoal, long thevel) - - Step 2: Move these variables out of BUILD.H and into your - game.c: - - #define MAXANIMATES 512 - static long *animateptr[MAXANIMATES], animategoal[MAXANIMATES]; - static long animatevel[MAXANIMATES], animatecnt = 0; - - * If you copied my door code, you will probably have to convert - some parameters to longs. (oops!) - - - Got rid of printnum from the engine. It is an outdated function. - Use either printext256 or printext16 instead. - - - Added y-flipping for both normal and rotated sprites. (see bit - 3 of sprite[].cstat in BUILD.H. - - - Added y-flipping for walls. (see bit 8 of wall[].cstat in - BUILD.H. - - - Fixed bug with initialization of Master and Slave for - COM(Modem) only. If both computers went in at the same - time, it used to sometimes think both were Masters. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/4/94 - Alt-C in 3D EDIT MODE changes all picnums on the whole map - from the picnum in tab to the picnum under the mouse cursor. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/6/94 - Fixed y-flipping bug on walls and masked walls. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/16/94 - Fixed bug in editart that didn't convert the maps right after - swapping tiles. - - - Added excellent function to my multi.obj. - - long getoutputcirclesize(); - This function returns the number of bytes that have not - yet been copied. If there are still more than say, 16 bytes, - then you may be sending too many bytes per second. This can - happen if the frame rate of a computer is faster than the - speed of the serial mode (Ex: Try 2400 baud with a Pentium 90!) - this function will tell you how many bytes are left to copy - In other words, if getoutputcirclesize() < 16 then it is safe - to send a packet. If you already have serial mode working - all you have to do to update your code is to copy the lines - in my sync() function the deal with the getoutputcirclesize - function. Everything else in sync() and getpackets() is - pretty much the same. - - - Programmed some example code in my game that will allow players - to change masters and slaves during the game without losing - sync. Simply press 'M' in my multiplayer game, and that - computer will become the master! It is interesting how - the frame rate and controllability changes. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/31/94 - Added basic scripting to EDITART. Don't expect it to be - everything you ever dreamed of (yet). - - Scripts are saved in a file called CAPFIL.TXT. You can edit the - text file, but be careful not to screw it up too badly (such - as extra commas, spaces in weird places, etc.) since I am - parsing it in EDITART. - - Whenever you select a box in 'U' mode, a line will be appended to - the CAPFIL.TXT file. - - WRITING THE CAPFIL.TXT FILE: - In 'U' mode, you can press 'O' instead of ENTER to select a tile. - What 'O' does that is different from ENTER is that it takes - the center point of the highlighted rectangle, and searches - outward until a total rectangle of transparent pixels (255) - is reached. This is useful for grabbing sprites - not only - will you not have fine adjust to the exact borders of a - sprite now, but when you re-grab from the pcx's you can - change the size of the sprite freely. - - READING THE CAPFIL.TXT FILE: - There are 2 ways to re-grab from the CAPFIL.TXT file. If you - press ALT-U in the main screen, everything will be re-grabbed. - If you press ALT-U in 'V' mode, then you should first select - the range by pressing '1' and '2' on the range boundaries. - - Format of CAPFIL.TXT lines: - Tile #, Full path/file name, x1, y1, xsize, ysize - - Note: If xsize and ysize are 0, then that means you did - an 'O' grab and EDITART will search from point (x1, y1) - when you do a re-grab. - - Example CAPFIL.TXT file: - 31,D:\CAPTUR00.PCX,220,98,64,64 - 110,D:\CAPTUR00.PCX,49,72,0,0 - - The first line says that tile #31 is a 64*64 tile and the - second line says that tile #110 is unknown size tile (grabbed - with the 'O' key) - - Note: You can only do 1 grab per tile with my scripting system. - You may have done your parallaxing skies with several grabs. - If so then try to make the tile into 1 large PCX and do 1 - grab. (The largest grabbing size right now is 1024*256) - - ------------------------------------------------------------------- - - - Made Editart's screen capture (F12) save to PCX's the exact size - of the tile and not include the status bar at the bottom. It - will also save large tiles to large PCX's - Now it's easy and - lossless to extract a tile from Editart! - - - ATTENTION PROGRAMMES! Added 2 new parameters to getzrange for - returning the objects hit on top and bottom. - (sectors / sprites) See my updated documentation at the top - of this file. - - - Fixed clipping bugs with sprites near sector lines. (I hope) - - - Got 3D Red-Blue glasses mode working for all VGA cards. First - set the graphics mode to red-blue mode in the setup program. - The left eye is red and the right eye is blue. There are - 4 keys that let you adjust the 3D view: - [,] = Adjust width between eyes (3D width) - Shift [,] = Adjust width of parallax (2D width) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/1/94 - Guess what? I turned 19 today. Doesn't that just suck. Now, - if you play my build game on my birthday, all the extemely - evil and scary brown monsters will be replaced with super - happy fun dogs that throw smiley red jelly coconuts at you. - Also, my incredibly evil and scary music will be replaced - with super happy music. Actually this whole paragraph is - a joke (except for the birthday part). - - - Made centering work with rotated sprites. - - - Fix centering with x and y flipped sprites. - - - Rotated sprites now get chopped off by the ceiling or floor in - the same way normal sprites get chopped. Sprites do not get - chopped if there is a parallaxing sky / floor. - - - Made Shift + F12 is BUILD 2D mode inverse black and white. - - - If SETUP.DAT is not found then default options are loaded - instead of quitting to DOS. - - - ATTENTION PROGRAMMERS! Added 3 parameters to makepalookup that - allow you to do FOG effects. The first 2 parameters are the - same as before. The last 3 are the color that the palette - fades to as you get further away. Before, this color was - always black (0,0,0). White would be (63,63,63). - - makepalookup(long palnum, char *remapbuf, - char redvalue, char greenvalue, char bluevalue) - - - ATTENTION PROGRAMMERS! Moved 2 things into BUILD.H. Please - make sure to update it: - - #define MAXPALOOKUPS 256 - and - EXTERN char *palookup[MAXPALOOKUPS]; - - The palookup array is an array of pointers that point to the - first byte of each 8K palette lookup table. All 256 pointers - are initialized to NULL by initengine() except for palookup[0] - which is the default 8K palette. This will allow you to modify - the palette lookup table directly for non-snowy fading effects, - etc. Each palette lookup table has 32 shades. Each shade has - 256 bytes. Shade 0 is closest (actual palette brightness) and - shade 31 is farthest (dark usually). (256*32 = 8192 or 8K) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/3/94 - Now show white lines in 'V' mode of EDITART at ART file tile - boundaries. - - - Added Insert and Delete commands to EDITART! These Insert and - Delete keys WILL shift all tiles after the one being inserted - or deleted just like a regular text editor. To insert or - delete tiles, simply go the 'V' screen in EDITART and bang - away! Don't worry these keys are fully multi-tile file - compatible (unlike swapping right now). - You will notice that the white line boundaries that - I just added will actually move if you press Insert or Delete. - This changes the number of tiles per art file. But that's - ok. If the art files ever get too unbalanced, you can run - the RSIZEART.EXE utility to fix it. - Ken's lesson of the day: For the final release of your - games, you only need 1 art file. The reason I spent my time - programming multiple art files was because of EDITART. - Since EDITART need to READ & WRITE to the art files, it must - hold a whole art file in memory at a time. Since Build and - Game only READ the art files, a caching system can be made - and only 1 art file is necessary even for lo-memory systems. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/4/94 - ATTENTION MAP DESIGNERS! Added a long-awaited feature to BUILD - which I call "loop joining". Have you ever gotten this - frustrating message in 2D EDIT MODE before? - - "You can't split sector by connecting different loops." - - Well, you're not going to see it any more because I fixed - it! Yup. You can now split a sector along a line connecting - different loops of the sector. - - Try this - Convert the sector on the left to the sector - on the right: - - Split #1 Split #2 - ÚÄÄÄÄÄÄÄ¿ ÚÄÄÄÂÄÄÄ¿ ÚÄÄÄÂÄÄÄ¿ - ³ ÚÄÄÄ¿ ³ ³ ÚÄÁÄ¿ ³ ³ ÚÄÁÄ¿ ³ - ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ - ³ ÀÄÄÄÙ ³ ³ ÀÄÄÄÙ ³ ³ ÀÄÂÄÙ ³ - ÀÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÙ ÀÄÄÄÁÄÄÄÙ - (Given) (Half done) (Result) - (1 sector) (Still 1 sector) (2 sectors) - - Before the only was to do this was to delete all the - sectors and then redraw them again. - - I'm sure loop joining has its share of tricks, as most - BUILD functions do, so you may want to spend some time just - playing around with this new function. - - - Removed my own profiler stuff - Hline calculations, etc. code. - Watcom's sampler and profiler is much better anyway. - - - Fixed neartag divide by zero bug with walls (I hope). - Anyone calling neartag for every player per movethings? - I would try not to - How much is that unnoticable extra 0.02 - frames per second worth to you anyway? -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/9/94 - Added new array to BUILD.H called gotsector. It works a lot - like the gotpic array, but this array determines which sectors - were considered during the drawrooms function. Note that - gotsector, unlike gotpic IS cleared to 0 during every call - to drawrooms. - - - Fixed Editart 'U' mode mouse control bug. I typed too fast this - time. - - - Fixed Build split sector bug of accidently deleting sprites. It - should not delete any sprites when splitting sectors now. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/15/94 - ATTENTION PROGRAMMERS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - I moved ALL my timer code and arrow key code into GAME.C. - Here are the exact instructions that you need to follow to - upgrade your code to the new obj's: - - 1. From the end of my GAME.C, take the code from these 4 - functions: - - ---> inittimer(); - ---> uninittimer(); - ---> void __interrupt __far timerhandler(); - ---> keytimerstuff(); - - 2. After each initengine, call inittimer right AFTER: - - initengine(); - ---> inittimer(); - - After each uninitengine, call uninittimer right BEFORE: - - ---> uninittimer(); - uninitengine(); - - 3. You may need to include this (if not already included): - - ---> #include - - 4. Add these 2 lines to declare the timerhandler: - - ---> void (__interrupt __far *oldtimerhandler)(); - ---> void __interrupt __far timerhandler(void); - - 5. Since BUILD.H NO LONGER has vel, svel, and angvel, you - must add the following line to your game: - (These variables are modified inside keytimerstuff()) - - ---> static long vel, svel, angvel; - - 6. Let me list some variables that I recently removed from my - GAME. This may or may not affect you: - - oposx[], oposy[], oang[], etc.. - GONE! - lastpacket2clock - GONE! - lastsynctics - GONE! - drawscreen's smoothratio parameter & related code - GONE! - kenchaintimer - GONE! (Don't think anybody was using it - because it didn't solve sound compatibility problems) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/16/94 - Made swinging door clipping work MUCH better! It is much more - difficult to "sneak" through the door now. With the swinging - door clipping working much better, I made it possible to open - doors even if you are in the same sector as the door itself. - Now you won't have to stand back a certain distance to open - the doors. (It is much less annoying this way) Since neartag - does not normally scan cursectnum's sector tags, you will - need to check cursectnum's tags yourself (if you so desire) - - Example: (extracted from my GAME.C) - - neartag(posx[snum],posy[snum],posz[snum],cursectnum[snum], - ang[snum],&neartagsector,&neartagwall,&neartagsprite, - &neartaghitdist,1024L); - if (neartagsector == -1) //If no neartagsector found... - { - i = cursectnum[snum]; //Test current sector for tagging - if ((sector[i].lotag|sector[i].hitag) != 0) - neartagsector = i; //Cursectnum is the neartagsector! - } - - - Improved my gamma correction algorithm. Since it now uses a new - 1K at the end of my TABLES.DAT, be sure to update all your - TABLES.DAT files! My new gamma correction supports 16 levels - of brightness (0-15). You need not change any code in your - game if you already have gamma correction programmed. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/17/94 - Made swinging door clipping code work even better. The bug was: - it only tested the clipping if you were in the same sector as - the door. So I put this handy little function in GAME.C which - simply tests if 2 sectors are neighbors or not: - testneighborsectors(short sect1, short sect2) - Check it out! - - - Rewrote my clipinsidebox function. You probably don't use this - function, but if you copied my swinging door code, then you - will need to update this. Clipinsidebox is used for clipping - to determine whether a player or sprite is too close to a - wall. - - clipinsidebox(long x, long y, short wallnum, long walldist) - X and y are the position of the sprite or player. Wallnum - is the wall to test, and walldist is the fatness of the sprite - or player (same as clipmove). It returns a 1 if the sprite or - player's clipping square intersects the wall or 0 if not. - - Example - You can test all 4 walls of a swinging door and make - sure the door doesn't run you over: - - short swingwall[4]; //4 wall indeces of a swinging door - for (i=0;i<4;i++) - if (clipinsidebox(posx,posy,swingwall[i],128L) == 1) - { - //Swinging door swung into player, so move door back to - //its old position / inverse swinging direction. - - break; - } -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/22/94 - Made build posx, posy, posz, ang, cursectnum, and horiz variables - nonstatic. - - - Made hi-res screen capture work. - - - Fixed some of those evil view-clipping bugs with rotated sprites - on red sector lines. I think it should work with rotated - sprites on horizontal or vertical red lines. I'm not sure - about weird angled lines. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/23/94 - ATTENTION PROGRAMMERS: Made parallaxing skies tileable in any - equal size chunk where the chunk x size is a power of 2 - from 16-1024. You can now make a 2048 wide parallaxing sky - with 2 chunks of 1024 (gobble gobble). - - These lines were added to BUILD.H: - - #define MAXPSKYTILES 256 - EXTERN short pskyoff[MAXPSKYTILES], pskybits; - - pskyoff[MAXPSKYTILES] is an array of OFFSETS of each tile - from the picnum of the parallaxing sky. - - pskybits is NOT the actual number of tiles, but the - log (base 2) of the number of tiles. Look at this table: - - For 1 tile, pskybits = 0 - For 2 tiles, pskybits = 1 - For 4 tiles, pskybits = 2 - For 8 tiles, pskybits = 3 - For 16 tiles, pskybits = 4 - etc. - - - I know that most teams have a 1024 wide parallaxing sky that - wraps all the way around. Don't worry - this is the - default now. When initengine is called, the variables - default to this: - - pskyoff[0] = 0; - pskybits = 0; - - You may have used a 512 wide parallaxing sky (like in my game) - that repeated every 180 degrees. To make this work with - the new version, set these variables like this right after - initengine is called: - - pskyoff[0] = 0; - pskyoff[1] = 0; - pskybits = 1; - - Note that both pskyoff variables are 0 here. This will - make the parallaxing sky repeat. - - With the new tiling, you can save memory by making small - chuck sizes, such as 64 or 128, and repeating certain - sections. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/25/94 - Fixed some really stupid keyboard problem in Build. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/29/94 - Added FLOOR SPRITES!!! Here are some things that floor sprites - can do for you: - - * Make bridges and balconies - * Use them for ceiling and floor ornamentation - * Use them in place of a rotating sector - modifying 1 angle - is much faster than rotating tons of points. - * Weapon such as a spinning saw blade or, of course, a smiley - red jelly coconut. (?) - * How about a "walking" hole like in Ken's Labyrinth - * You could throw a footstep on the floor every time you make a - step. The steps would go away after awhile. Maybe if you - step in mud, the next 16 or so footsteps will be plotted. - * You could even fake radial shading with a transluscent floor - sprite. (Transluscent floor sprites not yet programmed) - - Just imagine all the great stuff you can do with floor - sprites combined with wall sprites! I can't wait to see what - you all come up with! - - ÚÄÄ To clear some confusion, and to shorten conversations, let - ³ me give official names to my 3 kinds of sprites: - ³ - ³ Normal stupid sprites - "FACE SPRITES" - ³ Rotated / masked wall sprites - "WALL SPRITES" - ³ New ceiling & floor sprites - "FLOOR SPRITES" - ³ - ³ Also let me clear up the 2 kinds of clipping: - ³ - ³ Clipping when moving something - "MOVEMENT CLIPPING" - ÀÄÄ Clipping when drawing something - "VIEW CLIPPING" - - To make a floor sprite in BUILD, simply press 'R' on any - sprite until it becomes a floor sprite. The xrepeat and - yrepeat values should work perfectly with floor sprites. - Floor sprites can be rotated at any of 2048 degrees, using - the sprite[].ang. Press < / > for course angle adjustment - or < / > with shift for fine angle adjustment. Also, you - can press 'F' on a floor sprite to flip it over like a - mirror. I am using another bit in sprite[].cstat to determine - the type of sprite. See the documentation in BUILD.H. - - Now for the bad news: - - * Floor sprite textures have similar restrictions as normal - ceilings and floors - both dimensions must be a power of 2. - This will most likely not change. - - And some known problems which I will have to fix: - * Transluscence doesn't work yet - * Sorting with other sprites - * View clipping with walls - * Doesn't work too well in hi-res mode - - See NUKELAND.MAP for some examples of floor sprites. I have both - a bridge and a balcony on the level. Please find them! - Remember that floor sprites don't work in mode x or hi-res - mode YET! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/30/94 - Made WALL SPRITE and FLOOR SPRITE correctly do movement clipping. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -12/1/94 - Made new map called BRIDGES.MAP. It is excellent! It has 3 - bridges all crossing each other. Enjoy! - - - For Editart, I added re-centering after delete and / to reset - centering while in centering mode. - - - Debugged more of the floor sprite stuff. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -12/2/94 - Made transluscence with floor sprites work. Check out my fake - radial shading under the lights of SUBWAY.MAP. - - - Optimized floor sprites in assembler. Transluscent floor sprites - are a bit slower than normal floor sprites. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -12/6/94 - Made a special 1-way mode for WALL and FLOOR sprites - (not FACE sprites). In BUILD 3D mode, you can press '1' on - a wall or floor sprite to make it only draw if you are on - 1 side of it. This method of back-face culling will not only - make non-masking objects with thickness draw twice as fast, - but will also make fewer drawing bugs due to sprite drawing - order. Try out my BRIDGES.MAP. There's a new section at the - top and it's not another "ugly Ken's face n' slime" room. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -12/8/94 - Editart and Build now capture with capt#### rather than captur## - allowing 10000 captured pictures. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -12/23/94 - Increased Maximum number of walls to 8192. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -12/28/94 - Made BUILD stub keys F5-F8 work in 3D mode also. See top - of BSTUB.C for full documentation of some new useful - variables that can be used inside the stub: - - extern long qsetmode; - extern short searchsector, searchwall, searchstat; - - In 3D mode, F5 and F6 do the exact same thing and F7 and F8 - do the exact same thing (you don't need the extra key to - distinguish between sectors, walls and sprites, since the - mouse cursor can only be on 1 of the 3 objects in 3D mode. - - Note: Since F5-F8 are called in 3D mode, you must be sure - NOT to use any 2D routines during those calls! This means - you will have to put the 3D/2D case check in all six - subroutines: - ExtShowSectorData, ExtShowWallData, ExtShowSpriteData, - ExtEditSectorData, ExtEditWallData, ExtEditSpriteData - - - KEN'S PROPOSAL (NOT YET DONE) I am thinking of making a new - (and maybe final) map format. But before I do it, I am going - to ask all of you for any suggestions on new fields to add to - my 3 big structures (sector, wall, sprite): - - Here are a few things already on my list to add: - - * char sprite[].clipdist - THIS IS FOR SURE - This will be a sprite's clipping distance. My default - walldist is 128. With this field, you will finally be - able to make a unique fatness for each sprite with no - clipping bugs. I will probably shift this field up 2-4 - bits to give it a range of more than just 0-255. - - * char wall[].pal, sprite[].pal - PRETTY SURE - It should have been this way the whole time. Currently - the wall's palookup number is sector[].floorpal. While - it may save some memory, It has too many limitations. - I can make my map converter automatically convert all - walls of a sector to equal the sector[].floorpal so - don't worry about that type of conversion. If I do - this, I can get rid of the spritepal[] hack. - - * I have decided that the sector[].extra, wall[].extra, and - sprite[].extra will remain in the structures as little - gifts for your use only. That's right! ALL YOURS! - ENJOY!!! - - * char sprite[].xoffset, sprite[].yoffset - NOT SURE YET - Some have asked for monster animations using the same - frame at 2 different times of an animation sequence having - different centers. - These will be signed chars. I'm not sure whether to - make these offsets as offsets to the centering information - from Editart or just make them the absolute offsets where - Editart's data is the default offset. I wonder if there's - a better way to do this without having to waste 8K. - - * Do I have your permission to remove nextsector2 and - nextwall2? Anybody using them? If so, can you use the - extra variable instead? This will save 16K since both - are shorts. (MAXWALLS*short + MAXWALLS*short = 16384) - They were originally intended for 2 stories - but it would be totally ridiculous for me even to think - about programming that now. Besides, you can use wall - and floor sprites to fake 2 story areas. KEN PROMISE: - I will fix those darn view-clipping bugs eventually! - - - Please send any comments/suggestions to my internet address - (kjs@lems.brown.edu) I will consider each suggestion - carefully, because everything you suggest now won't have - to be an ugly hack like spritepal[] later. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/1/95 - ÛÛÛÛÛ ÛÛÛÛÛÛ ÛÛÜ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛÛÛÛÛ ÛÛÛÛÛÛ ÛÛÛÛÛÛ ÛÛ - ÛÛ ÛÛ ÛÛ ÛÛÛÜ ÛÛ ÛÛ ÛÛ ÛÛÛÜÜÛÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ - ÛÛ ÛÛ ÛÛ ÛÛÛÛÛÛÛ ÛÛÜ ÜÛÛ ÛÛßÛÛßÛÛ ÛÛÛÛÛÛ ÛÛÛÛÛÛ ÛÛÛÛÛÛ ÛÛ - ÛÛ ÛÛ ÛÛ ÛÛ ßÛÛÛ ÛÛÛÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ - ÛÛÛÛÛ ÛÛÛÛÛÛ ÛÛ ßÛÛ ßÛß ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛÛÛÛÛ ÛÛ - - CONVMAP6! Here is what I changed in the structures: - - * Added wall[].pal, sprite[].pal - * Added sprite[].clipdist - * Expanded sprite[].cstat to a short - * Added sprite[].xoffset, sprite[].yoffset - * Removed wall[].nextsector2, wall[].nextwall2 - * Renamed wall[].nextsector1 to just wall[].nextsector - * Renamed wall[].nextwall1 to just wall[].nextwall - * Scrapped numextras and extratype structure - Don't confuse - this with sector[].extra, wall[].extra, sprite[].extra - which ARE in map version 6. - - Probably the only change above that will affect programmers is - getting rid of the '1' in wall[].nextsector1&wall[].nextwall1. - All the following changes were possible because of the new - map format. - - - Got rid of the spritepal array in BUILD.H. With my grea - new map version 6, you can simply modify sprite[].pal! - - - Made all .pal fields editable in 3D EDIT MODE. Press ALT-P - and simply edit the number as you would in 2D mode. - - - Made sprite[].xoffset and sprite[].yoffset work as - offsets to the offsets that are already in EDITART. - Simple addition. They should work for all 3 types - of sprites. - - - Made BUILD Tab&Enter also copy tags&extra if copying similar - structures. Also fixed some other attributes when - copying between structure types. - - - Made sprites highlighted with Rt. Shift duplicate and stamp - when the insert key is pressed in 2D EDIT MODE. - - - Made sprite[].clipdist work as the FACE SPRITE'S clipping - fatness. NOTE: Sprite[].clipdist is shifted up 2 to - allow a range from 0-1020, so if the sprite[].clipdist - is set to 32, then the clipping radius is actually 128. - - - Removed the walldist parameter from movesprite. Movesprite - now just uses the sprite[spritenum].clipdist field of - whatever sprite is passed (shifted up 2). - - movesprite(short spritenum, long xchange, long ychange, - long zchange, long ceildist, long flordist, - char cliptype, long numtics) - - If you use clipmove or getzrange, you should check that you - are passing the correct walldist parameters. I'm saying - you may want to change some of the 128s to - (sprite[spritenum].clipdist<<2). -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/3/95 - Made startumost[], startdmost[] into shorts. - - - Optimized and fixed gamma correction in Stereo Red-Blue mode. - - - Made weapons or anything using overwritesprite in Stereo Red-Blue - mode be at screen depth. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/4/95 - Not that anybody would care (except for some crazed mega-hackers) - but I am just mentioning the fact that I did this: - - animateoffs(short tilenum, short fakevar); - where fakevar is sectnum+0 - or wallnum+16384 - or spritenum+32768 - or 49152 (just ignore-it's for rotatesprite) - - Also: I changed one: "mov al, 0" instruction into an - "xor al, al", a net savings of - ONE LOUSY BYTE! Let's not get TOO - excited! (By the way, just kidding) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/5/95 - Fixed the sprite centering with x-flipped FACE SPRITES. - - - Found a bug with my swinging door clipping code. There are 2 - types of swinging doors, forwards (opens CCW) and - backwards (opens CW). The bug was that you could sneak - through a backwards door from the back side. Well, I fixed - it, so now I challenge you to sneak through my swinging doors - now! If you are using my swinging door code, please make - these changes which you should find in my new GAME.C: - - 1. Changed declaration at beginning of GAME.C: - static short swingwall[32][5]; - - 2. Added new line in prepareboard: - swingwall[swingcnt][4] = lastwall(swingwall[swingcnt][3]); - - 3. Modified some stuff in tagcode: - //swingangopendir is -1 if forwards, 1 is backwards - l = (swingangopendir[i] > 0); - for(k=l+3;k>=l;k--) - if... - - - Here are some more functions that have been in the engine for - a while, but I forgot to document... - precache, loadtile, lastwall, rotatepoint - They are now documented at the top of this file. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/6/95 - Optimized loading/saving of maps by using fewer read/write calls. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/14/95 - Fixed evil crashing bug that I accidently introduced in the - 1/3/95 version of Build. This crashing bug happened mostly - in tall rooms with lots of FACE SPRITES. It used to crash - very infrequently when you were standing almost exactly, but - NOT on the same x & y coordinates of a FACE SPRITE where the - z-distance was high. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/15/95 - Fixed up network code so now you can miss 4 packets in row safely - over the network rather than just 2. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/16/95 - Added strafe left / strafe right keys to my SETUP.DAT file and - char keys[19] array. If you actually use my keys array for - custom keys, here's what to do: I inserted the new strafing - keys at keys[12] & keys[13], so just add 2 to any keys with - an index >= 12. - - - Made the sprites in 2D EDIT MODE of Build highlight properly - again. - - - Added another parameter to permanentwritesprite, palookup number: - - permanentwritesprite(long thex, long they, short tilenum, - signed char shade, long cx1, long cy1, - long cx2, long cy2, char dapalnum); -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/17/95 - You can now select a bunch of sprites in 2D EDIT MODE with - Rt. shift, then go to 3D mode and change the z's of all the - highlighted sprites. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/20/95 - Made Tab&Enter in 3D EDIT MODE copy .pal also whenever .shade is - normally copied. Shift+Enter will now copy just - .pal and .shade. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/21/95 - Made Splitsector work with overlapping better. - - - In Editart 'U' mode, it now goes automatically to the PCX and - coordinates of a tile if it is already in capfil.txt. - - - In Editart, made capt????.PCX not get overwritten if they already - exist. - - - Fixed Build tab on masked walls. - - - Made zmode and kensplayerheight variables public in BUILD/BSTUB - so you can now compile BUILD to start out with your own - preferred settings. Kensplayerheight defaults to 32 and - zmode defaults to 0. You can over-ride these settings in - the new ExtInit function. - - - Made Editart tiles much easier to center by showing all tiles - in the center of the screen instead of at the top-left corner. - (Editart will not allow you to center tiles larger than - 320*200 right now) - - - Made 'O' (optimize) key in Editart automatically preserve - the centering information. - - - ATTENTION BSTUB PROGRAMMERS! Added ExtInit, ExtUnInit, and - ExtCheckKeys to BSTUB.C. Please just copy mine into your - current BSTUB. ExtInit and ExtUnInit are called only once. - ExtInit is called before loadpics() and after initengine(). - ExtCheckKeys() is called just before nextpage in both 2D - and 3D modes. In 3D mode, you must call editinput inside - ExtCheckKeys just like my example in BSTUB. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/24/95 - Fixed vertical line chained mode bug with permanentwritesprites. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/31/95 - Fixed parallaxing sky tiling bug. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/1/95 - Fixed network crashing bug when call interrupt 0x1c. You call - this interrupt when you chain to the old timer handler. Now - - - Rewrote multiplayer code in game.c a bit. Moved both sync() - and getpackets() into the main program. The master code and - single player game code are now the same. Slaves need to - drawscreen and send packets only when a packet is received - from the master. Got rid of fake sync[MAXPLAYERS] slot by - using a local sync buffers. Rewrote checkmasterslaveswitch(). - If you don't get what I did, it doesn't matter because you - already have working network code! - - - Added new key in EDITART 'V' mode. Press ALT-R to generate - a tile frequency report. It will scan all MAP files in the - same directory as the ART files. The frequency count will - show up as text in the top-left corner of the boxes in - 'V' mode. Press ALT-R again to turn off text. - - - Perfected NCOPY! Copies about 150K / second which is 10 times - faster than a 115200bps serial cable. Since NCOPY already - links with multi.obj, it should not be too difficult to make - joining work in the middle of a network game. Please wait - until I make some sample code for you! - Receiver types: NCOPY (Ex: "NCOPY") - Sender types: NCOPY [filespec] (Ex: "NCOPY *.ART") - - Ken's formula: - NCOPY + Loading&Saving GAMES = joining in middle - of network game! - - - Made a DOOM to BUILD converter. Right now it only converts - ceilings, floors, and walls now, and some of the wall - textures are screwed up. Just because I converted some - lousy stinkin' maps DOES NOT MEAN I AM GOING TO PROGRAM DOOM! - Unfortunately, the converter is programmed in QuickBasic right - now, it won't compile, and I didn't feel like putting up the - 7 MEG converted ART file up. When I convert it to C, I'll - upload it for all! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/7/95 - Fixed overwritesprite bugs with translucence in chained mode - and above top of screen. - - - Made bit 3 of overwritesprite x-flip the picture if set. - - - Optimized various parts of engine. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/8/95 - Fixed shading of all sprite types so they match perfectly with - their surroundings. Floor sprites now shade in the exact same - way as ceilings and floors. (Before, the whole floor sprite - had the same shade throughout) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/9/95 - Started on loading and saving game code so I could give some - sample code for joining network games, but none of it works - yet, so just ignore it for now! - - - Added frame rate in BSTUB.C. It averages the last 16 frames. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/16/95 - Added another bit to sprite[].cstat for y-centering control. If - bit 7 is set then the sprite's center will be the actual - center rather then at the default position which is at the - bottom of the sprite. If you use this centering bit, - you finally get "WYSIWYG" centering contol in EDITART. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/24/95 - Made floor sprites now support any x size by a power of 2 y size. - (That's better than before!) These are the same restrictions - on walls. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/25/95 - Got loading / saving code to work with my game. Press Ctrl-L to - load game and Ctrl-S to save game. Saved games are called - SAVE0000.GAME and are about 300K. Don't worry about the large - sizes of the saved game files since they can be easily - compressed to less than 50K. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/26/95 - I Finally made my multiplayer code run with fast frame rates AND - pefect controls on ALL computers of a multiplayer game. I am - now sending keystrokes of all computers at a constant rate of - 40 times per second. All computers interpolate between frames - to get screen frame rates of higher or lower than 40 fps - (even in single player mode). - - Here are the exact steps you will need to follow if you want to - update your code: - - 1. WHAT'S THE FAKETIMERHANDLER()? - - To send packets exactly 40 times a second, it would - sure be nice to send them right from the timer interrupt - handler. Too bad network packets just won't get sent - from the interrupt handler. (It may work from the - interrupt handler in Serial/Modem mode) So the solution - is to make a "fake" timer handler that must be called - at least 40 times a second even on the slowest computer. - Throughout my engine, I call faketimerhandler(). If you - have any slow parts in your game code, you may want to - called faketimerhandler() also. - Besides the very first few lines, the rest of the code - was taken directly from my old sync and getpackets - functions. - - 2. BYE BYE SYNCTICS! - - Now that all computers are calling movethings a - constant number of times a second, you don't need any - synctics variables anymore. You can convert all the - synctics variables to a define such as: - "#define TICSPERFRAME 3" - Doing this will guarantee that a game runs the same on - all speed computers. - - 3. FRAME INTERPOLATION (optional): - - static long ototalclock = 0, gotlastpacketclock = 0; - static long oposx[MAXPLAYERS], cposx[MAXPLAYERS]; - static long oposy[MAXPLAYERS], cposy[MAXPLAYERS]; - static long oposz[MAXPLAYERS], cposz[MAXPLAYERS]; - static long ohoriz[MAXPLAYERS], choriz[MAXPLAYERS]; - static long ozoom[MAXPLAYERS], czoom[MAXPLAYERS]; - static short oang[MAXPLAYERS], cang[MAXPLAYERS]; - - Add to prepareboard: - for(i=connecthead;i>=0;i=connectpoint2[i]) - { - oposx[i] = posx[i]; - oposy[i] = (etc.) - } - ototalclock = 0; - gotlastpacketclock = 0; - - Even though you may be getting more than 40fps, you will - only be seeing 40fps unless you interpolate between frames. - The oposx[], etc. variables back up the last posx[], etc. - variables so you can interpolate your actually drawing - position as some fraction between the two. This fraction - is smoothratio. - See beginning of drawscreen code. Here's where I actually - calculate the interpolated position to draw the screen. - - for(i=connecthead;i>=0;i=connectpoint2[i]) - { - cposx[i] = oposx[i]+mulscale(posx[i]-oposx[i],smoothratio,16); - cposy[i] = oposy[i]+mulscale(posy[i]-oposy[i],smoothratio,16); - cposz[i] = oposz[i]+mulscale(posz[i]-oposz[i],smoothratio,16); - choriz[i] = ohoriz[i]+mulscale(horiz[i]-ohoriz[i],smoothratio,16); - czoom[i] = ozoom[i]+mulscale(zoom[i]-ozoom[i],smoothratio,16); - cang[i] = oang[i]+mulscale(((ang[i]+1024-oang[i])&2047)-1024,smoothratio,16); - } - - Draw the screen using cposx[], etc. instead of posx[], etc. - - #pragma aux mulscale =\ - "imul ebx",\ - "shrd eax, edx, cl",\ - parm [eax][ebx][ecx]\ - modify [edx]\ - - It reads: eax = (eax*ebx)>>cl. Unlike C, this will - not overflow even if eax*ebx > 2^31, making full use of - the 64-bit result of the imul instruction. - - 4. MOVETHINGS FIFO: - - static long movefifoplc, movefifoend; - static signed char baksyncvel[64][MAXPLAYERS]; - static signed char baksyncsvel[64][MAXPLAYERS]; - static signed char baksyncangvel[64][MAXPLAYERS]; - static short baksyncbits[64][MAXPLAYERS]; - - Add to prepareboard: movefifoplc = 0; movefifoend = 0; - - It is bad to call movethings inside faketimerhandler - because you don't want things to move while you're drawing - the screen. To solve this, I made movethings just save - away the parameters it was called with using a circular - buffer, and when I'm actually ready to DO the movement code, - I call domovethings. - Rename movethings to domovethings and see my new - movethings. This code is all for the fifo. - - Put this line in movethings: - gotlastpacketclock = totalclock; - - At the top of domovethings, copy my code for loading off - of the fifo. Also set oposx[] = posx[], etc. here. - - 5. You may want to add a global variable that controls whether - you are in continuous packet sending mode or not. Only - in the main loop should ready2send be != 0. - static long ready2send = 0; - - 6. The new main loop can be as short as this, with no case - checking for masters and slaves. - - ready2send = 1; - while (keystatus[1] == 0) //Main loop starts here - { - //Actaully move everything here. - while (movefifoplc != movefifoend) domovethings(); - - //Second parameter is for frame interpolation, - //A fraction that ranges from 0-65536. - drawscreen(screenpeek,(totalclock-gotlastpacketclock)*(65536/TICSPERFRAME)); - } - ready2send = 0; -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -3/6/95 - New key in BUILD. Now when you use relative alignment mode on - ceiling and floor textures, you can press Alt-F on the ceiling - or floor to choose a new wall to align to. It actually - rotates the walls of a sector by 1. - - - Fixed screen capture PCX saving bug in both EDITART and BUILD. - - - Added a parameter to screencapture, a filename. - screencapture(char *filename) - Ex: screencapture("captxxxx.pcx"); - Please specify the full filename. Screencapture will modify - the 4 x's of the string to be a number starting at 0000. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -3/8/95 - Made my rotatesprite function use Editart centering information. - The center is the pivot point of rotation. - - - Added y-flipping to overwritesprite. See above documentation. - - - Added 2 new parameters to rotatesprite, shade and pal - - rotatesprite (long sx, long sy, long z, short a, - short picnum, signed char shade, char pal); - -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -3/10/95 - Fixed sprite showing through closed sectors bug. - - - Made it possible to draw the overhead map in 3D mode by adding - a line drawing function in 3D mode called drawline256. It - draws a line clipped to the viewing rectangle last set in - setview(). Here are the parameters: - - drawline256(long x1, long y1, long x2, long y2, char col); - - Note: The coordinates are all shifted up 12. - Example: drawline256(0L,0L,319L<<12,199L<<12,31); -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -3/11/95 - Made drawline256 draw in a cleaner way, making use of the full - 12 bits of precision. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -3/14/95 - Optimized / cleaned up parts of hitscan, neartag, cansee. - Gee, I hope they all still work! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -3/18/95 - I'm back in RI! - - - Fixed recently added movesprite z parameter bug that may have - done strange things with monsters, such as stuck in sectors - I thought the following expression: !(cstat&128) - would be true if bit 7 was a 0, but I WAS WRONG! - Get this straight: - ! - logical NOT, returns 0 if != 0 else 1 (!2457=0, !0=1) - ~ - bitwise NOT, xor's it with 0xffffffff (~0x5f=0xa0) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -3/21/95 - Gave access to some more variables in BSTUB. - - - Made clipmove return a valid sector even if you're not between - its ceiling and floor. If you use overlapping sectors, - clipmove will find the sector closest to your z. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -3/28/95 - Optimized transluscence for masked walls and wall sprites. - - - Today is the day I declare my serial/modem error correction code - perfect! Sure, I may have bragged over and over again about - how perfect my correction method is each time, but this time - I mean it. This is ship-it quality error correction. The old - method had a few dark, evil, and ugly bugs that sometimes - totally screwed up bigtime. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/5/95 - Got Master/Slave switching to stay in sync again with new - multiplayer code. Right after the master sends a packet - where a switch is made, I disable the master from sending - any more packets by setting ready2send to 0. Ready2send - will be set back to 1 only after the actual switch in - checkmasterslaveswitch. Here's what I added to movethings: - - //Do this for Master/Slave switching - for(i=connectpoint2[connecthead];i>=0;i=connectpoint2[i]) - if (syncbits[i]&512) ready2send = 0; -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/10/95 - Optimized continuous setview calls between 2 different window - sizes. - - - ATTENTION PROGRAMMERS: Moved movesprite code into game.c. It - no longer exists in the engine. It is a "cover-up" function - and it should be yours. - - - Added a circular keyboard buffer to my keyboard handler. It is - fully compatible with the keystatus arrays. Use this buffer - for typing in messages or cheat codes. If you do not use this - buffer (or you wrote your own interrupt handler), you will miss - keys and it is very annoying. - - I added these variables to build.h: - - #define KEYFIFOSIZ 64 - EXTERN volatile char keyfifo[KEYFIFOSIZ], - keyfifoplc, keyfifoend; - - Every time a key is pressed and released, I add 2 bytes to the - circular buffer. The first byte is the scan code. The second - byte is a 1 for key pressed or 0 for key released. You can - ignore the key releases if you wish. You must read 2 bytes at - a time from this buffer. - (scancode,keystat),(scancode,keystat),... - - Here's how you read the keyboard fifo: - while (keyfifoplc != keyfifoend) //More characters to read - { - ch = keyfifo[keyfifoplc]; - keystate = keyfifo[(keyfifoplc+1)&(KEYFIFOSIZ-1)]; - //Increment buffer pointer - keyfifoplc = ((keyfifoplc+2)&(KEYFIFOSIZ-1)); - - printf("Scancode: %d, status: %d\n",ch,keystate); - } - - The interrupt handler does the same as above but writes and - increments using keyfifoend as the index. - You can easily clear the buffer this way: - keyfifoplc = keyfifoend - - - Made clipmove/getzrange not clip on the back side of a 1-sided - wall/floor sprite. It makes the clipping a little faster - and seems to fix a few minor clipping bugs. Don't get too - excited. - - - Fixed getzrange's ceilz/florz mismatch with floor sprites against - normal ceilings and floors. - - - Made Build default to y-centered centering mode when sprites - are inserted (bit 7 of sprite[].cstat) - - - Fixed clipmove bugs with y-centered centering mode. - - - Made it so you don't get stuck sliding along multiple properly - aligned wall/floor sprites. - - - Please update to my new tables.dat. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/11/95 - Optimized parts of clipmove / getzrange. Is it faster? Did I - make more bugs? - - - Made the movesprite code in GAME.C now use getzrange. This - allows sprites to walk on floor sprites and bombs roll across - bridges. I will include the original movesprite code that - came from the engine in case you want to start with things - the way they used to be. - - - Made ornamentation in BUILD 3D mode much easier. Now you can - press 'S' to insert a sprite on walls (not just ceilings - and floors). When you insert a sprite on a wall, it will - automatically be set to a wall sprite at the wall's angle. - Also it will be 1-sided with blocking off (The optimal - options for a decorative sprite on a wall). - - - Added ALT-D to BUILD 3D mode. It lets you type in clipdist - for sprites. It works in the same way as ALT-P for palookup - changing. - -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/15/95 - Fixed return value bug in setanimation and cleaned up these 3 - functions: doanimations, getanimationgoal, setanimation. - Since they are now in game.c, you will need to copy them to - update. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/16/95 - Fixed hitscan not passing through loops bug. - - - Fixed hitscan so it hits wall and floor sprites in the right - places. - - - ATTENTION PROGRAMMERS!!! Made bit 8 of sprite[].cstat the - hitscan clipping bit. It works like the hitscan bit for walls. - Note that both the wall and sprite cstat variables now have - 2 separate bits for clipping, where: - 1 is for use with the clipmove/getzrange function and - 1 is for use with the hitscan function only. - Before, hitscan used to use 1 bit for all sprite clipping. - In your maps, the sprite hitscan bits are all zeros. That's bad! - To make things work like they used to, the sprite hitscan bit - must be set equal to the old sprite blocking bit. So I was nice - enough to make a program, FIXSPRBT.EXE, which will do just that. - - PLEASE RUN FIXSPRBT.EXE ON ALL YOUR MAPS. You don't HAVE to - run it on all your maps since the map format hasn't changed, but - it will save you annoying attribute setting time if you do. - - - Did a few things to make these blocking bits easier to edit: - Since H and ALT-H were already used, I made CTRL-H toggle the - hitscan bit for both walls and sprites in 2D mode. B toggles - the blocking bit. B also now sets the hitscan bit to its - default value when you press it. For sprites, the hitscan bit - default is equal to the clipmove bit. For walls, the hitscan - bit default is always 0. - - - Added new map mode! Check it out in my game. I now have 3 map - modes. Not that this really matters to you game programmers, but - this is how my game works: - dimensionmode[snum] == 1 3D MODE + junky line map - dimensionmode[snum] == 2 SUPER MAP! - dimensionmode[snum] == 3 3D MODE - - I added show2dsector to BUILD.H which controls which works - like the other show2d... bit arrays. It tells which sectors - to show. - EXTERN char show2dsector[MAXSECTORS>>3]; - - I rewrote parts of drawoverheadmap to accommodate this new - mode - so it would be nice if you updated to my new code. - - Added a new function that clears full screen to a specified - color: - clearview(0L); - - Oh and did I forget to mention the big function! Parameters - are the exact same my drawoverheadmap function: - drawmapview(cposx,cposy,czoom,cang); - - Note: The new map mode right now is slowed down bigtime by - the face sprites using the rotatesprite function. The - rotatesprite right now is using a worse than awful - algorithm. When I optimize rotatesprite, the frame rate - of the new map mode will fly! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/18/95 - Added default sprite cstat variable when you insert new sprites. - Set it to 0 if you hate the new centering mode in ExtInit - or 128 if you like the new centering mode. - Add this line to your Bstub if you wish: - extern short defaultspritecstat; - - - If a wall & sprite are same distance away using hitscan, hitscan - now chooses the sprite. - - - Optimized rotatesprite. - - - ATTENTION PROGRAMMERS: Added new paramater at end of - rotatesprite: A char where the first bit tells it to use - transluscence mode or not. - - rotatesprite(long sx, long sy, long z, short a, short picnum, - signed char dashade, char dapalnum, char dastat) - - if ((dastat&1) == 0) - no transluscence - if ((dastat&1) != 0) - transluscence - - - Cleaned up drawmapview further by making ALL floor sprite draw - with the texture in the right place and made the polygon - filling algorithm use higher screen coordinate precision. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/19/95 - Added parameter to makepalookup: - - makepalookup(long palnum, char *remapbuf, - signed char r, signed char g, signed char b, - char dastat) - - if ((dastat&1) == 0) then makepalookup will allocate & deallocate - the memory block for use but will not waste the time creating - a palookup table (assuming you will create one yourself) - if ((dastat&1) != 0) then makepalookup will allocate & deallocate - the memory block AND create a palookup table using the rgb - values you pass. - - - Made my ceiling&floor update the self-modified palookup pointers - when palookup[sector[].?pal] changes, not just when - sector[].?pal] changes. Watching for changing pointers rather - than changing indeces should solve the problem with screwy - palookup selection for ceilings&floors. Ignore what I said - before. You should now be able to change palookup pointers - freely. - - - Optimized relative alignment. It should be the same speed as - all other ceilings & floors now. - - - Warning: Since I added the new bit in sprite[].cstat, there are - now 9 bits in use. Make sure to treat it as a short. In my - code, I had some bugs where I did this: - sprite[].cstat &= (255-4); BAD! Cstat's a short! Please - check your code and make sure you clear the bits this way: - sprite[].cstat &= ~4; -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/21/95 - Fixed bug with flipping textures on ceilings & floors. In - BUIL0419.ZIP I had a bug whenever a ceiling or floor texture - had bit 4 set. It drew the texture backwards. Well, I - fixed it. Hope you didn't "Build" on this bug! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/22/95 - Fixed really really stupid hitscan returning sector < 0 bug. If - you were calling hitscan from the top-left triangular region - of the board it stupidly returned a -1 for the sector. Well, - I fixed it. - - - ATTENTION EVERYBODY!!! Moved setup.dat loading from the engine - into GAME.C and BSTUB.C. If you copy this code from game.c - into your game / bstub, they will work like it used to: - - ----- NEW GLOBAL VARIABLES: ----- - - #define NUMOPTIONS 8 - #define NUMKEYS 19 - static long chainxres[4] = {256,320,360,400}; - static long chainyres[11] = {200,240,256,270,300,350, - 360,400,480,512,540}; - static long vesares[7][2] = {320,200,640,400,640,480, - 800,600,1024,768, - 1280,1024,1600,1200}; - static char option[NUMOPTIONS] = {0,0,0,0,0,0,1,0}; - static char keys[NUMKEYS] = - { - 0xc8,0xd0,0xcb,0xcd,0x2a,0x9d,0x1d,0x39, - 0x1e,0x2c,0xd1,0xc9,0x47,0x49, - 0x9c,0x1c,0xd,0xc,0xf, - }; - - ----- Put this where you call initengine ----- - - long fil; - - if ((fil = open("setup.dat",O_BINARY|O_RDWR,S_IREAD)) != -1) - { - read(fil,&option[0],NUMOPTIONS); - read(fil,&keys[0],NUMKEYS); - close(fil); - } - if (option[3] != 0) moustat = initmouse(); - - switch(option[0]) - { - case 0: initengine(0,chainxres[option[6]&15],chainyres[option[6]>>4]); break; - case 1: initengine(1,vesares[option[6]&15][0],vesares[option[6]&15][1]); break; - case 2: initengine(2,320L,200L); break; - case 3: initengine(3,320L,200L); break; - case 4: initengine(4,320L,200L); break; - case 5: initengine(5,320L,200L); break; - case 6: initengine(6,320L,200L); break; - } - - ----- That's it! ----- - - Initengine now has 3 parameters: - initengine(char davidoption, long daxdim, long daydim) - See revised initengine description at the top of this file. - - Now that engine.c doesn't use setup.dat, you can use your - own setup program. - - Don't forget to update BSTUB! - - NOTE!!! While MY setup program allows you select many different - video modes, no new modes are supported yet in BUILD! - (It's on my list.) - - - - Fixed keyboard repeating. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/26/95 - Hi-res now works in all modes! The code I gave in the 4/22/95 - description is still perfectly valid, so please copy it if - you haven't already looked at it. Here are some important - new variables I put in BUILD.H: - - EXTERN char vidoption; - EXTERN long xdim, ydim, ylookup[MAXYDIM+1]; - - Vidoption is simply the first parameter you pass to - initengine. Xdim and Ydim are the screen sizes you pass to - initengine, such as 320*200 or 640*480. - Ylookup is a lookup table that works like this: - If (vidoption == 0) ylookup[i] = ((i*xdim)>>2); - if (vidoption != 0) ylookup[i] = i*xdim; - There is 1 exception: If you are using a chained mode which - can only fit only 1 viewing page, then the engine actually - does a screen-buffer mode and blits to the chained screen - so for this case, ylookup[i] = i*xdim. - - - Added bit to the dastat parameter of rotatesprite. - if ((dastat&2) != 0) - align to screen size so the gun or - whatever is always over the same relative spot of the screen. - Works like bit 2 of the flags parameter in overwritesprite. - - - Added pixel writing and reading that will work in all BUILD - graphics modes. They work just like you think they should. - - plotpixel(long x, long y, char col); - char getpixel(long x, long y); - - Please do not overuse these functions! They are NOT intended - for fast drawing! - - - Changed tables.dat so parallaxing skies at high resolutions - work accurately. - - - I made bit 15 of sprite[].cstat the invisible bit. If it is - set, then the sprite won't even be considered for sorting and - there is absolutely no speed loss due to its existence. It is - faster to use this bit then manually set thesprite[] to -1. - - Since drawrooms collects the list of sprites drawmasks is about - to sort, make sure the bit is set before drawrooms. If you use - frame interpolation, you usually want to tell drawmasks somehow - to not draw yourself. Before you used to use the - thesprite[] = -1 trick. Now you do it like this: - - sprite[i].cstat |= 0x8000; //Set invisible bit - drawrooms(posx,posy,etc.); - sprite[i].cstat &= ~0x8000; //Restore invisible bit - - - Fixed distance overflow bug (the one that showed garbage - textures if a wall was really far away). -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/27/95 - Made an example board, MONWALK.MAP, where monsters walk along - a bridge with no railing, onto a sector, and even up and down - a stairway without falling off it. If you shoot a brown so - it's almost dead, it will turn transluscent. If it's - transluscent, it won't shoot bullets. It is much easier to - test the monsters' walking when they don't shoot! - - - Try my new and improved fake network player mode! Each fake - network player now gets their own window. Use insert and - delete to add or remove players. Use Scroll lock to switch - which window you control. If you have a Pentium, I would - recommend trying this out in 640*480 mode. - - - Noticed a bug with my movesprite code: - For clipmove, I was getting the z-coordinate right, but for - getzrange I forgot to subtract half the sprite's height if - the sprite was using the real centered centering mode. - - These lines set daz to the actual center of sprite i no matter - what centering mode is used: - - daz = sprite[i].z; - if ((sprite[i].cstat&128) == 0) - daz -= ((tilesizy[sprite[i].picnum]*sprite[i].yrepeat)<<1); -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/28/95 - ATTENTION PROGRAMMERS! When a tile is not in the cache: - Before it used to be this: - - if (waloff[tilenum] == -1) loadtile(tilenum); - or - if (waloff[tilenum] < 0) loadtile(tilenum); - - Now it's this: - - if (waloff[tilenum] == 0) loadtile(tilenum); - - PLEASE MODIFY YOUR CODE IF YOU USE WALOFF! - - Windows can allocate memory with addresses so high, they - are negative. That makes the (waloff[tilenum] < 0) - method totally stupid and attempt to reload from disk - the tile constantly! I can think of 3 reasons why I - originally designed my system in this fashion: - mestupid, mestinx, and merottts. - - - Fixed visibility for different screen sizes. - - - ATTENTION PROGRAMMERS! Now multiply by visibility rather than - shift right by visiblity so you get a broader range of - visibility. If you want the visiblity to work like before, - use this conversion table: - - Old visibility New visibility - 8 -> 16384 - 9 -> 8192 - 10 -> 4096 - 11 -> 2048 - 12 -> 1024 - 13 -> 512 - 14 -> 256 - 15 -> 128 - - - Made Alt-F make the selected wall the first wall of a sector. - This is useful for quick relative alignment adjustments. - Alt-F for 2D and 3D modes may not work for sectors with loops - inside of them. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/1/95 - Optimized horizontal line setup code from 9 multiplies to - 7 multiplies. - - - Fixed dark vertical lines in parallaxing skies bug I recently - introduced. - - - Optimized horizontal line assembly code so it doesn't use the - awful SHLD instruction any more. This is a good speed - improvement for Pentiums only. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/2/95 - Added some code to my GAME.C which detects when a computer gets - out of sync in a multiplayer game. It's not as easy as you - may think with all the faketimerhandler and fifo crap. If - you want to put this code in your game, search all areas in - my code with the keyword "syncval". - - - Fixed palookup crashing bug. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/6/95 - Moved windowx1, windowy1, windowx2, windowy2 variables into - BUILD.H. They are the exact parameters you passed to the - last setview call. Please DO NOT modify them directly. - Use setview to modify them. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/10/95 - Fixed makepalookup bug when shading to non 0. - - - Fixed palookup pointer setting bug. - - - ATTENTION PROGRAMMERS! I made a new cacheing system which allows - any type of object to be allocated in my cache, such as - artwork tiles and sounds or whatever else you may want to - put on the cache. This may or may not affect you. If you - haven't been hacking into my code, then you shouldn't have to - change your code. The cacheing routines have been moved into - a separate module, cache1d.obj. If you link engine.obj, then - you must also link cache1d.obj. Please update your makefiles. - - For anybody who may want to re-write my cacheing system, here's - how it now works: (I have only 3 functions in cache1d.obj - right now, initcache, uninitcache, and allocache) - - Allocate a nice BIG buffer, like from 1MB-4MB and - call initcache(long cachestart, long cachesize) where - - cachestart = (long)(pointer to start of BIG buffer) - cachesize = length of BIG buffer - - Ex: initcache(FP_OFF(pic),cachesize); - - Loadpics calls this function for you so you don't normally - need to call it. - - call allocache(long ptr, long siz) whenever you need to - allocate a temporary buffer, where - - ptr = (long)(pointer to (4-byte pointer to thing))\ - siz = number of bytes - - Ex: if (waloff[tilenume] == 0) - allocache((long)&waloff[tilenume],walsiz[tilenume]); - - Allocache is totally tile independent. To allocate a sound - on the cache, you can call allocache. - - There are 3 functions in the engine which help manage the - cache for you: loadpics - calls initcache - loadtile - calls allocache - allocatepermanenttile - special function - that allocates permanent memory - from the cache. - - - Fixed clipmove crashing bug when passing a sectnum < 0. Whenever - you moved in BUILD and you weren't in a valid sector, memory - was getting trashed. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/12/95 - Added ExtPreCheckKeys(void) to BSTUB.C. It is called before - drawrooms / drawmasks in 3D mode, whereas ExtCheckKeys(void) - is called after drawrooms / drawmasks (and before nextpage). - - - Added bit to flags of rotatesprite to allow x-flipping. See - updated documentation. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/17/95 - Added aspect ratio for those weird modes like 320*400, etc. - You could call setaspect to properly adjust a mode that is - not exactly correct, or for special effect that stretch - the screen. - - In ENGINE.OBJ, I added a function, setaspect(long daaspect), - where you pass the Y/X aspect ratio scaled up 16 bits, so - 65536 would be normal. You don't need to call this if you - don't want to. By default, in setview, I call setaspect - with these parameters: - - setaspect(divscale16(ydim*320,xdim*200)); - (also written as:) - setaspect(((ydim*320)<<16)/(xdim*200)); - - Note that in 320*200 mode the value passed would be 65536 - which is a 1:1 aspect ratio. - - In BUILD.H, I added yxaspect and xyaspect. - - When you call setaspect(daaspect), - - yxaspect = daaspect; - xyaspect = (1<<32) / yxaspect; //reciprocal - and other internal variables, so DON'T MODIFY YXASPECT - AND XYASPECT DIRECTLY! - - Since drawmapview is also affect by the aspect ratio, you - will need to make sure drawoverheadmap is affected so - the map modes match up. Please look at and copy my updated - drawoverheadmap function into your GAME.C if you use it. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/18/95 - Revised caching system so it supports locking. - Here are the new parameters to allocache: - - allocache(long *bufptr, long bufsiz, char *lockptr) - *bufptr = pointer to 4-byte pointer to buffer - bufsiz = number of bytes to allocate - *lockptr = pointer to 1-byte locking char. 1=locked, 0=not - - And uninitcache works a little differently too: - Call uninitcache(0) to remove all UNLOCKED items or - Call uninitcache(1) to remove ALL items. - After calling uninitcache, you do not need to call - initcache to use the cache again. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/21/95 - Made changespritesect and changespritestat return 0 instead of -1 - when changing to same value. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/25/95 - Added relative visibility for sectors. In 3D EDIT MODE, use - ALT+(keyp.)+/- to change an individual sector's visibility. - Press Shift in addition for fine visibility changine. By - default you change it by 16. Press CTRL+ALT+(keyp.)+/- to - change the global visibility. The global visibility is not - saved in the map. - - - Can now delete many sectors at a time. Select sectors with the - rt. Alt. Then press Ctrl-delete on any highlighted sector to - delete all the highlighted sectors. - - - Fixed build sometimes not saving when quitting from 2D mode bug. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/27/95 - Fixed bugs in network work that should make it miss packets - much less often than before. - - - Fixed bug in ncopy so it shouldn't halt or crash anymore. - - - Added spritecstat[] the thesprite arrays. Please use my - thesprite arrays rather than modifying the sprite directly - since hitscan and clipmove use bits 4 and 8 of sprite[].cstat. - - - ATTENTION PROGRAMMERS: Added 1 parameter to neartag that will - allow you to search only lotags or only hitags. See updated - documentation above. - - neartag (long xs, long ys, long zs, short sectnum, short ange, - short *neartagsector, short *neartagwall, short *neartagsprite, - long *neartaghitdist, long neartagrange, char tagsearch) - - If tagsearch = 1, neartag searches lotag only - If tagsearch = 2, neartag searches hitag only - If tagsearch = 3, neartag searches lotag&hitag - - Neartag used to always search both lotag&hitag. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/30/95 - Added ExtAnalyzeSprites(void) to BSTUB and a spriteshade array - to BUILD.H. - - - Made circle drawing in 2D EDIT MODE work better at large sizes. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/5/95 - Added shareware / registered artwork version control to EDITART. - In 'V' mode, when you press ALT-R to get a report of tile - frequencies of tiles on all the maps in the current directory, - you can toggle the shareware/registered bit with the space bar. - This bit is saved in the top bit of the picanm bits so it is - stored permanently in the art file. Press ALT-D in this mode - to automatically delete all registered tiles. Please before - you do the deleting phase, copy all artwork to a temporary - directory!!! It is safe, however, the toggle the new bit in - the full version. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/7/95 - Made 3 main structures defined with typedef so struct prefix - is no longer needed with sectortype, walltype, and spritetype. - - - Added new function to engine: - - short sectorofwall(short dawall); - - It returns the sector of a given wall. It is well optimized - including sector[sector[].nextwall].nextsector if a red wall - and a binary search on the sector[].wallptr's if it is a - white wall. On average, sectorofwall should have to scan - through only 10 different sector indeces to find the right - sector (not 1024!). - - - ATTENTION PROGRAMMERS! Made all the separate thesprite arrays - into a single array of sprite structures call tsprite. See - BUILD.H!!! This means: - - spritepicnum[i] is now tsprite[i].picnum - spritex[i] is now tsprite[i].x - spritey[i] is now tsprite[i].y - spritez[i] is now tsprite[i].z - spriteshade[i] is now tsprite[i].shade - spritecstat[i] is now tsprite[i].cstat - spritepal[i] is now tsprite[i].pal - thesprite[i] is now tsprite[i].owner <<<============ - - Everything above is straight forward, except for thesprite, - which has been renamed to owner. - - All other tsprite parameters, such as .xrepeat, .yoffset, - etc. can also be modified without changing the real - sprite structure so the game won't out of sync. - - - Made tsprite[].statnum be a priority variable for sorting sprites - that are the exact same distance from you. I think higher - means more in front. - - - Made clipmove allow you to cross any red sector line when the z's - of the next sector are farther apart. This may solve clipping - bugs such as when you're in water. You may be able to remove - some work-arounds you may have programmed previously. - - - NEW FILE GROUPING SYSTEM!!! - My system will first search for the stand-alone file in the - directory. If it doesn't find it, then it will search for it - in the group file. If it still doesn't find it then -1 city. - Use KGROUP.EXE to create a grouped file from a lot of other - files. Type KGROUP [grouped filename][filespec][filespec][...] - For example this line will create the new grouped file, - stuff.dat, including all the following files specified: - kgroup stuff.dat *.art *.map tables.dat palette.dat - Feel free to make your own batch files. If there is demand, - I can make kgroup support appending, replacing, and extraction. - - Here is the file format of a grouped file: - ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ - ³ 12 bytes - File grouping ID ³ - ³ 4 bytes - Number of files ³ - ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ - ³For each file: (16 bytes per file) ³ - ³ 12 bytes - Filename with extension (13th byte would be a 0) ³ - ³ 4 bytes - Length of file ³ - ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ - ³ Pure, raw file data, ordered just like you think it would be ³ - ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ - There just couldn't be a simpler format. This format is so - hacker happy that when you view it in a hex editor, all the - filenames line up perfectly since they're multiples of 16. - Anybody who can't figure this out, of course, not only rots, - but is probably one of those really stupid people who would - actually "pay" to get the full version of a game. - - The engine currently supports grouping for: - *.ART, *.MAP, TABLES.DAT and PALETTE.DAT. If you want - to group your own files, you will have to use my loading - routines rather than the standard ones for those files. My - file routines are basically an extra layer around the standard - lo-level functions. Look at these 5 routines I currently - support: - - Welcome to the K-routines! - open -> kopen4load(char *filename) - read -> kread(long handle, void *buffer, long leng) - lseek -> klseek(long handle, long offset, long whence) - filelength -> kfilelength(long handle) - close -> kclose(long handle) - - Note that you only pass the filename to my kopen4load function. - - Here are 2 other routines that you MUST use, whether you like - my file grouping system or not: - - initgroupfile(char *groupfilename) - Call this with the name of your grouped file before - any possible file loading will the k-routines. Note that - tables.dat uses the k-routines and it is in initengine(). - Please don't give your grouped filename an extension that - starts with W, ends with D, and has a vowel in between. - And don't even bother to write your own file grouping - system because even if you do, people still have to write - their own new utilities to read the ART and MAP files. - - uninitgroupfile() - Call before quitting to DOS. - ------------------------------------------------------ - - ATTENTION PROGRAMMERS! Changed kopen4load from: - - kopen4load(char *filename) - to: - kopen4load(char *filename, char searchfirst) - - where: - if searchfirst = 0 then search stand alone first then group file - if searchfirst = 1 then search group file only -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/12/95 - Tracked down an OUT OF SYNC bug with my multiplayer code! - In my GAME.C, the way I had my sync arrays organized were - wrong. The problem was that if faketimerhandler was - called during domovethings, the sync arrays may have been - changed, getting the game out of sync. The solution is - to keep the sync arrays in domovethings totally separate - from the sync arrays in faketimerhandler. I split my sync - arrays into 2 separate arrays, sync and fsync, where fsync - and osync are for use BEFORE the FIFO only (such as - faketimerhandler and getpackets), and sync is used AFTER - the FIFO only (such as domovethings). PLEASE SPLIT YOUR - SYNC ARRAYS AS I DESCRIBED! - - - The OUT OF SYNC message doesn't flicker any more. See the - section of code in GAME.C where I set syncstat. - - - Fixed up a waitforeverybody function for network games which - waits for everybody to be at a certain part of the game. - Waitforeverybody also uses getpackets message number 5. - - - Added new clipping function that will push players away from - walls that are too close. It solves A LOT of movement - clipping problems. It can be pretty darn slow if it detects - that you're too close to a wall, so I'd recommend using it - only for players. - - pushmove (long *x, long *y, long *z, short *sectnum, - long walldist, long ceildist, long flordist, char cliptype) - - The parameters are exactly the same as clipmove but with no - xvect or yvect. Pushmove returns either a 0 or -1. If - it returns a -1, then that means that it could not push - the player away from the offending wall after 256 tries. - When this happens, then you should kill the player - instantly, because this only happens when the player is - getting smooshed. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/13/95 - Made clipinsidebox and clipinsideboxline return 0 if line doesn't - intersect box, 1 if line intersects box and center of box - is in front of line, or 2 if line intersects box and center - of box is behind line. - - - Cansee should now work properly with overlapping. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/19/95 - ATTENTION! Remove work-arounds!!! Found nasty getzrange bug. - Getzrange used to let you fall through red sector line cracks - when you were near more multiple red sector line sharing the - same 2 sectors. Sound familiar anybody? - - - Made pushmove return the sector of whatever x and y end up in. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/22/95 - I included cache1d.c renamed to cache1d.txt in this upload. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/26/95 - Made face and wall sprites of clipmove, getzrange, hitscan, and - neartag sensitive to the y-offset that you set in Editart. - - - Made one sprite sorting case work perfectly: where multiple - sprites have the same x and y location (and priority). The - sorting still doesn't work perfectly, but this one case can - solve many of the current sprite sorting bugs, such as - inserting a floor sprite of blood below a dead body. - - - Fixed some sprite drawing clipping bugs for wall and floor - sprites. Now, wall sprites and floor sprites should not - show through walls, ceilings, or floors when they're not - supposed to. Also, I fixed a case where wall sprites - disappeared when they happened to be between 2 white walls - that clipped it. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/27/95 - Fixed even more sprite drawing clipping bugs for wall sprites. - - - BONUS!!! Wall sprites now clip to white walls! (not red walls) - If you ornament a wall, make sure that neither endpoint of the - wall sprite is behind the wall or else it will get clipped. - Please run lookatme.map from my game.exe which demonstrates - some of the things you can do in build now without bugs. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/30/95 - Made drawline256 clip with startumost/startdmost. - - - Moved keyboard handler into GAME.C. Here's what you need to do - to use my keyboard handler (see my GAME.C): - - 1. Some global variables: - - #define KEYFIFOSIZ 64 - void (__interrupt __far *oldkeyhandler)(); - void __interrupt __far keyhandler(void); - volatile char keystatus[256], keyfifo[KEYFIFOSIZ]; - volatile char keyfifoplc, keyfifoend; - volatile char readch, oldreadch, extended, keytemp; - - 2. initkeys() - - 3. uninitkeys() - - 4. keyhandler() - - 5. Make sure to call initkeys and uninitkeys. A good place - would be next to where you call inittimer / uninittimer. - - I didn't put my keyboard handler into BSTUB since I am using - keystatus throughout build.obj. Besides I didn't want to anybody - too bad of a headache for one upload. - - - Did you know that screencapture inverses black and white if you - hold either shift key down? This option is useful for - printing out board maps. Since I don't own the keyboard - any more, I had to make screencapture take inverseit as the - second parameter. - - screencapture(char *filename, char inverseit); - - Ex: screencapture("captxxxx.pcx",keystatus[0x2a]|keystatus[0x36]); - - If (inverseit == 0) then nuttin' special - If (inverseit == 1) then super-reverso blacko-whiteo mode! - - I also had to move the stereo adjustment keys into game.c - Just search for the "stereo" keyword in GAME.C. It'll take - through all the necessary places. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/5/95 - Moved my keytimerstuff from my timerhandler into getinput. - (which is where it should be) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/10/95 - Added a loadtilelockmode variable to BUILD.H. It's a global - variable that makes future loadtile calls allocate their - buffers on the cache as unlocked (0-default) or locked (1). - I decided to make this a global variable rather than a - parameter to save some people from rewriting code. - - EXTERN char loadtilelockmode; - - - Made my 2D EDIT MODE space bar code clear out new sectors and - wall structures to 0. (except for the extras which are -1) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/20/95 - I forgot to documenent rotatesprite bit 3, which controls - whether or not the sprite will be clipped to the startumost - /startdmost arrays. If the bit is a 1, then the sprite will - not be clipped. This mode is useful for doing status bars - at variable resolutions. What you do is instead of calling - permanentwritesprite, you call rotatesprite with the scaling - bit and startumost/startdmost clipping bit off. For non - screen-buffer modes, be sure to call rotatesprite for each - page of the mode. Use the numpages variable in BUILD.H to - get the number of video pages used. - - - Added clipping box parameters to rotatesprite: Here is the - prototype now: - - rotatesprite (long sx, long sy, long z, short a, short picnum, - signed char dashade, char dapalnum, char dastat, - long cx1, long cy1, long cx2, long cy2) - - For your information, rotatesprite used to choose default - clipping box sizes using this code: - - if ((dastat&8) == 0) - { //0,0,xdim-1,ydim-1 - cx1 = windowx1; cy1 = windowy1; - cx2 = windowx2; cy2 = windowy2; - } - else - { - cx1 = 0; cy1 = 0; - cx2 = xdim-1; cy2 = ydim-1; - } - - Now both permanentwritesprite and overwrite can both be - replaced with rotatesprite which now does everything. - To replace permanentwritesprite, you must make sure to - draw to all the pages in numpages. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/27/95 - Fixed recently introduced build 3D mode bug when you press the - L.ENTER key on a blank map. Also made sectorofwall return -1 - if an invalid wall is passed to it. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/28/95 - Added a function to my game that shows only the local area of - the map by scanning through the nextsectors of walls and - setting the show2dsector, show2dwall, and show2dsprite - arrays properly. You should call this function any time - (show2dsector[cursectnum>>3] & (1<<(cursectnum&7))) == 0) - That means it's not showing the sector you're currently - in. You should also manipulate show2dsprite any time you - insert or warp a sprite. - - - You know the one thing in my engine that doesn't work in chained - mode? Well I fixed it! - - - Fixed a bug which made it print out of sync when it really - wasn't (This bug probably only affecting my game.) In - getsyncstat, I was calling updatecrc16() with things other - than chars, making it index invalid parts of the crctable - array. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/30/95 - Reduced some overhead memory: - * Removed walsiz[] array. (16K saved). If you ACTUALLY used - this array, you can multiply tilesizx[]*tilesizy[] instead. - * Made sqr table from longs to shorts with same precision. - * Removed tantable. (4K saved) - * Reduced internal constant, MAXWALLSB, from 4096 to 2048 - (96K saved). -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/1/95 - Added another bit to rotatesprite for top-left corner mode and - made documentation of the stat bits more clear. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/3/95 - Fixed a bug with rotatesprite so it now scales perfectly to the - full screen view when enabling bits 2 and 8 of the stat field. - This means that with rotatesprite, you can easily get your - status bars, etc., to work at any resolution. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/4/95 - New Doom->Build update! You can now convert doors and lots of - other weird things. Fixed more conversion bugs. Sprites now - convert properly in doom-artwork mode. You can now convert - PWADS. - - - Added some wacky aspect ratio keys to 3D EDIT MODE of BUILD. - Use Rt.Ctrl Rt.Alt Lt.- or Rt.Ctrl Rt.Alt Lt.= to select. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/12/95 - Added parameter to initmultiplayers to allow who becomes - master at the start of a multiplayer game. - - - Added parallaxyscale variable to BUILD.H which control the ratio - at which the parallaxing skies scroll in relation to the - horizon. Default is 65536. With lower values, you don't - need as much artwork and can look higher, but I like 65536 - because it is the correct projection. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/13/95 - Had MAJOR bug with my searchmap function. If you use it, please - re-copy from my game.c -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/14/95 - Fixed some EVIL bugs with Rt.ALT sector copying. It shouldn't - screw up your maps anymore! And if you have maps that were - screwed up with it, you can try my new map correcting key, - L.Ctrl+L.Shift+L.Enter. This key will not affect an already - perfect map. However it can SOMETIMES clean up a map that - was screwed up. I take no responsibility if it screws up - your map even more, so please check them before saving! diff --git a/polymer-perf/eduke32/build/doc/build2.txt b/polymer-perf/eduke32/build/doc/build2.txt deleted file mode 100644 index c971377ba..000000000 --- a/polymer-perf/eduke32/build/doc/build2.txt +++ /dev/null @@ -1,1655 +0,0 @@ -// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman -// Ken Silverman's official web site: "http://www.advsys.net/ken" -// See the included license file "BUILDLIC.TXT" for license info. - -BUILD engine Notes (7/24/96): - -BUILD programmed by Ken Silverman - -BUILD.TXT CONTINUED... (BUILD.TXT WAS GETTING TOO BIG!!!) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/12/95 - Added parameter to initmultiplayers to allow who becomes - master at the start of a multiplayer game. - - - Added parallaxyscale variable to BUILD.H which control the ratio - at which the parallaxing skies scroll in relation to the - horizon. Default is 65536. With lower values, you don't - need as much artwork and can look higher, but I like 65536 - because it is the correct projection. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/13/95 - Had MAJOR bug with my searchmap function. If you use it, please - re-copy from my game.c -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/14/95 - Fixed some EVIL bugs with Rt.ALT sector copying. It shouldn't - screw up your maps anymore! And if you have maps that were - screwed up with it, you can try my new map correcting key, - L.Ctrl+L.Shift+L.Enter. This key will not affect an already - perfect map. However it can SOMETIMES clean up a map that - was screwed up. I take no responsibility if it screws up - your map even more, so please check them before saving! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/16/95 - Added error correction to mmulti.obj. Mmulti.obj is like - multi.obj but it is made to work with Mark's real mode - multiplayer driver that he calls COMMIT. - - - MMULTI.OBJ vs. MULTI.OBJ: - * initmultiplayers is the same, but the parameters are ignored - * uninitmultiplayers can be called but does nothing. - * sendlogon can be called but does nothing. - * sendlogoff sends packet 255 to everybody else. It does not - need to be called any more. - * sendpacket and getpacket are the same. - * connecthead, connectpoint2[], numplayers, myconnectindex - are the same. They can be externed just like before. - * getoutputcirclesize always returns 0. It is not needed. - * setsocket does nothing. The socket is now in commit.dat. - * crctable can still be externed. - * syncstate can still be externed but is not used. - * Do not use the option[4] variable. Initmultiplayers will - always return a valid number in numplayers from 1-16. - - - You can link mmulti.obj in place of multi.obj and use - commit.dat as the setup file for multiplayer options. - - There are 2 ways you can run your game through commit: - 1. Set the launch name (usually game.exe) in commit.dat - and type something like "commit map01 /asdf" - 2. Type "commit launch game map01 /asdf". This method - is easier if you want to use the debugger with commit - since you won't have to change commit.dat constantly. - Ex: "commit launch wd /tr=rsi game map01 /asdf" - - I have not tested mmulti.obj with my BUILD game yet because - I have been using 2DRAW as my test program. I may put up a - new version of mmulti.obj with better error correction for - extremely error-prone lines soon. - - - Kgroup can now accept a parameter as a filename with a list of - files to be put into the group file. - Ex: "kgroup @filelist.txt" -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/18/95 - Found a way to greatly reduce slave "hitching" on multiplayer - games for faketimerhandler style communications. It's pretty - simple. - - Step 1: In the beginning of faketimerhandler, change - - ototalclock = totalclock; - TO: - ototalclock += TICSPERFRAME; - - This makes the timing of the game more constant and to - never miss ticks. I should have done this in the first - place all along. - - Step 2: In getpackets, (for slaves only) count the number of - times movethings is called. Normally, movethings should - be called exactly once for every time getpackets is called - inside faketimerhandler. The hitching is because - movethings is called in a 0-2-0-2-0-2 cycle instead of the - standard 1-1-1-1-1-1 cycle. This happens because the - timers of the 2 computers are aligning in such a way that - the slave is receiving the master's packets at nearly the - same time as it calls getpackets. To correct the problem, - if movethings is called an even number of times, I randomly - add or subtract (TICSPERFRAME>>1) to ototalclock. Throw - this code at the end of getpackets: - - Beginning of getpackets: - movecnt = 0; - - Where slave receives buffer in getpackets, next to movethings: - movecnt++; - - End of getpackets: - if ((myconnectindex != connecthead) && ((movecnt&1) == 0)) - { - if (rand()&1) ototalclock += (TICSPERFRAME>>1); - else ototalclock -= (TICSPERFRAME>>1); - } - - - Found a way to interpolate anything using the doanimations - code for faketimerhandler style multiplayer games. It's not - as hard as I thought it would be (and it doesn't waste too - much memory!) To smooth out doanimations, since there's no - temporary variables that can be thrown away like with tsprite, - the current doanimations positions must be backed up at the - beginning of drawscreen and restored at the end of drawscreen. - If you want smooth up&down doors, do this: - - Global declaration: - static long oanimateval[MAXANIMATES]; - - Beginning of drawscreen: - for(i=animatecnt-1;i>=0;i--) - { - oanimateval[i] = *animateptr[i]; //Backup doanimations interpolation - - j = *animateptr[i]; - if (j < animategoal[i]) - j = min(j+animatevel[i]*(totalclock-gotlastpacketclock),animategoal[i]); - else - j = max(j-animatevel[i]*(totalclock-gotlastpacketclock),animategoal[i]); - - *animateptr[i] = j; - } - - End of drawscreen: - //Restore doanimations interpolation - for(i=animatecnt-1;i>=0;i--) *animateptr[i] = oanimateval[i]; -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/19/95 - Added global invisibility variable. Initengine sets it to 0 - by default. If you set global invisibility to 1, then - all sprites with the invisible bit set (sprite[].cstat&0x8000) - will be shown. This is useful for editing invisiblie sprites. - - - Made the hitscan blocking bit for sprites be the bit checked - when using cliptype 1 instead of the blocking bit. Before - I was accidently using the clipmove blocking bit on sprites - with cliptype 1. I should have done it this way in the first - place. I hope you haven't "built" around this bug too much! - Here's how everything works now: - - Clipmove blocking bits: - Which bits: - wall[].cstat & 1 - sprite[].cstat & 1 - Used in these cases: - clipmove when cliptype = 0 - getzrange when cliptype = 0 - - Hitscan blocking bits: - Which bits: - wall[].cstat & 64 - sprite[].cstat & 256 - Used in these cases: - clipmove when cliptype = 1 - getzrange when cliptype = 1 - hitscan always -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/20/95 - Reduced some overhead memory by combining 2 large internal - arrays which were used in different parts of the engine. - This is a total savings of about 90K. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/24/95 - Changed the way 'E' mode works on ceiling and floor textures. - 64*64 and 128*128 textures are the same as before so I think - this won't screw up your existing maps. (But I can never be - sure) Now, 'E' mode always smooshes the texture size by 2 for - any size texture. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/29/95 - ÜÛÛÛÛÛÛÜ ÛÛ ÜÛÛÛÛÛÛÜ ÜÛÛÛÛÛÛÜ ÜÛÛÛÛÛÛÜ ÜÛÛÛÛÛÛÜ ÛÛ ÛÛ ÛÛ - ÛÛ ÛÛ ÛÛß ßÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ ÛÛ - ßÛÛÛÛÛÛÜ ÛÛ ÛÛ ÛÛ ÛÛÛÛÛÛÛß ÛÛÛÛÛÛ ßÛÛÛÛÛÛÜ ÛÛ ÛÛ ÛÛ - ÛÛ ÛÛ ÛÛÜ ÜÛÛ ÛÛ ÛÛ ÛÛ ßß ßß ßß - ßÛÛÛÛÛÛß ßÛÛÛÛÛÛÛ ßÛÛÛÛÛÛß ÛÛ ßÛÛÛÛÛÛß ßÛÛÛÛÛÛß ÛÛ ÛÛ ÛÛ - - New 3D EDIT MODE BUILD keys: - Press [ or ] on a ceiling or floor to change the slope. - Shift + [ or ] on a ceiling or floor to adjust finely. - Press / to reset a ceiling or floor to slope 0. - Use Alt-F in either 2D or 3D mode to change the slope's hinge. - - Sector fields used for slopes: - The useless groudraw fields, ceilingheinum and floorheinum, - are now being used as the slope value. They are treated - as signed shorts, where 0 is slope 0, of course. To enable - slope mode, you must also set bit 1 of the ceilingstat or - floorstat bits. - - Known bugs: - There are still a few bugs that I haven't gotten around to - fixing yet. They're not necessarily hard to fix - it's just - that there are a lot of little things that need to be updated - (on my part). - - - Hitscan does not hit slopes correctly. - - Rare divide overflow bug in my wallmost function only when - you're very close to a red sector line of a slope. - - Relative alignment for slopes not yet programmed. Relative - alignment for slopes will allow square aspect ratio for all - slopes of slopes. - - ALT-F code with passing loops would be nice. - - Visibility not implemented for slopes yet. - - Sometimes an annoying tiny wall is drawn at sector lines. - - Don't call me to tell me about these bugs. I know about them. - And if I didn't list your favorite bug of the day, it will - probably be brought up by the 2 internal teams now working - with BUILD. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/4/95 - Made ALT-F select any wall of a sector, even crossing loops. - In 3D mode, ALT-F now sets the selected wall directly to the - first wall. - - - Fixes related to slopes: - * Relative alignment now works. Use relative alignment on high - slopes if you don't like the way the texture is stretched - out. - * Flipping now works - * Panning now works - * Fixed seams for SOME (not all) slope borders - - - My wonderful divide overflow bugs in wallmost aren't quite as - rare as they used to be. Wait a minute - I thought I was - supposed to document bug fixes here! This is what you get - for wanting BUILD tonight. As soon as I fix these darn - divide bugs, I'll put up a new version. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/5/95 - Fixed all known divide overflow bugs related to wallmost. I - haven't gotten a divide overflow yet in the last few hours, - but that doesn't guarantee that you'll never get one. Take a - look at GROULAND. It has a cool new cylindrical tunnel. On - the other side of the level is my house in Rhode Island. - - Known bugs with slopes now: - - Hitscan does not hit slopes correctly. - - Visibility not implemented for slopes yet. - - Clipmove will not allow you to walk off high sloped cliffs. - - - Also, I noticed a rare sprite drawing clipping bug. I - don't know if this is new or not. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/7/95 - Fixed an exception 0xe bug by using tsprite[MAXSPRITESONSCREEN-2] - instead of tsprite[MAXSPRITESONSCREEN-1]. I don't understand - why this fixed it so I expect that it will come back to haunt - me. Oh happy day. :( - - - I forgot to document 2 new and useful functions in the engine: - - long getceilzofslope(short sectnum, long x, long y); and - long getflorzofslope(short sectnum, long x, long y); - - Returns the z coordinate of the ceiling/floor at that x, y - location. If the sector doesn't have a ceiling/floor slope - then it immediately returns the sector[].floorz or - sector[].ceilingz so it's not that slow. You may want to - check for slopes yourself ceilingstat&2/floorstat&2 if you - think the overhead of calling these functions are too slow. - - - Made clipmove use getceilzofslope and getflorzofslope when - checking for overlapping. - - - Cleaned up mirror code for non-chained modes a little bit. The - mirrors should no longer have a stay line on the right anymore - for these modes. - - - Added Chain-Buffer mode. See my new SETUP.EXE. Chain-Buffer - is a combination of the chain and screen buffer modes - a - buffered chain mode. This mode is faster than standard chain - mode when a lot of screen memory is being read, for example - when you use transluscence or mirrors. Also, Chain-Buffer - mode is cleaner than screen-buffer mode since you don't see - memory being copied to the screen. Unfortunately, in most - cases, Chain-Buffer is the slowest of all modes. Actually, - Chain-Buffer mode sucks. There is a use for this mode, - however! In the future, I may make some kind of chain mode - automatically switch into chain-buffer mode for extra speed - when there is a large area of transluscence, etc. - - ATTENTION PROGRAMMERS: Here is the new order of modes that - initengine accepts: - - 0 = Chain mode - 1 = Chain-Buffer mode - 2 = Screen-Buffer/VESA mode - 3 = TSENG mode - 4 = Paradise mode - 5 = S3 - 6 = Crystal Eyes mode - 7 = Red-Blue mode -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/9/95 - Fixed visibility for face sprites in high resolution modes. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/14/95 - Added a new bunch of graphics modes using the new VESA 2.0 linear - buffer. (I replaced the useless chain-buffer mode with VESA - 2.0 modes) See my new SETUP. Since most cards only support - VESA 1.2 right now, you will probably need a VESA 2.0 driver. - I have been using the UniVBE(tm) 5.1 from SciTech Software - (ftp: ftp.scitechsoft.com, www: http://www.scitechsoft.com) - Note that since I inserted the new modes between chained mode - and screen buffer mode, you will need to update your setup - program and fix your initengine calls. - - - Programmed a LRU/MRU-style cacheing system. It should be fully - compatible with the old cache1d except for the locking byte. - The locking byte would be better described as a priority byte. - Priority byte: - - 0 - non-cached memory, you NEVER set the byte to 0! - 1-199 - cached unlocked memory - 200-255 - cached locked memory - - When the cacheing system needs to remove a memory block, it - will try to remove the FEWEST number of SMALLEST blocks with - the LOWEST priority. - - Note: Never set the priority byte to a 0! Let the cacheing - system do that for you. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/15/95 - Optimized hitscan a little and made it work with slopes. - - - Made some internal things in the build editor work better with - sprites on slopes. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/16/95 - Note: Initengine now only does memory allocation for the - graphics modes. The ylookup table is calculated in - setgamemode since with VESA, I don't know certain - variables such as bytesperline until the mode is - actually set. - - - Cansee should now work with slopes properly. - - - Added a new function which is a combination of the - getceilzofslope and getflorzofslope functions. Whenever you - need both the ceiling and floor, it is more optimal to call - this function instead. The parameters are just like the other - functions except the ceiling and floor are returned through - pointers instead of a return value. - - getzsofslope(short sectnum, long x, long y, - long *ceilz, long *florz); - - - Fixed recently introduced hitscan divide overflow bug. - - - Fixed a sprite drawing clipping bug. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/17/95 - ATTENTION PROGRAMMERS: I moved the sprite shading code from - the engine into GAME/BSTUB. If you want sprites to shade - like they used to, be sure to copy the code I recently added - to the end of analyzesprites in GAME.C or ExtAnalyzeSprites - in BSTUB.C. - - - Added 2 new interesting functions to the engine to make moving - slope programming easier. These functions will align a slope - to a given (x, y, z) point. It will make the slope pass - through the point. The function will do nothing if the point - is collinear to the first wall of the sector. - - alignceilslope(short sectnum, long x, long y, long z); - and - alignflorslope(short sectnum, long x, long y, long z); -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/18/95 - Kgroup will now work with subdirectories. - - - ATTENTION PROGRAMMERS: I have not done this yet, but I am - planning on doing a new map version! Before I do it, I - want to give you a chance to give me any suggestions you may - have. The only changes I am planning on, besides re-arranging - the structures for better alignment is to give the slopes some - more bits precision. This may limit slopes to a maximum slope - of 4 (almost 76ø) which is still extremely high. Here are the - new structures that I am proposing: - - //40 bytes - typedef struct - { - long ceilingz, floorz; - unsigned short wallptr, wallnum; - short ceilingstat, floorstat; - short ceilingpicnum, ceilingheinum; - signed char ceilingshade; - char ceilingpal, ceilingxpanning, ceilingypanning; - short floorpicnum, floorheinum; - signed char floorshade; - char floorpal, floorxpanning, floorypanning; - char visibility, filler; - short lotag, hitag, extra; - } sectortype; - - //32 bytes - typedef struct - { - long x, y; - short point2, nextwall, nextsector, cstat; - short picnum, overpicnum; - signed char shade; - char pal, xrepeat, yrepeat, xpanning, ypanning; - short lotag, hitag, extra; - } walltype; - - //44 bytes - typedef struct - { - long x, y, z; - short cstat, picnum; - signed char shade; - char pal, clipdist, filler; - unsigned char xrepeat, yrepeat; - signed char xoffset, yoffset; - short sectnum, statnum; - short ang, owner, xvel, yvel, zvel; - short lotag, hitag, extra; - } spritetype; - - Note that I am adding 1 byte of filler to the sprite structure - (4K more) and 3 bytes of filler to the sector structure - (3K more). (If I'm a nice guy, one of those bytes may even - be use for fog. (DOH!)) - - - Fixed another wonderful hitscan divide bug. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/22/95 - Optimized slopes. On a 486-66 w/ local bus in VESA 2.0 320*200 - mode, a full screen slope was optimized from 24fps to 35fps! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/25/95 - Re-optimized some more assembly. - - - ATTENTION EVERYONE! CONVMAP7! You know what this means. Just - type "convmap7 *.map" and you'll be back in business. P.S. - enjoy the newly aligned structures! - - - ATTENTION PROGRAMMERS! New TRANSPAL! You can now use 2 levels - of transluscence by using just a single 64K transluscent - buffer, such as 33/67 and 67/33 transluscence. I changed the - format of palette.dat, so please run TRANSPAL before you try - running the game with the new OBJS! If you don't, the palette - tables will be screwed up. - - Old PALETTE.DAT: - 768 bytes - VGA palette - numshades*256 bytes - palookup[0] table - 32640 bytes- transluscent palette (smaller from symmetry) - - The way I used to get numshades (fun): - numshades = ((filelength-32640-768)>>8) - - New PALETTE.DAT: - 768 - VGA palette - 2 - numshades - numshades*256 - palookup[0] table - 65536 - transluscent table - - To keep things less confusing, could you all use a - transluscent constant >= 128. For example, I used 170 on - my PALETTE.DAT. - - - READ THIS! New bits added to things: - Bit 5 of rotatesprite, bit 9 of both sprite[].cstat - and bit 9 of wall[].cstat are now used for reverse - transluscence. - - - Added super-cool new feature to 2D EDIT MODE (that should have - been there from the start). Try inserting some points! - - - ATTENTION PROGRAMMERS! Removed overwritesprite. Use - rotatesprite instead. I don't want to support a function that - can totally be done with another better function. I will - eventually optimize rotatesprite for 90ø cases so it's even - faster than the current overwritesprite. If you're too lazy - to convert right now, then you can use this overwritesprite - stub function: - -overwritesprite (long thex, long they, short tilenum, - signed char shade, char stat, char dapalnum) -{ - rotatesprite(thex<<16,they<<16,65536L,(stat&8)<<7,tilenum,shade,dapalnum, - ((stat&1^1)<<4)+(stat&2)+((stat&4)>>2)+((stat&16)>>2)^((stat&8)>>1), - windowx1,windowy1,windowx2,windowy2); -} - - - Fixed the rotatesprite centerting bug in y-flipping mode. Oh - by the way, you know how I originally said the flipping bit - was x? Well, I screwed it up. It was actually y-flipping all - along. - - - This one's for hackers (N&P/Qs) In the engine, I call - getpalookup every time I need a pointer to a 256-byte - palookup table. One big limitation right now is that each - bunch of 256-byte tables has a limit of 64K because a shade - is being returned, not a 4-byte pointer. This means you - could have a maximum of 8 shades, with 8 fogs per palookup. - It's not as expandable as I originally intended since this is - a speed-critical function. It is called EVERY single time a - line is drawn - probably called 50 times more often than - faketimerhandler. - - #pragma aux bound32 =\ - "test eax, 0ffffffe0h",\ - "jz endit",\ - "cmp eax, 80000000h",\ - "sbb eax, eax",\ - "and eax, 31",\ - "endit:",\ - parm [eax]\ - - getpalookup(long davis, long dashade) - { - return(bound32(dashade+(davis>>8))); - } - - This is just a start. Eventually I hope to use some kind of - lookup table, such as: palookup = palptr[davis][dashade], - but I couldn't think of a good way to make the array small - enough for what people need. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/26/95 - Fixed drawmapview so it actually clips to the rectangular window - properly. It does not clip to startumost/startdmost so you - should call a rotatesprite to draw the status bar every frame - if it is not rectangular. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/30/95 - Fixed recently introduced mirror bug. - - - Fixed rotatesprite x-positioning bug in scale mode for weird - resolutions. - - - Fixed tilting for pure chained modes. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/2/95 - Changed setbrightness call: - - setbrightness(char dabrightness, char *dapal) - dabrightness is gamma level(0-15) - dapal is pointer to standard VGA 768 byte palette. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/3/95 - Fixed flicker in UNIVBE modes. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/6/95 - Added a global visibility variable to BUILD.H specific for - p-skies called parallaxvisibility. Now you can do lightning - effects without modifying the visibility for everything. - - - Really fixed the drawmapview window clipping this time. - - - Made my clearview function clip to the viewing window since it - is usually used just before the drawmapview function. - - - You can now use bit 6 (64) to tell rotatesprite whether or not - the tile has transparent regions or not. If there are no - transparent regions, then it would be faster to set this bit - because it doesn't have to check for color 255 at every pixel. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/11/95 - Back in RI! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/13/95 - Cleaned up setup program by having only 1 VESA menu for all - possible VESA modes. The engine will now auto-detect whether - or not your computer supports VESA 2.0. The screen buffer - menu now only supports 320*200. (I noticed that Mark's setup - program doesn't list 320*400 mode even though it is supported - by my game and UNIVBE. 320*400 is considered by some people - the next best mode after 320*200 and 640*480. You have my - permission to annoy him.) - - - I bought UNIVBE by credit card for $28! When you buy UNIVBE, - you don't have to struggle with beeps or date changing - and - it loads instantly. I try not to use TSR's whenever possible, - but I found that UNIVBE is worth wasting 8K. I don't think my - computer has ever crashed due to something related to UNIVBE. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/17/95 - Found an easy way to interpolate everything for faketimerhandler - in my game, including swinging doors, revolving doors, and - other moving sectors. My doanimations interpolation now uses - these functions instead. Check them out in my GAME: - - setinterpolation(long *posptr); //Call when door starts - stopinterpolation(long *posptr); //Call when door stops - updateinterpolations(); //Call at start of domovethings - dointerpolations() //Call at start of drawscreen - restoreinterpolations() //Call at end of drawscreen - - Call setinterpolation with a pointer to the long variable - being interpolated. If an object stops moving, you can - speed things up by calling stopinterpolation. For things - that always move, you can call setinterpolation in pre-map - and don't stopinterpolation for those things. Don't forget - to set numinterpolations to 0 in premap whenever changing - levels in the game. - - - Optimized lava. You can re-copy my code if you want. - - - Added auto screen-buffering mode for linear VESA modes. (In - case you didn't know, reading video memory can be 10 times - slower than reading non-video memory.) Auto-buffering - means that if the engine detects that more than 1/8th of the - screen has transluscence or mirrors, then it will switch into - a screen-buffering mode. Screen-buffer mode in linear VESA - not only will still have smooth page flipping, but will be - faster than standard screen buffer mode on some video cards - just because it's linear memory. (That's a good thing) - - - Optimized screen buffer modes so they copy only the viewing - window instead of the whole screen from non-video memory to - video memory. If a permanent sprite is written, as a special - case, it will copy the whole screen - but this doesn't affect - you. Me and my engine babble. - - - Moved the printext function out of the engine and into my game. - Use printext16/printext256 instead. - - - I tried removing chain mode twice and it didn't improve the frame - rates of the other modes at all. So it stays! If you don't - like it, then don't include it in your setup program. - - - Made allocatepermanenttile return 0 instead of -1 if something - bad happens. My GAME.C was crashing in windows with a memory - error because I was assuming all memory pointers were - positive. Please make sure your code will work if an - allocation function returns a negative pointer (Windows often - returns negative pointers). -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/19/95 - Tried to make pushmove work with face sprites, but it kept making - the player die too much. Also it presented some interesting - new problems, such as: You get pushed by your own bullets - that you just shot - and get this - if you don't temporarily - set yourself to non-blocking you kill yourself because you're - inside you're own sprite! So I have decided to comment out - this code for now. - - - Fixed hitscan bug with ceiling slopes. - - - ATTENTION PROGRAMMERS!!! PERMANENTWRITESPRITE was removed from - the engine and be put into my game as an emulated function. - If you still use permanentwritesprite, get the emulated - function out of my GAME.C. - - Drawing permanent areas is now easier than ever!!! Simply - call rotatesprite with bit 3 (&8) set or the - permanentwritesprite stub call, and the engine now - automatically takes care of copying the permanent region - to all necessary pages in the future. It even keeps track - of whether the call was before or after drawrooms! - I am using an internal fifo to back up the parameters for each - rotatesprite call. It can support up to 512 calls per - page right now. This number can get reached quicker than - you think, especially if you use fonts with shadows behind - each character. Permanentwritespritetile could also go - over the limit in hi-res modes since each tile is considered - a separate call. - I optimized out the case where an older rotatesprite region gets - completely covered by a newer rotatesprite region with bit 6 - (&64 for non-masking) set. Currently this has a few - limitations - such as the x, y, zoom, and ang must be the same - right now to knock out an older rotatesprite. - - - I corrected an off-by 1 error in my GAME.C for window size - calculations. I simply used more precision. Ex: - * changing (xdim>>1)-(screensize>>1) to ((xdim-screensize)>>1) - * using the scale function instead of a separate mul & div. - By the way, if you haven't already, please stick your screen - re-sizing code BEFORE drawrooms. It will make the screen - re-size update more responsively and you're less likely to get - drawing bugs. - - - Future plans for possible rotatesprite optimizations: - 1. Angle is 0, 512, 1024, 1536 - 2. Bit 6 (&64) is set for non-masking mode - 3. tilesizy[tilenum] is a power of 2 - 4. If coincidentally, x=34562, y=34682, and zoom=67275 -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/20/95 - Fixed vertical line shading bugs when looking at walls at harsh - angles. - - - Made masked walls clip to slopes properly. TRY IT! - (hope you didn't "BUILD" on this bug!) - - - Fixed overflow and precision bugs with extremely long walls. - I even got the chance to optimize out a multiply in the - wallmost clipping code! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/25/95 - Now absolutely everything in my game is being interpolated - for smooth play - including subways! No interpolation - disable variable exists any more. The setinterpolation - function is really easy to use. Try it! - - - Programmed VISIBILITY for slopes!!!!! On my P-100, the slopes - are almost as fast as they used to be. You can now start - adjusting the shades of slopes. - - - The shading lines on ceilings and floors now match to the shading - lines on walls. Before they didn't match. (oops). - - - - For those of you who want to program their own palette functions, - using my gamma correction lookup table, here's the code: - - extern char britable[16][64]; - - koutp(0x3c8,0); - for(i=0;i<768;i++) - koutp(0x3c9,britable[curbrightness][palette[i]]); - - If you use this code, don't bother calling setbrightness any - more. The only bad thing about programming this yourself - is that you lose support for red-blue glasses mode. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/26/95 - Added support for VESA 2.0 protected mode extensions. With the - protected mode extensions, the page-flipping is less likely to - flicker, if at all. This is because the retrace timing isn't - screwed up as badly as if it had to switch to real mode. - - - Fixed a weird buffer bug in my GAME.C. I was using tempbuf in - faketimerhandler/getpackets for sending packets. I was also - using tempbuf in many other places, such as my printext - function. Unfortunately, since rotatesprite is now called - for each character, faketimerhandler would sometimes get - called and the rest of the word got screwed up. Please make - sure you are not sharing any buffers in faketimerhandler / - getpackets with the rest of your code. - - - Fixed a bug for linear VESA modes. Now, the screen will update - properly when calling rotatesprite and nextpage for the first - time before any drawrooms calls. This used to not work right - at my "waiting for other players" code in this mode. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/27/95 - Did you notice I fixed some of the weird cases with slope drawing - in the last upload? I fixed things like when a ceiling of - one sector is partially below the floor of another, etc. - - - Fixed precision of shading lines on slopes. - - - Fixed visibility overflow when slopes are near horizons. This - means you won't see ugly bright pixels any more when you're - looking at a slope at an extremely sharp angle. - - - Fixed a bug in BUILD 3D EDIT MODE with slopes. Now when you - press '/' on a ceiling or floor slope, it stays straight - until you press [ or ] on it again. Before, sometimes the - ceiling would stupidly get sloped again if you pressed [ or ] - on the floor and vice versa. - - - Removed some unnecessary sounds from my game. This doesn't - really affect you people out there. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/30/95 - Fixed recently screwed up p-sky tiling. - - - Made Editart work with map version 7 for tile sorting and the - Alt-R command. Alt-R does not scan the heinum's of sectors - any more, and only adds in the overpicnum if a masked or - 1-way wall is actually defined on the map. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/31/95 - Fixed a bug with my slopalookup array. It was sometimes writing - up to 3 bytes after the end of the array. - - - Fixed recently screwed up p-sky tiling for real this time. - - - Permanentwritesprite is out of my game. Here it is just in case - I will need it again for future reference. - - permanentwritesprite (long thex, long they, short tilenum, - signed char shade, long cx1, long cy1, - long cx2, long cy2, char dapalnum) - { - rotatesprite(thex<<16,they<<16,65536L,0,tilenum,shade, - dapalnum,8+16,cx1,cy1,cx2,cy2); - } -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/1/95 - Guess what? I turned 20 today. This means I'm no longer a - teenage programming genius. Doesn't that just suck. If you - guys don't get a game out by the next time my age plus - plusses, I'm going to get really p-skied off and kill some - people. That would be bad. (When I say killing, I mean - virtual killing in the entertaining game of Ken-Build - in which a fun time is always had by all.) So put on your - happy fun smiles and work out all those rotatesprites, - fsyncsyncvel.bits, and interpolation fifos before it's - ototalclock! - - - Optimized the NON-MASKING cases of rotatesprite for - NON-(un)CHAINED modes. This means that low detail modes, - status bars, and permanent background tiles are now drawn - about as fast as they're ever going to be drawn! Try the - F5 key in my game to compare frame rates if you want. I have - not optimized guns and stuff yet. That's next on my list. - - - Made the engine call new internal functions, kmalloc and kfree, - instead of malloc or free. Unless you're a hacker and wrote - your own memory manager (like N&P/Qs) you can just ignore - this message. - void *kmalloc(size_t size) { return(malloc(size)); } - void kfree(void *buffer) { free(buffer); } - - - Supposedly fixed the new rotatesprite and linear vesa crashing - bugs. Since I'm not totally sure that I fixed the problems, - all I can do is hope that I don't get too many phone calls! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/4/95 - Did some neat optimizations that will make the drawing code - faster, especially in hi-res modes, but I'm sure nobody cares. - Instead I'm probably just going to get 10 totally different - bug report stories. So I'll be talking to you soon! - - - Fixed stupid bugs in cansee. If the 2 objects were in the same - place, sometimes it returned 1 even if it couldn't see you. - I made 2 fixes: - This one to fix overlapping: - - if ((xs == xe) && (ys == ye)) return(sects == secte); - - And I removed the early out return(1) optimization - I - put this after the big loop instead: - - for(i=danum-1;i>=0;i--) - if (clipsectorlist[i] == secte) return(1); -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/7/95 - Optimized the awful shld's out of my divscale's in pragmas.h. - You can update to the new pragmas.h if you actually use it. - - - Remember the lovely horizontal lines on top of face sprites. - Well you won't be seeing them any more. At least the case - I trapped works better than before. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/8/95 - Made krand generate better random seeds. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/9/95 - ATTENTION PROGRAMMERS! Moved part of stat bit 3 of rotatesprite - to bit 7. Have you noticed that your menu code was kind of - screwy in modes where numpages > 1? This is because I made - rotatesprite automatically copy to all pages whenever the - "don't clip to startmost's bit" (bit 3 or +8) was set in - the stat bit of rotatesprite. To give you more control, I - moved the auto copy to all pages bit to bit 7 and left bit 3 - as the don't clip to startmosts bit. If you want your code - to work the same as the last update of BUILD, simply go - through all your rotatesprite calls and add 128 in addition - to the stat bit whenever you were adding 8 before. See the - revised rotatesprite documentation: - -rotatesprite (long sx, long sy, long z, short a, short picnum, - signed char dashade, char dapalnum, char dastat, - long cx1, long cy1, long cx2, long cy2) - - (sx, sy) is the center of the sprite to draw defined as screen coordinates - shifted up by 16. In auto-scale mode, be sure that (sx, sy) is using - a 320*200 size screen even though the real resolution may be different. - (z) is the zoom. Normal zoom is 65536. > is zoomed in, < is zoomed out. - (a) is the angle (0 is straight up) - (picnum) is the tile number - (dashade) is shade number - (dapalnum) is the palookup number - - if ((dastat&1) != 0) - transluscence - if ((dastat&2) != 0) - auto-scale mode - Auto-scale mode will automatically scale from 320*200 resolution - coordinates to the clipping window passed (cx1, cy1, cx2, cy2). In - auto-scale mode, don't pre-scale the (sx, sy) coordinates. Simply pass - (sx, sy) as if the resolution was 320*200 even though it may be - different. This means that you shouldn't use xdim or ydim to get - (sx, sy). - if ((dastat&4) != 0) - y-flip image - if ((dastat&8) != 0) - don't clip to startumost/startdmost - if ((dastat&16) == 0) - use Editart center as point passed - if ((dastat&16) != 0) - force point passed to be top-left corner - if ((dastat&32) != 0) - use reverse transluscence - if ((dastat&64) == 0) - masked drawing (check 255's) (slower) - if ((dastat&64) != 0) - draw everything (don't check 255's) (faster) - if ((dastat&128) != 0) - automatically draws to all pages as they come - - (cx1, cy1, cx2, cy2) - The clipping window. These coordinates are never - scaled, not even in auto-scale mode. Usually you should pass them as - (windowx1,windowy1,windowx2,windowy2) for things scaled to the viewing - window or (0L,0L,xdim-1L,ydim-1L) for things scaled to full screen. - Probably the only time you wouldn't follow this rule is if you program - a non-scaled tiled background function. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -11/21/95 - Optimized cansee - before it was checking each red wall 2 times - as much as it needed to. Now it only checks the side facing - the first object passed to cansee. Since this optimization - is only 1 line, I don't think I messed anything up this time. - - - Made cansee not pass through 1-way walls. This means that the - order of points passed to cansee could give you different - results, but only for 1-way walls. - - - FIXED CRASHING AND PRECISION ON HIGH SLOPES!!! Try it for the - first time again! The bug was: In wallmost, if a slope's - line was getting clipped by both the top and bottom of the - screen, the x-intercept of the bottom was calculated wrong. - And if you were real lucky, if the x-intercept could have been - so wrong that a loop would happily overwrite random chunks of - memory. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -12/1/95 - In my GAME.C, made tilting zoom in smoothly as it rotates to - hide the ugly corners. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -12/4/95 - Made some more optimizations to rotatesprite - added more cases - for removing things from the permanent list early, such as: - any full screen rotatesprite with 64 knocks everything else - off the list, and any rotatesprites with zoom=65536,ang=0, - stat&64 will knock out anything totally under its rectangle. - These optimizations seemed to actually fix some bugs. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -12/10/95 - Well, well, well. It has now been 2 years since you know what - was released and Apogee still hasn't put out a (real) Build - game. Trivia of the year: Did you know that the first Build - game was originally scheduled to be released a month before - Doom was to be released? Maybe I should rename the "Build" - engine to the "ROTTT" engine because it's probably just going - to rot on my hard drive for another year until all the games - just get cancelled. PROVE ME WRONG! - - - Added selectable viewing angles - not locked at 90ø anymore! - Try playing around with the ( ) - = keys on the main keyboard - in my new BSTUB.C. See the example code in BSTUB for setaspect. - Use the setaspect function to control both the viewing range - angle and the y/x aspect ratio. - - setaspect(long daxrange, long daaspect) - - For a standard 90ø 320*200 screen, daxrange and daaspect are - 65536. For square aspect ratio at 320*400, set daaspect - to 131072. Since daxrange is actually zoom, you must - modify the aspect ratio inversely if you only want to - change the viewing angle. - - ATTENTION EVERYONE! To make parallaxing skies work with larger - than 90ø viewing ranges, I had to change some things around - in TABLES.DAT. Don't forget to update to the new one! The - new one is smaller because I removed a useless array. - - - Improved red-blue glasses mode by fixing some palette problems - and removing the overlap problem on the right side of the - screen. It still has some things wrong with it though. - - - Perfected screen tilting by using the new setaspect function. It - now tilts all 360ø smoothly with no zoom change and with no - ugly corners. This is possible only because you can now set - the viewing angle higher than 90ø. - - - Fixed a flicker bug with permanent rotatesprites in multi-page - modes. When rotatesprite was called because drawrooms in a - multipage mode, the rotatesprites were being called in the - wrong order from the fifo for the first page. Note that - before, the auto-knock out feature sometimes hid the problem. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -12/11/95 - Made EDITART work with the new TABLES.DAT. - - - Upgraded to Watcom 10.5. The engine is now about 1K larger, - and 0.0000001% faster. - - - Added some interesting compression routines to cache1d.obj, - dfread and dfwrite. These functions take the same parameters - as fread and fwrite respectively. These functions are useful - for loading/saving games or for recording demos. - - Note: Since these functions need to allocate 118K off of my LRU - cacheing system, you must not call them before - initcache(loadpics) is called. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -12/18/95 - Made rotatesprite use getpalookup to get the palette shade. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -12/31/95 - Cleaned up KGROUP.EXE and wrote a KEXTRACT.EXE utility. With - KEXTRACT, you can extract any files from a group file. - Note that in KGROUP, DOS handles the ? and * wildcards whereas - in KEXTRACT, I had to program the wildcards myself for finding - files inside the group file. The following combinations - should work: *.*, *.map, game.*, tiles???.art, *.k?? - - - NEW NETWORK METHODS! TRY MY GAME IN MULTIPLAYER MODE! MODEM! - - SUMMARY: Lag Time: ZERO! That's right Z.E.R.O. (0) - Smoothness: Perfect on ALL computers! - - My new network code builds upon everything you've already - programed with faketimerhandler, getpackets, movethings, and - domovethings, so you don't need to throw away any of that - great stuff. There are actually 2 totally separate things I - did to improve the multiplayer performance. First I added a - new network mode which sends packets in a different way (this - is way Doom actually does it) Then I found a way to reduce - lag-time to 0 with perfect smoothness. (Doom does NOT do - this, but G&S like it anyway for some reason.) I will first - describe the new network mode: - - ------------------------------------------------------------- - 1. First, let me describe the new network mode. Instead of - a master/slave system, every computer sends its own controls - to every other. You are currently using the master/slave - system which sends 2(n-1) packets per frame where n is the - number of players. My new network mode sends n(n-1) packets - per frame and treats every player evenly. See the chart - below of packets per frame: - - 2(n-1) method: n(n-1) method: - 2 players 2 2 - 3 players 4 6 - 4 players 6 12 - 5 players 8 20 (OUCH!) - 6 players 10 30 (OUCH!) - 7 players 12 42 (OUCH!) - 8 players 14 56 (OUCH!) - - - You may be asking why I am bothering you with this new - network method if it sends more packets then the old one? - I'll explain: With the old network method, slaves had to - wait for their packets to take 2 trips before they could move, - whereas with the new method the packets need to take only 1 - trip. Also with the new method the players are treated - evenly. For 2 players, the new network method is definitly - the mode of choice since it sends the same number of packets - AND the packets can be smaller since each computer only needs - to send its own controls to the other computer, not everyone's - controls (good for modem play). It's up to you what your - break even point is before you switch into the old network - method. I recommend: 1-4 New, 5+ Old. - Now let me explain how the new method REALLY works. Since - every computer must call the movement code in the same order - to stay in sync, all computers must wait until every packet - is received for that frame before it can actually go into - the movement code. You could say that all the computers are - half-slaves. Your computer should always be ahead of the - other computers. If you are player 0, the packets you - currently have might look like this: - - Chart for Player 0: - - Player 0 Player 1 Player 2 - Tic 0: GOTMINE------GOT--------GOT------> MOVE! - Tic 1: GOTMINE------GOT--------GOT------> MOVE! - Tic 2: GOTMINE--X WAITING... GOT CAN'T MOVE! - Tic 3: GOTMINE WAITING... WAITING... CAN'T MOVE! - Tic 4: GOTMINE WAITING... WAITING... CAN'T MOVE! - - As soon as player 0 receives player 1's next packet, - player 0 can call domovethings for tic 2. - One interesting complication of the new network method is - the timing. If for some reason player 0 sends packets faster - than player 1, then player 1 will have no lag and player 0 - will start with twice the normal lag which will increase - until bad things happen. See this chart: - - Player 0's side: | Player 1's side: - Player 0: Player 1: | Player 0: Player 1: - Tic 5: GOTMINE GOT (MOVE) | GOT GOTMINE (MOVE) - Tic 6: GOTMINE WAITING | GOT GOTMINE (MOVE) - Tic 7: GOTMINE WAITING | GOT GOTMINE (MOVE) - Tic 8: GOTMINE WAITING | GOT GOTMINE (MOVE) - Tic 9: GOTMINE WAITING | GOT GOTMINE (MOVE) - | GOT - | GOT - | GOT - - This can be corrected by sending a byte which tells the - other computer how many packets behind it is. You want the - other computer to be a little behind. Player 0's packet - delta in this case would be 4. Player 1's would be -3. - - Another interesting thing about this network method is - that a slave's packet cannot be skipped like in the - master/slave system. - - The actual code for everything described above is already - in my GAME.C and working perfectly. Go through the file - searching for the keyword, "networkmode". If it is non-zero, - that's the new mode. Look mainly at the section inside - faketimerhandler and case 17 of getpackets. - - (I've talked about "2(n-1)" and "n(n-1)" networking modes. - Believe it or not, it's possible to do a network mode as - low as an "n" mode. I haven't done it due to some - inherent problems. I'd be impressed if you can figure out - how this one works) - ------------------------------------------------------------- - 2. Now I'll type about the "KLAG-0 Technology" I promised you. - - The secret to life is, " - NO CARRIER - - Why do you have to wait for another computer to tell you - when to move when you already know where you want to go? - So I added a fake set of variables that simulate - where the player's x, y, z, and ang variables will be after - it does sync crap with other computers. I added a function - called fakedomovethings which is called in the same fashion - that domovethings would be called in a 1-player game. - Fakedomovethings modifies ONLY the fake x, y, z, and ang - variables. It is a shadow of the processinput function. It - only needs the parts of processinput that modify the position - of player[myconnectindex]. If it modifies real variables, - the game will get out of sync. - Sometimes the fake variables can get out of sync with the - real variables. This can happen if you walk into another - player or anything else that moves. This doesn't happen too - often though and when it does, there are things that you can - do to smooth out the jump to the right position. This brings - me to my other new function: fakedomovethingscorrect. - The easy way to correct the player's position in a smooth - way is to say something like: fakex += ((realx-fakex)>>3); - This would effectively move the player 1/8th of the way closer - to the real position. The problem with this method is that - the realx and fakex are not sampled at the same time, - therefore creating more error than isn't any. - So instead of comparing your fake position with where the - real position was a few tics ago, I chose to compare both - of them a few tics ago. FIFO time! To do this, I am keeping - a fifo of the new fake positions and comparing the positions - as the real positions come. Now that they're being compared - at the same tic, correction will only occur when you've truly - run into a moving object. - ------------------------------------------------------------- - I hope all this was as much fun for you to read as it was for - me to type. If you don't understand it, then I was probably - just trying to confuse you with all the possible word - combinations I could come up with that contain the letters in: - "fake", "sync", and "fifo". -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/6/96 - Made RT.SHIFT highlighting in build.obj not pick up non-existent - sprites in the selection rectangle. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/9/96 - Fixed a rare hitscan overflow bug for sectors that had a - ceiling&floor z-difference of more than 400000 z-units. - (About 20 stories tall) -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/15/96 - Changed something in rotatesprite so that status bars could be - clipped easily by using the clipping parameters. (I never - knew this didn't work until now) This change will only affect - your code if you were using bits 2+8 and the clipping window - was something other than the standard (0,0,xdim-1,ydim-1). - - - Improved fakedomovethingscorrect. Before when there was an - error, I was adding the difference into the current - position. This method conflicted with pushmove - where - sometimes it never fully corrected the position leaving you - stuck behind a wall. Now I make your position the position - it would have been if it had predicted the right position - several ticks ago. In other words, I set the my... variables - to the real, older position then call fakedomovethings for - every tic from the time of the real, older position up to - the current time. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/19/96 - Added snow reduction code to setpalette. It takes about 4 ms - to set a full palette. I write during the horizontal retrace - period to save time. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/23/96 - Added hack to loadboard to make it load a board only from the - group file if the last character of the filename is a 255. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -1/25/96 - Fixed a stupid bug in UNIVBE segmented modes so it doesn't - flicker anymore. Why didn't you guys tell me about this - sooner! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/1/96 - Optimized cansee according to Peter's suggestions. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/2/96 - Made setview calls not mess up the stereo vision variables. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/5/96 - ATTENTIONS ALL PROGRAMMERS!!! If you use use any VGA registers - (such as 0x3da, or 0x3c6 - 0x3c9), you will need to re-code - those sections of code. Please make your BSTUB's work with - this too! - - 1. If you use register 0x3da, limitrate, or qlimitrate, you - will need to do a special check to see whether or not the - video mode is VGA register compatible. If you do not - check this, then the computer may lock up because register - 0x3da simply doesn't change on certain video cards. - Unless you know the code won't be called in VESA mode, you - need to perform this check. Here's an example of how you - can do this check: - - Instead of calling limitrate (or your own 0x3da function): - limitrate(); - Do this: - //extern char vgacompatible; - if ((vidoption != 1) || (vgacompatible == 1)) limitrate(); - - 2. You must now use my function to set or get any palette - registers. This means that the keywords "3c7", "3c8", - and "3c9" should not even exist in your code. I really - didn't want to force you to use my palette functions, but - since VESA 2.0 supports non VGA compatible cards, you must - do it this way. If you use setbrightness for all of your - palette setting, then you can ignore this. Note that the - palette format here is VESA's palette format, which is - different than my other palette control functions. It's - 4 bytes and RGB are backwards. Here are the function - prototypes: - - VBE_setPalette(long palstart, long palnum, char *dapal); - VBE_getPalette(long palstart, long palnum, char *dapal); - palstart is the offset of the first palette to set - palnum is the number of the palette entries to set - dapal is a pointer to the palette buffer. The palette - buffer must be in this format: - char Blue, Green, Red, reserved; - I think this format stinks, but since VESA 2.0 uses - it, the code will run fastest if the buffer is not - copied. You can make your own cover up function if - you don't like this format. - - This example sets up a wasteful gray scale palette: - - char mypalette[1024]; - for(i=0;i<256;i++) - { - mypalette[i*4+0] = (i>>2); //Blue - mypalette[i*4+1] = (i>>2); //Green - mypalette[i*4+2] = (i>>2); //Red - mypalette[i*4+3] = 0; //reserved - } - VBE_setPalette(0,256,mypalette); -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/7/96 - Did some minor optimizations to functions that use cliptype. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/9/96 - ATTENTION PROGRAMMERS!!! There is no such thing as a cliptype - anymore! Instead you use clipmasks. Clipmasks are much better - because it gives you full control of which bits are used to - test whether or not a sprite or wall will block things. - - Let me refresh your memory on how cliptypes used to work: - For CLIPMOVE, PUSHMOVE, and GETZRANGE: - If (cliptype == 0) these bits were the blocking bits: - (wall[].cstat&1), (sprite[].cstat&1) - If (cliptype == 1) these bits were the blocking bits: - (wall[].cstat&64), (sprite[].cstat&256) - For HITSCAN, cliptype was not passed and assumed to be 1: - (wall[].cstat&64), (sprite[].cstat&256) - - Note that I added these 2 defines in BUILD.H: - #define CLIPMASK0 (((1L)<<16)+1L) - #define CLIPMASK1 (((256L)<<16)+64L) - - In order to make clipmasks work, I had to change the parameters - to these 4 important functions. CLIPMOVE, PUSHMOVE, GETZRANGE, - and HITSCAN. For CLIPMOVE, PUSHMOVE, and GETZRANGE, I simply - made the cliptype from a char to a long. For HITSCAN, I had to - add the clipmask parameter at the end. Here are the new function - prototypes: - -clipmove (long *x, long *y, long *z, short *sectnum, long xvect, long yvect, - long walldist, long ceildist, long flordist, unsigned long clipmask) - -pushmove (long *x, long *y, long *z, short *sectnum, - long walldist, long ceildist, long flordist, unsigned long clipmask) - -getzrange (long x, long y, long z, short sectnum, - long *ceilz, long *ceilhit, long *florz, long *florhit, - long walldist, unsigned long clipmask) - -hitscan (long xs, long ys, long zs, short sectnum, long vx, long vy, long vz, - short *hitsect, short *hitwall, short *hitsprite, - long *hitx, long *hity, long *hitz, unsigned long clipmask) - - You should convert your source code using these rules: - * For CLIPMOVE, PUSHMOVE, and GETZRANGE, look at the last - parameter. If it is a 0, then change it to say CLIPMASK0. - If it is a 1, then change it to say CLIPMASK1. - - * For HITSCAN, add a new parameter that says CLIPMASK1. - - * If you have your own movesprite function, then you will - need to make the cliptype parameter into a long variable. - - - If you want to set a range for hitscan, or optimize its - performance, you can now extern these 2 variables from - the engine. You can set them just before you call hitscan. - If you DO choose to screw around with these variables, then - you must set them before EVERY hitscan in your code. - I have them defaulting to a really high number, totally out - of range of the map, but not high enough for a subtraction - to overflow it. These variables are used in hitscan only - to compare whether the new hit is closer then the last one. - - long hitscangoalx = (1<<29)-1, hitscangoaly = (1<<29)-1; -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/13/96 - Fixed a bug in clipmove that showed up in the latest upload - related to sector searching. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/18/96 - Re-wrote waitforeverybody / case 250 of getpackets, so the slave - sends acknowledge packets in a better way. Before there was - a possibility of a slave sending an invalid acknowledge - packet if the last packet received was not 250. - - - ATTENTION PROGRAMMERS! Setgamemode now returns -1 if the mode - is invalid or 0 if it is valid. Since the engine no longer - quits to DOS from an invalid video mode, you must program the - -1 case or else the computer will probably lock up! -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -3/5/96 - Solved tile index corruption bug in EDITART. After looking at - the latest art files I have from you, It looks like SW has - this problem, but DUKE and BLOOD seem ok. Let me explain: - In Editart 'V' mode (with no tile report), when you use - INSERT or DELETE, it very quickly moves all tiles after the - cursor forward or back 1. With multiple art files, this - operation would be very slow, since I'd have to load and - save every art file after the current one. But I figured - out a way to still keep it fast - instead of reading and - writing all the later art files, I instead changed just the - headers that tell which tile indeces the art files start and - end with. This works nice when you have 1 big art file, or - only 1 person using EDITART to change stuff. - Unfortunately, some of you have been passing around - individual art files and this is where the problem comes in. - If either person used INSERT of DELETE in 'V' mode and passed - an individual art file to another person, the headers could - possibly conflict and cause strange lockups or crashes in - EDITART, BUILD, or GAME. - So I fixed the problem by making EDITART only change the - CURRENT art file. Insert mode will now delete the last - tile in the CURRENT art file, so be careful that the last - tile in the CURRENT art file is blank. Delete will now - insert a blank tile at the end of the CURRENT art file. - If your ART files are already corrupt, you can run - RSIZEART.EXE and agree on a number of tiles per file. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -4/27/96 - Fixed a bug where rotatesprite seemed to clip the tile - to the viewing window even though stat&8 (don't clip - to startumosts/startdmosts) was set. The problem was - actually related to an optimization in the VESA blitting - code that copies only the screen if it thinks nothing - was drawn outside of the viewing window. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/15/96 - I must have added a whole bunch of unnoticable optimizations - since the last time I typed stuff into this file, but since - I didn't keeping track of it, I couldn't tell you what they - were off hand. - - - I added support for the 'new' Crystal Eyes in such a way where - you don't have to mess with the timer. I use the real-time - clock (IRQ8) in order to avoid conflicts. Crystal Eyes mode - works only in VESA 2.0 modes with at least 4 pages. The nice - thing about this mode is that you can switch in and out of - it easily during the game. There are 2 very simple functions - and 3 variables you can extern. To use Crystal Eyes mode, - simply call initstereo(). Initstereo should be called after - setgamemode and the palette is loaded into the VGA. To - return back to normal mode, simply call uninitstereo(). - Here's what the code would look like: - - extern long stereomode, stereowidth, stereopixelwidth; - - if (KEYTOTOGGLESTEREOMODE) - { - KEYTOTOGGLESTEREOMODE = 0; - if (stereomode == 0) - initstereo(); - else - uninitstereo(); - } - - Notes: - * The following 2 variables can be changed any time, and - should always be >= 0. - - stereowidth: distance between left and right eyes - stereopixelwidth: parallax - pan offset in pixels between - left & right screens - - * initstereo automatically sets stereomode to nonzero and - uninitstereo automatically sets stereomode to 0. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/5/96 - Made cache1d.obj support up to 4 group files at the same time. - To use multiple group files, simply call initgroupfile again. - You need to uninitgroupfile only once. This is useful if - users want to add their own .ART, .VOC, or other files and - distribute it all in one file without telling people they - need to back up stuff. For example: - - Beginning of program: - initgroupfile("duke3d.grp"); - if (usergroupfile) - initgroupfile(usergroufile); - - End of program: - uninitgroupfile(); - - Here's the order cache1d will search for a file when - kopen4load is called. Remember that the second parameter - to kopen4load is the searchfirst parameter. If you set - this variable to non-zero, you can tell kopen4load to search - the main group file only. This is useful if invalid user - files are detected. - - if (searchfirst == 0) - { - 1. Look for it as a stand-alone file - 2. Look for it in the 4th group file (user group file) - 3. Look for it in the 3rd group file (user group file) - 4. Look for it in the 2nd group file (user group file) - } - 5. Look for it in the 1st groupfile ("duke3d.grp") - 6. If file still not found, return -1 - - - Fixed a stupid bug with choosing the side of a red line in BUILD - 2D edit mode. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -7/24/96 - Increased MAXTILES to 6144. Fixed some scrolling errors related - to MAXTILES in 'V' mode of EDITART and BUILD. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -8/20/96 - Made it possible to safely default to NORMAL mode 320*200 when - VESA is not supported or found. Check out the beginning of - my setup3dscreen function. It shows how you can offer the - player a choice of quitting to DOS or continuing in NORMAL - mode. It is very annoying when setting up multiplayer games - when the game always quits to DOS because somebody forgot - to load their VESA driver. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/6/96 - Moved internal function, setfirstwall, in BUILD.OBJ into - ENGINE.OBJ because it can be useful to game programmers. - This function sets the first wall of a sector to be the - wall index passed. This function is useful for setting - the hinge wall for slopes or relative alignment. (ALT-F - uses this function) Here's the function: - - setfirstwall(short sectnum, short newfirstwall) - - - Added a variable, clipmoveboxtracenum, to ENGINE.OBJ which can - be externed. As a special case, if you set it to 1 just - before calling clipmove, then clipmove will return when it - first hits a wall - in other words, the (x,y,z) that clipmove - returns will be before any sliding calculations occur. Be - sure to set clipmoveboxtracenum back to 3 after calling - clipmove. - - This is how it is defined in ENGINE.OBJ: - long clipmoveboxtracenum = 3; - - Example of calling clipmove with no sliding: - clipmoveboxtracenum = 1; - i = clipmove(...); - clipmoveboxtracenum = 3; -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -9/25/96 - Removed support for specially optimized TSENG, Paradise, and S3 - modes. If you want the engine to run as fast on these cards, - get Scitech Software's latest Vesa 2.0 driver. - - - ATTENTION PROGRAMMERS! Added video mode changing during the game. - I moved the option, xdim, and ydim parameters from initengine - into the setgamemode function. - - Here are the updated prototypes for the 2 functions: - initengine(); - setgamemode(char newvidoption, long newxdim, long newydim); - - You are free to call setgamemode as often as you like. If you - have very low memory, it's possible that the call will fail - and quit to DOS with one of those awful CACHE SPACE ALL LOCKED - UP messages. - - Note: When updating your code, be careful to not rely on - vidoption, xdim, of ydim being valid until your first - setgamemode call. If you're not careful with this, you may - get a divide by zero or something. I had a bug in my GAME.C - where I was calling setview between initengine and - setgamemode. I had to move setview after setgamemode. - - - Added function to the engine that returns all valid VESA modes. - - getvalidvesamodes(); - - This function prepares the list of valid VESA modes in these - new variables which I put in BUILD.H. This function needs to - only be called once, but it doesn't hurt to call it multiple - times since I have a flag that checks if it has already been - called. - - EXTERN long validmodecnt; - EXTERN short validmode[256]; - EXTERN long validmodexdim[256], validmodeydim[256]; - - validmodecnt - number of available 256 color VESA modes. - validmode[] - array of vesa mode numbers (640*480 is 0x101, etc.) - validmodexdim[] - array of x dimensions for each mode - validmodeydim[] - array of y dimensions for each mode - - In my GAME.C, I have code that cycles through all VESA modes - and screen buffer mode when you press F4. Search for the - keyword "//F4" to find it. - - Note: Be careful when you call setgamemode! Be sure that it - is not called inside any function of sub-function of - faketimerhandler because this would be in the middle of the - drawing code. Actually, the safest place to call setgamemode is - right after nextpage in your main drawing loop. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -12/13/96 - Fixed the nasty caching bug first found in the Plutonium version - of Duke3D. I was using copybuf when I should have been using - copybufbyte. - - - Made the '>' key in 3D EDIT MODE not lock up any more for - textures that have non power of 2 tilesizy's. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -2/12/97 - Optimized mirror code so it x-flips only the bounding rectangle - (x AND y). Actually calculates left & right boundaries instead - of using the horizontal line checking stuff which didn't really - work all the time anyway. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -5/22/97 - Frank noticed a divide overflow in clippoly when drawmapview was - in hi-res mode. -fixed by lowered precision from 16 to 12 - bits. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -6/2/97 - Added support for the Nuvision 3D-Spex stereo glasses. I renamed - initstereo to setstereo and got rid of uninitstereo. Here's - complete documentation for all of the new stereo glasses stuff: - - setstereo(0); //Set to default normal non-stereo mode - setstereo(1); //Use Stereographics Simuleyes (white line code) - setstereo(2); //Use Nuvision 3-D Spex stereo (uses LPT1) - - //You can extern these 2 variables from the engine to add - //your own stereo adjustment code - extern long stereowidth = 23040; - extern long stereopixelwidth = 28; - - It would be nice to allow the adjustment of these variables - inside the game, but if you're too lazy, it would be nice to - have some way of modifying it. - Please do not extern stereomode any more since I use it now - to uninit the old mode automatically. Use your own current - stereo mode variable. -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ -10/4/97 - I have upgraded to Watcom 11.0. The only changes I had to make - in the engine were some "#pragma push" and "#pragma pop" - calls in BUILD.H since the default structure packing alignment - was moved from 1 to 8. The sector, wall, and sprite structures - are already aligned well and must remain the same for .MAP - files to remain compatible. - - - Increase MAXTILES for all utilities (EDITART,BUILD,GAME,etc.) to - 9216 for Xatrix. - - You may have some initial bugs with EDITART when you add new - tiles for the first time. I haven't touched the code in years - and I'm afraid if I did, I'd mess it up more. One bug I know - of is this: Let's say you have 256 tiles per art file, and - then you add 1 silly tile way up at picnum=8500. When you - save and quit, your directory may look like this: - - TILES000.ART - TILES001.ART - TILES002.ART - TILES029.ART - - When you load EDITART again, that 1 tile will not appear unless - you kind of mess with it and scroll around for a while. This - is because EDITART loads TILES###.ART files until 1 is not - found, meaning that it will stop when it doesn't find - TILES003.ART. There are probably some other nasty bugs like - this. To get around it, you could add 1 tile to the next file, - save and quit. Or you could use RSIZEART.EXE to make 1 huge - ART file, add 1 tile way up high (if you have enough memory), - and then run RSIZEART.EXE again to 256 tiles per file or - whatever you like. Remember that the ART files need to be split - in such a way that each individual .ART file must fit in - memory, or else EDITART will crash. - - - It's time I document how you can add voxels to the Build engine. - The code is not the cleanest, but at least it works. First - you must load each voxel into memory using the qloadkvx - function. You specify the filename of the .KVX file and an - index that you want to use to reference the voxel. You can - pack .KVX files in a .GRP file if you want. The index must - be in this range: 0 <= index < MAXVOXELS where MAXVOXELS is - currently 512. This index works sort of like a picnum, but I - have a totally separate array for these indeces so you don't - need to mess with your art file at all. Since qloadkvx - allocates memory off of my cacheing system, you must call it - after loadpics which allocates all memory. - - Function parameters: - void qloadkvx(long voxindex, char *filename) - - loadpics("tiles000.art"); - qloadkvx(0L,"voxel000.kvx"); - qloadkvx(1L,"voxel001.kvx"); - - Now to actually display the voxel, you need to set the - (sprite[?].cstat&48) to equal 48 like this: - sprite[?].cstat |= 48; - I have no special collision code for voxels. They are simply - treated as face sprites. - - If ((sprite[?].cstat&48) == 48) - You should set the sprite[?].picnum to equal the VOXEL - index of the voxel that you passed to qloadkvx. If you don't - do this you will see nothing. To handle this index remapping - it is a good idea to make some array like this: - short picnumtovox[MAXTILES]; - and save the array in some file (or in the .GRP file) - - Many other fields of the sprite structure also affect voxels, - such as: ang, shade, pal, xrepeat, yrepeat. - - Note: To view voxels in the Build editor, you will need to do - the same qloadkvx calls in your BSTUB.C. - - And now a warning: Voxels tend to draw the fastest when - they are tall and thin. For example, a telephone poll - would work just great. They slow down very quickly as - you add detail. This is why you don't see any large - voxels in SW and Blood. - - - Something you should know about this version of the engine: - Over the summer, I got a lot of pressure from GT to add - MMX support to the Build engine, so I bought a Pentium II. - I messed around with the code quite a bit and discovered - that MMX really didn't help at all. In fact, in some ways - it made the code slower. The problem is that the inner - loops of Build are already optimized really well. I have - found that MMX is useful only because it gives you extra - registers. Unfortunately, the Build loops don't need extra - registers since they aren't very complex. - Now there are 2 major differences between an old Pentium and - a Pentium II. A Pentium II is like a Pentium PRO with MMX. - So I tried to optimize Build for Pentium PRO's. I was - actually able to get about a 50% speed increase mostly due - to avoiding those awful partial stalls. But there are - SEVERAL catches: - - 1. First of all, you need to enable WRITE-COMBINING for - video memory to get all this extra speed. One popular - program which does this is FASTVID. You should be able - to find it easily on the net. If you do not enable - WRITE-COMBINING, the engine actually runs SLOWER than - the original version! Unfortunately, neither DOS nor - WINDOWS 95 enable WRITE-COMBINING by default, so you need to - load a driver. Even worse, if you're in WINDOWS 95, the - program which enables WRITE-COMBINING will crash because - you can only set the PPRO registers in Priviledge Level 0. - You can still enable WRITE-COMBINING in WINDOWS 95, but you - have to run the program in your AUTOEXEC.BAT file. I wish - you all good luck on getting the average user to be able - to accomplish this feat. Quake has the same problem. - You'll find the same thing in their documentation. - - 2. The second catch is that my code tries to auto-detect - whether you have a Pentium, Pentium MMX, Pentium PRO, of - Pentium II. Of course this means, that if you don't have - an Intel processor, it's possible that the auto-detect code - may crash. I haven't had the opportunity to test this - myself. And since I can never guarantee it will always work - I made a way for you to disable the new code altogether - should this happen. Here's how you disable the new code - in the Build engine: - - extern long dommxoverlay; //(from engine.obj) - - Before you first call initengine, set dommxoverlay = 0; - - The default is dommxoverlay = 1 and it will run the code. diff --git a/polymer-perf/eduke32/build/doc/buildinf.txt b/polymer-perf/eduke32/build/doc/buildinf.txt deleted file mode 100644 index 41a154e99..000000000 --- a/polymer-perf/eduke32/build/doc/buildinf.txt +++ /dev/null @@ -1,882 +0,0 @@ -// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman -// Ken Silverman's official web site: "http://www.advsys.net/ken" -// See the included license file "BUILDLIC.TXT" for license info. - -Build information to get you started: - -The first half of this file explains the .ART, .MAP, and PALETTE.DAT formats. -The second half has documentation about every BUILD engine function, what it - does, and what the parameters are. - --Ken S. - ------------------------------------------------------------------------------- -Documentation on Ken's .ART file format by Ken Silverman - - I am documenting my ART format to allow you to program your own custom -art utilites if you so desire. I am still planning on writing the script -system. - - All art files must have xxxxx###.ART. When loading an art file you -should keep trying to open new xxxxx###'s, incrementing the number, until -an art file is not found. - - -1. long artversion; - - The first 4 bytes in the art format are the version number. The current - current art version is now 1. If artversion is not 1 then either it's the - wrong art version or something is wrong. - -2. long numtiles; - - Numtiles is not really used anymore. I wouldn't trust it. Actually - when I originally planning art version 1 many months ago, I thought I - would need this variable, but it turned it is was unnecessary. To get - the number of tiles, you should search all art files, and check the - localtilestart and localtileend values for each file. - -3. long localtilestart; - - Localtilestart is the tile number of the first tile in this art file. - -4. long localtileend; - - Localtileend is the tile number of the last tile in this art file. - Note: Localtileend CAN be higher than the last used slot in an art - file. - - Example: If you chose 256 tiles per art file: - TILES000.ART -> localtilestart = 0, localtileend = 255 - TILES001.ART -> localtilestart = 256, localtileend = 511 - TILES002.ART -> localtilestart = 512, localtileend = 767 - TILES003.ART -> localtilestart = 768, localtileend = 1023 - -5. short tilesizx[localtileend-localtilestart+1]; - - This is an array of shorts of all the x dimensions of the tiles - in this art file. If you chose 256 tiles per art file then - [localtileend-localtilestart+1] should equal 256. - -6. short tilesizy[localtileend-localtilestart+1]; - - This is an array of shorts of all the y dimensions. - -7. long picanm[localtileend-localtilestart+1]; - - This array of longs stores a few attributes for each tile that you - can set inside EDITART. You probably won't be touching this array, but - I'll document it anyway. - - Bit: |31 24|23 16|15 8|7 0| - ----------------------------------------------------------------- - | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - ----------------------------------------------------------------- - | Anim. | Signed char | Signed char | | Animate | - | Speed | Y-center | X-center | | number | - --------| offset | offset | |------------ - --------------------------------| ------------ - | Animate type:| - | 00 - NoAnm | - | 01 - Oscil | - | 10 - AnmFd | - | 11 - AnmBk | - ---------------- - You probably recognize these: - Animate speed - EDITART key: 'A', + and - to adjust - Signed char x&y offset - EDITART key: '`', Arrows to adjust - Animate number&type - EDITART key: +/- on keypad - -8. After the picanm's, the rest of the file is straight-forward rectangular - art data. You must go through the tilesizx and tilesizy arrays to find - where the artwork is actually stored in this file. - - Note: The tiles are stored in the opposite coordinate system than - the screen memory is stored. Example on a 4*4 file: - - Offsets: - ----------------- - | 0 | 4 | 8 |12 | - ----------------- - | 1 | 5 | 9 |13 | - ----------------- - | 2 | 6 |10 |14 | - ----------------- - | 3 | 7 |11 |15 | - ----------------- - - - ----------------------------------------------------------------------------- - If you wish to display the artwork, you will also need to load your -palette. To load the palette, simply read the first 768 bytes of your -palette.dat and write it directly to the video card - like this: - - Example: - long i, fil; - - fil = open("palette.dat",O_BINARY|O_RDWR,S_IREAD); - read(fil,&palette[0],768); - close(fil); - - outp(0x3c8,0); - for(i=0;i<768;i++) - outp(0x3c9,palette[i]); ------------------------------------------------------------------------------- - -Packet format for DUKE3D (specifically for network mode 1, n(n-1) mode): - -Example bunch of packets: -A B C D E F G H I J K L M N... O ---------------------------------------------------------------------- -d9 00 d9 11 01 00 - - - - - - - - - - 4f 16 31 -da 00 da 11 01 00 - - - - - - - - - - b2 b7 9d -db 00 db 11 01 00 - - - - - - - - - - b1 24 62 -dc 00 dc 11 01 00 - - - - - - - - - - ca 1d 58 -dd 00 dd 11 01 00 - - - - - - - - - - a9 94 14 -de 00 de 11 01 05 00 00 - - 03 00 - - - - c5 50 b9 -df 00 df 11 01 0f a1 ff fe 09 00 00 26 - - - e2 88 6f -e0 00 e0 11 01 04 - - - - fd ff - - - - 77 51 d7 -e1 00 e1 11 01 03 1f 00 ff 09 - - - - - - ac 14 b7 -e2 00 e2 11 01 0b 9c 00 fb 09 - - 24 - - - f8 6c 22 - -GAME sends fields D-N -MMULTI adds fields A-C and O for error correction. - -A: Packet count sending modulo 256 -B: Error state. Usually 0. To request a resend, bit 0 is set. In order - to catch up on networks, sending many packets is bad, so 2 packets - are sent in 1 IPX packet. To send 2 packets in 1 packet, bit 1 is set. - In special cases, this value may be different. -C: Packet count receiving modulo 256 - -D: Message header byte. These are all the possible values currently. You - are probably only interested in case 17. Note that fields E-N apply - to case 17 only. - 0: send movement info from master to slave (network mode 0 only) - 1: send movement info from slave to master (network mode 0 only) - 4: user-typed messages - 5: Re-start level with given parameters - 6: Send player name - 7: Play Remote Ridicule sound - 8: Re-start level with given parameters for a user map - 17: send movement info to everybody else (network mode 1 only) - 250: Wait for Everybody (Don't start until everybody's done loading) - 255: Player quit to DOS - -E: Timing byte used to calculate lag time. This prevents the 2 computer's - timers from drifting apart. - -F: Bits field byte. Fields G-M are sent only when certain bits - in this byte are set. - -G: X momentum update (2 bytes). Sent only if ((F&1) != 0) - -H: Y momentum update (2 bytes). Sent only if ((F&2) != 0) - -I: Angle momentum update (2 bytes). Sent only if ((F&4) != 0) - -J: The states of 8 different keys (1 byte). Sent only if ((F&8) != 0) -K: The states of 8 different keys (1 byte). Sent only if ((F&16) != 0) -L: The states of 8 different keys (1 byte). Sent only if ((F&32) != 0) -M: The states of 8 different keys (1 byte). Sent only if ((F&64) != 0) - -N: Sync checking byte. Useful for debugging programming errors. Can be a - variable number of bytes. Actual number of sync checking bytes is - calculated by length of the whole packet minus the rest of the bytes sent. - -O: CRC-16 - ------------------------------------------------------------------------------- -| @@@@@@@@@@@ @@@ @@@ @@@@@@@@@ @@@ @@@@@@@@@ | -| @@@@@@@@@@@@@ @@@ @@@ @@@@@@@@@ @@@ @@@@@@@@@@@ | -| @@@ @@@@ @@@ @@@ @@@ @@@ @@@ @@@@@ | -| @@@ @@@ @@@ @@@ @@@ @@@ @@@ @@@@ | -| @@@ @@@@ @@@ @@@ @@@ @@@ @@@ @@@ | -| @@@@@@@@@@@@@ @@@ @@@ @@@ @@@ @@@ @@@ | -| @@@@@@@@@@@@@ @@@ @@@ @@@ @@@ @@@ @@@ | -| @@@ @@@@ @@@ @@@ @@@ @@@ @@@ @@@ | -| @@@ @@@ @@@ @@@ @@@ @@@ @@@ @@@@ | -| @@@ @@@@ @@@@ @@@@ @@@ @@@ @@@ @@@@@ | -| @@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@@ | -| @@@@@@@@@@@ @@@@@@@ @@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@ | -| | -| M A P F O R M A T ! | ------------------------------------------------------------------------------- - -Here is Ken's documentation on the COMPLETE BUILD map format: -BUILD engine and editor programmed completely by Ken Silverman - -Here's how you should read a BUILD map file: -{ - fil = open(???); - - //Load map version number (current version is 7L) - read(fil,&mapversion,4); - - //Load starting position - read(fil,posx,4); - read(fil,posy,4); - read(fil,posz,4); //Note: Z coordinates are all shifted up 4 - read(fil,ang,2); //All angles are from 0-2047, clockwise - read(fil,cursectnum,2); //Sector of starting point - - //Load all sectors (see sector structure described below) - read(fil,&numsectors,2); - read(fil,§or[0],sizeof(sectortype)*numsectors); - - //Load all walls (see wall structure described below) - read(fil,&numwalls,2); - read(fil,&wall[0],sizeof(walltype)*numwalls); - - //Load all sprites (see sprite structure described below) - read(fil,&numsprites,2); - read(fil,&sprite[0],sizeof(spritetype)*numsprites); - - close(fil); -} - - ------------------------------------------------------------- - | @@@@@@@ @@@@@@@ @@@@@@@ @@@@@@@@ @@@@@@@ @@@@@@@ @@@@@@@ | - | @@ @@ @@ @@ @@ @@ @@ @@@ @@ | - | @@@@@@@ @@@@@ @@ @@ @@ @@ @@@@@@@ @@@@@@@ | - | @@ @@ @@ @@ @@ @@ @@ @@@ @@ | - | @@@@@@@ @@@@@@@ @@@@@@@ @@ @@@@@@@ @@ @@ @@@@@@@ | - ------------------------------------------------------------- - - //sizeof(sectortype) = 40 -typedef struct -{ - short wallptr, wallnum; - long ceilingz, floorz; - short ceilingstat, floorstat; - short ceilingpicnum, ceilingheinum; - signed char ceilingshade; - char ceilingpal, ceilingxpanning, ceilingypanning; - short floorpicnum, floorheinum; - signed char floorshade; - char floorpal, floorxpanning, floorypanning; - char visibility, filler; - short lotag, hitag, extra; -} sectortype; -sectortype sector[1024]; - -wallptr - index to first wall of sector -wallnum - number of walls in sector -z's - z coordinate (height) of ceiling / floor at first point of sector -stat's - bit 0: 1 = parallaxing, 0 = not "P" - bit 1: 1 = sloped, 0 = not - bit 2: 1 = swap x&y, 0 = not "F" - bit 3: 1 = double smooshiness "E" - bit 4: 1 = x-flip "F" - bit 5: 1 = y-flip "F" - bit 6: 1 = Align texture to first wall of sector "R" - bits 7-15: reserved -picnum's - texture index into art file -heinum's - slope value (rise/run) (0-parallel to floor, 4096-45 degrees) -shade's - shade offset of ceiling/floor -pal's - palette lookup table number (0 - use standard colors) -panning's - used to align textures or to do texture panning -visibility - determines how fast an area changes shade relative to distance -filler - useless byte to make structure aligned -lotag, hitag, extra - These variables used by the game programmer only - - - ----------------------------------------------- - | @@ @@ @@@@@@@@ @@ @@ @@@@@@@ | - | @@ @@ @@ @@ @@ @@ @@ | - | @@ @@ @@ @@@@@@@@ @@ @@ @@@@@@@ | - | @@ @@@@ @@ @@ @@ @@ @@ @@ | - | @@@ @@@@ @@ @@ @@@@@@@ @@@@@@@ @@@@@@@ | - ----------------------------------------------| - - //sizeof(walltype) = 32 -typedef struct -{ - long x, y; - short point2, nextwall, nextsector, cstat; - short picnum, overpicnum; - signed char shade; - char pal, xrepeat, yrepeat, xpanning, ypanning; - short lotag, hitag, extra; -} walltype; -walltype wall[8192]; - -x, y: Coordinate of left side of wall, get right side from next wall's left side -point2: Index to next wall on the right (always in the same sector) -nextwall: Index to wall on other side of wall (-1 if there is no sector) -nextsector: Index to sector on other side of wall (-1 if there is no sector) -cstat: - bit 0: 1 = Blocking wall (use with clipmove, getzrange) "B" - bit 1: 1 = bottoms of invisible walls swapped, 0 = not "2" - bit 2: 1 = align picture on bottom (for doors), 0 = top "O" - bit 3: 1 = x-flipped, 0 = normal "F" - bit 4: 1 = masking wall, 0 = not "M" - bit 5: 1 = 1-way wall, 0 = not "1" - bit 6: 1 = Blocking wall (use with hitscan / cliptype 1) "H" - bit 7: 1 = Transluscence, 0 = not "T" - bit 8: 1 = y-flipped, 0 = normal "F" - bit 9: 1 = Transluscence reversing, 0 = normal "T" - bits 10-15: reserved -picnum - texture index into art file -overpicnum - texture index into art file for masked walls / 1-way walls -shade - shade offset of wall -pal - palette lookup table number (0 - use standard colors) -repeat's - used to change the size of pixels (stretch textures) -pannings - used to align textures or to do texture panning -lotag, hitag, extra - These variables used by the game programmer only - - ------------------------------------------------------------- - | @@@@@@@ @@@@@@@ @@@@@@@ @@@@@@ @@@@@@@@ @@@@@@@ @@@@@@@ | - | @@ @@ @@ @@ @@@ @@ @@ @@ @@ | - | @@@@@@@ @@@@@@@ @@@@@@@ @@ @@ @@@@@ @@@@@@@ | - | @@ @@ @@ @@ @@ @@ @@ @@ | - | @@@@@@@ @@ @@ @@ @@@@@@ @@ @@@@@@@ @@@@@@@ | - ------------------------------------------------------------- - - //sizeof(spritetype) = 44 -typedef struct -{ - long x, y, z; - short cstat, picnum; - signed char shade; - char pal, clipdist, filler; - unsigned char xrepeat, yrepeat; - signed char xoffset, yoffset; - short sectnum, statnum; - short ang, owner, xvel, yvel, zvel; - short lotag, hitag, extra; -} spritetype; -spritetype sprite[4096]; -x, y, z - position of sprite - can be defined at center bottom or center -cstat: - bit 0: 1 = Blocking sprite (use with clipmove, getzrange) "B" - bit 1: 1 = transluscence, 0 = normal "T" - bit 2: 1 = x-flipped, 0 = normal "F" - bit 3: 1 = y-flipped, 0 = normal "F" - bits 5-4: 00 = FACE sprite (default) "R" - 01 = WALL sprite (like masked walls) - 10 = FLOOR sprite (parallel to ceilings&floors) - bit 6: 1 = 1-sided sprite, 0 = normal "1" - bit 7: 1 = Real centered centering, 0 = foot center "C" - bit 8: 1 = Blocking sprite (use with hitscan / cliptype 1) "H" - bit 9: 1 = Transluscence reversing, 0 = normal "T" - bits 10-14: reserved - bit 15: 1 = Invisible sprite, 0 = not invisible -picnum - texture index into art file -shade - shade offset of sprite -pal - palette lookup table number (0 - use standard colors) -clipdist - the size of the movement clipping square (face sprites only) -filler - useless byte to make structure aligned -repeat's - used to change the size of pixels (stretch textures) -offset's - used to center the animation of sprites -sectnum - current sector of sprite -statnum - current status of sprite (inactive/monster/bullet, etc.) - -ang - angle the sprite is facing -owner, xvel, yvel, zvel, lotag, hitag, extra - These variables used by the - game programmer only ------------------------------------------------------------------------------- - - - - ------------------------------------------------------------------------------ -| IMPORTANT ENGINE FUNCTIONS: | ------------------------------------------------------------------------------ - -initengine() - Initializes many variables for the BUILD engine. You should call this - once before any other functions of the BUILD engine are used. - -uninitengine(); - Frees buffers. You should call this once at the end of the program - before quitting to dos. - -loadboard(char *filename, long *posx, long *posy, long *posz, short *ang, short *cursectnum) -saveboard(char *filename, long *posx, long *posy, long *posz, short *ang, short *cursectnum) - Loads/saves the given board file from memory. Returns -1 if file not - found. If no extension is given, .MAP will be appended to the filename. - -loadpics(char *filename); - Loads the given artwork file into memory for the BUILD engine. - Returns -1 if file not found. If no extension is given, .ART will - be appended to the filename. - -loadtile(short tilenum) - Loads a given tile number from disk into memory if it is not already in - memory. This function calls allocache internally. A tile is not in the - cache if (waloff[tilenum] == 0) - ------------------------------------------------------------------------------ -| SCREEN STATUS FUNCTIONS: | ------------------------------------------------------------------------------ - -setgamemode(char vidoption, long xdim, long ydim); - This function sets the video mode to 320*200*256color graphics. - Since BUILD supports several different modes including mode x, - mode 13h, and other special modes, I don't expect you to write - any graphics output functions. (Soon I have all the necessary - functions) If for some reason, you use your own graphics mode, - you must call this function again before using the BUILD drawing - functions. - - vidoption can be anywhere from 0-6 - xdim,ydim can be any vesa resolution if vidoption = 1 - xdim,ydim must be 320*200 for any other mode. - (see graphics mode selection in my setup program) - -setview(long x1, long y1, long x2, long y2) - Sets the viewing window to a given rectangle of the screen. - Example: For full screen 320*200, call like this: setview(0L,0L,319L,199L); - -nextpage(); - This function flips to the next video page. After a screen is prepared, - use this function to view the screen. - ------------------------------------------------------------------------------ -| DRAWING FUNCTIONS: | ------------------------------------------------------------------------------ - -drawrooms(long posx, long posy, long posz, short ang, long horiz, short cursectnum) - This function draws the 3D screen to the current drawing page, - which is not yet shown. This way, you can overwrite some things - over the 3D screen such as a gun. Be sure to call the drawmasks() - function soon after you call the drawrooms() function. To view - the screen, use the nextpage() function. The nextpage() function - should always be called sometime after each draw3dscreen() - function. - -drawmasks(); - This function draws all the sprites and masked walls to the current - drawing page which is not yet shown. The reason I have the drawing - split up into these 2 routines is so you can animate just the - sprites that are about to be drawn instead of having to animate - all the sprites on the whole board. Drawrooms() prepares these - variables: spritex[], spritey[], spritepicnum[], thesprite[], - and spritesortcnt. Spritesortcnt is the number of sprites about - to be drawn to the page. To change the sprite's picnum, simply - modify the spritepicnum array If you want to change other parts - of the sprite structure, then you can use the thesprite array to - get an index to the actual sprite number. - -clearview(long col) - Clears the current video page to the given color - -clearallviews(long col) - Clears all video pages to the given color - -drawmapview (long x, long y, long zoom, short ang) - Draws the 2-D texturized map at the given position into the viewing window. - -rotatesprite (long sx, long sy, long z, short a, short picnum, - signed char dashade, char dapalnum, char dastat, - long cx1, long cy1, long cx2, long cy2) - (sx, sy) is the center of the sprite to draw defined as - screen coordinates shifted up by 16. - (z) is the zoom. Normal zoom is 65536. - Ex: 131072 is zoomed in 2X and 32768 is zoomed out 2X. - (a) is the angle (0 is straight up) - (picnum) is the tile number - (dashade) is 0 normally but can be any standard shade up to 31 or 63. - (dapalnum) can be from 0-255. - if ((dastat&1) == 0) - no transluscence - if ((dastat&1) != 0) - transluscence - if ((dastat&2) == 0) - don't scale to setview's viewing window - if ((dastat&2) != 0) - scale to setview's viewing window (windowx1,etc.) - if ((dastat&4) == 0) - nuttin' special - if ((dastat&4) != 0) - y-flip image - if ((dastat&8) == 0) - clip to startumost/startdmost - if ((dastat&8) != 0) - don't clip to startumost/startdmost - if ((dastat&16) == 0) - use Editart center as point passed - if ((dastat&16) != 0) - force point passed to be top-left corner - if ((dastat&32) == 0) - nuttin' special - if ((dastat&32) != 0) - use reverse transluscence - if ((dastat&64) == 0) - masked drawing (check 255's) (slower) - if ((dastat&64) != 0) - draw everything (don't check 255's) (faster) - if ((dastat&128) == 0) - nuttin' special - if ((dastat&128) != 0) - automatically draw to all video pages - - Note: As a special case, if both ((dastat&2) != 0) and ((dastat&8) != 0) - then rotatesprite will scale to the full screen (0,0,xdim-1,ydim-1) - rather than setview's viewing window. (windowx1,windowy1,etc.) This - case is useful for status bars, etc. - - Ex: rotatesprite(160L<<16,100L<<16,65536,totalclock<<4, - DEMOSIGN,2,50L,50L,270L,150L); - This example will draw the DEMOSIGN tile in the center of the - screen and rotate about once per second. The sprite will only - get drawn inside the rectangle from (50,50) to (270,150) - -drawline256(long x1, long y1, long x2, long y2, char col) - Draws a solid line from (x1,y1) to (x2,y2) with color (col) - For this function, screen coordinates are all shifted up 16 for precision. - -printext256(long xpos, long ypos, short col, short backcol, - char *message, char fontsize) - Draws a text message to the screen. - (xpos,ypos) - position of top left corner - col - color of text - backcol - background color, if -1, then background is transparent - message - text message - fontsize - 0 - 8*8 font - 1 - 4*6 font - ------------------------------------------------------------------------------ -| MOVEMENT COLLISION FUNCTIONS: | ------------------------------------------------------------------------------ - -clipmove(long *x, long *y, long *z, short *sectnum, long xvect, long yvect, - long walldist, long ceildist, long flordist, unsigned long cliptype) - Moves any object (x, y, z) in any direction at any velocity and will - make sure the object will stay a certain distance from walls (walldist) - Pass the pointers of the starting position (x, y, z). Then - pass the starting position's sector number as a pointer also. - Also these values will be modified accordingly. Pass the - direction and velocity by using a vector (xvect, yvect). - If you don't fully understand these equations, please call me. - xvect = velocity * cos(angle) - yvect = velocity * sin(angle) - Walldist tells how close the object can get to a wall. I use - 128L as my default. If you increase walldist all of a sudden - for a certain object, the object might leak through a wall, so - don't do that! - Cliptype is a mask that tells whether the object should be clipped - to or not. The lower 16 bits are anded with wall[].cstat and the higher - 16 bits are anded with sprite[].cstat. - - Clipmove can either return 0 (touched nothing) - 32768+wallnum (wall first touched) - 49152+spritenum (sprite first touched) - -pushmove (long *x, long *y, long *z, short *sectnum, - long walldist, long ceildist, long flordist, unsigned long cliptype) - This function makes sure a player or monster (defined by x, y, z, sectnum) - is not too close to a wall. If it is, then it attempts to push it away. - If after 256 tries, it is unable to push it away, it returns -1, in which - case the thing should gib. - -getzrange(long x, long y, long z, short sectnum, - long *ceilz, long *ceilhit, - long *florz, long *florhit, - long walldist, unsigned long cliptype) - - Use this in conjunction with clipmove. This function will keep the - player from falling off cliffs when you're too close to the edge. This - function finds the highest and lowest z coordinates that your clipping - BOX can get to. It must search for all sectors (and sprites) that go - into your clipping box. This method is better than using - sector[cursectnum].ceilingz and sector[cursectnum].floorz because this - searches the whole clipping box for objects, not just 1 point. - Pass x, y, z, sector normally. Walldist can be 128. Cliptype is - defined the same way as it is for clipmove. This function returns the - z extents in ceilz and florz. It will return the object hit in ceilhit - and florhit. Ceilhit and florhit will also be either: - 16384+sector (sector first touched) or - 49152+spritenum (sprite first touched) - -hitscan(long xstart, long ystart, long zstart, short startsectnum, - long vectorx, long vectory, long vectorz, - short *hitsect, short *hitwall, short *hitsprite, - long *hitx, long *hity, long *hitz); - - Pass the starting 3D position: - (xstart, ystart, zstart, startsectnum) - Then pass the 3D angle to shoot (defined as a 3D vector): - (vectorx, vectory, vectorz) - Then set up the return values for the object hit: - (hitsect, hitwall, hitsprite) - and the exact 3D point where the ray hits: - (hitx, hity, hitz) - - How to determine what was hit: - * Hitsect is always equal to the sector that was hit (always >= 0). - - * If the ray hits a sprite then: - hitsect = thesectornumber - hitsprite = thespritenumber - hitwall = -1 - - * If the ray hits a wall then: - hitsect = thesectornumber - hitsprite = -1 - hitwall = thewallnumber - - * If the ray hits the ceiling of a sector then: - hitsect = thesectornumber - hitsprite = -1 - hitwall = -1 - vectorz < 0 - (If vectorz < 0 then you're shooting upward which means - that you couldn't have hit a floor) - - * If the ray hits the floor of a sector then: - hitsect = thesectornumber - hitsprite = -1 - hitwall = -1 - vectorz > 0 - (If vectorz > 0 then you're shooting downard which means - that you couldn't have hit a ceiling) - -neartag(long x, long y, long z, short sectnum, short ang, //Starting position & angle - short *neartagsector, //Returns near sector if sector[].tag != 0 - short *neartagwall, //Returns near wall if wall[].tag != 0 - short *neartagsprite, //Returns near sprite if sprite[].tag != 0 - long *neartaghitdist, //Returns actual distance to object (scale: 1024=largest grid size) - long neartagrange, //Choose maximum distance to scan (scale: 1024=largest grid size) - char tagsearch) //1-lotag only, 2-hitag only, 3-lotag&hitag - Neartag works sort of like hitscan, but is optimized to - scan only close objects and scan only objects with - tags != 0. Neartag is perfect for the first line of your space bar code. - It will tell you what door you want to open or what switch you want to - flip. - -cansee(long x1, long y1, long z1, short sectnum1, - long x2, long y2, long z2, short sectnum2); returns 0 or 1 - This function determines whether or not two 3D points can "see" each - other or not. All you do is pass it the coordinates of a 3D line defined - by two 3D points (with their respective sectors) The function will return - a 1 if the points can see each other or a 0 if there is something blocking - the two points from seeing each other. This is how I determine whether a - monster can see you or not. Try playing DOOM1.DAT to fully enjoy this - great function! - -updatesector(long x, long y, §num); - This function updates the sector number according to the x and y values - passed to it. Be careful when you use this function with sprites because - remember that the sprite's sector number should not be modified directly. - If you want to update a sprite's sector, I recomment using the setsprite - function described below. - -inside(long x, long y, short sectnum); - Tests to see whether the overhead point (x, y) is inside sector (sectnum) - Returns either 0 or 1, where 1 means it is inside, and 0 means it is not. - -clipinsidebox(long x, long y, short wallnum, long walldist) - Returns TRUE only if the given line (wallnum) intersects the square with - center (x,y) and radius, walldist. - -dragpoint(short wallnum, long newx, long newy); - This function will drag a point in the exact same way a point is dragged - in 2D EDIT MODE using the left mouse button. Simply pass it which wall - to drag and then pass the new x and y coordinates for that point. - Please use this function because if you don't and try to drag points - yourself, I can guarantee that it won't work as well as mine and you - will get confused. Note: Every wall of course has 2 points. When you - pass a wall number to this function, you are actually passing 1 point, - the left side of the wall (given that you are in the sector of that wall) - Got it? - ------------------------------------------------------------------------------ -| MATH HELPER FUNCTIONS: | ------------------------------------------------------------------------------ - -krand() - Random number function - returns numbers from 0-65535 - -ksqrt(long num) - Returns the integer square root of the number. - -getangle(long xvect, long yvect) - Gets the angle of a vector (xvect,yvect) - These are 2048 possible angles starting from the right, going clockwise - -rotatepoint(long xpivot, long ypivot, long x, long y, - short daang, long *x2, long *y2); - This function is a very convenient and fast math helper function. - Rotate points easily with this function without having to juggle your - cosines and sines. Simply pass it: - - Input: 1. Pivot point (xpivot,ypivot) - 2. Original point (x,y) - 3. Angle to rotate (0 = nothing, 512 = 90ø CW, etc.) - Output: 4. Rotated point (*x2,*y2) - -lastwall(short point); - Use this function as a reverse function of wall[].point2. In order - to save memory, my walls are only on a single linked list. - -nextsectorneighborz(short sectnum, long thez, short topbottom, short direction) - This function is used to tell where elevators should stop. It searches - nearby sectors for the next closest ceilingz or floorz it should stop at. - sectnum - elevator sector - thez - current z to start search from - topbottom - search ceilingz's/floorz's only - direction - search upwards/downwards - -getceilzofslope(short sectnum, long x, long y) -getflorzofslope(short sectnum, long x, long y) -getzsofslope(short sectnum, long x, long y, long *ceilz, long *florz) - These 3 functions get the height of a ceiling and/or floor in a sector - at any (x,y) location. Use getzsofslope only if you need both the ceiling - and floor. - -alignceilslope(short sectnum, long x, long y, long z) -alignflorslope(short sectnum, long x, long y, long z) - Given a sector and assuming it's first wall is the pivot wall of the slope, - this function makes the slope pass through the x,y,z point. One use of - this function is used for sin-wave floors. - ------------------------------------------------------------------------------ -| SPRITE FUNCTIONS: | ------------------------------------------------------------------------------ - -insertsprite(short sectnum, short statnum); //returns (short)spritenum; - Whenever you insert a sprite, you must pass it the sector - number, and a status number (statnum). The status number can be any - number from 0 to MAXSTATUS-1. Insertsprite works like a memory - allocation function and returns the sprite number. - -deletesprite(short spritenum); - Deletes the sprite. - -changespritesect(short spritenum, short newsectnum); - Changes the sector of sprite (spritenum) to the - newsector (newsectnum). This function may become - internal to the engine in the movesprite function. But - this function is necessary since all the sectors have - their own doubly-linked lists of sprites. - -changespritestat(short spritenum, short newstatnum); - Changes the status of sprite (spritenum) to status - (newstatus). Newstatus can be any number from 0 to MAXSTATUS-1. - You can use this function to put a monster on a list of active sprites - when it first sees you. - -setsprite(short spritenum, long newx, long newy, long newz); - This function simply sets the sprite's position to a specified - coordinate (newx, newy, newz) without any checking to see - whether the position is valid or not. You could directly - modify the sprite[].x, sprite[].y, and sprite[].z values, but - if you use my function, the sprite is guaranteed to be in the - right sector. - ------------------------------------------------------------------------------ -| CACHE FUNCTIONS: | ------------------------------------------------------------------------------ -initcache(long dacachestart, long dacachesize) - First allocate a really large buffer (as large as possible), then pass off - the memory bufer the initcache - dacachestart: 32-bit offset in memory of start of cache - dacachesize: number of bytes that were allocated for the cache to use - -allocache (long *bufptr, long bufsiz, char *lockptr) - *bufptr = pointer to 4-byte pointer to buffer. This - allows allocache to remove previously allocated things - from the cache safely by setting the 4-byte pointer to 0. - bufsiz = number of bytes to allocate - *lockptr = pointer to locking char which tells whether - the region can be removed or not. If *lockptr = 0 then - the region is not locked else its locked. - ------------------------------------------------------------------------------ -| GROUP FILE FUNCTIONS: | ------------------------------------------------------------------------------ -initgroupfile(char *filename) - Tells the engine what the group file name is. - You should call this before any of the following group file functions. -uninitgroupfile() - Frees buffers. You should call this once at the end of the program - before quitting to dos. - -kopen4load(char *filename, char searchfirst) - Open a file. First tries to open a stand alone file. Then searches for - it in the group file. If searchfirst is nonzero, it will check the group - file only. - -kread(long handle, void *buffer, long leng) -klseek(long handle, long offset, long whence) -kfilelength(long handle) -kclose(long handle) - These 4 functions simply shadow the dos file functions - they - can do file I/O on the group file in addition to stand-along files. - ------------------------------------------------------------------------------ -| COMMUNICATIONS FUNCTIONS: | ------------------------------------------------------------------------------ - Much of the following code is to keep compatibity with older network code: - -initmultiplayers(char damultioption, char dacomrateoption, char dapriority) - The parameters are ignored - just pass 3 0's -uninitmultiplayers() Does nothing - -sendpacket(long other, char *bufptr, long messleng) - other - who to send the packet to - bufptr - pointer to message to send - messleng - length of message -short getpacket (short *other, char *bufptr) - returns the number of bytes of the packet received, 0 if no packet - other - who the packet was received from - bufptr - pointer to message that was received - -sendlogon() Does nothing -sendlogoff() - Sends a packet to everyone else where the - first byte is 255, and the - second byte is myconnectindex - -getoutputcirclesize() Does nothing - just a stub function, returns 0 -setsocket(short newsocket) Does nothing - -flushpackets() - Clears all packet buffers -genericmultifunction(long other, char *bufptr, long messleng, long command) - Passes a buffer to the commit driver. This command provides a gateway - for game programmer to access COMMIT directly. - ------------------------------------------------------------------------------ -| PALETTE FUNCTIONS: | ------------------------------------------------------------------------------ -VBE_setPalette(long start, long num, char *palettebuffer) -VBE_getPalette(long start, long num, char *palettebuffer) - Set (num) palette palette entries starting at (start) - palette entries are in a 4-byte format in this order: - 0: Blue (0-63) - 1: Green (0-63) - 2: Red (0-63) - 3: Reserved - -makepalookup(long palnum, char *remapbuf, - signed char r, signed char g, signed char b, - char dastat) - This function allows different shirt colors for sprites. First prepare - remapbuf, which is a 256 byte buffer of chars which the colors to remap. - Palnum can be anywhere from 1-15. Since 0 is where the normal palette is - stored, it is a bad idea to call this function with palnum=0. - In BUILD.H notice I added a new variable, spritepal[MAXSPRITES]. - Usually the value of this is 0 for the default palette. But if you - change it to the palnum in the code between drawrooms() and drawmasks - then the sprite will be drawn with that remapped palette. The last 3 - parameters are the color that the palette fades to as you get further - away. This color is normally black (0,0,0). White would be (63,63,63). - if ((dastat&1) == 0) then makepalookup will allocate & deallocate - the memory block for use but will not waste the time creating a palookup - table (assuming you will create one yourself) - -setbrightness(char gammalevel, char *dapal) - Use this function to adjust for gamma correction. - Gammalevel - ranges from 0-15, 0 is darkest, 15 brightest. Default: 0 - dapal: standard VGA palette (768 bytes) - ------------------------------------------------------------------------------- -| This document brought to you by: | -| | -| @@@@@@ @@@@@@ @@@@@@@@@@@@@@@@@@ @@@@@@@@ @@@@@@ | -| @@@@@@ @@@@@@ @@@@@@@@@@@@@@@@@@ @@@@@@@@@ @@@@@@ | -| @@@@@@ @@@@@@@ @@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@ | -| @@@@@@ @@@@@@@ @@@@@@ @@@@@@@@@@@ @@@@@@ | -| @@@@@@ @@@@@@@ @@@@@@ @@@@@@@@@@@@ @@@@@@ | -| @@@@@@ @@@@@@@ @@@@@@ @@@@@@@@@@@@@ @@@@@@ | -| @@@@@@@@@@@@ @@@@@@@@@@@@@@@ @@@@@@ @@@@@@@ @@@@@@ | -| @@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@@@@ @@@@@@ @@@@@@@ @@@@@@ | -| @@@@@@@@@@@@ @@@@@@@@@@@@@@@ @@@@@@ @@@@@@@ @@@@@@ | -| @@@@@@ @@@@@@@ @@@@@@ @@@@@@ @@@@@@@@@@@@@ | -| @@@@@@ @@@@@@@ @@@@@@ @@@@@@ @@@@@@@@@@@@ | -| @@@@@@ @@@@@@@ @@@@@@ @@@@@@ @@@@@@@@@@@ | -| @@@@@@ @@@@@@@ @@@@@@@@@@@@@@@@@@ @@@@@@ @@@@@@@@@@ | -| @@@@@@ @@@@@@ @@@@@@@@@@@@@@@@@@ @@@@@@ @@@@@@@@@ | -| @@@@@@ @@@@@@ @@@@@@@@@@@@@@@@@@ @@@@@@ @@@@@@@@ | -| | -| Ken Silverman of East Greenwich, RI USA | ------------------------------------------------------------------------------- diff --git a/polymer-perf/eduke32/build/include/a.h b/polymer-perf/eduke32/build/include/a.h deleted file mode 100644 index df67486ff..000000000 --- a/polymer-perf/eduke32/build/include/a.h +++ /dev/null @@ -1,157 +0,0 @@ -// Assembly-language function wrappers for a.asm functions -// for the Build Engine -// by Jonathon Fowler (jonof@edgenetwk.com) - - -#ifndef __a_h__ -#define __a_h__ - -#include "compat.h" - -#if defined(__GNUC__) && defined(__i386__) && !defined(NOASM) - -#if defined(__linux) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__SYLLABLE__) -#define __cdecl -#endif - -extern int32_t __cdecl mmxoverlay(); -extern int32_t __cdecl sethlinesizes(int32_t,int32_t,int32_t); -extern int32_t __cdecl setpalookupaddress(char *); -extern int32_t __cdecl setuphlineasm4(int32_t,int32_t); -extern int32_t __cdecl hlineasm4(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl setuprhlineasm4(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl rhlineasm4(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl setuprmhlineasm4(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl rmhlineasm4(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl setupqrhlineasm4(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl qrhlineasm4(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl setvlinebpl(int32_t); -extern int32_t __cdecl fixtransluscence(int32_t); -extern int32_t __cdecl prevlineasm1(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl vlineasm1(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl setuptvlineasm(int32_t); -extern int32_t __cdecl tvlineasm1(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl setuptvlineasm2(int32_t,int32_t,int32_t); -extern int32_t __cdecl tvlineasm2(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl mvlineasm1(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl setupvlineasm(int32_t); -extern int32_t __cdecl vlineasm4(int32_t,int32_t); -extern int32_t __cdecl setupmvlineasm(int32_t); -extern int32_t __cdecl mvlineasm4(int32_t,int32_t); -extern int32_t __cdecl setupspritevline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl spritevline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl msetupspritevline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl mspritevline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl tsetupspritevline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl tspritevline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl mhline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl mhlineskipmodify(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl msethlineshift(int32_t,int32_t); -extern int32_t __cdecl thline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl thlineskipmodify(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl tsethlineshift(int32_t,int32_t); -extern int32_t __cdecl setupslopevlin(int32_t,int32_t,int32_t); -extern int32_t __cdecl slopevlin(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t __cdecl settransnormal(); -extern int32_t __cdecl settransreverse(); -extern int32_t __cdecl setupdrawslab(int32_t,int32_t); -extern int32_t __cdecl drawslab(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern void __cdecl stretchhline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); - -#elif defined(_MSC_VER) && !defined(NOASM) // __GNUC__ && __i386__ - -extern int32_t _cdecl mmxoverlay(); -extern int32_t _cdecl sethlinesizes(int32_t,int32_t,int32_t); -extern int32_t _cdecl setpalookupaddress(char *); -extern int32_t _cdecl setuphlineasm4(int32_t,int32_t); -extern int32_t _cdecl hlineasm4(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl setuprhlineasm4(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl rhlineasm4(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl setuprmhlineasm4(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl rmhlineasm4(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl setupqrhlineasm4(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl qrhlineasm4(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl setvlinebpl(int32_t); -extern int32_t _cdecl fixtransluscence(int32_t); -extern int32_t _cdecl prevlineasm1(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl vlineasm1(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl setuptvlineasm(int32_t); -extern int32_t _cdecl tvlineasm1(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl setuptvlineasm2(int32_t,int32_t,int32_t); -extern int32_t _cdecl tvlineasm2(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl mvlineasm1(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl setupvlineasm(int32_t); -extern int32_t _cdecl vlineasm4(int32_t,int32_t); -extern int32_t _cdecl setupmvlineasm(int32_t); -extern int32_t _cdecl mvlineasm4(int32_t,int32_t); -extern int32_t _cdecl setupspritevline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl spritevline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl msetupspritevline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl mspritevline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl tsetupspritevline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl tspritevline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl mhline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl mhlineskipmodify(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl msethlineshift(int32_t,int32_t); -extern int32_t _cdecl thline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl thlineskipmodify(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl tsethlineshift(int32_t,int32_t); -extern int32_t _cdecl setupslopevlin(int32_t,int32_t,int32_t); -extern int32_t _cdecl slopevlin(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern int32_t _cdecl settransnormal(); -extern int32_t _cdecl settransreverse(); -extern int32_t _cdecl setupdrawslab(int32_t,int32_t); -extern int32_t _cdecl drawslab(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); -extern void _cdecl stretchhline(int32_t,int32_t,int32_t,int32_t,int32_t,int32_t); - -#else // _MSC_VER - -#define ENGINE_USING_A_C -#include - -void setvlinebpl(int32_t dabpl); -void fixtransluscence(intptr_t datransoff); -void settransnormal(void); -void settransreverse(void); - -void sethlinesizes(int32_t logx, int32_t logy, intptr_t bufplc); -void setpalookupaddress(char *paladdr); -void setuphlineasm4(int32_t bxinc, int32_t byinc); -void hlineasm4(int32_t cnt, int32_t skiploadincs, int32_t paloffs, uint32_t by, uint32_t bx, intptr_t p); - -void setupslopevlin(int32_t logylogx, intptr_t bufplc, int32_t pinc); -void slopevlin(intptr_t p, int32_t i, intptr_t slopaloffs, int32_t cnt, int32_t bx, int32_t by); - -void setupvlineasm(int32_t neglogy); -void vlineasm1(int32_t vinc, intptr_t paloffs, int32_t cnt, uint32_t vplc, intptr_t bufplc, intptr_t p); - -void setupmvlineasm(int32_t neglogy); -void mvlineasm1(int32_t vinc, intptr_t paloffs, int32_t cnt, uint32_t vplc, intptr_t bufplc, intptr_t p); - -void setuptvlineasm(int32_t neglogy); -void tvlineasm1(int32_t vinc, intptr_t paloffs, int32_t cnt, uint32_t vplc, intptr_t bufplc, intptr_t p); - -void msethlineshift(int32_t logx, int32_t logy); -void mhline(intptr_t bufplc, uint32_t bx, int32_t cntup16, int32_t junk, uint32_t by, intptr_t p); - -void tsethlineshift(int32_t logx, int32_t logy); -void thline(intptr_t bufplc, uint32_t bx, int32_t cntup16, int32_t junk, uint32_t by, intptr_t p); - -void setupspritevline(intptr_t paloffs, int32_t bxinc, int32_t byinc, int32_t ysiz); -void spritevline(int32_t bx, int32_t by, int32_t cnt, intptr_t bufplc, intptr_t p); - -void msetupspritevline(intptr_t paloffs, int32_t bxinc, int32_t byinc, int32_t ysiz); -void mspritevline(int32_t bx, int32_t by, int32_t cnt, intptr_t bufplc, intptr_t p); - -void tsetupspritevline(intptr_t paloffs, int32_t bxinc, int32_t byinc, int32_t ysiz); -void tspritevline(int32_t bx, int32_t by, int32_t cnt, intptr_t bufplc, intptr_t p); - -void setupdrawslab (int32_t dabpl, intptr_t pal); -void drawslab (int32_t dx, int32_t v, int32_t dy, int32_t vi, intptr_t vptr, intptr_t p); -void stretchhline (intptr_t p0, int32_t u, int32_t cnt, int32_t uinc, intptr_t rptr, intptr_t p); - -void mmxoverlay(); - -#endif // else - -#endif // __a_h__ diff --git a/polymer-perf/eduke32/build/include/baselayer.h b/polymer-perf/eduke32/build/include/baselayer.h deleted file mode 100644 index 5e29c59e8..000000000 --- a/polymer-perf/eduke32/build/include/baselayer.h +++ /dev/null @@ -1,181 +0,0 @@ -// Base services interface declaration -// for the Build Engine -// by Jonathon Fowler (jonof@edgenetwk.com) - -#ifndef __baselayer_h__ -#define __baselayer_h__ - -#include "compat.h" -#include "osd.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define SYSTEM_POOL_SIZE (64 * 1048576) - -extern int32_t _buildargc; -extern const char **_buildargv; - -extern char quitevent, appactive; - -extern int32_t vsync; - -// NOTE: these are implemented in game-land so they may be overridden in game specific ways -extern int32_t startwin_open(void); -extern int32_t startwin_close(void); -extern int32_t startwin_puts(const char *); -extern int32_t startwin_settitle(const char *); -extern int32_t startwin_idle(void *); - -// video -extern int32_t r_usenewaspect, newaspect_enable; -extern uint32_t r_screenxy; -extern int32_t xres, yres, bpp, fullscreen, bytesperline, imageSize; -extern intptr_t frameplace; -extern char offscreenrendering; - -extern void (*baselayer_onvideomodechange)(int32_t); - -#ifdef USE_OPENGL -extern int32_t osdcmd_glinfo(const osdfuncparm_t *parm); - -struct glinfo_t { - const char *vendor; - const char *renderer; - const char *version; - const char *extensions; - - float maxanisotropy; - char bgra; - char clamptoedge; - char texcompr; - char texnpot; - char multisample; - char nvmultisamplehint; - char arbfp; - char depthtex; - char shadow; - char fbos; - char rect; - char multitex; - char envcombine; - char vbos; - char vsync; - char sm4; - char occlusionqueries; - char glsl; - char dumped; -}; - -extern struct glinfo_t glinfo; -extern void setvsync(int32_t sync); -#endif - -extern char inputdevices; - -// keys -#define KEYFIFOSIZ 64 -extern char keystatus[256], keyfifo[KEYFIFOSIZ], keyfifoplc, keyfifoend; -extern char keyasciififo[KEYFIFOSIZ], keyasciififoplc, keyasciififoend; -extern char scantoasc[128], remap[256], key_names[256][24]; -extern int32_t remapinit; - -extern int32_t defaultres[][2]; - -extern void SetKey(int32_t key, int32_t state); - -// mouse -extern volatile int32_t mousex, mousey, mouseb; - -// joystick -extern int32_t *joyaxis, *joyhat, joyb; -extern char joyisgamepad, joynumaxes, joynumbuttons, joynumhats; -extern int32_t joyaxespresent; - -extern int32_t qsetmode; - -int32_t initsystem(void); -void uninitsystem(void); - -extern int32_t flushlogwindow; -void initprintf(const char *, ...) ATTRIBUTE((format(printf,1,2))); -void debugprintf(const char *,...) ATTRIBUTE((format(printf,1,2))); - -int32_t handleevents(void); -extern void (*after_handleevents_hook)(void); -extern inline void idle(void); -extern inline void idle_waitevent(void); -extern inline void idle_waitevent_timeout(uint32_t timeout); - -extern void (*keypresscallback)(int32_t,int32_t); -extern void (*mousepresscallback)(int32_t,int32_t); -extern void (*joypresscallback)(int32_t,int32_t); - -int32_t initinput(void); -void uninitinput(void); -void releaseallbuttons(void); -void setkeypresscallback(void (*callback)(int32_t,int32_t)); -void setmousepresscallback(void (*callback)(int32_t,int32_t)); -void setjoypresscallback(void (*callback)(int32_t,int32_t)); -const char *getkeyname(int32_t num); -const char *getjoyname(int32_t what, int32_t num); // what: 0=axis, 1=button, 2=hat -char *Bstrtolower(char *str); - -char bgetchar(void); -#define bkbhit() (keyasciififoplc != keyasciififoend) - -void bflushchars(void); - -int32_t initmouse(void); -void uninitmouse(void); -void grabmouse(char a); -void readmousexy(int32_t *x, int32_t *y); -void readmousebstatus(int32_t *b); -void setjoydeadzone(int32_t axis, uint16_t dead, uint16_t satur); -void getjoydeadzone(int32_t axis, uint16_t *dead, uint16_t *satur); - -int32_t inittimer(int32_t); -void uninittimer(void); -void sampletimer(void); -uint32_t getticks(void); -int32_t gettimerfreq(void); -void (*installusertimercallback(void (*callback)(void)))(void); - -int32_t checkvideomode(int32_t *x, int32_t *y, int32_t c, int32_t fs, int32_t forced); -int32_t setvideomode(int32_t x, int32_t y, int32_t c, int32_t fs); -void getvalidmodes(void); -void resetvideomode(void); - -void begindrawing(void); -void enddrawing(void); -void showframe(int32_t); - -int32_t setpalette(int32_t start, int32_t num); -//int32_t getpalette(int32_t start, int32_t num, char *dapal); -int32_t setgamma(void); -extern double vid_gamma, vid_contrast, vid_brightness; - -#define DEFAULT_GAMMA 1.0 -#define DEFAULT_CONTRAST 1.0 -#define DEFAULT_BRIGHTNESS 0.0 - -#define GAMMA_CALC (int32_t)(min(max((float)((vid_gamma-1.0)*10.0),0),15)) - -int32_t switchrendermethod(int32_t,int32_t); // 0 = software, 1 = opengl | bool = reinit - -int32_t wm_msgbox(char *name, char *fmt, ...) ATTRIBUTE((format(printf,2,3))); -int32_t wm_ynbox(char *name, char *fmt, ...) ATTRIBUTE((format(printf,2,3))); -void wm_setapptitle(char *name); - -// baselayer.c -int32_t baselayer_init(); - -void makeasmwriteable(void); - -#ifdef __cplusplus -} -#endif - -#endif // __baselayer_h__ - diff --git a/polymer-perf/eduke32/build/include/build.h b/polymer-perf/eduke32/build/include/build.h deleted file mode 100644 index 37a53cd9e..000000000 --- a/polymer-perf/eduke32/build/include/build.h +++ /dev/null @@ -1,755 +0,0 @@ -// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman -// Ken Silverman's official web site: "http://www.advsys.net/ken" -// See the included license file "BUILDLIC.TXT" for license info. -// -// This file has been modified from Ken Silverman's original release -// by Jonathon Fowler (jonof@edgenetwk.com) - - -#ifndef __build_h__ -#define __build_h__ - -#include "compat.h" -#include "pragmas.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define MAXSECTORSV8 4096 -#define MAXWALLSV8 16384 -#define MAXSPRITESV8 16384 - -#define MAXSECTORSV7 1024 -#define MAXWALLSV7 8192 -#define MAXSPRITESV7 4096 - -#define MAXSECTORS MAXSECTORSV8 -#define MAXWALLS MAXWALLSV8 -#define MAXWALLSB ((MAXWALLS>>2)+(MAXWALLS>>3)) -#define MAXSPRITES MAXSPRITESV8 - -// additional space beyond wall, in walltypes: -#define M32_FIXME_WALLS 512 -#define M32_FIXME_SECTORS 2 - -#define MAXTILES 15360 -#define MAXVOXELS 4096 -#define MAXSTATUS 1024 -#define MAXPLAYERS 16 -#define MAXXDIM 3072 -#define MAXYDIM 2304 -#define MAXBASEPALS 8 -#define MAXPALOOKUPS 256 -#define MAXPSKYTILES 256 -#define MAXSPRITESONSCREEN 4096 -#define MAXUNIQHUDID 256 //Extra slots so HUD models can store animation state without messing game sprites - -#define RESERVEDPALS 4 // don't forget to increment this when adding reserved pals -#define DETAILPAL (MAXPALOOKUPS - 1) -#define GLOWPAL (MAXPALOOKUPS - 2) -#define SPECULARPAL (MAXPALOOKUPS - 3) -#define NORMALPAL (MAXPALOOKUPS - 4) - -#define TSPR_TEMP 99 -#define TSPR_MIRROR 100 - -#define PR_LIGHT_PRIO_MAX 0 -#define PR_LIGHT_PRIO_MAX_GAME 1 -#define PR_LIGHT_PRIO_HIGH 2 -#define PR_LIGHT_PRIO_HIGH_GAME 3 -#define PR_LIGHT_PRIO_LOW 4 -#define PR_LIGHT_PRIO_LOW_GAME 5 - -////////// yax defs ////////// -#define YAX_BIT 1024 -#define YAX_CEILING 0 -#define YAX_FLOOR 1 - -#define YAX_SECTORFLD(Sect,Fld, Cf) (*((Cf) ? (§or[Sect].floor##Fld) : (§or[Sect].ceiling##Fld))) - -int16_t yax_getbunch(int16_t i, int16_t cf); -void yax_setbunch(int16_t i, int16_t cf, int16_t bunchnum); - - -#define CLIPMASK0 (((1L)<<16)+1L) -#define CLIPMASK1 (((256L)<<16)+64L) - -// max x/y val (= max editorgridextent in Mapster32) -#define BXY_MAX 524288 - - //Make all variables in BUILD.H defined in the ENGINE, - //and externed in GAME -#ifdef ENGINE -# define EXTERN -#else -# define EXTERN extern -#endif - -#pragma pack(push,1) - -//ceilingstat/floorstat: -// bit 0: 1 = parallaxing, 0 = not "P" -// bit 1: 1 = groudraw, 0 = not -// bit 2: 1 = swap x&y, 0 = not "F" -// bit 3: 1 = double smooshiness "E" -// bit 4: 1 = x-flip "F" -// bit 5: 1 = y-flip "F" -// bit 6: 1 = Align texture to first wall of sector "R" -// bits 7-8: "T" -// 00 = normal floors -// 01 = masked floors -// 10 = transluscent masked floors -// 11 = reverse transluscent masked floors -// bits 9-15: reserved - - //40 bytes -typedef struct -{ - int16_t wallptr, wallnum; - int32_t ceilingz, floorz; - int16_t ceilingstat, floorstat; - int16_t ceilingpicnum, ceilingheinum; - int8_t ceilingshade; - uint8_t ceilingpal, ceilingxpanning, ceilingypanning; - int16_t floorpicnum, floorheinum; - int8_t floorshade; - uint8_t floorpal, floorxpanning, floorypanning; - uint8_t visibility, filler; - int16_t lotag, hitag, extra; -} sectortype; - -//cstat: -// bit 0: 1 = Blocking wall (use with clipmove, getzrange) "B" -// bit 1: 1 = bottoms of invisible walls swapped, 0 = not "2" -// bit 2: 1 = align picture on bottom (for doors), 0 = top "O" -// bit 3: 1 = x-flipped, 0 = normal "F" -// bit 4: 1 = masking wall, 0 = not "M" -// bit 5: 1 = 1-way wall, 0 = not "1" -// bit 6: 1 = Blocking wall (use with hitscan / cliptype 1) "H" -// bit 7: 1 = Transluscence, 0 = not "T" -// bit 8: 1 = y-flipped, 0 = normal "F" -// bit 9: 1 = Transluscence reversing, 0 = normal "T" -// bits 10-15: reserved - - //32 bytes -typedef struct -{ - int32_t x, y; - int16_t point2, nextwall, nextsector, cstat; - int16_t picnum, overpicnum; - int8_t shade; - uint8_t pal, xrepeat, yrepeat, xpanning, ypanning; - int16_t lotag, hitag, extra; -} walltype; - -//cstat: -// bit 0: 1 = Blocking sprite (use with clipmove, getzrange) "B" -// bit 1: 1 = transluscence, 0 = normal "T" -// bit 2: 1 = x-flipped, 0 = normal "F" -// bit 3: 1 = y-flipped, 0 = normal "F" -// bits 5-4: 00 = FACE sprite (default) "R" -// 01 = WALL sprite (like masked walls) -// 10 = FLOOR sprite (parallel to ceilings&floors) -// bit 6: 1 = 1-sided sprite, 0 = normal "1" -// bit 7: 1 = Real centered centering, 0 = foot center "C" -// bit 8: 1 = Blocking sprite (use with hitscan / cliptype 1) "H" -// bit 9: 1 = Transluscence reversing, 0 = normal "T" -// bit 10: reserved (in use by a renderer hack) -// bit 11: 1 = determine shade based only on its own shade member (see CON's spritenoshade command) -// bit 12: reserved -// bit 13: 1 = does not cast shadow -// bit 14: 1 = invisible but casts shadow -// bit 15: 1 = Invisible sprite, 0 = not invisible - - //44 bytes -typedef struct -{ - int32_t x, y, z; - int16_t cstat, picnum; - int8_t shade; - uint8_t pal, clipdist, filler; - uint8_t xrepeat, yrepeat; - int8_t xoffset, yoffset; - int16_t sectnum, statnum; - int16_t ang, owner, xvel, yvel, zvel; - int16_t lotag, hitag, extra; -} spritetype; - -typedef struct { - uint32_t mdanimtims; - int16_t mdanimcur; - int16_t angoff, pitch, roll; - int32_t xoff, yoff, zoff; - uint8_t flags; - uint8_t xpanning, ypanning; - uint8_t filler; - float alpha; - spritetype *tspr; -} spriteext_t; - -typedef struct { - float smoothduration; - int16_t mdcurframe, mdoldframe; - int16_t mdsmooth; - uint8_t filler[2]; -} spritesmooth_t; - -#define SPREXT_NOTMD 1 -#define SPREXT_NOMDANIM 2 -#define SPREXT_AWAY1 4 -#define SPREXT_AWAY2 8 -#define SPREXT_TSPRACCESS 16 - -EXTERN spriteext_t *spriteext; -EXTERN spritesmooth_t *spritesmooth; -EXTERN int32_t guniqhudid; - -EXTERN sectortype *sector; -EXTERN walltype *wall; -EXTERN int16_t maskwall[MAXWALLSB], maskwallcnt; -EXTERN int16_t thewall[MAXWALLSB]; -EXTERN spritetype *sprite; -EXTERN spritetype *tspriteptr[MAXSPRITESONSCREEN + 1]; - -EXTERN int32_t spritesortcnt; -EXTERN spritetype *tsprite; - -EXTERN int32_t xdim, ydim, numpages; -EXTERN int32_t yxaspect, viewingrange; -EXTERN intptr_t ylookup[MAXYDIM+1]; - -#define MAXVALIDMODES 256 -EXTERN int32_t validmodecnt; -struct validmode_t { - int32_t xdim,ydim; - char bpp; - char fs; // bit 0 = fullscreen flag - char filler[2]; - int32_t extra; // internal use -}; -EXTERN struct validmode_t validmode[MAXVALIDMODES]; - -EXTERN int16_t numsectors, numwalls; -EXTERN char display_mirror; -EXTERN /*volatile*/ int32_t totalclock; -EXTERN int32_t numframes, randomseed; -EXTERN int16_t sintable[2048]; -EXTERN uint8_t palette[768]; -EXTERN int16_t numpalookups; -EXTERN char *palookup[MAXPALOOKUPS]; -EXTERN char parallaxtype, showinvisibility; -EXTERN int32_t parallaxyoffs, parallaxyscale; -EXTERN int32_t visibility, parallaxvisibility; - -EXTERN int32_t windowx1, windowy1, windowx2, windowy2; -EXTERN int16_t startumost[MAXXDIM], startdmost[MAXXDIM]; - -EXTERN int16_t pskyoff[MAXPSKYTILES], pskybits; - -EXTERN int16_t headspritesect[MAXSECTORS+1], headspritestat[MAXSTATUS+1]; -EXTERN int16_t prevspritesect[MAXSPRITES], prevspritestat[MAXSPRITES]; -EXTERN int16_t nextspritesect[MAXSPRITES], nextspritestat[MAXSPRITES]; - -EXTERN int16_t tilesizx[MAXTILES], tilesizy[MAXTILES]; -EXTERN char picsiz[MAXTILES]; -EXTERN char walock[MAXTILES]; -EXTERN int32_t pow2long[32]; -EXTERN int32_t numtiles, picanm[MAXTILES]; -EXTERN intptr_t waloff[MAXTILES]; // stores pointers to cache -- SA - -EXTERN int32_t windowpos, windowx, windowy; - - //These variables are for auto-mapping with the draw2dscreen function. - //When you load a new board, these bits are all set to 0 - since - //you haven't mapped out anything yet. Note that these arrays are - //bit-mapped. - //If you want draw2dscreen() to show sprite #54 then you say: - // spritenum = 54; - // show2dsprite[spritenum>>3] |= (1<<(spritenum&7)); - //And if you want draw2dscreen() to not show sprite #54 then you say: - // spritenum = 54; - // show2dsprite[spritenum>>3] &= ~(1<<(spritenum&7)); - //Automapping defaults to 0 (do nothing). If you set automapping to 1, - // then in 3D mode, the walls and sprites that you see will show up the - // next time you flip to 2D mode. - -EXTERN char show2dsector[(MAXSECTORS+7)>>3]; -EXTERN char show2dwall[(MAXWALLS+7)>>3]; -EXTERN char show2dsprite[(MAXSPRITES+7)>>3]; -EXTERN char automapping; - -EXTERN char gotpic[(MAXTILES+7)>>3]; -EXTERN char gotsector[(MAXSECTORS+7)>>3]; - -EXTERN char captureformat; -EXTERN char editorcolors[256]; - -EXTERN int32_t faketilesiz[MAXTILES]; -EXTERN char *faketiledata[MAXTILES]; - -EXTERN char spritecol2d[MAXTILES][2]; -extern char vgapal16[4*256]; - -extern char vgapalette[5*256]; -extern uint32_t drawlinepat; - -extern void faketimerhandler(void); - -extern char apptitle[256]; -typedef struct { - char r,g,b,f; -} palette_t; -extern palette_t curpalette[256], curpalettefaded[256], palfadergb; -extern char palfadedelta; - -extern int32_t dommxoverlay, novoxmips; - -extern float debug1, debug2; - -extern int32_t tiletovox[MAXTILES]; -extern int32_t usevoxels, voxscale[MAXVOXELS]; - -#ifdef USE_OPENGL -extern int32_t usemodels, usehightile; -extern int32_t rendmode; -#endif -EXTERN int32_t h_xsize[MAXTILES], h_ysize[MAXTILES]; -EXTERN int8_t h_xoffs[MAXTILES], h_yoffs[MAXTILES]; - -extern const char *engineerrstr; -extern char noclip; - -EXTERN int32_t editorzrange[2]; - -EXTERN int32_t myconnectindex, numplayers; -EXTERN int32_t connecthead, connectpoint2[MAXPLAYERS]; - -static inline int32_t getrendermode(void) -{ -#ifndef USE_OPENGL - return 0; -#else - return rendmode; -#endif -} - -/************************************************************************* -POSITION VARIABLES: - - POSX is your x - position ranging from 0 to 65535 - POSY is your y - position ranging from 0 to 65535 - (the length of a side of the grid in EDITBORD would be 1024) - POSZ is your z - position (height) ranging from 0 to 65535, 0 highest. - ANG is your angle ranging from 0 to 2047. Instead of 360 degrees, or - 2 * PI radians, I use 2048 different angles, so 90 degrees would - be 512 in my system. - -SPRITE VARIABLES: - - EXTERN short headspritesect[MAXSECTORS+1], headspritestat[MAXSTATUS+1]; - EXTERN short prevspritesect[MAXSPRITES], prevspritestat[MAXSPRITES]; - EXTERN short nextspritesect[MAXSPRITES], nextspritestat[MAXSPRITES]; - - Example: if the linked lists look like the following: - ???????????????? - Sector lists: Status lists: - ????????????????J - Sector0: 4, 5, 8 Status0: 2, 0, 8 - Sector1: 16, 2, 0, 7 Status1: 4, 5, 16, 7, 3, 9 - Sector2: 3, 9 - ???????????????? - Notice that each number listed above is shown exactly once on both the - left and right side. This is because any sprite that exists must - be in some sector, and must have some kind of status that you define. - - -Coding example #1: - To go through all the sprites in sector 1, the code can look like this: - - sectnum = 1; - i = headspritesect[sectnum]; - while (i != -1) - { - nexti = nextspritesect[i]; - - //your code goes here - //ex: printf("Sprite %d is in sector %d\n",i,sectnum); - - i = nexti; - } - -Coding example #2: - To go through all sprites with status = 1, the code can look like this: - - statnum = 1; //status 1 - i = headspritestat[statnum]; - while (i != -1) - { - nexti = nextspritestat[i]; - - //your code goes here - //ex: printf("Sprite %d has a status of 1 (active)\n",i,statnum); - - i = nexti; - } - - insertsprite(short sectnum, short statnum); - deletesprite(short spritenum); - changespritesect(short spritenum, short newsectnum); - changespritestat(short spritenum, short newstatnum); - -TILE VARIABLES: - NUMTILES - the number of tiles found TILES.DAT. - TILESIZX[MAXTILES] - simply the x-dimension of the tile number. - TILESIZY[MAXTILES] - simply the y-dimension of the tile number. - WALOFF[MAXTILES] - the actual 32-bit offset pointing to the top-left - corner of the tile. - PICANM[MAXTILES] - flags for animating the tile. - -TIMING VARIABLES: - TOTALCLOCK - When the engine is initialized, TOTALCLOCK is set to zero. - From then on, it is incremented 120 times a second by 1. That - means that the number of seconds elapsed is totalclock / 120. - NUMFRAMES - The number of times the draw3dscreen function was called - since the engine was initialized. This helps to determine frame - rate. (Frame rate = numframes * 120 / totalclock.) - -OTHER VARIABLES: - - STARTUMOST[320] is an array of the highest y-coordinates on each column - that my engine is allowed to write to. You need to set it only - once. - STARTDMOST[320] is an array of the lowest y-coordinates on each column - that my engine is allowed to write to. You need to set it only - once. - SINTABLE[2048] is a sin table with 2048 angles rather than the - normal 360 angles for higher precision. Also since SINTABLE is in - all integers, the range is multiplied by 16383, so instead of the - normal -10)<<10); - if (klabs(xvect) > klabs(yvect)) - return ((radarang[640+scale(160,yvect,xvect)]>>6)+((xvect<0)<<10))&2047; - return ((radarang[640-scale(160,xvect,yvect)]>>6)+512+((yvect<0)<<10))&2047; -} - -void rotatepoint(int32_t xpivot, int32_t ypivot, int32_t x, int32_t y, int16_t daang, int32_t *x2, int32_t *y2) ATTRIBUTE((nonnull(6,7))); -int32_t lastwall(int16_t point); -int32_t nextsectorneighborz(int16_t sectnum, int32_t thez, int16_t topbottom, int16_t direction); -int32_t getceilzofslope(int16_t sectnum, int32_t dax, int32_t day); -int32_t getflorzofslope(int16_t sectnum, int32_t dax, int32_t day); -void getzsofslope(int16_t sectnum, int32_t dax, int32_t day, int32_t *ceilz, int32_t *florz) ATTRIBUTE((nonnull(4,5))); -void alignceilslope(int16_t dasect, int32_t x, int32_t y, int32_t z); -void alignflorslope(int16_t dasect, int32_t x, int32_t y, int32_t z); -int32_t sectorofwall(int16_t theline); -int32_t sectorofwall_noquick(int16_t theline); -int32_t loopnumofsector(int16_t sectnum, int16_t wallnum); - -// int32_t insertsprite(int16_t sectnum, int16_t statnum); -// int32_t deletesprite(int16_t spritenum); - -// -// insertsprite -// - -int32_t insertspritesect(int16_t sectnum); -int32_t insertspritestat(int16_t statnum); -int32_t deletespritesect(int16_t deleteme); -int32_t deletespritestat(int16_t deleteme); - -int32_t lineintersect(int32_t x1, int32_t y1, int32_t z1, int32_t x2, int32_t y2, int32_t z2, int32_t x3, - int32_t y3, int32_t x4, int32_t y4, int32_t *intx, int32_t *inty, int32_t *intz); - -int32_t rayintersect(int32_t x1, int32_t y1, int32_t z1, int32_t vx, int32_t vy, int32_t vz, int32_t x3, - int32_t y3, int32_t x4, int32_t y4, int32_t *intx, int32_t *inty, int32_t *intz); - -static inline int32_t insertsprite(int16_t sectnum, int16_t statnum) -{ - insertspritestat(statnum); - return(insertspritesect(sectnum)); -} - -// -// deletesprite -// -static inline int32_t deletesprite(int16_t spritenum) -{ - deletespritestat(spritenum); - return(deletespritesect(spritenum)); -} - -int32_t changespritesect(int16_t spritenum, int16_t newsectnum); -int32_t changespritestat(int16_t spritenum, int16_t newstatnum); -int32_t setsprite(int16_t spritenum, const vec3_t *new) ATTRIBUTE((nonnull(2))); - -int32_t spriteheight(int16_t i, int32_t *basez); - -int32_t screencapture(const char *filename, char inverseit) ATTRIBUTE((nonnull(1))); - -int32_t getclosestcol(int32_t r, int32_t g, int32_t b); - -// PLAG: line utility functions -typedef struct s_equation { - float a, b, c; -} _equation; -typedef struct s_point2d { - float x, y; -} _point2d; -int32_t wallvisible(int32_t x, int32_t y, int16_t wallnum); - -#define STATUS2DSIZ 144 -#define STATUS2DSIZ2 26 - -void qsetmode640350(void); -void qsetmode640480(void); -void qsetmodeany(int32_t,int32_t); -void clear2dscreen(void); -void draw2dgrid(int32_t posxe, int32_t posye, int32_t posze, int16_t cursectnum, int16_t ange, int32_t zoome, int16_t gride); -void draw2dscreen(const vec3_t *pos, int16_t cursectnum, int16_t ange, int32_t zoome, int16_t gride) ATTRIBUTE((nonnull(1))); -int32_t drawline16(int32_t x1, int32_t y1, int32_t x2, int32_t y2, char col); -void drawcircle16(int32_t x1, int32_t y1, int32_t r, int32_t eccen, char col); - -int32_t setrendermode(int32_t renderer); -int32_t getrendermode(void); - -#ifdef USE_OPENGL -void setrollangle(int32_t rolla); -#endif - -// pal: pass -1 to invalidate all palettes for the tile, or >=0 for a particular palette -// how: pass -1 to invalidate all instances of the tile in texture memory, or a bitfield -// bit 0: opaque or masked (non-translucent) texture, using repeating -// bit 1: ignored -// bit 2: 33% translucence, using repeating -// bit 3: 67% translucence, using repeating -// bit 4: opaque or masked (non-translucent) texture, using clamping -// bit 5: ignored -// bit 6: 33% translucence, using clamping -// bit 7: 67% translucence, using clamping -// clamping is for sprites, repeating is for walls -void invalidatetile(int16_t tilenume, int32_t pal, int32_t how); - -int32_t animateoffs(int16_t tilenum, int16_t fakevar); - -void setpolymost2dview(void); // sets up GL for 2D drawing - -int32_t polymost_drawtilescreen(int32_t tilex, int32_t tiley, int32_t wallnum, int32_t dimen, int32_t tilezoom); -void polymost_glreset(void); -void polymost_precache(int32_t dapicnum, int32_t dapalnum, int32_t datype); - -#ifdef USE_OPENGL -extern int32_t glanisotropy; -extern int32_t glusetexcompr; -extern int32_t gltexfiltermode; -extern int32_t glredbluemode; -extern int32_t glusetexcache; -extern int32_t glmultisample, glnvmultisamplehint; -extern int32_t glwidescreen, glprojectionhacks; -extern int32_t gltexmaxsize; -void gltexapplyprops (void); -void invalidatecache(void); - -extern int32_t r_detailmapping; -extern int32_t r_glowmapping; -extern int32_t r_vertexarrays; -extern int32_t r_vbos; -extern int32_t r_vbocount; -extern int32_t r_animsmoothing; -extern int32_t r_parallaxskyclamping; -extern int32_t r_parallaxskypanning; -extern int32_t r_modelocclusionchecking; -extern int32_t r_fullbrights; -extern int32_t r_downsize; -extern int32_t r_downsizevar; -extern int32_t mdtims, omdtims; -extern int32_t glrendmode; -#endif - -void hicinit(void); -// effect bitset: 1 = greyscale, 2 = invert -void hicsetpalettetint(int32_t palnum, char r, char g, char b, char effect); -// flags bitset: 1 = don't compress -int32_t hicsetsubsttex(int32_t picnum, int32_t palnum, const char *filen, float alphacut, float xscale, float yscale, float specpower, float specfactor, char flags); -int32_t hicsetskybox(int32_t picnum, int32_t palnum, char *faces[6]); -int32_t hicclearsubst(int32_t picnum, int32_t palnum); - -int32_t Ptile2tile(int32_t tile, int32_t pallet); -int32_t md_loadmodel(const char *fn); -int32_t md_setmisc(int32_t modelid, float scale, int32_t shadeoff, float zadd, int32_t flags); -// int32_t md_tilehasmodel(int32_t tilenume, int32_t pal); - -#ifdef USE_OPENGL -typedef struct -{ - // maps build tiles to particular animation frames of a model - int32_t modelid; - int32_t skinnum; - int32_t framenum; // calculate the number from the name when declaring - float smoothduration; - int32_t next; - char pal; -} tile2model_t; - -#define EXTRATILES MAXTILES - -EXTERN int32_t mdinited; -EXTERN tile2model_t tile2model[MAXTILES+EXTRATILES]; - -static inline int32_t md_tilehasmodel(int32_t tilenume,int32_t pal) -{ - if (!mdinited) return -1; - return tile2model[Ptile2tile(tilenume,pal)].modelid; -} -#endif - -int32_t md_defineframe(int32_t modelid, const char *framename, int32_t tilenume, int32_t skinnum, float smoothduration, int32_t pal); -int32_t md_defineanimation(int32_t modelid, const char *framestart, const char *frameend, int32_t fps, int32_t flags); -int32_t md_defineskin(int32_t modelid, const char *skinfn, int32_t palnum, int32_t skinnum, int32_t surfnum, float param, float specpower, float specfactor); -int32_t md_definehud (int32_t modelid, int32_t tilex, double xadd, double yadd, double zadd, double angadd, int32_t flags, int32_t fov); -int32_t md_undefinetile(int32_t tile); -int32_t md_undefinemodel(int32_t modelid); - -int32_t loaddefinitionsfile(const char *fn); - -extern int32_t mapversion; // if loadboard() fails with -2 return, try loadoldboard(). if it fails with -2, board is dodgy -int32_t loadoldboard(char *filename, char fromwhere, int32_t *daposx, int32_t *daposy, int32_t *daposz, int16_t *daang, int16_t *dacursectnum); - -// Hash functions - -typedef struct _hashitem // size is 12/24 bits. -{ - char *string; - int32_t key; - struct _hashitem *next; -} hashitem_t; - -typedef struct -{ - int32_t size; - hashitem_t **items; -} hashtable_t; - -void hash_init(hashtable_t *t); -void hash_free(hashtable_t *t); -int32_t hash_findcase(hashtable_t *t, const char *s); -int32_t hash_find(hashtable_t *t, const char *s); -void hash_add(hashtable_t *t, const char *s, int32_t key, int32_t replace); - -#ifdef POLYMER -# include "polymer.h" -#else -#ifdef USE_OPENGL -# include "polymost.h" -#endif -#endif - -#ifdef __cplusplus -} -#endif - -#endif // __build_h__ diff --git a/polymer-perf/eduke32/build/include/cache1d.h b/polymer-perf/eduke32/build/include/cache1d.h deleted file mode 100644 index 7c764388b..000000000 --- a/polymer-perf/eduke32/build/include/cache1d.h +++ /dev/null @@ -1,73 +0,0 @@ -// cache1d.h - -#ifndef __cache1d_h__ -#define __cache1d_h__ - -#include "compat.h" -#include "mutex.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define MAXGROUPFILES 8 //Warning: Fix groupfil if this is changed -#define MAXOPENFILES 64 //Warning: Fix filehan if this is changed - -extern char filegrp[MAXOPENFILES]; - -void initcache(intptr_t dacachestart, int32_t dacachesize); -void allocache(intptr_t *newhandle, int32_t newbytes, char *newlockptr); -void suckcache(intptr_t *suckptr); -void agecache(void); - -extern int32_t pathsearchmode; // 0 = gamefs mode (default), 1 = localfs mode (editor's mode) -int32_t addsearchpath(const char *p); -int32_t findfrompath(const char *fn, char **where); -int32_t openfrompath(const char *fn, int32_t flags, int32_t mode); -BFILE *fopenfrompath(const char *fn, const char *mode); - -int32_t initgroupfile(const char *filename); -void uninitsinglegroupfile(int32_t grphandle); -void uninitgroupfile(void); -int32_t kopen4load(const char *filename, char searchfirst); // searchfirst: 0 = anywhere, 1 = first group, 2 = any group -int32_t kread(int32_t handle, void *buffer, int32_t leng); -int32_t klseek(int32_t handle, int32_t offset, int32_t whence); -int32_t kfilelength(int32_t handle); -int32_t ktell(int32_t handle); -void kclose(int32_t handle); - -typedef struct { intptr_t *hand; int32_t leng; char *lock ; } cactype; - -enum { - CACHE1D_FIND_FILE = 1, - CACHE1D_FIND_DIR = 2, - CACHE1D_FIND_DRIVE = 4, - - CACHE1D_OPT_NOSTACK = 0x100, - - // the lower the number, the higher the priority - CACHE1D_SOURCE_DRIVE = 0, - CACHE1D_SOURCE_CURDIR = 1, - CACHE1D_SOURCE_PATH = 2, // + path stack depth - CACHE1D_SOURCE_ZIP = 0x7ffffffe, - CACHE1D_SOURCE_GRP = 0x7fffffff, -}; -typedef struct _CACHE1D_FIND_REC { - char *name; - int32_t type, source; - struct _CACHE1D_FIND_REC *next, *prev, *usera, *userb; -} CACHE1D_FIND_REC; -void klistfree(CACHE1D_FIND_REC *rec); -CACHE1D_FIND_REC *klistpath(const char *path, const char *mask, int32_t type); - -int32_t kdfread(void *buffer, bsize_t dasizeof, bsize_t count, int32_t fil); -int32_t dfread(void *buffer, bsize_t dasizeof, bsize_t count, BFILE *fil); -void kdfwrite(void *buffer, bsize_t dasizeof, bsize_t count, int32_t fil); -void dfwrite(void *buffer, bsize_t dasizeof, bsize_t count, BFILE *fil); - -#ifdef __cplusplus -} -#endif - -#endif // __cache1d_h__ - diff --git a/polymer-perf/eduke32/build/include/compat.h b/polymer-perf/eduke32/build/include/compat.h deleted file mode 100644 index 680f2e4ad..000000000 --- a/polymer-perf/eduke32/build/include/compat.h +++ /dev/null @@ -1,573 +0,0 @@ -// Compatibility declarations for things which might not be present in -// certain build environments. It also levels the playing field caused -// by different platforms. - -#ifndef __compat_h__ -#define __compat_h__ - -# ifdef _WIN32 -# define WIN32_LEAN_AND_MEAN -# include -# endif - -#ifndef UNREFERENCED_PARAMETER - #define UNREFERENCED_PARAMETER(x) x=x -#endif - -#define clamp(in, min, max) ((in) <= (min) ? (min) : (in) >= (max) ? (max) : (in)) - -#if defined __GNUC__ || defined __clang__ -# define ATTRIBUTE(attrlist) __attribute__(attrlist) -#else -# define ATTRIBUTE(attrlist) -#endif - -// This gives us access to 'intptr_t' and 'uintptr_t', which are -// abstractions to the size of a pointer on a given platform -// (ie, they're guaranteed to be the same size as a pointer) -#ifdef HAVE_INTTYPES -# include -#elif defined(_MSC_VER) -# include "msvc/inttypes.h" // from http://code.google.com/p/msinttypes/ -#endif - -#ifndef _MSC_VER -#if defined(__GNUC__) && defined(__i386__) -#ifndef __fastcall -#define __fastcall __attribute__((fastcall)) -#endif -#else -#define __fastcall -#endif -#endif - -#ifdef NEDMALLOC -#include "nedmalloc.h" -#endif - -#ifndef TRUE -#define TRUE 1 -#endif - -#ifndef FALSE -#define FALSE 0 -#endif - -#define WITHKPLIB - -// Define this to rewrite all 'B' versions to library functions. This -// is for platforms which give us a standard sort of C library so we -// link directly. Platforms like PalmOS which don't have a standard C -// library will need to wrap these functions with suitable emulations. -#define __compat_h_macrodef__ - -#ifdef __cplusplus -# include -# ifdef __compat_h_macrodef__ -# include -# include -# include -# include -# endif -#else -# include -# include -#endif - -#ifdef __compat_h_macrodef__ -# ifndef __cplusplus -# include -# include -# include -# include -# endif -# include -# include -# include -# include -# include -# if defined(_WIN32) -# include -# else -# include -# endif -#endif - -#ifdef EFENCE -# include -#endif - -#if defined(_MSC_VER) -# define inline __inline -# define longlong(x) x##i64 -static inline float nearbyintf(float x) -{ - uint32_t w1, w2; - __asm fnstcw w1 - w2 = w1 | 0x00000020; - __asm - { - fldcw w2 - fld x - frndint - fclex - fldcw w1 - } -} -#else -# define longlong(x) x##ll -#endif - -#ifndef NULL -# define NULL ((void *)0) -#endif - -#if defined(__linux) -# include -# if __BYTE_ORDER == __LITTLE_ENDIAN -# define B_LITTLE_ENDIAN 1 -# define B_BIG_ENDIAN 0 -# elif __BYTE_ORDER == __BIG_ENDIAN -# define B_LITTLE_ENDIAN 0 -# define B_BIG_ENDIAN 1 -# endif -# define B_ENDIAN_C_INLINE 1 - -#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) -# include -# if _BYTE_ORDER == _LITTLE_ENDIAN -# define B_LITTLE_ENDIAN 1 -# define B_BIG_ENDIAN 0 -# elif _BYTE_ORDER == _BIG_ENDIAN -# define B_LITTLE_ENDIAN 0 -# define B_BIG_ENDIAN 1 -# endif -# define B_SWAP64(x) __bswap64(x) -# define B_SWAP32(x) __bswap32(x) -# define B_SWAP16(x) __bswap16(x) - -#elif defined(__APPLE__) -# if defined(__LITTLE_ENDIAN__) -# define B_LITTLE_ENDIAN 1 -# define B_BIG_ENDIAN 0 -# elif defined(__BIG_ENDIAN__) -# define B_LITTLE_ENDIAN 0 -# define B_BIG_ENDIAN 1 -# endif -# include -# define B_SWAP64(x) OSSwapConstInt64(x) -# define B_SWAP32(x) OSSwapConstInt32(x) -# define B_SWAP16(x) OSSwapConstInt16(x) - -#elif defined(__BEOS__) -# include -# if LITTLE_ENDIAN != 0 -# define B_LITTLE_ENDIAN 1 -# define B_BIG_ENDIAN 0 -# elif BIG_ENDIAN != 0 -# define B_LITTLE_ENDIAN 0 -# define B_BIG_ENDIAN 1 -# endif -# define B_ENDIAN_C_INLINE 1 - -#elif defined(__QNX__) -# if defined __LITTLEENDIAN__ -# define B_LITTLE_ENDIAN 1 -# define B_BIG_ENDIAN 0 -# elif defined __BIGENDIAN__ -# define B_LITTLE_ENDIAN 0 -# define B_BIG_ENDIAN 1 -# endif -# define B_ENDIAN_C_INLINE 1 - -#elif defined(__sun) -# if defined _LITTLE_ENDIAN -# define B_LITTLE_ENDIAN 1 -# define B_BIG_ENDIAN 0 -# elif defined _BIG_ENDIAN -# define B_LITTLE_ENDIAN 0 -# define B_BIG_ENDIAN 1 -# endif -# define B_ENDIAN_C_INLINE 1 - -#elif defined(_WIN32) || defined(SKYOS) || defined(__SYLLABLE__) -# define B_LITTLE_ENDIAN 1 -# define B_BIG_ENDIAN 0 -# define B_ENDIAN_C_INLINE 1 -#endif - -#if !defined(B_LITTLE_ENDIAN) || !defined(B_BIG_ENDIAN) -# error Unknown endianness -#endif - -#ifdef __cplusplus - -# ifndef SCREWED_UP_CPP -// using namespace std; -# endif - -extern "C" { -#endif - -#if defined B_ENDIAN_X86_INLINE -# if defined(_MSC_VER) - // inline asm using bswap/xchg -# elif defined(__GNUC__) - // inline asm using bswap/xchg -# endif -#elif defined B_ENDIAN_C_INLINE -static inline uint16_t B_SWAP16(uint16_t s) { return (s>>8)|(s<<8); } -static inline uint32_t B_SWAP32(uint32_t l) { return ((l>>8)&0xff00)|((l&0xff00)<<8)|(l<<24)|(l>>24); } -static inline uint64_t B_SWAP64(uint64_t l) { return (l>>56)|((l>>40)&0xff00)|((l>>24)&0xff0000)|((l>>8)&0xff000000)|((l&255)<<56)|((l&0xff00)<<40)|((l&0xff0000)<<24)|((l&0xff000000)<<8); } -#endif - -#if defined(USE_MSC_PRAGMAS) -static inline void ftol(float f, int32_t *a) -{ - _asm - { - mov eax, a - fld f - fistp dword ptr [eax] - } -} - -static inline void dtol(double d, int32_t *a) -{ - _asm - { - mov eax, a - fld d - fistp dword ptr [eax] - } -} -#elif defined(USE_GCC_PRAGMAS) - -static inline void ftol(float f, int32_t *a) -{ - __asm__ __volatile__( -#if 0 //(__GNUC__ >= 3) - "flds %1; fistpl %0;" -#else - "flds %1; fistpl (%0);" -#endif - : "=r"(a) : "m"(f) : "memory","cc"); -} - -static inline void dtol(double d, int32_t *a) -{ - __asm__ __volatile__( -#if 0 //(__GNUC__ >= 3) - "fldl %1; fistpl %0;" -#else - "fldl %1; fistpl (%0);" -#endif - : "=r"(a) : "m"(d) : "memory","cc"); -} - -#else -static inline void ftol(float f, int32_t *a) -{ - *a = (int32_t)f; -} - -static inline void dtol(double d, int32_t *a) -{ - *a = (int32_t)d; -} -#endif - -#if B_LITTLE_ENDIAN == 1 -# define B_LITTLE64(x) (x) -# define B_BIG64(x) B_SWAP64(x) -# define B_LITTLE32(x) (x) -# define B_BIG32(x) B_SWAP32(x) -# define B_LITTLE16(x) (x) -# define B_BIG16(x) B_SWAP16(x) -#elif B_BIG_ENDIAN == 1 -# define B_LITTLE64(x) B_SWAP64(x) -# define B_BIG64(x) (x) -# define B_LITTLE32(x) B_SWAP32(x) -# define B_BIG32(x) (x) -# define B_LITTLE16(x) B_SWAP16(x) -# define B_BIG16(x) (x) -#endif - -#ifndef FP_OFF -# define FP_OFF(__p) ((uintptr_t)(__p)) -#endif - -#ifdef __compat_h_macrodef__ - -# ifndef O_BINARY -# define O_BINARY 0 -# endif -# ifndef O_TEXT -# define O_TEXT 0 -# endif - -# ifndef F_OK -# define F_OK 0 -# endif - -# define BO_BINARY O_BINARY -# define BO_TEXT O_TEXT -# define BO_RDONLY O_RDONLY -# define BO_WRONLY O_WRONLY -# define BO_RDWR O_RDWR -# define BO_APPEND O_APPEND -# define BO_CREAT O_CREAT -# define BO_TRUNC O_TRUNC -# define BS_IRGRP S_IRGRP -# define BS_IWGRP S_IWGRP -# define BS_IEXEC S_IEXEC -# define BS_IWRITE S_IWRITE -# define BS_IREAD S_IREAD -# define BS_IFIFO S_IFIFO -# define BS_IFCHR S_IFCHR -# define BS_IFBLK S_IFBLK -# define BS_IFDIR S_IFDIR -# define BS_IFREG S_IFREG -# define BSEEK_SET SEEK_SET -# define BSEEK_CUR SEEK_CUR -# define BSEEK_END SEEK_END -#else -# define BO_BINARY 0 -# define BO_TEXT 1 -# define BO_RDONLY 2 -# define BO_WRONLY 4 -# define BO_RDWR 6 -# define BO_APPEND 8 -# define BO_CREAT 16 -# define BO_TRUNC 32 -# define BS_IRGRP 0 -# define BS_IWGRP 0 -# define BS_IEXEC 1 -# define BS_IWRITE 2 -# define BS_IREAD 4 -# define BS_IFIFO 0x1000 -# define BS_IFCHR 0x2000 -# define BS_IFBLK 0x3000 -# define BS_IFDIR 0x4000 -# define BS_IFREG 0x8000 -# define BSEEK_SET 0 -# define BSEEK_CUR 1 -# define BSEEK_END 2 -#endif - -#ifdef UNDERSCORES -# define ASMSYM(x) "_" x -#else -# define ASMSYM(x) x -#endif - -#ifndef min -# define min(a,b) ( ((a) < (b)) ? (a) : (b) ) -#endif - -#ifndef max -# define max(a,b) ( ((a) > (b)) ? (a) : (b) ) -#endif - - -#define BMAX_PATH 256 - - -struct Bdirent { - uint16_t namlen; - char *name; - uint32_t mode; - uint32_t size; - uint32_t mtime; -}; -typedef void BDIR; - -BDIR* Bopendir(const char *name); -struct Bdirent* Breaddir(BDIR *dir); -int32_t Bclosedir(BDIR *dir); - - -#ifdef __compat_h_macrodef__ - typedef FILE BFILE; -# define bsize_t size_t -# define bssize_t ssize_t -#else - typedef void BFILE; - typedef uint32_t bsize_t; - typedef int32_t bssize_t; -#endif - - -#ifdef __compat_h_macrodef__ -# define Brand rand -# define Balloca alloca -#ifdef NEDMALLOC -# define Bmalloc nedmalloc -# define Bcalloc nedcalloc -# define Brealloc nedrealloc -# define Bfree nedfree -# define Bstrdup nedstrdup -# define Bmemalign nedmemalign -#else -# define Bmalloc malloc -# define Bcalloc calloc -# define Brealloc realloc -# define Bfree free -# define Bstrdup strdup -# define Bmemalign memalign -#endif -# define Bopen open -# define Bclose close -# define Bwrite write -# define Bread read -# define Blseek lseek -# if defined(__GNUC__) -# define Btell(h) lseek(h,0,SEEK_CUR) -# else -# define Btell tell -# endif -# define Bstat stat -# define Bfopen fopen -# define Bfclose fclose -# define Bfeof feof -# define Bfgetc fgetc -# define Brewind rewind -# define Bfgets fgets -# define Bfputc fputc -# define Bfputs fputs -# define Bfread fread -# define Bfwrite fwrite -# define Bfprintf fprintf -# define Bstrcpy strcpy -# define Bstrncpy strncpy -# define Bstrcmp strcmp -# define Bstrncmp strncmp -# if defined(_MSC_VER) -# define Bstrcasecmp _stricmp -# define Bstrncasecmp _strnicmp -# else -# if defined(__QNX__) -# define Bstrcasecmp stricmp -# define Bstrncasecmp strnicmp -# else -# define Bstrcasecmp strcasecmp -# define Bstrncasecmp strncasecmp -# endif -# endif -# if defined(_WIN32) -# define Bstrlwr strlwr -# define Bstrupr strupr -# define Bmkdir(s,x) mkdir(s) -# else -# define Bmkdir mkdir -# endif -# define Bstrcat strcat -# define Bstrncat strncat -# define Bstrlen strlen -# define Bstrchr strchr -# define Bstrrchr strrchr -# define Batoi atoi -# define Batol atol -# define Bstrtol strtol -# define Bstrtoul strtoul -# define Bstrtod strtod -# define Bstrstr strstr -# define Btoupper toupper -# define Btolower tolower -# define Bmemcpy memcpy -# define Bmemmove memmove -# define Bmemchr memchr -# define Bmemset memset -# define Bmemcmp memcmp -# define Bprintf printf -# define Bsprintf sprintf -# ifdef _MSC_VER -# define Bsnprintf _snprintf -# define Bvsnprintf _vsnprintf -# else -# define Bsnprintf snprintf -# define Bvsnprintf vsnprintf -# endif -# define Bvfprintf vfprintf -# define Bgetcwd getcwd -# define Bgetenv getenv -# define Btime() time(NULL) - -#else - -int32_t Brand(void); -void *Bmalloc(bsize_t size); -void Bfree(void *ptr); -int32_t Bopen(const char *pathname, int32_t flags, unsigned mode); -int32_t Bclose(int32_t fd); -bssize_t Bwrite(int32_t fd, const void *buf, bsize_t count); -bssize_t Bread(int32_t fd, void *buf, bsize_t count); -int32_t Blseek(int32_t fildes, int32_t offset, int32_t whence); -BFILE *Bfopen(const char *path, const char *mode); -int32_t Bfclose(BFILE *stream); -int32_t Bfeof(BFILE *stream); -int32_t Bfgetc(BFILE *stream); -void Brewind(BFILE *stream); -char *Bfgets(char *s, int32_t size, BFILE *stream); -int32_t Bfputc(int32_t c, BFILE *stream); -int32_t Bfputs(const char *s, BFILE *stream); -bsize_t Bfread(void *ptr, bsize_t size, bsize_t nmemb, BFILE *stream); -bsize_t Bfwrite(const void *ptr, bsize_t size, bsize_t nmemb, BFILE *stream); -char *Bstrdup(const char *s); -char *Bstrcpy(char *dest, const char *src); -char *Bstrncpy(char *dest, const char *src, bsize_t n); -int32_t Bstrcmp(const char *s1, const char *s2); -int32_t Bstrncmp(const char *s1, const char *s2, bsize_t n); -int32_t Bstrcasecmp(const char *s1, const char *s2); -int32_t Bstrncasecmp(const char *s1, const char *s2, bsize_t n); -char *Bstrcat(char *dest, const char *src); -char *Bstrncat(char *dest, const char *src, bsize_t n); -bsize_t Bstrlen(const char *s); -char *Bstrchr(const char *s, int32_t c); -char *Bstrrchr(const char *s, int32_t c); -int32_t Batoi(const char *nptr); -int32_t Batol(const char *nptr); -int32_t Bstrtol(const char *nptr, char **endptr, int32_t base); -uint32_t Bstrtoul(const char *nptr, char **endptr, int32_t base); -void *Bmemcpy(void *dest, const void *src, bsize_t n); -void *Bmemmove(void *dest, const void *src, bsize_t n); -void *Bmemchr(const void *s, int32_t c, bsize_t n); -void *Bmemset(void *s, int32_t c, bsize_t n); -int32_t Bmemcmp(const void *s1, const void *s2, bsize_t n); -int32_t Bprintf(const char *format, ...) ATTRIBUTE((format(printf,1,2))); -int32_t Bsprintf(char *str, const char *format, ...) ATTRIBUTE((format(printf,2,3))); -int32_t Bsnprintf(char *str, bsize_t size, const char *format, ...) ATTRIBUTE((format(printf,3,4))); -int32_t Bvsnprintf(char *str, bsize_t size, const char *format, va_list ap); -char *Bgetcwd(char *buf, bsize_t size); -char *Bgetenv(const char *name); -#endif - -char *Bgethomedir(void); -char *Bgetsupportdir(int32_t global); -uint32_t Bgetsysmemsize(void); -int32_t Bcorrectfilename(char *filename, int32_t removefn); -int32_t Bcanonicalisefilename(char *filename, int32_t removefn); -char *Bgetsystemdrives(void); -int32_t Bfilelength(int32_t fd); -char *Bstrtoken(char *s, const char *delim, char **ptrptr, int32_t chop); -int32_t Bwildmatch (const char *i, const char *j); - -#if !defined(_WIN32) -char *Bstrlwr(char *); -char *Bstrupr(char *); -#endif - -#ifdef __cplusplus -} -#endif - -// timer defs for profiling function chunks the simple way -#define EDUKE32_TMRDEF int32_t t[20], ti=0; const char *tmrstr=__func__; fprintf(stderr,"%s\n",tmrstr); t[ti++]=getticks(); -#define EDUKE32_TMRTIC t[ti++]=getticks() -#define EDUKE32_TMRPRN do { int ii=0; fprintf(stderr,"%s: ",tmrstr); for (ii=1; ii> 8); - *crcvar = crc; -} - -static inline uint32_t crc32finish(uint32_t *crcvar) -{ - *crcvar = *crcvar ^ 0xffffffffl; - return *crcvar; -} - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/polymer-perf/eduke32/build/include/dxdidf.h b/polymer-perf/eduke32/build/include/dxdidf.h deleted file mode 100644 index be29e6218..000000000 --- a/polymer-perf/eduke32/build/include/dxdidf.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef __dxdidf_h__ -#define __dxdidf_h__ - -// Joystick - -static DIOBJECTDATAFORMAT c_dfDIJoystick_odf[] = { - { &GUID_XAxis, 0, 0x80FFFF03, 0x00000100 }, - { &GUID_YAxis, 4, 0x80FFFF03, 0x00000100 }, - { &GUID_ZAxis, 8, 0x80FFFF03, 0x00000100 }, - { &GUID_RxAxis, 12, 0x80FFFF03, 0x00000100 }, - { &GUID_RyAxis, 16, 0x80FFFF03, 0x00000100 }, - { &GUID_RzAxis, 20, 0x80FFFF03, 0x00000100 }, - { &GUID_Slider, 24, 0x80FFFF03, 0x00000100 }, - { &GUID_Slider, 28, 0x80FFFF03, 0x00000100 }, - { &GUID_POV, 32, 0x80FFFF10, 0x00000000 }, - { &GUID_POV, 36, 0x80FFFF10, 0x00000000 }, - { &GUID_POV, 40, 0x80FFFF10, 0x00000000 }, - { &GUID_POV, 44, 0x80FFFF10, 0x00000000 }, - { NULL, 48, 0x80FFFF0C, 0x00000000 }, - { NULL, 49, 0x80FFFF0C, 0x00000000 }, - { NULL, 50, 0x80FFFF0C, 0x00000000 }, - { NULL, 51, 0x80FFFF0C, 0x00000000 }, - { NULL, 52, 0x80FFFF0C, 0x00000000 }, - { NULL, 53, 0x80FFFF0C, 0x00000000 }, - { NULL, 54, 0x80FFFF0C, 0x00000000 }, - { NULL, 55, 0x80FFFF0C, 0x00000000 }, - { NULL, 56, 0x80FFFF0C, 0x00000000 }, - { NULL, 57, 0x80FFFF0C, 0x00000000 }, - { NULL, 58, 0x80FFFF0C, 0x00000000 }, - { NULL, 59, 0x80FFFF0C, 0x00000000 }, - { NULL, 60, 0x80FFFF0C, 0x00000000 }, - { NULL, 61, 0x80FFFF0C, 0x00000000 }, - { NULL, 62, 0x80FFFF0C, 0x00000000 }, - { NULL, 63, 0x80FFFF0C, 0x00000000 }, - { NULL, 64, 0x80FFFF0C, 0x00000000 }, - { NULL, 65, 0x80FFFF0C, 0x00000000 }, - { NULL, 66, 0x80FFFF0C, 0x00000000 }, - { NULL, 67, 0x80FFFF0C, 0x00000000 }, - { NULL, 68, 0x80FFFF0C, 0x00000000 }, - { NULL, 69, 0x80FFFF0C, 0x00000000 }, - { NULL, 70, 0x80FFFF0C, 0x00000000 }, - { NULL, 71, 0x80FFFF0C, 0x00000000 }, - { NULL, 72, 0x80FFFF0C, 0x00000000 }, - { NULL, 73, 0x80FFFF0C, 0x00000000 }, - { NULL, 74, 0x80FFFF0C, 0x00000000 }, - { NULL, 75, 0x80FFFF0C, 0x00000000 }, - { NULL, 76, 0x80FFFF0C, 0x00000000 }, - { NULL, 77, 0x80FFFF0C, 0x00000000 }, - { NULL, 78, 0x80FFFF0C, 0x00000000 }, - { NULL, 79, 0x80FFFF0C, 0x00000000 } -}; - -const DIDATAFORMAT c_dfDIJoystick = { 24, 16, 0x00000001, 80, 44, c_dfDIJoystick_odf }; - -#endif // __dxdidf_h__ diff --git a/polymer-perf/eduke32/build/include/dynamicgtk.h b/polymer-perf/eduke32/build/include/dynamicgtk.h deleted file mode 100644 index fd9ab1f8c..000000000 --- a/polymer-perf/eduke32/build/include/dynamicgtk.h +++ /dev/null @@ -1,629 +0,0 @@ -#ifndef __dynamicgtk_h__ -#define __dynamicgtk_h__ - -#include -#include -#include -#include - -#include "compat.h" - -#if !GTK_CHECK_VERSION(2,4,0) -#error You need at least 2.4.0 version of GTK+ -#endif - -#if !defined(LINKED_GTK) - -#ifndef G_GNUC_NULL_TERMINATED -/* this is a glib-2.8.x thing: */ -#define G_GNUC_NULL_TERMINATED -#endif - -struct _dynamicgtksyms { - - // glib.h -void (*g_free) (gpointer mem); - // gobject.h -gpointer (*g_object_get_data) (GObject *object, - const gchar *key); -void (*g_object_set_data) (GObject *object, - const gchar *key, - gpointer data); -void (*g_object_set_data_full) (GObject *object, - const gchar *key, - gpointer data, - GDestroyNotify destroy); -void (*g_object_unref) (gpointer object); - - // gsignal.h -gulong (*g_signal_connect_data) (gpointer instance, - const gchar *detailed_signal, - GCallback c_handler, - gpointer data, - GClosureNotify destroy_data, - GConnectFlags connect_flags); -guint (*g_signal_handlers_block_matched) (gpointer instance, - GSignalMatchType mask, - guint signal_id, - GQuark detail, - GClosure *closure, - gpointer func, - gpointer data); -guint (*g_signal_handlers_unblock_matched) (gpointer instance, - GSignalMatchType mask, - guint signal_id, - GQuark detail, - GClosure *closure, - gpointer func, - gpointer data); - - // gtype.h -GTypeInstance* (*g_type_check_instance_cast) (GTypeInstance *instance, - GType iface_type); - - // gdk-pixdata.h -GdkPixbuf* (*gdk_pixbuf_from_pixdata) (const GdkPixdata *pixdata, - gboolean copy_pixels, - GError **error); - - // gdk-pixbuf-core.h -GdkPixbuf *(*gdk_pixbuf_new_from_data) (const guchar *data, - GdkColorspace colorspace, - gboolean has_alpha, - int32_t bits_per_sample, - int32_t width, int32_t height, - int32_t rowstride, - GdkPixbufDestroyNotify destroy_fn, - gpointer destroy_fn_data); - - // gtkaccelgroup.h -GtkAccelGroup* (*gtk_accel_group_new) (void); - - // gtkalignment.h -GtkWidget* (*gtk_alignment_new) (gfloat xalign, - gfloat yalign, - gfloat xscale, - gfloat yscale); - - // gtkbox.h -GType (*gtk_box_get_type) (void) G_GNUC_CONST; -void (*gtk_box_pack_start) (GtkBox *box, - GtkWidget *child, - gboolean expand, - gboolean fill, - guint padding); - - // gtkbbox.h -GType (*gtk_button_box_get_type) (void) G_GNUC_CONST; -void (*gtk_button_box_set_layout) (GtkButtonBox *widget, - GtkButtonBoxStyle layout_style); - - // gtkbutton.h -GtkWidget* (*gtk_button_new) (void); - - // gtkcelllayout.h -GType (*gtk_cell_layout_get_type) (void) G_GNUC_CONST; -void (*gtk_cell_layout_pack_start) (GtkCellLayout *cell_layout, - GtkCellRenderer *cell, - gboolean expand); -void (*gtk_cell_layout_set_attributes) (GtkCellLayout *cell_layout, - GtkCellRenderer *cell, - ...) G_GNUC_NULL_TERMINATED; - - // gtkcellrenderertext.h -GtkCellRenderer *(*gtk_cell_renderer_text_new) (void); - - // gtkcheckbutton.h -GtkWidget* (*gtk_check_button_new_with_mnemonic) (const gchar *label); - - // gtkcombobox.h -gint (*gtk_combo_box_get_active) (GtkComboBox *combo_box); -gboolean (*gtk_combo_box_get_active_iter) (GtkComboBox *combo_box, - GtkTreeIter *iter); -gchar (*gtk_combo_box_get_active_text) (GtkComboBox *combo_box); -GtkTreeModel *(*gtk_combo_box_get_model) (GtkComboBox *combo_box); -GType (*gtk_combo_box_get_type) (void) G_GNUC_CONST; -GtkWidget *(*gtk_combo_box_new_text) (void); -GtkWidget *(*gtk_combo_box_new_with_model) (GtkTreeModel *model); -void (*gtk_combo_box_set_active) (GtkComboBox *combo_box, - gint index_); -void (*gtk_combo_box_set_active_iter) (GtkComboBox *combo_box, - GtkTreeIter *iter); - - // gtkcontainer.h -void (*gtk_container_add) (GtkContainer *container, - GtkWidget *widget); -void (*gtk_container_foreach) (GtkContainer *container, - GtkCallback callback, - gpointer callback_data); -GType (*gtk_container_get_type) (void) G_GNUC_CONST; -void (*gtk_container_set_border_width) (GtkContainer *container, - guint border_width); - - // gtkdialog.h -GType (*gtk_dialog_get_type) (void) G_GNUC_CONST; -gint (*gtk_dialog_run) (GtkDialog *dialog); - - // gtkhbox.h -GtkWidget* (*gtk_hbox_new) (gboolean homogeneous, - gint spacing); - - // gtkhbbox.h -GtkWidget* (*gtk_hbutton_box_new) (void); - - // gtkimage.h -GtkWidget* (*gtk_image_new_from_pixbuf) (GdkPixbuf *pixbuf); -GtkWidget* (*gtk_image_new_from_stock) (const gchar *stock_id, - GtkIconSize size); - - // gtkmain.h -gboolean (*gtk_init_check) (int32_t *argc, - char ***argv); - - // gtklabel.h -GType (*gtk_label_get_type) (void) G_GNUC_CONST; -GtkWidget* (*gtk_label_new) (const gchar *str); -GtkWidget* (*gtk_label_new_with_mnemonic) (const gchar *str); -void (*gtk_label_set_mnemonic_widget) (GtkLabel *label, - GtkWidget *widget); - - // gtkliststore.h -void (*gtk_list_store_append) (GtkListStore *list_store, - GtkTreeIter *iter); -void (*gtk_list_store_clear) (GtkListStore *list_store); -GType (*gtk_list_store_get_type) (void) G_GNUC_CONST; -GtkListStore *(*gtk_list_store_new) (gint n_columns, - ...); -void (*gtk_list_store_set) (GtkListStore *list_store, - GtkTreeIter *iter, - ...); - - // gtkmain.h -void (*gtk_main) (void); -gboolean (*gtk_main_iteration_do) (gboolean blocking); -void (*gtk_main_quit) (void); - - // gtkmessagedialog.h -GtkWidget* (*gtk_message_dialog_new) (GtkWindow *parent, - GtkDialogFlags flags, - GtkMessageType type, - GtkButtonsType buttons, - const gchar *message_format, - ...) G_GNUC_PRINTF (5, 6); - - // gtkmisc.h -GType (*gtk_misc_get_type) (void) G_GNUC_CONST; -void (*gtk_misc_set_alignment) (GtkMisc *misc, - gfloat xalign, - gfloat yalign); - - // gtknotebook.h -GtkWidget* (*gtk_notebook_get_nth_page) (GtkNotebook *notebook, - gint page_num); -GType (*gtk_notebook_get_type) (void) G_GNUC_CONST; -GtkWidget * (*gtk_notebook_new) (void); -void (*gtk_notebook_set_current_page) (GtkNotebook *notebook, - gint page_num); -void (*gtk_notebook_set_tab_label) (GtkNotebook *notebook, - GtkWidget *child, - GtkWidget *tab_label); - - // gtkobject.h -GtkType (*gtk_object_get_type) (void) G_GNUC_CONST; - - // gtkscrolledwindow.h -GType (*gtk_scrolled_window_get_type) (void) G_GNUC_CONST; -GtkWidget* (*gtk_scrolled_window_new) (GtkAdjustment *hadjustment, - GtkAdjustment *vadjustment); -void (*gtk_scrolled_window_set_policy) (GtkScrolledWindow *scrolled_window, - GtkPolicyType hscrollbar_policy, - GtkPolicyType vscrollbar_policy); -void (*gtk_scrolled_window_set_shadow_type) (GtkScrolledWindow *scrolled_window, - GtkShadowType type); - // gtktable.h -GType (*gtk_table_get_type) (void) G_GNUC_CONST; -GtkWidget* (*gtk_table_new) (guint rows, - guint columns, - gboolean homogeneous); -void (*gtk_table_attach) (GtkTable *table, - GtkWidget *child, - guint left_attach, - guint right_attach, - guint top_attach, - guint bottom_attach, - GtkAttachOptions xoptions, - GtkAttachOptions yoptions, - guint xpadding, - guint ypadding); - - - // gtktextbuffer.h -gboolean (*gtk_text_buffer_backspace) (GtkTextBuffer *buffer, - GtkTextIter *iter, - gboolean interactive, - gboolean default_editable); -GtkTextMark *(*gtk_text_buffer_create_mark) (GtkTextBuffer *buffer, - const gchar *mark_name, - const GtkTextIter *where, - gboolean left_gravity); -void (*gtk_text_buffer_delete_mark) (GtkTextBuffer *buffer, - GtkTextMark *mark); -void (*gtk_text_buffer_get_end_iter) (GtkTextBuffer *buffer, - GtkTextIter *iter); -void (*gtk_text_buffer_insert) (GtkTextBuffer *buffer, - GtkTextIter *iter, - const gchar *text, - gint len); - - // gtktextiter.h - // FIXME: should I put a #if !GTK_CHECK_VERSION(2,6,0) - // around these three, or should I not care? -gboolean (*gtk_text_iter_backward_cursor_position) (GtkTextIter *iter); -gboolean (*gtk_text_iter_equal) (const GtkTextIter *lhs, - const GtkTextIter *rhs); -gboolean (*gtk_text_buffer_delete_interactive) (GtkTextBuffer *buffer, - GtkTextIter *start_iter, - GtkTextIter *end_iter, - gboolean default_editable); - - // gtktextview.h -GtkTextBuffer *(*gtk_text_view_get_buffer) (GtkTextView *text_view); -GType (*gtk_text_view_get_type) (void) G_GNUC_CONST; -GtkWidget * (*gtk_text_view_new) (void); -void (*gtk_text_view_scroll_to_mark) (GtkTextView *text_view, - GtkTextMark *mark, - gdouble within_margin, - gboolean use_align, - gdouble xalign, - gdouble yalign); -void (*gtk_text_view_set_cursor_visible) (GtkTextView *text_view, - gboolean setting); -void (*gtk_text_view_set_editable) (GtkTextView *text_view, - gboolean setting); -void (*gtk_text_view_set_left_margin) (GtkTextView *text_view, - gint left_margin); -void (*gtk_text_view_set_right_margin) (GtkTextView *text_view, - gint right_margin); -void (*gtk_text_view_set_wrap_mode) (GtkTextView *text_view, - GtkWrapMode wrap_mode); - - // gtktogglebutton.h -gboolean (*gtk_toggle_button_get_active) (GtkToggleButton *toggle_button); -GType (*gtk_toggle_button_get_type) (void) G_GNUC_CONST; -void (*gtk_toggle_button_set_active) (GtkToggleButton *toggle_button, - gboolean is_active); - - // gtktreemodel.h -void (*gtk_tree_model_get) (GtkTreeModel *tree_model, - GtkTreeIter *iter, - ...); -gboolean (*gtk_tree_model_get_iter) (GtkTreeModel *tree_model, - GtkTreeIter *iter, - GtkTreePath *path); -GtkTreePath * (*gtk_tree_model_get_path) (GtkTreeModel *tree_model, - GtkTreeIter *iter); -GType (*gtk_tree_model_get_type) (void) G_GNUC_CONST; -gint *(*gtk_tree_path_get_indices) (GtkTreePath *path); -GtkTreePath *(*gtk_tree_path_new_from_indices) (gint first_index, - ...); - // gtktreeselection.h -gboolean (*gtk_tree_selection_get_selected) (GtkTreeSelection *selection, - GtkTreeModel **model, - GtkTreeIter *iter); -void (*gtk_tree_selection_select_iter) (GtkTreeSelection *selection, - GtkTreeIter *iter); -GType (*gtk_tree_selection_get_type) (void) G_GNUC_CONST; - -void (*gtk_tree_selection_set_mode) (GtkTreeSelection *selection, - GtkSelectionMode type); - - // gtktreesortable.h -GType (*gtk_tree_sortable_get_type) (void) G_GNUC_CONST; - -void (*gtk_tree_sortable_set_sort_column_id) (GtkTreeSortable *sortable, - gint sort_column_id, - GtkSortType order); -void (*gtk_tree_sortable_set_sort_func) (GtkTreeSortable *sortable, - gint sort_column_id, - GtkTreeIterCompareFunc sort_func, - gpointer user_data, - GtkDestroyNotify destroy); - - // gtktreeview.h -GType (*gtk_tree_view_get_type) (void) G_GNUC_CONST; -GtkWidget *(*gtk_tree_view_new_with_model) (GtkTreeModel *model); - -GtkTreeModel *(*gtk_tree_view_get_model) (GtkTreeView *tree_view); - -GtkTreeSelection *(*gtk_tree_view_get_selection) (GtkTreeView *tree_view); -gint (*gtk_tree_view_append_column) (GtkTreeView *tree_view, - GtkTreeViewColumn *column); -void (*gtk_tree_view_set_enable_search) (GtkTreeView *tree_view, - gboolean enable_search); -void (*gtk_tree_view_set_headers_visible) (GtkTreeView *tree_view, - gboolean headers_visible); - - // gtktreeviewcolumn.h -GtkTreeViewColumn *(*gtk_tree_view_column_new_with_attributes) (const gchar *title, - GtkCellRenderer *cell, - ...) G_GNUC_NULL_TERMINATED; -void (*gtk_tree_view_column_set_expand) (GtkTreeViewColumn *tree_column, - gboolean expand); -void (*gtk_tree_view_column_set_min_width) (GtkTreeViewColumn *tree_column, - gint min_width); - - - // gtkvbox.h -GtkWidget* (*gtk_vbox_new) (gboolean homogeneous, - gint spacing); - - // gtkwidget.h -void (*gtk_widget_add_accelerator) (GtkWidget *widget, - const gchar *accel_signal, - GtkAccelGroup *accel_group, - guint accel_key, - GdkModifierType accel_mods, - GtkAccelFlags accel_flags); -void (*gtk_widget_destroy) (GtkWidget *widget); -GtkWidget* (*gtk_widget_ref) (GtkWidget *widget); -void (*gtk_widget_set_sensitive) (GtkWidget *widget, - gboolean sensitive); -void (*gtk_widget_set_size_request) (GtkWidget *widget, - gint width, - gint height); -void (*gtk_widget_show_all) (GtkWidget *widget); -void (*gtk_widget_unref) (GtkWidget *widget); - - // gtkwindow.h -void (*gtk_window_add_accel_group) (GtkWindow *window, - GtkAccelGroup *accel_group); -GType (*gtk_window_get_type) (void) G_GNUC_CONST; -GtkWidget* (*gtk_window_new) (GtkWindowType type); -void (*gtk_window_set_default_icon) (GdkPixbuf *icon); -void (*gtk_window_set_position) (GtkWindow *window, - GtkWindowPosition position); -void (*gtk_window_set_resizable) (GtkWindow *window, - gboolean resizable); -void (*gtk_window_set_title) (GtkWindow *window, - const gchar *title); -void (*gtk_window_set_type_hint) (GtkWindow *window, - GdkWindowTypeHint hint); -void (*gtk_window_set_default) (GtkWindow *window, - GtkWidget *default_widget); - - // gunicode.h -gint (*g_utf8_collate) (const gchar *str1, - const gchar *str2); - -}; -extern struct _dynamicgtksyms dynamicgtksyms; - -int32_t dynamicgtk_init(void); -void dynamicgtk_uninit(void); - -#ifndef __dynamicgtkfoo__ - -// glib.h -#define g_free dynamicgtksyms.g_free - -// gobject.h -#define g_object_get_data dynamicgtksyms.g_object_get_data -#define g_object_set_data dynamicgtksyms.g_object_set_data -#define g_object_set_data_full dynamicgtksyms.g_object_set_data_full -#define g_object_unref dynamicgtksyms.g_object_unref - -// gsignal.h -#define g_signal_connect_data dynamicgtksyms.g_signal_connect_data -#define g_signal_handlers_block_matched dynamicgtksyms.g_signal_handlers_block_matched -#define g_signal_handlers_unblock_matched dynamicgtksyms.g_signal_handlers_unblock_matched - -// gtype.h -#define g_type_check_instance_cast dynamicgtksyms.g_type_check_instance_cast - -// gdk-pixdata.h -#define gdk_pixbuf_from_pixdata dynamicgtksyms.gdk_pixbuf_from_pixdata - -// gdk-pixbuf-core.h -#define gdk_pixbuf_new_from_data dynamicgtksyms.gdk_pixbuf_new_from_data - -// gtkaccelgroup.h -#define gtk_accel_group_new dynamicgtksyms.gtk_accel_group_new - -// gtkalignment.h -#define gtk_alignment_new dynamicgtksyms.gtk_alignment_new - -// gtkbox.h -#define gtk_box_get_type dynamicgtksyms.gtk_box_get_type -#define gtk_box_pack_start dynamicgtksyms.gtk_box_pack_start - -// gtkbbox.h -#define gtk_button_box_get_type dynamicgtksyms.gtk_button_box_get_type -#define gtk_button_box_set_layout dynamicgtksyms.gtk_button_box_set_layout - -// gtkbutton.h -#define gtk_button_new dynamicgtksyms.gtk_button_new - -// gtkcelllayout.h -#define gtk_cell_layout_get_type dynamicgtksyms.gtk_cell_layout_get_type -#define gtk_cell_layout_pack_start dynamicgtksyms.gtk_cell_layout_pack_start -#define gtk_cell_layout_set_attributes dynamicgtksyms.gtk_cell_layout_set_attributes - -// gtkcellrenderertext.h -#define gtk_cell_renderer_text_new dynamicgtksyms.gtk_cell_renderer_text_new - -// gtkcheckbutton.h -#define gtk_check_button_new_with_mnemonic dynamicgtksyms.gtk_check_button_new_with_mnemonic - -// gtkcombobox.h -#define gtk_combo_box_get_active dynamicgtksyms.gtk_combo_box_get_active -#define gtk_combo_box_get_active_iter dynamicgtksyms.gtk_combo_box_get_active_iter -#define gtk_combo_box_get_active_text dynamicgtksyms.gtk_combo_box_get_active_text -#define gtk_combo_box_get_model dynamicgtksyms.gtk_combo_box_get_model -#define gtk_combo_box_get_type dynamicgtksyms.gtk_combo_box_get_type -#define gtk_combo_box_new_text dynamicgtksyms.gtk_combo_box_new_text -#define gtk_combo_box_new_with_model dynamicgtksyms.gtk_combo_box_new_with_model -#define gtk_combo_box_set_active dynamicgtksyms.gtk_combo_box_set_active -#define gtk_combo_box_set_active_iter dynamicgtksyms.gtk_combo_box_set_active_iter - -// gtkcontainer.h -#define gtk_container_add dynamicgtksyms.gtk_container_add -#define gtk_container_foreach dynamicgtksyms.gtk_container_foreach -#define gtk_container_get_type dynamicgtksyms.gtk_container_get_type -#define gtk_container_set_border_width dynamicgtksyms.gtk_container_set_border_width - -// gtkdialog.h -#define gtk_dialog_get_type dynamicgtksyms.gtk_dialog_get_type -#define gtk_dialog_run dynamicgtksyms.gtk_dialog_run - -// gtkhbox.h -#define gtk_hbox_new dynamicgtksyms.gtk_hbox_new - -// gtkhbbox.h -#define gtk_hbutton_box_new dynamicgtksyms.gtk_hbutton_box_new - -// gtkimage.h -#define gtk_image_new_from_pixbuf dynamicgtksyms.gtk_image_new_from_pixbuf -#define gtk_image_new_from_stock dynamicgtksyms.gtk_image_new_from_stock - -// gtkmain.h -#define gtk_init_check dynamicgtksyms.gtk_init_check - -// gtklabel.h -#define gtk_label_get_type dynamicgtksyms.gtk_label_get_type -#define gtk_label_new dynamicgtksyms.gtk_label_new -#define gtk_label_new_with_mnemonic dynamicgtksyms.gtk_label_new_with_mnemonic -#define gtk_label_set_mnemonic_widget dynamicgtksyms.gtk_label_set_mnemonic_widget - -// gtkliststore.h -#define gtk_list_store_append dynamicgtksyms.gtk_list_store_append -#define gtk_list_store_clear dynamicgtksyms.gtk_list_store_clear -#define gtk_list_store_get_type dynamicgtksyms.gtk_list_store_get_type -#define gtk_list_store_new dynamicgtksyms.gtk_list_store_new -#define gtk_list_store_set dynamicgtksyms.gtk_list_store_set - -// gtkmain.h -#define gtk_main dynamicgtksyms.gtk_main -#define gtk_main_iteration_do dynamicgtksyms.gtk_main_iteration_do -#define gtk_main_quit dynamicgtksyms.gtk_main_quit - -// gtkmessagedialog.h -#define gtk_message_dialog_new dynamicgtksyms.gtk_message_dialog_new - -// gtkmisc.h -#define gtk_misc_get_type dynamicgtksyms.gtk_misc_get_type -#define gtk_misc_set_alignment dynamicgtksyms.gtk_misc_set_alignment - -// gtknotebook.h -#define gtk_notebook_get_nth_page dynamicgtksyms.gtk_notebook_get_nth_page -#define gtk_notebook_get_type dynamicgtksyms.gtk_notebook_get_type -#define gtk_notebook_new dynamicgtksyms.gtk_notebook_new -#define gtk_notebook_set_current_page dynamicgtksyms.gtk_notebook_set_current_page -#define gtk_notebook_set_tab_label dynamicgtksyms.gtk_notebook_set_tab_label - -// gtkobject.h -#define gtk_object_get_type dynamicgtksyms.gtk_object_get_type - -// gtkscrolledwindow.h -#define gtk_scrolled_window_get_type dynamicgtksyms.gtk_scrolled_window_get_type -#define gtk_scrolled_window_new dynamicgtksyms.gtk_scrolled_window_new -#define gtk_scrolled_window_set_policy dynamicgtksyms.gtk_scrolled_window_set_policy -#define gtk_scrolled_window_set_shadow_type dynamicgtksyms.gtk_scrolled_window_set_shadow_type - -// gtktable.h -#define gtk_table_get_type dynamicgtksyms.gtk_table_get_type -#define gtk_table_new dynamicgtksyms.gtk_table_new -#define gtk_table_attach dynamicgtksyms.gtk_table_attach - -// gtktextbuffer.h -#define gtk_text_buffer_backspace dynamicgtksyms.gtk_text_buffer_backspace -#define gtk_text_buffer_create_mark dynamicgtksyms.gtk_text_buffer_create_mark -#define gtk_text_buffer_delete_mark dynamicgtksyms.gtk_text_buffer_delete_mark -#define gtk_text_buffer_get_end_iter dynamicgtksyms.gtk_text_buffer_get_end_iter -#define gtk_text_buffer_insert dynamicgtksyms.gtk_text_buffer_insert - -// gtktextiter.h -#define gtk_text_iter_backward_cursor_position dynamicgtksyms.gtk_text_iter_backward_cursor_position -#define gtk_text_iter_equal dynamicgtksyms.gtk_text_iter_equal -#define gtk_text_buffer_delete_interactive dynamicgtksyms.gtk_text_buffer_delete_interactive - -// gtktextview.h -#define gtk_text_view_get_buffer dynamicgtksyms.gtk_text_view_get_buffer -#define gtk_text_view_get_type dynamicgtksyms.gtk_text_view_get_type -#define gtk_text_view_new dynamicgtksyms.gtk_text_view_new -#define gtk_text_view_scroll_to_mark dynamicgtksyms.gtk_text_view_scroll_to_mark -#define gtk_text_view_set_cursor_visible dynamicgtksyms.gtk_text_view_set_cursor_visible -#define gtk_text_view_set_editable dynamicgtksyms.gtk_text_view_set_editable -#define gtk_text_view_set_left_margin dynamicgtksyms.gtk_text_view_set_left_margin -#define gtk_text_view_set_right_margin dynamicgtksyms.gtk_text_view_set_right_margin -#define gtk_text_view_set_wrap_mode dynamicgtksyms.gtk_text_view_set_wrap_mode - -// gtktogglebutton.h -#define gtk_toggle_button_get_active dynamicgtksyms.gtk_toggle_button_get_active -#define gtk_toggle_button_get_type dynamicgtksyms.gtk_toggle_button_get_type -#define gtk_toggle_button_set_active dynamicgtksyms.gtk_toggle_button_set_active - -// gtktreemodel.h -#define gtk_tree_model_get dynamicgtksyms.gtk_tree_model_get -#define gtk_tree_model_get_iter dynamicgtksyms.gtk_tree_model_get_iter -#define gtk_tree_model_get_path dynamicgtksyms.gtk_tree_model_get_path -#define gtk_tree_model_get_type dynamicgtksyms.gtk_tree_model_get_type -#define gtk_tree_path_get_indices dynamicgtksyms.gtk_tree_path_get_indices -#define gtk_tree_path_new_from_indices dynamicgtksyms.gtk_tree_path_new_from_indices - -// gtktreeselection.h -#define gtk_tree_selection_get_selected dynamicgtksyms.gtk_tree_selection_get_selected -#define gtk_tree_selection_select_iter dynamicgtksyms.gtk_tree_selection_select_iter -#define gtk_tree_selection_set_mode dynamicgtksyms.gtk_tree_selection_set_mode - -// gtktreesortable.h -#define gtk_tree_sortable_get_type dynamicgtksyms.gtk_tree_sortable_get_type -#define gtk_tree_sortable_set_sort_column_id dynamicgtksyms.gtk_tree_sortable_set_sort_column_id -#define gtk_tree_sortable_set_sort_func dynamicgtksyms.gtk_tree_sortable_set_sort_func - -// gtktreeview.h -#define gtk_tree_view_append_column dynamicgtksyms.gtk_tree_view_append_column -#define gtk_tree_view_get_model dynamicgtksyms.gtk_tree_view_get_model -#define gtk_tree_view_get_selection dynamicgtksyms.gtk_tree_view_get_selection -#define gtk_tree_view_get_type dynamicgtksyms.gtk_tree_view_get_type -#define gtk_tree_view_new_with_model dynamicgtksyms.gtk_tree_view_new_with_model -#define gtk_tree_view_set_enable_search dynamicgtksyms.gtk_tree_view_set_enable_search -#define gtk_tree_view_set_headers_visible dynamicgtksyms.gtk_tree_view_set_headers_visible - -// gtktreeviewcolumn.h -#define gtk_tree_view_column_new_with_attributes dynamicgtksyms.gtk_tree_view_column_new_with_attributes -#define gtk_tree_view_column_set_expand dynamicgtksyms.gtk_tree_view_column_set_expand -#define gtk_tree_view_column_set_min_width dynamicgtksyms.gtk_tree_view_column_set_min_width - - -// gtkvbox.h -#define gtk_vbox_new dynamicgtksyms.gtk_vbox_new - -// gtkwidget.h -#define gtk_widget_add_accelerator dynamicgtksyms.gtk_widget_add_accelerator -#define gtk_widget_destroy dynamicgtksyms.gtk_widget_destroy -#define gtk_widget_ref dynamicgtksyms.gtk_widget_ref -#define gtk_widget_set_sensitive dynamicgtksyms.gtk_widget_set_sensitive -#define gtk_widget_set_size_request dynamicgtksyms.gtk_widget_set_size_request -#define gtk_widget_show_all dynamicgtksyms.gtk_widget_show_all -#define gtk_widget_unref dynamicgtksyms.gtk_widget_unref - -// gtkwindow.h -#define gtk_window_add_accel_group dynamicgtksyms.gtk_window_add_accel_group -#define gtk_window_get_type dynamicgtksyms.gtk_window_get_type -#define gtk_window_new dynamicgtksyms.gtk_window_new -#define gtk_window_set_default_icon dynamicgtksyms.gtk_window_set_default_icon -#define gtk_window_set_position dynamicgtksyms.gtk_window_set_position -#define gtk_window_set_resizable dynamicgtksyms.gtk_window_set_resizable -#define gtk_window_set_title dynamicgtksyms.gtk_window_set_title -#define gtk_window_set_type_hint dynamicgtksyms.gtk_window_set_type_hint -#define gtk_window_set_default dynamicgtksyms.gtk_window_set_default - -// gunicode.h -#define g_utf8_collate dynamicgtksyms.g_utf8_collate - -#endif /* __dynamicgtkfoo__ */ - -#endif /* LINKED_GTK */ - -#endif /* __dynamicgtk_h__ */ - diff --git a/polymer-perf/eduke32/build/include/editor.h b/polymer-perf/eduke32/build/include/editor.h deleted file mode 100644 index c9658b804..000000000 --- a/polymer-perf/eduke32/build/include/editor.h +++ /dev/null @@ -1,229 +0,0 @@ -// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman -// Ken Silverman's official web site: "http://www.advsys.net/ken" -// See the included license file "BUILDLIC.TXT" for license info. - -#ifndef __editor_h__ -#define __editor_h__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define VERSION "2.0.0devel" - -// Build keys -#define BK_MOVEFORWARD 0 -#define BK_MOVEBACKWARD 1 -#define BK_TURNLEFT 2 -#define BK_TURNRIGHT 3 -#define BK_RUN 4 -#define BK_STRAFE 5 -#define BK_SHOOT 6 -#define BK_OPEN 7 -#define BK_MOVEUP 8 -#define BK_MOVEDOWN 9 -#define BK_LOOKUP 10 -#define BK_LOOKDOWN 11 -#define BK_STRAFELEFT 12 -#define BK_STRAFERIGHT 13 -#define BK_MODE2D_3D 14 -#define BK_PLAYERVIEW 15 -#define BK_ZOOMIN 16 -#define BK_ZOOMOUT 17 -#define BK_MESSAGE 18 -#define BK_CONSOLE 19 -#define NUMBUILDKEYS 20 - -extern int32_t qsetmode; -extern int16_t searchsector, searchwall, searchstat; -extern int16_t searchbottomwall; -extern int32_t zmode, kensplayerheight, zlock; - -#define DEFAULT_SPRITE_CSTAT 0 -//extern int16_t defaultspritecstat; - -extern int32_t temppicnum, tempcstat, templotag, temphitag, tempextra; -extern uint32_t temppal, tempvis, tempxrepeat, tempyrepeat; -extern int32_t tempshade, tempxvel, tempyvel, tempzvel; -extern char somethingintab; - -extern uint8_t buildkeys[NUMBUILDKEYS]; - -extern double vid_gamma_3d, vid_contrast_3d, vid_brightness_3d; - -extern int32_t ydim16, xdimgame, ydimgame, bppgame, xdim2d, ydim2d, forcesetup; -extern int32_t unrealedlook, quickmapcycling; -extern int32_t pk_turnaccel,pk_turndecel,pk_uedaccel; -extern int32_t revertCTRL,scrollamount; -extern int32_t autosave; -extern int32_t mlook; -extern int16_t prefixtiles[16]; - -extern char program_origcwd[BMAX_PATH]; -extern char *mapster32_fullpath; -extern char *testplay_addparam; -extern const char *g_namesFileName; - -extern int32_t m32_osd_tryscript; -extern int32_t showheightindicators; -extern int32_t showambiencesounds; - -// editor side view -extern int32_t m32_sideview; -extern int32_t m32_sideelev; -extern int16_t m32_sideang; -extern int32_t m32_sidecos, m32_sidesin; -extern int32_t m32_swcnt; -extern int16_t *m32_wallsprite; -extern int8_t sideview_reversehrot; -extern inline int32_t scalescreeny(int32_t sy); -extern void screencoords(int32_t *xres, int32_t *yres, int32_t x, int32_t y, int32_t zoome) ATTRIBUTE((nonnull)); -//extern void invscreencoords(int32_t *dx, int32_t *dy, int32_t sx, int32_t sy, int32_t zoome); -extern int32_t getinvdisplacement(int32_t *dx, int32_t *dy, int32_t dz) ATTRIBUTE((nonnull)); -extern inline int32_t getscreenvdisp(int32_t bz, int32_t zoome); -extern void setup_sideview_sincos(void); -extern void m32_setkeyfilter(int32_t on); - -extern int32_t wallength(int16_t i); -extern void fixrepeats(int16_t i); -extern void fixxrepeat(int16_t i, uint32_t lenrepquot); - -extern int32_t ExtInit(void); -extern int32_t ExtPreInit(int32_t argc,const char **argv); -extern void ExtUnInit(void); -extern void ExtPreCheckKeys(void); -extern void ExtAnalyzeSprites(void); -extern void ExtCheckKeys(void); -extern void ExtPreLoadMap(void); -extern void ExtLoadMap(const char *mapname); -extern void ExtPreSaveMap(void); -extern void ExtSaveMap(const char *mapname); -extern const char *ExtGetSectorCaption(int16_t sectnum); -extern const char *ExtGetWallCaption(int16_t wallnum); -extern const char *ExtGetSpriteCaption(int16_t spritenum); -extern void ExtShowSectorData(int16_t sectnum); -extern void ExtShowWallData(int16_t wallnum); -extern void ExtShowSpriteData(int16_t spritenum); -extern void ExtEditSectorData(int16_t sectnum); -extern void ExtEditWallData(int16_t wallnum); -extern void ExtEditSpriteData(int16_t spritenum); -extern const char *ExtGetSectorType(int32_t lotag); - -extern int32_t LoadBoard(const char *filename, uint32_t flags); -extern const char *SaveBoard(const char *fn, uint32_t flags); - -#define CORRUPT_SECTOR (1<<17) -#define CORRUPT_WALL (1<<18) -#define CORRUPT_SPRITE (1<<19) -#define CORRUPT_MASK (CORRUPT_SECTOR|CORRUPT_WALL|CORRUPT_SPRITE) -#define MAXCORRUPTTHINGS 64 -extern int32_t corruptlevel, numcorruptthings, corruptthings[MAXCORRUPTTHINGS]; -extern int32_t autocorruptcheck; -extern int32_t CheckMapCorruption(int32_t printfromlev, uint64_t tryfixing); - -extern void showsectordata(int16_t sectnum, int16_t small); -extern void showwalldata(int16_t wallnum, int16_t small); -extern void showspritedata(int16_t spritenum, int16_t small); - -extern void drawsmallabel(const char *text, char col, char backcol, int32_t dax, int32_t day, int32_t daz); - -extern int32_t circlewall; - -int32_t loadsetup(const char *fn); // from config.c -int32_t writesetup(const char *fn); // from config.c - -void editinput(void); -void clearmidstatbar16(void); - -int32_t _getnumber256(const char *namestart, int32_t num, int32_t maxnumber, char sign, void *(func)(int32_t)); -#define getnumber256(namestart, num, maxnumber, sign) _getnumber256(namestart, num, maxnumber, sign, NULL) -int32_t _getnumber16(const char *namestart, int32_t num, int32_t maxnumber, char sign, void *(func)(int32_t)); -#define getnumber16(namestart, num, maxnumber, sign) _getnumber16(namestart, num, maxnumber, sign, NULL) -void printmessage256(int32_t x, int32_t y, const char *name); -void message(const char *fmt, ...) ATTRIBUTE((format(printf,1,2))); - -// currently only for 3d mode -const char* getstring_simple(const char *querystr, const char *defaultstr, int32_t maxlen); - -// like snprintf, but pads the output buffer with 'fill' at the end -//int32_t snfillprintf(char *outbuf, size_t bufsiz, int32_t fill, const char *fmt, ...); -void _printmessage16(const char *fmt, ...) ATTRIBUTE((format(printf,1,2))); - -extern int32_t lastpm16time; -#define printmessage16(fmt, ...) lastpm16time = totalclock, _printmessage16(fmt, ## __VA_ARGS__) - -extern char lastpm16buf[156]; - -void DoSpriteOrnament(int32_t i); - -void getpoint(int32_t searchxe, int32_t searchye, int32_t *x, int32_t *y); -int32_t getpointhighlight(int32_t xplc, int32_t yplc, int32_t point); -void update_highlight(); -void update_highlightsector(); - -int32_t inside_editor(const vec3_t *pos, int32_t searchx, int32_t searchy, int32_t zoom, - int32_t x, int32_t y, int16_t sectnum); -void correct_sprite_yoffset(int32_t i); - -extern uint8_t hlsectorbitmap[MAXSECTORS>>3]; - -#ifdef _WIN32 -#define DEFAULT_GAME_EXEC "eduke32.exe" -#define DEFAULT_GAME_LOCAL_EXEC "eduke32.exe" -#else -#define DEFAULT_GAME_EXEC "eduke32" -#define DEFAULT_GAME_LOCAL_EXEC "./eduke32" -#endif - -void test_map(int32_t mode); - - -#define NEXTWALL(i) (wall[wall[i].nextwall]) -#define POINT2(i) (wall[wall[i].point2]) -#define SPRITESEC(j) (sector[sprite[j].sectnum]) - -#define CLEARLINES2D(Startline, Numlines, Color) clearbuf((char *)(frameplace + ((Startline)*bytesperline)), (bytesperline*(Numlines))>>2, (Color)) - -#define SCRIPTHISTSIZ 32 // should be the same as OSD_HISTORYDEPTH for maximum win, should be a power of two -extern const char *scripthist[SCRIPTHISTSIZ]; -extern int32_t scripthistend; - -//////////////////// Aiming //////////////////// -#define SEARCH_WALL 0 -#define SEARCH_CEILING 1 -#define SEARCH_FLOOR 2 -#define SEARCH_SPRITE 3 -#define SEARCH_MASKWALL 4 - -#define ASSERT_AIMING (searchstat>=0 && searchstat<=4) - -#define AIMING_AT_WALL (searchstat==0) -#define AIMING_AT_CEILING (searchstat==1) -#define AIMING_AT_FLOOR (searchstat==2) -#define AIMING_AT_SPRITE (searchstat==3) -#define AIMING_AT_MASKWALL (searchstat==4) - -#define AIMING_AT_WALL_OR_MASK (AIMING_AT_WALL || AIMING_AT_MASKWALL) -#define AIMING_AT_CEILING_OR_FLOOR (AIMING_AT_CEILING || AIMING_AT_FLOOR) - -#ifdef __cplusplus -} -#endif - -// showdebug is now used as a general informational on-screen display -#define M32_SHOWDEBUG - -// this should be only used if there's no dependency on endwall after the loop. -// of course, users of this macro should know that it modifies startwall and endwall. -#define WALLS_OF_SECTOR(Sect, Itervar) \ - startwall=sector[(Sect)].wallptr, endwall=startwall+sector[(Sect)].wallnum, Itervar=startwall; \ - Itervar < endwall; \ - Itervar++ - -#define BTAG_MAX 65535 -#define BZ_MAX 8388608 - - -#endif diff --git a/polymer-perf/eduke32/build/include/glbuild.h b/polymer-perf/eduke32/build/include/glbuild.h deleted file mode 100644 index 911c956b8..000000000 --- a/polymer-perf/eduke32/build/include/glbuild.h +++ /dev/null @@ -1,328 +0,0 @@ -#ifdef USE_OPENGL - -#ifdef RENDERTYPEWIN -#define WIN32_LEAN_AND_MEAN -#include -#endif - -#if defined(__APPLE__) -# include -# include -#else -# include -# include -#endif - -// get this header from http://oss.sgi.com/projects/ogl-sample/registry/ -// if you are missing it -//#include -#if defined(__APPLE__) -# include -#else -# include "glext.h" -#endif - -#ifndef GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT -#error You should get an updated copy of glext.h from http://oss.sgi.com/projects/ogl-sample/registry/ -#endif - -#ifndef APIENTRY -# define APIENTRY -#endif - -# ifdef _WIN32 -# define PR_CALLBACK __stdcall -# else -# define PR_CALLBACK -# endif - -// those defines are somehow missing from glext.h -#define GL_FRAMEBUFFER_EXT 0x8D40 -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 -#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 - -#define GL_TEXTURE_RECTANGLE 0x84F5 - -extern void (APIENTRY * bglClearColor)( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); -extern void (APIENTRY * bglClear)( GLbitfield mask ); -extern void (APIENTRY * bglColorMask)( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); -extern void (APIENTRY * bglAlphaFunc)( GLenum func, GLclampf ref ); -extern void (APIENTRY * bglBlendFunc)( GLenum sfactor, GLenum dfactor ); -extern void (APIENTRY * bglCullFace)( GLenum mode ); -extern void (APIENTRY * bglFrontFace)( GLenum mode ); -extern void (APIENTRY * bglPolygonOffset)( GLfloat factor, GLfloat units ); -extern void (APIENTRY * bglPolygonMode)( GLenum face, GLenum mode ); -extern void (APIENTRY * bglEnable)( GLenum cap ); -extern void (APIENTRY * bglDisable)( GLenum cap ); -extern void (APIENTRY * bglGetDoublev)( GLenum pname, GLdouble *params ); -extern void (APIENTRY * bglGetFloatv)( GLenum pname, GLfloat *params ); -extern void (APIENTRY * bglGetIntegerv)( GLenum pname, GLint *params ); -extern void (APIENTRY * bglPushAttrib)( GLbitfield mask ); -extern void (APIENTRY * bglPopAttrib)( void ); -extern GLenum (APIENTRY * bglGetError)( void ); -extern const GLubyte* (APIENTRY * bglGetString)( GLenum name ); -extern void (APIENTRY * bglHint)( GLenum target, GLenum mode ); -extern void (APIENTRY * bglDrawBuffer)(GLenum mode); -extern void (APIENTRY * bglReadBuffer)(GLenum mode); -extern void (APIENTRY * bglScissor)(GLint x, GLint y, GLsizei width, GLsizei height); -extern void (APIENTRY * bglClipPlane)(GLenum plane, const GLdouble *equation); - -// Depth -extern void (APIENTRY * bglDepthFunc)( GLenum func ); -extern void (APIENTRY * bglDepthMask)( GLboolean flag ); -extern void (APIENTRY * bglDepthRange)( GLclampd near_val, GLclampd far_val ); - -// Matrix -extern void (APIENTRY * bglMatrixMode)( GLenum mode ); -extern void (APIENTRY * bglOrtho)( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val ); -extern void (APIENTRY * bglFrustum)( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val ); -extern void (APIENTRY * bglViewport)( GLint x, GLint y, GLsizei width, GLsizei height ); -extern void (APIENTRY * bglPushMatrix)( void ); -extern void (APIENTRY * bglPopMatrix)( void ); -extern void (APIENTRY * bglLoadIdentity)( void ); -extern void (APIENTRY * bglLoadMatrixf)( const GLfloat *m ); -extern void (APIENTRY * bglLoadMatrixd)( const GLdouble *m ); -extern void (APIENTRY * bglMultMatrixf)( const GLfloat *m ); -extern void (APIENTRY * bglMultMatrixd)( const GLdouble *m ); -extern void (APIENTRY * bglRotatef)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -extern void (APIENTRY * bglScalef)(GLfloat x, GLfloat y, GLfloat z); -extern void (APIENTRY * bglTranslatef)(GLfloat x, GLfloat y, GLfloat z); - -// Drawing -extern void (APIENTRY * bglBegin)( GLenum mode ); -extern void (APIENTRY * bglEnd)( void ); -extern void (APIENTRY * bglVertex2f)( GLfloat x, GLfloat y ); -extern void (APIENTRY * bglVertex2i)( GLint x, GLint y ); -extern void (APIENTRY * bglVertex3f)( GLfloat x, GLfloat y, GLfloat z ); -extern void (APIENTRY * bglVertex3d)( GLdouble x, GLdouble y, GLdouble z ); -extern void (APIENTRY * bglVertex3fv)( const GLfloat *v ); -extern void (APIENTRY * bglVertex3dv)( const GLdouble *v ); -extern void (APIENTRY * bglColor4f)( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); -extern void (APIENTRY * bglColor4ub)( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ); -extern void (APIENTRY * bglTexCoord2d)( GLdouble s, GLdouble t ); -extern void (APIENTRY * bglTexCoord2f)( GLfloat s, GLfloat t ); -extern void (APIENTRY * bglTexCoord2i)( GLint s, GLint t ); -extern void (APIENTRY * bglNormal3f)( GLfloat x, GLfloat y, GLfloat z ); - -// Lighting -extern void (APIENTRY * bglShadeModel)( GLenum mode ); -extern void (APIENTRY * bglLightfv)( GLenum light, GLenum pname, const GLfloat * params ); - -// Raster funcs -extern void (APIENTRY * bglReadPixels)( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels ); -extern void (APIENTRY * bglRasterPos4i)( GLint x, GLint y, GLint z, GLint w ); -extern void (APIENTRY * bglDrawPixels)( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); - -// Texture mapping -extern void (APIENTRY * bglTexEnvf)( GLenum target, GLenum pname, GLfloat param ); -extern void (APIENTRY * bglGenTextures)( GLsizei n, GLuint *textures ); // 1.1 -extern void (APIENTRY * bglDeleteTextures)( GLsizei n, const GLuint *textures); // 1.1 -extern void (APIENTRY * bglBindTexture)( GLenum target, GLuint texture ); // 1.1 -extern void (APIENTRY * bglTexImage2D)( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); -extern void (APIENTRY * bglTexImage3D)(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -extern void (APIENTRY * bglCopyTexImage2D)( GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border ); -extern void (APIENTRY * bglCopyTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -extern void (APIENTRY * bglTexSubImage2D)( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels ); // 1.1 -extern void (APIENTRY * bglTexParameterf)( GLenum target, GLenum pname, GLfloat param ); -extern void (APIENTRY * bglTexParameteri)( GLenum target, GLenum pname, GLint param ); -extern void (APIENTRY * bglGetTexLevelParameteriv)( GLenum target, GLint level, GLenum pname, GLint *params ); -extern void (APIENTRY * bglCompressedTexImage2DARB)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -extern void (APIENTRY * bglGetCompressedTexImageARB)(GLenum, GLint, GLvoid *); -extern void (APIENTRY * bglTexGenfv)(GLenum coord, GLenum pname, const GLfloat *params); - -// Fog -extern void (APIENTRY * bglFogf)( GLenum pname, GLfloat param ); -extern void (APIENTRY * bglFogi)( GLenum pname, GLint param ); -extern void (APIENTRY * bglFogfv)( GLenum pname, const GLfloat *params ); - -// Display Lists -extern void (APIENTRY * bglNewList)(GLuint list, GLenum mode); -extern void (APIENTRY * bglEndList)(void); -extern void (APIENTRY * bglCallList)(GLuint list); -extern void (APIENTRY * bglDeleteLists)(GLuint list, GLsizei range); - -// Vertex Arrays -extern void (APIENTRY * bglEnableClientState)(GLenum cap); -extern void (APIENTRY * bglDisableClientState)(GLenum cap); -extern void (APIENTRY * bglVertexPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -extern void (APIENTRY * bglNormalPointer)(GLenum type, GLsizei stride, const GLvoid *pointer); -extern void (APIENTRY * bglTexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -extern void (APIENTRY * bglDrawArrays)(GLenum mode, GLint first, GLsizei count); -extern void (APIENTRY * bglDrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); - -// Stencil Buffer -extern void (APIENTRY * bglClearStencil)(GLint s); -extern void (APIENTRY * bglStencilOp)(GLenum fail, GLenum zfail, GLenum zpass); -extern void (APIENTRY * bglStencilFunc)(GLenum func, GLint ref, GLuint mask); - -// GPU Programs -extern void (APIENTRY * bglGenProgramsARB)(GLsizei, GLuint *); -extern void (APIENTRY * bglBindProgramARB)(GLenum, GLuint); -extern void (APIENTRY * bglProgramStringARB)(GLenum, GLenum, GLsizei, const GLvoid *); -extern void (APIENTRY * bglDeleteProgramsARB)(GLsizei n, const GLuint *programs); - -// Multitexturing -extern void (APIENTRY * bglActiveTextureARB)(GLenum texture); -extern void (APIENTRY * bglClientActiveTextureARB)(GLenum texture); -extern void (APIENTRY * bglMultiTexCoord2dARB)(GLenum target, GLdouble s, GLdouble t ); -extern void (APIENTRY * bglMultiTexCoord2fARB)(GLenum target, GLfloat s, GLfloat t ); - -// Frame Buffer Objects -extern void (APIENTRY * bglGenFramebuffersEXT)(GLsizei n, GLuint *framebuffers); -extern void (APIENTRY * bglBindFramebufferEXT)(GLenum target, GLuint framebuffer); -extern void (APIENTRY * bglFramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -extern GLenum (APIENTRY * bglCheckFramebufferStatusEXT)(GLenum target); -extern void (APIENTRY * bglDeleteFramebuffersEXT)(GLsizei n, const GLuint *framebuffers); - -// Vertex Buffer Objects -extern void (APIENTRY * bglGenBuffersARB)(GLsizei n, GLuint * buffers); -extern void (APIENTRY * bglBindBufferARB)(GLenum target, GLuint buffer); -extern void (APIENTRY * bglDeleteBuffersARB)(GLsizei n, const GLuint * buffers); -extern void (APIENTRY * bglBufferDataARB)(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage); -extern void (APIENTRY * bglBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data); -extern void* (APIENTRY * bglMapBufferARB)(GLenum target, GLenum access); -extern GLboolean (APIENTRY * bglUnmapBufferARB)(GLenum target); - -// Occlusion queries -extern void (APIENTRY * bglGenQueriesARB)(GLsizei n, GLuint *ids); -extern void (APIENTRY * bglDeleteQueriesARB)(GLsizei n, const GLuint *ids); -extern GLboolean (APIENTRY * bglIsQueryARB)(GLuint id); -extern void (APIENTRY * bglBeginQueryARB)(GLenum target, GLuint id); -extern void (APIENTRY * bglEndQueryARB)(GLenum target); -extern void (APIENTRY * bglGetQueryivARB)(GLenum target, GLenum pname, GLint *params); -extern void (APIENTRY * bglGetQueryObjectivARB)(GLuint id, GLenum pname, GLint *params); -extern void (APIENTRY * bglGetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint *params); - -// Shader Objects -extern void (APIENTRY * bglDeleteObjectARB)(GLhandleARB); -extern GLhandleARB (APIENTRY * bglGetHandleARB)(GLenum); -extern void (APIENTRY * bglDetachObjectARB)(GLhandleARB, GLhandleARB); -extern GLhandleARB (APIENTRY * bglCreateShaderObjectARB)(GLenum); -extern void (APIENTRY * bglShaderSourceARB)(GLhandleARB, GLsizei, const GLcharARB* *, const GLint *); -extern void (APIENTRY * bglCompileShaderARB)(GLhandleARB); -extern GLhandleARB (APIENTRY * bglCreateProgramObjectARB)(void); -extern void (APIENTRY * bglAttachObjectARB)(GLhandleARB, GLhandleARB); -extern void (APIENTRY * bglLinkProgramARB)(GLhandleARB); -extern void (APIENTRY * bglUseProgramObjectARB)(GLhandleARB); -extern void (APIENTRY * bglValidateProgramARB)(GLhandleARB); -extern void (APIENTRY * bglUniform1fARB)(GLint, GLfloat); -extern void (APIENTRY * bglUniform2fARB)(GLint, GLfloat, GLfloat); -extern void (APIENTRY * bglUniform3fARB)(GLint, GLfloat, GLfloat, GLfloat); -extern void (APIENTRY * bglUniform4fARB)(GLint, GLfloat, GLfloat, GLfloat, GLfloat); -extern void (APIENTRY * bglUniform1iARB)(GLint, GLint); -extern void (APIENTRY * bglUniform2iARB)(GLint, GLint, GLint); -extern void (APIENTRY * bglUniform3iARB)(GLint, GLint, GLint, GLint); -extern void (APIENTRY * bglUniform4iARB)(GLint, GLint, GLint, GLint, GLint); -extern void (APIENTRY * bglUniform1fvARB)(GLint, GLsizei, const GLfloat *); -extern void (APIENTRY * bglUniform2fvARB)(GLint, GLsizei, const GLfloat *); -extern void (APIENTRY * bglUniform3fvARB)(GLint, GLsizei, const GLfloat *); -extern void (APIENTRY * bglUniform4fvARB)(GLint, GLsizei, const GLfloat *); -extern void (APIENTRY * bglUniform1ivARB)(GLint, GLsizei, const GLint *); -extern void (APIENTRY * bglUniform2ivARB)(GLint, GLsizei, const GLint *); -extern void (APIENTRY * bglUniform3ivARB)(GLint, GLsizei, const GLint *); -extern void (APIENTRY * bglUniform4ivARB)(GLint, GLsizei, const GLint *); -extern void (APIENTRY * bglUniformMatrix2fvARB)(GLint, GLsizei, GLboolean, const GLfloat *); -extern void (APIENTRY * bglUniformMatrix3fvARB)(GLint, GLsizei, GLboolean, const GLfloat *); -extern void (APIENTRY * bglUniformMatrix4fvARB)(GLint, GLsizei, GLboolean, const GLfloat *); -extern void (APIENTRY * bglGetObjectParameterfvARB)(GLhandleARB, GLenum, GLfloat *); -extern void (APIENTRY * bglGetObjectParameterivARB)(GLhandleARB, GLenum, GLint *); -extern void (APIENTRY * bglGetInfoLogARB)(GLhandleARB, GLsizei, GLsizei *, GLcharARB *); -extern void (APIENTRY * bglGetAttachedObjectsARB)(GLhandleARB, GLsizei, GLsizei *, GLhandleARB *); -extern GLint (APIENTRY * bglGetUniformLocationARB)(GLhandleARB, const GLcharARB *); -extern void (APIENTRY * bglGetActiveUniformARB)(GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *); -extern void (APIENTRY * bglGetUniformfvARB)(GLhandleARB, GLint, GLfloat *); -extern void (APIENTRY * bglGetUniformivARB)(GLhandleARB, GLint, GLint *); -extern void (APIENTRY * bglGetShaderSourceARB)(GLhandleARB, GLsizei, GLsizei *, GLcharARB *); - -// Vertex Shaders -extern void (APIENTRY * bglVertexAttrib1dARB)(GLuint, GLdouble); -extern void (APIENTRY * bglVertexAttrib1dvARB)(GLuint, const GLdouble *); -extern void (APIENTRY * bglVertexAttrib1fARB)(GLuint, GLfloat); -extern void (APIENTRY * bglVertexAttrib1fvARB)(GLuint, const GLfloat *); -extern void (APIENTRY * bglVertexAttrib1sARB)(GLuint, GLshort); -extern void (APIENTRY * bglVertexAttrib1svARB)(GLuint, const GLshort *); -extern void (APIENTRY * bglVertexAttrib2dARB)(GLuint, GLdouble, GLdouble); -extern void (APIENTRY * bglVertexAttrib2dvARB)(GLuint, const GLdouble *); -extern void (APIENTRY * bglVertexAttrib2fARB)(GLuint, GLfloat, GLfloat); -extern void (APIENTRY * bglVertexAttrib2fvARB)(GLuint, const GLfloat *); -extern void (APIENTRY * bglVertexAttrib2sARB)(GLuint, GLshort, GLshort); -extern void (APIENTRY * bglVertexAttrib2svARB)(GLuint, const GLshort *); -extern void (APIENTRY * bglVertexAttrib3dARB)(GLuint, GLdouble, GLdouble, GLdouble); -extern void (APIENTRY * bglVertexAttrib3dvARB)(GLuint, const GLdouble *); -extern void (APIENTRY * bglVertexAttrib3fARB)(GLuint, GLfloat, GLfloat, GLfloat); -extern void (APIENTRY * bglVertexAttrib3fvARB)(GLuint, const GLfloat *); -extern void (APIENTRY * bglVertexAttrib3sARB)(GLuint, GLshort, GLshort, GLshort); -extern void (APIENTRY * bglVertexAttrib3svARB)(GLuint, const GLshort *); -extern void (APIENTRY * bglVertexAttrib4NbvARB)(GLuint, const GLbyte *); -extern void (APIENTRY * bglVertexAttrib4NivARB)(GLuint, const GLint *); -extern void (APIENTRY * bglVertexAttrib4NsvARB)(GLuint, const GLshort *); -extern void (APIENTRY * bglVertexAttrib4NubARB)(GLuint, GLubyte, GLubyte, GLubyte, GLubyte); -extern void (APIENTRY * bglVertexAttrib4NubvARB)(GLuint, const GLubyte *); -extern void (APIENTRY * bglVertexAttrib4NuivARB)(GLuint, const GLuint *); -extern void (APIENTRY * bglVertexAttrib4NusvARB)(GLuint, const GLushort *); -extern void (APIENTRY * bglVertexAttrib4bvARB)(GLuint, const GLbyte *); -extern void (APIENTRY * bglVertexAttrib4dARB)(GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -extern void (APIENTRY * bglVertexAttrib4dvARB)(GLuint, const GLdouble *); -extern void (APIENTRY * bglVertexAttrib4fARB)(GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -extern void (APIENTRY * bglVertexAttrib4fvARB)(GLuint, const GLfloat *); -extern void (APIENTRY * bglVertexAttrib4ivARB)(GLuint, const GLint *); -extern void (APIENTRY * bglVertexAttrib4sARB)(GLuint, GLshort, GLshort, GLshort, GLshort); -extern void (APIENTRY * bglVertexAttrib4svARB)(GLuint, const GLshort *); -extern void (APIENTRY * bglVertexAttrib4ubvARB)(GLuint, const GLubyte *); -extern void (APIENTRY * bglVertexAttrib4uivARB)(GLuint, const GLuint *); -extern void (APIENTRY * bglVertexAttrib4usvARB)(GLuint, const GLushort *); -extern void (APIENTRY * bglVertexAttribPointerARB)(GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *); -extern void (APIENTRY * bglEnableVertexAttribArrayARB)(GLuint); -extern void (APIENTRY * bglDisableVertexAttribArrayARB)(GLuint); -extern void (APIENTRY * bglGetVertexAttribdvARB)(GLuint, GLenum, GLdouble *); -extern void (APIENTRY * bglGetVertexAttribfvARB)(GLuint, GLenum, GLfloat *); -extern void (APIENTRY * bglGetVertexAttribivARB)(GLuint, GLenum, GLint *); -extern void (APIENTRY * bglGetVertexAttribPointervARB)(GLuint, GLenum, GLvoid* *); -extern void (APIENTRY * bglBindAttribLocationARB)(GLhandleARB, GLuint, const GLcharARB *); -extern void (APIENTRY * bglGetActiveAttribARB)(GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *); -extern GLint (APIENTRY * bglGetAttribLocationARB)(GLhandleARB, const GLcharARB *); - -// GLU -extern void (APIENTRY * bgluTessBeginContour) (GLUtesselator* tess); -extern void (APIENTRY * bgluTessBeginPolygon) (GLUtesselator* tess, GLvoid* data); -extern void (APIENTRY * bgluTessCallback) (GLUtesselator* tess, GLenum which, void (PR_CALLBACK CallBackFunc)()); -extern void (APIENTRY * bgluTessEndContour) (GLUtesselator* tess); -extern void (APIENTRY * bgluTessEndPolygon) (GLUtesselator* tess); -extern void (APIENTRY * bgluTessNormal) (GLUtesselator* tess, GLdouble valueX, GLdouble valueY, GLdouble valueZ); -extern void (APIENTRY * bgluTessProperty) (GLUtesselator* tess, GLenum which, GLdouble data); -extern void (APIENTRY * bgluTessVertex) (GLUtesselator* tess, GLdouble *location, GLvoid* data); -extern GLUtesselator* (APIENTRY * bgluNewTess) (void); - -extern void (APIENTRY * bgluPerspective) (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar); - -extern const GLubyte * (APIENTRY * bgluErrorString) (GLenum error); - -extern GLint (APIENTRY * bgluProject)(GLdouble objX, GLdouble objY, GLdouble objZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* winX, GLdouble* winY, GLdouble* winZ); -extern GLint (APIENTRY * bgluUnProject)(GLdouble winX, GLdouble winY, GLdouble winZ, const GLdouble * model, const GLdouble * proj, const GLint * view, GLdouble* objX, GLdouble* objY, GLdouble* objZ); - -#ifdef RENDERTYPEWIN -// Windows -extern HGLRC (WINAPI * bwglCreateContext)(HDC); -extern BOOL (WINAPI * bwglDeleteContext)(HGLRC); -extern PROC (WINAPI * bwglGetProcAddress)(LPCSTR); -extern BOOL (WINAPI * bwglMakeCurrent)(HDC,HGLRC); - -extern BOOL (WINAPI * bwglSwapBuffers)(HDC); -extern int32_t (WINAPI * bwglChoosePixelFormat)(HDC,CONST PIXELFORMATDESCRIPTOR*); -extern int32_t (WINAPI * bwglDescribePixelFormat)(HDC,int32_t,UINT,LPPIXELFORMATDESCRIPTOR); -extern int32_t (WINAPI * bwglGetPixelFormat)(HDC); -extern BOOL (WINAPI * bwglSetPixelFormat)(HDC,int32_t,const PIXELFORMATDESCRIPTOR*); -extern BOOL (WINAPI * bwglSwapIntervalEXT)(int32_t); -#endif - -#endif //USE_OPENGL - -extern char *gldriver; - -int32_t loadgldriver(const char *driver); -int32_t loadglextensions(void); -int32_t unloadgldriver(void); - -int32_t loadglulibrary(const char *driver); -int32_t unloadglulibrary(void); diff --git a/polymer-perf/eduke32/build/include/glext.h b/polymer-perf/eduke32/build/include/glext.h deleted file mode 100644 index 2b22714c3..000000000 --- a/polymer-perf/eduke32/build/include/glext.h +++ /dev/null @@ -1,7271 +0,0 @@ -#ifndef __glext_h_ -#define __glext_h_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Copyright (c) 2007 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be included -** in all copies or substantial portions of the Materials. -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) -#define WIN32_LEAN_AND_MEAN 1 -#include -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif -#ifndef GLAPI -#define GLAPI extern -#endif - -/*************************************************************/ - -/* Header file version number, required by OpenGL ABI for Linux */ -/* glext.h last updated 2008/03/24 */ -/* Current version at http://www.opengl.org/registry/ */ -#define GL_GLEXT_VERSION 40 - -#ifndef GL_VERSION_1_2 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_RESCALE_NORMAL 0x803A -#define GL_TEXTURE_BINDING_3D 0x806A -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#endif - -#ifndef GL_ARB_imaging -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_BLEND_COLOR 0x8005 -#define GL_FUNC_ADD 0x8006 -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -#define GL_BLEND_EQUATION 0x8009 -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#define GL_CONVOLUTION_1D 0x8010 -#define GL_CONVOLUTION_2D 0x8011 -#define GL_SEPARABLE_2D 0x8012 -#define GL_CONVOLUTION_BORDER_MODE 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS 0x8015 -#define GL_REDUCE 0x8016 -#define GL_CONVOLUTION_FORMAT 0x8017 -#define GL_CONVOLUTION_WIDTH 0x8018 -#define GL_CONVOLUTION_HEIGHT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 -#define GL_HISTOGRAM 0x8024 -#define GL_PROXY_HISTOGRAM 0x8025 -#define GL_HISTOGRAM_WIDTH 0x8026 -#define GL_HISTOGRAM_FORMAT 0x8027 -#define GL_HISTOGRAM_RED_SIZE 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C -#define GL_HISTOGRAM_SINK 0x802D -#define GL_MINMAX 0x802E -#define GL_MINMAX_FORMAT 0x802F -#define GL_MINMAX_SINK 0x8030 -#define GL_TABLE_TOO_LARGE 0x8031 -#define GL_COLOR_MATRIX 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB -#define GL_COLOR_TABLE 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 -#define GL_PROXY_COLOR_TABLE 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 -#define GL_COLOR_TABLE_SCALE 0x80D6 -#define GL_COLOR_TABLE_BIAS 0x80D7 -#define GL_COLOR_TABLE_FORMAT 0x80D8 -#define GL_COLOR_TABLE_WIDTH 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF -#define GL_CONSTANT_BORDER 0x8151 -#define GL_REPLICATE_BORDER 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 -#endif - -#ifndef GL_VERSION_1_3 -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 -#define GL_MAX_TEXTURE_UNITS 0x84E2 -#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_MULTISAMPLE_BIT 0x20000000 -#define GL_NORMAL_MAP 0x8511 -#define GL_REFLECTION_MAP 0x8512 -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -#define GL_COMPRESSED_ALPHA 0x84E9 -#define GL_COMPRESSED_LUMINANCE 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#define GL_COMPRESSED_INTENSITY 0x84EC -#define GL_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -#define GL_CLAMP_TO_BORDER 0x812D -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#define GL_SOURCE0_RGB 0x8580 -#define GL_SOURCE1_RGB 0x8581 -#define GL_SOURCE2_RGB 0x8582 -#define GL_SOURCE0_ALPHA 0x8588 -#define GL_SOURCE1_ALPHA 0x8589 -#define GL_SOURCE2_ALPHA 0x858A -#define GL_OPERAND0_RGB 0x8590 -#define GL_OPERAND1_RGB 0x8591 -#define GL_OPERAND2_RGB 0x8592 -#define GL_OPERAND0_ALPHA 0x8598 -#define GL_OPERAND1_ALPHA 0x8599 -#define GL_OPERAND2_ALPHA 0x859A -#define GL_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_SUBTRACT 0x84E7 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -#endif - -#ifndef GL_VERSION_1_4 -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_POINT_SIZE_MIN 0x8126 -#define GL_POINT_SIZE_MAX 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#define GL_GENERATE_MIPMAP 0x8191 -#define GL_GENERATE_MIPMAP_HINT 0x8192 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_DEPTH_COMPONENT24 0x81A6 -#define GL_DEPTH_COMPONENT32 0x81A7 -#define GL_MIRRORED_REPEAT 0x8370 -#define GL_FOG_COORDINATE_SOURCE 0x8450 -#define GL_FOG_COORDINATE 0x8451 -#define GL_FRAGMENT_DEPTH 0x8452 -#define GL_CURRENT_FOG_COORDINATE 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 -#define GL_FOG_COORDINATE_ARRAY 0x8457 -#define GL_COLOR_SUM 0x8458 -#define GL_CURRENT_SECONDARY_COLOR 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D -#define GL_SECONDARY_COLOR_ARRAY 0x845E -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD -#define GL_TEXTURE_FILTER_CONTROL 0x8500 -#define GL_TEXTURE_LOD_BIAS 0x8501 -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#define GL_TEXTURE_DEPTH_SIZE 0x884A -#define GL_DEPTH_TEXTURE_MODE 0x884B -#define GL_TEXTURE_COMPARE_MODE 0x884C -#define GL_TEXTURE_COMPARE_FUNC 0x884D -#define GL_COMPARE_R_TO_TEXTURE 0x884E -#endif - -#ifndef GL_VERSION_1_5 -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 -#define GL_QUERY_COUNTER_BITS 0x8864 -#define GL_CURRENT_QUERY 0x8865 -#define GL_QUERY_RESULT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE 0x8867 -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F -#define GL_READ_ONLY 0x88B8 -#define GL_WRITE_ONLY 0x88B9 -#define GL_READ_WRITE 0x88BA -#define GL_BUFFER_ACCESS 0x88BB -#define GL_BUFFER_MAPPED 0x88BC -#define GL_BUFFER_MAP_POINTER 0x88BD -#define GL_STREAM_DRAW 0x88E0 -#define GL_STREAM_READ 0x88E1 -#define GL_STREAM_COPY 0x88E2 -#define GL_STATIC_DRAW 0x88E4 -#define GL_STATIC_READ 0x88E5 -#define GL_STATIC_COPY 0x88E6 -#define GL_DYNAMIC_DRAW 0x88E8 -#define GL_DYNAMIC_READ 0x88E9 -#define GL_DYNAMIC_COPY 0x88EA -#define GL_SAMPLES_PASSED 0x8914 -#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE -#define GL_FOG_COORD GL_FOG_COORDINATE -#define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE -#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE -#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE -#define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER -#define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY -#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING -#define GL_SRC0_RGB GL_SOURCE0_RGB -#define GL_SRC1_RGB GL_SOURCE1_RGB -#define GL_SRC2_RGB GL_SOURCE2_RGB -#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA -#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA -#define GL_SRC2_ALPHA GL_SOURCE2_ALPHA -#endif - -#ifndef GL_VERSION_2_0 -#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_MAX_DRAW_BUFFERS 0x8824 -#define GL_DRAW_BUFFER0 0x8825 -#define GL_DRAW_BUFFER1 0x8826 -#define GL_DRAW_BUFFER2 0x8827 -#define GL_DRAW_BUFFER3 0x8828 -#define GL_DRAW_BUFFER4 0x8829 -#define GL_DRAW_BUFFER5 0x882A -#define GL_DRAW_BUFFER6 0x882B -#define GL_DRAW_BUFFER7 0x882C -#define GL_DRAW_BUFFER8 0x882D -#define GL_DRAW_BUFFER9 0x882E -#define GL_DRAW_BUFFER10 0x882F -#define GL_DRAW_BUFFER11 0x8830 -#define GL_DRAW_BUFFER12 0x8831 -#define GL_DRAW_BUFFER13 0x8832 -#define GL_DRAW_BUFFER14 0x8833 -#define GL_DRAW_BUFFER15 0x8834 -#define GL_BLEND_EQUATION_ALPHA 0x883D -#define GL_POINT_SPRITE 0x8861 -#define GL_COORD_REPLACE 0x8862 -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_MAX_TEXTURE_COORDS 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A -#define GL_MAX_VARYING_FLOATS 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_SHADER_TYPE 0x8B4F -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_1D 0x8B5D -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_3D 0x8B5F -#define GL_SAMPLER_CUBE 0x8B60 -#define GL_SAMPLER_1D_SHADOW 0x8B61 -#define GL_SAMPLER_2D_SHADOW 0x8B62 -#define GL_DELETE_STATUS 0x8B80 -#define GL_COMPILE_STATUS 0x8B81 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D -#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 -#define GL_LOWER_LEFT 0x8CA1 -#define GL_UPPER_LEFT 0x8CA2 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#endif - -#ifndef GL_VERSION_2_1 -#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F -#define GL_PIXEL_PACK_BUFFER 0x88EB -#define GL_PIXEL_UNPACK_BUFFER 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF -#define GL_FLOAT_MAT2x3 0x8B65 -#define GL_FLOAT_MAT2x4 0x8B66 -#define GL_FLOAT_MAT3x2 0x8B67 -#define GL_FLOAT_MAT3x4 0x8B68 -#define GL_FLOAT_MAT4x2 0x8B69 -#define GL_FLOAT_MAT4x3 0x8B6A -#define GL_SRGB 0x8C40 -#define GL_SRGB8 0x8C41 -#define GL_SRGB_ALPHA 0x8C42 -#define GL_SRGB8_ALPHA8 0x8C43 -#define GL_SLUMINANCE_ALPHA 0x8C44 -#define GL_SLUMINANCE8_ALPHA8 0x8C45 -#define GL_SLUMINANCE 0x8C46 -#define GL_SLUMINANCE8 0x8C47 -#define GL_COMPRESSED_SRGB 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 -#define GL_COMPRESSED_SLUMINANCE 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B -#endif - -#ifndef GL_ARB_multitexture -#define GL_TEXTURE0_ARB 0x84C0 -#define GL_TEXTURE1_ARB 0x84C1 -#define GL_TEXTURE2_ARB 0x84C2 -#define GL_TEXTURE3_ARB 0x84C3 -#define GL_TEXTURE4_ARB 0x84C4 -#define GL_TEXTURE5_ARB 0x84C5 -#define GL_TEXTURE6_ARB 0x84C6 -#define GL_TEXTURE7_ARB 0x84C7 -#define GL_TEXTURE8_ARB 0x84C8 -#define GL_TEXTURE9_ARB 0x84C9 -#define GL_TEXTURE10_ARB 0x84CA -#define GL_TEXTURE11_ARB 0x84CB -#define GL_TEXTURE12_ARB 0x84CC -#define GL_TEXTURE13_ARB 0x84CD -#define GL_TEXTURE14_ARB 0x84CE -#define GL_TEXTURE15_ARB 0x84CF -#define GL_TEXTURE16_ARB 0x84D0 -#define GL_TEXTURE17_ARB 0x84D1 -#define GL_TEXTURE18_ARB 0x84D2 -#define GL_TEXTURE19_ARB 0x84D3 -#define GL_TEXTURE20_ARB 0x84D4 -#define GL_TEXTURE21_ARB 0x84D5 -#define GL_TEXTURE22_ARB 0x84D6 -#define GL_TEXTURE23_ARB 0x84D7 -#define GL_TEXTURE24_ARB 0x84D8 -#define GL_TEXTURE25_ARB 0x84D9 -#define GL_TEXTURE26_ARB 0x84DA -#define GL_TEXTURE27_ARB 0x84DB -#define GL_TEXTURE28_ARB 0x84DC -#define GL_TEXTURE29_ARB 0x84DD -#define GL_TEXTURE30_ARB 0x84DE -#define GL_TEXTURE31_ARB 0x84DF -#define GL_ACTIVE_TEXTURE_ARB 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 -#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 -#endif - -#ifndef GL_ARB_transpose_matrix -#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 -#endif - -#ifndef GL_ARB_multisample -#define GL_MULTISAMPLE_ARB 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F -#define GL_SAMPLE_COVERAGE_ARB 0x80A0 -#define GL_SAMPLE_BUFFERS_ARB 0x80A8 -#define GL_SAMPLES_ARB 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB -#define GL_MULTISAMPLE_BIT_ARB 0x20000000 -#endif - -#ifndef GL_ARB_texture_env_add -#endif - -#ifndef GL_ARB_texture_cube_map -#define GL_NORMAL_MAP_ARB 0x8511 -#define GL_REFLECTION_MAP_ARB 0x8512 -#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C -#endif - -#ifndef GL_ARB_texture_compression -#define GL_COMPRESSED_ALPHA_ARB 0x84E9 -#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB -#define GL_COMPRESSED_INTENSITY_ARB 0x84EC -#define GL_COMPRESSED_RGB_ARB 0x84ED -#define GL_COMPRESSED_RGBA_ARB 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 -#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 -#endif - -#ifndef GL_ARB_texture_border_clamp -#define GL_CLAMP_TO_BORDER_ARB 0x812D -#endif - -#ifndef GL_ARB_point_parameters -#define GL_POINT_SIZE_MIN_ARB 0x8126 -#define GL_POINT_SIZE_MAX_ARB 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 -#endif - -#ifndef GL_ARB_vertex_blend -#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 -#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 -#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 -#define GL_VERTEX_BLEND_ARB 0x86A7 -#define GL_CURRENT_WEIGHT_ARB 0x86A8 -#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 -#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA -#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB -#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC -#define GL_WEIGHT_ARRAY_ARB 0x86AD -#define GL_MODELVIEW0_ARB 0x1700 -#define GL_MODELVIEW1_ARB 0x850A -#define GL_MODELVIEW2_ARB 0x8722 -#define GL_MODELVIEW3_ARB 0x8723 -#define GL_MODELVIEW4_ARB 0x8724 -#define GL_MODELVIEW5_ARB 0x8725 -#define GL_MODELVIEW6_ARB 0x8726 -#define GL_MODELVIEW7_ARB 0x8727 -#define GL_MODELVIEW8_ARB 0x8728 -#define GL_MODELVIEW9_ARB 0x8729 -#define GL_MODELVIEW10_ARB 0x872A -#define GL_MODELVIEW11_ARB 0x872B -#define GL_MODELVIEW12_ARB 0x872C -#define GL_MODELVIEW13_ARB 0x872D -#define GL_MODELVIEW14_ARB 0x872E -#define GL_MODELVIEW15_ARB 0x872F -#define GL_MODELVIEW16_ARB 0x8730 -#define GL_MODELVIEW17_ARB 0x8731 -#define GL_MODELVIEW18_ARB 0x8732 -#define GL_MODELVIEW19_ARB 0x8733 -#define GL_MODELVIEW20_ARB 0x8734 -#define GL_MODELVIEW21_ARB 0x8735 -#define GL_MODELVIEW22_ARB 0x8736 -#define GL_MODELVIEW23_ARB 0x8737 -#define GL_MODELVIEW24_ARB 0x8738 -#define GL_MODELVIEW25_ARB 0x8739 -#define GL_MODELVIEW26_ARB 0x873A -#define GL_MODELVIEW27_ARB 0x873B -#define GL_MODELVIEW28_ARB 0x873C -#define GL_MODELVIEW29_ARB 0x873D -#define GL_MODELVIEW30_ARB 0x873E -#define GL_MODELVIEW31_ARB 0x873F -#endif - -#ifndef GL_ARB_matrix_palette -#define GL_MATRIX_PALETTE_ARB 0x8840 -#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 -#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 -#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 -#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 -#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 -#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 -#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 -#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 -#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 -#endif - -#ifndef GL_ARB_texture_env_combine -#define GL_COMBINE_ARB 0x8570 -#define GL_COMBINE_RGB_ARB 0x8571 -#define GL_COMBINE_ALPHA_ARB 0x8572 -#define GL_SOURCE0_RGB_ARB 0x8580 -#define GL_SOURCE1_RGB_ARB 0x8581 -#define GL_SOURCE2_RGB_ARB 0x8582 -#define GL_SOURCE0_ALPHA_ARB 0x8588 -#define GL_SOURCE1_ALPHA_ARB 0x8589 -#define GL_SOURCE2_ALPHA_ARB 0x858A -#define GL_OPERAND0_RGB_ARB 0x8590 -#define GL_OPERAND1_RGB_ARB 0x8591 -#define GL_OPERAND2_RGB_ARB 0x8592 -#define GL_OPERAND0_ALPHA_ARB 0x8598 -#define GL_OPERAND1_ALPHA_ARB 0x8599 -#define GL_OPERAND2_ALPHA_ARB 0x859A -#define GL_RGB_SCALE_ARB 0x8573 -#define GL_ADD_SIGNED_ARB 0x8574 -#define GL_INTERPOLATE_ARB 0x8575 -#define GL_SUBTRACT_ARB 0x84E7 -#define GL_CONSTANT_ARB 0x8576 -#define GL_PRIMARY_COLOR_ARB 0x8577 -#define GL_PREVIOUS_ARB 0x8578 -#endif - -#ifndef GL_ARB_texture_env_crossbar -#endif - -#ifndef GL_ARB_texture_env_dot3 -#define GL_DOT3_RGB_ARB 0x86AE -#define GL_DOT3_RGBA_ARB 0x86AF -#endif - -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_MIRRORED_REPEAT_ARB 0x8370 -#endif - -#ifndef GL_ARB_depth_texture -#define GL_DEPTH_COMPONENT16_ARB 0x81A5 -#define GL_DEPTH_COMPONENT24_ARB 0x81A6 -#define GL_DEPTH_COMPONENT32_ARB 0x81A7 -#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A -#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B -#endif - -#ifndef GL_ARB_shadow -#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C -#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D -#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E -#endif - -#ifndef GL_ARB_shadow_ambient -#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF -#endif - -#ifndef GL_ARB_window_pos -#endif - -#ifndef GL_ARB_vertex_program -#define GL_COLOR_SUM_ARB 0x8458 -#define GL_VERTEX_PROGRAM_ARB 0x8620 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 -#define GL_PROGRAM_LENGTH_ARB 0x8627 -#define GL_PROGRAM_STRING_ARB 0x8628 -#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E -#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F -#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 -#define GL_CURRENT_MATRIX_ARB 0x8641 -#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 -#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B -#define GL_PROGRAM_BINDING_ARB 0x8677 -#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A -#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 -#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 -#define GL_PROGRAM_FORMAT_ARB 0x8876 -#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 -#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 -#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 -#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 -#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 -#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 -#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 -#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 -#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 -#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 -#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA -#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB -#define GL_PROGRAM_ATTRIBS_ARB 0x88AC -#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD -#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE -#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF -#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 -#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 -#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 -#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 -#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 -#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 -#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 -#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 -#define GL_MATRIX0_ARB 0x88C0 -#define GL_MATRIX1_ARB 0x88C1 -#define GL_MATRIX2_ARB 0x88C2 -#define GL_MATRIX3_ARB 0x88C3 -#define GL_MATRIX4_ARB 0x88C4 -#define GL_MATRIX5_ARB 0x88C5 -#define GL_MATRIX6_ARB 0x88C6 -#define GL_MATRIX7_ARB 0x88C7 -#define GL_MATRIX8_ARB 0x88C8 -#define GL_MATRIX9_ARB 0x88C9 -#define GL_MATRIX10_ARB 0x88CA -#define GL_MATRIX11_ARB 0x88CB -#define GL_MATRIX12_ARB 0x88CC -#define GL_MATRIX13_ARB 0x88CD -#define GL_MATRIX14_ARB 0x88CE -#define GL_MATRIX15_ARB 0x88CF -#define GL_MATRIX16_ARB 0x88D0 -#define GL_MATRIX17_ARB 0x88D1 -#define GL_MATRIX18_ARB 0x88D2 -#define GL_MATRIX19_ARB 0x88D3 -#define GL_MATRIX20_ARB 0x88D4 -#define GL_MATRIX21_ARB 0x88D5 -#define GL_MATRIX22_ARB 0x88D6 -#define GL_MATRIX23_ARB 0x88D7 -#define GL_MATRIX24_ARB 0x88D8 -#define GL_MATRIX25_ARB 0x88D9 -#define GL_MATRIX26_ARB 0x88DA -#define GL_MATRIX27_ARB 0x88DB -#define GL_MATRIX28_ARB 0x88DC -#define GL_MATRIX29_ARB 0x88DD -#define GL_MATRIX30_ARB 0x88DE -#define GL_MATRIX31_ARB 0x88DF -#endif - -#ifndef GL_ARB_fragment_program -#define GL_FRAGMENT_PROGRAM_ARB 0x8804 -#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 -#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 -#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 -#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 -#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 -#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A -#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B -#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C -#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D -#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E -#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F -#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 -#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 -#endif - -#ifndef GL_ARB_vertex_buffer_object -#define GL_BUFFER_SIZE_ARB 0x8764 -#define GL_BUFFER_USAGE_ARB 0x8765 -#define GL_ARRAY_BUFFER_ARB 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 -#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F -#define GL_READ_ONLY_ARB 0x88B8 -#define GL_WRITE_ONLY_ARB 0x88B9 -#define GL_READ_WRITE_ARB 0x88BA -#define GL_BUFFER_ACCESS_ARB 0x88BB -#define GL_BUFFER_MAPPED_ARB 0x88BC -#define GL_BUFFER_MAP_POINTER_ARB 0x88BD -#define GL_STREAM_DRAW_ARB 0x88E0 -#define GL_STREAM_READ_ARB 0x88E1 -#define GL_STREAM_COPY_ARB 0x88E2 -#define GL_STATIC_DRAW_ARB 0x88E4 -#define GL_STATIC_READ_ARB 0x88E5 -#define GL_STATIC_COPY_ARB 0x88E6 -#define GL_DYNAMIC_DRAW_ARB 0x88E8 -#define GL_DYNAMIC_READ_ARB 0x88E9 -#define GL_DYNAMIC_COPY_ARB 0x88EA -#endif - -#ifndef GL_ARB_occlusion_query -#define GL_QUERY_COUNTER_BITS_ARB 0x8864 -#define GL_CURRENT_QUERY_ARB 0x8865 -#define GL_QUERY_RESULT_ARB 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 -#define GL_SAMPLES_PASSED_ARB 0x8914 -#endif - -#ifndef GL_ARB_shader_objects -#define GL_PROGRAM_OBJECT_ARB 0x8B40 -#define GL_SHADER_OBJECT_ARB 0x8B48 -#define GL_OBJECT_TYPE_ARB 0x8B4E -#define GL_OBJECT_SUBTYPE_ARB 0x8B4F -#define GL_FLOAT_VEC2_ARB 0x8B50 -#define GL_FLOAT_VEC3_ARB 0x8B51 -#define GL_FLOAT_VEC4_ARB 0x8B52 -#define GL_INT_VEC2_ARB 0x8B53 -#define GL_INT_VEC3_ARB 0x8B54 -#define GL_INT_VEC4_ARB 0x8B55 -#define GL_BOOL_ARB 0x8B56 -#define GL_BOOL_VEC2_ARB 0x8B57 -#define GL_BOOL_VEC3_ARB 0x8B58 -#define GL_BOOL_VEC4_ARB 0x8B59 -#define GL_FLOAT_MAT2_ARB 0x8B5A -#define GL_FLOAT_MAT3_ARB 0x8B5B -#define GL_FLOAT_MAT4_ARB 0x8B5C -#define GL_SAMPLER_1D_ARB 0x8B5D -#define GL_SAMPLER_2D_ARB 0x8B5E -#define GL_SAMPLER_3D_ARB 0x8B5F -#define GL_SAMPLER_CUBE_ARB 0x8B60 -#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 -#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 -#define GL_SAMPLER_2D_RECT_ARB 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 -#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 -#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 -#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 -#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 -#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 -#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 -#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 -#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 -#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 -#endif - -#ifndef GL_ARB_vertex_shader -#define GL_VERTEX_SHADER_ARB 0x8B31 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A -#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D -#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 -#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A -#endif - -#ifndef GL_ARB_fragment_shader -#define GL_FRAGMENT_SHADER_ARB 0x8B30 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B -#endif - -#ifndef GL_ARB_shading_language_100 -#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C -#endif - -#ifndef GL_ARB_texture_non_power_of_two -#endif - -#ifndef GL_ARB_point_sprite -#define GL_POINT_SPRITE_ARB 0x8861 -#define GL_COORD_REPLACE_ARB 0x8862 -#endif - -#ifndef GL_ARB_fragment_program_shadow -#endif - -#ifndef GL_ARB_draw_buffers -#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 -#define GL_DRAW_BUFFER0_ARB 0x8825 -#define GL_DRAW_BUFFER1_ARB 0x8826 -#define GL_DRAW_BUFFER2_ARB 0x8827 -#define GL_DRAW_BUFFER3_ARB 0x8828 -#define GL_DRAW_BUFFER4_ARB 0x8829 -#define GL_DRAW_BUFFER5_ARB 0x882A -#define GL_DRAW_BUFFER6_ARB 0x882B -#define GL_DRAW_BUFFER7_ARB 0x882C -#define GL_DRAW_BUFFER8_ARB 0x882D -#define GL_DRAW_BUFFER9_ARB 0x882E -#define GL_DRAW_BUFFER10_ARB 0x882F -#define GL_DRAW_BUFFER11_ARB 0x8830 -#define GL_DRAW_BUFFER12_ARB 0x8831 -#define GL_DRAW_BUFFER13_ARB 0x8832 -#define GL_DRAW_BUFFER14_ARB 0x8833 -#define GL_DRAW_BUFFER15_ARB 0x8834 -#endif - -#ifndef GL_ARB_texture_rectangle -#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 -#endif - -#ifndef GL_ARB_color_buffer_float -#define GL_RGBA_FLOAT_MODE_ARB 0x8820 -#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A -#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B -#define GL_CLAMP_READ_COLOR_ARB 0x891C -#define GL_FIXED_ONLY_ARB 0x891D -#endif - -#ifndef GL_ARB_half_float_pixel -#define GL_HALF_FLOAT_ARB 0x140B -#endif - -#ifndef GL_ARB_texture_float -#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 -#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 -#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 -#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 -#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 -#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 -#define GL_RGBA32F_ARB 0x8814 -#define GL_RGB32F_ARB 0x8815 -#define GL_ALPHA32F_ARB 0x8816 -#define GL_INTENSITY32F_ARB 0x8817 -#define GL_LUMINANCE32F_ARB 0x8818 -#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 -#define GL_RGBA16F_ARB 0x881A -#define GL_RGB16F_ARB 0x881B -#define GL_ALPHA16F_ARB 0x881C -#define GL_INTENSITY16F_ARB 0x881D -#define GL_LUMINANCE16F_ARB 0x881E -#define GL_LUMINANCE_ALPHA16F_ARB 0x881F -#endif - -#ifndef GL_ARB_pixel_buffer_object -#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF -#endif - -#ifndef GL_EXT_abgr -#define GL_ABGR_EXT 0x8000 -#endif - -#ifndef GL_EXT_blend_color -#define GL_CONSTANT_COLOR_EXT 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 -#define GL_CONSTANT_ALPHA_EXT 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 -#define GL_BLEND_COLOR_EXT 0x8005 -#endif - -#ifndef GL_EXT_polygon_offset -#define GL_POLYGON_OFFSET_EXT 0x8037 -#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 -#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 -#endif - -#ifndef GL_EXT_texture -#define GL_ALPHA4_EXT 0x803B -#define GL_ALPHA8_EXT 0x803C -#define GL_ALPHA12_EXT 0x803D -#define GL_ALPHA16_EXT 0x803E -#define GL_LUMINANCE4_EXT 0x803F -#define GL_LUMINANCE8_EXT 0x8040 -#define GL_LUMINANCE12_EXT 0x8041 -#define GL_LUMINANCE16_EXT 0x8042 -#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 -#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 -#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 -#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 -#define GL_INTENSITY_EXT 0x8049 -#define GL_INTENSITY4_EXT 0x804A -#define GL_INTENSITY8_EXT 0x804B -#define GL_INTENSITY12_EXT 0x804C -#define GL_INTENSITY16_EXT 0x804D -#define GL_RGB2_EXT 0x804E -#define GL_RGB4_EXT 0x804F -#define GL_RGB5_EXT 0x8050 -#define GL_RGB8_EXT 0x8051 -#define GL_RGB10_EXT 0x8052 -#define GL_RGB12_EXT 0x8053 -#define GL_RGB16_EXT 0x8054 -#define GL_RGBA2_EXT 0x8055 -#define GL_RGBA4_EXT 0x8056 -#define GL_RGB5_A1_EXT 0x8057 -#define GL_RGBA8_EXT 0x8058 -#define GL_RGB10_A2_EXT 0x8059 -#define GL_RGBA12_EXT 0x805A -#define GL_RGBA16_EXT 0x805B -#define GL_TEXTURE_RED_SIZE_EXT 0x805C -#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D -#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E -#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 -#define GL_REPLACE_EXT 0x8062 -#define GL_PROXY_TEXTURE_1D_EXT 0x8063 -#define GL_PROXY_TEXTURE_2D_EXT 0x8064 -#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 -#endif - -#ifndef GL_EXT_texture3D -#define GL_PACK_SKIP_IMAGES_EXT 0x806B -#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C -#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D -#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E -#define GL_TEXTURE_3D_EXT 0x806F -#define GL_PROXY_TEXTURE_3D_EXT 0x8070 -#define GL_TEXTURE_DEPTH_EXT 0x8071 -#define GL_TEXTURE_WRAP_R_EXT 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 -#endif - -#ifndef GL_SGIS_texture_filter4 -#define GL_FILTER4_SGIS 0x8146 -#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 -#endif - -#ifndef GL_EXT_subtexture -#endif - -#ifndef GL_EXT_copy_texture -#endif - -#ifndef GL_EXT_histogram -#define GL_HISTOGRAM_EXT 0x8024 -#define GL_PROXY_HISTOGRAM_EXT 0x8025 -#define GL_HISTOGRAM_WIDTH_EXT 0x8026 -#define GL_HISTOGRAM_FORMAT_EXT 0x8027 -#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C -#define GL_HISTOGRAM_SINK_EXT 0x802D -#define GL_MINMAX_EXT 0x802E -#define GL_MINMAX_FORMAT_EXT 0x802F -#define GL_MINMAX_SINK_EXT 0x8030 -#define GL_TABLE_TOO_LARGE_EXT 0x8031 -#endif - -#ifndef GL_EXT_convolution -#define GL_CONVOLUTION_1D_EXT 0x8010 -#define GL_CONVOLUTION_2D_EXT 0x8011 -#define GL_SEPARABLE_2D_EXT 0x8012 -#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 -#define GL_REDUCE_EXT 0x8016 -#define GL_CONVOLUTION_FORMAT_EXT 0x8017 -#define GL_CONVOLUTION_WIDTH_EXT 0x8018 -#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 -#endif - -#ifndef GL_SGI_color_matrix -#define GL_COLOR_MATRIX_SGI 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB -#endif - -#ifndef GL_SGI_color_table -#define GL_COLOR_TABLE_SGI 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 -#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 -#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 -#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 -#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 -#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF -#endif - -#ifndef GL_SGIS_pixel_texture -#define GL_PIXEL_TEXTURE_SGIS 0x8353 -#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 -#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 -#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 -#endif - -#ifndef GL_SGIX_pixel_texture -#define GL_PIXEL_TEX_GEN_SGIX 0x8139 -#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B -#endif - -#ifndef GL_SGIS_texture4D -#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 -#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 -#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 -#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 -#define GL_TEXTURE_4D_SGIS 0x8134 -#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 -#define GL_TEXTURE_4DSIZE_SGIS 0x8136 -#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 -#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 -#define GL_TEXTURE_4D_BINDING_SGIS 0x814F -#endif - -#ifndef GL_SGI_texture_color_table -#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC -#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD -#endif - -#ifndef GL_EXT_cmyka -#define GL_CMYK_EXT 0x800C -#define GL_CMYKA_EXT 0x800D -#define GL_PACK_CMYK_HINT_EXT 0x800E -#define GL_UNPACK_CMYK_HINT_EXT 0x800F -#endif - -#ifndef GL_EXT_texture_object -#define GL_TEXTURE_PRIORITY_EXT 0x8066 -#define GL_TEXTURE_RESIDENT_EXT 0x8067 -#define GL_TEXTURE_1D_BINDING_EXT 0x8068 -#define GL_TEXTURE_2D_BINDING_EXT 0x8069 -#define GL_TEXTURE_3D_BINDING_EXT 0x806A -#endif - -#ifndef GL_SGIS_detail_texture -#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 -#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 -#define GL_LINEAR_DETAIL_SGIS 0x8097 -#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 -#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 -#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A -#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B -#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C -#endif - -#ifndef GL_SGIS_sharpen_texture -#define GL_LINEAR_SHARPEN_SGIS 0x80AD -#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE -#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF -#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 -#endif - -#ifndef GL_EXT_packed_pixels -#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 -#endif - -#ifndef GL_SGIS_texture_lod -#define GL_TEXTURE_MIN_LOD_SGIS 0x813A -#define GL_TEXTURE_MAX_LOD_SGIS 0x813B -#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C -#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D -#endif - -#ifndef GL_SGIS_multisample -#define GL_MULTISAMPLE_SGIS 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F -#define GL_SAMPLE_MASK_SGIS 0x80A0 -#define GL_1PASS_SGIS 0x80A1 -#define GL_2PASS_0_SGIS 0x80A2 -#define GL_2PASS_1_SGIS 0x80A3 -#define GL_4PASS_0_SGIS 0x80A4 -#define GL_4PASS_1_SGIS 0x80A5 -#define GL_4PASS_2_SGIS 0x80A6 -#define GL_4PASS_3_SGIS 0x80A7 -#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 -#define GL_SAMPLES_SGIS 0x80A9 -#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA -#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB -#define GL_SAMPLE_PATTERN_SGIS 0x80AC -#endif - -#ifndef GL_EXT_rescale_normal -#define GL_RESCALE_NORMAL_EXT 0x803A -#endif - -#ifndef GL_EXT_vertex_array -#define GL_VERTEX_ARRAY_EXT 0x8074 -#define GL_NORMAL_ARRAY_EXT 0x8075 -#define GL_COLOR_ARRAY_EXT 0x8076 -#define GL_INDEX_ARRAY_EXT 0x8077 -#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 -#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 -#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A -#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B -#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C -#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D -#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E -#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F -#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 -#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 -#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 -#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 -#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 -#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 -#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 -#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 -#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A -#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B -#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C -#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D -#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E -#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F -#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 -#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 -#endif - -#ifndef GL_EXT_misc_attribute -#endif - -#ifndef GL_SGIS_generate_mipmap -#define GL_GENERATE_MIPMAP_SGIS 0x8191 -#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 -#endif - -#ifndef GL_SGIX_clipmap -#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 -#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 -#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 -#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 -#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 -#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 -#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 -#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 -#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 -#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D -#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E -#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F -#endif - -#ifndef GL_SGIX_shadow -#define GL_TEXTURE_COMPARE_SGIX 0x819A -#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B -#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C -#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D -#endif - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_CLAMP_TO_EDGE_SGIS 0x812F -#endif - -#ifndef GL_SGIS_texture_border_clamp -#define GL_CLAMP_TO_BORDER_SGIS 0x812D -#endif - -#ifndef GL_EXT_blend_minmax -#define GL_FUNC_ADD_EXT 0x8006 -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#define GL_BLEND_EQUATION_EXT 0x8009 -#endif - -#ifndef GL_EXT_blend_subtract -#define GL_FUNC_SUBTRACT_EXT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B -#endif - -#ifndef GL_EXT_blend_logic_op -#endif - -#ifndef GL_SGIX_interlace -#define GL_INTERLACE_SGIX 0x8094 -#endif - -#ifndef GL_SGIX_pixel_tiles -#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E -#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F -#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 -#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 -#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 -#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 -#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 -#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 -#endif - -#ifndef GL_SGIS_texture_select -#define GL_DUAL_ALPHA4_SGIS 0x8110 -#define GL_DUAL_ALPHA8_SGIS 0x8111 -#define GL_DUAL_ALPHA12_SGIS 0x8112 -#define GL_DUAL_ALPHA16_SGIS 0x8113 -#define GL_DUAL_LUMINANCE4_SGIS 0x8114 -#define GL_DUAL_LUMINANCE8_SGIS 0x8115 -#define GL_DUAL_LUMINANCE12_SGIS 0x8116 -#define GL_DUAL_LUMINANCE16_SGIS 0x8117 -#define GL_DUAL_INTENSITY4_SGIS 0x8118 -#define GL_DUAL_INTENSITY8_SGIS 0x8119 -#define GL_DUAL_INTENSITY12_SGIS 0x811A -#define GL_DUAL_INTENSITY16_SGIS 0x811B -#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C -#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D -#define GL_QUAD_ALPHA4_SGIS 0x811E -#define GL_QUAD_ALPHA8_SGIS 0x811F -#define GL_QUAD_LUMINANCE4_SGIS 0x8120 -#define GL_QUAD_LUMINANCE8_SGIS 0x8121 -#define GL_QUAD_INTENSITY4_SGIS 0x8122 -#define GL_QUAD_INTENSITY8_SGIS 0x8123 -#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 -#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 -#endif - -#ifndef GL_SGIX_sprite -#define GL_SPRITE_SGIX 0x8148 -#define GL_SPRITE_MODE_SGIX 0x8149 -#define GL_SPRITE_AXIS_SGIX 0x814A -#define GL_SPRITE_TRANSLATION_SGIX 0x814B -#define GL_SPRITE_AXIAL_SGIX 0x814C -#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D -#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E -#endif - -#ifndef GL_SGIX_texture_multi_buffer -#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E -#endif - -#ifndef GL_EXT_point_parameters -#define GL_POINT_SIZE_MIN_EXT 0x8126 -#define GL_POINT_SIZE_MAX_EXT 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 -#define GL_DISTANCE_ATTENUATION_EXT 0x8129 -#endif - -#ifndef GL_SGIS_point_parameters -#define GL_POINT_SIZE_MIN_SGIS 0x8126 -#define GL_POINT_SIZE_MAX_SGIS 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 -#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 -#endif - -#ifndef GL_SGIX_instruments -#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 -#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 -#endif - -#ifndef GL_SGIX_texture_scale_bias -#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 -#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A -#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B -#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C -#endif - -#ifndef GL_SGIX_framezoom -#define GL_FRAMEZOOM_SGIX 0x818B -#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C -#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D -#endif - -#ifndef GL_SGIX_tag_sample_buffer -#endif - -#ifndef GL_FfdMaskSGIX -#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 -#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 -#endif - -#ifndef GL_SGIX_polynomial_ffd -#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 -#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 -#define GL_DEFORMATIONS_MASK_SGIX 0x8196 -#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 -#endif - -#ifndef GL_SGIX_reference_plane -#define GL_REFERENCE_PLANE_SGIX 0x817D -#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E -#endif - -#ifndef GL_SGIX_flush_raster -#endif - -#ifndef GL_SGIX_depth_texture -#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 -#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 -#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 -#endif - -#ifndef GL_SGIS_fog_function -#define GL_FOG_FUNC_SGIS 0x812A -#define GL_FOG_FUNC_POINTS_SGIS 0x812B -#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C -#endif - -#ifndef GL_SGIX_fog_offset -#define GL_FOG_OFFSET_SGIX 0x8198 -#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 -#endif - -#ifndef GL_HP_image_transform -#define GL_IMAGE_SCALE_X_HP 0x8155 -#define GL_IMAGE_SCALE_Y_HP 0x8156 -#define GL_IMAGE_TRANSLATE_X_HP 0x8157 -#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 -#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 -#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A -#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B -#define GL_IMAGE_MAG_FILTER_HP 0x815C -#define GL_IMAGE_MIN_FILTER_HP 0x815D -#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E -#define GL_CUBIC_HP 0x815F -#define GL_AVERAGE_HP 0x8160 -#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 -#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 -#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 -#endif - -#ifndef GL_HP_convolution_border_modes -#define GL_IGNORE_BORDER_HP 0x8150 -#define GL_CONSTANT_BORDER_HP 0x8151 -#define GL_REPLICATE_BORDER_HP 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 -#endif - -#ifndef GL_INGR_palette_buffer -#endif - -#ifndef GL_SGIX_texture_add_env -#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE -#endif - -#ifndef GL_EXT_color_subtable -#endif - -#ifndef GL_PGI_vertex_hints -#define GL_VERTEX_DATA_HINT_PGI 0x1A22A -#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B -#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C -#define GL_MAX_VERTEX_HINT_PGI 0x1A22D -#define GL_COLOR3_BIT_PGI 0x00010000 -#define GL_COLOR4_BIT_PGI 0x00020000 -#define GL_EDGEFLAG_BIT_PGI 0x00040000 -#define GL_INDEX_BIT_PGI 0x00080000 -#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 -#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 -#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 -#define GL_MAT_EMISSION_BIT_PGI 0x00800000 -#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 -#define GL_MAT_SHININESS_BIT_PGI 0x02000000 -#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 -#define GL_NORMAL_BIT_PGI 0x08000000 -#define GL_TEXCOORD1_BIT_PGI 0x10000000 -#define GL_TEXCOORD2_BIT_PGI 0x20000000 -#define GL_TEXCOORD3_BIT_PGI 0x40000000 -#define GL_TEXCOORD4_BIT_PGI 0x80000000 -#define GL_VERTEX23_BIT_PGI 0x00000004 -#define GL_VERTEX4_BIT_PGI 0x00000008 -#endif - -#ifndef GL_PGI_misc_hints -#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 -#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD -#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE -#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 -#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 -#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 -#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C -#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D -#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E -#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F -#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 -#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 -#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 -#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 -#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 -#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 -#define GL_CLIP_NEAR_HINT_PGI 0x1A220 -#define GL_CLIP_FAR_HINT_PGI 0x1A221 -#define GL_WIDE_LINE_HINT_PGI 0x1A222 -#define GL_BACK_NORMALS_HINT_PGI 0x1A223 -#endif - -#ifndef GL_EXT_paletted_texture -#define GL_COLOR_INDEX1_EXT 0x80E2 -#define GL_COLOR_INDEX2_EXT 0x80E3 -#define GL_COLOR_INDEX4_EXT 0x80E4 -#define GL_COLOR_INDEX8_EXT 0x80E5 -#define GL_COLOR_INDEX12_EXT 0x80E6 -#define GL_COLOR_INDEX16_EXT 0x80E7 -#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED -#endif - -#ifndef GL_EXT_clip_volume_hint -#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 -#endif - -#ifndef GL_SGIX_list_priority -#define GL_LIST_PRIORITY_SGIX 0x8182 -#endif - -#ifndef GL_SGIX_ir_instrument1 -#define GL_IR_INSTRUMENT1_SGIX 0x817F -#endif - -#ifndef GL_SGIX_calligraphic_fragment -#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 -#endif - -#ifndef GL_SGIX_texture_lod_bias -#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E -#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F -#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 -#endif - -#ifndef GL_SGIX_shadow_ambient -#define GL_SHADOW_AMBIENT_SGIX 0x80BF -#endif - -#ifndef GL_EXT_index_texture -#endif - -#ifndef GL_EXT_index_material -#define GL_INDEX_MATERIAL_EXT 0x81B8 -#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 -#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA -#endif - -#ifndef GL_EXT_index_func -#define GL_INDEX_TEST_EXT 0x81B5 -#define GL_INDEX_TEST_FUNC_EXT 0x81B6 -#define GL_INDEX_TEST_REF_EXT 0x81B7 -#endif - -#ifndef GL_EXT_index_array_formats -#define GL_IUI_V2F_EXT 0x81AD -#define GL_IUI_V3F_EXT 0x81AE -#define GL_IUI_N3F_V2F_EXT 0x81AF -#define GL_IUI_N3F_V3F_EXT 0x81B0 -#define GL_T2F_IUI_V2F_EXT 0x81B1 -#define GL_T2F_IUI_V3F_EXT 0x81B2 -#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 -#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 -#endif - -#ifndef GL_EXT_compiled_vertex_array -#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 -#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 -#endif - -#ifndef GL_EXT_cull_vertex -#define GL_CULL_VERTEX_EXT 0x81AA -#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB -#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC -#endif - -#ifndef GL_SGIX_ycrcb -#define GL_YCRCB_422_SGIX 0x81BB -#define GL_YCRCB_444_SGIX 0x81BC -#endif - -#ifndef GL_SGIX_fragment_lighting -#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 -#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 -#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 -#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 -#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 -#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 -#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 -#define GL_LIGHT_ENV_MODE_SGIX 0x8407 -#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 -#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 -#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A -#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B -#define GL_FRAGMENT_LIGHT0_SGIX 0x840C -#define GL_FRAGMENT_LIGHT1_SGIX 0x840D -#define GL_FRAGMENT_LIGHT2_SGIX 0x840E -#define GL_FRAGMENT_LIGHT3_SGIX 0x840F -#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 -#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 -#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 -#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 -#endif - -#ifndef GL_IBM_rasterpos_clip -#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 -#endif - -#ifndef GL_HP_texture_lighting -#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 -#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 -#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 -#endif - -#ifndef GL_EXT_draw_range_elements -#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 -#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 -#endif - -#ifndef GL_WIN_phong_shading -#define GL_PHONG_WIN 0x80EA -#define GL_PHONG_HINT_WIN 0x80EB -#endif - -#ifndef GL_WIN_specular_fog -#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC -#endif - -#ifndef GL_EXT_light_texture -#define GL_FRAGMENT_MATERIAL_EXT 0x8349 -#define GL_FRAGMENT_NORMAL_EXT 0x834A -#define GL_FRAGMENT_COLOR_EXT 0x834C -#define GL_ATTENUATION_EXT 0x834D -#define GL_SHADOW_ATTENUATION_EXT 0x834E -#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F -#define GL_TEXTURE_LIGHT_EXT 0x8350 -#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 -#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 -/* reuse GL_FRAGMENT_DEPTH_EXT */ -#endif - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_ALPHA_MIN_SGIX 0x8320 -#define GL_ALPHA_MAX_SGIX 0x8321 -#endif - -#ifndef GL_SGIX_impact_pixel_texture -#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184 -#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185 -#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186 -#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187 -#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188 -#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189 -#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A -#endif - -#ifndef GL_EXT_bgra -#define GL_BGR_EXT 0x80E0 -#define GL_BGRA_EXT 0x80E1 -#endif - -#ifndef GL_SGIX_async -#define GL_ASYNC_MARKER_SGIX 0x8329 -#endif - -#ifndef GL_SGIX_async_pixel -#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C -#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D -#define GL_ASYNC_READ_PIXELS_SGIX 0x835E -#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F -#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 -#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 -#endif - -#ifndef GL_SGIX_async_histogram -#define GL_ASYNC_HISTOGRAM_SGIX 0x832C -#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D -#endif - -#ifndef GL_INTEL_texture_scissor -#endif - -#ifndef GL_INTEL_parallel_arrays -#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 -#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 -#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 -#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 -#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 -#endif - -#ifndef GL_HP_occlusion_test -#define GL_OCCLUSION_TEST_HP 0x8165 -#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 -#endif - -#ifndef GL_EXT_pixel_transform -#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 -#define GL_PIXEL_MAG_FILTER_EXT 0x8331 -#define GL_PIXEL_MIN_FILTER_EXT 0x8332 -#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 -#define GL_CUBIC_EXT 0x8334 -#define GL_AVERAGE_EXT 0x8335 -#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 -#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 -#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 -#endif - -#ifndef GL_EXT_pixel_transform_color_table -#endif - -#ifndef GL_EXT_shared_texture_palette -#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB -#endif - -#ifndef GL_EXT_separate_specular_color -#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 -#define GL_SINGLE_COLOR_EXT 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA -#endif - -#ifndef GL_EXT_secondary_color -#define GL_COLOR_SUM_EXT 0x8458 -#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D -#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E -#endif - -#ifndef GL_EXT_texture_perturb_normal -#define GL_PERTURB_EXT 0x85AE -#define GL_TEXTURE_NORMAL_EXT 0x85AF -#endif - -#ifndef GL_EXT_multi_draw_arrays -#endif - -#ifndef GL_EXT_fog_coord -#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 -#define GL_FOG_COORDINATE_EXT 0x8451 -#define GL_FRAGMENT_DEPTH_EXT 0x8452 -#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 -#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 -#endif - -#ifndef GL_REND_screen_coordinates -#define GL_SCREEN_COORDINATES_REND 0x8490 -#define GL_INVERTED_SCREEN_W_REND 0x8491 -#endif - -#ifndef GL_EXT_coordinate_frame -#define GL_TANGENT_ARRAY_EXT 0x8439 -#define GL_BINORMAL_ARRAY_EXT 0x843A -#define GL_CURRENT_TANGENT_EXT 0x843B -#define GL_CURRENT_BINORMAL_EXT 0x843C -#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E -#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F -#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 -#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 -#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 -#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 -#define GL_MAP1_TANGENT_EXT 0x8444 -#define GL_MAP2_TANGENT_EXT 0x8445 -#define GL_MAP1_BINORMAL_EXT 0x8446 -#define GL_MAP2_BINORMAL_EXT 0x8447 -#endif - -#ifndef GL_EXT_texture_env_combine -#define GL_COMBINE_EXT 0x8570 -#define GL_COMBINE_RGB_EXT 0x8571 -#define GL_COMBINE_ALPHA_EXT 0x8572 -#define GL_RGB_SCALE_EXT 0x8573 -#define GL_ADD_SIGNED_EXT 0x8574 -#define GL_INTERPOLATE_EXT 0x8575 -#define GL_CONSTANT_EXT 0x8576 -#define GL_PRIMARY_COLOR_EXT 0x8577 -#define GL_PREVIOUS_EXT 0x8578 -#define GL_SOURCE0_RGB_EXT 0x8580 -#define GL_SOURCE1_RGB_EXT 0x8581 -#define GL_SOURCE2_RGB_EXT 0x8582 -#define GL_SOURCE0_ALPHA_EXT 0x8588 -#define GL_SOURCE1_ALPHA_EXT 0x8589 -#define GL_SOURCE2_ALPHA_EXT 0x858A -#define GL_OPERAND0_RGB_EXT 0x8590 -#define GL_OPERAND1_RGB_EXT 0x8591 -#define GL_OPERAND2_RGB_EXT 0x8592 -#define GL_OPERAND0_ALPHA_EXT 0x8598 -#define GL_OPERAND1_ALPHA_EXT 0x8599 -#define GL_OPERAND2_ALPHA_EXT 0x859A -#endif - -#ifndef GL_APPLE_specular_vector -#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 -#endif - -#ifndef GL_APPLE_transform_hint -#define GL_TRANSFORM_HINT_APPLE 0x85B1 -#endif - -#ifndef GL_SGIX_fog_scale -#define GL_FOG_SCALE_SGIX 0x81FC -#define GL_FOG_SCALE_VALUE_SGIX 0x81FD -#endif - -#ifndef GL_SUNX_constant_data -#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 -#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 -#endif - -#ifndef GL_SUN_global_alpha -#define GL_GLOBAL_ALPHA_SUN 0x81D9 -#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA -#endif - -#ifndef GL_SUN_triangle_list -#define GL_RESTART_SUN 0x0001 -#define GL_REPLACE_MIDDLE_SUN 0x0002 -#define GL_REPLACE_OLDEST_SUN 0x0003 -#define GL_TRIANGLE_LIST_SUN 0x81D7 -#define GL_REPLACEMENT_CODE_SUN 0x81D8 -#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 -#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 -#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 -#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 -#define GL_R1UI_V3F_SUN 0x85C4 -#define GL_R1UI_C4UB_V3F_SUN 0x85C5 -#define GL_R1UI_C3F_V3F_SUN 0x85C6 -#define GL_R1UI_N3F_V3F_SUN 0x85C7 -#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 -#define GL_R1UI_T2F_V3F_SUN 0x85C9 -#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA -#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB -#endif - -#ifndef GL_SUN_vertex -#endif - -#ifndef GL_EXT_blend_func_separate -#define GL_BLEND_DST_RGB_EXT 0x80C8 -#define GL_BLEND_SRC_RGB_EXT 0x80C9 -#define GL_BLEND_DST_ALPHA_EXT 0x80CA -#define GL_BLEND_SRC_ALPHA_EXT 0x80CB -#endif - -#ifndef GL_INGR_color_clamp -#define GL_RED_MIN_CLAMP_INGR 0x8560 -#define GL_GREEN_MIN_CLAMP_INGR 0x8561 -#define GL_BLUE_MIN_CLAMP_INGR 0x8562 -#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 -#define GL_RED_MAX_CLAMP_INGR 0x8564 -#define GL_GREEN_MAX_CLAMP_INGR 0x8565 -#define GL_BLUE_MAX_CLAMP_INGR 0x8566 -#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 -#endif - -#ifndef GL_INGR_interlace_read -#define GL_INTERLACE_READ_INGR 0x8568 -#endif - -#ifndef GL_EXT_stencil_wrap -#define GL_INCR_WRAP_EXT 0x8507 -#define GL_DECR_WRAP_EXT 0x8508 -#endif - -#ifndef GL_EXT_422_pixels -#define GL_422_EXT 0x80CC -#define GL_422_REV_EXT 0x80CD -#define GL_422_AVERAGE_EXT 0x80CE -#define GL_422_REV_AVERAGE_EXT 0x80CF -#endif - -#ifndef GL_NV_texgen_reflection -#define GL_NORMAL_MAP_NV 0x8511 -#define GL_REFLECTION_MAP_NV 0x8512 -#endif - -#ifndef GL_EXT_texture_cube_map -#define GL_NORMAL_MAP_EXT 0x8511 -#define GL_REFLECTION_MAP_EXT 0x8512 -#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C -#endif - -#ifndef GL_SUN_convolution_border_modes -#define GL_WRAP_BORDER_SUN 0x81D4 -#endif - -#ifndef GL_EXT_texture_env_add -#endif - -#ifndef GL_EXT_texture_lod_bias -#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD -#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 -#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 -#endif - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif - -#ifndef GL_EXT_vertex_weighting -#define GL_MODELVIEW0_STACK_DEPTH_EXT GL_MODELVIEW_STACK_DEPTH -#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 -#define GL_MODELVIEW0_MATRIX_EXT GL_MODELVIEW_MATRIX -#define GL_MODELVIEW1_MATRIX_EXT 0x8506 -#define GL_VERTEX_WEIGHTING_EXT 0x8509 -#define GL_MODELVIEW0_EXT GL_MODELVIEW -#define GL_MODELVIEW1_EXT 0x850A -#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B -#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C -#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D -#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E -#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F -#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 -#endif - -#ifndef GL_NV_light_max_exponent -#define GL_MAX_SHININESS_NV 0x8504 -#define GL_MAX_SPOT_EXPONENT_NV 0x8505 -#endif - -#ifndef GL_NV_vertex_array_range -#define GL_VERTEX_ARRAY_RANGE_NV 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E -#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F -#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 -#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 -#endif - -#ifndef GL_NV_register_combiners -#define GL_REGISTER_COMBINERS_NV 0x8522 -#define GL_VARIABLE_A_NV 0x8523 -#define GL_VARIABLE_B_NV 0x8524 -#define GL_VARIABLE_C_NV 0x8525 -#define GL_VARIABLE_D_NV 0x8526 -#define GL_VARIABLE_E_NV 0x8527 -#define GL_VARIABLE_F_NV 0x8528 -#define GL_VARIABLE_G_NV 0x8529 -#define GL_CONSTANT_COLOR0_NV 0x852A -#define GL_CONSTANT_COLOR1_NV 0x852B -#define GL_PRIMARY_COLOR_NV 0x852C -#define GL_SECONDARY_COLOR_NV 0x852D -#define GL_SPARE0_NV 0x852E -#define GL_SPARE1_NV 0x852F -#define GL_DISCARD_NV 0x8530 -#define GL_E_TIMES_F_NV 0x8531 -#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 -#define GL_UNSIGNED_IDENTITY_NV 0x8536 -#define GL_UNSIGNED_INVERT_NV 0x8537 -#define GL_EXPAND_NORMAL_NV 0x8538 -#define GL_EXPAND_NEGATE_NV 0x8539 -#define GL_HALF_BIAS_NORMAL_NV 0x853A -#define GL_HALF_BIAS_NEGATE_NV 0x853B -#define GL_SIGNED_IDENTITY_NV 0x853C -#define GL_SIGNED_NEGATE_NV 0x853D -#define GL_SCALE_BY_TWO_NV 0x853E -#define GL_SCALE_BY_FOUR_NV 0x853F -#define GL_SCALE_BY_ONE_HALF_NV 0x8540 -#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 -#define GL_COMBINER_INPUT_NV 0x8542 -#define GL_COMBINER_MAPPING_NV 0x8543 -#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 -#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 -#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 -#define GL_COMBINER_MUX_SUM_NV 0x8547 -#define GL_COMBINER_SCALE_NV 0x8548 -#define GL_COMBINER_BIAS_NV 0x8549 -#define GL_COMBINER_AB_OUTPUT_NV 0x854A -#define GL_COMBINER_CD_OUTPUT_NV 0x854B -#define GL_COMBINER_SUM_OUTPUT_NV 0x854C -#define GL_MAX_GENERAL_COMBINERS_NV 0x854D -#define GL_NUM_GENERAL_COMBINERS_NV 0x854E -#define GL_COLOR_SUM_CLAMP_NV 0x854F -#define GL_COMBINER0_NV 0x8550 -#define GL_COMBINER1_NV 0x8551 -#define GL_COMBINER2_NV 0x8552 -#define GL_COMBINER3_NV 0x8553 -#define GL_COMBINER4_NV 0x8554 -#define GL_COMBINER5_NV 0x8555 -#define GL_COMBINER6_NV 0x8556 -#define GL_COMBINER7_NV 0x8557 -/* reuse GL_TEXTURE0_ARB */ -/* reuse GL_TEXTURE1_ARB */ -/* reuse GL_ZERO */ -/* reuse GL_NONE */ -/* reuse GL_FOG */ -#endif - -#ifndef GL_NV_fog_distance -#define GL_FOG_DISTANCE_MODE_NV 0x855A -#define GL_EYE_RADIAL_NV 0x855B -#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C -/* reuse GL_EYE_PLANE */ -#endif - -#ifndef GL_NV_texgen_emboss -#define GL_EMBOSS_LIGHT_NV 0x855D -#define GL_EMBOSS_CONSTANT_NV 0x855E -#define GL_EMBOSS_MAP_NV 0x855F -#endif - -#ifndef GL_NV_blend_square -#endif - -#ifndef GL_NV_texture_env_combine4 -#define GL_COMBINE4_NV 0x8503 -#define GL_SOURCE3_RGB_NV 0x8583 -#define GL_SOURCE3_ALPHA_NV 0x858B -#define GL_OPERAND3_RGB_NV 0x8593 -#define GL_OPERAND3_ALPHA_NV 0x859B -#endif - -#ifndef GL_MESA_resize_buffers -#endif - -#ifndef GL_MESA_window_pos -#endif - -#ifndef GL_EXT_texture_compression_s3tc -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 -#endif - -#ifndef GL_IBM_cull_vertex -#define GL_CULL_VERTEX_IBM 103050 -#endif - -#ifndef GL_IBM_multimode_draw_arrays -#endif - -#ifndef GL_IBM_vertex_array_lists -#define GL_VERTEX_ARRAY_LIST_IBM 103070 -#define GL_NORMAL_ARRAY_LIST_IBM 103071 -#define GL_COLOR_ARRAY_LIST_IBM 103072 -#define GL_INDEX_ARRAY_LIST_IBM 103073 -#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 -#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 -#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 -#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 -#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 -#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 -#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 -#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 -#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 -#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 -#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 -#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 -#endif - -#ifndef GL_SGIX_subsample -#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 -#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 -#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 -#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 -#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 -#endif - -#ifndef GL_SGIX_ycrcb_subsample -#endif - -#ifndef GL_SGIX_ycrcba -#define GL_YCRCB_SGIX 0x8318 -#define GL_YCRCBA_SGIX 0x8319 -#endif - -#ifndef GL_SGI_depth_pass_instrument -#define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310 -#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311 -#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312 -#endif - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 -#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 -#endif - -#ifndef GL_3DFX_multisample -#define GL_MULTISAMPLE_3DFX 0x86B2 -#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 -#define GL_SAMPLES_3DFX 0x86B4 -#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 -#endif - -#ifndef GL_3DFX_tbuffer -#endif - -#ifndef GL_EXT_multisample -#define GL_MULTISAMPLE_EXT 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F -#define GL_SAMPLE_MASK_EXT 0x80A0 -#define GL_1PASS_EXT 0x80A1 -#define GL_2PASS_0_EXT 0x80A2 -#define GL_2PASS_1_EXT 0x80A3 -#define GL_4PASS_0_EXT 0x80A4 -#define GL_4PASS_1_EXT 0x80A5 -#define GL_4PASS_2_EXT 0x80A6 -#define GL_4PASS_3_EXT 0x80A7 -#define GL_SAMPLE_BUFFERS_EXT 0x80A8 -#define GL_SAMPLES_EXT 0x80A9 -#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA -#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB -#define GL_SAMPLE_PATTERN_EXT 0x80AC -#define GL_MULTISAMPLE_BIT_EXT 0x20000000 -#endif - -#ifndef GL_SGIX_vertex_preclip -#define GL_VERTEX_PRECLIP_SGIX 0x83EE -#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF -#endif - -#ifndef GL_SGIX_convolution_accuracy -#define GL_CONVOLUTION_HINT_SGIX 0x8316 -#endif - -#ifndef GL_SGIX_resample -#define GL_PACK_RESAMPLE_SGIX 0x842C -#define GL_UNPACK_RESAMPLE_SGIX 0x842D -#define GL_RESAMPLE_REPLICATE_SGIX 0x842E -#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F -#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 -#endif - -#ifndef GL_SGIS_point_line_texgen -#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 -#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 -#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 -#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 -#define GL_EYE_POINT_SGIS 0x81F4 -#define GL_OBJECT_POINT_SGIS 0x81F5 -#define GL_EYE_LINE_SGIS 0x81F6 -#define GL_OBJECT_LINE_SGIS 0x81F7 -#endif - -#ifndef GL_SGIS_texture_color_mask -#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF -#endif - -#ifndef GL_EXT_texture_env_dot3 -#define GL_DOT3_RGB_EXT 0x8740 -#define GL_DOT3_RGBA_EXT 0x8741 -#endif - -#ifndef GL_ATI_texture_mirror_once -#define GL_MIRROR_CLAMP_ATI 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 -#endif - -#ifndef GL_NV_fence -#define GL_ALL_COMPLETED_NV 0x84F2 -#define GL_FENCE_STATUS_NV 0x84F3 -#define GL_FENCE_CONDITION_NV 0x84F4 -#endif - -#ifndef GL_IBM_texture_mirrored_repeat -#define GL_MIRRORED_REPEAT_IBM 0x8370 -#endif - -#ifndef GL_NV_evaluators -#define GL_EVAL_2D_NV 0x86C0 -#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 -#define GL_MAP_TESSELLATION_NV 0x86C2 -#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 -#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 -#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 -#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 -#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 -#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 -#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 -#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA -#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB -#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC -#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD -#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE -#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF -#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 -#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 -#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 -#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 -#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 -#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 -#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 -#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 -#endif - -#ifndef GL_NV_packed_depth_stencil -#define GL_DEPTH_STENCIL_NV 0x84F9 -#define GL_UNSIGNED_INT_24_8_NV 0x84FA -#endif - -#ifndef GL_NV_register_combiners2 -#define GL_PER_STAGE_CONSTANTS_NV 0x8535 -#endif - -#ifndef GL_NV_texture_compression_vtc -#endif - -#ifndef GL_NV_texture_rectangle -#define GL_TEXTURE_RECTANGLE_NV 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 -#endif - -#ifndef GL_NV_texture_shader -#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C -#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D -#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E -#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 -#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA -#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB -#define GL_DSDT_MAG_INTENSITY_NV 0x86DC -#define GL_SHADER_CONSISTENT_NV 0x86DD -#define GL_TEXTURE_SHADER_NV 0x86DE -#define GL_SHADER_OPERATION_NV 0x86DF -#define GL_CULL_MODES_NV 0x86E0 -#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 -#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 -#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 -#define GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV -#define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV -#define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV -#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 -#define GL_CONST_EYE_NV 0x86E5 -#define GL_PASS_THROUGH_NV 0x86E6 -#define GL_CULL_FRAGMENT_NV 0x86E7 -#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 -#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 -#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA -#define GL_DOT_PRODUCT_NV 0x86EC -#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED -#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE -#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 -#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 -#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 -#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 -#define GL_HILO_NV 0x86F4 -#define GL_DSDT_NV 0x86F5 -#define GL_DSDT_MAG_NV 0x86F6 -#define GL_DSDT_MAG_VIB_NV 0x86F7 -#define GL_HILO16_NV 0x86F8 -#define GL_SIGNED_HILO_NV 0x86F9 -#define GL_SIGNED_HILO16_NV 0x86FA -#define GL_SIGNED_RGBA_NV 0x86FB -#define GL_SIGNED_RGBA8_NV 0x86FC -#define GL_SIGNED_RGB_NV 0x86FE -#define GL_SIGNED_RGB8_NV 0x86FF -#define GL_SIGNED_LUMINANCE_NV 0x8701 -#define GL_SIGNED_LUMINANCE8_NV 0x8702 -#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 -#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 -#define GL_SIGNED_ALPHA_NV 0x8705 -#define GL_SIGNED_ALPHA8_NV 0x8706 -#define GL_SIGNED_INTENSITY_NV 0x8707 -#define GL_SIGNED_INTENSITY8_NV 0x8708 -#define GL_DSDT8_NV 0x8709 -#define GL_DSDT8_MAG8_NV 0x870A -#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B -#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C -#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D -#define GL_HI_SCALE_NV 0x870E -#define GL_LO_SCALE_NV 0x870F -#define GL_DS_SCALE_NV 0x8710 -#define GL_DT_SCALE_NV 0x8711 -#define GL_MAGNITUDE_SCALE_NV 0x8712 -#define GL_VIBRANCE_SCALE_NV 0x8713 -#define GL_HI_BIAS_NV 0x8714 -#define GL_LO_BIAS_NV 0x8715 -#define GL_DS_BIAS_NV 0x8716 -#define GL_DT_BIAS_NV 0x8717 -#define GL_MAGNITUDE_BIAS_NV 0x8718 -#define GL_VIBRANCE_BIAS_NV 0x8719 -#define GL_TEXTURE_BORDER_VALUES_NV 0x871A -#define GL_TEXTURE_HI_SIZE_NV 0x871B -#define GL_TEXTURE_LO_SIZE_NV 0x871C -#define GL_TEXTURE_DS_SIZE_NV 0x871D -#define GL_TEXTURE_DT_SIZE_NV 0x871E -#define GL_TEXTURE_MAG_SIZE_NV 0x871F -#endif - -#ifndef GL_NV_texture_shader2 -#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF -#endif - -#ifndef GL_NV_vertex_array_range2 -#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 -#endif - -#ifndef GL_NV_vertex_program -#define GL_VERTEX_PROGRAM_NV 0x8620 -#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 -#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 -#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 -#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 -#define GL_CURRENT_ATTRIB_NV 0x8626 -#define GL_PROGRAM_LENGTH_NV 0x8627 -#define GL_PROGRAM_STRING_NV 0x8628 -#define GL_MODELVIEW_PROJECTION_NV 0x8629 -#define GL_IDENTITY_NV 0x862A -#define GL_INVERSE_NV 0x862B -#define GL_TRANSPOSE_NV 0x862C -#define GL_INVERSE_TRANSPOSE_NV 0x862D -#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E -#define GL_MAX_TRACK_MATRICES_NV 0x862F -#define GL_MATRIX0_NV 0x8630 -#define GL_MATRIX1_NV 0x8631 -#define GL_MATRIX2_NV 0x8632 -#define GL_MATRIX3_NV 0x8633 -#define GL_MATRIX4_NV 0x8634 -#define GL_MATRIX5_NV 0x8635 -#define GL_MATRIX6_NV 0x8636 -#define GL_MATRIX7_NV 0x8637 -#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 -#define GL_CURRENT_MATRIX_NV 0x8641 -#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 -#define GL_PROGRAM_PARAMETER_NV 0x8644 -#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 -#define GL_PROGRAM_TARGET_NV 0x8646 -#define GL_PROGRAM_RESIDENT_NV 0x8647 -#define GL_TRACK_MATRIX_NV 0x8648 -#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 -#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A -#define GL_PROGRAM_ERROR_POSITION_NV 0x864B -#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 -#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 -#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 -#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 -#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 -#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 -#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 -#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 -#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 -#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 -#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A -#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B -#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C -#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D -#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E -#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F -#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 -#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 -#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 -#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 -#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 -#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 -#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 -#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 -#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 -#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 -#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A -#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B -#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C -#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D -#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E -#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F -#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 -#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 -#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 -#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 -#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 -#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 -#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 -#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 -#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 -#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 -#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A -#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B -#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C -#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D -#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E -#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F -#endif - -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 -#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A -#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B -#endif - -#ifndef GL_SGIX_scalebias_hint -#define GL_SCALEBIAS_HINT_SGIX 0x8322 -#endif - -#ifndef GL_OML_interlace -#define GL_INTERLACE_OML 0x8980 -#define GL_INTERLACE_READ_OML 0x8981 -#endif - -#ifndef GL_OML_subsample -#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 -#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 -#endif - -#ifndef GL_OML_resample -#define GL_PACK_RESAMPLE_OML 0x8984 -#define GL_UNPACK_RESAMPLE_OML 0x8985 -#define GL_RESAMPLE_REPLICATE_OML 0x8986 -#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 -#define GL_RESAMPLE_AVERAGE_OML 0x8988 -#define GL_RESAMPLE_DECIMATE_OML 0x8989 -#endif - -#ifndef GL_NV_copy_depth_to_color -#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E -#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F -#endif - -#ifndef GL_ATI_envmap_bumpmap -#define GL_BUMP_ROT_MATRIX_ATI 0x8775 -#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 -#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 -#define GL_BUMP_TEX_UNITS_ATI 0x8778 -#define GL_DUDV_ATI 0x8779 -#define GL_DU8DV8_ATI 0x877A -#define GL_BUMP_ENVMAP_ATI 0x877B -#define GL_BUMP_TARGET_ATI 0x877C -#endif - -#ifndef GL_ATI_fragment_shader -#define GL_FRAGMENT_SHADER_ATI 0x8920 -#define GL_REG_0_ATI 0x8921 -#define GL_REG_1_ATI 0x8922 -#define GL_REG_2_ATI 0x8923 -#define GL_REG_3_ATI 0x8924 -#define GL_REG_4_ATI 0x8925 -#define GL_REG_5_ATI 0x8926 -#define GL_REG_6_ATI 0x8927 -#define GL_REG_7_ATI 0x8928 -#define GL_REG_8_ATI 0x8929 -#define GL_REG_9_ATI 0x892A -#define GL_REG_10_ATI 0x892B -#define GL_REG_11_ATI 0x892C -#define GL_REG_12_ATI 0x892D -#define GL_REG_13_ATI 0x892E -#define GL_REG_14_ATI 0x892F -#define GL_REG_15_ATI 0x8930 -#define GL_REG_16_ATI 0x8931 -#define GL_REG_17_ATI 0x8932 -#define GL_REG_18_ATI 0x8933 -#define GL_REG_19_ATI 0x8934 -#define GL_REG_20_ATI 0x8935 -#define GL_REG_21_ATI 0x8936 -#define GL_REG_22_ATI 0x8937 -#define GL_REG_23_ATI 0x8938 -#define GL_REG_24_ATI 0x8939 -#define GL_REG_25_ATI 0x893A -#define GL_REG_26_ATI 0x893B -#define GL_REG_27_ATI 0x893C -#define GL_REG_28_ATI 0x893D -#define GL_REG_29_ATI 0x893E -#define GL_REG_30_ATI 0x893F -#define GL_REG_31_ATI 0x8940 -#define GL_CON_0_ATI 0x8941 -#define GL_CON_1_ATI 0x8942 -#define GL_CON_2_ATI 0x8943 -#define GL_CON_3_ATI 0x8944 -#define GL_CON_4_ATI 0x8945 -#define GL_CON_5_ATI 0x8946 -#define GL_CON_6_ATI 0x8947 -#define GL_CON_7_ATI 0x8948 -#define GL_CON_8_ATI 0x8949 -#define GL_CON_9_ATI 0x894A -#define GL_CON_10_ATI 0x894B -#define GL_CON_11_ATI 0x894C -#define GL_CON_12_ATI 0x894D -#define GL_CON_13_ATI 0x894E -#define GL_CON_14_ATI 0x894F -#define GL_CON_15_ATI 0x8950 -#define GL_CON_16_ATI 0x8951 -#define GL_CON_17_ATI 0x8952 -#define GL_CON_18_ATI 0x8953 -#define GL_CON_19_ATI 0x8954 -#define GL_CON_20_ATI 0x8955 -#define GL_CON_21_ATI 0x8956 -#define GL_CON_22_ATI 0x8957 -#define GL_CON_23_ATI 0x8958 -#define GL_CON_24_ATI 0x8959 -#define GL_CON_25_ATI 0x895A -#define GL_CON_26_ATI 0x895B -#define GL_CON_27_ATI 0x895C -#define GL_CON_28_ATI 0x895D -#define GL_CON_29_ATI 0x895E -#define GL_CON_30_ATI 0x895F -#define GL_CON_31_ATI 0x8960 -#define GL_MOV_ATI 0x8961 -#define GL_ADD_ATI 0x8963 -#define GL_MUL_ATI 0x8964 -#define GL_SUB_ATI 0x8965 -#define GL_DOT3_ATI 0x8966 -#define GL_DOT4_ATI 0x8967 -#define GL_MAD_ATI 0x8968 -#define GL_LERP_ATI 0x8969 -#define GL_CND_ATI 0x896A -#define GL_CND0_ATI 0x896B -#define GL_DOT2_ADD_ATI 0x896C -#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D -#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E -#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F -#define GL_NUM_PASSES_ATI 0x8970 -#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 -#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 -#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 -#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 -#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 -#define GL_SWIZZLE_STR_ATI 0x8976 -#define GL_SWIZZLE_STQ_ATI 0x8977 -#define GL_SWIZZLE_STR_DR_ATI 0x8978 -#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 -#define GL_SWIZZLE_STRQ_ATI 0x897A -#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B -#define GL_RED_BIT_ATI 0x00000001 -#define GL_GREEN_BIT_ATI 0x00000002 -#define GL_BLUE_BIT_ATI 0x00000004 -#define GL_2X_BIT_ATI 0x00000001 -#define GL_4X_BIT_ATI 0x00000002 -#define GL_8X_BIT_ATI 0x00000004 -#define GL_HALF_BIT_ATI 0x00000008 -#define GL_QUARTER_BIT_ATI 0x00000010 -#define GL_EIGHTH_BIT_ATI 0x00000020 -#define GL_SATURATE_BIT_ATI 0x00000040 -#define GL_COMP_BIT_ATI 0x00000002 -#define GL_NEGATE_BIT_ATI 0x00000004 -#define GL_BIAS_BIT_ATI 0x00000008 -#endif - -#ifndef GL_ATI_pn_triangles -#define GL_PN_TRIANGLES_ATI 0x87F0 -#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 -#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 -#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 -#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 -#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 -#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 -#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 -#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 -#endif - -#ifndef GL_ATI_vertex_array_object -#define GL_STATIC_ATI 0x8760 -#define GL_DYNAMIC_ATI 0x8761 -#define GL_PRESERVE_ATI 0x8762 -#define GL_DISCARD_ATI 0x8763 -#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 -#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 -#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 -#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 -#endif - -#ifndef GL_EXT_vertex_shader -#define GL_VERTEX_SHADER_EXT 0x8780 -#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 -#define GL_OP_INDEX_EXT 0x8782 -#define GL_OP_NEGATE_EXT 0x8783 -#define GL_OP_DOT3_EXT 0x8784 -#define GL_OP_DOT4_EXT 0x8785 -#define GL_OP_MUL_EXT 0x8786 -#define GL_OP_ADD_EXT 0x8787 -#define GL_OP_MADD_EXT 0x8788 -#define GL_OP_FRAC_EXT 0x8789 -#define GL_OP_MAX_EXT 0x878A -#define GL_OP_MIN_EXT 0x878B -#define GL_OP_SET_GE_EXT 0x878C -#define GL_OP_SET_LT_EXT 0x878D -#define GL_OP_CLAMP_EXT 0x878E -#define GL_OP_FLOOR_EXT 0x878F -#define GL_OP_ROUND_EXT 0x8790 -#define GL_OP_EXP_BASE_2_EXT 0x8791 -#define GL_OP_LOG_BASE_2_EXT 0x8792 -#define GL_OP_POWER_EXT 0x8793 -#define GL_OP_RECIP_EXT 0x8794 -#define GL_OP_RECIP_SQRT_EXT 0x8795 -#define GL_OP_SUB_EXT 0x8796 -#define GL_OP_CROSS_PRODUCT_EXT 0x8797 -#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 -#define GL_OP_MOV_EXT 0x8799 -#define GL_OUTPUT_VERTEX_EXT 0x879A -#define GL_OUTPUT_COLOR0_EXT 0x879B -#define GL_OUTPUT_COLOR1_EXT 0x879C -#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D -#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E -#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F -#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 -#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 -#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 -#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 -#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 -#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 -#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 -#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 -#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 -#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 -#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA -#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB -#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC -#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD -#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE -#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF -#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 -#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 -#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 -#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 -#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 -#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 -#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 -#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 -#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 -#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 -#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA -#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB -#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC -#define GL_OUTPUT_FOG_EXT 0x87BD -#define GL_SCALAR_EXT 0x87BE -#define GL_VECTOR_EXT 0x87BF -#define GL_MATRIX_EXT 0x87C0 -#define GL_VARIANT_EXT 0x87C1 -#define GL_INVARIANT_EXT 0x87C2 -#define GL_LOCAL_CONSTANT_EXT 0x87C3 -#define GL_LOCAL_EXT 0x87C4 -#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 -#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 -#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 -#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 -#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE -#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF -#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 -#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 -#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 -#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 -#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 -#define GL_X_EXT 0x87D5 -#define GL_Y_EXT 0x87D6 -#define GL_Z_EXT 0x87D7 -#define GL_W_EXT 0x87D8 -#define GL_NEGATIVE_X_EXT 0x87D9 -#define GL_NEGATIVE_Y_EXT 0x87DA -#define GL_NEGATIVE_Z_EXT 0x87DB -#define GL_NEGATIVE_W_EXT 0x87DC -#define GL_ZERO_EXT 0x87DD -#define GL_ONE_EXT 0x87DE -#define GL_NEGATIVE_ONE_EXT 0x87DF -#define GL_NORMALIZED_RANGE_EXT 0x87E0 -#define GL_FULL_RANGE_EXT 0x87E1 -#define GL_CURRENT_VERTEX_EXT 0x87E2 -#define GL_MVP_MATRIX_EXT 0x87E3 -#define GL_VARIANT_VALUE_EXT 0x87E4 -#define GL_VARIANT_DATATYPE_EXT 0x87E5 -#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 -#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 -#define GL_VARIANT_ARRAY_EXT 0x87E8 -#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 -#define GL_INVARIANT_VALUE_EXT 0x87EA -#define GL_INVARIANT_DATATYPE_EXT 0x87EB -#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC -#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED -#endif - -#ifndef GL_ATI_vertex_streams -#define GL_MAX_VERTEX_STREAMS_ATI 0x876B -#define GL_VERTEX_STREAM0_ATI 0x876C -#define GL_VERTEX_STREAM1_ATI 0x876D -#define GL_VERTEX_STREAM2_ATI 0x876E -#define GL_VERTEX_STREAM3_ATI 0x876F -#define GL_VERTEX_STREAM4_ATI 0x8770 -#define GL_VERTEX_STREAM5_ATI 0x8771 -#define GL_VERTEX_STREAM6_ATI 0x8772 -#define GL_VERTEX_STREAM7_ATI 0x8773 -#define GL_VERTEX_SOURCE_ATI 0x8774 -#endif - -#ifndef GL_ATI_element_array -#define GL_ELEMENT_ARRAY_ATI 0x8768 -#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 -#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A -#endif - -#ifndef GL_SUN_mesh_array -#define GL_QUAD_MESH_SUN 0x8614 -#define GL_TRIANGLE_MESH_SUN 0x8615 -#endif - -#ifndef GL_SUN_slice_accum -#define GL_SLICE_ACCUM_SUN 0x85CC -#endif - -#ifndef GL_NV_multisample_filter_hint -#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 -#endif - -#ifndef GL_NV_depth_clamp -#define GL_DEPTH_CLAMP_NV 0x864F -#endif - -#ifndef GL_NV_occlusion_query -#define GL_PIXEL_COUNTER_BITS_NV 0x8864 -#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 -#define GL_PIXEL_COUNT_NV 0x8866 -#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 -#endif - -#ifndef GL_NV_point_sprite -#define GL_POINT_SPRITE_NV 0x8861 -#define GL_COORD_REPLACE_NV 0x8862 -#define GL_POINT_SPRITE_R_MODE_NV 0x8863 -#endif - -#ifndef GL_NV_texture_shader3 -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 -#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 -#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 -#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 -#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 -#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A -#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B -#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C -#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D -#define GL_HILO8_NV 0x885E -#define GL_SIGNED_HILO8_NV 0x885F -#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 -#endif - -#ifndef GL_NV_vertex_program1_1 -#endif - -#ifndef GL_EXT_shadow_funcs -#endif - -#ifndef GL_EXT_stencil_two_side -#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 -#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 -#endif - -#ifndef GL_ATI_text_fragment_shader -#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 -#endif - -#ifndef GL_APPLE_client_storage -#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 -#endif - -#ifndef GL_APPLE_element_array -#define GL_ELEMENT_ARRAY_APPLE 0x8768 -#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8769 -#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x876A -#endif - -#ifndef GL_APPLE_fence -#define GL_DRAW_PIXELS_APPLE 0x8A0A -#define GL_FENCE_APPLE 0x8A0B -#endif - -#ifndef GL_APPLE_vertex_array_object -#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 -#endif - -#ifndef GL_APPLE_vertex_array_range -#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E -#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F -#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 -#define GL_STORAGE_CACHED_APPLE 0x85BE -#define GL_STORAGE_SHARED_APPLE 0x85BF -#endif - -#ifndef GL_APPLE_ycbcr_422 -#define GL_YCBCR_422_APPLE 0x85B9 -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#endif - -#ifndef GL_S3_s3tc -#define GL_RGB_S3TC 0x83A0 -#define GL_RGB4_S3TC 0x83A1 -#define GL_RGBA_S3TC 0x83A2 -#define GL_RGBA4_S3TC 0x83A3 -#endif - -#ifndef GL_ATI_draw_buffers -#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 -#define GL_DRAW_BUFFER0_ATI 0x8825 -#define GL_DRAW_BUFFER1_ATI 0x8826 -#define GL_DRAW_BUFFER2_ATI 0x8827 -#define GL_DRAW_BUFFER3_ATI 0x8828 -#define GL_DRAW_BUFFER4_ATI 0x8829 -#define GL_DRAW_BUFFER5_ATI 0x882A -#define GL_DRAW_BUFFER6_ATI 0x882B -#define GL_DRAW_BUFFER7_ATI 0x882C -#define GL_DRAW_BUFFER8_ATI 0x882D -#define GL_DRAW_BUFFER9_ATI 0x882E -#define GL_DRAW_BUFFER10_ATI 0x882F -#define GL_DRAW_BUFFER11_ATI 0x8830 -#define GL_DRAW_BUFFER12_ATI 0x8831 -#define GL_DRAW_BUFFER13_ATI 0x8832 -#define GL_DRAW_BUFFER14_ATI 0x8833 -#define GL_DRAW_BUFFER15_ATI 0x8834 -#endif - -#ifndef GL_ATI_pixel_format_float -#define GL_TYPE_RGBA_FLOAT_ATI 0x8820 -#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 -#endif - -#ifndef GL_ATI_texture_env_combine3 -#define GL_MODULATE_ADD_ATI 0x8744 -#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 -#define GL_MODULATE_SUBTRACT_ATI 0x8746 -#endif - -#ifndef GL_ATI_texture_float -#define GL_RGBA_FLOAT32_ATI 0x8814 -#define GL_RGB_FLOAT32_ATI 0x8815 -#define GL_ALPHA_FLOAT32_ATI 0x8816 -#define GL_INTENSITY_FLOAT32_ATI 0x8817 -#define GL_LUMINANCE_FLOAT32_ATI 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 -#define GL_RGBA_FLOAT16_ATI 0x881A -#define GL_RGB_FLOAT16_ATI 0x881B -#define GL_ALPHA_FLOAT16_ATI 0x881C -#define GL_INTENSITY_FLOAT16_ATI 0x881D -#define GL_LUMINANCE_FLOAT16_ATI 0x881E -#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F -#endif - -#ifndef GL_NV_float_buffer -#define GL_FLOAT_R_NV 0x8880 -#define GL_FLOAT_RG_NV 0x8881 -#define GL_FLOAT_RGB_NV 0x8882 -#define GL_FLOAT_RGBA_NV 0x8883 -#define GL_FLOAT_R16_NV 0x8884 -#define GL_FLOAT_R32_NV 0x8885 -#define GL_FLOAT_RG16_NV 0x8886 -#define GL_FLOAT_RG32_NV 0x8887 -#define GL_FLOAT_RGB16_NV 0x8888 -#define GL_FLOAT_RGB32_NV 0x8889 -#define GL_FLOAT_RGBA16_NV 0x888A -#define GL_FLOAT_RGBA32_NV 0x888B -#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C -#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D -#define GL_FLOAT_RGBA_MODE_NV 0x888E -#endif - -#ifndef GL_NV_fragment_program -#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 -#define GL_FRAGMENT_PROGRAM_NV 0x8870 -#define GL_MAX_TEXTURE_COORDS_NV 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 -#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 -#define GL_PROGRAM_ERROR_STRING_NV 0x8874 -#endif - -#ifndef GL_NV_half_float -#define GL_HALF_FLOAT_NV 0x140B -#endif - -#ifndef GL_NV_pixel_data_range -#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 -#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 -#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A -#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B -#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C -#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D -#endif - -#ifndef GL_NV_primitive_restart -#define GL_PRIMITIVE_RESTART_NV 0x8558 -#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 -#endif - -#ifndef GL_NV_texture_expand_normal -#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F -#endif - -#ifndef GL_NV_vertex_program2 -#endif - -#ifndef GL_ATI_map_object_buffer -#endif - -#ifndef GL_ATI_separate_stencil -#define GL_STENCIL_BACK_FUNC_ATI 0x8800 -#define GL_STENCIL_BACK_FAIL_ATI 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 -#endif - -#ifndef GL_ATI_vertex_attrib_array_object -#endif - -#ifndef GL_OES_read_format -#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B -#endif - -#ifndef GL_EXT_depth_bounds_test -#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 -#define GL_DEPTH_BOUNDS_EXT 0x8891 -#endif - -#ifndef GL_EXT_texture_mirror_clamp -#define GL_MIRROR_CLAMP_EXT 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 -#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 -#endif - -#ifndef GL_EXT_blend_equation_separate -#define GL_BLEND_EQUATION_RGB_EXT GL_BLEND_EQUATION -#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D -#endif - -#ifndef GL_MESA_pack_invert -#define GL_PACK_INVERT_MESA 0x8758 -#endif - -#ifndef GL_MESA_ycbcr_texture -#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB -#define GL_YCBCR_MESA 0x8757 -#endif - -#ifndef GL_EXT_pixel_buffer_object -#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF -#endif - -#ifndef GL_NV_fragment_program_option -#endif - -#ifndef GL_NV_fragment_program2 -#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 -#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 -#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 -#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 -#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 -#endif - -#ifndef GL_NV_vertex_program2_option -/* reuse GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ -/* reuse GL_MAX_PROGRAM_CALL_DEPTH_NV */ -#endif - -#ifndef GL_NV_vertex_program3 -/* reuse GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */ -#endif - -#ifndef GL_EXT_framebuffer_object -#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 -#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 -#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 -#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 -#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 -#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 -#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 -#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 -#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 -#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 -#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 -#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA -#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB -#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC -#define GL_COLOR_ATTACHMENT13_EXT 0x8CED -#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE -#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF -#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 -#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 -#define GL_FRAMEBUFFER_EXT 0x8D40 -#define GL_RENDERBUFFER_EXT 0x8D41 -#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 -#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 -#define GL_STENCIL_INDEX1_EXT 0x8D46 -#define GL_STENCIL_INDEX4_EXT 0x8D47 -#define GL_STENCIL_INDEX8_EXT 0x8D48 -#define GL_STENCIL_INDEX16_EXT 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 -#endif - -#ifndef GL_GREMEDY_string_marker -#endif - -#ifndef GL_EXT_packed_depth_stencil -#define GL_DEPTH_STENCIL_EXT 0x84F9 -#define GL_UNSIGNED_INT_24_8_EXT 0x84FA -#define GL_DEPTH24_STENCIL8_EXT 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 -#endif - -#ifndef GL_EXT_stencil_clear_tag -#define GL_STENCIL_TAG_BITS_EXT 0x88F2 -#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 -#endif - -#ifndef GL_EXT_texture_sRGB -#define GL_SRGB_EXT 0x8C40 -#define GL_SRGB8_EXT 0x8C41 -#define GL_SRGB_ALPHA_EXT 0x8C42 -#define GL_SRGB8_ALPHA8_EXT 0x8C43 -#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 -#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 -#define GL_SLUMINANCE_EXT 0x8C46 -#define GL_SLUMINANCE8_EXT 0x8C47 -#define GL_COMPRESSED_SRGB_EXT 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 -#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B -#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F -#endif - -#ifndef GL_EXT_framebuffer_blit -#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_FRAMEBUFFER_BINDING_EXT -#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA -#endif - -#ifndef GL_EXT_framebuffer_multisample -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#define GL_MAX_SAMPLES_EXT 0x8D57 -#endif - -#ifndef GL_MESAX_texture_stack -#define GL_TEXTURE_1D_STACK_MESAX 0x8759 -#define GL_TEXTURE_2D_STACK_MESAX 0x875A -#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B -#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C -#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D -#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E -#endif - -#ifndef GL_EXT_timer_query -#define GL_TIME_ELAPSED_EXT 0x88BF -#endif - -#ifndef GL_EXT_gpu_program_parameters -#endif - -#ifndef GL_APPLE_flush_buffer_range -#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 -#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 -#endif - -#ifndef GL_NV_gpu_program4 -#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 -#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 -#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 -#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 -#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 -#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 -#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 -#endif - -#ifndef GL_NV_geometry_program4 -#define GL_LINES_ADJACENCY_EXT 0x000A -#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B -#define GL_TRIANGLES_ADJACENCY_EXT 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D -#define GL_GEOMETRY_PROGRAM_NV 0x8C26 -#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 -#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 -#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 -#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 -#endif - -#ifndef GL_EXT_geometry_shader4 -#define GL_GEOMETRY_SHADER_EXT 0x8DD9 -/* reuse GL_GEOMETRY_VERTICES_OUT_EXT */ -/* reuse GL_GEOMETRY_INPUT_TYPE_EXT */ -/* reuse GL_GEOMETRY_OUTPUT_TYPE_EXT */ -/* reuse GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT */ -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE -#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 -/* reuse GL_LINES_ADJACENCY_EXT */ -/* reuse GL_LINE_STRIP_ADJACENCY_EXT */ -/* reuse GL_TRIANGLES_ADJACENCY_EXT */ -/* reuse GL_TRIANGLE_STRIP_ADJACENCY_EXT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */ -/* reuse GL_PROGRAM_POINT_SIZE_EXT */ -#endif - -#ifndef GL_NV_vertex_program4 -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD -#endif - -#ifndef GL_EXT_gpu_shader4 -#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 -#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 -#define GL_SAMPLER_BUFFER_EXT 0x8DC2 -#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 -#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 -#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 -#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 -#define GL_INT_SAMPLER_1D_EXT 0x8DC9 -#define GL_INT_SAMPLER_2D_EXT 0x8DCA -#define GL_INT_SAMPLER_3D_EXT 0x8DCB -#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC -#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD -#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF -#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 -#endif - -#ifndef GL_EXT_draw_instanced -#endif - -#ifndef GL_EXT_packed_float -#define GL_R11F_G11F_B10F_EXT 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B -#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C -#endif - -#ifndef GL_EXT_texture_array -#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 -#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D -#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF -#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */ -#endif - -#ifndef GL_EXT_texture_buffer_object -#define GL_TEXTURE_BUFFER_EXT 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E -#endif - -#ifndef GL_EXT_texture_compression_latc -#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 -#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 -#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 -#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 -#endif - -#ifndef GL_EXT_texture_compression_rgtc -#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC -#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD -#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE -#endif - -#ifndef GL_EXT_texture_shared_exponent -#define GL_RGB9_E5_EXT 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E -#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F -#endif - -#ifndef GL_NV_depth_buffer_float -#define GL_DEPTH_COMPONENT32F_NV 0x8DAB -#define GL_DEPTH32F_STENCIL8_NV 0x8DAC -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD -#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF -#endif - -#ifndef GL_NV_fragment_program4 -#endif - -#ifndef GL_NV_framebuffer_multisample_coverage -#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB -#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 -#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 -#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 -#endif - -#ifndef GL_EXT_framebuffer_sRGB -#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 -#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA -#endif - -#ifndef GL_NV_geometry_shader4 -#endif - -#ifndef GL_NV_parameter_buffer_object -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 -#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 -#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 -#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 -#endif - -#ifndef GL_EXT_draw_buffers2 -#endif - -#ifndef GL_NV_transform_feedback -#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 -#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 -#define GL_TEXTURE_COORD_NV 0x8C79 -#define GL_CLIP_DISTANCE_NV 0x8C7A -#define GL_VERTEX_ID_NV 0x8C7B -#define GL_PRIMITIVE_ID_NV 0x8C7C -#define GL_GENERIC_ATTRIB_NV 0x8C7D -#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 -#define GL_ACTIVE_VARYINGS_NV 0x8C81 -#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 -#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 -#define GL_PRIMITIVES_GENERATED_NV 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 -#define GL_RASTERIZER_DISCARD_NV 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_ATTRIBS_NV 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B -#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C -#define GL_SEPARATE_ATTRIBS_NV 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F -#endif - -#ifndef GL_EXT_bindable_uniform -#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 -#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 -#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 -#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED -#define GL_UNIFORM_BUFFER_EXT 0x8DEE -#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF -#endif - -#ifndef GL_EXT_texture_integer -#define GL_RGBA32UI_EXT 0x8D70 -#define GL_RGB32UI_EXT 0x8D71 -#define GL_ALPHA32UI_EXT 0x8D72 -#define GL_INTENSITY32UI_EXT 0x8D73 -#define GL_LUMINANCE32UI_EXT 0x8D74 -#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 -#define GL_RGBA16UI_EXT 0x8D76 -#define GL_RGB16UI_EXT 0x8D77 -#define GL_ALPHA16UI_EXT 0x8D78 -#define GL_INTENSITY16UI_EXT 0x8D79 -#define GL_LUMINANCE16UI_EXT 0x8D7A -#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B -#define GL_RGBA8UI_EXT 0x8D7C -#define GL_RGB8UI_EXT 0x8D7D -#define GL_ALPHA8UI_EXT 0x8D7E -#define GL_INTENSITY8UI_EXT 0x8D7F -#define GL_LUMINANCE8UI_EXT 0x8D80 -#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 -#define GL_RGBA32I_EXT 0x8D82 -#define GL_RGB32I_EXT 0x8D83 -#define GL_ALPHA32I_EXT 0x8D84 -#define GL_INTENSITY32I_EXT 0x8D85 -#define GL_LUMINANCE32I_EXT 0x8D86 -#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 -#define GL_RGBA16I_EXT 0x8D88 -#define GL_RGB16I_EXT 0x8D89 -#define GL_ALPHA16I_EXT 0x8D8A -#define GL_INTENSITY16I_EXT 0x8D8B -#define GL_LUMINANCE16I_EXT 0x8D8C -#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D -#define GL_RGBA8I_EXT 0x8D8E -#define GL_RGB8I_EXT 0x8D8F -#define GL_ALPHA8I_EXT 0x8D90 -#define GL_INTENSITY8I_EXT 0x8D91 -#define GL_LUMINANCE8I_EXT 0x8D92 -#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 -#define GL_RED_INTEGER_EXT 0x8D94 -#define GL_GREEN_INTEGER_EXT 0x8D95 -#define GL_BLUE_INTEGER_EXT 0x8D96 -#define GL_ALPHA_INTEGER_EXT 0x8D97 -#define GL_RGB_INTEGER_EXT 0x8D98 -#define GL_RGBA_INTEGER_EXT 0x8D99 -#define GL_BGR_INTEGER_EXT 0x8D9A -#define GL_BGRA_INTEGER_EXT 0x8D9B -#define GL_LUMINANCE_INTEGER_EXT 0x8D9C -#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D -#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E -#endif - -#ifndef GL_GREMEDY_frame_terminator -#endif - - -/*************************************************************/ - -#include -#ifndef GL_VERSION_2_0 -/* GL type for program/shader text */ -typedef char GLchar; /* native character */ -#endif - -#ifndef GL_VERSION_1_5 -/* GL types for handling large vertex buffer objects */ -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -#endif - -#ifndef GL_ARB_vertex_buffer_object -/* GL types for handling large vertex buffer objects */ -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -#endif - -#ifndef GL_ARB_shader_objects -/* GL types for handling shader object handles and program/shader text */ -typedef char GLcharARB; /* native character */ -typedef unsigned int GLhandleARB; /* shader object handle */ -#endif - -/* GL types for "half" precision (s10e5) float data in host memory */ -#ifndef GL_ARB_half_float_pixel -typedef unsigned short GLhalfARB; -#endif - -#ifndef GL_NV_half_float -typedef unsigned short GLhalfNV; -#endif - -#ifndef GLEXT_64_TYPES_DEFINED -/* This code block is duplicated in glext.h, so must be protected */ -#define GLEXT_64_TYPES_DEFINED -/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ -/* (as used in the GL_EXT_timer_query extension). */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include -#elif defined(__sun__) -#include -#if defined(__STDC__) -#if defined(__arch64__) -typedef long int int64_t; -typedef unsigned long int uint64_t; -#else -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#endif /* __arch64__ */ -#endif /* __STDC__ */ -#elif defined( __VMS ) -#include -#elif defined(__SCO__) || defined(__USLC__) -#include -#elif defined(__UNIXOS2__) || defined(__SOL64__) -typedef long int int32_t; -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#elif defined(_WIN32) && defined(__GNUC__) -#include -#elif defined(_WIN32) -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -#else -#include /* Fallback option */ -#endif -#endif - -#ifndef GL_EXT_timer_query -typedef int64_t GLint64EXT; -typedef uint64_t GLuint64EXT; -#endif - -#ifndef GL_VERSION_1_2 -#define GL_VERSION_1_2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColor (GLclampf, GLclampf, GLclampf, GLclampf); -GLAPI void APIENTRY glBlendEquation (GLenum); -GLAPI void APIENTRY glDrawRangeElements (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *); -GLAPI void APIENTRY glColorTable (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glColorTableParameterfv (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glColorTableParameteriv (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glCopyColorTable (GLenum, GLenum, GLint, GLint, GLsizei); -GLAPI void APIENTRY glGetColorTable (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetColorTableParameterfv (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetColorTableParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glColorSubTable (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glCopyColorSubTable (GLenum, GLsizei, GLint, GLint, GLsizei); -GLAPI void APIENTRY glConvolutionFilter1D (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glConvolutionFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glConvolutionParameterf (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glConvolutionParameterfv (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glConvolutionParameteri (GLenum, GLenum, GLint); -GLAPI void APIENTRY glConvolutionParameteriv (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum, GLenum, GLint, GLint, GLsizei); -GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glGetConvolutionFilter (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetSeparableFilter (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *); -GLAPI void APIENTRY glSeparableFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *); -GLAPI void APIENTRY glGetHistogram (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetHistogramParameterfv (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetHistogramParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetMinmax (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glHistogram (GLenum, GLsizei, GLenum, GLboolean); -GLAPI void APIENTRY glMinmax (GLenum, GLenum, GLboolean); -GLAPI void APIENTRY glResetHistogram (GLenum); -GLAPI void APIENTRY glResetMinmax (GLenum); -GLAPI void APIENTRY glTexImage3D (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glCopyTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); -typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif - -#ifndef GL_VERSION_1_3 -#define GL_VERSION_1_3 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTexture (GLenum); -GLAPI void APIENTRY glClientActiveTexture (GLenum); -GLAPI void APIENTRY glMultiTexCoord1d (GLenum, GLdouble); -GLAPI void APIENTRY glMultiTexCoord1dv (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord1f (GLenum, GLfloat); -GLAPI void APIENTRY glMultiTexCoord1fv (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord1i (GLenum, GLint); -GLAPI void APIENTRY glMultiTexCoord1iv (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord1s (GLenum, GLshort); -GLAPI void APIENTRY glMultiTexCoord1sv (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord2d (GLenum, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord2dv (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord2f (GLenum, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord2fv (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord2i (GLenum, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord2iv (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord2s (GLenum, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord2sv (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord3d (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord3dv (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord3f (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord3fv (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord3i (GLenum, GLint, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord3iv (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord3s (GLenum, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord3sv (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord4d (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord4dv (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord4f (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord4fv (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord4i (GLenum, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord4iv (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord4s (GLenum, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord4sv (GLenum, const GLshort *); -GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *); -GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *); -GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *); -GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *); -GLAPI void APIENTRY glSampleCoverage (GLclampf, GLboolean); -GLAPI void APIENTRY glCompressedTexImage3D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexImage2D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexImage1D (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glGetCompressedTexImage (GLenum, GLint, GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); -#endif - -#ifndef GL_VERSION_1_4 -#define GL_VERSION_1_4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparate (GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glFogCoordf (GLfloat); -GLAPI void APIENTRY glFogCoordfv (const GLfloat *); -GLAPI void APIENTRY glFogCoordd (GLdouble); -GLAPI void APIENTRY glFogCoorddv (const GLdouble *); -GLAPI void APIENTRY glFogCoordPointer (GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glMultiDrawArrays (GLenum, GLint *, GLsizei *, GLsizei); -GLAPI void APIENTRY glMultiDrawElements (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); -GLAPI void APIENTRY glPointParameterf (GLenum, GLfloat); -GLAPI void APIENTRY glPointParameterfv (GLenum, const GLfloat *); -GLAPI void APIENTRY glPointParameteri (GLenum, GLint); -GLAPI void APIENTRY glPointParameteriv (GLenum, const GLint *); -GLAPI void APIENTRY glSecondaryColor3b (GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *); -GLAPI void APIENTRY glSecondaryColor3d (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *); -GLAPI void APIENTRY glSecondaryColor3f (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *); -GLAPI void APIENTRY glSecondaryColor3i (GLint, GLint, GLint); -GLAPI void APIENTRY glSecondaryColor3iv (const GLint *); -GLAPI void APIENTRY glSecondaryColor3s (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *); -GLAPI void APIENTRY glSecondaryColor3ub (GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *); -GLAPI void APIENTRY glSecondaryColor3ui (GLuint, GLuint, GLuint); -GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *); -GLAPI void APIENTRY glSecondaryColor3us (GLushort, GLushort, GLushort); -GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *); -GLAPI void APIENTRY glSecondaryColorPointer (GLint, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glWindowPos2d (GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos2dv (const GLdouble *); -GLAPI void APIENTRY glWindowPos2f (GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos2fv (const GLfloat *); -GLAPI void APIENTRY glWindowPos2i (GLint, GLint); -GLAPI void APIENTRY glWindowPos2iv (const GLint *); -GLAPI void APIENTRY glWindowPos2s (GLshort, GLshort); -GLAPI void APIENTRY glWindowPos2sv (const GLshort *); -GLAPI void APIENTRY glWindowPos3d (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos3dv (const GLdouble *); -GLAPI void APIENTRY glWindowPos3f (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos3fv (const GLfloat *); -GLAPI void APIENTRY glWindowPos3i (GLint, GLint, GLint); -GLAPI void APIENTRY glWindowPos3iv (const GLint *); -GLAPI void APIENTRY glWindowPos3s (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glWindowPos3sv (const GLshort *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); -#endif - -#ifndef GL_VERSION_1_5 -#define GL_VERSION_1_5 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueries (GLsizei, GLuint *); -GLAPI void APIENTRY glDeleteQueries (GLsizei, const GLuint *); -GLAPI GLboolean APIENTRY glIsQuery (GLuint); -GLAPI void APIENTRY glBeginQuery (GLenum, GLuint); -GLAPI void APIENTRY glEndQuery (GLenum); -GLAPI void APIENTRY glGetQueryiv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetQueryObjectiv (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetQueryObjectuiv (GLuint, GLenum, GLuint *); -GLAPI void APIENTRY glBindBuffer (GLenum, GLuint); -GLAPI void APIENTRY glDeleteBuffers (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenBuffers (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsBuffer (GLuint); -GLAPI void APIENTRY glBufferData (GLenum, GLsizeiptr, const GLvoid *, GLenum); -GLAPI void APIENTRY glBufferSubData (GLenum, GLintptr, GLsizeiptr, const GLvoid *); -GLAPI void APIENTRY glGetBufferSubData (GLenum, GLintptr, GLsizeiptr, GLvoid *); -GLAPI GLvoid* APIENTRY glMapBuffer (GLenum, GLenum); -GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum); -GLAPI void APIENTRY glGetBufferParameteriv (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetBufferPointerv (GLenum, GLenum, GLvoid* *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); -typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params); -#endif - -#ifndef GL_VERSION_2_0 -#define GL_VERSION_2_0 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparate (GLenum, GLenum); -GLAPI void APIENTRY glDrawBuffers (GLsizei, const GLenum *); -GLAPI void APIENTRY glStencilOpSeparate (GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glStencilFuncSeparate (GLenum, GLenum, GLint, GLuint); -GLAPI void APIENTRY glStencilMaskSeparate (GLenum, GLuint); -GLAPI void APIENTRY glAttachShader (GLuint, GLuint); -GLAPI void APIENTRY glBindAttribLocation (GLuint, GLuint, const GLchar *); -GLAPI void APIENTRY glCompileShader (GLuint); -GLAPI GLuint APIENTRY glCreateProgram (void); -GLAPI GLuint APIENTRY glCreateShader (GLenum); -GLAPI void APIENTRY glDeleteProgram (GLuint); -GLAPI void APIENTRY glDeleteShader (GLuint); -GLAPI void APIENTRY glDetachShader (GLuint, GLuint); -GLAPI void APIENTRY glDisableVertexAttribArray (GLuint); -GLAPI void APIENTRY glEnableVertexAttribArray (GLuint); -GLAPI void APIENTRY glGetActiveAttrib (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *); -GLAPI void APIENTRY glGetActiveUniform (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *); -GLAPI void APIENTRY glGetAttachedShaders (GLuint, GLsizei, GLsizei *, GLuint *); -GLAPI GLint APIENTRY glGetAttribLocation (GLuint, const GLchar *); -GLAPI void APIENTRY glGetProgramiv (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetProgramInfoLog (GLuint, GLsizei, GLsizei *, GLchar *); -GLAPI void APIENTRY glGetShaderiv (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetShaderInfoLog (GLuint, GLsizei, GLsizei *, GLchar *); -GLAPI void APIENTRY glGetShaderSource (GLuint, GLsizei, GLsizei *, GLchar *); -GLAPI GLint APIENTRY glGetUniformLocation (GLuint, const GLchar *); -GLAPI void APIENTRY glGetUniformfv (GLuint, GLint, GLfloat *); -GLAPI void APIENTRY glGetUniformiv (GLuint, GLint, GLint *); -GLAPI void APIENTRY glGetVertexAttribdv (GLuint, GLenum, GLdouble *); -GLAPI void APIENTRY glGetVertexAttribfv (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVertexAttribiv (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint, GLenum, GLvoid* *); -GLAPI GLboolean APIENTRY glIsProgram (GLuint); -GLAPI GLboolean APIENTRY glIsShader (GLuint); -GLAPI void APIENTRY glLinkProgram (GLuint); -GLAPI void APIENTRY glShaderSource (GLuint, GLsizei, const GLchar* *, const GLint *); -GLAPI void APIENTRY glUseProgram (GLuint); -GLAPI void APIENTRY glUniform1f (GLint, GLfloat); -GLAPI void APIENTRY glUniform2f (GLint, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform3f (GLint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform4f (GLint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform1i (GLint, GLint); -GLAPI void APIENTRY glUniform2i (GLint, GLint, GLint); -GLAPI void APIENTRY glUniform3i (GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glUniform4i (GLint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glUniform1fv (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform2fv (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform3fv (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform4fv (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform1iv (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform2iv (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform3iv (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform4iv (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniformMatrix2fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix3fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix4fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glValidateProgram (GLuint); -GLAPI void APIENTRY glVertexAttrib1d (GLuint, GLdouble); -GLAPI void APIENTRY glVertexAttrib1dv (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib1f (GLuint, GLfloat); -GLAPI void APIENTRY glVertexAttrib1fv (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib1s (GLuint, GLshort); -GLAPI void APIENTRY glVertexAttrib1sv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib2d (GLuint, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib2dv (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib2f (GLuint, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib2fv (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib2s (GLuint, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib2sv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib3d (GLuint, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib3dv (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib3f (GLuint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib3fv (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib3s (GLuint, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib3sv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttrib4Niv (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4Nub (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttrib4bv (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttrib4d (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib4dv (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib4f (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib4fv (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib4iv (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttrib4s (GLuint, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib4sv (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4ubv (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttrib4uiv (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttrib4usv (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttribPointer (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); -typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); -typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); -typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); -typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); -typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); -typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_VERSION_2_1 -#define GL_VERSION_2_1 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformMatrix2x3fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix3x2fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix2x4fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix4x2fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix3x4fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix4x3fv (GLint, GLsizei, GLboolean, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#endif - -#ifndef GL_ARB_multitexture -#define GL_ARB_multitexture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTextureARB (GLenum); -GLAPI void APIENTRY glClientActiveTextureARB (GLenum); -GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum, GLdouble); -GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum, GLfloat); -GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum, GLint); -GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum, GLshort); -GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum, GLint, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum, const GLshort *); -GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum, const GLdouble *); -GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum, const GLfloat *); -GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum, const GLint *); -GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum, const GLshort *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); -#endif - -#ifndef GL_ARB_transpose_matrix -#define GL_ARB_transpose_matrix 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *); -GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *); -GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *); -GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -#endif - -#ifndef GL_ARB_multisample -#define GL_ARB_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleCoverageARB (GLclampf, GLboolean); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert); -#endif - -#ifndef GL_ARB_texture_env_add -#define GL_ARB_texture_env_add 1 -#endif - -#ifndef GL_ARB_texture_cube_map -#define GL_ARB_texture_cube_map 1 -#endif - -#ifndef GL_ARB_texture_compression -#define GL_ARB_texture_compression 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum, GLint, GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, GLvoid *img); -#endif - -#ifndef GL_ARB_texture_border_clamp -#define GL_ARB_texture_border_clamp 1 -#endif - -#ifndef GL_ARB_point_parameters -#define GL_ARB_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfARB (GLenum, GLfloat); -GLAPI void APIENTRY glPointParameterfvARB (GLenum, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_ARB_vertex_blend -#define GL_ARB_vertex_blend 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWeightbvARB (GLint, const GLbyte *); -GLAPI void APIENTRY glWeightsvARB (GLint, const GLshort *); -GLAPI void APIENTRY glWeightivARB (GLint, const GLint *); -GLAPI void APIENTRY glWeightfvARB (GLint, const GLfloat *); -GLAPI void APIENTRY glWeightdvARB (GLint, const GLdouble *); -GLAPI void APIENTRY glWeightubvARB (GLint, const GLubyte *); -GLAPI void APIENTRY glWeightusvARB (GLint, const GLushort *); -GLAPI void APIENTRY glWeightuivARB (GLint, const GLuint *); -GLAPI void APIENTRY glWeightPointerARB (GLint, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glVertexBlendARB (GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); -typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); -typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); -typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); -typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); -typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); -typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); -#endif - -#ifndef GL_ARB_matrix_palette -#define GL_ARB_matrix_palette 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint); -GLAPI void APIENTRY glMatrixIndexubvARB (GLint, const GLubyte *); -GLAPI void APIENTRY glMatrixIndexusvARB (GLint, const GLushort *); -GLAPI void APIENTRY glMatrixIndexuivARB (GLint, const GLuint *); -GLAPI void APIENTRY glMatrixIndexPointerARB (GLint, GLenum, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); -typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_ARB_texture_env_combine -#define GL_ARB_texture_env_combine 1 -#endif - -#ifndef GL_ARB_texture_env_crossbar -#define GL_ARB_texture_env_crossbar 1 -#endif - -#ifndef GL_ARB_texture_env_dot3 -#define GL_ARB_texture_env_dot3 1 -#endif - -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_ARB_texture_mirrored_repeat 1 -#endif - -#ifndef GL_ARB_depth_texture -#define GL_ARB_depth_texture 1 -#endif - -#ifndef GL_ARB_shadow -#define GL_ARB_shadow 1 -#endif - -#ifndef GL_ARB_shadow_ambient -#define GL_ARB_shadow_ambient 1 -#endif - -#ifndef GL_ARB_window_pos -#define GL_ARB_window_pos 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dARB (GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *); -GLAPI void APIENTRY glWindowPos2fARB (GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *); -GLAPI void APIENTRY glWindowPos2iARB (GLint, GLint); -GLAPI void APIENTRY glWindowPos2ivARB (const GLint *); -GLAPI void APIENTRY glWindowPos2sARB (GLshort, GLshort); -GLAPI void APIENTRY glWindowPos2svARB (const GLshort *); -GLAPI void APIENTRY glWindowPos3dARB (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *); -GLAPI void APIENTRY glWindowPos3fARB (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *); -GLAPI void APIENTRY glWindowPos3iARB (GLint, GLint, GLint); -GLAPI void APIENTRY glWindowPos3ivARB (const GLint *); -GLAPI void APIENTRY glWindowPos3sARB (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glWindowPos3svARB (const GLshort *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); -#endif - -#ifndef GL_ARB_vertex_program -#define GL_ARB_vertex_program 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttrib1dARB (GLuint, GLdouble); -GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib1fARB (GLuint, GLfloat); -GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib1sARB (GLuint, GLshort); -GLAPI void APIENTRY glVertexAttrib1svARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib2dARB (GLuint, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib2fARB (GLuint, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib2sARB (GLuint, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib2svARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib3dARB (GLuint, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib3fARB (GLuint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib3sARB (GLuint, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib3svARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttrib4dARB (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib4fARB (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttrib4sARB (GLuint, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib4svARB (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttribPointerARB (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *); -GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint); -GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint); -GLAPI void APIENTRY glProgramStringARB (GLenum, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glBindProgramARB (GLenum, GLuint); -GLAPI void APIENTRY glDeleteProgramsARB (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenProgramsARB (GLsizei, GLuint *); -GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum, GLuint, const GLdouble *); -GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum, GLuint, const GLfloat *); -GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum, GLuint, const GLdouble *); -GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum, GLuint, const GLfloat *); -GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum, GLuint, GLdouble *); -GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum, GLuint, GLfloat *); -GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum, GLuint, GLdouble *); -GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum, GLuint, GLfloat *); -GLAPI void APIENTRY glGetProgramivARB (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetProgramStringARB (GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint, GLenum, GLdouble *); -GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVertexAttribivARB (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint, GLenum, GLvoid* *); -GLAPI GLboolean APIENTRY glIsProgramARB (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string); -typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); -#endif - -#ifndef GL_ARB_fragment_program -#define GL_ARB_fragment_program 1 -/* All ARB_fragment_program entry points are shared with ARB_vertex_program. */ -#endif - -#ifndef GL_ARB_vertex_buffer_object -#define GL_ARB_vertex_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindBufferARB (GLenum, GLuint); -GLAPI void APIENTRY glDeleteBuffersARB (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenBuffersARB (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsBufferARB (GLuint); -GLAPI void APIENTRY glBufferDataARB (GLenum, GLsizeiptrARB, const GLvoid *, GLenum); -GLAPI void APIENTRY glBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, const GLvoid *); -GLAPI void APIENTRY glGetBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, GLvoid *); -GLAPI GLvoid* APIENTRY glMapBufferARB (GLenum, GLenum); -GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum); -GLAPI void APIENTRY glGetBufferParameterivARB (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetBufferPointervARB (GLenum, GLenum, GLvoid* *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); -typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* *params); -#endif - -#ifndef GL_ARB_occlusion_query -#define GL_ARB_occlusion_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueriesARB (GLsizei, GLuint *); -GLAPI void APIENTRY glDeleteQueriesARB (GLsizei, const GLuint *); -GLAPI GLboolean APIENTRY glIsQueryARB (GLuint); -GLAPI void APIENTRY glBeginQueryARB (GLenum, GLuint); -GLAPI void APIENTRY glEndQueryARB (GLenum); -GLAPI void APIENTRY glGetQueryivARB (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetQueryObjectivARB (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint, GLenum, GLuint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); -#endif - -#ifndef GL_ARB_shader_objects -#define GL_ARB_shader_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB); -GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum); -GLAPI void APIENTRY glDetachObjectARB (GLhandleARB, GLhandleARB); -GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum); -GLAPI void APIENTRY glShaderSourceARB (GLhandleARB, GLsizei, const GLcharARB* *, const GLint *); -GLAPI void APIENTRY glCompileShaderARB (GLhandleARB); -GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); -GLAPI void APIENTRY glAttachObjectARB (GLhandleARB, GLhandleARB); -GLAPI void APIENTRY glLinkProgramARB (GLhandleARB); -GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB); -GLAPI void APIENTRY glValidateProgramARB (GLhandleARB); -GLAPI void APIENTRY glUniform1fARB (GLint, GLfloat); -GLAPI void APIENTRY glUniform2fARB (GLint, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform3fARB (GLint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform4fARB (GLint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glUniform1iARB (GLint, GLint); -GLAPI void APIENTRY glUniform2iARB (GLint, GLint, GLint); -GLAPI void APIENTRY glUniform3iARB (GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glUniform4iARB (GLint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glUniform1fvARB (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform2fvARB (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform3fvARB (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform4fvARB (GLint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glUniform1ivARB (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform2ivARB (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform3ivARB (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniform4ivARB (GLint, GLsizei, const GLint *); -GLAPI void APIENTRY glUniformMatrix2fvARB (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix3fvARB (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix4fvARB (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB, GLenum, GLfloat *); -GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB, GLenum, GLint *); -GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB, GLsizei, GLsizei *, GLcharARB *); -GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB, GLsizei, GLsizei *, GLhandleARB *); -GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB, const GLcharARB *); -GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *); -GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB, GLint, GLfloat *); -GLAPI void APIENTRY glGetUniformivARB (GLhandleARB, GLint, GLint *); -GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB, GLsizei, GLsizei *, GLcharARB *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); -typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); -typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length); -typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); -typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); -typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); -typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); -#endif - -#ifndef GL_ARB_vertex_shader -#define GL_ARB_vertex_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB, GLuint, const GLcharARB *); -GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *); -GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB, const GLcharARB *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -#endif - -#ifndef GL_ARB_fragment_shader -#define GL_ARB_fragment_shader 1 -#endif - -#ifndef GL_ARB_shading_language_100 -#define GL_ARB_shading_language_100 1 -#endif - -#ifndef GL_ARB_texture_non_power_of_two -#define GL_ARB_texture_non_power_of_two 1 -#endif - -#ifndef GL_ARB_point_sprite -#define GL_ARB_point_sprite 1 -#endif - -#ifndef GL_ARB_fragment_program_shadow -#define GL_ARB_fragment_program_shadow 1 -#endif - -#ifndef GL_ARB_draw_buffers -#define GL_ARB_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersARB (GLsizei, const GLenum *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); -#endif - -#ifndef GL_ARB_texture_rectangle -#define GL_ARB_texture_rectangle 1 -#endif - -#ifndef GL_ARB_color_buffer_float -#define GL_ARB_color_buffer_float 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClampColorARB (GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); -#endif - -#ifndef GL_ARB_half_float_pixel -#define GL_ARB_half_float_pixel 1 -#endif - -#ifndef GL_ARB_texture_float -#define GL_ARB_texture_float 1 -#endif - -#ifndef GL_ARB_pixel_buffer_object -#define GL_ARB_pixel_buffer_object 1 -#endif - -#ifndef GL_EXT_abgr -#define GL_EXT_abgr 1 -#endif - -#ifndef GL_EXT_blend_color -#define GL_EXT_blend_color 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -#endif - -#ifndef GL_EXT_polygon_offset -#define GL_EXT_polygon_offset 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat, GLfloat); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); -#endif - -#ifndef GL_EXT_texture -#define GL_EXT_texture 1 -#endif - -#ifndef GL_EXT_texture3D -#define GL_EXT_texture3D 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage3DEXT (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -#endif - -#ifndef GL_SGIS_texture_filter4 -#define GL_SGIS_texture_filter4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum, GLenum, GLsizei, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); -typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); -#endif - -#ifndef GL_EXT_subtexture -#define GL_EXT_subtexture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexSubImage1DEXT (GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -#endif - -#ifndef GL_EXT_copy_texture -#define GL_EXT_copy_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint); -GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint); -GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei); -GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif - -#ifndef GL_EXT_histogram -#define GL_EXT_histogram 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetHistogramEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetMinmaxEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glHistogramEXT (GLenum, GLsizei, GLenum, GLboolean); -GLAPI void APIENTRY glMinmaxEXT (GLenum, GLenum, GLboolean); -GLAPI void APIENTRY glResetHistogramEXT (GLenum); -GLAPI void APIENTRY glResetMinmaxEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); -#endif - -#ifndef GL_EXT_convolution -#define GL_EXT_convolution 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum, GLenum, GLint); -GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum, GLenum, GLint, GLint, GLsizei); -GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *); -GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -#endif - -#ifndef GL_SGI_color_matrix -#define GL_SGI_color_matrix 1 -#endif - -#ifndef GL_SGI_color_table -#define GL_SGI_color_table 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableSGI (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glColorTableParameterivSGI (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glCopyColorTableSGI (GLenum, GLenum, GLint, GLint, GLsizei); -GLAPI void APIENTRY glGetColorTableSGI (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum, GLenum, GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); -#endif - -#ifndef GL_SGIX_pixel_texture -#define GL_SGIX_pixel_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenSGIX (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); -#endif - -#ifndef GL_SGIS_pixel_texture -#define GL_SGIS_pixel_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum, GLint); -GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum, const GLint *); -GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum, GLfloat); -GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum, const GLfloat *); -GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum, GLint *); -GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); -#endif - -#ifndef GL_SGIS_texture4D -#define GL_SGIS_texture4D 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage4DSGIS (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels); -#endif - -#ifndef GL_SGI_texture_color_table -#define GL_SGI_texture_color_table 1 -#endif - -#ifndef GL_EXT_cmyka -#define GL_EXT_cmyka 1 -#endif - -#ifndef GL_EXT_texture_object -#define GL_EXT_texture_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei, const GLuint *, GLboolean *); -GLAPI void APIENTRY glBindTextureEXT (GLenum, GLuint); -GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenTexturesEXT (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint); -GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei, const GLuint *, const GLclampf *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); -typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); -typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); -typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); -#endif - -#ifndef GL_SGIS_detail_texture -#define GL_SGIS_detail_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum, GLsizei, const GLfloat *); -GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#endif - -#ifndef GL_SGIS_sharpen_texture -#define GL_SGIS_sharpen_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum, GLsizei, const GLfloat *); -GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#endif - -#ifndef GL_EXT_packed_pixels -#define GL_EXT_packed_pixels 1 -#endif - -#ifndef GL_SGIS_texture_lod -#define GL_SGIS_texture_lod 1 -#endif - -#ifndef GL_SGIS_multisample -#define GL_SGIS_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskSGIS (GLclampf, GLboolean); -GLAPI void APIENTRY glSamplePatternSGIS (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); -#endif - -#ifndef GL_EXT_rescale_normal -#define GL_EXT_rescale_normal 1 -#endif - -#ifndef GL_EXT_vertex_array -#define GL_EXT_vertex_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glArrayElementEXT (GLint); -GLAPI void APIENTRY glColorPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); -GLAPI void APIENTRY glDrawArraysEXT (GLenum, GLint, GLsizei); -GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei, GLsizei, const GLboolean *); -GLAPI void APIENTRY glGetPointervEXT (GLenum, GLvoid* *); -GLAPI void APIENTRY glIndexPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *); -GLAPI void APIENTRY glNormalPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *); -GLAPI void APIENTRY glTexCoordPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); -GLAPI void APIENTRY glVertexPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); -typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); -typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params); -typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_misc_attribute -#define GL_EXT_misc_attribute 1 -#endif - -#ifndef GL_SGIS_generate_mipmap -#define GL_SGIS_generate_mipmap 1 -#endif - -#ifndef GL_SGIX_clipmap -#define GL_SGIX_clipmap 1 -#endif - -#ifndef GL_SGIX_shadow -#define GL_SGIX_shadow 1 -#endif - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_SGIS_texture_edge_clamp 1 -#endif - -#ifndef GL_SGIS_texture_border_clamp -#define GL_SGIS_texture_border_clamp 1 -#endif - -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_blend_subtract -#define GL_EXT_blend_subtract 1 -#endif - -#ifndef GL_EXT_blend_logic_op -#define GL_EXT_blend_logic_op 1 -#endif - -#ifndef GL_SGIX_interlace -#define GL_SGIX_interlace 1 -#endif - -#ifndef GL_SGIX_pixel_tiles -#define GL_SGIX_pixel_tiles 1 -#endif - -#ifndef GL_SGIX_texture_select -#define GL_SGIX_texture_select 1 -#endif - -#ifndef GL_SGIX_sprite -#define GL_SGIX_sprite 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum, GLfloat); -GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum, const GLfloat *); -GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum, GLint); -GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum, const GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); -#endif - -#ifndef GL_SGIX_texture_multi_buffer -#define GL_SGIX_texture_multi_buffer 1 -#endif - -#ifndef GL_EXT_point_parameters -#define GL_EXT_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfEXT (GLenum, GLfloat); -GLAPI void APIENTRY glPointParameterfvEXT (GLenum, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_SGIS_point_parameters -#define GL_SGIS_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfSGIS (GLenum, GLfloat); -GLAPI void APIENTRY glPointParameterfvSGIS (GLenum, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_SGIX_instruments -#define GL_SGIX_instruments 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); -GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei, GLint *); -GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *); -GLAPI void APIENTRY glReadInstrumentsSGIX (GLint); -GLAPI void APIENTRY glStartInstrumentsSGIX (void); -GLAPI void APIENTRY glStopInstrumentsSGIX (GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); -typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); -typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); -typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); -#endif - -#ifndef GL_SGIX_texture_scale_bias -#define GL_SGIX_texture_scale_bias 1 -#endif - -#ifndef GL_SGIX_framezoom -#define GL_SGIX_framezoom 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameZoomSGIX (GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); -#endif - -#ifndef GL_SGIX_tag_sample_buffer -#define GL_SGIX_tag_sample_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTagSampleBufferSGIX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); -#endif - -#ifndef GL_SGIX_polynomial_ffd -#define GL_SGIX_polynomial_ffd 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, const GLdouble *); -GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, const GLfloat *); -GLAPI void APIENTRY glDeformSGIX (GLbitfield); -GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); -typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); -#endif - -#ifndef GL_SGIX_reference_plane -#define GL_SGIX_reference_plane 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); -#endif - -#ifndef GL_SGIX_flush_raster -#define GL_SGIX_flush_raster 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushRasterSGIX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); -#endif - -#ifndef GL_SGIX_depth_texture -#define GL_SGIX_depth_texture 1 -#endif - -#ifndef GL_SGIS_fog_function -#define GL_SGIS_fog_function 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogFuncSGIS (GLsizei, const GLfloat *); -GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); -#endif - -#ifndef GL_SGIX_fog_offset -#define GL_SGIX_fog_offset 1 -#endif - -#ifndef GL_HP_image_transform -#define GL_HP_image_transform 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImageTransformParameteriHP (GLenum, GLenum, GLint); -GLAPI void APIENTRY glImageTransformParameterfHP (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glImageTransformParameterivHP (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum, GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_HP_convolution_border_modes -#define GL_HP_convolution_border_modes 1 -#endif - -#ifndef GL_SGIX_texture_add_env -#define GL_SGIX_texture_add_env 1 -#endif - -#ifndef GL_EXT_color_subtable -#define GL_EXT_color_subtable 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorSubTableEXT (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum, GLsizei, GLint, GLint, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -#endif - -#ifndef GL_PGI_vertex_hints -#define GL_PGI_vertex_hints 1 -#endif - -#ifndef GL_PGI_misc_hints -#define GL_PGI_misc_hints 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glHintPGI (GLenum, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); -#endif - -#ifndef GL_EXT_paletted_texture -#define GL_EXT_paletted_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -GLAPI void APIENTRY glGetColorTableEXT (GLenum, GLenum, GLenum, GLvoid *); -GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum, GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_EXT_clip_volume_hint -#define GL_EXT_clip_volume_hint 1 -#endif - -#ifndef GL_SGIX_list_priority -#define GL_SGIX_list_priority 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetListParameterivSGIX (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glListParameterfSGIX (GLuint, GLenum, GLfloat); -GLAPI void APIENTRY glListParameterfvSGIX (GLuint, GLenum, const GLfloat *); -GLAPI void APIENTRY glListParameteriSGIX (GLuint, GLenum, GLint); -GLAPI void APIENTRY glListParameterivSGIX (GLuint, GLenum, const GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); -#endif - -#ifndef GL_SGIX_ir_instrument1 -#define GL_SGIX_ir_instrument1 1 -#endif - -#ifndef GL_SGIX_calligraphic_fragment -#define GL_SGIX_calligraphic_fragment 1 -#endif - -#ifndef GL_SGIX_texture_lod_bias -#define GL_SGIX_texture_lod_bias 1 -#endif - -#ifndef GL_SGIX_shadow_ambient -#define GL_SGIX_shadow_ambient 1 -#endif - -#ifndef GL_EXT_index_texture -#define GL_EXT_index_texture 1 -#endif - -#ifndef GL_EXT_index_material -#define GL_EXT_index_material 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexMaterialEXT (GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); -#endif - -#ifndef GL_EXT_index_func -#define GL_EXT_index_func 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexFuncEXT (GLenum, GLclampf); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); -#endif - -#ifndef GL_EXT_index_array_formats -#define GL_EXT_index_array_formats 1 -#endif - -#ifndef GL_EXT_compiled_vertex_array -#define GL_EXT_compiled_vertex_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLockArraysEXT (GLint, GLsizei); -GLAPI void APIENTRY glUnlockArraysEXT (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); -#endif - -#ifndef GL_EXT_cull_vertex -#define GL_EXT_cull_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCullParameterdvEXT (GLenum, GLdouble *); -GLAPI void APIENTRY glCullParameterfvEXT (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); -#endif - -#ifndef GL_SGIX_ycrcb -#define GL_SGIX_ycrcb 1 -#endif - -#ifndef GL_SGIX_fragment_lighting -#define GL_SGIX_fragment_lighting 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum, GLenum); -GLAPI void APIENTRY glFragmentLightfSGIX (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glFragmentLightiSGIX (GLenum, GLenum, GLint); -GLAPI void APIENTRY glFragmentLightivSGIX (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum, GLfloat); -GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum, const GLfloat *); -GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum, GLint); -GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum, const GLint *); -GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum, GLenum, GLint); -GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glLightEnviSGIX (GLenum, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); -#endif - -#ifndef GL_IBM_rasterpos_clip -#define GL_IBM_rasterpos_clip 1 -#endif - -#ifndef GL_HP_texture_lighting -#define GL_HP_texture_lighting 1 -#endif - -#ifndef GL_EXT_draw_range_elements -#define GL_EXT_draw_range_elements 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -#endif - -#ifndef GL_WIN_phong_shading -#define GL_WIN_phong_shading 1 -#endif - -#ifndef GL_WIN_specular_fog -#define GL_WIN_specular_fog 1 -#endif - -#ifndef GL_EXT_light_texture -#define GL_EXT_light_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glApplyTextureEXT (GLenum); -GLAPI void APIENTRY glTextureLightEXT (GLenum); -GLAPI void APIENTRY glTextureMaterialEXT (GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); -#endif - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_SGIX_blend_alpha_minmax 1 -#endif - -#ifndef GL_EXT_bgra -#define GL_EXT_bgra 1 -#endif - -#ifndef GL_SGIX_async -#define GL_SGIX_async 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint); -GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *); -GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *); -GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei); -GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint, GLsizei); -GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); -typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); -typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); -typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); -typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); -typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); -#endif - -#ifndef GL_SGIX_async_pixel -#define GL_SGIX_async_pixel 1 -#endif - -#ifndef GL_SGIX_async_histogram -#define GL_SGIX_async_histogram 1 -#endif - -#ifndef GL_INTEL_parallel_arrays -#define GL_INTEL_parallel_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexPointervINTEL (GLint, GLenum, const GLvoid* *); -GLAPI void APIENTRY glNormalPointervINTEL (GLenum, const GLvoid* *); -GLAPI void APIENTRY glColorPointervINTEL (GLint, GLenum, const GLvoid* *); -GLAPI void APIENTRY glTexCoordPointervINTEL (GLint, GLenum, const GLvoid* *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -#endif - -#ifndef GL_HP_occlusion_test -#define GL_HP_occlusion_test 1 -#endif - -#ifndef GL_EXT_pixel_transform -#define GL_EXT_pixel_transform 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum, GLenum, GLint); -GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum, GLenum, GLfloat); -GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum, GLenum, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_EXT_pixel_transform_color_table -#define GL_EXT_pixel_transform_color_table 1 -#endif - -#ifndef GL_EXT_shared_texture_palette -#define GL_EXT_shared_texture_palette 1 -#endif - -#ifndef GL_EXT_separate_specular_color -#define GL_EXT_separate_specular_color 1 -#endif - -#ifndef GL_EXT_secondary_color -#define GL_EXT_secondary_color 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *); -GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *); -GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *); -GLAPI void APIENTRY glSecondaryColor3iEXT (GLint, GLint, GLint); -GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *); -GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *); -GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *); -GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint, GLuint, GLuint); -GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *); -GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort, GLushort, GLushort); -GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *); -GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint, GLenum, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_texture_perturb_normal -#define GL_EXT_texture_perturb_normal 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureNormalEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei); -GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -#endif - -#ifndef GL_EXT_fog_coord -#define GL_EXT_fog_coord 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogCoordfEXT (GLfloat); -GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *); -GLAPI void APIENTRY glFogCoorddEXT (GLdouble); -GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *); -GLAPI void APIENTRY glFogCoordPointerEXT (GLenum, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_REND_screen_coordinates -#define GL_REND_screen_coordinates 1 -#endif - -#ifndef GL_EXT_coordinate_frame -#define GL_EXT_coordinate_frame 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTangent3bEXT (GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *); -GLAPI void APIENTRY glTangent3dEXT (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *); -GLAPI void APIENTRY glTangent3fEXT (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *); -GLAPI void APIENTRY glTangent3iEXT (GLint, GLint, GLint); -GLAPI void APIENTRY glTangent3ivEXT (const GLint *); -GLAPI void APIENTRY glTangent3sEXT (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glTangent3svEXT (const GLshort *); -GLAPI void APIENTRY glBinormal3bEXT (GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *); -GLAPI void APIENTRY glBinormal3dEXT (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *); -GLAPI void APIENTRY glBinormal3fEXT (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *); -GLAPI void APIENTRY glBinormal3iEXT (GLint, GLint, GLint); -GLAPI void APIENTRY glBinormal3ivEXT (const GLint *); -GLAPI void APIENTRY glBinormal3sEXT (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glBinormal3svEXT (const GLshort *); -GLAPI void APIENTRY glTangentPointerEXT (GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glBinormalPointerEXT (GLenum, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); -typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); -typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); -typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); -typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); -typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); -typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); -typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); -typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); -typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); -typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_texture_env_combine -#define GL_EXT_texture_env_combine 1 -#endif - -#ifndef GL_APPLE_specular_vector -#define GL_APPLE_specular_vector 1 -#endif - -#ifndef GL_APPLE_transform_hint -#define GL_APPLE_transform_hint 1 -#endif - -#ifndef GL_SGIX_fog_scale -#define GL_SGIX_fog_scale 1 -#endif - -#ifndef GL_SUNX_constant_data -#define GL_SUNX_constant_data 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFinishTextureSUNX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); -#endif - -#ifndef GL_SUN_global_alpha -#define GL_SUN_global_alpha 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte); -GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort); -GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint); -GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat); -GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble); -GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte); -GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort); -GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); -#endif - -#ifndef GL_SUN_triangle_list -#define GL_SUN_triangle_list 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint); -GLAPI void APIENTRY glReplacementCodeusSUN (GLushort); -GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte); -GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *); -GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *); -GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *); -GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum, GLsizei, const GLvoid* *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer); -#endif - -#ifndef GL_SUN_vertex -#define GL_SUN_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat); -GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat, GLfloat, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *, const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *, const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -#endif - -#ifndef GL_EXT_blend_func_separate -#define GL_EXT_blend_func_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum, GLenum, GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif - -#ifndef GL_INGR_blend_func_separate -#define GL_INGR_blend_func_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum, GLenum, GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif - -#ifndef GL_INGR_color_clamp -#define GL_INGR_color_clamp 1 -#endif - -#ifndef GL_INGR_interlace_read -#define GL_INGR_interlace_read 1 -#endif - -#ifndef GL_EXT_stencil_wrap -#define GL_EXT_stencil_wrap 1 -#endif - -#ifndef GL_EXT_422_pixels -#define GL_EXT_422_pixels 1 -#endif - -#ifndef GL_NV_texgen_reflection -#define GL_NV_texgen_reflection 1 -#endif - -#ifndef GL_SUN_convolution_border_modes -#define GL_SUN_convolution_border_modes 1 -#endif - -#ifndef GL_EXT_texture_env_add -#define GL_EXT_texture_env_add 1 -#endif - -#ifndef GL_EXT_texture_lod_bias -#define GL_EXT_texture_lod_bias 1 -#endif - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 -#endif - -#ifndef GL_EXT_vertex_weighting -#define GL_EXT_vertex_weighting 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexWeightfEXT (GLfloat); -GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *); -GLAPI void APIENTRY glVertexWeightPointerEXT (GLsizei, GLenum, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_NV_light_max_exponent -#define GL_NV_light_max_exponent 1 -#endif - -#ifndef GL_NV_vertex_array_range -#define GL_NV_vertex_array_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); -GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer); -#endif - -#ifndef GL_NV_register_combiners -#define GL_NV_register_combiners 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerParameterfvNV (GLenum, const GLfloat *); -GLAPI void APIENTRY glCombinerParameterfNV (GLenum, GLfloat); -GLAPI void APIENTRY glCombinerParameterivNV (GLenum, const GLint *); -GLAPI void APIENTRY glCombinerParameteriNV (GLenum, GLint); -GLAPI void APIENTRY glCombinerInputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glCombinerOutputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean); -GLAPI void APIENTRY glFinalCombinerInputNV (GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum, GLenum, GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum, GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum, GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum, GLenum, GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); -#endif - -#ifndef GL_NV_fog_distance -#define GL_NV_fog_distance 1 -#endif - -#ifndef GL_NV_texgen_emboss -#define GL_NV_texgen_emboss 1 -#endif - -#ifndef GL_NV_blend_square -#define GL_NV_blend_square 1 -#endif - -#ifndef GL_NV_texture_env_combine4 -#define GL_NV_texture_env_combine4 1 -#endif - -#ifndef GL_MESA_resize_buffers -#define GL_MESA_resize_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glResizeBuffersMESA (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); -#endif - -#ifndef GL_MESA_window_pos -#define GL_MESA_window_pos 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dMESA (GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *); -GLAPI void APIENTRY glWindowPos2fMESA (GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *); -GLAPI void APIENTRY glWindowPos2iMESA (GLint, GLint); -GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *); -GLAPI void APIENTRY glWindowPos2sMESA (GLshort, GLshort); -GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *); -GLAPI void APIENTRY glWindowPos3dMESA (GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *); -GLAPI void APIENTRY glWindowPos3fMESA (GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *); -GLAPI void APIENTRY glWindowPos3iMESA (GLint, GLint, GLint); -GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *); -GLAPI void APIENTRY glWindowPos3sMESA (GLshort, GLshort, GLshort); -GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *); -GLAPI void APIENTRY glWindowPos4dMESA (GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *); -GLAPI void APIENTRY glWindowPos4fMESA (GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *); -GLAPI void APIENTRY glWindowPos4iMESA (GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *); -GLAPI void APIENTRY glWindowPos4sMESA (GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); -#endif - -#ifndef GL_IBM_cull_vertex -#define GL_IBM_cull_vertex 1 -#endif - -#ifndef GL_IBM_multimode_draw_arrays -#define GL_IBM_multimode_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *, const GLint *, const GLsizei *, GLsizei, GLint); -GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *, const GLsizei *, GLenum, const GLvoid* const *, GLsizei, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride); -#endif - -#ifndef GL_IBM_vertex_array_lists -#define GL_IBM_vertex_array_lists 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint, const GLboolean* *, GLint); -GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glIndexPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glNormalPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glTexCoordPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -GLAPI void APIENTRY glVertexPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -#endif - -#ifndef GL_SGIX_subsample -#define GL_SGIX_subsample 1 -#endif - -#ifndef GL_SGIX_ycrcba -#define GL_SGIX_ycrcba 1 -#endif - -#ifndef GL_SGIX_ycrcb_subsample -#define GL_SGIX_ycrcb_subsample 1 -#endif - -#ifndef GL_SGIX_depth_pass_instrument -#define GL_SGIX_depth_pass_instrument 1 -#endif - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_3DFX_texture_compression_FXT1 1 -#endif - -#ifndef GL_3DFX_multisample -#define GL_3DFX_multisample 1 -#endif - -#ifndef GL_3DFX_tbuffer -#define GL_3DFX_tbuffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTbufferMask3DFX (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); -#endif - -#ifndef GL_EXT_multisample -#define GL_EXT_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskEXT (GLclampf, GLboolean); -GLAPI void APIENTRY glSamplePatternEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); -#endif - -#ifndef GL_SGIX_vertex_preclip -#define GL_SGIX_vertex_preclip 1 -#endif - -#ifndef GL_SGIX_convolution_accuracy -#define GL_SGIX_convolution_accuracy 1 -#endif - -#ifndef GL_SGIX_resample -#define GL_SGIX_resample 1 -#endif - -#ifndef GL_SGIS_point_line_texgen -#define GL_SGIS_point_line_texgen 1 -#endif - -#ifndef GL_SGIS_texture_color_mask -#define GL_SGIS_texture_color_mask 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean, GLboolean, GLboolean, GLboolean); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -#endif - -#ifndef GL_SGIX_igloo_interface -#define GL_SGIX_igloo_interface 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params); -#endif - -#ifndef GL_EXT_texture_env_dot3 -#define GL_EXT_texture_env_dot3 1 -#endif - -#ifndef GL_ATI_texture_mirror_once -#define GL_ATI_texture_mirror_once 1 -#endif - -#ifndef GL_NV_fence -#define GL_NV_fence 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteFencesNV (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenFencesNV (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsFenceNV (GLuint); -GLAPI GLboolean APIENTRY glTestFenceNV (GLuint); -GLAPI void APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glFinishFenceNV (GLuint); -GLAPI void APIENTRY glSetFenceNV (GLuint, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); -typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); -#endif - -#ifndef GL_NV_evaluators -#define GL_NV_evaluators 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLint, GLint, GLboolean, const GLvoid *); -GLAPI void APIENTRY glMapParameterivNV (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glMapParameterfvNV (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glGetMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLboolean, GLvoid *); -GLAPI void APIENTRY glGetMapParameterivNV (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetMapParameterfvNV (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum, GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum, GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glEvalMapsNV (GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); -typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); -#endif - -#ifndef GL_NV_packed_depth_stencil -#define GL_NV_packed_depth_stencil 1 -#endif - -#ifndef GL_NV_register_combiners2 -#define GL_NV_register_combiners2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum, GLenum, const GLfloat *); -GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum, GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_NV_texture_compression_vtc -#define GL_NV_texture_compression_vtc 1 -#endif - -#ifndef GL_NV_texture_rectangle -#define GL_NV_texture_rectangle 1 -#endif - -#ifndef GL_NV_texture_shader -#define GL_NV_texture_shader 1 -#endif - -#ifndef GL_NV_texture_shader2 -#define GL_NV_texture_shader2 1 -#endif - -#ifndef GL_NV_vertex_array_range2 -#define GL_NV_vertex_array_range2 1 -#endif - -#ifndef GL_NV_vertex_program -#define GL_NV_vertex_program 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei, const GLuint *, GLboolean *); -GLAPI void APIENTRY glBindProgramNV (GLenum, GLuint); -GLAPI void APIENTRY glDeleteProgramsNV (GLsizei, const GLuint *); -GLAPI void APIENTRY glExecuteProgramNV (GLenum, GLuint, const GLfloat *); -GLAPI void APIENTRY glGenProgramsNV (GLsizei, GLuint *); -GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum, GLuint, GLenum, GLdouble *); -GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum, GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetProgramivNV (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetProgramStringNV (GLuint, GLenum, GLubyte *); -GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum, GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint, GLenum, GLdouble *); -GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVertexAttribivNV (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint, GLenum, GLvoid* *); -GLAPI GLboolean APIENTRY glIsProgramNV (GLuint); -GLAPI void APIENTRY glLoadProgramNV (GLenum, GLuint, GLsizei, const GLubyte *); -GLAPI void APIENTRY glProgramParameter4dNV (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glProgramParameter4dvNV (GLenum, GLuint, const GLdouble *); -GLAPI void APIENTRY glProgramParameter4fNV (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramParameter4fvNV (GLenum, GLuint, const GLfloat *); -GLAPI void APIENTRY glProgramParameters4dvNV (GLenum, GLuint, GLuint, const GLdouble *); -GLAPI void APIENTRY glProgramParameters4fvNV (GLenum, GLuint, GLuint, const GLfloat *); -GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei, const GLuint *); -GLAPI void APIENTRY glTrackMatrixNV (GLenum, GLuint, GLenum, GLenum); -GLAPI void APIENTRY glVertexAttribPointerNV (GLuint, GLint, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glVertexAttrib1dNV (GLuint, GLdouble); -GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib1fNV (GLuint, GLfloat); -GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib1sNV (GLuint, GLshort); -GLAPI void APIENTRY glVertexAttrib1svNV (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib2dNV (GLuint, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib2fNV (GLuint, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib2sNV (GLuint, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib2svNV (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib3dNV (GLuint, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib3fNV (GLuint, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib3sNV (GLuint, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib3svNV (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4dNV (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint, const GLdouble *); -GLAPI void APIENTRY glVertexAttrib4fNV (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint, const GLfloat *); -GLAPI void APIENTRY glVertexAttrib4sNV (GLuint, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexAttrib4svNV (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); -GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint, GLsizei, const GLdouble *); -GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glVertexAttribs1svNV (GLuint, GLsizei, const GLshort *); -GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint, GLsizei, const GLdouble *); -GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glVertexAttribs2svNV (GLuint, GLsizei, const GLshort *); -GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint, GLsizei, const GLdouble *); -GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glVertexAttribs3svNV (GLuint, GLsizei, const GLshort *); -GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint, GLsizei, const GLdouble *); -GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glVertexAttribs4svNV (GLuint, GLsizei, const GLshort *); -GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint, GLsizei, const GLubyte *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); -typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); -typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint count, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint count, const GLfloat *v); -typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); -#endif - -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_SGIX_texture_coordinate_clamp 1 -#endif - -#ifndef GL_SGIX_scalebias_hint -#define GL_SGIX_scalebias_hint 1 -#endif - -#ifndef GL_OML_interlace -#define GL_OML_interlace 1 -#endif - -#ifndef GL_OML_subsample -#define GL_OML_subsample 1 -#endif - -#ifndef GL_OML_resample -#define GL_OML_resample 1 -#endif - -#ifndef GL_NV_copy_depth_to_color -#define GL_NV_copy_depth_to_color 1 -#endif - -#ifndef GL_ATI_envmap_bumpmap -#define GL_ATI_envmap_bumpmap 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBumpParameterivATI (GLenum, const GLint *); -GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum, GLint *); -GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); -#endif - -#ifndef GL_ATI_fragment_shader -#define GL_ATI_fragment_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint); -GLAPI void APIENTRY glBindFragmentShaderATI (GLuint); -GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint); -GLAPI void APIENTRY glBeginFragmentShaderATI (void); -GLAPI void APIENTRY glEndFragmentShaderATI (void); -GLAPI void APIENTRY glPassTexCoordATI (GLuint, GLuint, GLenum); -GLAPI void APIENTRY glSampleMapATI (GLuint, GLuint, GLenum); -GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); -typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); -typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); -#endif - -#ifndef GL_ATI_pn_triangles -#define GL_ATI_pn_triangles 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPNTrianglesiATI (GLenum, GLint); -GLAPI void APIENTRY glPNTrianglesfATI (GLenum, GLfloat); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); -#endif - -#ifndef GL_ATI_vertex_array_object -#define GL_ATI_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei, const GLvoid *, GLenum); -GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint); -GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint, GLuint, GLsizei, const GLvoid *, GLenum); -GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetObjectBufferivATI (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glFreeObjectBufferATI (GLuint); -GLAPI void APIENTRY glArrayObjectATI (GLenum, GLint, GLenum, GLsizei, GLuint, GLuint); -GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glGetArrayObjectivATI (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glVariantArrayObjectATI (GLuint, GLenum, GLsizei, GLuint, GLuint); -GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint, GLenum, GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage); -typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); -#endif - -#ifndef GL_EXT_vertex_shader -#define GL_EXT_vertex_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginVertexShaderEXT (void); -GLAPI void APIENTRY glEndVertexShaderEXT (void); -GLAPI void APIENTRY glBindVertexShaderEXT (GLuint); -GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint); -GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint); -GLAPI void APIENTRY glShaderOp1EXT (GLenum, GLuint, GLuint); -GLAPI void APIENTRY glShaderOp2EXT (GLenum, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glShaderOp3EXT (GLenum, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glSwizzleEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glWriteMaskEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glInsertComponentEXT (GLuint, GLuint, GLuint); -GLAPI void APIENTRY glExtractComponentEXT (GLuint, GLuint, GLuint); -GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum, GLenum, GLenum, GLuint); -GLAPI void APIENTRY glSetInvariantEXT (GLuint, GLenum, const GLvoid *); -GLAPI void APIENTRY glSetLocalConstantEXT (GLuint, GLenum, const GLvoid *); -GLAPI void APIENTRY glVariantbvEXT (GLuint, const GLbyte *); -GLAPI void APIENTRY glVariantsvEXT (GLuint, const GLshort *); -GLAPI void APIENTRY glVariantivEXT (GLuint, const GLint *); -GLAPI void APIENTRY glVariantfvEXT (GLuint, const GLfloat *); -GLAPI void APIENTRY glVariantdvEXT (GLuint, const GLdouble *); -GLAPI void APIENTRY glVariantubvEXT (GLuint, const GLubyte *); -GLAPI void APIENTRY glVariantusvEXT (GLuint, const GLushort *); -GLAPI void APIENTRY glVariantuivEXT (GLuint, const GLuint *); -GLAPI void APIENTRY glVariantPointerEXT (GLuint, GLenum, GLuint, const GLvoid *); -GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint); -GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint); -GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum, GLenum); -GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum, GLenum); -GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum, GLenum, GLenum); -GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum, GLenum); -GLAPI GLuint APIENTRY glBindParameterEXT (GLenum); -GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint, GLenum); -GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint, GLenum, GLboolean *); -GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVariantPointervEXT (GLuint, GLenum, GLvoid* *); -GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint, GLenum, GLboolean *); -GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint, GLenum, GLboolean *); -GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint, GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); -typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); -typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); -typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); -typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); -typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); -typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); -typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); -typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); -typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); -typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); -typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); -typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); -typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); -typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const GLvoid *addr); -typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); -typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); -typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data); -typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -#endif - -#ifndef GL_ATI_vertex_streams -#define GL_ATI_vertex_streams 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexStream1sATI (GLenum, GLshort); -GLAPI void APIENTRY glVertexStream1svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glVertexStream1iATI (GLenum, GLint); -GLAPI void APIENTRY glVertexStream1ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glVertexStream1fATI (GLenum, GLfloat); -GLAPI void APIENTRY glVertexStream1fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glVertexStream1dATI (GLenum, GLdouble); -GLAPI void APIENTRY glVertexStream1dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glVertexStream2sATI (GLenum, GLshort, GLshort); -GLAPI void APIENTRY glVertexStream2svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glVertexStream2iATI (GLenum, GLint, GLint); -GLAPI void APIENTRY glVertexStream2ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glVertexStream2fATI (GLenum, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexStream2fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glVertexStream2dATI (GLenum, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexStream2dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glVertexStream3sATI (GLenum, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexStream3svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glVertexStream3iATI (GLenum, GLint, GLint, GLint); -GLAPI void APIENTRY glVertexStream3ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glVertexStream3fATI (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexStream3fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glVertexStream3dATI (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexStream3dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glVertexStream4sATI (GLenum, GLshort, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glVertexStream4svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glVertexStream4iATI (GLenum, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glVertexStream4ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glVertexStream4fATI (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glVertexStream4fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glVertexStream4dATI (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glVertexStream4dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glNormalStream3bATI (GLenum, GLbyte, GLbyte, GLbyte); -GLAPI void APIENTRY glNormalStream3bvATI (GLenum, const GLbyte *); -GLAPI void APIENTRY glNormalStream3sATI (GLenum, GLshort, GLshort, GLshort); -GLAPI void APIENTRY glNormalStream3svATI (GLenum, const GLshort *); -GLAPI void APIENTRY glNormalStream3iATI (GLenum, GLint, GLint, GLint); -GLAPI void APIENTRY glNormalStream3ivATI (GLenum, const GLint *); -GLAPI void APIENTRY glNormalStream3fATI (GLenum, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glNormalStream3fvATI (GLenum, const GLfloat *); -GLAPI void APIENTRY glNormalStream3dATI (GLenum, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glNormalStream3dvATI (GLenum, const GLdouble *); -GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum); -GLAPI void APIENTRY glVertexBlendEnviATI (GLenum, GLint); -GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum, GLfloat); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); -#endif - -#ifndef GL_ATI_element_array -#define GL_ATI_element_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerATI (GLenum, const GLvoid *); -GLAPI void APIENTRY glDrawElementArrayATI (GLenum, GLsizei); -GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum, GLuint, GLuint, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); -#endif - -#ifndef GL_SUN_mesh_array -#define GL_SUN_mesh_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum, GLint, GLsizei, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); -#endif - -#ifndef GL_SUN_slice_accum -#define GL_SUN_slice_accum 1 -#endif - -#ifndef GL_NV_multisample_filter_hint -#define GL_NV_multisample_filter_hint 1 -#endif - -#ifndef GL_NV_depth_clamp -#define GL_NV_depth_clamp 1 -#endif - -#ifndef GL_NV_occlusion_query -#define GL_NV_occlusion_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei, GLuint *); -GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei, const GLuint *); -GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint); -GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint); -GLAPI void APIENTRY glEndOcclusionQueryNV (void); -GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint, GLenum, GLuint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); -#endif - -#ifndef GL_NV_point_sprite -#define GL_NV_point_sprite 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameteriNV (GLenum, GLint); -GLAPI void APIENTRY glPointParameterivNV (GLenum, const GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -#endif - -#ifndef GL_NV_texture_shader3 -#define GL_NV_texture_shader3 1 -#endif - -#ifndef GL_NV_vertex_program1_1 -#define GL_NV_vertex_program1_1 1 -#endif - -#ifndef GL_EXT_shadow_funcs -#define GL_EXT_shadow_funcs 1 -#endif - -#ifndef GL_EXT_stencil_two_side -#define GL_EXT_stencil_two_side 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); -#endif - -#ifndef GL_ATI_text_fragment_shader -#define GL_ATI_text_fragment_shader 1 -#endif - -#ifndef GL_APPLE_client_storage -#define GL_APPLE_client_storage 1 -#endif - -#ifndef GL_APPLE_element_array -#define GL_APPLE_element_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerAPPLE (GLenum, const GLvoid *); -GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum, GLint, GLsizei); -GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum, GLuint, GLuint, GLint, GLsizei); -GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum, const GLint *, const GLsizei *, GLsizei); -GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum, GLuint, GLuint, const GLint *, const GLsizei *, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); -#endif - -#ifndef GL_APPLE_fence -#define GL_APPLE_fence 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenFencesAPPLE (GLsizei, GLuint *); -GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei, const GLuint *); -GLAPI void APIENTRY glSetFenceAPPLE (GLuint); -GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint); -GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint); -GLAPI void APIENTRY glFinishFenceAPPLE (GLuint); -GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum, GLuint); -GLAPI void APIENTRY glFinishObjectAPPLE (GLenum, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); -typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); -typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); -#endif - -#ifndef GL_APPLE_vertex_array_object -#define GL_APPLE_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint); -GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei, GLuint *); -GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); -#endif - -#ifndef GL_APPLE_vertex_array_range -#define GL_APPLE_vertex_array_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei, GLvoid *); -GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei, GLvoid *); -GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); -#endif - -#ifndef GL_APPLE_ycbcr_422 -#define GL_APPLE_ycbcr_422 1 -#endif - -#ifndef GL_S3_s3tc -#define GL_S3_s3tc 1 -#endif - -#ifndef GL_ATI_draw_buffers -#define GL_ATI_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersATI (GLsizei, const GLenum *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); -#endif - -#ifndef GL_ATI_pixel_format_float -#define GL_ATI_pixel_format_float 1 -/* This is really a WGL extension, but defines some associated GL enums. - * ATI does not export "GL_ATI_pixel_format_float" in the GL_EXTENSIONS string. - */ -#endif - -#ifndef GL_ATI_texture_env_combine3 -#define GL_ATI_texture_env_combine3 1 -#endif - -#ifndef GL_ATI_texture_float -#define GL_ATI_texture_float 1 -#endif - -#ifndef GL_NV_float_buffer -#define GL_NV_float_buffer 1 -#endif - -#ifndef GL_NV_fragment_program -#define GL_NV_fragment_program 1 -/* Some NV_fragment_program entry points are shared with ARB_vertex_program. */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint, GLsizei, const GLubyte *, GLfloat, GLfloat, GLfloat, GLfloat); -GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint, GLsizei, const GLubyte *, GLdouble, GLdouble, GLdouble, GLdouble); -GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint, GLsizei, const GLubyte *, const GLfloat *); -GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint, GLsizei, const GLubyte *, const GLdouble *); -GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint, GLsizei, const GLubyte *, GLfloat *); -GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint, GLsizei, const GLubyte *, GLdouble *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); -#endif - -#ifndef GL_NV_half_float -#define GL_NV_half_float 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertex2hNV (GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *); -GLAPI void APIENTRY glVertex3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glVertex4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *); -GLAPI void APIENTRY glNormal3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glColor3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glColor4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *); -GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV); -GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *); -GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *); -GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *); -GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum, GLhalfNV); -GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum, const GLhalfNV *); -GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum, const GLhalfNV *); -GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum, const GLhalfNV *); -GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum, const GLhalfNV *); -GLAPI void APIENTRY glFogCoordhNV (GLhalfNV); -GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *); -GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *); -GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV); -GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *); -GLAPI void APIENTRY glVertexAttrib1hNV (GLuint, GLhalfNV); -GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttrib2hNV (GLuint, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttrib3hNV (GLuint, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttrib4hNV (GLuint, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); -GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint, GLsizei, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint, GLsizei, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint, GLsizei, const GLhalfNV *); -GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint, GLsizei, const GLhalfNV *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); -typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); -typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); -typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); -typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -#endif - -#ifndef GL_NV_pixel_data_range -#define GL_NV_pixel_data_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelDataRangeNV (GLenum, GLsizei, GLvoid *); -GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); -#endif - -#ifndef GL_NV_primitive_restart -#define GL_NV_primitive_restart 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPrimitiveRestartNV (void); -GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); -#endif - -#ifndef GL_NV_texture_expand_normal -#define GL_NV_texture_expand_normal 1 -#endif - -#ifndef GL_NV_vertex_program2 -#define GL_NV_vertex_program2 1 -#endif - -#ifndef GL_ATI_map_object_buffer -#define GL_ATI_map_object_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLvoid* APIENTRY glMapObjectBufferATI (GLuint); -GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLvoid* (APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); -#endif - -#ifndef GL_ATI_separate_stencil -#define GL_ATI_separate_stencil 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilOpSeparateATI (GLenum, GLenum, GLenum, GLenum); -GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum, GLenum, GLint, GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -#endif - -#ifndef GL_ATI_vertex_attrib_array_object -#define GL_ATI_vertex_attrib_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint, GLint, GLenum, GLboolean, GLsizei, GLuint, GLuint); -GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint, GLenum, GLfloat *); -GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint, GLenum, GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); -#endif - -#ifndef GL_OES_read_format -#define GL_OES_read_format 1 -#endif - -#ifndef GL_EXT_depth_bounds_test -#define GL_EXT_depth_bounds_test 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthBoundsEXT (GLclampd, GLclampd); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); -#endif - -#ifndef GL_EXT_texture_mirror_clamp -#define GL_EXT_texture_mirror_clamp 1 -#endif - -#ifndef GL_EXT_blend_equation_separate -#define GL_EXT_blend_equation_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); -#endif - -#ifndef GL_MESA_pack_invert -#define GL_MESA_pack_invert 1 -#endif - -#ifndef GL_MESA_ycbcr_texture -#define GL_MESA_ycbcr_texture 1 -#endif - -#ifndef GL_EXT_pixel_buffer_object -#define GL_EXT_pixel_buffer_object 1 -#endif - -#ifndef GL_NV_fragment_program_option -#define GL_NV_fragment_program_option 1 -#endif - -#ifndef GL_NV_fragment_program2 -#define GL_NV_fragment_program2 1 -#endif - -#ifndef GL_NV_vertex_program2_option -#define GL_NV_vertex_program2_option 1 -#endif - -#ifndef GL_NV_vertex_program3 -#define GL_NV_vertex_program3 1 -#endif - -#ifndef GL_EXT_framebuffer_object -#define GL_EXT_framebuffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint); -GLAPI void APIENTRY glBindRenderbufferEXT (GLenum, GLuint); -GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei, GLuint *); -GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum, GLenum, GLsizei, GLsizei); -GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum, GLenum, GLint *); -GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint); -GLAPI void APIENTRY glBindFramebufferEXT (GLenum, GLuint); -GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei, GLuint *); -GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum); -GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum, GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum, GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLint); -GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum, GLenum, GLenum, GLuint); -GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGenerateMipmapEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); -typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); -#endif - -#ifndef GL_GREMEDY_string_marker -#define GL_GREMEDY_string_marker 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string); -#endif - -#ifndef GL_EXT_packed_depth_stencil -#define GL_EXT_packed_depth_stencil 1 -#endif - -#ifndef GL_EXT_stencil_clear_tag -#define GL_EXT_stencil_clear_tag 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilClearTagEXT (GLsizei, GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); -#endif - -#ifndef GL_EXT_texture_sRGB -#define GL_EXT_texture_sRGB 1 -#endif - -#ifndef GL_EXT_framebuffer_blit -#define GL_EXT_framebuffer_blit 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlitFramebufferEXT (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif - -#ifndef GL_EXT_framebuffer_multisample -#define GL_EXT_framebuffer_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum, GLsizei, GLenum, GLsizei, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif - -#ifndef GL_MESAX_texture_stack -#define GL_MESAX_texture_stack 1 -#endif - -#ifndef GL_EXT_timer_query -#define GL_EXT_timer_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint, GLenum, GLint64EXT *); -GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint, GLenum, GLuint64EXT *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params); -#endif - -#ifndef GL_EXT_gpu_program_parameters -#define GL_EXT_gpu_program_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum, GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum, GLuint, GLsizei, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -#endif - -#ifndef GL_APPLE_flush_buffer_range -#define GL_APPLE_flush_buffer_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum, GLenum, GLint); -GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum, GLintptr, GLsizeiptr); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); -#endif - -#ifndef GL_NV_gpu_program4 -#define GL_NV_gpu_program4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum, GLuint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum, GLuint, const GLint *); -GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum, GLuint, GLsizei, const GLint *); -GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum, GLuint, const GLuint *); -GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum, GLuint, GLsizei, const GLuint *); -GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum, GLuint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum, GLuint, const GLint *); -GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum, GLuint, GLsizei, const GLint *); -GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum, GLuint, const GLuint *); -GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum, GLuint, GLsizei, const GLuint *); -GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum, GLuint, GLint *); -GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum, GLuint, GLuint *); -GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum, GLuint, GLint *); -GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum, GLuint, GLuint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); -#endif - -#ifndef GL_NV_geometry_program4 -#define GL_NV_geometry_program4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramVertexLimitNV (GLenum, GLint); -GLAPI void APIENTRY glFramebufferTextureEXT (GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum, GLenum, GLuint, GLint, GLint); -GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum, GLenum, GLuint, GLint, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif - -#ifndef GL_EXT_geometry_shader4 -#define GL_EXT_geometry_shader4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramParameteriEXT (GLuint, GLenum, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); -#endif - -#ifndef GL_NV_vertex_program4 -#define GL_NV_vertex_program4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint, GLint); -GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint, GLint, GLint); -GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint, GLint, GLint, GLint); -GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint, GLuint); -GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint, GLuint, GLuint); -GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint, GLint, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint, GLenum, GLuint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); -#endif - -#ifndef GL_EXT_gpu_shader4 -#define GL_EXT_gpu_shader4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetUniformuivEXT (GLuint, GLint, GLuint *); -GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint, GLuint, const GLchar *); -GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint, const GLchar *); -GLAPI void APIENTRY glUniform1uiEXT (GLint, GLuint); -GLAPI void APIENTRY glUniform2uiEXT (GLint, GLuint, GLuint); -GLAPI void APIENTRY glUniform3uiEXT (GLint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glUniform4uiEXT (GLint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glUniform1uivEXT (GLint, GLsizei, const GLuint *); -GLAPI void APIENTRY glUniform2uivEXT (GLint, GLsizei, const GLuint *); -GLAPI void APIENTRY glUniform3uivEXT (GLint, GLsizei, const GLuint *); -GLAPI void APIENTRY glUniform4uivEXT (GLint, GLsizei, const GLuint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -#endif - -#ifndef GL_EXT_draw_instanced -#define GL_EXT_draw_instanced 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum, GLsizei, GLenum, const GLvoid *, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif - -#ifndef GL_EXT_packed_float -#define GL_EXT_packed_float 1 -#endif - -#ifndef GL_EXT_texture_array -#define GL_EXT_texture_array 1 -#endif - -#ifndef GL_EXT_texture_buffer_object -#define GL_EXT_texture_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBufferEXT (GLenum, GLenum, GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); -#endif - -#ifndef GL_EXT_texture_compression_latc -#define GL_EXT_texture_compression_latc 1 -#endif - -#ifndef GL_EXT_texture_compression_rgtc -#define GL_EXT_texture_compression_rgtc 1 -#endif - -#ifndef GL_EXT_texture_shared_exponent -#define GL_EXT_texture_shared_exponent 1 -#endif - -#ifndef GL_NV_depth_buffer_float -#define GL_NV_depth_buffer_float 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthRangedNV (GLdouble, GLdouble); -GLAPI void APIENTRY glClearDepthdNV (GLdouble); -GLAPI void APIENTRY glDepthBoundsdNV (GLdouble, GLdouble); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); -typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); -#endif - -#ifndef GL_NV_fragment_program4 -#define GL_NV_fragment_program4 1 -#endif - -#ifndef GL_NV_framebuffer_multisample_coverage -#define GL_NV_framebuffer_multisample_coverage 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum, GLsizei, GLsizei, GLenum, GLsizei, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -#endif - -#ifndef GL_EXT_framebuffer_sRGB -#define GL_EXT_framebuffer_sRGB 1 -#endif - -#ifndef GL_NV_geometry_shader4 -#define GL_NV_geometry_shader4 1 -#endif - -#ifndef GL_NV_parameter_buffer_object -#define GL_NV_parameter_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum, GLuint, GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum, GLuint, GLuint, GLsizei, const GLint *); -GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum, GLuint, GLuint, GLsizei, const GLuint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params); -#endif - -#ifndef GL_EXT_draw_buffers2 -#define GL_EXT_draw_buffers2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint, GLboolean, GLboolean, GLboolean, GLboolean); -GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum, GLuint, GLboolean *); -GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum, GLuint, GLint *); -GLAPI void APIENTRY glEnableIndexedEXT (GLenum, GLuint); -GLAPI void APIENTRY glDisableIndexedEXT (GLenum, GLuint); -GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum, GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); -typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); -#endif - -#ifndef GL_NV_transform_feedback -#define GL_NV_transform_feedback 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum); -GLAPI void APIENTRY glEndTransformFeedbackNV (void); -GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint, const GLint *, GLenum); -GLAPI void APIENTRY glBindBufferRangeNV (GLenum, GLuint, GLuint, GLintptr, GLsizeiptr); -GLAPI void APIENTRY glBindBufferOffsetNV (GLenum, GLuint, GLuint, GLintptr); -GLAPI void APIENTRY glBindBufferBaseNV (GLenum, GLuint, GLuint); -GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint, GLsizei, const GLint *, GLenum); -GLAPI void APIENTRY glActiveVaryingNV (GLuint, const GLchar *); -GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint, const GLchar *); -GLAPI void APIENTRY glGetActiveVaryingNV (GLuint, GLuint, GLsizei, GLsizei *, GLsizei *, GLenum *, GLchar *); -GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint, GLuint, GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); -typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); -#endif - -#ifndef GL_EXT_bindable_uniform -#define GL_EXT_bindable_uniform 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformBufferEXT (GLuint, GLint, GLuint); -GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint, GLint); -GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); -typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); -typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); -#endif - -#ifndef GL_EXT_texture_integer -#define GL_EXT_texture_integer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexParameterIivEXT (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glTexParameterIuivEXT (GLenum, GLenum, const GLuint *); -GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum, GLenum, GLuint *); -GLAPI void APIENTRY glClearColorIiEXT (GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glClearColorIuiEXT (GLuint, GLuint, GLuint, GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); -typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); -#endif - -#ifndef GL_GREMEDY_frame_terminator -#define GL_GREMEDY_frame_terminator 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); -#endif - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/polymer-perf/eduke32/build/include/gtkbits.h b/polymer-perf/eduke32/build/include/gtkbits.h deleted file mode 100644 index 57fae76bb..000000000 --- a/polymer-perf/eduke32/build/include/gtkbits.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __gtkbits_h__ -#define __gtkbits_h__ - -extern void gtkbuild_init(int32_t *argc, char ***argv); -extern void gtkbuild_exit(int32_t r); -extern int32_t gtkbuild_msgbox(char *name, char *msg); -extern int32_t gtkbuild_ynbox(char *name, char *msg); - -#endif diff --git a/polymer-perf/eduke32/build/include/hightile.h b/polymer-perf/eduke32/build/include/hightile.h deleted file mode 100644 index ff0f57a0c..000000000 --- a/polymer-perf/eduke32/build/include/hightile.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef HIGHTILE_PRIV_H -#define HIGHTILE_PRIV_H - -struct hicskybox_t { - int ignore; - char *face[6]; -}; - -typedef struct hicreplc_t { - struct hicreplc_t *next; - char palnum, ignore, flags, filler; - char *filename; - float alphacut, xscale, yscale, specpower, specfactor; - struct hicskybox_t *skybox; -} hicreplctyp; - -extern palette_t hictinting[MAXPALOOKUPS]; -extern hicreplctyp *hicreplc[MAXTILES]; -extern char hicfirstinit; - -typedef struct texcachehead_t -{ - char magic[4]; // 'PMST', was 'Polymost' - int xdim, ydim; // of image, unpadded - int flags; // 1 = !2^x, 2 = has alpha, 4 = lzw compressed - int quality; // r_downsize at the time the cache was written -} texcacheheader; - -typedef struct texcachepic_t -{ - int size; - int format; - int xdim, ydim; // of mipmap (possibly padded) - int border, depth; -} texcachepicture; - -hicreplctyp * hicfindsubst(int picnum, int palnum, int skybox); -#define HICEFFECTMASK (1|2|4|8) - -#endif diff --git a/polymer-perf/eduke32/build/include/kplib.h b/polymer-perf/eduke32/build/include/kplib.h deleted file mode 100644 index 531cd55ed..000000000 --- a/polymer-perf/eduke32/build/include/kplib.h +++ /dev/null @@ -1,21 +0,0 @@ - //High-level (easy) picture loading function: -extern void kpzload (const char *, intptr_t *, int32_t *, int32_t *, int32_t *); - //Low-level PNG/JPG functions: -extern void kpgetdim (const char *, int32_t, int32_t *, int32_t *); -extern int32_t kprender (const char *, int32_t, intptr_t, int32_t, int32_t, int32_t, int32_t, int32_t); - - //ZIP functions: -extern int32_t kzaddstack (const char *); -extern void kzuninit (); -extern int32_t kzopen (const char *); -extern int32_t kzread (void *, int32_t); -extern int32_t kzfilelength (); -extern int32_t kzseek (int32_t, int32_t); -extern int32_t kztell (); -extern int32_t kzgetc (); -extern int32_t kzeof (); -extern void kzclose (); - -extern void kzfindfilestart (const char *); //pass wildcard string -extern int32_t kzfindfile (char *); //you alloc buf, returns 1:found,0:~found - diff --git a/polymer-perf/eduke32/build/include/lzwnew.h b/polymer-perf/eduke32/build/include/lzwnew.h deleted file mode 100644 index 30a0c8b9f..000000000 --- a/polymer-perf/eduke32/build/include/lzwnew.h +++ /dev/null @@ -1,2 +0,0 @@ -int32_t lzwcompress (char *ucompbuf, int32_t ucompleng, char *compbuf); -int32_t lzwuncompress (char *compbuf, int32_t compleng, char *ucompbuf, int32_t ucompleng); diff --git a/polymer-perf/eduke32/build/include/m32script.h b/polymer-perf/eduke32/build/include/m32script.h deleted file mode 100644 index 37d02a49d..000000000 --- a/polymer-perf/eduke32/build/include/m32script.h +++ /dev/null @@ -1,296 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 1996, 2003 - 3D Realms Entertainment -Copyright (C) 2000, 2003 - Matt Saettler (EDuke Enhancements) -Copyright (C) 2004, 2007 - EDuke32 developers - -This file is part of EDuke32 - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#ifndef _m32script_h_ -#define _m32script_h_ - -#include "compat.h" -#include "baselayer.h" -#include "build.h" -#include "editor.h" - -#define MAXQUOTES 2048 -#define MAXQUOTELEN 128 - -// Some misc #defines -//#define NO 0 -//#define YES 1 - -typedef int32_t instype; -typedef int32_t ofstype; - -extern char *ScriptQuotes[MAXQUOTES+1], *ScriptQuoteRedefinitions[MAXQUOTES+1]; -extern int32_t g_numQuoteRedefinitions; - -//extern int16_t neartagsector, neartagwall, neartagsprite; -//extern int32_t neartaghitdist; - -extern int32_t VM_Execute(int32_t once); -extern void VM_OnEvent(register int32_t iEventID, register int32_t iActor); - -extern void VM_ScriptInfo(void); -extern void VM_Disasm(ofstype beg, int32_t size); - -extern int32_t Gv_NewVar(const char *pszLabel, intptr_t lValue, uint32_t dwFlags); -extern int32_t Gv_NewArray(const char *pszLabel, void *arrayptr, intptr_t asize, uint32_t dwFlags); -extern void Gv_Init(void); - -extern int32_t __fastcall Gv_GetVarX(register int32_t id); -extern void __fastcall Gv_SetVarX(register int32_t id, register int32_t lValue); -extern int32_t __fastcall Gv_GetVarN(register int32_t id); // 'N' for "no side-effects"... vars and locals only! - -extern void SetGAMEPalette(void); -extern void SetWATERPalette(void); -extern void SetSLIMEPalette(void); -extern void SetBOSS1Palette(void); - -extern int32_t *constants, constants_allocsize; -extern int32_t g_numSavedConstants; - -extern instype *script ,*insptr; -extern int32_t *labelval; -extern uint8_t *labeltype; -extern int32_t g_numLabels, g_numDefaultLabels; -extern int32_t g_scriptSize; -extern char *label; -//extern int32_t label_allocsize; - -extern hashtable_t h_labels; - -#define MAXLABELLEN 32 - -//extern uint8_t waterpal[768],slimepal[768],titlepal[768],drealms[768],endingpal[768],animpal[768]; -//extern char currentboardfilename[BMAVM_PATH]; - - -enum GameEvent_t { - EVENT_ENTER3DMODE, - EVENT_ANALYZESPRITES, - EVENT_INSERTSPRITE2D, - EVENT_INSERTSPRITE3D, - EVENT_DRAW2DSCREEN, - EVENT_KEYS2D, - EVENT_KEYS3D, - EVENT_PREKEYS2D, - EVENT_PREKEYS3D, - MAXEVENTS -}; - -extern ofstype aEventOffsets[MAXEVENTS]; -extern int32_t aEventSizes[MAXEVENTS]; -extern uint8_t aEventEnabled[MAXEVENTS]; -extern uint16_t aEventNumLocals[MAXEVENTS]; - - -enum GamevarFlags_t { - MAXGAMEVARS = 1024, // must be a power of two between 256 and 4096, inclusive - LOG2MAXGV = 10, - MAXVARLABEL = MAXLABELLEN, //26, - - GAMEVAR_PERBLOCK = 0x00000001, // per-block (state, event, or top-level) variable - GAMEVAR_USER_MASK = GAMEVAR_PERBLOCK, - - GAMEVAR_RESET = 0x00000008, // marks var for to default - GAMEVAR_DEFAULT = 0x00000100, // allow override - - GAMEVAR_SYSTEM = 0x00000800, // cannot change mode flags...(only default value) - GAMEVAR_READONLY = 0x00001000, // values are read-only (no setvar allowed) - - GAMEVAR_INTPTR = 0x00002000, // plValues is a pointer to an int32_t - GAMEVAR_FLOATPTR = 0x00004000, // plValues is a pointer to a float - GAMEVAR_SHORTPTR = 0x00008000, // plValues is a pointer to a short - GAMEVAR_CHARPTR = 0x00010000, // plValues is a pointer to a char - GAMEVAR_PTR_MASK = GAMEVAR_INTPTR|GAMEVAR_FLOATPTR|GAMEVAR_SHORTPTR|GAMEVAR_CHARPTR, - -// GAMEVAR_NORESET = 0x00020000, // var values are not reset when restoring map state - GAMEVAR_SPECIAL = 0x00040000, // flag for structure member shortcut vars -}; - -enum GamearrayFlags_t { - MAXGAMEARRAYS = (MAXGAMEVARS>>2), // must be lower than MAXGAMEVARS - MAXARRAYLABEL = MAXVARLABEL, - - GAMEARRAY_READONLY = 0x00001000, - - GAMEARRAY_NORMAL = 0, - GAMEARRAY_OFCHAR = 0x00000001, - GAMEARRAY_OFSHORT = 0x00000002, - GAMEARRAY_OFINT = 0x00000004, - GAMEARRAY_TYPE_MASK = GAMEARRAY_OFCHAR|GAMEARRAY_OFSHORT|GAMEARRAY_OFINT, - - GAMEARRAY_VARSIZE = 0x00000020, - - GAMEARRAY_RESET = 0x00000008, -/// GAMEARRAY_NORESET = 0x00000001, -}; - -typedef struct { - union { - intptr_t lValue; // pointer when (dwFlags & GAMEVAR_*PTR) - int32_t *plValues; // array of values when (dwFlags & GAMEVAR_PERBLOCK) - } val; - intptr_t lDefault; - char *szLabel; - uint32_t dwFlags; -} gamevar_t; - -typedef struct { - char *szLabel; - void *vals; // array of values, type determined by (dwFlags & GAMEARRAY_TYPEMASK) - uint32_t dwFlags; - int32_t size; // id to size gamevar when (dwFlags & GAMEARRAY_VARSIZE) -} gamearray_t; - -extern gamevar_t aGameVars[MAXGAMEVARS]; -extern gamearray_t aGameArrays[MAXGAMEARRAYS]; -extern int32_t g_gameVarCount, g_systemVarCount; -extern int32_t g_gameArrayCount, g_systemArrayCount; - -extern uint32_t m32_drawlinepat; - - -extern int32_t g_iReturnVar; -extern int32_t m32_sortvar1, m32_sortvar2; -extern int32_t m32_script_expertmode; // if true, make read-only vars writable - -//extern int32_t g_numRealPalettes; -//extern int32_t g_scriptDebug; - -extern int32_t g_numQuoteRedefinitions; - -extern hashtable_t h_gamevars; -extern hashtable_t h_arrays; -//extern hashtable_t h_keywords; -extern hashtable_t h_gamefuncs; - - -extern int16_t asksave; - -extern vec3_t pos; -extern int16_t ang; -extern int32_t horiz; -extern int16_t cursectnum; -extern int32_t searchx, searchy; -/* -extern int16_t searchstat; -extern int16_t searchwall; -extern int16_t searchsector; -extern int16_t searchbottomwall; -*/ -extern int16_t pointhighlight; -extern int16_t linehighlight; -extern int16_t highlightcnt; -extern int16_t highlightsectorcnt; -/* -extern int32_t temppicnum; -extern int32_t tempcstat; -extern int32_t templotag; -extern int32_t temphitag; -extern int32_t tempextra; -extern int32_t tempshade; -extern uint32_t temppal; -extern uint32_t tempvis; -extern uint32_t tempxrepeat; -extern uint32_t tempyrepeat; -*/ -extern int32_t startposx; -extern int32_t startposy; -extern int32_t startposz; -extern int16_t startang; -extern int16_t startsectnum; - -extern int32_t mousxplc; -extern int32_t mousyplc; - -extern int16_t highlight[]; -extern int16_t highlightsector[]; - -extern int32_t numsprites; - -extern int32_t zoom; -extern int32_t halfxdim16, midydim16; - - -// gamevar bytecode format: - -// FEDC|BA98|7654|3210|FEDC|BA98|7654|3120 -// | .. .... .... gamevar ID -// | . constant bit (checked first) / get-payload-var bit for array or struct -// | . negate bit -// | . array bit \___\ if both set: -// | . struct bit / / local var -// .... .... .... ....| optional payload - - - -#define M32_FLAG_CONSTANT (MAXGAMEVARS) -#define M32_FLAG_NEGATE (MAXGAMEVARS<<1) - -#define M32_FLAG_VAR (0) -#define M32_FLAG_ARRAY (MAXGAMEVARS<<2) -#define M32_FLAG_STRUCT (MAXGAMEVARS<<3) -#define M32_FLAG_LOCAL (M32_FLAG_ARRAY|M32_FLAG_STRUCT) -#define M32_VARTYPE_MASK (M32_FLAG_ARRAY|M32_FLAG_STRUCT) - -#define M32_FLAG_CONSTANTINDEX M32_FLAG_CONSTANT -// if set, fetch index for array or struct array from 16 high bits as a constant (otherwise: gamevar) - -#define M32_BITS_MASK (0x0000ffff-(MAXGAMEVARS-1)) - -// IDs of special vars -#define M32_SPRITE_VAR_ID 0 -#define M32_SECTOR_VAR_ID 1 -#define M32_WALL_VAR_ID 2 -#define M32_TSPRITE_VAR_ID 3 - -#define M32_THISACTOR_VAR_ID 4 -#define M32_RETURN_VAR_ID 5 -#define M32_LOTAG_VAR_ID 6 -#define M32_HITAG_VAR_ID 7 -#define M32_TEXTURE_VAR_ID 8 - -#define M32_LOCAL_ARRAY_ID 0 - -#define M32_PRINTERROR(Text, ...) OSD_Printf(OSD_ERROR "Line %d, %s: " Text "\n", g_errorLineNum, keyw[g_tw], ## __VA_ARGS__) - - -// how local gamevars are allocated: - -// uncomment if variable-length arrays are available -//#define M32_LOCALS_VARARRAY - -// uncomment if alloca() is available -//#define M32_LOCALS_ALLOCA - -// if neither is there, use a constant number of them -#define M32_LOCALS_FIXEDNUM 64 - -#if defined M32_LOCALS_VARARRAY || defined M32_LOCALS_ALLOCA -# define M32_MAX_LOCALS MAXGAMEVARS -#else -# define M32_MAX_LOCALS M32_LOCALS_FIXEDNUM -#endif - - -#endif diff --git a/polymer-perf/eduke32/build/include/malloc.c.h b/polymer-perf/eduke32/build/include/malloc.c.h deleted file mode 100644 index 4a1bb7adb..000000000 --- a/polymer-perf/eduke32/build/include/malloc.c.h +++ /dev/null @@ -1,5871 +0,0 @@ -/* - This is a version (aka dlmalloc) of malloc/free/realloc written by - Doug Lea and released to the public domain, as explained at - http://creativecommons.org/licenses/publicdomain. Send questions, - comments, complaints, performance data, etc to dl@cs.oswego.edu - -* Version 2.8.4 Wed May 27 09:56:23 2009 Doug Lea (dl at gee) - - Note: There may be an updated version of this malloc obtainable at - ftp://gee.cs.oswego.edu/pub/misc/malloc.c - Check before installing! - -* Quickstart - - This library is all in one file to simplify the most common usage: - ftp it, compile it (-O3), and link it into another program. All of - the compile-time options default to reasonable values for use on - most platforms. You might later want to step through various - compile-time and dynamic tuning options. - - For convenience, an include file for code using this malloc is at: - ftp://gee.cs.oswego.edu/pub/misc/malloc-2.8.4.h - You don't really need this .h file unless you call functions not - defined in your system include files. The .h file contains only the - excerpts from this file needed for using this malloc on ANSI C/C++ - systems, so long as you haven't changed compile-time options about - naming and tuning parameters. If you do, then you can create your - own malloc.h that does include all settings by cutting at the point - indicated below. Note that you may already by default be using a C - library containing a malloc that is based on some version of this - malloc (for example in linux). You might still want to use the one - in this file to customize settings or to avoid overheads associated - with library versions. - -* Vital statistics: - - Supported pointer/size_t representation: 4 or 8 bytes - size_t MUST be an unsigned type of the same width as - pointers. (If you are using an ancient system that declares - size_t as a signed type, or need it to be a different width - than pointers, you can use a previous release of this malloc - (e.g. 2.7.2) supporting these.) - - Alignment: 8 bytes (default) - This suffices for nearly all current machines and C compilers. - However, you can define MALLOC_ALIGNMENT to be wider than this - if necessary (up to 128bytes), at the expense of using more space. - - Minimum overhead per allocated chunk: 4 or 8 bytes (if 4byte sizes) - 8 or 16 bytes (if 8byte sizes) - Each malloced chunk has a hidden word of overhead holding size - and status information, and additional cross-check word - if FOOTERS is defined. - - Minimum allocated size: 4-byte ptrs: 16 bytes (including overhead) - 8-byte ptrs: 32 bytes (including overhead) - - Even a request for zero bytes (i.e., malloc(0)) returns a - pointer to something of the minimum allocatable size. - The maximum overhead wastage (i.e., number of extra bytes - allocated than were requested in malloc) is less than or equal - to the minimum size, except for requests >= mmap_threshold that - are serviced via mmap(), where the worst case wastage is about - 32 bytes plus the remainder from a system page (the minimal - mmap unit); typically 4096 or 8192 bytes. - - Security: static-safe; optionally more or less - The "security" of malloc refers to the ability of malicious - code to accentuate the effects of errors (for example, freeing - space that is not currently malloc'ed or overwriting past the - ends of chunks) in code that calls malloc. This malloc - guarantees not to modify any memory locations below the base of - heap, i.e., static variables, even in the presence of usage - errors. The routines additionally detect most improper frees - and reallocs. All this holds as long as the static bookkeeping - for malloc itself is not corrupted by some other means. This - is only one aspect of security -- these checks do not, and - cannot, detect all possible programming errors. - - If FOOTERS is defined nonzero, then each allocated chunk - carries an additional check word to verify that it was malloced - from its space. These check words are the same within each - execution of a program using malloc, but differ across - executions, so externally crafted fake chunks cannot be - freed. This improves security by rejecting frees/reallocs that - could corrupt heap memory, in addition to the checks preventing - writes to statics that are always on. This may further improve - security at the expense of time and space overhead. (Note that - FOOTERS may also be worth using with MSPACES.) - - By default detected errors cause the program to abort (calling - "abort()"). You can override this to instead proceed past - errors by defining PROCEED_ON_ERROR. In this case, a bad free - has no effect, and a malloc that encounters a bad address - caused by user overwrites will ignore the bad address by - dropping pointers and indices to all known memory. This may - be appropriate for programs that should continue if at all - possible in the face of programming errors, although they may - run out of memory because dropped memory is never reclaimed. - - If you don't like either of these options, you can define - CORRUPTION_ERROR_ACTION and USAGE_ERROR_ACTION to do anything - else. And if if you are sure that your program using malloc has - no errors or vulnerabilities, you can define INSECURE to 1, - which might (or might not) provide a small performance improvement. - - Thread-safety: NOT thread-safe unless USE_LOCKS defined - When USE_LOCKS is defined, each public call to malloc, free, - etc is surrounded with either a pthread mutex or a win32 - spinlock (depending on WIN32). This is not especially fast, and - can be a major bottleneck. It is designed only to provide - minimal protection in concurrent environments, and to provide a - basis for extensions. If you are using malloc in a concurrent - program, consider instead using nedmalloc - (http://www.nedprod.com/programs/portable/nedmalloc/) or - ptmalloc (See http://www.malloc.de), which are derived - from versions of this malloc. - - System requirements: Any combination of MORECORE and/or MMAP/MUNMAP - This malloc can use unix sbrk or any emulation (invoked using - the CALL_MORECORE macro) and/or mmap/munmap or any emulation - (invoked using CALL_MMAP/CALL_MUNMAP) to get and release system - memory. On most unix systems, it tends to work best if both - MORECORE and MMAP are enabled. On Win32, it uses emulations - based on VirtualAlloc. It also uses common C library functions - like memset. - - Compliance: I believe it is compliant with the Single Unix Specification - (See http://www.unix.org). Also SVID/XPG, ANSI C, and probably - others as well. - -* Overview of algorithms - - This is not the fastest, most space-conserving, most portable, or - most tunable malloc ever written. However it is among the fastest - while also being among the most space-conserving, portable and - tunable. Consistent balance across these factors results in a good - general-purpose allocator for malloc-intensive programs. - - In most ways, this malloc is a best-fit allocator. Generally, it - chooses the best-fitting existing chunk for a request, with ties - broken in approximately least-recently-used order. (This strategy - normally maintains low fragmentation.) However, for requests less - than 256bytes, it deviates from best-fit when there is not an - exactly fitting available chunk by preferring to use space adjacent - to that used for the previous small request, as well as by breaking - ties in approximately most-recently-used order. (These enhance - locality of series of small allocations.) And for very large requests - (>= 256Kb by default), it relies on system memory mapping - facilities, if supported. (This helps avoid carrying around and - possibly fragmenting memory used only for large chunks.) - - All operations (except malloc_stats and mallinfo) have execution - times that are bounded by a constant factor of the number of bits in - a size_t, not counting any clearing in calloc or copying in realloc, - or actions surrounding MORECORE and MMAP that have times - proportional to the number of non-contiguous regions returned by - system allocation routines, which is often just 1. In real-time - applications, you can optionally suppress segment traversals using - NO_SEGMENT_TRAVERSAL, which assures bounded execution even when - system allocators return non-contiguous spaces, at the typical - expense of carrying around more memory and increased fragmentation. - - The implementation is not very modular and seriously overuses - macros. Perhaps someday all C compilers will do as good a job - inlining modular code as can now be done by brute-force expansion, - but now, enough of them seem not to. - - Some compilers issue a lot of warnings about code that is - dead/unreachable only on some platforms, and also about intentional - uses of negation on unsigned types. All known cases of each can be - ignored. - - For a longer but out of date high-level description, see - http://gee.cs.oswego.edu/dl/html/malloc.html - -* MSPACES - If MSPACES is defined, then in addition to malloc, free, etc., - this file also defines mspace_malloc, mspace_free, etc. These - are versions of malloc routines that take an "mspace" argument - obtained using create_mspace, to control all internal bookkeeping. - If ONLY_MSPACES is defined, only these versions are compiled. - So if you would like to use this allocator for only some allocations, - and your system malloc for others, you can compile with - ONLY_MSPACES and then do something like... - static mspace mymspace = create_mspace(0,0); // for example - #define mymalloc(bytes) mspace_malloc(mymspace, bytes) - - (Note: If you only need one instance of an mspace, you can instead - use "USE_DL_PREFIX" to relabel the global malloc.) - - You can similarly create thread-local allocators by storing - mspaces as thread-locals. For example: - static __thread mspace tlms = 0; - void* tlmalloc(size_t bytes) { - if (tlms == 0) tlms = create_mspace(0, 0); - return mspace_malloc(tlms, bytes); - } - void tlfree(void* mem) { mspace_free(tlms, mem); } - - Unless FOOTERS is defined, each mspace is completely independent. - You cannot allocate from one and free to another (although - conformance is only weakly checked, so usage errors are not always - caught). If FOOTERS is defined, then each chunk carries around a tag - indicating its originating mspace, and frees are directed to their - originating spaces. - - ------------------------- Compile-time options --------------------------- - -Be careful in setting #define values for numerical constants of type -size_t. On some systems, literal values are not automatically extended -to size_t precision unless they are explicitly casted. You can also -use the symbolic values MAX_SIZE_T, SIZE_T_ONE, etc below. - -WIN32 default: defined if _WIN32 defined - Defining WIN32 sets up defaults for MS environment and compilers. - Otherwise defaults are for unix. Beware that there seem to be some - cases where this malloc might not be a pure drop-in replacement for - Win32 malloc: Random-looking failures from Win32 GDI API's (eg; - SetDIBits()) may be due to bugs in some video driver implementations - when pixel buffers are malloc()ed, and the region spans more than - one VirtualAlloc()ed region. Because dlmalloc uses a small (64Kb) - default granularity, pixel buffers may straddle virtual allocation - regions more often than when using the Microsoft allocator. You can - avoid this by using VirtualAlloc() and VirtualFree() for all pixel - buffers rather than using malloc(). If this is not possible, - recompile this malloc with a larger DEFAULT_GRANULARITY. - -MALLOC_ALIGNMENT default: (size_t)8 - Controls the minimum alignment for malloc'ed chunks. It must be a - power of two and at least 8, even on machines for which smaller - alignments would suffice. It may be defined as larger than this - though. Note however that code and data structures are optimized for - the case of 8-byte alignment. - -MSPACES default: 0 (false) - If true, compile in support for independent allocation spaces. - This is only supported if HAVE_MMAP is true. - -ONLY_MSPACES default: 0 (false) - If true, only compile in mspace versions, not regular versions. - -USE_LOCKS default: 0 (false) - Causes each call to each public routine to be surrounded with - pthread or WIN32 mutex lock/unlock. (If set true, this can be - overridden on a per-mspace basis for mspace versions.) If set to a - non-zero value other than 1, locks are used, but their - implementation is left out, so lock functions must be supplied manually, - as described below. - -USE_SPIN_LOCKS default: 1 iff USE_LOCKS and on x86 using gcc or MSC - If true, uses custom spin locks for locking. This is currently - supported only for x86 platforms using gcc or recent MS compilers. - Otherwise, posix locks or win32 critical sections are used. - -FOOTERS default: 0 - If true, provide extra checking and dispatching by placing - information in the footers of allocated chunks. This adds - space and time overhead. - -INSECURE default: 0 - If true, omit checks for usage errors and heap space overwrites. - -USE_DL_PREFIX default: NOT defined - Causes compiler to prefix all public routines with the string 'dl'. - This can be useful when you only want to use this malloc in one part - of a program, using your regular system malloc elsewhere. - -ABORT default: defined as abort() - Defines how to abort on failed checks. On most systems, a failed - check cannot die with an "assert" or even print an informative - message, because the underlying print routines in turn call malloc, - which will fail again. Generally, the best policy is to simply call - abort(). It's not very useful to do more than this because many - errors due to overwriting will show up as address faults (null, odd - addresses etc) rather than malloc-triggered checks, so will also - abort. Also, most compilers know that abort() does not return, so - can better optimize code conditionally calling it. - -PROCEED_ON_ERROR default: defined as 0 (false) - Controls whether detected bad addresses cause them to bypassed - rather than aborting. If set, detected bad arguments to free and - realloc are ignored. And all bookkeeping information is zeroed out - upon a detected overwrite of freed heap space, thus losing the - ability to ever return it from malloc again, but enabling the - application to proceed. If PROCEED_ON_ERROR is defined, the - static variable malloc_corruption_error_count is compiled in - and can be examined to see if errors have occurred. This option - generates slower code than the default abort policy. - -DEBUG default: NOT defined - The DEBUG setting is mainly intended for people trying to modify - this code or diagnose problems when porting to new platforms. - However, it may also be able to better isolate user errors than just - using runtime checks. The assertions in the check routines spell - out in more detail the assumptions and invariants underlying the - algorithms. The checking is fairly extensive, and will slow down - execution noticeably. Calling malloc_stats or mallinfo with DEBUG - set will attempt to check every non-mmapped allocated and free chunk - in the course of computing the summaries. - -ABORT_ON_ASSERT_FAILURE default: defined as 1 (true) - Debugging assertion failures can be nearly impossible if your - version of the assert macro causes malloc to be called, which will - lead to a cascade of further failures, blowing the runtime stack. - ABORT_ON_ASSERT_FAILURE cause assertions failures to call abort(), - which will usually make debugging easier. - -MALLOC_FAILURE_ACTION default: sets errno to ENOMEM, or no-op on win32 - The action to take before "return 0" when malloc fails to be able to - return memory because there is none available. - -HAVE_MORECORE default: 1 (true) unless win32 or ONLY_MSPACES - True if this system supports sbrk or an emulation of it. - -MORECORE default: sbrk - The name of the sbrk-style system routine to call to obtain more - memory. See below for guidance on writing custom MORECORE - functions. The type of the argument to sbrk/MORECORE varies across - systems. It cannot be size_t, because it supports negative - arguments, so it is normally the signed type of the same width as - size_t (sometimes declared as "intptr_t"). It doesn't much matter - though. Internally, we only call it with arguments less than half - the max value of a size_t, which should work across all reasonable - possibilities, although sometimes generating compiler warnings. - -MORECORE_CONTIGUOUS default: 1 (true) if HAVE_MORECORE - If true, take advantage of fact that consecutive calls to MORECORE - with positive arguments always return contiguous increasing - addresses. This is true of unix sbrk. It does not hurt too much to - set it true anyway, since malloc copes with non-contiguities. - Setting it false when definitely non-contiguous saves time - and possibly wasted space it would take to discover this though. - -MORECORE_CANNOT_TRIM default: NOT defined - True if MORECORE cannot release space back to the system when given - negative arguments. This is generally necessary only if you are - using a hand-crafted MORECORE function that cannot handle negative - arguments. - -NO_SEGMENT_TRAVERSAL default: 0 - If non-zero, suppresses traversals of memory segments - returned by either MORECORE or CALL_MMAP. This disables - merging of segments that are contiguous, and selectively - releasing them to the OS if unused, but bounds execution times. - -HAVE_MMAP default: 1 (true) - True if this system supports mmap or an emulation of it. If so, and - HAVE_MORECORE is not true, MMAP is used for all system - allocation. If set and HAVE_MORECORE is true as well, MMAP is - primarily used to directly allocate very large blocks. It is also - used as a backup strategy in cases where MORECORE fails to provide - space from system. Note: A single call to MUNMAP is assumed to be - able to unmap memory that may have be allocated using multiple calls - to MMAP, so long as they are adjacent. - -HAVE_MREMAP default: 1 on linux, else 0 - If true realloc() uses mremap() to re-allocate large blocks and - extend or shrink allocation spaces. - -MMAP_CLEARS default: 1 except on WINCE. - True if mmap clears memory so calloc doesn't need to. This is true - for standard unix mmap using /dev/zero and on WIN32 except for WINCE. - -USE_BUILTIN_FFS default: 0 (i.e., not used) - Causes malloc to use the builtin ffs() function to compute indices. - Some compilers may recognize and intrinsify ffs to be faster than the - supplied C version. Also, the case of x86 using gcc is special-cased - to an asm instruction, so is already as fast as it can be, and so - this setting has no effect. Similarly for Win32 under recent MS compilers. - (On most x86s, the asm version is only slightly faster than the C version.) - -malloc_getpagesize default: derive from system includes, or 4096. - The system page size. To the extent possible, this malloc manages - memory from the system in page-size units. This may be (and - usually is) a function rather than a constant. This is ignored - if WIN32, where page size is determined using getSystemInfo during - initialization. This may be several megabytes if ENABLE_LARGE_PAGES - is enabled. - -ENABLE_LARGE_PAGES default: NOT defined - Causes the system page size to be the value of GetLargePageMinimum() - if that function is available (Windows Server 2003/Vista or later). - This allows the use of large page entries in the MMU which can - significantly improve performance in large working set applications - as TLB cache load is reduced by a factor of three. Note that enabling - this option is equal to locking the process' memory in current - implementations of Windows and requires the SE_LOCK_MEMORY_PRIVILEGE - to be held by the process in order to succeed. - -USE_DEV_RANDOM default: 0 (i.e., not used) - Causes malloc to use /dev/random to initialize secure magic seed for - stamping footers. Otherwise, the current time is used. - -NO_MALLINFO default: 0 - If defined, don't compile "mallinfo". This can be a simple way - of dealing with mismatches between system declarations and - those in this file. - -MALLINFO_FIELD_TYPE default: size_t - The type of the fields in the mallinfo struct. This was originally - defined as "int" in SVID etc, but is more usefully defined as - size_t. The value is used only if HAVE_USR_INCLUDE_MALLOC_H is not set - -REALLOC_ZERO_BYTES_FREES default: not defined - This should be set if a call to realloc with zero bytes should - be the same as a call to free. Some people think it should. Otherwise, - since this malloc returns a unique pointer for malloc(0), so does - realloc(p, 0). - -LACKS_UNISTD_H, LACKS_FCNTL_H, LACKS_SYS_PARAM_H, LACKS_SYS_MMAN_H -LACKS_STRINGS_H, LACKS_STRING_H, LACKS_SYS_TYPES_H, LACKS_ERRNO_H -LACKS_STDLIB_H default: NOT defined unless on WIN32 - Define these if your system does not have these header files. - You might need to manually insert some of the declarations they provide. - -DEFAULT_GRANULARITY default: page size if MORECORE_CONTIGUOUS, - system_info.dwAllocationGranularity in WIN32, - GetLargePageMinimum() if ENABLE_LARGE_PAGES, - otherwise 64K. - Also settable using mallopt(M_GRANULARITY, x) - The unit for allocating and deallocating memory from the system. On - most systems with contiguous MORECORE, there is no reason to - make this more than a page. However, systems with MMAP tend to - either require or encourage larger granularities. You can increase - this value to prevent system allocation functions to be called so - often, especially if they are slow. The value must be at least one - page and must be a power of two. Setting to 0 causes initialization - to either page size or win32 region size. (Note: In previous - versions of malloc, the equivalent of this option was called - "TOP_PAD") - -DEFAULT_GRANULARITY_ALIGNED default: undefined (which means page size) - Whether to enforce alignment when allocating and deallocating memory - from the system i.e. the base address of all allocations will be - aligned to DEFAULT_GRANULARITY if it is set. Note that enabling this carries - some overhead as multiple calls must now be made when probing for a valid - aligned value, however it does greatly ease the checking for whether - a given memory pointer was allocated by this allocator rather than - some other. - -DEFAULT_TRIM_THRESHOLD default: 2MB - Also settable using mallopt(M_TRIM_THRESHOLD, x) - The maximum amount of unused top-most memory to keep before - releasing via malloc_trim in free(). Automatic trimming is mainly - useful in long-lived programs using contiguous MORECORE. Because - trimming via sbrk can be slow on some systems, and can sometimes be - wasteful (in cases where programs immediately afterward allocate - more large chunks) the value should be high enough so that your - overall system performance would improve by releasing this much - memory. As a rough guide, you might set to a value close to the - average size of a process (program) running on your system. - Releasing this much memory would allow such a process to run in - memory. Generally, it is worth tuning trim thresholds when a - program undergoes phases where several large chunks are allocated - and released in ways that can reuse each other's storage, perhaps - mixed with phases where there are no such chunks at all. The trim - value must be greater than page size to have any useful effect. To - disable trimming completely, you can set to MAX_SIZE_T. Note that the trick - some people use of mallocing a huge space and then freeing it at - program startup, in an attempt to reserve system memory, doesn't - have the intended effect under automatic trimming, since that memory - will immediately be returned to the system. - -DEFAULT_MMAP_THRESHOLD default: 256K - Also settable using mallopt(M_MMAP_THRESHOLD, x) - The request size threshold for using MMAP to directly service a - request. Requests of at least this size that cannot be allocated - using already-existing space will be serviced via mmap. (If enough - normal freed space already exists it is used instead.) Using mmap - segregates relatively large chunks of memory so that they can be - individually obtained and released from the host system. A request - serviced through mmap is never reused by any other request (at least - not directly; the system may just so happen to remap successive - requests to the same locations). Segregating space in this way has - the benefits that: Mmapped space can always be individually released - back to the system, which helps keep the system level memory demands - of a long-lived program low. Also, mapped memory doesn't become - `locked' between other chunks, as can happen with normally allocated - chunks, which means that even trimming via malloc_trim would not - release them. However, it has the disadvantage that the space - cannot be reclaimed, consolidated, and then used to service later - requests, as happens with normal chunks. The advantages of mmap - nearly always outweigh disadvantages for "large" chunks, but the - value of "large" may vary across systems. The default is an - empirically derived value that works well in most systems. You can - disable mmap by setting to MAX_SIZE_T. - -MAX_RELEASE_CHECK_RATE default: 4095 unless not HAVE_MMAP - The number of consolidated frees between checks to release - unused segments when freeing. When using non-contiguous segments, - especially with multiple mspaces, checking only for topmost space - doesn't always suffice to trigger trimming. To compensate for this, - free() will, with a period of MAX_RELEASE_CHECK_RATE (or the - current number of segments, if greater) try to release unused - segments to the OS when freeing chunks that result in - consolidation. The best value for this parameter is a compromise - between slowing down frees with relatively costly checks that - rarely trigger versus holding on to unused memory. To effectively - disable, set to MAX_SIZE_T. This may lead to a very slight speed - improvement at the expense of carrying around more memory. -*/ - -/* Version identifier to allow people to support multiple versions */ -#ifndef DLMALLOC_VERSION -#define DLMALLOC_VERSION 20804 -#endif /* DLMALLOC_VERSION */ - -#ifndef WIN32 -#ifdef _WIN32 -#define WIN32 1 -#endif /* _WIN32 */ -#ifdef _WIN32_WCE -#define LACKS_FCNTL_H -#define WIN32 1 -#endif /* _WIN32_WCE */ -#endif /* WIN32 */ -#ifdef WIN32 -#define WIN32_LEAN_AND_MEAN -#include -#include -#define HAVE_MMAP 1 -#define HAVE_MORECORE 0 -#define LACKS_UNISTD_H -#define LACKS_SYS_PARAM_H -#define LACKS_SYS_MMAN_H -#define LACKS_STRING_H -#define LACKS_STRINGS_H -#define LACKS_SYS_TYPES_H -#define LACKS_ERRNO_H -#ifndef MALLOC_FAILURE_ACTION -#define MALLOC_FAILURE_ACTION -#endif /* MALLOC_FAILURE_ACTION */ -#ifdef _WIN32_WCE /* WINCE reportedly does not clear */ -#define MMAP_CLEARS 0 -#else -#define MMAP_CLEARS 1 -#endif /* _WIN32_WCE */ -#endif /* WIN32 */ - -#if defined(DARWIN) || defined(_DARWIN) -/* Mac OSX docs advise not to use sbrk; it seems better to use mmap */ -#ifndef HAVE_MORECORE -#define HAVE_MORECORE 0 -#define HAVE_MMAP 1 -/* OSX allocators provide 16 byte alignment */ -#ifndef MALLOC_ALIGNMENT -#define MALLOC_ALIGNMENT ((size_t)16U) -#endif -#endif /* HAVE_MORECORE */ -#endif /* DARWIN */ - -#ifndef LACKS_SYS_TYPES_H -#include /* For size_t */ -#endif /* LACKS_SYS_TYPES_H */ - -#if (defined(__GNUC__) && ((defined(__i386__) || defined(__x86_64__)))) || (defined(_MSC_VER) && _MSC_VER>=1310) -#define SPIN_LOCKS_AVAILABLE 1 -#else -#define SPIN_LOCKS_AVAILABLE 0 -#endif - -/* The maximum possible size_t value has all bits set */ -#define MAX_SIZE_T (~(size_t)0) - -#ifndef ONLY_MSPACES -#define ONLY_MSPACES 0 /* define to a value */ -#else -#define ONLY_MSPACES 1 -#endif /* ONLY_MSPACES */ -#ifndef MSPACES -#if ONLY_MSPACES -#define MSPACES 1 -#else /* ONLY_MSPACES */ -#define MSPACES 0 -#endif /* ONLY_MSPACES */ -#endif /* MSPACES */ -#ifndef MALLOC_ALIGNMENT -#define MALLOC_ALIGNMENT ((size_t)8U) -#endif /* MALLOC_ALIGNMENT */ -#ifndef FOOTERS -#define FOOTERS 0 -#endif /* FOOTERS */ -#ifndef ABORT -#define ABORT abort() -#endif /* ABORT */ -#ifndef ABORT_ON_ASSERT_FAILURE -#define ABORT_ON_ASSERT_FAILURE 1 -#endif /* ABORT_ON_ASSERT_FAILURE */ -#ifndef PROCEED_ON_ERROR -#define PROCEED_ON_ERROR 0 -#endif /* PROCEED_ON_ERROR */ -#ifndef USE_LOCKS -#define USE_LOCKS 0 -#endif /* USE_LOCKS */ -#ifndef USE_SPIN_LOCKS -#if USE_LOCKS && SPIN_LOCKS_AVAILABLE -#define USE_SPIN_LOCKS 1 -#else -#define USE_SPIN_LOCKS 0 -#endif /* USE_LOCKS && SPIN_LOCKS_AVAILABLE. */ -#endif /* USE_SPIN_LOCKS */ -#ifndef INSECURE -#define INSECURE 0 -#endif /* INSECURE */ -#ifndef HAVE_MMAP -#define HAVE_MMAP 1 -#endif /* HAVE_MMAP */ -#ifndef MMAP_CLEARS -#define MMAP_CLEARS 1 -#endif /* MMAP_CLEARS */ -#ifndef HAVE_MREMAP -#ifdef linux -#define HAVE_MREMAP 1 -#else /* linux */ -#define HAVE_MREMAP 0 -#endif /* linux */ -#endif /* HAVE_MREMAP */ -#ifndef MALLOC_FAILURE_ACTION -#define MALLOC_FAILURE_ACTION errno = ENOMEM; -#endif /* MALLOC_FAILURE_ACTION */ -#ifndef HAVE_MORECORE -#if ONLY_MSPACES -#define HAVE_MORECORE 0 -#else /* ONLY_MSPACES */ -#define HAVE_MORECORE 1 -#endif /* ONLY_MSPACES */ -#endif /* HAVE_MORECORE */ -#if !HAVE_MORECORE -#define MORECORE_CONTIGUOUS 0 -#else /* !HAVE_MORECORE */ -#define MORECORE_DEFAULT sbrk -#ifndef MORECORE_CONTIGUOUS -#define MORECORE_CONTIGUOUS 1 -#endif /* MORECORE_CONTIGUOUS */ -#endif /* HAVE_MORECORE */ -#ifndef DEFAULT_GRANULARITY -#if (MORECORE_CONTIGUOUS || defined(WIN32)) -#define DEFAULT_GRANULARITY (0) /* 0 means to compute in init_mparams */ -#else /* MORECORE_CONTIGUOUS */ -#define DEFAULT_GRANULARITY ((size_t)64U * (size_t)1024U) -#endif /* MORECORE_CONTIGUOUS */ -#endif /* DEFAULT_GRANULARITY */ -#ifndef DEFAULT_TRIM_THRESHOLD -#ifndef MORECORE_CANNOT_TRIM -#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U) -#else /* MORECORE_CANNOT_TRIM */ -#define DEFAULT_TRIM_THRESHOLD MAX_SIZE_T -#endif /* MORECORE_CANNOT_TRIM */ -#endif /* DEFAULT_TRIM_THRESHOLD */ -#ifndef DEFAULT_MMAP_THRESHOLD -#if HAVE_MMAP -#define DEFAULT_MMAP_THRESHOLD ((size_t)256U * (size_t)1024U) -#else /* HAVE_MMAP */ -#define DEFAULT_MMAP_THRESHOLD MAX_SIZE_T -#endif /* HAVE_MMAP */ -#endif /* DEFAULT_MMAP_THRESHOLD */ -#ifndef MAX_RELEASE_CHECK_RATE -#if HAVE_MMAP -#define MAX_RELEASE_CHECK_RATE 4095 -#else -#define MAX_RELEASE_CHECK_RATE MAX_SIZE_T -#endif /* HAVE_MMAP */ -#endif /* MAX_RELEASE_CHECK_RATE */ -#ifndef USE_BUILTIN_FFS -#define USE_BUILTIN_FFS 0 -#endif /* USE_BUILTIN_FFS */ -#ifndef USE_DEV_RANDOM -#define USE_DEV_RANDOM 0 -#endif /* USE_DEV_RANDOM */ -#ifndef NO_MALLINFO -#define NO_MALLINFO 0 -#endif /* NO_MALLINFO */ -#ifndef MALLINFO_FIELD_TYPE -#define MALLINFO_FIELD_TYPE size_t -#endif /* MALLINFO_FIELD_TYPE */ -#ifndef NO_SEGMENT_TRAVERSAL -#define NO_SEGMENT_TRAVERSAL 0 -#endif /* NO_SEGMENT_TRAVERSAL */ - -/* - mallopt tuning options. SVID/XPG defines four standard parameter - numbers for mallopt, normally defined in malloc.h. None of these - are used in this malloc, so setting them has no effect. But this - malloc does support the following options. -*/ - -#define M_TRIM_THRESHOLD (-1) -#define M_GRANULARITY (-2) -#define M_MMAP_THRESHOLD (-3) - -/* ------------------------ Mallinfo declarations ------------------------ */ - -#if !NO_MALLINFO -/* - This version of malloc supports the standard SVID/XPG mallinfo - routine that returns a struct containing usage properties and - statistics. It should work on any system that has a - /usr/include/malloc.h defining struct mallinfo. The main - declaration needed is the mallinfo struct that is returned (by-copy) - by mallinfo(). The malloinfo struct contains a bunch of fields that - are not even meaningful in this version of malloc. These fields are - are instead filled by mallinfo() with other numbers that might be of - interest. - - HAVE_USR_INCLUDE_MALLOC_H should be set if you have a - /usr/include/malloc.h file that includes a declaration of struct - mallinfo. If so, it is included; else a compliant version is - declared below. These must be precisely the same for mallinfo() to - work. The original SVID version of this struct, defined on most - systems with mallinfo, declares all fields as ints. But some others - define as unsigned long. If your system defines the fields using a - type of different width than listed here, you MUST #include your - system version and #define HAVE_USR_INCLUDE_MALLOC_H. -*/ - -/* #define HAVE_USR_INCLUDE_MALLOC_H */ - -#ifdef HAVE_USR_INCLUDE_MALLOC_H -#include "/usr/include/malloc.h" -#else /* HAVE_USR_INCLUDE_MALLOC_H */ -#ifndef STRUCT_MALLINFO_DECLARED -#define STRUCT_MALLINFO_DECLARED 1 -struct mallinfo { - MALLINFO_FIELD_TYPE arena; /* non-mmapped space allocated from system */ - MALLINFO_FIELD_TYPE ordblks; /* number of free chunks */ - MALLINFO_FIELD_TYPE smblks; /* always 0 */ - MALLINFO_FIELD_TYPE hblks; /* always 0 */ - MALLINFO_FIELD_TYPE hblkhd; /* space in mmapped regions */ - MALLINFO_FIELD_TYPE usmblks; /* maximum total allocated space */ - MALLINFO_FIELD_TYPE fsmblks; /* always 0 */ - MALLINFO_FIELD_TYPE uordblks; /* total allocated space */ - MALLINFO_FIELD_TYPE fordblks; /* total free space */ - MALLINFO_FIELD_TYPE keepcost; /* releasable (via malloc_trim) space */ -}; -#endif /* STRUCT_MALLINFO_DECLARED */ -#endif /* HAVE_USR_INCLUDE_MALLOC_H */ -#endif /* NO_MALLINFO */ - -/* - Try to persuade compilers to inline. The most critical functions for - inlining are defined as macros, so these aren't used for them. -*/ - -#ifndef FORCEINLINE - #if defined(__GNUC__) -#define FORCEINLINE __inline __attribute__ ((always_inline)) - #elif defined(_MSC_VER) - #define FORCEINLINE __forceinline - #endif -#endif -#ifndef NOINLINE - #if defined(__GNUC__) - #define NOINLINE __attribute__ ((noinline)) - #elif defined(_MSC_VER) - #define NOINLINE __declspec(noinline) - #else - #define NOINLINE - #endif -#endif - -#ifdef __cplusplus -extern "C" { -#ifndef FORCEINLINE - #define FORCEINLINE inline -#endif -#endif /* __cplusplus */ -#ifndef FORCEINLINE - #define FORCEINLINE -#endif - -#if !ONLY_MSPACES - -/* ------------------- Declarations of public routines ------------------- */ - -#ifndef USE_DL_PREFIX -#define dlcalloc calloc -#define dlfree free -#define dlmalloc malloc -#define dlmemalign memalign -#define dlrealloc realloc -#define dlvalloc valloc -#define dlpvalloc pvalloc -#define dlmallinfo mallinfo -#define dlmallopt mallopt -#define dlmalloc_trim malloc_trim -#define dlmalloc_stats malloc_stats -#define dlmalloc_usable_size malloc_usable_size -#define dlmalloc_footprint malloc_footprint -#define dlmalloc_max_footprint malloc_max_footprint -#define dlindependent_calloc independent_calloc -#define dlindependent_comalloc independent_comalloc -#endif /* USE_DL_PREFIX */ - - -/* - malloc(size_t n) - Returns a pointer to a newly allocated chunk of at least n bytes, or - null if no space is available, in which case errno is set to ENOMEM - on ANSI C systems. - - If n is zero, malloc returns a minimum-sized chunk. (The minimum - size is 16 bytes on most 32bit systems, and 32 bytes on 64bit - systems.) Note that size_t is an unsigned type, so calls with - arguments that would be negative if signed are interpreted as - requests for huge amounts of space, which will often fail. The - maximum supported value of n differs across systems, but is in all - cases less than the maximum representable value of a size_t. -*/ -void* dlmalloc(size_t); - -/* - free(void* p) - Releases the chunk of memory pointed to by p, that had been previously - allocated using malloc or a related routine such as realloc. - It has no effect if p is null. If p was not malloced or already - freed, free(p) will by default cause the current program to abort. -*/ -void dlfree(void*); - -/* - calloc(size_t n_elements, size_t element_size); - Returns a pointer to n_elements * element_size bytes, with all locations - set to zero. -*/ -void* dlcalloc(size_t, size_t); - -/* - realloc(void* p, size_t n) - Returns a pointer to a chunk of size n that contains the same data - as does chunk p up to the minimum of (n, p's size) bytes, or null - if no space is available. - - The returned pointer may or may not be the same as p. The algorithm - prefers extending p in most cases when possible, otherwise it - employs the equivalent of a malloc-copy-free sequence. - - If p is null, realloc is equivalent to malloc. - - If space is not available, realloc returns null, errno is set (if on - ANSI) and p is NOT freed. - - if n is for fewer bytes than already held by p, the newly unused - space is lopped off and freed if possible. realloc with a size - argument of zero (re)allocates a minimum-sized chunk. - - The old unix realloc convention of allowing the last-free'd chunk - to be used as an argument to realloc is not supported. -*/ - -void* dlrealloc(void*, size_t); - -/* - memalign(size_t alignment, size_t n); - Returns a pointer to a newly allocated chunk of n bytes, aligned - in accord with the alignment argument. - - The alignment argument should be a power of two. If the argument is - not a power of two, the nearest greater power is used. - 8-byte alignment is guaranteed by normal malloc calls, so don't - bother calling memalign with an argument of 8 or less. - - Overreliance on memalign is a sure way to fragment space. -*/ -void* dlmemalign(size_t, size_t); - -/* - valloc(size_t n); - Equivalent to memalign(pagesize, n), where pagesize is the page - size of the system. If the pagesize is unknown, 4096 is used. -*/ -void* dlvalloc(size_t); - -/* - mallopt(int parameter_number, int parameter_value) - Sets tunable parameters The format is to provide a - (parameter-number, parameter-value) pair. mallopt then sets the - corresponding parameter to the argument value if it can (i.e., so - long as the value is meaningful), and returns 1 if successful else - 0. To workaround the fact that mallopt is specified to use int, - not size_t parameters, the value -1 is specially treated as the - maximum unsigned size_t value. - - SVID/XPG/ANSI defines four standard param numbers for mallopt, - normally defined in malloc.h. None of these are use in this malloc, - so setting them has no effect. But this malloc also supports other - options in mallopt. See below for details. Briefly, supported - parameters are as follows (listed defaults are for "typical" - configurations). - - Symbol param # default allowed param values - M_TRIM_THRESHOLD -1 2*1024*1024 any (-1 disables) - M_GRANULARITY -2 page size any power of 2 >= page size - M_MMAP_THRESHOLD -3 256*1024 any (or 0 if no MMAP support) -*/ -int dlmallopt(int, int); - -/* - malloc_footprint(); - Returns the number of bytes obtained from the system. The total - number of bytes allocated by malloc, realloc etc., is less than this - value. Unlike mallinfo, this function returns only a precomputed - result, so can be called frequently to monitor memory consumption. - Even if locks are otherwise defined, this function does not use them, - so results might not be up to date. -*/ -size_t dlmalloc_footprint(void); - -/* - malloc_max_footprint(); - Returns the maximum number of bytes obtained from the system. This - value will be greater than current footprint if deallocated space - has been reclaimed by the system. The peak number of bytes allocated - by malloc, realloc etc., is less than this value. Unlike mallinfo, - this function returns only a precomputed result, so can be called - frequently to monitor memory consumption. Even if locks are - otherwise defined, this function does not use them, so results might - not be up to date. -*/ -size_t dlmalloc_max_footprint(void); - -#if !NO_MALLINFO -/* - mallinfo() - Returns (by copy) a struct containing various summary statistics: - - arena: current total non-mmapped bytes allocated from system - ordblks: the number of free chunks - smblks: always zero. - hblks: current number of mmapped regions - hblkhd: total bytes held in mmapped regions - usmblks: the maximum total allocated space. This will be greater - than current total if trimming has occurred. - fsmblks: always zero - uordblks: current total allocated space (normal or mmapped) - fordblks: total free space - keepcost: the maximum number of bytes that could ideally be released - back to system via malloc_trim. ("ideally" means that - it ignores page restrictions etc.) - - Because these fields are ints, but internal bookkeeping may - be kept as longs, the reported values may wrap around zero and - thus be inaccurate. -*/ -struct mallinfo dlmallinfo(void); -#endif /* NO_MALLINFO */ - -/* - independent_calloc(size_t n_elements, size_t element_size, void* chunks[]); - - independent_calloc is similar to calloc, but instead of returning a - single cleared space, it returns an array of pointers to n_elements - independent elements that can hold contents of size elem_size, each - of which starts out cleared, and can be independently freed, - realloc'ed etc. The elements are guaranteed to be adjacently - allocated (this is not guaranteed to occur with multiple callocs or - mallocs), which may also improve cache locality in some - applications. - - The "chunks" argument is optional (i.e., may be null, which is - probably the most typical usage). If it is null, the returned array - is itself dynamically allocated and should also be freed when it is - no longer needed. Otherwise, the chunks array must be of at least - n_elements in length. It is filled in with the pointers to the - chunks. - - In either case, independent_calloc returns this pointer array, or - null if the allocation failed. If n_elements is zero and "chunks" - is null, it returns a chunk representing an array with zero elements - (which should be freed if not wanted). - - Each element must be individually freed when it is no longer - needed. If you'd like to instead be able to free all at once, you - should instead use regular calloc and assign pointers into this - space to represent elements. (In this case though, you cannot - independently free elements.) - - independent_calloc simplifies and speeds up implementations of many - kinds of pools. It may also be useful when constructing large data - structures that initially have a fixed number of fixed-sized nodes, - but the number is not known at compile time, and some of the nodes - may later need to be freed. For example: - - struct Node { int item; struct Node* next; }; - - struct Node* build_list() { - struct Node** pool; - int n = read_number_of_nodes_needed(); - if (n <= 0) return 0; - pool = (struct Node**)(independent_calloc(n, sizeof(struct Node), 0); - if (pool == 0) die(); - // organize into a linked list... - struct Node* first = pool[0]; - for (i = 0; i < n-1; ++i) - pool[i]->next = pool[i+1]; - free(pool); // Can now free the array (or not, if it is needed later) - return first; - } -*/ -void** dlindependent_calloc(size_t, size_t, void**); - -/* - independent_comalloc(size_t n_elements, size_t sizes[], void* chunks[]); - - independent_comalloc allocates, all at once, a set of n_elements - chunks with sizes indicated in the "sizes" array. It returns - an array of pointers to these elements, each of which can be - independently freed, realloc'ed etc. The elements are guaranteed to - be adjacently allocated (this is not guaranteed to occur with - multiple callocs or mallocs), which may also improve cache locality - in some applications. - - The "chunks" argument is optional (i.e., may be null). If it is null - the returned array is itself dynamically allocated and should also - be freed when it is no longer needed. Otherwise, the chunks array - must be of at least n_elements in length. It is filled in with the - pointers to the chunks. - - In either case, independent_comalloc returns this pointer array, or - null if the allocation failed. If n_elements is zero and chunks is - null, it returns a chunk representing an array with zero elements - (which should be freed if not wanted). - - Each element must be individually freed when it is no longer - needed. If you'd like to instead be able to free all at once, you - should instead use a single regular malloc, and assign pointers at - particular offsets in the aggregate space. (In this case though, you - cannot independently free elements.) - - independent_comallac differs from independent_calloc in that each - element may have a different size, and also that it does not - automatically clear elements. - - independent_comalloc can be used to speed up allocation in cases - where several structs or objects must always be allocated at the - same time. For example: - - struct Head { ... } - struct Foot { ... } - - void send_message(char* msg) { - int msglen = strlen(msg); - size_t sizes[3] = { sizeof(struct Head), msglen, sizeof(struct Foot) }; - void* chunks[3]; - if (independent_comalloc(3, sizes, chunks) == 0) - die(); - struct Head* head = (struct Head*)(chunks[0]); - char* body = (char*)(chunks[1]); - struct Foot* foot = (struct Foot*)(chunks[2]); - // ... - } - - In general though, independent_comalloc is worth using only for - larger values of n_elements. For small values, you probably won't - detect enough difference from series of malloc calls to bother. - - Overuse of independent_comalloc can increase overall memory usage, - since it cannot reuse existing noncontiguous small chunks that - might be available for some of the elements. -*/ -void** dlindependent_comalloc(size_t, size_t*, void**); - - -/* - pvalloc(size_t n); - Equivalent to valloc(minimum-page-that-holds(n)), that is, - round up n to nearest pagesize. - */ -void* dlpvalloc(size_t); - -/* - malloc_trim(size_t pad); - - If possible, gives memory back to the system (via negative arguments - to sbrk) if there is unused memory at the `high' end of the malloc - pool or in unused MMAP segments. You can call this after freeing - large blocks of memory to potentially reduce the system-level memory - requirements of a program. However, it cannot guarantee to reduce - memory. Under some allocation patterns, some large free blocks of - memory will be locked between two used chunks, so they cannot be - given back to the system. - - The `pad' argument to malloc_trim represents the amount of free - trailing space to leave untrimmed. If this argument is zero, only - the minimum amount of memory to maintain internal data structures - will be left. Non-zero arguments can be supplied to maintain enough - trailing space to service future expected allocations without having - to re-obtain memory from the system. - - Malloc_trim returns 1 if it actually released any memory, else 0. -*/ -int dlmalloc_trim(size_t); - -/* - malloc_stats(); - Prints on stderr the amount of space obtained from the system (both - via sbrk and mmap), the maximum amount (which may be more than - current if malloc_trim and/or munmap got called), and the current - number of bytes allocated via malloc (or realloc, etc) but not yet - freed. Note that this is the number of bytes allocated, not the - number requested. It will be larger than the number requested - because of alignment and bookkeeping overhead. Because it includes - alignment wastage as being in use, this figure may be greater than - zero even when no user-level chunks are allocated. - - The reported current and maximum system memory can be inaccurate if - a program makes other calls to system memory allocation functions - (normally sbrk) outside of malloc. - - malloc_stats prints only the most commonly interesting statistics. - More information can be obtained by calling mallinfo. -*/ -void dlmalloc_stats(void); - -#endif /* ONLY_MSPACES */ - -/* - malloc_usable_size(void* p); - - Returns the number of bytes you can actually use in - an allocated chunk, which may be more than you requested (although - often not) due to alignment and minimum size constraints. - You can use this many bytes without worrying about - overwriting other allocated objects. This is not a particularly great - programming practice. malloc_usable_size can be more useful in - debugging and assertions, for example: - - p = malloc(n); - assert(malloc_usable_size(p) >= 256); -*/ -size_t dlmalloc_usable_size(void*); - - -#if MSPACES - -/* - mspace is an opaque type representing an independent - region of space that supports mspace_malloc, etc. -*/ -typedef void* mspace; - -/* - create_mspace creates and returns a new independent space with the - given initial capacity, or, if 0, the default granularity size. It - returns null if there is no system memory available to create the - space. If argument locked is non-zero, the space uses a separate - lock to control access. The capacity of the space will grow - dynamically as needed to service mspace_malloc requests. You can - control the sizes of incremental increases of this space by - compiling with a different DEFAULT_GRANULARITY or dynamically - setting with mallopt(M_GRANULARITY, value). -*/ -mspace create_mspace(size_t capacity, int locked); - -/* - destroy_mspace destroys the given space, and attempts to return all - of its memory back to the system, returning the total number of - bytes freed. After destruction, the results of access to all memory - used by the space become undefined. -*/ -size_t destroy_mspace(mspace msp); - -/* - create_mspace_with_base uses the memory supplied as the initial base - of a new mspace. Part (less than 128*sizeof(size_t) bytes) of this - space is used for bookkeeping, so the capacity must be at least this - large. (Otherwise 0 is returned.) When this initial space is - exhausted, additional memory will be obtained from the system. - Destroying this space will deallocate all additionally allocated - space (if possible) but not the initial base. -*/ -mspace create_mspace_with_base(void* base, size_t capacity, int locked); - -/* - mspace_track_large_chunks controls whether requests for large chunks - are allocated in their own untracked mmapped regions, separate from - others in this mspace. By default large chunks are not tracked, - which reduces fragmentation. However, such chunks are not - necessarily released to the system upon destroy_mspace. Enabling - tracking by setting to true may increase fragmentation, but avoids - leakage when relying on destroy_mspace to release all memory - allocated using this space. The function returns the previous - setting. -*/ -int mspace_track_large_chunks(mspace msp, int enable); - - -/* - mspace_malloc behaves as malloc, but operates within - the given space. -*/ -void* mspace_malloc(mspace msp, size_t bytes); - -/* - mspace_free behaves as free, but operates within - the given space. - - If compiled with FOOTERS==1, mspace_free is not actually needed. - free may be called instead of mspace_free because freed chunks from - any space are handled by their originating spaces. -*/ -void mspace_free(mspace msp, void* mem); - -/* - mspace_realloc behaves as realloc, but operates within - the given space. - - If compiled with FOOTERS==1, mspace_realloc is not actually - needed. realloc may be called instead of mspace_realloc because - realloced chunks from any space are handled by their originating - spaces. -*/ -void* mspace_realloc(mspace msp, void* mem, size_t newsize); - -/* - mspace_calloc behaves as calloc, but operates within - the given space. -*/ -void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size); - -/* - mspace_memalign behaves as memalign, but operates within - the given space. -*/ -void* mspace_memalign(mspace msp, size_t alignment, size_t bytes); - -/* - mspace_independent_calloc behaves as independent_calloc, but - operates within the given space. -*/ -void** mspace_independent_calloc(mspace msp, size_t n_elements, - size_t elem_size, void* chunks[]); - -/* - mspace_independent_comalloc behaves as independent_comalloc, but - operates within the given space. -*/ -void** mspace_independent_comalloc(mspace msp, size_t n_elements, - size_t sizes[], void* chunks[]); - -/* - mspace_footprint() returns the number of bytes obtained from the - system for this space. -*/ -size_t mspace_footprint(mspace msp); - -/* - mspace_max_footprint() returns the peak number of bytes obtained from the - system for this space. -*/ -size_t mspace_max_footprint(mspace msp); - - -#if !NO_MALLINFO -/* - mspace_mallinfo behaves as mallinfo, but reports properties of - the given space. -*/ -struct mallinfo mspace_mallinfo(mspace msp); -#endif /* NO_MALLINFO */ - -/* - malloc_usable_size(void* p) behaves the same as malloc_usable_size; -*/ - size_t mspace_usable_size(void* mem); - -/* - mspace_malloc_stats behaves as malloc_stats, but reports - properties of the given space. -*/ -void mspace_malloc_stats(mspace msp); - -/* - mspace_trim behaves as malloc_trim, but - operates within the given space. -*/ -int mspace_trim(mspace msp, size_t pad); - -/* - An alias for mallopt. -*/ -int mspace_mallopt(int, int); - -#endif /* MSPACES */ - -#ifdef __cplusplus -} /* end of extern "C" */ -#endif /* __cplusplus */ - -/* - ======================================================================== - To make a fully customizable malloc.h header file, cut everything - above this line, put into file malloc.h, edit to suit, and #include it - on the next line, as well as in programs that use this malloc. - ======================================================================== -*/ - -/* #include "malloc.h" */ - -/*------------------------------ internal #includes ---------------------- */ - -#if defined(WIN32) && defined(_MSC_VER) -#pragma warning( disable : 4146 ) /* no "unsigned" warnings */ -#endif /* WIN32 */ - -#include /* for printing in malloc_stats */ - -#ifndef LACKS_ERRNO_H -#include /* for MALLOC_FAILURE_ACTION */ -#endif /* LACKS_ERRNO_H */ -#if FOOTERS || DEBUG -#include /* for magic initialization */ -#endif /* FOOTERS */ -#ifndef LACKS_STDLIB_H -#include /* for abort() */ -#endif /* LACKS_STDLIB_H */ -#ifdef DEBUG -#if ABORT_ON_ASSERT_FAILURE -#undef assert -#define assert(x) if(!(x)) ABORT -#else /* ABORT_ON_ASSERT_FAILURE */ -#include -#endif /* ABORT_ON_ASSERT_FAILURE */ -#else /* DEBUG */ -#ifndef assert -#define assert(x) -#endif -#define DEBUG 0 -#endif /* DEBUG */ -#ifndef LACKS_STRING_H -#include /* for memset etc */ -#endif /* LACKS_STRING_H */ -#if USE_BUILTIN_FFS -#ifndef LACKS_STRINGS_H -#include /* for ffs */ -#endif /* LACKS_STRINGS_H */ -#endif /* USE_BUILTIN_FFS */ -#if HAVE_MMAP -#ifndef LACKS_SYS_MMAN_H -/* On some versions of linux, mremap decl in mman.h needs __USE_GNU set */ -#if (defined(linux) && !defined(__USE_GNU)) -#define __USE_GNU 1 -#include /* for mmap */ -#undef __USE_GNU -#else -#include /* for mmap */ -#endif /* linux */ -#endif /* LACKS_SYS_MMAN_H */ -#ifndef LACKS_FCNTL_H -#include -#endif /* LACKS_FCNTL_H */ -#endif /* HAVE_MMAP */ -#ifndef LACKS_UNISTD_H -#include /* for sbrk, sysconf */ -#else /* LACKS_UNISTD_H */ -#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) -extern void* sbrk(ptrdiff_t); -#endif /* FreeBSD etc */ -#endif /* LACKS_UNISTD_H */ - -/* Declarations for locking */ -#if USE_LOCKS -#ifndef WIN32 -#include -#if defined (__SVR4) && defined (__sun) /* solaris */ -#include -#endif /* solaris */ -#else -#ifndef _M_AMD64 -/* These are already defined on AMD64 builds */ -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ -#ifndef __MINGW32__ -LONG __cdecl _InterlockedCompareExchange(LONG volatile *Dest, LONG Exchange, LONG Comp); -LONG __cdecl _InterlockedExchange(LONG volatile *Target, LONG Value); -#endif -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* _M_AMD64 */ -#ifndef __MINGW32__ -#pragma intrinsic (_InterlockedCompareExchange) -#pragma intrinsic (_InterlockedExchange) -#else - /* --[ start GCC compatibility ]---------------------------------------------- - * Compatibility header for GCC -- GCC equivalents of intrinsic - * Microsoft Visual C++ functions. Originally developed for the ReactOS - * () and TinyKrnl () - * projects. - * - * Copyright (c) 2006 KJK::Hyperion - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - - /*** Atomic operations ***/ - #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) > 40100 - #define _ReadWriteBarrier() __sync_synchronize() - #else - static __inline__ __attribute__((always_inline)) long __sync_lock_test_and_set(volatile long * const Target, const long Value) - { - long res; - __asm__ __volatile__("xchg%z0 %2, %0" : "=g" (*(Target)), "=r" (res) : "1" (Value)); - return res; - } - static void __inline__ __attribute__((always_inline)) _MemoryBarrier(void) - { - __asm__ __volatile__("" : : : "memory"); - } - #define _ReadWriteBarrier() _MemoryBarrier() - #endif - /* BUGBUG: GCC only supports full barriers */ - static __inline__ __attribute__((always_inline)) long _InterlockedExchange(volatile long * const Target, const long Value) - { - /* NOTE: __sync_lock_test_and_set would be an acquire barrier, so we force a full barrier */ - _ReadWriteBarrier(); - return __sync_lock_test_and_set(Target, Value); - } - /* --[ end GCC compatibility ]---------------------------------------------- */ -#endif -#define interlockedcompareexchange _InterlockedCompareExchange -#define interlockedexchange _InterlockedExchange -#endif /* Win32 */ -#endif /* USE_LOCKS */ - -/* Declarations for bit scanning on win32 */ -#if defined(_MSC_VER) && _MSC_VER>=1300 -#ifndef BitScanForward /* Try to avoid pulling in WinNT.h */ -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ -unsigned char _BitScanForward(unsigned long *index, unsigned long mask); -unsigned char _BitScanReverse(unsigned long *index, unsigned long mask); -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#define BitScanForward _BitScanForward -#define BitScanReverse _BitScanReverse -#pragma intrinsic(_BitScanForward) -#pragma intrinsic(_BitScanReverse) -#endif /* BitScanForward */ -#endif /* defined(_MSC_VER) && _MSC_VER>=1300 */ - -#ifndef WIN32 -#ifndef malloc_getpagesize -# ifdef _SC_PAGESIZE /* some SVR4 systems omit an underscore */ -# ifndef _SC_PAGE_SIZE -# define _SC_PAGE_SIZE _SC_PAGESIZE -# endif -# endif -# ifdef _SC_PAGE_SIZE -# define malloc_getpagesize sysconf(_SC_PAGE_SIZE) -# else -# if defined(BSD) || defined(DGUX) || defined(HAVE_GETPAGESIZE) - extern size_t getpagesize(); -# define malloc_getpagesize getpagesize() -# else -# ifdef WIN32 /* use supplied emulation of getpagesize */ -# define malloc_getpagesize getpagesize() -# else -# ifndef LACKS_SYS_PARAM_H -# include -# endif -# ifdef EXEC_PAGESIZE -# define malloc_getpagesize EXEC_PAGESIZE -# else -# ifdef NBPG -# ifndef CLSIZE -# define malloc_getpagesize NBPG -# else -# define malloc_getpagesize (NBPG * CLSIZE) -# endif -# else -# ifdef NBPC -# define malloc_getpagesize NBPC -# else -# ifdef PAGESIZE -# define malloc_getpagesize PAGESIZE -# else /* just guess */ -# define malloc_getpagesize ((size_t)4096U) -# endif -# endif -# endif -# endif -# endif -# endif -# endif -#endif -#endif - - - -/* ------------------- size_t and alignment properties -------------------- */ - -/* The byte and bit size of a size_t */ -#define SIZE_T_SIZE (sizeof(size_t)) -#define SIZE_T_BITSIZE (sizeof(size_t) << 3) - -/* Some constants coerced to size_t */ -/* Annoying but necessary to avoid errors on some platforms */ -#define SIZE_T_ZERO ((size_t)0) -#define SIZE_T_ONE ((size_t)1) -#define SIZE_T_TWO ((size_t)2) -#define SIZE_T_FOUR ((size_t)4) -#define TWO_SIZE_T_SIZES (SIZE_T_SIZE<<1) -#define FOUR_SIZE_T_SIZES (SIZE_T_SIZE<<2) -#define SIX_SIZE_T_SIZES (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES) -#define HALF_MAX_SIZE_T (MAX_SIZE_T / 2U) - -/* The bit mask value corresponding to MALLOC_ALIGNMENT */ -#define CHUNK_ALIGN_MASK (MALLOC_ALIGNMENT - SIZE_T_ONE) - -/* True if address a has acceptable alignment */ -#define is_aligned(A) (((size_t)((A)) & (CHUNK_ALIGN_MASK)) == 0) - -/* the number of bytes to offset an address to align it */ -#define align_offset(A)\ - ((((size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\ - ((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK)) - -/* - malloc_params holds global properties, including those that can be - dynamically set using mallopt. There is a single instance, mparams, - initialized in init_mparams. Note that the non-zeroness of "magic" - also serves as an initialization flag. -*/ -typedef unsigned int flag_t; -struct malloc_params { - volatile size_t magic; - size_t page_size; - size_t granularity; - size_t mmap_threshold; - size_t trim_threshold; - flag_t default_mflags; -}; - -static struct malloc_params mparams; - -/* Ensure mparams initialized */ -#define ensure_initialization() (void)(mparams.magic != 0 || init_mparams()) - -/* -------------------------- MMAP preliminaries ------------------------- */ - -/* - If HAVE_MORECORE or HAVE_MMAP are false, we just define calls and - checks to fail so compiler optimizer can delete code rather than - using so many "#if"s. -*/ - - -/* MORECORE and MMAP must return MFAIL on failure */ -#define MFAIL ((void*)(MAX_SIZE_T)) -#define CMFAIL ((char*)(MFAIL)) /* defined for convenience */ - -#if HAVE_MMAP - -#ifndef WIN32 -#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON) -#define MAP_ANONYMOUS MAP_ANON -#endif /* MAP_ANON */ -#ifdef DEFAULT_GRANULARITY_ALIGNED -#define MMAP_IMPL mmap_aligned -static void* lastAlignedmmap; /* Used as a hint */ -static void* mmap_aligned(void *start, size_t length, int prot, int flags, int fd, off_t offset) { - void* baseaddress = 0; - void* ptr = 0; - if(!start) { - baseaddress = lastAlignedmmap; - for(;;) { - if(baseaddress) flags|=MAP_FIXED; - ptr = mmap(baseaddress, length, prot, flags, fd, offset); - if(!ptr) - baseaddress = (void*)((size_t)baseaddress + mparams.granularity); - else if((size_t)ptr & (mparams.granularity - SIZE_T_ONE)) { - munmap(ptr, length); - baseaddress = (void*)(((size_t)ptr + mparams.granularity) & ~(mparams.granularity - SIZE_T_ONE)); - } - else break; - } - } - else ptr = mmap(start, length, prot, flags, fd, offset); - if(ptr) lastAlignedmmap = (void*)((size_t) ptr + mparams.granularity); - return ptr; -} -#else -#define MMAP_IMPL mmap -#endif /* DEFAULT_GRANULARITY_ALIGNED */ -#define MUNMAP_DEFAULT(a, s) munmap((a), (s)) -#define MMAP_PROT (PROT_READ|PROT_WRITE) -#ifdef MAP_ANONYMOUS -#define MMAP_FLAGS (MAP_PRIVATE|MAP_ANONYMOUS) -#define MMAP_DEFAULT(s) MMAP_IMPL(0, (s), MMAP_PROT, MMAP_FLAGS, -1, 0) -#else /* MAP_ANONYMOUS */ -/* - Nearly all versions of mmap support MAP_ANONYMOUS, so the following - is unlikely to be needed, but is supplied just in case. -*/ -#define MMAP_FLAGS (MAP_PRIVATE) -static int dev_zero_fd = -1; /* Cached file descriptor for /dev/zero. */ -#define MMAP_DEFAULT(s) ((dev_zero_fd < 0) ? \ - (dev_zero_fd = open("/dev/zero", O_RDWR), \ - MMAP_IMPL(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) : \ - MMAP_IMPL(0, (s), MMAP_PROT, MMAP_FLAGS, dev_zero_fd, 0)) -#endif /* MAP_ANONYMOUS */ - -#define DIRECT_MMAP_DEFAULT(s) MMAP_DEFAULT(s) - -#else /* WIN32 */ - -/* Win32 MMAP via VirtualAlloc */ -#ifdef DEFAULT_GRANULARITY_ALIGNED -static void* lastWin32mmap; /* Used as a hint */ -#endif /* DEFAULT_GRANULARITY_ALIGNED */ -#ifdef ENABLE_LARGE_PAGES -int largepagesavailable = 1; -#ifndef MEM_LARGE_PAGES - #define MEM_LARGE_PAGES 0x20000000 -#endif -#endif /* ENABLE_LARGE_PAGES */ -static FORCEINLINE void* win32mmap(size_t size) { - void* baseaddress = 0; - void* ptr = 0; -#ifdef ENABLE_LARGE_PAGES - /* Note that large pages are *always* allocated on a large page boundary. - If however granularity is small then don't waste a kernel call if size - isn't around the size of a large page */ - if(largepagesavailable && size >= 1*1024*1024) { - ptr = VirtualAlloc(baseaddress, size, MEM_RESERVE|MEM_COMMIT|MEM_LARGE_PAGES, PAGE_READWRITE); - if(!ptr && ERROR_PRIVILEGE_NOT_HELD==GetLastError()) largepagesavailable=0; - } -#endif - if(!ptr) { -#ifdef DEFAULT_GRANULARITY_ALIGNED - /* We try to avoid overhead by speculatively reserving at aligned - addresses until we succeed */ - baseaddress = lastWin32mmap; - for(;;) { - void* reserveaddr = VirtualAlloc(baseaddress, size, MEM_RESERVE, PAGE_READWRITE); - if(!reserveaddr) - baseaddress = (void*)((size_t)baseaddress + mparams.granularity); - else if((size_t)reserveaddr & (mparams.granularity - SIZE_T_ONE)) { - VirtualFree(reserveaddr, 0, MEM_RELEASE); - baseaddress = (void*)(((size_t)reserveaddr + mparams.granularity) & ~(mparams.granularity - SIZE_T_ONE)); - } - else break; - } -#endif - if(!ptr) ptr = VirtualAlloc(baseaddress, size, baseaddress ? MEM_COMMIT : MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); -#if DEBUG - if(lastWin32mmap && ptr!=lastWin32mmap) printf("Non-contiguous VirtualAlloc between %p and %p\n", ptr, lastWin32mmap); -#endif -#ifdef DEFAULT_GRANULARITY_ALIGNED - if(ptr) lastWin32mmap = (void*)((size_t) ptr + mparams.granularity); -#endif - } -#if DEBUG -#ifdef ENABLE_LARGE_PAGES - printf("VirtualAlloc returns %p size %u. LargePagesAvailable=%d\n", ptr, size, largepagesavailable); -#else - printf("VirtualAlloc returns %p size %u\n", ptr, size); -#endif -#endif - return (ptr != 0)? ptr: MFAIL; -} - -/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */ -static FORCEINLINE void* win32direct_mmap(size_t size) { - void* ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, - PAGE_READWRITE); - return (ptr != 0)? ptr: MFAIL; -} - -/* This function supports releasing coalesed segments */ -static FORCEINLINE int win32munmap(void* ptr, size_t size) { - MEMORY_BASIC_INFORMATION minfo; - char* cptr = (char*)ptr; - while (size) { - if (VirtualQuery(cptr, &minfo, sizeof(minfo)) == 0) - return -1; - if (minfo.BaseAddress != cptr || minfo.AllocationBase != cptr || - minfo.State != MEM_COMMIT || minfo.RegionSize > size) - return -1; - if (VirtualFree(cptr, 0, MEM_RELEASE) == 0) - return -1; - cptr += minfo.RegionSize; - size -= minfo.RegionSize; - } - return 0; -} - -#define MMAP_DEFAULT(s) win32mmap(s) -#define MUNMAP_DEFAULT(a, s) win32munmap((a), (s)) -#define DIRECT_MMAP_DEFAULT(s) win32direct_mmap(s) -#endif /* WIN32 */ -#endif /* HAVE_MMAP */ - -#if HAVE_MREMAP -#ifndef WIN32 -#define MREMAP_DEFAULT(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv)) -#endif /* WIN32 */ -#endif /* HAVE_MREMAP */ - - -/** - * Define CALL_MORECORE - */ -#if HAVE_MORECORE - #ifdef MORECORE - #define CALL_MORECORE(S) MORECORE(S) - #else /* MORECORE */ - #define CALL_MORECORE(S) MORECORE_DEFAULT(S) - #endif /* MORECORE */ -#else /* HAVE_MORECORE */ - #define CALL_MORECORE(S) MFAIL -#endif /* HAVE_MORECORE */ - -/** - * Define CALL_MMAP/CALL_MUNMAP/CALL_DIRECT_MMAP - */ -#if HAVE_MMAP - #define USE_MMAP_BIT (SIZE_T_ONE) - - #ifdef MMAP - #define CALL_MMAP(s) MMAP(s) - #else /* MMAP */ - #define CALL_MMAP(s) MMAP_DEFAULT(s) - #endif /* MMAP */ - #ifdef MUNMAP - #define CALL_MUNMAP(a, s) MUNMAP((a), (s)) - #else /* MUNMAP */ - #define CALL_MUNMAP(a, s) MUNMAP_DEFAULT((a), (s)) - #endif /* MUNMAP */ - #ifdef DIRECT_MMAP - #define CALL_DIRECT_MMAP(s) DIRECT_MMAP(s) - #else /* DIRECT_MMAP */ - #define CALL_DIRECT_MMAP(s) DIRECT_MMAP_DEFAULT(s) - #endif /* DIRECT_MMAP */ -#else /* HAVE_MMAP */ - #define USE_MMAP_BIT (SIZE_T_ZERO) - - #define MMAP(s) MFAIL - #define MUNMAP(a, s) (-1) - #define DIRECT_MMAP(s) MFAIL - #define CALL_DIRECT_MMAP(s) DIRECT_MMAP(s) - #define CALL_MMAP(s) MMAP(s) - #define CALL_MUNMAP(a, s) MUNMAP((a), (s)) -#endif /* HAVE_MMAP */ - -/** - * Define CALL_MREMAP - */ -#if HAVE_MMAP && HAVE_MREMAP - #ifdef MREMAP - #define CALL_MREMAP(addr, osz, nsz, mv) MREMAP((addr), (osz), (nsz), (mv)) - #else /* MREMAP */ - #define CALL_MREMAP(addr, osz, nsz, mv) MREMAP_DEFAULT((addr), (osz), (nsz), (mv)) - #endif /* MREMAP */ -#else /* HAVE_MMAP && HAVE_MREMAP */ - #define CALL_MREMAP(addr, osz, nsz, mv) MFAIL -#endif /* HAVE_MMAP && HAVE_MREMAP */ - -/* mstate bit set if continguous morecore disabled or failed */ -#define USE_NONCONTIGUOUS_BIT (4U) - -/* segment bit set in create_mspace_with_base */ -#define EXTERN_BIT (8U) - - -/* --------------------------- Lock preliminaries ------------------------ */ - -/* - When locks are defined, there is one global lock, plus - one per-mspace lock. - - The global lock_ensures that mparams.magic and other unique - mparams values are initialized only once. It also protects - sequences of calls to MORECORE. In many cases sys_alloc requires - two calls, that should not be interleaved with calls by other - threads. This does not protect against direct calls to MORECORE - by other threads not using this lock, so there is still code to - cope the best we can on interference. - - Per-mspace locks surround calls to malloc, free, etc. To enable use - in layered extensions, per-mspace locks are reentrant. - - Because lock-protected regions generally have bounded times, it is - OK to use the supplied simple spinlocks in the custom versions for - x86. Spinlocks are likely to improve performance for lightly - contended applications, but worsen performance under heavy - contention. - - If USE_LOCKS is > 1, the definitions of lock routines here are - bypassed, in which case you will need to define the type MLOCK_T, - and at least INITIAL_LOCK, ACQUIRE_LOCK, RELEASE_LOCK and possibly - TRY_LOCK (which is not used in this malloc, but commonly needed in - extensions.) You must also declare a - static MLOCK_T malloc_global_mutex = { initialization values };. - -*/ - -#if USE_LOCKS == 1 - -#if USE_SPIN_LOCKS && SPIN_LOCKS_AVAILABLE -#ifndef WIN32 - -/* Custom pthread-style spin locks on x86 and x64 for gcc */ -struct pthread_mlock_t { - volatile unsigned int l; - char cachelinepadding[64]; - unsigned int c; - pthread_t threadid; -}; -#define MLOCK_T struct pthread_mlock_t -#define CURRENT_THREAD pthread_self() -#define INITIAL_LOCK(sl) ((sl)->threadid = 0, (sl)->l = (sl)->c = 0, 0) -#define ACQUIRE_LOCK(sl) pthread_acquire_lock(sl) -#define RELEASE_LOCK(sl) pthread_release_lock(sl) -#define TRY_LOCK(sl) pthread_try_lock(sl) -#define SPINS_PER_YIELD 63 - -static MLOCK_T malloc_global_mutex = { 0, "", 0, 0}; - -static FORCEINLINE int pthread_acquire_lock (MLOCK_T *sl) { - int spins = 0; - volatile unsigned int* lp = &sl->l; - for (;;) { - if (*lp != 0) { - if (sl->threadid == CURRENT_THREAD) { - ++sl->c; - return 0; - } - } - else { - /* place args to cmpxchgl in locals to evade oddities in some gccs */ - int cmp = 0; - int val = 1; - int ret; - __asm__ __volatile__ ("lock; cmpxchgl %1, %2" - : "=a" (ret) - : "r" (val), "m" (*(lp)), "0"(cmp) - : "memory", "cc"); - if (!ret) { - assert(!sl->threadid); - sl->threadid = CURRENT_THREAD; - sl->c = 1; - return 0; - } - } - if ((++spins & SPINS_PER_YIELD) == 0) { -#if defined (__SVR4) && defined (__sun) /* solaris */ - thr_yield(); -#else -#if defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__) - sched_yield(); -#else /* no-op yield on unknown systems */ - ; -#endif /* __linux__ || __FreeBSD__ || __APPLE__ */ -#endif /* solaris */ - } - } -} - -static FORCEINLINE void pthread_release_lock (MLOCK_T *sl) { - volatile unsigned int* lp = &sl->l; - assert(*lp != 0); - assert(sl->threadid == CURRENT_THREAD); - if (--sl->c == 0) { - sl->threadid = 0; - int prev = 0; - int ret; - __asm__ __volatile__ ("lock; xchgl %0, %1" - : "=r" (ret) - : "m" (*(lp)), "0"(prev) - : "memory"); - } -} - -static FORCEINLINE int pthread_try_lock (MLOCK_T *sl) { - volatile unsigned int* lp = &sl->l; - if (*lp != 0) { - if (sl->threadid == CURRENT_THREAD) { - ++sl->c; - return 1; - } - } - else { - int cmp = 0; - int val = 1; - int ret; - __asm__ __volatile__ ("lock; cmpxchgl %1, %2" - : "=a" (ret) - : "r" (val), "m" (*(lp)), "0"(cmp) - : "memory", "cc"); - if (!ret) { - assert(!sl->threadid); - sl->threadid = CURRENT_THREAD; - sl->c = 1; - return 1; - } - } - return 0; -} - - -#else /* WIN32 */ -/* Custom win32-style spin locks on x86 and x64 for MSC */ -struct win32_mlock_t { - volatile long l; - char cachelinepadding[64]; - unsigned int c; - long threadid; -}; - -#define MLOCK_T struct win32_mlock_t -#define CURRENT_THREAD ((long)GetCurrentThreadId()) -#define INITIAL_LOCK(sl) ((sl)->threadid = 0, (sl)->l = (sl)->c = 0, 0) -#define ACQUIRE_LOCK(sl) win32_acquire_lock(sl) -#define RELEASE_LOCK(sl) win32_release_lock(sl) -#define TRY_LOCK(sl) win32_try_lock(sl) -#define SPINS_PER_YIELD 63 - -static MLOCK_T malloc_global_mutex = { 0, "", 0, 0}; - -static FORCEINLINE int win32_acquire_lock (MLOCK_T *sl) { - int spins = 0; - for (;;) { - if (sl->l != 0) { - if (sl->threadid == CURRENT_THREAD) { - ++sl->c; - return 0; - } - } - else { - if (!interlockedexchange(&sl->l, 1)) { - assert(!sl->threadid); - sl->threadid = CURRENT_THREAD; - sl->c = 1; - return 0; - } - } - if ((++spins & SPINS_PER_YIELD) == 0) - SleepEx(0, FALSE); - } -} - -static FORCEINLINE void win32_release_lock (MLOCK_T *sl) { - assert(sl->threadid == CURRENT_THREAD); - assert(sl->l != 0); - if (--sl->c == 0) { - sl->threadid = 0; - interlockedexchange (&sl->l, 0); - } -} - -static FORCEINLINE int win32_try_lock (MLOCK_T *sl) { - if (sl->l != 0) { - if (sl->threadid == CURRENT_THREAD) { - ++sl->c; - return 1; - } - } - else { - if (!interlockedexchange(&sl->l, 1)){ - assert(!sl->threadid); - sl->threadid = CURRENT_THREAD; - sl->c = 1; - return 1; - } - } - return 0; -} - -#endif /* WIN32 */ -#else /* USE_SPIN_LOCKS */ - -#ifndef WIN32 -/* pthreads-based locks */ - -#define MLOCK_T pthread_mutex_t -#define CURRENT_THREAD pthread_self() -#define INITIAL_LOCK(sl) pthread_init_lock(sl) -#define ACQUIRE_LOCK(sl) pthread_mutex_lock(sl) -#define RELEASE_LOCK(sl) pthread_mutex_unlock(sl) -#define TRY_LOCK(sl) (!pthread_mutex_trylock(sl)) - -static MLOCK_T malloc_global_mutex = PTHREAD_MUTEX_INITIALIZER; - -/* Cope with old-style linux recursive lock initialization by adding */ -/* skipped internal declaration from pthread.h */ -#ifdef linux -#ifndef PTHREAD_MUTEX_RECURSIVE -extern int pthread_mutexattr_setkind_np __P ((pthread_mutexattr_t *__attr, - int __kind)); -#define PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP -#define pthread_mutexattr_settype(x,y) pthread_mutexattr_setkind_np(x,y) -#endif -#endif - -static int pthread_init_lock (MLOCK_T *sl) { - pthread_mutexattr_t attr; - if (pthread_mutexattr_init(&attr)) return 1; - if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE)) return 1; - if (pthread_mutex_init(sl, &attr)) return 1; - if (pthread_mutexattr_destroy(&attr)) return 1; - return 0; -} - -#else /* WIN32 */ -/* Win32 critical sections */ -#define MLOCK_T CRITICAL_SECTION -#define CURRENT_THREAD GetCurrentThreadId() -#define INITIAL_LOCK(s) (!InitializeCriticalSectionAndSpinCount((s), 0x80000000|4000)) -#define ACQUIRE_LOCK(s) (EnterCriticalSection(sl), 0) -#define RELEASE_LOCK(s) LeaveCriticalSection(sl) -#define TRY_LOCK(s) TryEnterCriticalSection(sl) -#define NEED_GLOBAL_LOCK_INIT - -static MLOCK_T malloc_global_mutex; -static volatile long malloc_global_mutex_status; - -/* Use spin loop to initialize global lock */ -static void init_malloc_global_mutex() { - for (;;) { - long stat = malloc_global_mutex_status; - if (stat > 0) - return; - /* transition to < 0 while initializing, then to > 0) */ - if (stat == 0 && - interlockedcompareexchange(&malloc_global_mutex_status, -1, 0) == 0) { - InitializeCriticalSection(&malloc_global_mutex); - interlockedexchange(&malloc_global_mutex_status,1); - return; - } - SleepEx(0, FALSE); - } -} - -#endif /* WIN32 */ -#endif /* USE_SPIN_LOCKS */ -#endif /* USE_LOCKS == 1 */ - -/* ----------------------- User-defined locks ------------------------ */ - -#if USE_LOCKS > 1 -/* Define your own lock implementation here */ -/* #define INITIAL_LOCK(sl) ... */ -/* #define ACQUIRE_LOCK(sl) ... */ -/* #define RELEASE_LOCK(sl) ... */ -/* #define TRY_LOCK(sl) ... */ -/* static MLOCK_T malloc_global_mutex = ... */ -#endif /* USE_LOCKS > 1 */ - -/* ----------------------- Lock-based state ------------------------ */ - -#if USE_LOCKS -#define USE_LOCK_BIT (2U) -#else /* USE_LOCKS */ -#define USE_LOCK_BIT (0U) -#define INITIAL_LOCK(l) -#endif /* USE_LOCKS */ - -#if USE_LOCKS -#ifndef ACQUIRE_MALLOC_GLOBAL_LOCK -#define ACQUIRE_MALLOC_GLOBAL_LOCK() ACQUIRE_LOCK(&malloc_global_mutex); -#endif -#ifndef RELEASE_MALLOC_GLOBAL_LOCK -#define RELEASE_MALLOC_GLOBAL_LOCK() RELEASE_LOCK(&malloc_global_mutex); -#endif -#else /* USE_LOCKS */ -#define ACQUIRE_MALLOC_GLOBAL_LOCK() -#define RELEASE_MALLOC_GLOBAL_LOCK() -#endif /* USE_LOCKS */ - - -/* ----------------------- Chunk representations ------------------------ */ - -/* - (The following includes lightly edited explanations by Colin Plumb.) - - The malloc_chunk declaration below is misleading (but accurate and - necessary). It declares a "view" into memory allowing access to - necessary fields at known offsets from a given base. - - Chunks of memory are maintained using a `boundary tag' method as - originally described by Knuth. (See the paper by Paul Wilson - ftp://ftp.cs.utexas.edu/pub/garbage/allocsrv.ps for a survey of such - techniques.) Sizes of free chunks are stored both in the front of - each chunk and at the end. This makes consolidating fragmented - chunks into bigger chunks fast. The head fields also hold bits - representing whether chunks are free or in use. - - Here are some pictures to make it clearer. They are "exploded" to - show that the state of a chunk can be thought of as extending from - the high 31 bits of the head field of its header through the - prev_foot and PINUSE_BIT bit of the following chunk header. - - A chunk that's in use looks like: - - chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Size of previous chunk (if P = 0) | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| - | Size of this chunk 1| +-+ - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | | - +- -+ - | | - +- -+ - | : - +- size - sizeof(size_t) available payload bytes -+ - : | - chunk-> +- -+ - | | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1| - | Size of next chunk (may or may not be in use) | +-+ - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - And if it's free, it looks like this: - - chunk-> +- -+ - | User payload (must be in use, or we would have merged!) | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |P| - | Size of this chunk 0| +-+ - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Next pointer | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Prev pointer | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | : - +- size - sizeof(struct chunk) unused bytes -+ - : | - chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Size of this chunk | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0| - | Size of next chunk (must be in use, or we would have merged)| +-+ - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | : - +- User payload -+ - : | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - |0| - +-+ - Note that since we always merge adjacent free chunks, the chunks - adjacent to a free chunk must be in use. - - Given a pointer to a chunk (which can be derived trivially from the - payload pointer) we can, in O(1) time, find out whether the adjacent - chunks are free, and if so, unlink them from the lists that they - are on and merge them with the current chunk. - - Chunks always begin on even word boundaries, so the mem portion - (which is returned to the user) is also on an even word boundary, and - thus at least double-word aligned. - - The P (PINUSE_BIT) bit, stored in the unused low-order bit of the - chunk size (which is always a multiple of two words), is an in-use - bit for the *previous* chunk. If that bit is *clear*, then the - word before the current chunk size contains the previous chunk - size, and can be used to find the front of the previous chunk. - The very first chunk allocated always has this bit set, preventing - access to non-existent (or non-owned) memory. If pinuse is set for - any given chunk, then you CANNOT determine the size of the - previous chunk, and might even get a memory addressing fault when - trying to do so. - - The C (CINUSE_BIT) bit, stored in the unused second-lowest bit of - the chunk size redundantly records whether the current chunk is - inuse (unless the chunk is mmapped). This redundancy enables usage - checks within free and realloc, and reduces indirection when freeing - and consolidating chunks. - - Each freshly allocated chunk must have both cinuse and pinuse set. - That is, each allocated chunk borders either a previously allocated - and still in-use chunk, or the base of its memory arena. This is - ensured by making all allocations from the the `lowest' part of any - found chunk. Further, no free chunk physically borders another one, - so each free chunk is known to be preceded and followed by either - inuse chunks or the ends of memory. - - Note that the `foot' of the current chunk is actually represented - as the prev_foot of the NEXT chunk. This makes it easier to - deal with alignments etc but can be very confusing when trying - to extend or adapt this code. - - The exceptions to all this are - - 1. The special chunk `top' is the top-most available chunk (i.e., - the one bordering the end of available memory). It is treated - specially. Top is never included in any bin, is used only if - no other chunk is available, and is released back to the - system if it is very large (see M_TRIM_THRESHOLD). In effect, - the top chunk is treated as larger (and thus less well - fitting) than any other available chunk. The top chunk - doesn't update its trailing size field since there is no next - contiguous chunk that would have to index off it. However, - space is still allocated for it (TOP_FOOT_SIZE) to enable - separation or merging when space is extended. - - 3. Chunks allocated via mmap, have both cinuse and pinuse bits - cleared in their head fields. Because they are allocated - one-by-one, each must carry its own prev_foot field, which is - also used to hold the offset this chunk has within its mmapped - region, which is needed to preserve alignment. Each mmapped - chunk is trailed by the first two fields of a fake next-chunk - for sake of usage checks. - -*/ - -struct malloc_chunk { - size_t prev_foot; /* Size of previous chunk (if free). */ - size_t head; /* Size and inuse bits. */ - struct malloc_chunk* fd; /* double links -- used only if free. */ - struct malloc_chunk* bk; -}; - -typedef struct malloc_chunk mchunk; -typedef struct malloc_chunk* mchunkptr; -typedef struct malloc_chunk* sbinptr; /* The type of bins of chunks */ -typedef unsigned int bindex_t; /* Described below */ -typedef unsigned int binmap_t; /* Described below */ - -/* ------------------- Chunks sizes and alignments ----------------------- */ - -#define MCHUNK_SIZE (sizeof(mchunk)) - -#if FOOTERS -#define CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) -#else /* FOOTERS */ -#define CHUNK_OVERHEAD (SIZE_T_SIZE) -#endif /* FOOTERS */ - -/* MMapped chunks need a second word of overhead ... */ -#define MMAP_CHUNK_OVERHEAD (TWO_SIZE_T_SIZES) -/* ... and additional padding for fake next-chunk at foot */ -#define MMAP_FOOT_PAD (FOUR_SIZE_T_SIZES) - -/* The smallest size we can malloc is an aligned minimal chunk */ -#define MIN_CHUNK_SIZE\ - ((MCHUNK_SIZE + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) - -/* conversion from malloc headers to user pointers, and back */ -#define chunk2mem(p) ((void*)((char*)(p) + TWO_SIZE_T_SIZES)) -#define mem2chunk(mem) ((mchunkptr)((char*)(mem) - TWO_SIZE_T_SIZES)) -/* chunk associated with aligned address A */ -#define align_as_chunk(A) (mchunkptr)((A) + align_offset(chunk2mem(A))) - -/* Bounds on request (not chunk) sizes. */ -#define MAX_REQUEST ((-MIN_CHUNK_SIZE) << 2) -#define MIN_REQUEST (MIN_CHUNK_SIZE - CHUNK_OVERHEAD - SIZE_T_ONE) - -/* pad request bytes into a usable size */ -#define pad_request(req) \ - (((req) + CHUNK_OVERHEAD + CHUNK_ALIGN_MASK) & ~CHUNK_ALIGN_MASK) - -/* pad request, checking for minimum (but not maximum) */ -#define request2size(req) \ - (((req) < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(req)) - - -/* ------------------ Operations on head and foot fields ----------------- */ - -/* - The head field of a chunk is or'ed with PINUSE_BIT when previous - adjacent chunk in use, and or'ed with CINUSE_BIT if this chunk is in - use, unless mmapped, in which case both bits are cleared. - - FLAG4_BIT is not used by this malloc, but might be useful in extensions. -*/ - -#define PINUSE_BIT (SIZE_T_ONE) -#define CINUSE_BIT (SIZE_T_TWO) -#define FLAG4_BIT (SIZE_T_FOUR) -#define INUSE_BITS (PINUSE_BIT|CINUSE_BIT) -#define FLAG_BITS (PINUSE_BIT|CINUSE_BIT|FLAG4_BIT) - -/* Head value for fenceposts */ -#define FENCEPOST_HEAD (INUSE_BITS|SIZE_T_SIZE) - -/* extraction of fields from head words */ -#define cinuse(p) ((p)->head & CINUSE_BIT) -#define pinuse(p) ((p)->head & PINUSE_BIT) -#define is_inuse(p) (((p)->head & INUSE_BITS) != PINUSE_BIT) -#define is_mmapped(p) (((p)->head & INUSE_BITS) == 0) - -#define chunksize(p) ((p)->head & ~(FLAG_BITS)) - -#define clear_pinuse(p) ((p)->head &= ~PINUSE_BIT) - -/* Treat space at ptr +/- offset as a chunk */ -#define chunk_plus_offset(p, s) ((mchunkptr)(((char*)(p)) + (s))) -#define chunk_minus_offset(p, s) ((mchunkptr)(((char*)(p)) - (s))) - -/* Ptr to next or previous physical malloc_chunk. */ -#define next_chunk(p) ((mchunkptr)( ((char*)(p)) + ((p)->head & ~FLAG_BITS))) -#define prev_chunk(p) ((mchunkptr)( ((char*)(p)) - ((p)->prev_foot) )) - -/* extract next chunk's pinuse bit */ -#define next_pinuse(p) ((next_chunk(p)->head) & PINUSE_BIT) - -/* Get/set size at footer */ -#define get_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot) -#define set_foot(p, s) (((mchunkptr)((char*)(p) + (s)))->prev_foot = (s)) - -/* Set size, pinuse bit, and foot */ -#define set_size_and_pinuse_of_free_chunk(p, s)\ - ((p)->head = (s|PINUSE_BIT), set_foot(p, s)) - -/* Set size, pinuse bit, foot, and clear next pinuse */ -#define set_free_with_pinuse(p, s, n)\ - (clear_pinuse(n), set_size_and_pinuse_of_free_chunk(p, s)) - -/* Get the internal overhead associated with chunk p */ -#define overhead_for(p)\ - (is_mmapped(p)? MMAP_CHUNK_OVERHEAD : CHUNK_OVERHEAD) - -/* Return true if malloced space is not necessarily cleared */ -#if MMAP_CLEARS -#define calloc_must_clear(p) (!is_mmapped(p)) -#else /* MMAP_CLEARS */ -#define calloc_must_clear(p) (1) -#endif /* MMAP_CLEARS */ - -/* ---------------------- Overlaid data structures ----------------------- */ - -/* - When chunks are not in use, they are treated as nodes of either - lists or trees. - - "Small" chunks are stored in circular doubly-linked lists, and look - like this: - - chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Size of previous chunk | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - `head:' | Size of chunk, in bytes |P| - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Forward pointer to next chunk in list | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Back pointer to previous chunk in list | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Unused space (may be 0 bytes long) . - . . - . | -nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - `foot:' | Size of chunk, in bytes | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - Larger chunks are kept in a form of bitwise digital trees (aka - tries) keyed on chunksizes. Because malloc_tree_chunks are only for - free chunks greater than 256 bytes, their size doesn't impose any - constraints on user chunk sizes. Each node looks like: - - chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Size of previous chunk | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - `head:' | Size of chunk, in bytes |P| - mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Forward pointer to next chunk of same size | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Back pointer to previous chunk of same size | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Pointer to left child (child[0]) | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Pointer to right child (child[1]) | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Pointer to parent | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | bin index of this chunk | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | Unused space . - . | -nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - `foot:' | Size of chunk, in bytes | - +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - - Each tree holding treenodes is a tree of unique chunk sizes. Chunks - of the same size are arranged in a circularly-linked list, with only - the oldest chunk (the next to be used, in our FIFO ordering) - actually in the tree. (Tree members are distinguished by a non-null - parent pointer.) If a chunk with the same size an an existing node - is inserted, it is linked off the existing node using pointers that - work in the same way as fd/bk pointers of small chunks. - - Each tree contains a power of 2 sized range of chunk sizes (the - smallest is 0x100 <= x < 0x180), which is is divided in half at each - tree level, with the chunks in the smaller half of the range (0x100 - <= x < 0x140 for the top nose) in the left subtree and the larger - half (0x140 <= x < 0x180) in the right subtree. This is, of course, - done by inspecting individual bits. - - Using these rules, each node's left subtree contains all smaller - sizes than its right subtree. However, the node at the root of each - subtree has no particular ordering relationship to either. (The - dividing line between the subtree sizes is based on trie relation.) - If we remove the last chunk of a given size from the interior of the - tree, we need to replace it with a leaf node. The tree ordering - rules permit a node to be replaced by any leaf below it. - - The smallest chunk in a tree (a common operation in a best-fit - allocator) can be found by walking a path to the leftmost leaf in - the tree. Unlike a usual binary tree, where we follow left child - pointers until we reach a null, here we follow the right child - pointer any time the left one is null, until we reach a leaf with - both child pointers null. The smallest chunk in the tree will be - somewhere along that path. - - The worst case number of steps to add, find, or remove a node is - bounded by the number of bits differentiating chunks within - bins. Under current bin calculations, this ranges from 6 up to 21 - (for 32 bit sizes) or up to 53 (for 64 bit sizes). The typical case - is of course much better. -*/ - -struct malloc_tree_chunk { - /* The first four fields must be compatible with malloc_chunk */ - size_t prev_foot; - size_t head; - struct malloc_tree_chunk* fd; - struct malloc_tree_chunk* bk; - - struct malloc_tree_chunk* child[2]; - struct malloc_tree_chunk* parent; - bindex_t index; -}; - -typedef struct malloc_tree_chunk tchunk; -typedef struct malloc_tree_chunk* tchunkptr; -typedef struct malloc_tree_chunk* tbinptr; /* The type of bins of trees */ - -/* A little helper macro for trees */ -#define leftmost_child(t) ((t)->child[0] != 0? (t)->child[0] : (t)->child[1]) - -/* ----------------------------- Segments -------------------------------- */ - -/* - Each malloc space may include non-contiguous segments, held in a - list headed by an embedded malloc_segment record representing the - top-most space. Segments also include flags holding properties of - the space. Large chunks that are directly allocated by mmap are not - included in this list. They are instead independently created and - destroyed without otherwise keeping track of them. - - Segment management mainly comes into play for spaces allocated by - MMAP. Any call to MMAP might or might not return memory that is - adjacent to an existing segment. MORECORE normally contiguously - extends the current space, so this space is almost always adjacent, - which is simpler and faster to deal with. (This is why MORECORE is - used preferentially to MMAP when both are available -- see - sys_alloc.) When allocating using MMAP, we don't use any of the - hinting mechanisms (inconsistently) supported in various - implementations of unix mmap, or distinguish reserving from - committing memory. Instead, we just ask for space, and exploit - contiguity when we get it. It is probably possible to do - better than this on some systems, but no general scheme seems - to be significantly better. - - Management entails a simpler variant of the consolidation scheme - used for chunks to reduce fragmentation -- new adjacent memory is - normally prepended or appended to an existing segment. However, - there are limitations compared to chunk consolidation that mostly - reflect the fact that segment processing is relatively infrequent - (occurring only when getting memory from system) and that we - don't expect to have huge numbers of segments: - - * Segments are not indexed, so traversal requires linear scans. (It - would be possible to index these, but is not worth the extra - overhead and complexity for most programs on most platforms.) - * New segments are only appended to old ones when holding top-most - memory; if they cannot be prepended to others, they are held in - different segments. - - Except for the top-most segment of an mstate, each segment record - is kept at the tail of its segment. Segments are added by pushing - segment records onto the list headed by &mstate.seg for the - containing mstate. - - Segment flags control allocation/merge/deallocation policies: - * If EXTERN_BIT set, then we did not allocate this segment, - and so should not try to deallocate or merge with others. - (This currently holds only for the initial segment passed - into create_mspace_with_base.) - * If USE_MMAP_BIT set, the segment may be merged with - other surrounding mmapped segments and trimmed/de-allocated - using munmap. - * If neither bit is set, then the segment was obtained using - MORECORE so can be merged with surrounding MORECORE'd segments - and deallocated/trimmed using MORECORE with negative arguments. -*/ - -struct malloc_segment { - char* base; /* base address */ - size_t size; /* allocated size */ - struct malloc_segment* next; /* ptr to next segment */ - flag_t sflags; /* mmap and extern flag */ -}; - -#define is_mmapped_segment(S) ((S)->sflags & USE_MMAP_BIT) -#define is_extern_segment(S) ((S)->sflags & EXTERN_BIT) - -typedef struct malloc_segment msegment; -typedef struct malloc_segment* msegmentptr; - -/* ---------------------------- malloc_state ----------------------------- */ - -/* - A malloc_state holds all of the bookkeeping for a space. - The main fields are: - - Top - The topmost chunk of the currently active segment. Its size is - cached in topsize. The actual size of topmost space is - topsize+TOP_FOOT_SIZE, which includes space reserved for adding - fenceposts and segment records if necessary when getting more - space from the system. The size at which to autotrim top is - cached from mparams in trim_check, except that it is disabled if - an autotrim fails. - - Designated victim (dv) - This is the preferred chunk for servicing small requests that - don't have exact fits. It is normally the chunk split off most - recently to service another small request. Its size is cached in - dvsize. The link fields of this chunk are not maintained since it - is not kept in a bin. - - SmallBins - An array of bin headers for free chunks. These bins hold chunks - with sizes less than MIN_LARGE_SIZE bytes. Each bin contains - chunks of all the same size, spaced 8 bytes apart. To simplify - use in double-linked lists, each bin header acts as a malloc_chunk - pointing to the real first node, if it exists (else pointing to - itself). This avoids special-casing for headers. But to avoid - waste, we allocate only the fd/bk pointers of bins, and then use - repositioning tricks to treat these as the fields of a chunk. - - TreeBins - Treebins are pointers to the roots of trees holding a range of - sizes. There are 2 equally spaced treebins for each power of two - from TREE_SHIFT to TREE_SHIFT+16. The last bin holds anything - larger. - - Bin maps - There is one bit map for small bins ("smallmap") and one for - treebins ("treemap). Each bin sets its bit when non-empty, and - clears the bit when empty. Bit operations are then used to avoid - bin-by-bin searching -- nearly all "search" is done without ever - looking at bins that won't be selected. The bit maps - conservatively use 32 bits per map word, even if on 64bit system. - For a good description of some of the bit-based techniques used - here, see Henry S. Warren Jr's book "Hacker's Delight" (and - supplement at http://hackersdelight.org/). Many of these are - intended to reduce the branchiness of paths through malloc etc, as - well as to reduce the number of memory locations read or written. - - Segments - A list of segments headed by an embedded malloc_segment record - representing the initial space. - - Address check support - The least_addr field is the least address ever obtained from - MORECORE or MMAP. Attempted frees and reallocs of any address less - than this are trapped (unless INSECURE is defined). - - Magic tag - A cross-check field that should always hold same value as mparams.magic. - - Flags - Bits recording whether to use MMAP, locks, or contiguous MORECORE - - Statistics - Each space keeps track of current and maximum system memory - obtained via MORECORE or MMAP. - - Trim support - Fields holding the amount of unused topmost memory that should trigger - timming, and a counter to force periodic scanning to release unused - non-topmost segments. - - Locking - If USE_LOCKS is defined, the "mutex" lock is acquired and released - around every public call using this mspace. - - Extension support - A void* pointer and a size_t field that can be used to help implement - extensions to this malloc. -*/ - -/* Bin types, widths and sizes */ -#define NSMALLBINS (32U) -#define NTREEBINS (32U) -#define SMALLBIN_SHIFT (3U) -#define SMALLBIN_WIDTH (SIZE_T_ONE << SMALLBIN_SHIFT) -#define TREEBIN_SHIFT (8U) -#define MIN_LARGE_SIZE (SIZE_T_ONE << TREEBIN_SHIFT) -#define MAX_SMALL_SIZE (MIN_LARGE_SIZE - SIZE_T_ONE) -#define MAX_SMALL_REQUEST (MAX_SMALL_SIZE - CHUNK_ALIGN_MASK - CHUNK_OVERHEAD) - -struct malloc_state { - binmap_t smallmap; - binmap_t treemap; - size_t dvsize; - size_t topsize; - char* least_addr; - mchunkptr dv; - mchunkptr top; - size_t trim_check; - size_t release_checks; - size_t magic; - mchunkptr smallbins[(NSMALLBINS+1)*2]; - tbinptr treebins[NTREEBINS]; - size_t footprint; - size_t max_footprint; - flag_t mflags; - msegment seg; -#if USE_LOCKS - MLOCK_T mutex; /* locate lock among fields that rarely change */ -#endif /* USE_LOCKS */ - void* extp; /* Unused but available for extensions */ - size_t exts; -}; - -typedef struct malloc_state* mstate; - -/* ------------- Global malloc_state and malloc_params ------------------- */ - -#if !ONLY_MSPACES - -/* The global malloc_state used for all non-"mspace" calls */ -static struct malloc_state _gm_; -#define gm (&_gm_) -#define is_global(M) ((M) == &_gm_) - -#endif /* !ONLY_MSPACES */ - -#define is_initialized(M) ((M)->top != 0) - -/* -------------------------- system alloc setup ------------------------- */ - -/* Operations on mflags */ - -#define use_lock(M) ((M)->mflags & USE_LOCK_BIT) -#define enable_lock(M) ((M)->mflags |= USE_LOCK_BIT) -#define disable_lock(M) ((M)->mflags &= ~USE_LOCK_BIT) - -#define use_mmap(M) ((M)->mflags & USE_MMAP_BIT) -#define enable_mmap(M) ((M)->mflags |= USE_MMAP_BIT) -#define disable_mmap(M) ((M)->mflags &= ~USE_MMAP_BIT) - -#define use_noncontiguous(M) ((M)->mflags & USE_NONCONTIGUOUS_BIT) -#define disable_contiguous(M) ((M)->mflags |= USE_NONCONTIGUOUS_BIT) - -#define set_lock(M,L)\ - ((M)->mflags = (L)?\ - ((M)->mflags | USE_LOCK_BIT) :\ - ((M)->mflags & ~USE_LOCK_BIT)) - -/* page-align a size */ -#define page_align(S)\ - (((S) + (mparams.page_size - SIZE_T_ONE)) & ~(mparams.page_size - SIZE_T_ONE)) - -/* granularity-align a size */ -#define granularity_align(S)\ - (((S) + (mparams.granularity - SIZE_T_ONE))\ - & ~(mparams.granularity - SIZE_T_ONE)) - - -/* For mmap, use granularity alignment on windows, else page-align */ -#ifdef WIN32 -#define mmap_align(S) granularity_align(S) -#else -#define mmap_align(S) page_align(S) -#endif - -/* For sys_alloc, enough padding to ensure can malloc request on success */ -#define SYS_ALLOC_PADDING (TOP_FOOT_SIZE + MALLOC_ALIGNMENT) - -#define is_page_aligned(S)\ - (((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0) -#define is_granularity_aligned(S)\ - (((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0) - -/* True if segment S holds address A */ -#define segment_holds(S, A)\ - ((char*)(A) >= S->base && (char*)(A) < S->base + S->size) - -/* Return segment holding given address */ -static msegmentptr segment_holding(mstate m, char* addr) { - msegmentptr sp = &m->seg; - for (;;) { - if (addr >= sp->base && addr < sp->base + sp->size) - return sp; - if ((sp = sp->next) == 0) - return 0; - } -} - -/* Return true if segment contains a segment link */ -static int has_segment_link(mstate m, msegmentptr ss) { - msegmentptr sp = &m->seg; - for (;;) { - if ((char*)sp >= ss->base && (char*)sp < ss->base + ss->size) - return 1; - if ((sp = sp->next) == 0) - return 0; - } -} - -#ifndef MORECORE_CANNOT_TRIM -#define should_trim(M,s) ((s) > (M)->trim_check) -#else /* MORECORE_CANNOT_TRIM */ -#define should_trim(M,s) (0) -#endif /* MORECORE_CANNOT_TRIM */ - -/* - TOP_FOOT_SIZE is padding at the end of a segment, including space - that may be needed to place segment records and fenceposts when new - noncontiguous segments are added. -*/ -#define TOP_FOOT_SIZE\ - (align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE) - - -/* ------------------------------- Hooks -------------------------------- */ - -/* - PREACTION should be defined to return 0 on success, and nonzero on - failure. If you are not using locking, you can redefine these to do - anything you like. -*/ - -#if USE_LOCKS - -#define PREACTION(M) ((use_lock(M))? ACQUIRE_LOCK(&(M)->mutex) : 0) -#define POSTACTION(M) { if (use_lock(M)) RELEASE_LOCK(&(M)->mutex); } -#else /* USE_LOCKS */ - -#ifndef PREACTION -#define PREACTION(M) (0) -#endif /* PREACTION */ - -#ifndef POSTACTION -#define POSTACTION(M) -#endif /* POSTACTION */ - -#endif /* USE_LOCKS */ - -/* - CORRUPTION_ERROR_ACTION is triggered upon detected bad addresses. - USAGE_ERROR_ACTION is triggered on detected bad frees and - reallocs. The argument p is an address that might have triggered the - fault. It is ignored by the two predefined actions, but might be - useful in custom actions that try to help diagnose errors. -*/ - -#if PROCEED_ON_ERROR - -/* A count of the number of corruption errors causing resets */ -int malloc_corruption_error_count; - -/* default corruption action */ -static void reset_on_error(mstate m); - -#define CORRUPTION_ERROR_ACTION(m) reset_on_error(m) -#define USAGE_ERROR_ACTION(m, p) - -#else /* PROCEED_ON_ERROR */ - -#ifndef CORRUPTION_ERROR_ACTION -#define CORRUPTION_ERROR_ACTION(m) ABORT -#endif /* CORRUPTION_ERROR_ACTION */ - -#ifndef USAGE_ERROR_ACTION -#define USAGE_ERROR_ACTION(m,p) ABORT -#endif /* USAGE_ERROR_ACTION */ - -#endif /* PROCEED_ON_ERROR */ - -/* -------------------------- Debugging setup ---------------------------- */ - -#if ! DEBUG - -#define check_free_chunk(M,P) -#define check_inuse_chunk(M,P) -#define check_malloced_chunk(M,P,N) -#define check_mmapped_chunk(M,P) -#define check_malloc_state(M) -#define check_top_chunk(M,P) - -#else /* DEBUG */ -#define check_free_chunk(M,P) do_check_free_chunk(M,P) -#define check_inuse_chunk(M,P) do_check_inuse_chunk(M,P) -#define check_top_chunk(M,P) do_check_top_chunk(M,P) -#define check_malloced_chunk(M,P,N) do_check_malloced_chunk(M,P,N) -#define check_mmapped_chunk(M,P) do_check_mmapped_chunk(M,P) -#define check_malloc_state(M) do_check_malloc_state(M) - -static void do_check_any_chunk(mstate m, mchunkptr p); -static void do_check_top_chunk(mstate m, mchunkptr p); -static void do_check_mmapped_chunk(mstate m, mchunkptr p); -static void do_check_inuse_chunk(mstate m, mchunkptr p); -static void do_check_free_chunk(mstate m, mchunkptr p); -static void do_check_malloced_chunk(mstate m, void* mem, size_t s); -static void do_check_tree(mstate m, tchunkptr t); -static void do_check_treebin(mstate m, bindex_t i); -static void do_check_smallbin(mstate m, bindex_t i); -static void do_check_malloc_state(mstate m); -static int bin_find(mstate m, mchunkptr x); -static size_t traverse_and_check(mstate m); -#endif /* DEBUG */ - -/* ---------------------------- Indexing Bins ---------------------------- */ - -#define is_small(s) (((s) >> SMALLBIN_SHIFT) < NSMALLBINS) -#define small_index(s) (bindex_t)((s) >> SMALLBIN_SHIFT) -#define small_index2size(i) ((i) << SMALLBIN_SHIFT) -#define MIN_SMALL_INDEX (small_index(MIN_CHUNK_SIZE)) - -/* addressing by index. See above about smallbin repositioning */ -#define smallbin_at(M, i) ((sbinptr)((char*)&((M)->smallbins[(i)<<1]))) -#define treebin_at(M,i) (&((M)->treebins[i])) - -/* assign tree index for size S to variable I. Use x86 asm if possible */ -#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) -#define compute_tree_index(S, I)\ -{\ - unsigned int X = S >> TREEBIN_SHIFT;\ - if (X == 0)\ - I = 0;\ - else if (X > 0xFFFF)\ - I = NTREEBINS-1;\ - else {\ - unsigned int K;\ - __asm__("bsrl\t%1, %0\n\t" : "=r" (K) : "g" (X));\ - I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\ - }\ -} - -#elif defined (__INTEL_COMPILER) -#define compute_tree_index(S, I)\ -{\ - size_t X = S >> TREEBIN_SHIFT;\ - if (X == 0)\ - I = 0;\ - else if (X > 0xFFFF)\ - I = NTREEBINS-1;\ - else {\ - unsigned int K = _bit_scan_reverse (X); \ - I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\ - }\ -} - -#elif defined(_MSC_VER) && _MSC_VER>=1300 -#define compute_tree_index(S, I)\ -{\ - size_t X = S >> TREEBIN_SHIFT;\ - if (X == 0)\ - I = 0;\ - else if (X > 0xFFFF)\ - I = NTREEBINS-1;\ - else {\ - unsigned int K;\ - _BitScanReverse((DWORD *) &K, (DWORD) X);\ - I = (bindex_t)((K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1)));\ - }\ -} - -#else /* GNUC */ -#define compute_tree_index(S, I)\ -{\ - size_t X = S >> TREEBIN_SHIFT;\ - if (X == 0)\ - I = 0;\ - else if (X > 0xFFFF)\ - I = NTREEBINS-1;\ - else {\ - unsigned int Y = (unsigned int)X;\ - unsigned int N = ((Y - 0x100) >> 16) & 8;\ - unsigned int K = (((Y <<= N) - 0x1000) >> 16) & 4;\ - N += K;\ - N += K = (((Y <<= K) - 0x4000) >> 16) & 2;\ - K = 14 - N + ((Y <<= K) >> 15);\ - I = (K << 1) + ((S >> (K + (TREEBIN_SHIFT-1)) & 1));\ - }\ -} -#endif /* GNUC */ - -/* Bit representing maximum resolved size in a treebin at i */ -#define bit_for_tree_index(i) \ - (i == NTREEBINS-1)? (SIZE_T_BITSIZE-1) : (((i) >> 1) + TREEBIN_SHIFT - 2) - -/* Shift placing maximum resolved bit in a treebin at i as sign bit */ -#define leftshift_for_tree_index(i) \ - ((i == NTREEBINS-1)? 0 : \ - ((SIZE_T_BITSIZE-SIZE_T_ONE) - (((i) >> 1) + TREEBIN_SHIFT - 2))) - -/* The size of the smallest chunk held in bin with index i */ -#define minsize_for_tree_index(i) \ - ((SIZE_T_ONE << (((i) >> 1) + TREEBIN_SHIFT)) | \ - (((size_t)((i) & SIZE_T_ONE)) << (((i) >> 1) + TREEBIN_SHIFT - 1))) - - -/* ------------------------ Operations on bin maps ----------------------- */ - -/* bit corresponding to given index */ -#define idx2bit(i) ((binmap_t)(1) << (i)) - -/* Mark/Clear bits with given index */ -#define mark_smallmap(M,i) ((M)->smallmap |= idx2bit(i)) -#define clear_smallmap(M,i) ((M)->smallmap &= ~idx2bit(i)) -#define smallmap_is_marked(M,i) ((M)->smallmap & idx2bit(i)) - -#define mark_treemap(M,i) ((M)->treemap |= idx2bit(i)) -#define clear_treemap(M,i) ((M)->treemap &= ~idx2bit(i)) -#define treemap_is_marked(M,i) ((M)->treemap & idx2bit(i)) - -/* isolate the least set bit of a bitmap */ -#define least_bit(x) ((x) & -(x)) - -/* mask with all bits to left of least bit of x on */ -#define left_bits(x) ((x<<1) | -(x<<1)) - -/* mask with all bits to left of or equal to least bit of x on */ -#define same_or_left_bits(x) ((x) | -(x)) - -/* index corresponding to given bit. Use x86 asm if possible */ - -#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) -#define compute_bit2idx(X, I)\ -{\ - unsigned int J;\ - __asm__("bsfl\t%1, %0\n\t" : "=r" (J) : "g" (X));\ - I = (bindex_t)J;\ -} - -#elif defined (__INTEL_COMPILER) -#define compute_bit2idx(X, I)\ -{\ - unsigned int J;\ - J = _bit_scan_forward (X); \ - I = (bindex_t)J;\ -} - -#elif defined(_MSC_VER) && _MSC_VER>=1300 -#define compute_bit2idx(X, I)\ -{\ - unsigned int J;\ - _BitScanForward((DWORD *) &J, X);\ - I = (bindex_t)J;\ -} - -#elif USE_BUILTIN_FFS -#define compute_bit2idx(X, I) I = ffs(X)-1 - -#else -#define compute_bit2idx(X, I)\ -{\ - unsigned int Y = X - 1;\ - unsigned int K = Y >> (16-4) & 16;\ - unsigned int N = K; Y >>= K;\ - N += K = Y >> (8-3) & 8; Y >>= K;\ - N += K = Y >> (4-2) & 4; Y >>= K;\ - N += K = Y >> (2-1) & 2; Y >>= K;\ - N += K = Y >> (1-0) & 1; Y >>= K;\ - I = (bindex_t)(N + Y);\ -} -#endif /* GNUC */ - - -/* ----------------------- Runtime Check Support ------------------------- */ - -/* - For security, the main invariant is that malloc/free/etc never - writes to a static address other than malloc_state, unless static - malloc_state itself has been corrupted, which cannot occur via - malloc (because of these checks). In essence this means that we - believe all pointers, sizes, maps etc held in malloc_state, but - check all of those linked or offsetted from other embedded data - structures. These checks are interspersed with main code in a way - that tends to minimize their run-time cost. - - When FOOTERS is defined, in addition to range checking, we also - verify footer fields of inuse chunks, which can be used guarantee - that the mstate controlling malloc/free is intact. This is a - streamlined version of the approach described by William Robertson - et al in "Run-time Detection of Heap-based Overflows" LISA'03 - http://www.usenix.org/events/lisa03/tech/robertson.html The footer - of an inuse chunk holds the xor of its mstate and a random seed, - that is checked upon calls to free() and realloc(). This is - (probablistically) unguessable from outside the program, but can be - computed by any code successfully malloc'ing any chunk, so does not - itself provide protection against code that has already broken - security through some other means. Unlike Robertson et al, we - always dynamically check addresses of all offset chunks (previous, - next, etc). This turns out to be cheaper than relying on hashes. -*/ - -#if !INSECURE -/* Check if address a is at least as high as any from MORECORE or MMAP */ -#define ok_address(M, a) ((char*)(a) >= (M)->least_addr) -/* Check if address of next chunk n is higher than base chunk p */ -#define ok_next(p, n) ((char*)(p) < (char*)(n)) -/* Check if p has inuse status */ -#define ok_inuse(p) is_inuse(p) -/* Check if p has its pinuse bit on */ -#define ok_pinuse(p) pinuse(p) - -#else /* !INSECURE */ -#define ok_address(M, a) (1) -#define ok_next(b, n) (1) -#define ok_inuse(p) (1) -#define ok_pinuse(p) (1) -#endif /* !INSECURE */ - -#if (FOOTERS && !INSECURE) -/* Check if (alleged) mstate m has expected magic field */ -#define ok_magic(M) ((M)->magic == mparams.magic) -#else /* (FOOTERS && !INSECURE) */ -#define ok_magic(M) (1) -#endif /* (FOOTERS && !INSECURE) */ - - -/* In gcc, use __builtin_expect to minimize impact of checks */ -#if !INSECURE -#if defined(__GNUC__) && __GNUC__ >= 3 -#define RTCHECK(e) __builtin_expect(e, 1) -#else /* GNUC */ -#define RTCHECK(e) (e) -#endif /* GNUC */ -#else /* !INSECURE */ -#define RTCHECK(e) (1) -#endif /* !INSECURE */ - -/* macros to set up inuse chunks with or without footers */ - -#if !FOOTERS - -#define mark_inuse_foot(M,p,s) - -/* Macros for setting head/foot of non-mmapped chunks */ - -/* Set cinuse bit and pinuse bit of next chunk */ -#define set_inuse(M,p,s)\ - ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ - ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) - -/* Set cinuse and pinuse of this chunk and pinuse of next chunk */ -#define set_inuse_and_pinuse(M,p,s)\ - ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ - ((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT) - -/* Set size, cinuse and pinuse bit of this chunk */ -#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ - ((p)->head = (s|PINUSE_BIT|CINUSE_BIT)) - -#else /* FOOTERS */ - -/* Set foot of inuse chunk to be xor of mstate and seed */ -#define mark_inuse_foot(M,p,s)\ - (((mchunkptr)((char*)(p) + (s)))->prev_foot = ((size_t)(M) ^ mparams.magic)) - -#define get_mstate_for(p)\ - ((mstate)(((mchunkptr)((char*)(p) +\ - (chunksize(p))))->prev_foot ^ mparams.magic)) - -#define set_inuse(M,p,s)\ - ((p)->head = (((p)->head & PINUSE_BIT)|s|CINUSE_BIT),\ - (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT), \ - mark_inuse_foot(M,p,s)) - -#define set_inuse_and_pinuse(M,p,s)\ - ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ - (((mchunkptr)(((char*)(p)) + (s)))->head |= PINUSE_BIT),\ - mark_inuse_foot(M,p,s)) - -#define set_size_and_pinuse_of_inuse_chunk(M, p, s)\ - ((p)->head = (s|PINUSE_BIT|CINUSE_BIT),\ - mark_inuse_foot(M, p, s)) - -#endif /* !FOOTERS */ - -/* ---------------------------- setting mparams -------------------------- */ - -#if defined(ENABLE_LARGE_PAGES) && defined(WIN32) -typedef size_t (WINAPI *GetLargePageMinimum_t)(void); -#endif - -/* Initialize mparams */ -static int init_mparams(void) { -#ifdef NEED_GLOBAL_LOCK_INIT - if (malloc_global_mutex_status <= 0) - init_malloc_global_mutex(); -#endif - - ACQUIRE_MALLOC_GLOBAL_LOCK(); - if (mparams.magic == 0) { - size_t magic; - size_t psize; - size_t gsize; - -#ifndef WIN32 - psize = malloc_getpagesize; - gsize = ((DEFAULT_GRANULARITY != 0)? DEFAULT_GRANULARITY : psize); -#else /* WIN32 */ - { - SYSTEM_INFO system_info; - GetSystemInfo(&system_info); - psize = system_info.dwPageSize; - gsize = ((DEFAULT_GRANULARITY != 0)? - DEFAULT_GRANULARITY : system_info.dwAllocationGranularity); -#ifdef ENABLE_LARGE_PAGES - { - GetLargePageMinimum_t GetLargePageMinimum_ = (GetLargePageMinimum_t) GetProcAddress(GetModuleHandle("kernel32.dll"), "GetLargePageMinimum"); - if(GetLargePageMinimum_) { - size_t largepagesize = GetLargePageMinimum_(); - if(largepagesize) { - psize = largepagesize; - gsize = ((DEFAULT_GRANULARITY != 0)? - DEFAULT_GRANULARITY : largepagesize); - if(gsize < largepagesize) gsize = largepagesize; - } - } - } -#endif - } -#endif /* WIN32 */ - - /* Sanity-check configuration: - size_t must be unsigned and as wide as pointer type. - ints must be at least 4 bytes. - alignment must be at least 8. - Alignment, min chunk size, and page size must all be powers of 2. - */ - if ((sizeof(size_t) != sizeof(char*)) || - (MAX_SIZE_T < MIN_CHUNK_SIZE) || - (sizeof(int) < 4) || - (MALLOC_ALIGNMENT < (size_t)8U) || - ((MALLOC_ALIGNMENT & (MALLOC_ALIGNMENT-SIZE_T_ONE)) != 0) || - ((MCHUNK_SIZE & (MCHUNK_SIZE-SIZE_T_ONE)) != 0) || - ((gsize & (gsize-SIZE_T_ONE)) != 0) || - ((psize & (psize-SIZE_T_ONE)) != 0)) - ABORT; - - mparams.granularity = gsize; - mparams.page_size = psize; - mparams.mmap_threshold = DEFAULT_MMAP_THRESHOLD; - mparams.trim_threshold = DEFAULT_TRIM_THRESHOLD; -#if MORECORE_CONTIGUOUS - mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT; -#else /* MORECORE_CONTIGUOUS */ - mparams.default_mflags = USE_LOCK_BIT|USE_MMAP_BIT|USE_NONCONTIGUOUS_BIT; -#endif /* MORECORE_CONTIGUOUS */ - -#if !ONLY_MSPACES - /* Set up lock for main malloc area */ - gm->mflags = mparams.default_mflags; - INITIAL_LOCK(&gm->mutex); -#endif - - { -#if USE_DEV_RANDOM - int fd; - unsigned char buf[sizeof(size_t)]; - /* Try to use /dev/urandom, else fall back on using time */ - if ((fd = open("/dev/urandom", O_RDONLY)) >= 0 && - read(fd, buf, sizeof(buf)) == sizeof(buf)) { - magic = *((size_t *) buf); - close(fd); - } - else -#endif /* USE_DEV_RANDOM */ -#ifdef WIN32 - magic = (size_t)(GetTickCount() ^ (size_t)0x55555555U); -#else - magic = (size_t)(time(0) ^ (size_t)0x55555555U); -#endif - magic |= (size_t)8U; /* ensure nonzero */ - magic &= ~(size_t)7U; /* improve chances of fault for bad values */ - mparams.magic = magic; - } - } - - RELEASE_MALLOC_GLOBAL_LOCK(); - return 1; -} - -/* support for mallopt */ -static int change_mparam(int param_number, int value) { - size_t val; - ensure_initialization(); - val = (value == -1)? MAX_SIZE_T : (size_t)value; - switch(param_number) { - case M_TRIM_THRESHOLD: - mparams.trim_threshold = val; - return 1; - case M_GRANULARITY: - if (val >= mparams.page_size && ((val & (val-1)) == 0)) { - mparams.granularity = val; - return 1; - } - else - return 0; - case M_MMAP_THRESHOLD: - mparams.mmap_threshold = val; - return 1; - default: - return 0; - } -} - -#if DEBUG -/* ------------------------- Debugging Support --------------------------- */ - -/* Check properties of any chunk, whether free, inuse, mmapped etc */ -static void do_check_any_chunk(mstate m, mchunkptr p) { - assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); - assert(ok_address(m, p)); -} - -/* Check properties of top chunk */ -static void do_check_top_chunk(mstate m, mchunkptr p) { - msegmentptr sp = segment_holding(m, (char*)p); - size_t sz = p->head & ~INUSE_BITS; /* third-lowest bit can be set! */ - assert(sp != 0); - assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); - assert(ok_address(m, p)); - assert(sz == m->topsize); - assert(sz > 0); - assert(sz == ((sp->base + sp->size) - (char*)p) - TOP_FOOT_SIZE); - assert(pinuse(p)); - assert(!pinuse(chunk_plus_offset(p, sz))); -} - -/* Check properties of (inuse) mmapped chunks */ -static void do_check_mmapped_chunk(mstate m, mchunkptr p) { - size_t sz = chunksize(p); - size_t len = (sz + (p->prev_foot) + MMAP_FOOT_PAD); - assert(is_mmapped(p)); - assert(use_mmap(m)); - assert((is_aligned(chunk2mem(p))) || (p->head == FENCEPOST_HEAD)); - assert(ok_address(m, p)); - assert(!is_small(sz)); - assert((len & (mparams.page_size-SIZE_T_ONE)) == 0); - assert(chunk_plus_offset(p, sz)->head == FENCEPOST_HEAD); - assert(chunk_plus_offset(p, sz+SIZE_T_SIZE)->head == 0); -} - -/* Check properties of inuse chunks */ -static void do_check_inuse_chunk(mstate m, mchunkptr p) { - do_check_any_chunk(m, p); - assert(is_inuse(p)); - assert(next_pinuse(p)); - /* If not pinuse and not mmapped, previous chunk has OK offset */ - assert(is_mmapped(p) || pinuse(p) || next_chunk(prev_chunk(p)) == p); - if (is_mmapped(p)) - do_check_mmapped_chunk(m, p); -} - -/* Check properties of free chunks */ -static void do_check_free_chunk(mstate m, mchunkptr p) { - size_t sz = chunksize(p); - mchunkptr next = chunk_plus_offset(p, sz); - do_check_any_chunk(m, p); - assert(!is_inuse(p)); - assert(!next_pinuse(p)); - assert (!is_mmapped(p)); - if (p != m->dv && p != m->top) { - if (sz >= MIN_CHUNK_SIZE) { - assert((sz & CHUNK_ALIGN_MASK) == 0); - assert(is_aligned(chunk2mem(p))); - assert(next->prev_foot == sz); - assert(pinuse(p)); - assert (next == m->top || is_inuse(next)); - assert(p->fd->bk == p); - assert(p->bk->fd == p); - } - else /* markers are always of size SIZE_T_SIZE */ - assert(sz == SIZE_T_SIZE); - } -} - -/* Check properties of malloced chunks at the point they are malloced */ -static void do_check_malloced_chunk(mstate m, void* mem, size_t s) { - if (mem != 0) { - mchunkptr p = mem2chunk(mem); - size_t sz = p->head & ~INUSE_BITS; - do_check_inuse_chunk(m, p); - assert((sz & CHUNK_ALIGN_MASK) == 0); - assert(sz >= MIN_CHUNK_SIZE); - assert(sz >= s); - /* unless mmapped, size is less than MIN_CHUNK_SIZE more than request */ - assert(is_mmapped(p) || sz < (s + MIN_CHUNK_SIZE)); - } -} - -/* Check a tree and its subtrees. */ -static void do_check_tree(mstate m, tchunkptr t) { - tchunkptr head = 0; - tchunkptr u = t; - bindex_t tindex = t->index; - size_t tsize = chunksize(t); - bindex_t idx; - compute_tree_index(tsize, idx); - assert(tindex == idx); - assert(tsize >= MIN_LARGE_SIZE); - assert(tsize >= minsize_for_tree_index(idx)); - assert((idx == NTREEBINS-1) || (tsize < minsize_for_tree_index((idx+1)))); - - do { /* traverse through chain of same-sized nodes */ - do_check_any_chunk(m, ((mchunkptr)u)); - assert(u->index == tindex); - assert(chunksize(u) == tsize); - assert(!is_inuse(u)); - assert(!next_pinuse(u)); - assert(u->fd->bk == u); - assert(u->bk->fd == u); - if (u->parent == 0) { - assert(u->child[0] == 0); - assert(u->child[1] == 0); - } - else { - assert(head == 0); /* only one node on chain has parent */ - head = u; - assert(u->parent != u); - assert (u->parent->child[0] == u || - u->parent->child[1] == u || - *((tbinptr*)(u->parent)) == u); - if (u->child[0] != 0) { - assert(u->child[0]->parent == u); - assert(u->child[0] != u); - do_check_tree(m, u->child[0]); - } - if (u->child[1] != 0) { - assert(u->child[1]->parent == u); - assert(u->child[1] != u); - do_check_tree(m, u->child[1]); - } - if (u->child[0] != 0 && u->child[1] != 0) { - assert(chunksize(u->child[0]) < chunksize(u->child[1])); - } - } - u = u->fd; - } while (u != t); - assert(head != 0); -} - -/* Check all the chunks in a treebin. */ -static void do_check_treebin(mstate m, bindex_t i) { - tbinptr* tb = treebin_at(m, i); - tchunkptr t = *tb; - int empty = (m->treemap & (1U << i)) == 0; - if (t == 0) - assert(empty); - if (!empty) - do_check_tree(m, t); -} - -/* Check all the chunks in a smallbin. */ -static void do_check_smallbin(mstate m, bindex_t i) { - sbinptr b = smallbin_at(m, i); - mchunkptr p = b->bk; - unsigned int empty = (m->smallmap & (1U << i)) == 0; - if (p == b) - assert(empty); - if (!empty) { - for (; p != b; p = p->bk) { - size_t size = chunksize(p); - mchunkptr q; - /* each chunk claims to be free */ - do_check_free_chunk(m, p); - /* chunk belongs in bin */ - assert(small_index(size) == i); - assert(p->bk == b || chunksize(p->bk) == chunksize(p)); - /* chunk is followed by an inuse chunk */ - q = next_chunk(p); - if (q->head != FENCEPOST_HEAD) - do_check_inuse_chunk(m, q); - } - } -} - -/* Find x in a bin. Used in other check functions. */ -static int bin_find(mstate m, mchunkptr x) { - size_t size = chunksize(x); - if (is_small(size)) { - bindex_t sidx = small_index(size); - sbinptr b = smallbin_at(m, sidx); - if (smallmap_is_marked(m, sidx)) { - mchunkptr p = b; - do { - if (p == x) - return 1; - } while ((p = p->fd) != b); - } - } - else { - bindex_t tidx; - compute_tree_index(size, tidx); - if (treemap_is_marked(m, tidx)) { - tchunkptr t = *treebin_at(m, tidx); - size_t sizebits = size << leftshift_for_tree_index(tidx); - while (t != 0 && chunksize(t) != size) { - t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; - sizebits <<= 1; - } - if (t != 0) { - tchunkptr u = t; - do { - if (u == (tchunkptr)x) - return 1; - } while ((u = u->fd) != t); - } - } - } - return 0; -} - -/* Traverse each chunk and check it; return total */ -static size_t traverse_and_check(mstate m) { - size_t sum = 0; - if (is_initialized(m)) { - msegmentptr s = &m->seg; - sum += m->topsize + TOP_FOOT_SIZE; - while (s != 0) { - mchunkptr q = align_as_chunk(s->base); - mchunkptr lastq = 0; - assert(pinuse(q)); - while (segment_holds(s, q) && - q != m->top && q->head != FENCEPOST_HEAD) { - sum += chunksize(q); - if (is_inuse(q)) { - assert(!bin_find(m, q)); - do_check_inuse_chunk(m, q); - } - else { - assert(q == m->dv || bin_find(m, q)); - assert(lastq == 0 || is_inuse(lastq)); /* Not 2 consecutive free */ - do_check_free_chunk(m, q); - } - lastq = q; - q = next_chunk(q); - } - s = s->next; - } - } - return sum; -} - -/* Check all properties of malloc_state. */ -static void do_check_malloc_state(mstate m) { - bindex_t i; - size_t total; - /* check bins */ - for (i = 0; i < NSMALLBINS; ++i) - do_check_smallbin(m, i); - for (i = 0; i < NTREEBINS; ++i) - do_check_treebin(m, i); - - if (m->dvsize != 0) { /* check dv chunk */ - do_check_any_chunk(m, m->dv); - assert(m->dvsize == chunksize(m->dv)); - assert(m->dvsize >= MIN_CHUNK_SIZE); - assert(bin_find(m, m->dv) == 0); - } - - if (m->top != 0) { /* check top chunk */ - do_check_top_chunk(m, m->top); - /*assert(m->topsize == chunksize(m->top)); redundant */ - assert(m->topsize > 0); - assert(bin_find(m, m->top) == 0); - } - - total = traverse_and_check(m); - assert(total <= m->footprint); - assert(m->footprint <= m->max_footprint); -} -#endif /* DEBUG */ - -/* ----------------------------- statistics ------------------------------ */ - -#if !NO_MALLINFO -static struct mallinfo internal_mallinfo(mstate m) { - struct mallinfo nm = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - ensure_initialization(); - if (!PREACTION(m)) { - check_malloc_state(m); - if (is_initialized(m)) { - size_t nfree = SIZE_T_ONE; /* top always free */ - size_t mfree = m->topsize + TOP_FOOT_SIZE; - size_t sum = mfree; - msegmentptr s = &m->seg; - while (s != 0) { - mchunkptr q = align_as_chunk(s->base); - while (segment_holds(s, q) && - q != m->top && q->head != FENCEPOST_HEAD) { - size_t sz = chunksize(q); - sum += sz; - if (!is_inuse(q)) { - mfree += sz; - ++nfree; - } - q = next_chunk(q); - } - s = s->next; - } - - nm.arena = sum; - nm.ordblks = nfree; - nm.hblkhd = m->footprint - sum; - nm.usmblks = m->max_footprint; - nm.uordblks = m->footprint - mfree; - nm.fordblks = mfree; - nm.keepcost = m->topsize; - } - - POSTACTION(m); - } - return nm; -} -#endif /* !NO_MALLINFO */ - -static void internal_malloc_stats(mstate m) { - ensure_initialization(); - if (!PREACTION(m)) { - size_t maxfp = 0; - size_t fp = 0; - size_t used = 0; - check_malloc_state(m); - if (is_initialized(m)) { - msegmentptr s = &m->seg; - maxfp = m->max_footprint; - fp = m->footprint; - used = fp - (m->topsize + TOP_FOOT_SIZE); - - while (s != 0) { - mchunkptr q = align_as_chunk(s->base); - while (segment_holds(s, q) && - q != m->top && q->head != FENCEPOST_HEAD) { - if (!is_inuse(q)) - used -= chunksize(q); - q = next_chunk(q); - } - s = s->next; - } - } - - fprintf(stderr, "max system bytes = %10lu\n", (unsigned long)(maxfp)); - fprintf(stderr, "system bytes = %10lu\n", (unsigned long)(fp)); - fprintf(stderr, "in use bytes = %10lu\n", (unsigned long)(used)); - - POSTACTION(m); - } -} - -/* ----------------------- Operations on smallbins ----------------------- */ - -/* - Various forms of linking and unlinking are defined as macros. Even - the ones for trees, which are very long but have very short typical - paths. This is ugly but reduces reliance on inlining support of - compilers. -*/ - -/* Link a free chunk into a smallbin */ -#define insert_small_chunk(M, P, S) {\ - bindex_t I = small_index(S);\ - mchunkptr B = smallbin_at(M, I);\ - mchunkptr F = B;\ - assert(S >= MIN_CHUNK_SIZE);\ - if (!smallmap_is_marked(M, I))\ - mark_smallmap(M, I);\ - else if (RTCHECK(ok_address(M, B->fd)))\ - F = B->fd;\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - B->fd = P;\ - F->bk = P;\ - P->fd = F;\ - P->bk = B;\ -} - -/* Unlink a chunk from a smallbin */ -#define unlink_small_chunk(M, P, S) {\ - mchunkptr F = P->fd;\ - mchunkptr B = P->bk;\ - bindex_t I = small_index(S);\ - assert(P != B);\ - assert(P != F);\ - assert(chunksize(P) == small_index2size(I));\ - if (F == B)\ - clear_smallmap(M, I);\ - else if (RTCHECK((F == smallbin_at(M,I) || ok_address(M, F)) &&\ - (B == smallbin_at(M,I) || ok_address(M, B)))) {\ - F->bk = B;\ - B->fd = F;\ - }\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - }\ -} - -/* Unlink the first chunk from a smallbin */ -#define unlink_first_small_chunk(M, B, P, I) {\ - mchunkptr F = P->fd;\ - assert(P != B);\ - assert(P != F);\ - assert(chunksize(P) == small_index2size(I));\ - if (B == F)\ - clear_smallmap(M, I);\ - else if (RTCHECK(ok_address(M, F))) {\ - B->fd = F;\ - F->bk = B;\ - }\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - }\ -} - - - -/* Replace dv node, binning the old one */ -/* Used only when dvsize known to be small */ -#define replace_dv(M, P, S) {\ - size_t DVS = M->dvsize;\ - if (DVS != 0) {\ - mchunkptr DV = M->dv;\ - assert(is_small(DVS));\ - insert_small_chunk(M, DV, DVS);\ - }\ - M->dvsize = S;\ - M->dv = P;\ -} - -/* ------------------------- Operations on trees ------------------------- */ - -/* Insert chunk into tree */ -#define insert_large_chunk(M, X, S) {\ - tbinptr* H;\ - bindex_t I;\ - compute_tree_index(S, I);\ - H = treebin_at(M, I);\ - X->index = I;\ - X->child[0] = X->child[1] = 0;\ - if (!treemap_is_marked(M, I)) {\ - mark_treemap(M, I);\ - *H = X;\ - X->parent = (tchunkptr)H;\ - X->fd = X->bk = X;\ - }\ - else {\ - tchunkptr T = *H;\ - size_t K = S << leftshift_for_tree_index(I);\ - for (;;) {\ - if (chunksize(T) != S) {\ - tchunkptr* C = &(T->child[(K >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]);\ - K <<= 1;\ - if (*C != 0)\ - T = *C;\ - else if (RTCHECK(ok_address(M, C))) {\ - *C = X;\ - X->parent = T;\ - X->fd = X->bk = X;\ - break;\ - }\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - break;\ - }\ - }\ - else {\ - tchunkptr F = T->fd;\ - if (RTCHECK(ok_address(M, T) && ok_address(M, F))) {\ - T->fd = F->bk = X;\ - X->fd = F;\ - X->bk = T;\ - X->parent = 0;\ - break;\ - }\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - break;\ - }\ - }\ - }\ - }\ -} - -/* - Unlink steps: - - 1. If x is a chained node, unlink it from its same-sized fd/bk links - and choose its bk node as its replacement. - 2. If x was the last node of its size, but not a leaf node, it must - be replaced with a leaf node (not merely one with an open left or - right), to make sure that lefts and rights of descendents - correspond properly to bit masks. We use the rightmost descendent - of x. We could use any other leaf, but this is easy to locate and - tends to counteract removal of leftmosts elsewhere, and so keeps - paths shorter than minimally guaranteed. This doesn't loop much - because on average a node in a tree is near the bottom. - 3. If x is the base of a chain (i.e., has parent links) relink - x's parent and children to x's replacement (or null if none). -*/ - -#define unlink_large_chunk(M, X) {\ - tchunkptr XP = X->parent;\ - tchunkptr R;\ - if (X->bk != X) {\ - tchunkptr F = X->fd;\ - R = X->bk;\ - if (RTCHECK(ok_address(M, F))) {\ - F->bk = R;\ - R->fd = F;\ - }\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - }\ - else {\ - tchunkptr* RP;\ - if (((R = *(RP = &(X->child[1]))) != 0) ||\ - ((R = *(RP = &(X->child[0]))) != 0)) {\ - tchunkptr* CP;\ - while ((*(CP = &(R->child[1])) != 0) ||\ - (*(CP = &(R->child[0])) != 0)) {\ - R = *(RP = CP);\ - }\ - if (RTCHECK(ok_address(M, RP)))\ - *RP = 0;\ - else {\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - }\ - }\ - if (XP != 0) {\ - tbinptr* H = treebin_at(M, X->index);\ - if (X == *H) {\ - if ((*H = R) == 0) \ - clear_treemap(M, X->index);\ - }\ - else if (RTCHECK(ok_address(M, XP))) {\ - if (XP->child[0] == X) \ - XP->child[0] = R;\ - else \ - XP->child[1] = R;\ - }\ - else\ - CORRUPTION_ERROR_ACTION(M);\ - if (R != 0) {\ - if (RTCHECK(ok_address(M, R))) {\ - tchunkptr C0, C1;\ - R->parent = XP;\ - if ((C0 = X->child[0]) != 0) {\ - if (RTCHECK(ok_address(M, C0))) {\ - R->child[0] = C0;\ - C0->parent = R;\ - }\ - else\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - if ((C1 = X->child[1]) != 0) {\ - if (RTCHECK(ok_address(M, C1))) {\ - R->child[1] = C1;\ - C1->parent = R;\ - }\ - else\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - }\ - else\ - CORRUPTION_ERROR_ACTION(M);\ - }\ - }\ -} - -/* Relays to large vs small bin operations */ - -#define insert_chunk(M, P, S)\ - if (is_small(S)) insert_small_chunk(M, P, S)\ - else { tchunkptr TP = (tchunkptr)(P); insert_large_chunk(M, TP, S); } - -#define unlink_chunk(M, P, S)\ - if (is_small(S)) unlink_small_chunk(M, P, S)\ - else { tchunkptr TP = (tchunkptr)(P); unlink_large_chunk(M, TP); } - - -/* Relays to internal calls to malloc/free from realloc, memalign etc */ - -#if ONLY_MSPACES -#define internal_malloc(m, b) mspace_malloc(m, b) -#define internal_free(m, mem) mspace_free(m,mem); -#else /* ONLY_MSPACES */ -#if MSPACES -#define internal_malloc(m, b)\ - (m == gm)? dlmalloc(b) : mspace_malloc(m, b) -#define internal_free(m, mem)\ - if (m == gm) dlfree(mem); else mspace_free(m,mem); -#else /* MSPACES */ -#define internal_malloc(m, b) dlmalloc(b) -#define internal_free(m, mem) dlfree(mem) -#endif /* MSPACES */ -#endif /* ONLY_MSPACES */ - -/* ----------------------- Direct-mmapping chunks ----------------------- */ - -/* - Directly mmapped chunks are set up with an offset to the start of - the mmapped region stored in the prev_foot field of the chunk. This - allows reconstruction of the required argument to MUNMAP when freed, - and also allows adjustment of the returned chunk to meet alignment - requirements (especially in memalign). -*/ - -/* Malloc using mmap */ -static void* mmap_alloc(mstate m, size_t nb) { - size_t mmsize = mmap_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK); - if (mmsize > nb) { /* Check for wrap around 0 */ - char* mm = (char*)(CALL_DIRECT_MMAP(mmsize)); - if (mm != CMFAIL) { - size_t offset = align_offset(chunk2mem(mm)); - size_t psize = mmsize - offset - MMAP_FOOT_PAD; - mchunkptr p = (mchunkptr)(mm + offset); - p->prev_foot = offset; - p->head = psize; - mark_inuse_foot(m, p, psize); - chunk_plus_offset(p, psize)->head = FENCEPOST_HEAD; - chunk_plus_offset(p, psize+SIZE_T_SIZE)->head = 0; - - if (m->least_addr == 0 || mm < m->least_addr) - m->least_addr = mm; - if ((m->footprint += mmsize) > m->max_footprint) - m->max_footprint = m->footprint; - assert(is_aligned(chunk2mem(p))); - check_mmapped_chunk(m, p); - return chunk2mem(p); - } - } - return 0; -} - -/* Realloc using mmap */ -static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb) { - size_t oldsize = chunksize(oldp); - if (is_small(nb)) /* Can't shrink mmap regions below small size */ - return 0; - /* Keep old chunk if big enough but not too big */ - if (oldsize >= nb + SIZE_T_SIZE && - (oldsize - nb) <= (mparams.granularity << 1)) - return oldp; - else { - size_t offset = oldp->prev_foot; - size_t oldmmsize = oldsize + offset + MMAP_FOOT_PAD; - size_t newmmsize = mmap_align(nb + SIX_SIZE_T_SIZES + CHUNK_ALIGN_MASK); - char* cp = (char*)CALL_MREMAP((char*)oldp - offset, - oldmmsize, newmmsize, 1); - if (cp != CMFAIL) { - mchunkptr newp = (mchunkptr)(cp + offset); - size_t psize = newmmsize - offset - MMAP_FOOT_PAD; - newp->head = psize; - mark_inuse_foot(m, newp, psize); - chunk_plus_offset(newp, psize)->head = FENCEPOST_HEAD; - chunk_plus_offset(newp, psize+SIZE_T_SIZE)->head = 0; - - if (cp < m->least_addr) - m->least_addr = cp; - if ((m->footprint += newmmsize - oldmmsize) > m->max_footprint) - m->max_footprint = m->footprint; - check_mmapped_chunk(m, newp); - return newp; - } - } - return 0; -} - -/* -------------------------- mspace management -------------------------- */ - -/* Initialize top chunk and its size */ -static void init_top(mstate m, mchunkptr p, size_t psize) { - /* Ensure alignment */ - size_t offset = align_offset(chunk2mem(p)); - p = (mchunkptr)((char*)p + offset); - psize -= offset; - - m->top = p; - m->topsize = psize; - p->head = psize | PINUSE_BIT; - /* set size of fake trailing chunk holding overhead space only once */ - chunk_plus_offset(p, psize)->head = TOP_FOOT_SIZE; - m->trim_check = mparams.trim_threshold; /* reset on each update */ -} - -/* Initialize bins for a new mstate that is otherwise zeroed out */ -static void init_bins(mstate m) { - /* Establish circular links for smallbins */ - bindex_t i; - for (i = 0; i < NSMALLBINS; ++i) { - sbinptr bin = smallbin_at(m,i); - bin->fd = bin->bk = bin; - } -} - -#if PROCEED_ON_ERROR - -/* default corruption action */ -static void reset_on_error(mstate m) { - int i; - ++malloc_corruption_error_count; - /* Reinitialize fields to forget about all memory */ - m->smallbins = m->treebins = 0; - m->dvsize = m->topsize = 0; - m->seg.base = 0; - m->seg.size = 0; - m->seg.next = 0; - m->top = m->dv = 0; - for (i = 0; i < NTREEBINS; ++i) - *treebin_at(m, i) = 0; - init_bins(m); -} -#endif /* PROCEED_ON_ERROR */ - -/* Allocate chunk and prepend remainder with chunk in successor base. */ -static void* prepend_alloc(mstate m, char* newbase, char* oldbase, - size_t nb) { - mchunkptr p = align_as_chunk(newbase); - mchunkptr oldfirst = align_as_chunk(oldbase); - size_t psize = (char*)oldfirst - (char*)p; - mchunkptr q = chunk_plus_offset(p, nb); - size_t qsize = psize - nb; - set_size_and_pinuse_of_inuse_chunk(m, p, nb); - - assert((char*)oldfirst > (char*)q); - assert(pinuse(oldfirst)); - assert(qsize >= MIN_CHUNK_SIZE); - - /* consolidate remainder with first chunk of old base */ - if (oldfirst == m->top) { - size_t tsize = m->topsize += qsize; - m->top = q; - q->head = tsize | PINUSE_BIT; - check_top_chunk(m, q); - } - else if (oldfirst == m->dv) { - size_t dsize = m->dvsize += qsize; - m->dv = q; - set_size_and_pinuse_of_free_chunk(q, dsize); - } - else { - if (!is_inuse(oldfirst)) { - size_t nsize = chunksize(oldfirst); - unlink_chunk(m, oldfirst, nsize); - oldfirst = chunk_plus_offset(oldfirst, nsize); - qsize += nsize; - } - set_free_with_pinuse(q, qsize, oldfirst); - insert_chunk(m, q, qsize); - check_free_chunk(m, q); - } - - check_malloced_chunk(m, chunk2mem(p), nb); - return chunk2mem(p); -} - -/* Add a segment to hold a new noncontiguous region */ -static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) { - /* Determine locations and sizes of segment, fenceposts, old top */ - char* old_top = (char*)m->top; - msegmentptr oldsp = segment_holding(m, old_top); - char* old_end = oldsp->base + oldsp->size; - size_t ssize = pad_request(sizeof(struct malloc_segment)); - char* rawsp = old_end - (ssize + FOUR_SIZE_T_SIZES + CHUNK_ALIGN_MASK); - size_t offset = align_offset(chunk2mem(rawsp)); - char* asp = rawsp + offset; - char* csp = (asp < (old_top + MIN_CHUNK_SIZE))? old_top : asp; - mchunkptr sp = (mchunkptr)csp; - msegmentptr ss = (msegmentptr)(chunk2mem(sp)); - mchunkptr tnext = chunk_plus_offset(sp, ssize); - mchunkptr p = tnext; - int nfences = 0; - - /* reset top to new space */ - init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); - - /* Set up segment record */ - assert(is_aligned(ss)); - set_size_and_pinuse_of_inuse_chunk(m, sp, ssize); - *ss = m->seg; /* Push current record */ - m->seg.base = tbase; - m->seg.size = tsize; - m->seg.sflags = mmapped; - m->seg.next = ss; - - /* Insert trailing fenceposts */ - for (;;) { - mchunkptr nextp = chunk_plus_offset(p, SIZE_T_SIZE); - p->head = FENCEPOST_HEAD; - ++nfences; - if ((char*)(&(nextp->head)) < old_end) - p = nextp; - else - break; - } - assert(nfences >= 2); - - /* Insert the rest of old top into a bin as an ordinary free chunk */ - if (csp != old_top) { - mchunkptr q = (mchunkptr)old_top; - size_t psize = csp - old_top; - mchunkptr tn = chunk_plus_offset(q, psize); - set_free_with_pinuse(q, psize, tn); - insert_chunk(m, q, psize); - } - - check_top_chunk(m, m->top); -} - -/* -------------------------- System allocation -------------------------- */ - -/* Get memory from system using MORECORE or MMAP */ -static void* sys_alloc(mstate m, size_t nb) { - char* tbase = CMFAIL; - size_t tsize = 0; - flag_t mmap_flag = 0; - - ensure_initialization(); - - /* Directly map large chunks, but only if already initialized */ - if (use_mmap(m) && nb >= mparams.mmap_threshold && m->topsize != 0) { - void* mem = mmap_alloc(m, nb); - if (mem != 0) - return mem; - } - - /* - Try getting memory in any of three ways (in most-preferred to - least-preferred order): - 1. A call to MORECORE that can normally contiguously extend memory. - (disabled if not MORECORE_CONTIGUOUS or not HAVE_MORECORE or - or main space is mmapped or a previous contiguous call failed) - 2. A call to MMAP new space (disabled if not HAVE_MMAP). - Note that under the default settings, if MORECORE is unable to - fulfill a request, and HAVE_MMAP is true, then mmap is - used as a noncontiguous system allocator. This is a useful backup - strategy for systems with holes in address spaces -- in this case - sbrk cannot contiguously expand the heap, but mmap may be able to - find space. - 3. A call to MORECORE that cannot usually contiguously extend memory. - (disabled if not HAVE_MORECORE) - - In all cases, we need to request enough bytes from system to ensure - we can malloc nb bytes upon success, so pad with enough space for - top_foot, plus alignment-pad to make sure we don't lose bytes if - not on boundary, and round this up to a granularity unit. - */ - - if (MORECORE_CONTIGUOUS && !use_noncontiguous(m)) { - char* br = CMFAIL; - msegmentptr ss = (m->top == 0)? 0 : segment_holding(m, (char*)m->top); - size_t asize = 0; - ACQUIRE_MALLOC_GLOBAL_LOCK(); - - if (ss == 0) { /* First time through or recovery */ - char* base = (char*)CALL_MORECORE(0); - if (base != CMFAIL) { - asize = granularity_align(nb + SYS_ALLOC_PADDING); - /* Adjust to end on a page boundary */ - if (!is_page_aligned(base)) - asize += (page_align((size_t)base) - (size_t)base); - /* Can't call MORECORE if size is negative when treated as signed */ - if (asize < HALF_MAX_SIZE_T && - (br = (char*)(CALL_MORECORE(asize))) == base) { - tbase = base; - tsize = asize; - } - } - } - else { - /* Subtract out existing available top space from MORECORE request. */ - asize = granularity_align(nb - m->topsize + SYS_ALLOC_PADDING); - /* Use mem here only if it did continuously extend old space */ - if (asize < HALF_MAX_SIZE_T && - (br = (char*)(CALL_MORECORE(asize))) == ss->base+ss->size) { - tbase = br; - tsize = asize; - } - } - - if (tbase == CMFAIL) { /* Cope with partial failure */ - if (br != CMFAIL) { /* Try to use/extend the space we did get */ - if (asize < HALF_MAX_SIZE_T && - asize < nb + SYS_ALLOC_PADDING) { - size_t esize = granularity_align(nb + SYS_ALLOC_PADDING - asize); - if (esize < HALF_MAX_SIZE_T) { - char* end = (char*)CALL_MORECORE(esize); - if (end != CMFAIL) - asize += esize; - else { /* Can't use; try to release */ - (void) CALL_MORECORE(-asize); - br = CMFAIL; - } - } - } - } - if (br != CMFAIL) { /* Use the space we did get */ - tbase = br; - tsize = asize; - } - else - disable_contiguous(m); /* Don't try contiguous path in the future */ - } - - RELEASE_MALLOC_GLOBAL_LOCK(); - } - - if (HAVE_MMAP && tbase == CMFAIL) { /* Try MMAP */ - size_t rsize = granularity_align(nb + SYS_ALLOC_PADDING); - if (rsize > nb) { /* Fail if wraps around zero */ - char* mp = (char*)(CALL_MMAP(rsize)); - if (mp != CMFAIL) { - tbase = mp; - tsize = rsize; - mmap_flag = USE_MMAP_BIT; - } - } - } - - if (HAVE_MORECORE && tbase == CMFAIL) { /* Try noncontiguous MORECORE */ - size_t asize = granularity_align(nb + SYS_ALLOC_PADDING); - if (asize < HALF_MAX_SIZE_T) { - char* br = CMFAIL; - char* end = CMFAIL; - ACQUIRE_MALLOC_GLOBAL_LOCK(); - br = (char*)(CALL_MORECORE(asize)); - end = (char*)(CALL_MORECORE(0)); - RELEASE_MALLOC_GLOBAL_LOCK(); - if (br != CMFAIL && end != CMFAIL && br < end) { - size_t ssize = end - br; - if (ssize > nb + TOP_FOOT_SIZE) { - tbase = br; - tsize = ssize; - } - } - } - } - - if (tbase != CMFAIL) { - - if ((m->footprint += tsize) > m->max_footprint) - m->max_footprint = m->footprint; - - if (!is_initialized(m)) { /* first-time initialization */ - if (m->least_addr == 0 || tbase < m->least_addr) - m->least_addr = tbase; - m->seg.base = tbase; - m->seg.size = tsize; - m->seg.sflags = mmap_flag; - m->magic = mparams.magic; - m->release_checks = MAX_RELEASE_CHECK_RATE; - init_bins(m); -#if !ONLY_MSPACES - if (is_global(m)) - init_top(m, (mchunkptr)tbase, tsize - TOP_FOOT_SIZE); - else -#endif - { - /* Offset top by embedded malloc_state */ - mchunkptr mn = next_chunk(mem2chunk(m)); - init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) -TOP_FOOT_SIZE); - } - } - - else { - /* Try to merge with an existing segment */ - msegmentptr sp = &m->seg; - /* Only consider most recent segment if traversal suppressed */ - while (sp != 0 && tbase != sp->base + sp->size) - sp = (NO_SEGMENT_TRAVERSAL) ? 0 : sp->next; - if (sp != 0 && - !is_extern_segment(sp) && - (sp->sflags & USE_MMAP_BIT) == mmap_flag && - segment_holds(sp, m->top)) { /* append */ - sp->size += tsize; - init_top(m, m->top, m->topsize + tsize); - } - else { - if (tbase < m->least_addr) - m->least_addr = tbase; - sp = &m->seg; - while (sp != 0 && sp->base != tbase + tsize) - sp = (NO_SEGMENT_TRAVERSAL) ? 0 : sp->next; - if (sp != 0 && - !is_extern_segment(sp) && - (sp->sflags & USE_MMAP_BIT) == mmap_flag) { - char* oldbase = sp->base; - sp->base = tbase; - sp->size += tsize; - return prepend_alloc(m, tbase, oldbase, nb); - } - else - add_segment(m, tbase, tsize, mmap_flag); - } - } - - if (nb < m->topsize) { /* Allocate from new or extended top space */ - size_t rsize = m->topsize -= nb; - mchunkptr p = m->top; - mchunkptr r = m->top = chunk_plus_offset(p, nb); - r->head = rsize | PINUSE_BIT; - set_size_and_pinuse_of_inuse_chunk(m, p, nb); - check_top_chunk(m, m->top); - check_malloced_chunk(m, chunk2mem(p), nb); - return chunk2mem(p); - } - } - - MALLOC_FAILURE_ACTION; - return 0; -} - -/* ----------------------- system deallocation -------------------------- */ - -/* Unmap and unlink any mmapped segments that don't contain used chunks */ -static size_t release_unused_segments(mstate m) { - size_t released = 0; - int nsegs = 0; - msegmentptr pred = &m->seg; - msegmentptr sp = pred->next; - while (sp != 0) { - char* base = sp->base; - size_t size = sp->size; - msegmentptr next = sp->next; - ++nsegs; - if (is_mmapped_segment(sp) && !is_extern_segment(sp)) { - mchunkptr p = align_as_chunk(base); - size_t psize = chunksize(p); - /* Can unmap if first chunk holds entire segment and not pinned */ - if (!is_inuse(p) && (char*)p + psize >= base + size - TOP_FOOT_SIZE) { - tchunkptr tp = (tchunkptr)p; - assert(segment_holds(sp, (char*)sp)); - if (p == m->dv) { - m->dv = 0; - m->dvsize = 0; - } - else { - unlink_large_chunk(m, tp); - } - if (CALL_MUNMAP(base, size) == 0) { - released += size; - m->footprint -= size; - /* unlink obsoleted record */ - sp = pred; - sp->next = next; - } - else { /* back out if cannot unmap */ - insert_large_chunk(m, tp, psize); - } - } - } - if (NO_SEGMENT_TRAVERSAL) /* scan only first segment */ - break; - pred = sp; - sp = next; - } - /* Reset check counter */ - m->release_checks = ((nsegs > MAX_RELEASE_CHECK_RATE)? - nsegs : MAX_RELEASE_CHECK_RATE); - return released; -} - -static int sys_trim(mstate m, size_t pad) { - size_t released = 0; - ensure_initialization(); - if (pad < MAX_REQUEST && is_initialized(m)) { - pad += TOP_FOOT_SIZE; /* ensure enough room for segment overhead */ - - if (m->topsize > pad) { - /* Shrink top space in granularity-size units, keeping at least one */ - size_t unit = mparams.granularity; - size_t extra = ((m->topsize - pad + (unit - SIZE_T_ONE)) / unit - - SIZE_T_ONE) * unit; - msegmentptr sp = segment_holding(m, (char*)m->top); - - if (!is_extern_segment(sp)) { - if (is_mmapped_segment(sp)) { - if (HAVE_MMAP && - sp->size >= extra && - !has_segment_link(m, sp)) { /* can't shrink if pinned */ - size_t newsize = sp->size - extra; - /* Prefer mremap, fall back to munmap */ - if ((CALL_MREMAP(sp->base, sp->size, newsize, 0) != MFAIL) || - (CALL_MUNMAP(sp->base + newsize, extra) == 0)) { - released = extra; - } - } - } - else if (HAVE_MORECORE) { - if (extra >= HALF_MAX_SIZE_T) /* Avoid wrapping negative */ - extra = (HALF_MAX_SIZE_T) + SIZE_T_ONE - unit; - ACQUIRE_MALLOC_GLOBAL_LOCK(); - { - /* Make sure end of memory is where we last set it. */ - char* old_br = (char*)(CALL_MORECORE(0)); - if (old_br == sp->base + sp->size) { - char* rel_br = (char*)(CALL_MORECORE(-extra)); - char* new_br = (char*)(CALL_MORECORE(0)); - if (rel_br != CMFAIL && new_br < old_br) - released = old_br - new_br; - } - } - RELEASE_MALLOC_GLOBAL_LOCK(); - } - } - - if (released != 0) { - sp->size -= released; - m->footprint -= released; - init_top(m, m->top, m->topsize - released); - check_top_chunk(m, m->top); - } - } - - /* Unmap any unused mmapped segments */ - if (HAVE_MMAP) - released += release_unused_segments(m); - - /* On failure, disable autotrim to avoid repeated failed future calls */ - if (released == 0 && m->topsize > m->trim_check) - m->trim_check = MAX_SIZE_T; - } - - return (released != 0)? 1 : 0; -} - - -/* ---------------------------- malloc support --------------------------- */ - -/* allocate a large request from the best fitting chunk in a treebin */ -static void* tmalloc_large(mstate m, size_t nb) { - tchunkptr v = 0; - size_t rsize = -nb; /* Unsigned negation */ - tchunkptr t; - bindex_t idx; - compute_tree_index(nb, idx); - if ((t = *treebin_at(m, idx)) != 0) { - /* Traverse tree for this bin looking for node with size == nb */ - size_t sizebits = nb << leftshift_for_tree_index(idx); - tchunkptr rst = 0; /* The deepest untaken right subtree */ - for (;;) { - tchunkptr rt; - size_t trem = chunksize(t) - nb; - if (trem < rsize) { - v = t; - if ((rsize = trem) == 0) - break; - } - rt = t->child[1]; - t = t->child[(sizebits >> (SIZE_T_BITSIZE-SIZE_T_ONE)) & 1]; - if (rt != 0 && rt != t) - rst = rt; - if (t == 0) { - t = rst; /* set t to least subtree holding sizes > nb */ - break; - } - sizebits <<= 1; - } - } - if (t == 0 && v == 0) { /* set t to root of next non-empty treebin */ - binmap_t leftbits = left_bits(idx2bit(idx)) & m->treemap; - if (leftbits != 0) { - bindex_t i; - binmap_t leastbit = least_bit(leftbits); - compute_bit2idx(leastbit, i); - t = *treebin_at(m, i); - } - } - - while (t != 0) { /* find smallest of tree or subtree */ - size_t trem = chunksize(t) - nb; - if (trem < rsize) { - rsize = trem; - v = t; - } - t = leftmost_child(t); - } - - /* If dv is a better fit, return 0 so malloc will use it */ - if (v != 0 && rsize < (size_t)(m->dvsize - nb)) { - if (RTCHECK(ok_address(m, v))) { /* split */ - mchunkptr r = chunk_plus_offset(v, nb); - assert(chunksize(v) == rsize + nb); - if (RTCHECK(ok_next(v, r))) { - unlink_large_chunk(m, v); - if (rsize < MIN_CHUNK_SIZE) - set_inuse_and_pinuse(m, v, (rsize + nb)); - else { - set_size_and_pinuse_of_inuse_chunk(m, v, nb); - set_size_and_pinuse_of_free_chunk(r, rsize); - insert_chunk(m, r, rsize); - } - return chunk2mem(v); - } - } - CORRUPTION_ERROR_ACTION(m); - } - return 0; -} - -/* allocate a small request from the best fitting chunk in a treebin */ -static void* tmalloc_small(mstate m, size_t nb) { - tchunkptr t, v; - size_t rsize; - bindex_t i; - binmap_t leastbit = least_bit(m->treemap); - compute_bit2idx(leastbit, i); - v = t = *treebin_at(m, i); - rsize = chunksize(t) - nb; - - while ((t = leftmost_child(t)) != 0) { - size_t trem = chunksize(t) - nb; - if (trem < rsize) { - rsize = trem; - v = t; - } - } - - if (RTCHECK(ok_address(m, v))) { - mchunkptr r = chunk_plus_offset(v, nb); - assert(chunksize(v) == rsize + nb); - if (RTCHECK(ok_next(v, r))) { - unlink_large_chunk(m, v); - if (rsize < MIN_CHUNK_SIZE) - set_inuse_and_pinuse(m, v, (rsize + nb)); - else { - set_size_and_pinuse_of_inuse_chunk(m, v, nb); - set_size_and_pinuse_of_free_chunk(r, rsize); - replace_dv(m, r, rsize); - } - return chunk2mem(v); - } - } - - CORRUPTION_ERROR_ACTION(m); - return 0; -} - -/* --------------------------- realloc support --------------------------- */ - -static void* internal_realloc(mstate m, void* oldmem, size_t bytes) { - if (bytes >= MAX_REQUEST) { - MALLOC_FAILURE_ACTION; - return 0; - } - if (!PREACTION(m)) { - mchunkptr oldp = mem2chunk(oldmem); - size_t oldsize = chunksize(oldp); - mchunkptr next = chunk_plus_offset(oldp, oldsize); - mchunkptr newp = 0; - void* extra = 0; - - /* Try to either shrink or extend into top. Else malloc-copy-free */ - - if (RTCHECK(ok_address(m, oldp) && ok_inuse(oldp) && - ok_next(oldp, next) && ok_pinuse(next))) { - size_t nb = request2size(bytes); - if (is_mmapped(oldp)) - newp = mmap_resize(m, oldp, nb); - else if (oldsize >= nb) { /* already big enough */ - size_t rsize = oldsize - nb; - newp = oldp; - if (rsize >= MIN_CHUNK_SIZE) { - mchunkptr remainder = chunk_plus_offset(newp, nb); - set_inuse(m, newp, nb); - set_inuse_and_pinuse(m, remainder, rsize); - extra = chunk2mem(remainder); - } - } - else if (next == m->top && oldsize + m->topsize > nb) { - /* Expand into top */ - size_t newsize = oldsize + m->topsize; - size_t newtopsize = newsize - nb; - mchunkptr newtop = chunk_plus_offset(oldp, nb); - set_inuse(m, oldp, nb); - newtop->head = newtopsize |PINUSE_BIT; - m->top = newtop; - m->topsize = newtopsize; - newp = oldp; - } - } - else { - USAGE_ERROR_ACTION(m, oldmem); - POSTACTION(m); - return 0; - } -#if DEBUG - if (newp != 0) { - check_inuse_chunk(m, newp); /* Check requires lock */ - } -#endif - - POSTACTION(m); - - if (newp != 0) { - if (extra != 0) { - internal_free(m, extra); - } - return chunk2mem(newp); - } - else { - void* newmem = internal_malloc(m, bytes); - if (newmem != 0) { - size_t oc = oldsize - overhead_for(oldp); - memcpy(newmem, oldmem, (oc < bytes)? oc : bytes); - internal_free(m, oldmem); - } - return newmem; - } - } - return 0; -} - -/* --------------------------- memalign support -------------------------- */ - -static void* internal_memalign(mstate m, size_t alignment, size_t bytes) { - if (alignment <= MALLOC_ALIGNMENT) /* Can just use malloc */ - return internal_malloc(m, bytes); - if (alignment < MIN_CHUNK_SIZE) /* must be at least a minimum chunk size */ - alignment = MIN_CHUNK_SIZE; - if ((alignment & (alignment-SIZE_T_ONE)) != 0) {/* Ensure a power of 2 */ - size_t a = MALLOC_ALIGNMENT << 1; - while (a < alignment) a <<= 1; - alignment = a; - } - - if (bytes >= MAX_REQUEST - alignment) { - if (m != 0) { /* Test isn't needed but avoids compiler warning */ - MALLOC_FAILURE_ACTION; - } - } - else { - size_t nb = request2size(bytes); - size_t req = nb + alignment + MIN_CHUNK_SIZE - CHUNK_OVERHEAD; - char* mem = (char*)internal_malloc(m, req); - if (mem != 0) { - void* leader = 0; - void* trailer = 0; - mchunkptr p = mem2chunk(mem); - - if (PREACTION(m)) return 0; - if ((((size_t)(mem)) % alignment) != 0) { /* misaligned */ - /* - Find an aligned spot inside chunk. Since we need to give - back leading space in a chunk of at least MIN_CHUNK_SIZE, if - the first calculation places us at a spot with less than - MIN_CHUNK_SIZE leader, we can move to the next aligned spot. - We've allocated enough total room so that this is always - possible. - */ - char* br = (char*)mem2chunk((size_t)(((size_t)(mem + - alignment - - SIZE_T_ONE)) & - -alignment)); - char* pos = ((size_t)(br - (char*)(p)) >= MIN_CHUNK_SIZE)? - br : br+alignment; - mchunkptr newp = (mchunkptr)pos; - size_t leadsize = pos - (char*)(p); - size_t newsize = chunksize(p) - leadsize; - - if (is_mmapped(p)) { /* For mmapped chunks, just adjust offset */ - newp->prev_foot = p->prev_foot + leadsize; - newp->head = newsize; - } - else { /* Otherwise, give back leader, use the rest */ - set_inuse(m, newp, newsize); - set_inuse(m, p, leadsize); - leader = chunk2mem(p); - } - p = newp; - } - - /* Give back spare room at the end */ - if (!is_mmapped(p)) { - size_t size = chunksize(p); - if (size > nb + MIN_CHUNK_SIZE) { - size_t remainder_size = size - nb; - mchunkptr remainder = chunk_plus_offset(p, nb); - set_inuse(m, p, nb); - set_inuse(m, remainder, remainder_size); - trailer = chunk2mem(remainder); - } - } - - assert (chunksize(p) >= nb); - assert((((size_t)(chunk2mem(p))) % alignment) == 0); - check_inuse_chunk(m, p); - POSTACTION(m); - if (leader != 0) { - internal_free(m, leader); - } - if (trailer != 0) { - internal_free(m, trailer); - } - return chunk2mem(p); - } - } - return 0; -} - -/* ------------------------ comalloc/coalloc support --------------------- */ - -static void** ialloc(mstate m, - size_t n_elements, - size_t* sizes, - int opts, - void* chunks[]) { - /* - This provides common support for independent_X routines, handling - all of the combinations that can result. - - The opts arg has: - bit 0 set if all elements are same size (using sizes[0]) - bit 1 set if elements should be zeroed - */ - - size_t element_size; /* chunksize of each element, if all same */ - size_t contents_size; /* total size of elements */ - size_t array_size; /* request size of pointer array */ - void* mem; /* malloced aggregate space */ - mchunkptr p; /* corresponding chunk */ - size_t remainder_size; /* remaining bytes while splitting */ - void** marray; /* either "chunks" or malloced ptr array */ - mchunkptr array_chunk; /* chunk for malloced ptr array */ - flag_t was_enabled; /* to disable mmap */ - size_t size; - size_t i; - - ensure_initialization(); - /* compute array length, if needed */ - if (chunks != 0) { - if (n_elements == 0) - return chunks; /* nothing to do */ - marray = chunks; - array_size = 0; - } - else { - /* if empty req, must still return chunk representing empty array */ - if (n_elements == 0) - return (void**)internal_malloc(m, 0); - marray = 0; - array_size = request2size(n_elements * (sizeof(void*))); - } - - /* compute total element size */ - if (opts & 0x1) { /* all-same-size */ - element_size = request2size(*sizes); - contents_size = n_elements * element_size; - } - else { /* add up all the sizes */ - element_size = 0; - contents_size = 0; - for (i = 0; i != n_elements; ++i) - contents_size += request2size(sizes[i]); - } - - size = contents_size + array_size; - - /* - Allocate the aggregate chunk. First disable direct-mmapping so - malloc won't use it, since we would not be able to later - free/realloc space internal to a segregated mmap region. - */ - was_enabled = use_mmap(m); - disable_mmap(m); - mem = internal_malloc(m, size - CHUNK_OVERHEAD); - if (was_enabled) - enable_mmap(m); - if (mem == 0) - return 0; - - if (PREACTION(m)) return 0; - p = mem2chunk(mem); - remainder_size = chunksize(p); - - assert(!is_mmapped(p)); - - if (opts & 0x2) { /* optionally clear the elements */ - memset((size_t*)mem, 0, remainder_size - SIZE_T_SIZE - array_size); - } - - /* If not provided, allocate the pointer array as final part of chunk */ - if (marray == 0) { - size_t array_chunk_size; - array_chunk = chunk_plus_offset(p, contents_size); - array_chunk_size = remainder_size - contents_size; - marray = (void**) (chunk2mem(array_chunk)); - set_size_and_pinuse_of_inuse_chunk(m, array_chunk, array_chunk_size); - remainder_size = contents_size; - } - - /* split out elements */ - for (i = 0; ; ++i) { - marray[i] = chunk2mem(p); - if (i != n_elements-1) { - if (element_size != 0) - size = element_size; - else - size = request2size(sizes[i]); - remainder_size -= size; - set_size_and_pinuse_of_inuse_chunk(m, p, size); - p = chunk_plus_offset(p, size); - } - else { /* the final element absorbs any overallocation slop */ - set_size_and_pinuse_of_inuse_chunk(m, p, remainder_size); - break; - } - } - -#if DEBUG - if (marray != chunks) { - /* final element must have exactly exhausted chunk */ - if (element_size != 0) { - assert(remainder_size == element_size); - } - else { - assert(remainder_size == request2size(sizes[i])); - } - check_inuse_chunk(m, mem2chunk(marray)); - } - for (i = 0; i != n_elements; ++i) - check_inuse_chunk(m, mem2chunk(marray[i])); - -#endif /* DEBUG */ - - POSTACTION(m); - return marray; -} - - -/* -------------------------- public routines ---------------------------- */ - -#if !ONLY_MSPACES - -void* dlmalloc(size_t bytes) { - /* - Basic algorithm: - If a small request (< 256 bytes minus per-chunk overhead): - 1. If one exists, use a remainderless chunk in associated smallbin. - (Remainderless means that there are too few excess bytes to - represent as a chunk.) - 2. If it is big enough, use the dv chunk, which is normally the - chunk adjacent to the one used for the most recent small request. - 3. If one exists, split the smallest available chunk in a bin, - saving remainder in dv. - 4. If it is big enough, use the top chunk. - 5. If available, get memory from system and use it - Otherwise, for a large request: - 1. Find the smallest available binned chunk that fits, and use it - if it is better fitting than dv chunk, splitting if necessary. - 2. If better fitting than any binned chunk, use the dv chunk. - 3. If it is big enough, use the top chunk. - 4. If request size >= mmap threshold, try to directly mmap this chunk. - 5. If available, get memory from system and use it - - The ugly goto's here ensure that postaction occurs along all paths. - */ - -#if USE_LOCKS - ensure_initialization(); /* initialize in sys_alloc if not using locks */ -#endif - - if (!PREACTION(gm)) { - void* mem; - size_t nb; - if (bytes <= MAX_SMALL_REQUEST) { - bindex_t idx; - binmap_t smallbits; - nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); - idx = small_index(nb); - smallbits = gm->smallmap >> idx; - - if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ - mchunkptr b, p; - idx += ~smallbits & 1; /* Uses next bin if idx empty */ - b = smallbin_at(gm, idx); - p = b->fd; - assert(chunksize(p) == small_index2size(idx)); - unlink_first_small_chunk(gm, b, p, idx); - set_inuse_and_pinuse(gm, p, small_index2size(idx)); - mem = chunk2mem(p); - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - - else if (nb > gm->dvsize) { - if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ - mchunkptr b, p, r; - size_t rsize; - bindex_t i; - binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); - binmap_t leastbit = least_bit(leftbits); - compute_bit2idx(leastbit, i); - b = smallbin_at(gm, i); - p = b->fd; - assert(chunksize(p) == small_index2size(i)); - unlink_first_small_chunk(gm, b, p, i); - rsize = small_index2size(i) - nb; - /* Fit here cannot be remainderless if 4byte sizes */ - if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) - set_inuse_and_pinuse(gm, p, small_index2size(i)); - else { - set_size_and_pinuse_of_inuse_chunk(gm, p, nb); - r = chunk_plus_offset(p, nb); - set_size_and_pinuse_of_free_chunk(r, rsize); - replace_dv(gm, r, rsize); - } - mem = chunk2mem(p); - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - - else if (gm->treemap != 0 && (mem = tmalloc_small(gm, nb)) != 0) { - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - } - } - else if (bytes >= MAX_REQUEST) - nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ - else { - nb = pad_request(bytes); - if (gm->treemap != 0 && (mem = tmalloc_large(gm, nb)) != 0) { - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - } - - if (nb <= gm->dvsize) { - size_t rsize = gm->dvsize - nb; - mchunkptr p = gm->dv; - if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ - mchunkptr r = gm->dv = chunk_plus_offset(p, nb); - gm->dvsize = rsize; - set_size_and_pinuse_of_free_chunk(r, rsize); - set_size_and_pinuse_of_inuse_chunk(gm, p, nb); - } - else { /* exhaust dv */ - size_t dvs = gm->dvsize; - gm->dvsize = 0; - gm->dv = 0; - set_inuse_and_pinuse(gm, p, dvs); - } - mem = chunk2mem(p); - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - - else if (nb < gm->topsize) { /* Split top */ - size_t rsize = gm->topsize -= nb; - mchunkptr p = gm->top; - mchunkptr r = gm->top = chunk_plus_offset(p, nb); - r->head = rsize | PINUSE_BIT; - set_size_and_pinuse_of_inuse_chunk(gm, p, nb); - mem = chunk2mem(p); - check_top_chunk(gm, gm->top); - check_malloced_chunk(gm, mem, nb); - goto postaction; - } - - mem = sys_alloc(gm, nb); - - postaction: - POSTACTION(gm); - return mem; - } - - return 0; -} - -void dlfree(void* mem) { - /* - Consolidate freed chunks with preceeding or succeeding bordering - free chunks, if they exist, and then place in a bin. Intermixed - with special cases for top, dv, mmapped chunks, and usage errors. - */ - - if (mem != 0) { - mchunkptr p = mem2chunk(mem); -#if FOOTERS - mstate fm = get_mstate_for(p); - if (!ok_magic(fm)) { - USAGE_ERROR_ACTION(fm, p); - return; - } -#else /* FOOTERS */ -#define fm gm -#endif /* FOOTERS */ - if (!PREACTION(fm)) { - check_inuse_chunk(fm, p); - if (RTCHECK(ok_address(fm, p) && ok_inuse(p))) { - size_t psize = chunksize(p); - mchunkptr next = chunk_plus_offset(p, psize); - if (!pinuse(p)) { - size_t prevsize = p->prev_foot; - if (is_mmapped(p)) { - psize += prevsize + MMAP_FOOT_PAD; - if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) - fm->footprint -= psize; - goto postaction; - } - else { - mchunkptr prev = chunk_minus_offset(p, prevsize); - psize += prevsize; - p = prev; - if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ - if (p != fm->dv) { - unlink_chunk(fm, p, prevsize); - } - else if ((next->head & INUSE_BITS) == INUSE_BITS) { - fm->dvsize = psize; - set_free_with_pinuse(p, psize, next); - goto postaction; - } - } - else - goto erroraction; - } - } - - if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { - if (!cinuse(next)) { /* consolidate forward */ - if (next == fm->top) { - size_t tsize = fm->topsize += psize; - fm->top = p; - p->head = tsize | PINUSE_BIT; - if (p == fm->dv) { - fm->dv = 0; - fm->dvsize = 0; - } - if (should_trim(fm, tsize)) - sys_trim(fm, 0); - goto postaction; - } - else if (next == fm->dv) { - size_t dsize = fm->dvsize += psize; - fm->dv = p; - set_size_and_pinuse_of_free_chunk(p, dsize); - goto postaction; - } - else { - size_t nsize = chunksize(next); - psize += nsize; - unlink_chunk(fm, next, nsize); - set_size_and_pinuse_of_free_chunk(p, psize); - if (p == fm->dv) { - fm->dvsize = psize; - goto postaction; - } - } - } - else - set_free_with_pinuse(p, psize, next); - - if (is_small(psize)) { - insert_small_chunk(fm, p, psize); - check_free_chunk(fm, p); - } - else { - tchunkptr tp = (tchunkptr)p; - insert_large_chunk(fm, tp, psize); - check_free_chunk(fm, p); - if (--fm->release_checks == 0) - release_unused_segments(fm); - } - goto postaction; - } - } - erroraction: - USAGE_ERROR_ACTION(fm, p); - postaction: - POSTACTION(fm); - } - } -#if !FOOTERS -#undef fm -#endif /* FOOTERS */ -} - -void* dlcalloc(size_t n_elements, size_t elem_size) { - void* mem; - size_t req = 0; - if (n_elements != 0) { - req = n_elements * elem_size; - if (((n_elements | elem_size) & ~(size_t)0xffff) && - (req / n_elements != elem_size)) - req = MAX_SIZE_T; /* force downstream failure on overflow */ - } - mem = dlmalloc(req); - if (mem != 0 && calloc_must_clear(mem2chunk(mem))) - memset(mem, 0, req); - return mem; -} - -void* dlrealloc(void* oldmem, size_t bytes) { - if (oldmem == 0) - return dlmalloc(bytes); -#ifdef REALLOC_ZERO_BYTES_FREES - if (bytes == 0) { - dlfree(oldmem); - return 0; - } -#endif /* REALLOC_ZERO_BYTES_FREES */ - else { -#if ! FOOTERS - mstate m = gm; -#else /* FOOTERS */ - mstate m = get_mstate_for(mem2chunk(oldmem)); - if (!ok_magic(m)) { - USAGE_ERROR_ACTION(m, oldmem); - return 0; - } -#endif /* FOOTERS */ - return internal_realloc(m, oldmem, bytes); - } -} - -void* dlmemalign(size_t alignment, size_t bytes) { - return internal_memalign(gm, alignment, bytes); -} - -void** dlindependent_calloc(size_t n_elements, size_t elem_size, - void* chunks[]) { - size_t sz = elem_size; /* serves as 1-element array */ - return ialloc(gm, n_elements, &sz, 3, chunks); -} - -void** dlindependent_comalloc(size_t n_elements, size_t sizes[], - void* chunks[]) { - return ialloc(gm, n_elements, sizes, 0, chunks); -} - -void* dlvalloc(size_t bytes) { - size_t pagesz; - ensure_initialization(); - pagesz = mparams.page_size; - return dlmemalign(pagesz, bytes); -} - -void* dlpvalloc(size_t bytes) { - size_t pagesz; - ensure_initialization(); - pagesz = mparams.page_size; - return dlmemalign(pagesz, (bytes + pagesz - SIZE_T_ONE) & ~(pagesz - SIZE_T_ONE)); -} - -int dlmalloc_trim(size_t pad) { - int result = 0; - ensure_initialization(); - if (!PREACTION(gm)) { - result = sys_trim(gm, pad); - POSTACTION(gm); - } - return result; -} - -size_t dlmalloc_footprint(void) { - return gm->footprint; -} - -size_t dlmalloc_max_footprint(void) { - return gm->max_footprint; -} - -#if !NO_MALLINFO -struct mallinfo dlmallinfo(void) { - return internal_mallinfo(gm); -} -#endif /* NO_MALLINFO */ - -void dlmalloc_stats() { - internal_malloc_stats(gm); -} - -int dlmallopt(int param_number, int value) { - return change_mparam(param_number, value); -} - -#endif /* !ONLY_MSPACES */ - -size_t dlmalloc_usable_size(void* mem) { - if (mem != 0) { - mchunkptr p = mem2chunk(mem); - if (is_inuse(p)) - return chunksize(p) - overhead_for(p); - } - return 0; -} - -/* ----------------------------- user mspaces ---------------------------- */ - -#if MSPACES - -static mstate init_user_mstate(char* tbase, size_t tsize) { - size_t msize = pad_request(sizeof(struct malloc_state)); - mchunkptr mn; - mchunkptr msp = align_as_chunk(tbase); - mstate m = (mstate)(chunk2mem(msp)); - memset(m, 0, msize); - INITIAL_LOCK(&m->mutex); - msp->head = (msize|INUSE_BITS); - m->seg.base = m->least_addr = tbase; - m->seg.size = m->footprint = m->max_footprint = tsize; - m->magic = mparams.magic; - m->release_checks = MAX_RELEASE_CHECK_RATE; - m->mflags = mparams.default_mflags; - m->extp = 0; - m->exts = 0; - disable_contiguous(m); - init_bins(m); - mn = next_chunk(mem2chunk(m)); - init_top(m, mn, (size_t)((tbase + tsize) - (char*)mn) - TOP_FOOT_SIZE); - check_top_chunk(m, m->top); - return m; -} - -mspace create_mspace(size_t capacity, int locked) { - mstate m = 0; - size_t msize; - ensure_initialization(); - msize = pad_request(sizeof(struct malloc_state)); - if (capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { - size_t rs = ((capacity == 0)? mparams.granularity : - (capacity + TOP_FOOT_SIZE + msize)); - size_t tsize = granularity_align(rs); - char* tbase = (char*)(CALL_MMAP(tsize)); - if (tbase != CMFAIL) { - m = init_user_mstate(tbase, tsize); - m->seg.sflags = USE_MMAP_BIT; - set_lock(m, locked); - } - } - return (mspace)m; -} - -mspace create_mspace_with_base(void* base, size_t capacity, int locked) { - mstate m = 0; - size_t msize; - ensure_initialization(); - msize = pad_request(sizeof(struct malloc_state)); - if (capacity > msize + TOP_FOOT_SIZE && - capacity < (size_t) -(msize + TOP_FOOT_SIZE + mparams.page_size)) { - m = init_user_mstate((char*)base, capacity); - m->seg.sflags = EXTERN_BIT; - set_lock(m, locked); - } - return (mspace)m; -} - -int mspace_track_large_chunks(mspace msp, int enable) { - int ret = 0; - mstate ms = (mstate)msp; - if (!PREACTION(ms)) { - if (!use_mmap(ms)) - ret = 1; - if (!enable) - enable_mmap(ms); - else - disable_mmap(ms); - POSTACTION(ms); - } - return ret; -} - -size_t destroy_mspace(mspace msp) { - size_t freed = 0; - mstate ms = (mstate)msp; - if (ok_magic(ms)) { - msegmentptr sp = &ms->seg; - while (sp != 0) { - char* base = sp->base; - size_t size = sp->size; - flag_t flag = sp->sflags; - sp = sp->next; - if ((flag & USE_MMAP_BIT) && !(flag & EXTERN_BIT) && - CALL_MUNMAP(base, size) == 0) - freed += size; - } - } - else { - USAGE_ERROR_ACTION(ms,ms); - } - return freed; -} - -/* - mspace versions of routines are near-clones of the global - versions. This is not so nice but better than the alternatives. -*/ - - -void* mspace_malloc(mspace msp, size_t bytes) { - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - if (!PREACTION(ms)) { - void* mem; - size_t nb; - if (bytes <= MAX_SMALL_REQUEST) { - bindex_t idx; - binmap_t smallbits; - nb = (bytes < MIN_REQUEST)? MIN_CHUNK_SIZE : pad_request(bytes); - idx = small_index(nb); - smallbits = ms->smallmap >> idx; - - if ((smallbits & 0x3U) != 0) { /* Remainderless fit to a smallbin. */ - mchunkptr b, p; - idx += ~smallbits & 1; /* Uses next bin if idx empty */ - b = smallbin_at(ms, idx); - p = b->fd; - assert(chunksize(p) == small_index2size(idx)); - unlink_first_small_chunk(ms, b, p, idx); - set_inuse_and_pinuse(ms, p, small_index2size(idx)); - mem = chunk2mem(p); - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - - else if (nb > ms->dvsize) { - if (smallbits != 0) { /* Use chunk in next nonempty smallbin */ - mchunkptr b, p, r; - size_t rsize; - bindex_t i; - binmap_t leftbits = (smallbits << idx) & left_bits(idx2bit(idx)); - binmap_t leastbit = least_bit(leftbits); - compute_bit2idx(leastbit, i); - b = smallbin_at(ms, i); - p = b->fd; - assert(chunksize(p) == small_index2size(i)); - unlink_first_small_chunk(ms, b, p, i); - rsize = small_index2size(i) - nb; - /* Fit here cannot be remainderless if 4byte sizes */ - if (SIZE_T_SIZE != 4 && rsize < MIN_CHUNK_SIZE) - set_inuse_and_pinuse(ms, p, small_index2size(i)); - else { - set_size_and_pinuse_of_inuse_chunk(ms, p, nb); - r = chunk_plus_offset(p, nb); - set_size_and_pinuse_of_free_chunk(r, rsize); - replace_dv(ms, r, rsize); - } - mem = chunk2mem(p); - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - - else if (ms->treemap != 0 && (mem = tmalloc_small(ms, nb)) != 0) { - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - } - } - else if (bytes >= MAX_REQUEST) - nb = MAX_SIZE_T; /* Too big to allocate. Force failure (in sys alloc) */ - else { - nb = pad_request(bytes); - if (ms->treemap != 0 && (mem = tmalloc_large(ms, nb)) != 0) { - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - } - - if (nb <= ms->dvsize) { - size_t rsize = ms->dvsize - nb; - mchunkptr p = ms->dv; - if (rsize >= MIN_CHUNK_SIZE) { /* split dv */ - mchunkptr r = ms->dv = chunk_plus_offset(p, nb); - ms->dvsize = rsize; - set_size_and_pinuse_of_free_chunk(r, rsize); - set_size_and_pinuse_of_inuse_chunk(ms, p, nb); - } - else { /* exhaust dv */ - size_t dvs = ms->dvsize; - ms->dvsize = 0; - ms->dv = 0; - set_inuse_and_pinuse(ms, p, dvs); - } - mem = chunk2mem(p); - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - - else if (nb < ms->topsize) { /* Split top */ - size_t rsize = ms->topsize -= nb; - mchunkptr p = ms->top; - mchunkptr r = ms->top = chunk_plus_offset(p, nb); - r->head = rsize | PINUSE_BIT; - set_size_and_pinuse_of_inuse_chunk(ms, p, nb); - mem = chunk2mem(p); - check_top_chunk(ms, ms->top); - check_malloced_chunk(ms, mem, nb); - goto postaction; - } - - mem = sys_alloc(ms, nb); - - postaction: - POSTACTION(ms); - return mem; - } - - return 0; -} - -void mspace_free(mspace msp, void* mem) { - if (mem != 0) { - mchunkptr p = mem2chunk(mem); -#if FOOTERS - mstate fm = get_mstate_for(p); - msp = msp; /* placate people compiling -Wunused */ -#else /* FOOTERS */ - mstate fm = (mstate)msp; -#endif /* FOOTERS */ - if (!ok_magic(fm)) { - USAGE_ERROR_ACTION(fm, p); - return; - } - if (!PREACTION(fm)) { - check_inuse_chunk(fm, p); - if (RTCHECK(ok_address(fm, p) && ok_inuse(p))) { - size_t psize = chunksize(p); - mchunkptr next = chunk_plus_offset(p, psize); - if (!pinuse(p)) { - size_t prevsize = p->prev_foot; - if (is_mmapped(p)) { - psize += prevsize + MMAP_FOOT_PAD; - if (CALL_MUNMAP((char*)p - prevsize, psize) == 0) - fm->footprint -= psize; - goto postaction; - } - else { - mchunkptr prev = chunk_minus_offset(p, prevsize); - psize += prevsize; - p = prev; - if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */ - if (p != fm->dv) { - unlink_chunk(fm, p, prevsize); - } - else if ((next->head & INUSE_BITS) == INUSE_BITS) { - fm->dvsize = psize; - set_free_with_pinuse(p, psize, next); - goto postaction; - } - } - else - goto erroraction; - } - } - - if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) { - if (!cinuse(next)) { /* consolidate forward */ - if (next == fm->top) { - size_t tsize = fm->topsize += psize; - fm->top = p; - p->head = tsize | PINUSE_BIT; - if (p == fm->dv) { - fm->dv = 0; - fm->dvsize = 0; - } - if (should_trim(fm, tsize)) - sys_trim(fm, 0); - goto postaction; - } - else if (next == fm->dv) { - size_t dsize = fm->dvsize += psize; - fm->dv = p; - set_size_and_pinuse_of_free_chunk(p, dsize); - goto postaction; - } - else { - size_t nsize = chunksize(next); - psize += nsize; - unlink_chunk(fm, next, nsize); - set_size_and_pinuse_of_free_chunk(p, psize); - if (p == fm->dv) { - fm->dvsize = psize; - goto postaction; - } - } - } - else - set_free_with_pinuse(p, psize, next); - - if (is_small(psize)) { - insert_small_chunk(fm, p, psize); - check_free_chunk(fm, p); - } - else { - tchunkptr tp = (tchunkptr)p; - insert_large_chunk(fm, tp, psize); - check_free_chunk(fm, p); - if (--fm->release_checks == 0) - release_unused_segments(fm); - } - goto postaction; - } - } - erroraction: - USAGE_ERROR_ACTION(fm, p); - postaction: - POSTACTION(fm); - } - } -} - -void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size) { - void* mem; - size_t req = 0; - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - if (n_elements != 0) { - req = n_elements * elem_size; - if (((n_elements | elem_size) & ~(size_t)0xffff) && - (req / n_elements != elem_size)) - req = MAX_SIZE_T; /* force downstream failure on overflow */ - } - mem = internal_malloc(ms, req); - if (mem != 0 && calloc_must_clear(mem2chunk(mem))) - memset(mem, 0, req); - return mem; -} - -void* mspace_realloc(mspace msp, void* oldmem, size_t bytes) { - if (oldmem == 0) - return mspace_malloc(msp, bytes); -#ifdef REALLOC_ZERO_BYTES_FREES - if (bytes == 0) { - mspace_free(msp, oldmem); - return 0; - } -#endif /* REALLOC_ZERO_BYTES_FREES */ - else { -#if FOOTERS - mchunkptr p = mem2chunk(oldmem); - mstate ms = get_mstate_for(p); -#else /* FOOTERS */ - mstate ms = (mstate)msp; -#endif /* FOOTERS */ - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - return internal_realloc(ms, oldmem, bytes); - } -} - -void* mspace_memalign(mspace msp, size_t alignment, size_t bytes) { - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - return internal_memalign(ms, alignment, bytes); -} - -void** mspace_independent_calloc(mspace msp, size_t n_elements, - size_t elem_size, void* chunks[]) { - size_t sz = elem_size; /* serves as 1-element array */ - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - return ialloc(ms, n_elements, &sz, 3, chunks); -} - -void** mspace_independent_comalloc(mspace msp, size_t n_elements, - size_t sizes[], void* chunks[]) { - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - return 0; - } - return ialloc(ms, n_elements, sizes, 0, chunks); -} - -int mspace_trim(mspace msp, size_t pad) { - int result = 0; - mstate ms = (mstate)msp; - if (ok_magic(ms)) { - if (!PREACTION(ms)) { - result = sys_trim(ms, pad); - POSTACTION(ms); - } - } - else { - USAGE_ERROR_ACTION(ms,ms); - } - return result; -} - -void mspace_malloc_stats(mspace msp) { - mstate ms = (mstate)msp; - if (ok_magic(ms)) { - internal_malloc_stats(ms); - } - else { - USAGE_ERROR_ACTION(ms,ms); - } -} - -size_t mspace_footprint(mspace msp) { - size_t result = 0; - mstate ms = (mstate)msp; - if (ok_magic(ms)) { - result = ms->footprint; - } - else { - USAGE_ERROR_ACTION(ms,ms); - } - return result; -} - - -size_t mspace_max_footprint(mspace msp) { - size_t result = 0; - mstate ms = (mstate)msp; - if (ok_magic(ms)) { - result = ms->max_footprint; - } - else { - USAGE_ERROR_ACTION(ms,ms); - } - return result; -} - - -#if !NO_MALLINFO -struct mallinfo mspace_mallinfo(mspace msp) { - mstate ms = (mstate)msp; - if (!ok_magic(ms)) { - USAGE_ERROR_ACTION(ms,ms); - } - return internal_mallinfo(ms); -} -#endif /* NO_MALLINFO */ - -size_t mspace_usable_size(void* mem) { - if (mem != 0) { - mchunkptr p = mem2chunk(mem); - if (is_inuse(p)) - return chunksize(p) - overhead_for(p); - } - return 0; -} - -int mspace_mallopt(int param_number, int value) { - return change_mparam(param_number, value); -} - -#endif /* MSPACES */ - - -/* -------------------- Alternative MORECORE functions ------------------- */ - -/* - Guidelines for creating a custom version of MORECORE: - - * For best performance, MORECORE should allocate in multiples of pagesize. - * MORECORE may allocate more memory than requested. (Or even less, - but this will usually result in a malloc failure.) - * MORECORE must not allocate memory when given argument zero, but - instead return one past the end address of memory from previous - nonzero call. - * For best performance, consecutive calls to MORECORE with positive - arguments should return increasing addresses, indicating that - space has been contiguously extended. - * Even though consecutive calls to MORECORE need not return contiguous - addresses, it must be OK for malloc'ed chunks to span multiple - regions in those cases where they do happen to be contiguous. - * MORECORE need not handle negative arguments -- it may instead - just return MFAIL when given negative arguments. - Negative arguments are always multiples of pagesize. MORECORE - must not misinterpret negative args as large positive unsigned - args. You can suppress all such calls from even occurring by defining - MORECORE_CANNOT_TRIM, - - As an example alternative MORECORE, here is a custom allocator - kindly contributed for pre-OSX macOS. It uses virtually but not - necessarily physically contiguous non-paged memory (locked in, - present and won't get swapped out). You can use it by uncommenting - this section, adding some #includes, and setting up the appropriate - defines above: - - #define MORECORE osMoreCore - - There is also a shutdown routine that should somehow be called for - cleanup upon program exit. - - #define MAX_POOL_ENTRIES 100 - #define MINIMUM_MORECORE_SIZE (64 * 1024U) - static int next_os_pool; - void *our_os_pools[MAX_POOL_ENTRIES]; - - void *osMoreCore(int size) - { - void *ptr = 0; - static void *sbrk_top = 0; - - if (size > 0) - { - if (size < MINIMUM_MORECORE_SIZE) - size = MINIMUM_MORECORE_SIZE; - if (CurrentExecutionLevel() == kTaskLevel) - ptr = PoolAllocateResident(size + RM_PAGE_SIZE, 0); - if (ptr == 0) - { - return (void *) MFAIL; - } - // save ptrs so they can be freed during cleanup - our_os_pools[next_os_pool] = ptr; - next_os_pool++; - ptr = (void *) ((((size_t) ptr) + RM_PAGE_MASK) & ~RM_PAGE_MASK); - sbrk_top = (char *) ptr + size; - return ptr; - } - else if (size < 0) - { - // we don't currently support shrink behavior - return (void *) MFAIL; - } - else - { - return sbrk_top; - } - } - - // cleanup any allocated memory pools - // called as last thing before shutting down driver - - void osCleanupMem(void) - { - void **ptr; - - for (ptr = our_os_pools; ptr < &our_os_pools[MAX_POOL_ENTRIES]; ptr++) - if (*ptr) - { - PoolDeallocate(*ptr); - *ptr = 0; - } - } - -*/ - - -/* ----------------------------------------------------------------------- -History: - V2.8.4 Wed May 27 09:56:23 2009 Doug Lea (dl at gee) - * Use zeros instead of prev foot for is_mmapped - * Add mspace_track_large_chunks; thanks to Jean Brouwers - * Fix set_inuse in internal_realloc; thanks to Jean Brouwers - * Fix insufficient sys_alloc padding when using 16byte alignment - * Fix bad error check in mspace_footprint - * Adaptations for ptmalloc; thanks to Wolfram Gloger. - * Reentrant spin locks; thanks to Earl Chew and others - * Win32 improvements; thanks to Niall Douglas and Earl Chew - * Add NO_SEGMENT_TRAVERSAL and MAX_RELEASE_CHECK_RATE options - * Extension hook in malloc_state - * Various small adjustments to reduce warnings on some compilers - * Various configuration extensions/changes for more platforms. Thanks - to all who contributed these. - - V2.8.3 Thu Sep 22 11:16:32 2005 Doug Lea (dl at gee) - * Add max_footprint functions - * Ensure all appropriate literals are size_t - * Fix conditional compilation problem for some #define settings - * Avoid concatenating segments with the one provided - in create_mspace_with_base - * Rename some variables to avoid compiler shadowing warnings - * Use explicit lock initialization. - * Better handling of sbrk interference. - * Simplify and fix segment insertion, trimming and mspace_destroy - * Reinstate REALLOC_ZERO_BYTES_FREES option from 2.7.x - * Thanks especially to Dennis Flanagan for help on these. - - V2.8.2 Sun Jun 12 16:01:10 2005 Doug Lea (dl at gee) - * Fix memalign brace error. - - V2.8.1 Wed Jun 8 16:11:46 2005 Doug Lea (dl at gee) - * Fix improper #endif nesting in C++ - * Add explicit casts needed for C++ - - V2.8.0 Mon May 30 14:09:02 2005 Doug Lea (dl at gee) - * Use trees for large bins - * Support mspaces - * Use segments to unify sbrk-based and mmap-based system allocation, - removing need for emulation on most platforms without sbrk. - * Default safety checks - * Optional footer checks. Thanks to William Robertson for the idea. - * Internal code refactoring - * Incorporate suggestions and platform-specific changes. - Thanks to Dennis Flanagan, Colin Plumb, Niall Douglas, - Aaron Bachmann, Emery Berger, and others. - * Speed up non-fastbin processing enough to remove fastbins. - * Remove useless cfree() to avoid conflicts with other apps. - * Remove internal memcpy, memset. Compilers handle builtins better. - * Remove some options that no one ever used and rename others. - - V2.7.2 Sat Aug 17 09:07:30 2002 Doug Lea (dl at gee) - * Fix malloc_state bitmap array misdeclaration - - V2.7.1 Thu Jul 25 10:58:03 2002 Doug Lea (dl at gee) - * Allow tuning of FIRST_SORTED_BIN_SIZE - * Use PTR_UINT as type for all ptr->int casts. Thanks to John Belmonte. - * Better detection and support for non-contiguousness of MORECORE. - Thanks to Andreas Mueller, Conal Walsh, and Wolfram Gloger - * Bypass most of malloc if no frees. Thanks To Emery Berger. - * Fix freeing of old top non-contiguous chunk im sysmalloc. - * Raised default trim and map thresholds to 256K. - * Fix mmap-related #defines. Thanks to Lubos Lunak. - * Fix copy macros; added LACKS_FCNTL_H. Thanks to Neal Walfield. - * Branch-free bin calculation - * Default trim and mmap thresholds now 256K. - - V2.7.0 Sun Mar 11 14:14:06 2001 Doug Lea (dl at gee) - * Introduce independent_comalloc and independent_calloc. - Thanks to Michael Pachos for motivation and help. - * Make optional .h file available - * Allow > 2GB requests on 32bit systems. - * new WIN32 sbrk, mmap, munmap, lock code from . - Thanks also to Andreas Mueller , - and Anonymous. - * Allow override of MALLOC_ALIGNMENT (Thanks to Ruud Waij for - helping test this.) - * memalign: check alignment arg - * realloc: don't try to shift chunks backwards, since this - leads to more fragmentation in some programs and doesn't - seem to help in any others. - * Collect all cases in malloc requiring system memory into sysmalloc - * Use mmap as backup to sbrk - * Place all internal state in malloc_state - * Introduce fastbins (although similar to 2.5.1) - * Many minor tunings and cosmetic improvements - * Introduce USE_PUBLIC_MALLOC_WRAPPERS, USE_MALLOC_LOCK - * Introduce MALLOC_FAILURE_ACTION, MORECORE_CONTIGUOUS - Thanks to Tony E. Bennett and others. - * Include errno.h to support default failure action. - - V2.6.6 Sun Dec 5 07:42:19 1999 Doug Lea (dl at gee) - * return null for negative arguments - * Added Several WIN32 cleanups from Martin C. Fong - * Add 'LACKS_SYS_PARAM_H' for those systems without 'sys/param.h' - (e.g. WIN32 platforms) - * Cleanup header file inclusion for WIN32 platforms - * Cleanup code to avoid Microsoft Visual C++ compiler complaints - * Add 'USE_DL_PREFIX' to quickly allow co-existence with existing - memory allocation routines - * Set 'malloc_getpagesize' for WIN32 platforms (needs more work) - * Use 'assert' rather than 'ASSERT' in WIN32 code to conform to - usage of 'assert' in non-WIN32 code - * Improve WIN32 'sbrk()' emulation's 'findRegion()' routine to - avoid infinite loop - * Always call 'fREe()' rather than 'free()' - - V2.6.5 Wed Jun 17 15:57:31 1998 Doug Lea (dl at gee) - * Fixed ordering problem with boundary-stamping - - V2.6.3 Sun May 19 08:17:58 1996 Doug Lea (dl at gee) - * Added pvalloc, as recommended by H.J. Liu - * Added 64bit pointer support mainly from Wolfram Gloger - * Added anonymously donated WIN32 sbrk emulation - * Malloc, calloc, getpagesize: add optimizations from Raymond Nijssen - * malloc_extend_top: fix mask error that caused wastage after - foreign sbrks - * Add linux mremap support code from HJ Liu - - V2.6.2 Tue Dec 5 06:52:55 1995 Doug Lea (dl at gee) - * Integrated most documentation with the code. - * Add support for mmap, with help from - Wolfram Gloger (Gloger@lrz.uni-muenchen.de). - * Use last_remainder in more cases. - * Pack bins using idea from colin@nyx10.cs.du.edu - * Use ordered bins instead of best-fit threshhold - * Eliminate block-local decls to simplify tracing and debugging. - * Support another case of realloc via move into top - * Fix error occuring when initial sbrk_base not word-aligned. - * Rely on page size for units instead of SBRK_UNIT to - avoid surprises about sbrk alignment conventions. - * Add mallinfo, mallopt. Thanks to Raymond Nijssen - (raymond@es.ele.tue.nl) for the suggestion. - * Add `pad' argument to malloc_trim and top_pad mallopt parameter. - * More precautions for cases where other routines call sbrk, - courtesy of Wolfram Gloger (Gloger@lrz.uni-muenchen.de). - * Added macros etc., allowing use in linux libc from - H.J. Lu (hjl@gnu.ai.mit.edu) - * Inverted this history list - - V2.6.1 Sat Dec 2 14:10:57 1995 Doug Lea (dl at gee) - * Re-tuned and fixed to behave more nicely with V2.6.0 changes. - * Removed all preallocation code since under current scheme - the work required to undo bad preallocations exceeds - the work saved in good cases for most test programs. - * No longer use return list or unconsolidated bins since - no scheme using them consistently outperforms those that don't - given above changes. - * Use best fit for very large chunks to prevent some worst-cases. - * Added some support for debugging - - V2.6.0 Sat Nov 4 07:05:23 1995 Doug Lea (dl at gee) - * Removed footers when chunks are in use. Thanks to - Paul Wilson (wilson@cs.texas.edu) for the suggestion. - - V2.5.4 Wed Nov 1 07:54:51 1995 Doug Lea (dl at gee) - * Added malloc_trim, with help from Wolfram Gloger - (wmglo@Dent.MED.Uni-Muenchen.DE). - - V2.5.3 Tue Apr 26 10:16:01 1994 Doug Lea (dl at g) - - V2.5.2 Tue Apr 5 16:20:40 1994 Doug Lea (dl at g) - * realloc: try to expand in both directions - * malloc: swap order of clean-bin strategy; - * realloc: only conditionally expand backwards - * Try not to scavenge used bins - * Use bin counts as a guide to preallocation - * Occasionally bin return list chunks in first scan - * Add a few optimizations from colin@nyx10.cs.du.edu - - V2.5.1 Sat Aug 14 15:40:43 1993 Doug Lea (dl at g) - * faster bin computation & slightly different binning - * merged all consolidations to one part of malloc proper - (eliminating old malloc_find_space & malloc_clean_bin) - * Scan 2 returns chunks (not just 1) - * Propagate failure in realloc if malloc returns 0 - * Add stuff to allow compilation on non-ANSI compilers - from kpv@research.att.com - - V2.5 Sat Aug 7 07:41:59 1993 Doug Lea (dl at g.oswego.edu) - * removed potential for odd address access in prev_chunk - * removed dependency on getpagesize.h - * misc cosmetics and a bit more internal documentation - * anticosmetics: mangled names in macros to evade debugger strangeness - * tested on sparc, hp-700, dec-mips, rs6000 - with gcc & native cc (hp, dec only) allowing - Detlefs & Zorn comparison study (in SIGPLAN Notices.) - - Trial version Fri Aug 28 13:14:29 1992 Doug Lea (dl at g.oswego.edu) - * Based loosely on libg++-1.2X malloc. (It retains some of the overall - structure of old version, but most details differ.) - -*/ - diff --git a/polymer-perf/eduke32/build/include/md4.h b/polymer-perf/eduke32/build/include/md4.h deleted file mode 100644 index fdb23b4f7..000000000 --- a/polymer-perf/eduke32/build/include/md4.h +++ /dev/null @@ -1,38 +0,0 @@ -/* MD4.H - header file for MD4C.C - Modified from original version published in RFC1320 by - Jonathon Fowler (jonof@edgenetwork.org) - */ - -/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All - rights reserved. - - License to copy and use this software is granted provided that it - is identified as the "RSA Data Security, Inc. MD4 Message-Digest - Algorithm" in all material mentioning or referencing this software - or this function. - - License is also granted to make and use derivative works provided - that such works are identified as "derived from the RSA Data - Security, Inc. MD4 Message-Digest Algorithm" in all material - mentioning or referencing the derived work. - - RSA Data Security, Inc. makes no representations concerning either - the merchantability of this software or the suitability of this - software for any particular purpose. It is provided "as is" - without express or implied warranty of any kind. - - These notices must be retained in any copies of any part of this - documentation and/or software. - */ - -/* MD4 context. */ -typedef struct { - unsigned int state[4]; /* state (ABCD) */ - unsigned int count[2]; /* number of bits, modulo 2^64 (lsb first) */ - unsigned char buffer[64]; /* input buffer */ -} MD4_CTX; - -void md4once(unsigned char *block, unsigned int len, unsigned char digest[16]); -void md4init(MD4_CTX *); -void md4block(MD4_CTX *, unsigned char *, unsigned int); -void md4finish(unsigned char [16], MD4_CTX *); diff --git a/polymer-perf/eduke32/build/include/mdsprite.h b/polymer-perf/eduke32/build/include/mdsprite.h deleted file mode 100644 index 22638bec3..000000000 --- a/polymer-perf/eduke32/build/include/mdsprite.h +++ /dev/null @@ -1,248 +0,0 @@ -#ifndef _mdsprite_h_ -# define _mdsprite_h_ - -#include "hightile.h" - -#ifdef __POWERPC__ -#define SHIFTMOD32(a) ((a)&31) -#else -#define SHIFTMOD32(a) (a) -#endif - -typedef struct -{ - int32_t mdnum; //VOX=1, MD2=2, MD3=3. NOTE: must be first in structure! - int32_t shadeoff; - float scale, bscale, zadd; - GLuint *texid; // skins - int32_t flags; -} mdmodel_t; - -typedef struct _mdanim_t -{ - int32_t startframe, endframe; - int32_t fpssc, flags; - struct _mdanim_t *next; -} mdanim_t; -#define MDANIM_LOOP 0 -#define MDANIM_ONESHOT 1 - -typedef struct _mdskinmap_t -{ - uint8_t palette, filler[3]; // Build palette number - int32_t skinnum, surfnum; // Skin identifier, surface number - char *fn; // Skin filename - GLuint texid[HICEFFECTMASK+1]; // OpenGL texture numbers for effect variations - struct _mdskinmap_t *next; - float param, specpower, specfactor; -} mdskinmap_t; - - -//This MD2 code is based on the source code from David Henry (tfc_duke(at)hotmail.com) -// Was at http://tfc.duke.free.fr/us/tutorials/models/md2.htm -// Available from http://web.archive.org/web/20030816010242/http://tfc.duke.free.fr/us/tutorials/models/md2.htm -// Now at http://tfc.duke.free.fr/coding/md2.html (in French) -//He probably wouldn't recognize it if he looked at it though :) -typedef struct { float x, y, z; } point3d; - -typedef struct -{ - int32_t id, vers, skinxsiz, skinysiz, framebytes; //id:"IPD2", vers:8 - int32_t numskins, numverts, numuv, numtris, numglcmds, numframes; - int32_t ofsskins, ofsuv, ofstris, ofsframes, ofsglcmds, ofseof; //ofsskins: skin names (64 bytes each) -} md2head_t; - -typedef struct { uint8_t v[3], ni; } md2vert_t; //compressed vertex coords (x,y,z) -typedef struct -{ - point3d mul, add; //scale&translation vector - char name[16]; //frame name - md2vert_t verts[1]; //first vertex of this frame -} md2frame_t; - -typedef struct { int16_t u, v; } md2uv_t; -typedef struct -{ - uint16_t v[3]; - uint16_t u[3]; -} md2tri_t; - -typedef struct -{ - //WARNING: This top block is a union between md2model&md3model: Make sure it matches! - int32_t mdnum; //VOX=1, MD2=2, MD3=3. NOTE: must be first in structure! - int32_t shadeoff; - float scale, bscale, zadd; - GLuint *texid; // texture ids for base skin if no mappings defined - int32_t flags; - - int32_t numframes, cframe, nframe, fpssc, usesalpha; - float oldtime, curtime, interpol; - mdanim_t *animations; - mdskinmap_t *skinmap; - int32_t numskins, skinloaded; // set to 1+numofskin when a skin is loaded and the tex coords are modified, - - //MD2 specific stuff: - int32_t numverts, numglcmds, framebytes, *glcmds; - char *frames; - char *basepath; // pointer to string of base path - char *skinfn; // pointer to first of numskins 64-char strings - md2uv_t *uv; - md2tri_t* tris; -} md2model_t; - - -typedef struct { char nam[64]; int32_t i; } md3shader_t; //ascz path of shader, shader index -typedef struct { int32_t i[3]; } md3tri_t; //indices of tri -typedef struct { float u, v; } md3uv_t; -typedef struct { int16_t x, y, z; uint8_t nlat, nlng; } md3xyzn_t; //xyz are [10:6] ints - -typedef struct -{ - point3d min, max, cen; //bounding box&origin - float r; //radius of bounding sphere - char nam[16]; //ascz frame name -} md3frame_t; - -typedef struct -{ - char nam[64]; //ascz tag name - point3d p, x, y, z; //tag object pos&orient -} md3tag_t; - -typedef struct -{ - int32_t id; //IDP3(0x33806873) - char nam[64]; //ascz surface name - int32_t flags; //? - int32_t numframes, numshaders, numverts, numtris; //numframes same as md3head,max shade=~256,vert=~4096,tri=~8192 - int32_t ofstris; - int32_t ofsshaders; - int32_t ofsuv; - int32_t ofsxyzn; - int32_t ofsend; - // DO NOT read directly to this structure - // the following block is NOT in the file format - // be sure to use the SIZEOF_MD3SURF_T macro - md3tri_t *tris; - md3shader_t *shaders; - md3uv_t *uv; - md3xyzn_t *xyzn; - float *geometry; -} md3surf_t; - -#define SIZEOF_MD3SURF_T (11*sizeof(int32_t) + 64*sizeof(char)) - -typedef struct -{ - int32_t id, vers; //id=IDP3(0x33806873), vers=15 - char nam[64]; //ascz path in PK3 - int32_t flags; //? - int32_t numframes, numtags, numsurfs, numskins; //max=~1024,~16,~32,numskins=artifact of MD2; use shader field instead - int32_t ofsframes; - int32_t ofstags; - int32_t ofssurfs; - int32_t eof; - // DO NOT read directly to this structure - // the following block is NOT in the file format - // be sure to use the SIZEOF_MD3HEAD_T macro - md3frame_t *frames; - md3tag_t *tags; - md3surf_t *surfs; -} md3head_t; - -#define SIZEOF_MD3HEAD_T (sizeof(md3head_t)-3*sizeof(void*)) - -typedef struct -{ - //WARNING: This top block is a union between md2model&md3model: Make sure it matches! - int32_t mdnum; //VOX=1, MD2=2, MD3=3. NOTE: must be first in structure! - int32_t shadeoff; - float scale, bscale, zadd; - uint32_t *texid; // texture ids for base skin if no mappings defined - int32_t flags; - - int32_t numframes, cframe, nframe, fpssc, usesalpha; - float oldtime, curtime, interpol; - mdanim_t *animations; - mdskinmap_t *skinmap; - int32_t numskins, skinloaded; // set to 1+numofskin when a skin is loaded and the tex coords are modified, - - //MD3 specific - md3head_t head; - point3d *muladdframes; - uint16_t *indexes; - uint16_t *vindexes; - float *maxdepths; - GLuint* vbos; - // polymer VBO names after that, allocated per surface - GLuint* indices; - GLuint* texcoords; - GLuint* geometry; -} md3model_t; - -#define VOXBORDWIDTH 1 //use 0 to save memory, but has texture artifacts; 1 looks better... -#define VOXUSECHAR 0 -#if (VOXUSECHAR != 0) -typedef struct { uint8_t x, y, z, u, v; } vert_t; -#else -typedef struct { uint16_t x, y, z, u, v; } vert_t; -#endif -typedef struct { vert_t v[4]; } voxrect_t; -typedef struct -{ - //WARNING: This top block is a union of md2model,md3model,voxmodel: Make sure it matches! - int32_t mdnum; //VOX=1, MD2=2, MD3=3. NOTE: must be first in structure! - int32_t shadeoff; - float scale, bscale, zadd; - uint32_t *texid; // skins for palettes - int32_t flags; - - //VOX specific stuff: - voxrect_t *quad; int32_t qcnt, qfacind[7]; - int32_t *mytex, mytexx, mytexy; - int32_t xsiz, ysiz, zsiz; - float xpiv, ypiv, zpiv; - int32_t is8bit; -} voxmodel_t; - -/* -typedef struct -{ - // maps build tiles to particular animation frames of a model - int32_t modelid; - int32_t skinnum; - int32_t framenum; // calculate the number from the name when declaring - float smoothduration; - int32_t next; - char pal; -} tile2model_t; - -#define EXTRATILES MAXTILES -EXTERN tile2model_t tile2model[MAXTILES+EXTRATILES]; -*/ - -EXTERN mdmodel_t **models; - -void updateanimation(md2model_t *m, spritetype *tspr); -int32_t mdloadskin(md2model_t *m, int32_t number, int32_t pal, int32_t surf); -void mdinit(void); -void freeallmodels(void); -void clearskins(void); -int32_t mddraw(spritetype *tspr); - -typedef struct { float xadd, yadd, zadd; int16_t angadd, flags, fov; } hudtyp; - -EXTERN hudtyp hudmem[2][MAXTILES]; - -EXTERN int32_t mdpause; -EXTERN int32_t nummodelsalloced, nextmodelid; -EXTERN voxmodel_t *voxmodels[MAXVOXELS]; - -void voxfree(voxmodel_t *m); -voxmodel_t *voxload(const char *filnam); -int32_t voxdraw(voxmodel_t *m, spritetype *tspr); - -int md3postload_polymer(md3model_t* m); - -#endif // !_mdsprite_h_ diff --git a/polymer-perf/eduke32/build/include/msvc/inttypes.h b/polymer-perf/eduke32/build/include/msvc/inttypes.h deleted file mode 100644 index 4b3828a21..000000000 --- a/polymer-perf/eduke32/build/include/msvc/inttypes.h +++ /dev/null @@ -1,305 +0,0 @@ -// ISO C9x compliant inttypes.h for Microsoft Visual Studio -// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 -// -// Copyright (c) 2006 Alexander Chemeris -// -// 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 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. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _MSC_VER // [ -#error "Use this header only with Microsoft Visual C++ compilers!" -#endif // _MSC_VER ] - -#ifndef _MSC_INTTYPES_H_ // [ -#define _MSC_INTTYPES_H_ - -#if _MSC_VER > 1000 -#pragma once -#endif - -#include "stdint.h" - -// 7.8 Format conversion of integer types - -typedef struct { - intmax_t quot; - intmax_t rem; -} imaxdiv_t; - -// 7.8.1 Macros for format specifiers - -#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198 - -// The fprintf macros for signed integers are: -#define PRId8 "d" -#define PRIi8 "i" -#define PRIdLEAST8 "d" -#define PRIiLEAST8 "i" -#define PRIdFAST8 "d" -#define PRIiFAST8 "i" - -#define PRId16 "hd" -#define PRIi16 "hi" -#define PRIdLEAST16 "hd" -#define PRIiLEAST16 "hi" -#define PRIdFAST16 "hd" -#define PRIiFAST16 "hi" - -#define PRId32 "I32d" -#define PRIi32 "I32i" -#define PRIdLEAST32 "I32d" -#define PRIiLEAST32 "I32i" -#define PRIdFAST32 "I32d" -#define PRIiFAST32 "I32i" - -#define PRId64 "I64d" -#define PRIi64 "I64i" -#define PRIdLEAST64 "I64d" -#define PRIiLEAST64 "I64i" -#define PRIdFAST64 "I64d" -#define PRIiFAST64 "I64i" - -#define PRIdMAX "I64d" -#define PRIiMAX "I64i" - -#define PRIdPTR "Id" -#define PRIiPTR "Ii" - -// The fprintf macros for unsigned integers are: -#define PRIo8 "o" -#define PRIu8 "u" -#define PRIx8 "x" -#define PRIX8 "X" -#define PRIoLEAST8 "o" -#define PRIuLEAST8 "u" -#define PRIxLEAST8 "x" -#define PRIXLEAST8 "X" -#define PRIoFAST8 "o" -#define PRIuFAST8 "u" -#define PRIxFAST8 "x" -#define PRIXFAST8 "X" - -#define PRIo16 "ho" -#define PRIu16 "hu" -#define PRIx16 "hx" -#define PRIX16 "hX" -#define PRIoLEAST16 "ho" -#define PRIuLEAST16 "hu" -#define PRIxLEAST16 "hx" -#define PRIXLEAST16 "hX" -#define PRIoFAST16 "ho" -#define PRIuFAST16 "hu" -#define PRIxFAST16 "hx" -#define PRIXFAST16 "hX" - -#define PRIo32 "I32o" -#define PRIu32 "I32u" -#define PRIx32 "I32x" -#define PRIX32 "I32X" -#define PRIoLEAST32 "I32o" -#define PRIuLEAST32 "I32u" -#define PRIxLEAST32 "I32x" -#define PRIXLEAST32 "I32X" -#define PRIoFAST32 "I32o" -#define PRIuFAST32 "I32u" -#define PRIxFAST32 "I32x" -#define PRIXFAST32 "I32X" - -#define PRIo64 "I64o" -#define PRIu64 "I64u" -#define PRIx64 "I64x" -#define PRIX64 "I64X" -#define PRIoLEAST64 "I64o" -#define PRIuLEAST64 "I64u" -#define PRIxLEAST64 "I64x" -#define PRIXLEAST64 "I64X" -#define PRIoFAST64 "I64o" -#define PRIuFAST64 "I64u" -#define PRIxFAST64 "I64x" -#define PRIXFAST64 "I64X" - -#define PRIoMAX "I64o" -#define PRIuMAX "I64u" -#define PRIxMAX "I64x" -#define PRIXMAX "I64X" - -#define PRIoPTR "Io" -#define PRIuPTR "Iu" -#define PRIxPTR "Ix" -#define PRIXPTR "IX" - -// The fscanf macros for signed integers are: -#define SCNd8 "d" -#define SCNi8 "i" -#define SCNdLEAST8 "d" -#define SCNiLEAST8 "i" -#define SCNdFAST8 "d" -#define SCNiFAST8 "i" - -#define SCNd16 "hd" -#define SCNi16 "hi" -#define SCNdLEAST16 "hd" -#define SCNiLEAST16 "hi" -#define SCNdFAST16 "hd" -#define SCNiFAST16 "hi" - -#define SCNd32 "ld" -#define SCNi32 "li" -#define SCNdLEAST32 "ld" -#define SCNiLEAST32 "li" -#define SCNdFAST32 "ld" -#define SCNiFAST32 "li" - -#define SCNd64 "I64d" -#define SCNi64 "I64i" -#define SCNdLEAST64 "I64d" -#define SCNiLEAST64 "I64i" -#define SCNdFAST64 "I64d" -#define SCNiFAST64 "I64i" - -#define SCNdMAX "I64d" -#define SCNiMAX "I64i" - -#ifdef _WIN64 // [ -# define SCNdPTR "I64d" -# define SCNiPTR "I64i" -#else // _WIN64 ][ -# define SCNdPTR "ld" -# define SCNiPTR "li" -#endif // _WIN64 ] - -// The fscanf macros for unsigned integers are: -#define SCNo8 "o" -#define SCNu8 "u" -#define SCNx8 "x" -#define SCNX8 "X" -#define SCNoLEAST8 "o" -#define SCNuLEAST8 "u" -#define SCNxLEAST8 "x" -#define SCNXLEAST8 "X" -#define SCNoFAST8 "o" -#define SCNuFAST8 "u" -#define SCNxFAST8 "x" -#define SCNXFAST8 "X" - -#define SCNo16 "ho" -#define SCNu16 "hu" -#define SCNx16 "hx" -#define SCNX16 "hX" -#define SCNoLEAST16 "ho" -#define SCNuLEAST16 "hu" -#define SCNxLEAST16 "hx" -#define SCNXLEAST16 "hX" -#define SCNoFAST16 "ho" -#define SCNuFAST16 "hu" -#define SCNxFAST16 "hx" -#define SCNXFAST16 "hX" - -#define SCNo32 "lo" -#define SCNu32 "lu" -#define SCNx32 "lx" -#define SCNX32 "lX" -#define SCNoLEAST32 "lo" -#define SCNuLEAST32 "lu" -#define SCNxLEAST32 "lx" -#define SCNXLEAST32 "lX" -#define SCNoFAST32 "lo" -#define SCNuFAST32 "lu" -#define SCNxFAST32 "lx" -#define SCNXFAST32 "lX" - -#define SCNo64 "I64o" -#define SCNu64 "I64u" -#define SCNx64 "I64x" -#define SCNX64 "I64X" -#define SCNoLEAST64 "I64o" -#define SCNuLEAST64 "I64u" -#define SCNxLEAST64 "I64x" -#define SCNXLEAST64 "I64X" -#define SCNoFAST64 "I64o" -#define SCNuFAST64 "I64u" -#define SCNxFAST64 "I64x" -#define SCNXFAST64 "I64X" - -#define SCNoMAX "I64o" -#define SCNuMAX "I64u" -#define SCNxMAX "I64x" -#define SCNXMAX "I64X" - -#ifdef _WIN64 // [ -# define SCNoPTR "I64o" -# define SCNuPTR "I64u" -# define SCNxPTR "I64x" -# define SCNXPTR "I64X" -#else // _WIN64 ][ -# define SCNoPTR "lo" -# define SCNuPTR "lu" -# define SCNxPTR "lx" -# define SCNXPTR "lX" -#endif // _WIN64 ] - -#endif // __STDC_FORMAT_MACROS ] - -// 7.8.2 Functions for greatest-width integer types - -// 7.8.2.1 The imaxabs function -#define imaxabs _abs64 - -// 7.8.2.2 The imaxdiv function - -// This is modified version of div() function from Microsoft's div.c found -// in %MSVC.NET%\crt\src\div.c -#ifdef STATIC_IMAXDIV // [ -static -#else // STATIC_IMAXDIV ][ -_inline -#endif // STATIC_IMAXDIV ] -imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom) -{ - imaxdiv_t result; - - result.quot = numer / denom; - result.rem = numer % denom; - - if (numer < 0 && result.rem > 0) { - // did division wrong; must fix up - ++result.quot; - result.rem -= denom; - } - - return result; -} - -// 7.8.2.3 The strtoimax and strtoumax functions -#define strtoimax _strtoi64 -#define strtoumax _strtoui64 - -// 7.8.2.4 The wcstoimax and wcstoumax functions -#define wcstoimax _wcstoi64 -#define wcstoumax _wcstoui64 - - -#endif // _MSC_INTTYPES_H_ ] diff --git a/polymer-perf/eduke32/build/include/msvc/stdint.h b/polymer-perf/eduke32/build/include/msvc/stdint.h deleted file mode 100644 index d02608a59..000000000 --- a/polymer-perf/eduke32/build/include/msvc/stdint.h +++ /dev/null @@ -1,247 +0,0 @@ -// ISO C9x compliant stdint.h for Microsoft Visual Studio -// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 -// -// Copyright (c) 2006-2008 Alexander Chemeris -// -// 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 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. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _MSC_VER // [ -#error "Use this header only with Microsoft Visual C++ compilers!" -#endif // _MSC_VER ] - -#ifndef _MSC_STDINT_H_ // [ -#define _MSC_STDINT_H_ - -#if _MSC_VER > 1000 -#pragma once -#endif - -#include - -// For Visual Studio 6 in C++ mode and for many Visual Studio versions when -// compiling for ARM we should wrap include with 'extern "C++" {}' -// or compiler give many errors like this: -// error C2733: second C linkage of overloaded function 'wmemchr' not allowed -#ifdef __cplusplus -extern "C" { -#endif -# include -#ifdef __cplusplus -} -#endif - -// Define _W64 macros to mark types changing their size, like intptr_t. -#ifndef _W64 -# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 -# define _W64 __w64 -# else -# define _W64 -# endif -#endif - - -// 7.18.1 Integer types - -// 7.18.1.1 Exact-width integer types - -// Visual Studio 6 and Embedded Visual C++ 4 doesn't -// realize that, e.g. char has the same size as __int8 -// so we give up on __intX for them. -#if (_MSC_VER < 1300) - typedef signed char int8_t; - typedef signed short int16_t; - typedef signed int int32_t; - typedef unsigned char uint8_t; - typedef unsigned short uint16_t; - typedef unsigned int uint32_t; -#else - typedef signed __int8 int8_t; - typedef signed __int16 int16_t; - typedef signed __int32 int32_t; - typedef unsigned __int8 uint8_t; - typedef unsigned __int16 uint16_t; - typedef unsigned __int32 uint32_t; -#endif -typedef signed __int64 int64_t; -typedef unsigned __int64 uint64_t; - - -// 7.18.1.2 Minimum-width integer types -typedef int8_t int_least8_t; -typedef int16_t int_least16_t; -typedef int32_t int_least32_t; -typedef int64_t int_least64_t; -typedef uint8_t uint_least8_t; -typedef uint16_t uint_least16_t; -typedef uint32_t uint_least32_t; -typedef uint64_t uint_least64_t; - -// 7.18.1.3 Fastest minimum-width integer types -typedef int8_t int_fast8_t; -typedef int16_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef int64_t int_fast64_t; -typedef uint8_t uint_fast8_t; -typedef uint16_t uint_fast16_t; -typedef uint32_t uint_fast32_t; -typedef uint64_t uint_fast64_t; - -// 7.18.1.4 Integer types capable of holding object pointers -#ifdef _WIN64 // [ - typedef signed __int64 intptr_t; - typedef unsigned __int64 uintptr_t; -#else // _WIN64 ][ - typedef _W64 signed int intptr_t; - typedef _W64 unsigned int uintptr_t; -#endif // _WIN64 ] - -// 7.18.1.5 Greatest-width integer types -typedef int64_t intmax_t; -typedef uint64_t uintmax_t; - - -// 7.18.2 Limits of specified-width integer types - -#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 - -// 7.18.2.1 Limits of exact-width integer types -#define INT8_MIN ((int8_t)_I8_MIN) -#define INT8_MAX _I8_MAX -#define INT16_MIN ((int16_t)_I16_MIN) -#define INT16_MAX _I16_MAX -#define INT32_MIN ((int32_t)_I32_MIN) -#define INT32_MAX _I32_MAX -#define INT64_MIN ((int64_t)_I64_MIN) -#define INT64_MAX _I64_MAX -#define UINT8_MAX _UI8_MAX -#define UINT16_MAX _UI16_MAX -#define UINT32_MAX _UI32_MAX -#define UINT64_MAX _UI64_MAX - -// 7.18.2.2 Limits of minimum-width integer types -#define INT_LEAST8_MIN INT8_MIN -#define INT_LEAST8_MAX INT8_MAX -#define INT_LEAST16_MIN INT16_MIN -#define INT_LEAST16_MAX INT16_MAX -#define INT_LEAST32_MIN INT32_MIN -#define INT_LEAST32_MAX INT32_MAX -#define INT_LEAST64_MIN INT64_MIN -#define INT_LEAST64_MAX INT64_MAX -#define UINT_LEAST8_MAX UINT8_MAX -#define UINT_LEAST16_MAX UINT16_MAX -#define UINT_LEAST32_MAX UINT32_MAX -#define UINT_LEAST64_MAX UINT64_MAX - -// 7.18.2.3 Limits of fastest minimum-width integer types -#define INT_FAST8_MIN INT8_MIN -#define INT_FAST8_MAX INT8_MAX -#define INT_FAST16_MIN INT16_MIN -#define INT_FAST16_MAX INT16_MAX -#define INT_FAST32_MIN INT32_MIN -#define INT_FAST32_MAX INT32_MAX -#define INT_FAST64_MIN INT64_MIN -#define INT_FAST64_MAX INT64_MAX -#define UINT_FAST8_MAX UINT8_MAX -#define UINT_FAST16_MAX UINT16_MAX -#define UINT_FAST32_MAX UINT32_MAX -#define UINT_FAST64_MAX UINT64_MAX - -// 7.18.2.4 Limits of integer types capable of holding object pointers -#ifdef _WIN64 // [ -# define INTPTR_MIN INT64_MIN -# define INTPTR_MAX INT64_MAX -# define UINTPTR_MAX UINT64_MAX -#else // _WIN64 ][ -# define INTPTR_MIN INT32_MIN -# define INTPTR_MAX INT32_MAX -# define UINTPTR_MAX UINT32_MAX -#endif // _WIN64 ] - -// 7.18.2.5 Limits of greatest-width integer types -#define INTMAX_MIN INT64_MIN -#define INTMAX_MAX INT64_MAX -#define UINTMAX_MAX UINT64_MAX - -// 7.18.3 Limits of other integer types - -#ifdef _WIN64 // [ -# define PTRDIFF_MIN _I64_MIN -# define PTRDIFF_MAX _I64_MAX -#else // _WIN64 ][ -# define PTRDIFF_MIN _I32_MIN -# define PTRDIFF_MAX _I32_MAX -#endif // _WIN64 ] - -#define SIG_ATOMIC_MIN INT_MIN -#define SIG_ATOMIC_MAX INT_MAX - -#ifndef SIZE_MAX // [ -# ifdef _WIN64 // [ -# define SIZE_MAX _UI64_MAX -# else // _WIN64 ][ -# define SIZE_MAX _UI32_MAX -# endif // _WIN64 ] -#endif // SIZE_MAX ] - -// WCHAR_MIN and WCHAR_MAX are also defined in -#ifndef WCHAR_MIN // [ -# define WCHAR_MIN 0 -#endif // WCHAR_MIN ] -#ifndef WCHAR_MAX // [ -# define WCHAR_MAX _UI16_MAX -#endif // WCHAR_MAX ] - -#define WINT_MIN 0 -#define WINT_MAX _UI16_MAX - -#endif // __STDC_LIMIT_MACROS ] - - -// 7.18.4 Limits of other integer types - -#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 - -// 7.18.4.1 Macros for minimum-width integer constants - -#define INT8_C(val) val##i8 -#define INT16_C(val) val##i16 -#define INT32_C(val) val##i32 -#define INT64_C(val) val##i64 - -#define UINT8_C(val) val##ui8 -#define UINT16_C(val) val##ui16 -#define UINT32_C(val) val##ui32 -#define UINT64_C(val) val##ui64 - -// 7.18.4.2 Macros for greatest-width integer constants -#define INTMAX_C INT64_C -#define UINTMAX_C UINT64_C - -#endif // __STDC_CONSTANT_MACROS ] - - -#endif // _MSC_STDINT_H_ ] diff --git a/polymer-perf/eduke32/build/include/mutex.h b/polymer-perf/eduke32/build/include/mutex.h deleted file mode 100644 index e927361c7..000000000 --- a/polymer-perf/eduke32/build/include/mutex.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __mutex_h__ -#define __mutex_h__ - -#if defined(_WIN32) -#include -#include -#else -#include -#endif - -#if defined(_WIN32) -typedef HANDLE mutex_t; -#else -typedef pthread_mutex_t mutex_t; -#endif - -extern int32_t mutex_init(mutex_t *mutex); -extern int32_t mutex_lock(mutex_t *mutex); -extern int32_t mutex_unlock(mutex_t *mutex); - -#endif diff --git a/polymer-perf/eduke32/build/include/nedmalloc.h b/polymer-perf/eduke32/build/include/nedmalloc.h deleted file mode 100644 index 4ea9d93ff..000000000 --- a/polymer-perf/eduke32/build/include/nedmalloc.h +++ /dev/null @@ -1,302 +0,0 @@ -/* nedalloc, an alternative malloc implementation for multiple threads without -lock contention based on dlmalloc v2.8.3. (C) 2005-2009 Niall Douglas - -Boost Software License - Version 1.0 - August 17th, 2003 - -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -*/ - -#ifndef NEDMALLOC_H -#define NEDMALLOC_H - - -/* See malloc.c.h for what each function does. - -REPLACE_SYSTEM_ALLOCATOR on POSIX causes nedalloc's functions to be called -malloc, free etc. instead of nedmalloc, nedfree etc. You may or may not want -this. On Windows it causes nedmalloc to patch all loaded DLLs and binaries -to replace usage of the system allocator. - -NO_NED_NAMESPACE prevents the functions from being defined in the nedalloc -namespace when in C++ (uses the global namespace instead). - -NEDMALLOCEXTSPEC can be defined to be __declspec(dllexport) or -__attribute__ ((visibility("default"))) or whatever you like. It defaults -to extern unless NEDMALLOC_DLL_EXPORTS is set as it would be when building -nedmalloc.dll. - -USE_LOCKS can be 2 if you want to define your own MLOCK_T, INITIAL_LOCK, -ACQUIRE_LOCK, RELEASE_LOCK, TRY_LOCK, IS_LOCKED and NULL_LOCK_INITIALIZER. - -NEDMALLOC_DEBUG can be defined to cause DEBUG to be set differently for nedmalloc -than for the rest of the build. Remember to set NDEBUG to disable all assertion -checking too. - -USE_MAGIC_HEADERS causes nedalloc to allocate an extra three sizeof(size_t) -to each block. nedpfree() and nedprealloc() can then automagically know when -to free a system allocated block. Enabling this typically adds 20-50% to -application memory usage. - -ENABLE_TOLERANT_NEDMALLOC is automatically turned on if REPLACE_SYSTEM_ALLOCATOR -is set or the Windows DLL is being built. This causes nedmalloc to detect when a -system allocator block is passed to it and to handle it appropriately. Note that -without USE_MAGIC_HEADERS there is a very tiny chance that nedmalloc will segfault -on non-Windows builds (it uses Win32 SEH to trap segfaults on Windows and there -is no comparable system on POSIX). - -USE_ALLOCATOR can be one of these settings (it defaults to 1): - 0: System allocator (nedmalloc now simply acts as a threadcache). - WARNING: Intended for DEBUG USE ONLY - not all functions work correctly. - 1: dlmalloc - -ENABLE_LARGE_PAGES enables support for requesting memory from the system in large -(typically >=2Mb) pages if the host OS supports this. These occupy just a single -TLB entry and can significantly improve performance in large working set applications. - -ENABLE_FAST_HEAP_DETECTION enables special logic to detect blocks allocated -by the system heap. This avoids 1.5%-2% overhead when checking for non-nedmalloc -blocks, but it assumes that the NT and glibc heaps function in a very specific -fashion which may not hold true across OS upgrades. -*/ - -#include /* for size_t */ - -#define USE_ALLOCATOR 1 -#define USE_MAGIC_HEADERS 1 -#define MAXTHREADSINPOOL 2 -#define FINEGRAINEDBINS 1 -#define ENABLE_LARGE_PAGES 1 -#define ENABLE_FAST_HEAP_DETECTION 1 -#define NDEBUG 1 -#define THREADCACHEMAX 4194304 -#define THREADCACHEMAXBINS ((22-4)*2) - -#ifndef NEDMALLOCEXTSPEC - #ifdef NEDMALLOC_DLL_EXPORTS - #ifdef WIN32 - #define NEDMALLOCEXTSPEC extern __declspec(dllexport) - #elif defined(__GNUC__) - #define NEDMALLOCEXTSPEC extern __attribute__ ((visibility("default"))) - #endif - #ifndef ENABLE_TOLERANT_NEDMALLOC - #define ENABLE_TOLERANT_NEDMALLOC 1 - #endif - #else - #define NEDMALLOCEXTSPEC extern - #endif -#endif - -#if __STDC_VERSION__ >= 199901L /* C99 or better */ - #define RESTRICT restrict -#else - #if defined(_MSC_VER) && _MSC_VER>=1400 - #define RESTRICT __restrict - #endif - #ifdef __GNUC__ - #define RESTRICT __restrict - #endif -#endif -#ifndef RESTRICT - #define RESTRICT -#endif - -#if defined(_MSC_VER) && _MSC_VER>=1400 - #define NEDMALLOCPTRATTR __declspec(restrict) - #define NEDMALLOCNOALIASATTR __declspec(noalias) -#endif -#ifdef __GNUC__ - #define NEDMALLOCPTRATTR __attribute__ ((malloc)) -#endif -#ifndef NEDMALLOCPTRATTR - #define NEDMALLOCPTRATTR -#endif -#ifndef NEDMALLOCNOALIASATTR - #define NEDMALLOCNOALIASATTR -#endif - -#ifndef USE_MAGIC_HEADERS - #define USE_MAGIC_HEADERS 0 -#endif - -#ifndef USE_ALLOCATOR - #define USE_ALLOCATOR 1 /* dlmalloc */ -#endif - -#if !USE_ALLOCATOR && !USE_MAGIC_HEADERS -#error If you are using the system allocator then you MUST use magic headers -#endif - -#ifdef REPLACE_SYSTEM_ALLOCATOR - #if USE_ALLOCATOR==0 - #error Cannot combine using the system allocator with replacing the system allocator - #endif - #ifndef ENABLE_TOLERANT_NEDMALLOC - #define ENABLE_TOLERANT_NEDMALLOC 1 - #endif - #ifndef WIN32 /* We have a dedicated patcher for Windows */ - #define nedmalloc malloc - #define nedcalloc calloc - #define nedrealloc realloc - #define nedfree free - #define nedmemalign memalign - #define nedmallinfo mallinfo - #define nedmallopt mallopt - #define nedmalloc_trim malloc_trim - #define nedmalloc_stats malloc_stats - #define nedmalloc_footprint malloc_footprint - #define nedindependent_calloc independent_calloc - #define nedindependent_comalloc independent_comalloc - #ifdef _MSC_VER - #define nedblksize _msize - #endif - #endif -#endif - -#if defined(__cplusplus) -extern "C" { -#endif -struct nedmallinfo { - size_t arena; /* non-mmapped space allocated from system */ - size_t ordblks; /* number of free chunks */ - size_t smblks; /* always 0 */ - size_t hblks; /* always 0 */ - size_t hblkhd; /* space in mmapped regions */ - size_t usmblks; /* maximum total allocated space */ - size_t fsmblks; /* always 0 */ - size_t uordblks; /* total allocated space */ - size_t fordblks; /* total free space */ - size_t keepcost; /* releasable (via malloc_trim) space */ -}; -#if defined(__cplusplus) -} -#endif - -#if defined(__cplusplus) - #if !defined(NO_NED_NAMESPACE) -namespace nedalloc { - #else -extern "C" { - #endif - #define THROWSPEC throw() -#else - #define THROWSPEC -#endif - -/* These are the global functions */ - -/* Gets the usable size of an allocated block. Note this will always be bigger than what was -asked for due to rounding etc. Optionally returns 1 in isforeign if the block came from the -system allocator - note that there is a small (>0.01%) but real chance of segfault on non-Windows -systems when passing non-nedmalloc blocks if you don't use USE_MAGIC_HEADERS. -*/ -NEDMALLOCEXTSPEC NEDMALLOCNOALIASATTR size_t nedblksize(int *RESTRICT isforeign, void *RESTRICT mem) THROWSPEC; - -NEDMALLOCEXTSPEC NEDMALLOCNOALIASATTR void nedsetvalue(void *v) THROWSPEC; - -NEDMALLOCEXTSPEC NEDMALLOCNOALIASATTR NEDMALLOCPTRATTR void * nedmalloc(size_t size) THROWSPEC; -NEDMALLOCEXTSPEC NEDMALLOCNOALIASATTR NEDMALLOCPTRATTR void * nedcalloc(size_t no, size_t size) THROWSPEC; -NEDMALLOCEXTSPEC NEDMALLOCNOALIASATTR NEDMALLOCPTRATTR void * nedrealloc(void *mem, size_t size) THROWSPEC; -NEDMALLOCEXTSPEC NEDMALLOCNOALIASATTR void nedfree(void *mem) THROWSPEC; -NEDMALLOCEXTSPEC NEDMALLOCNOALIASATTR NEDMALLOCPTRATTR void * nedmemalign(size_t alignment, size_t bytes) THROWSPEC; -NEDMALLOCEXTSPEC NEDMALLOCNOALIASATTR struct nedmallinfo nedmallinfo(void) THROWSPEC; -NEDMALLOCEXTSPEC NEDMALLOCNOALIASATTR int nedmallopt(int parno, int value) THROWSPEC; -NEDMALLOCEXTSPEC NEDMALLOCNOALIASATTR void* nedmalloc_internals(size_t *granularity, size_t *magic) THROWSPEC; -NEDMALLOCEXTSPEC NEDMALLOCNOALIASATTR int nedmalloc_trim(size_t pad) THROWSPEC; -NEDMALLOCEXTSPEC void nedmalloc_stats(void) THROWSPEC; -NEDMALLOCEXTSPEC NEDMALLOCNOALIASATTR size_t nedmalloc_footprint(void) THROWSPEC; -NEDMALLOCEXTSPEC NEDMALLOCNOALIASATTR NEDMALLOCPTRATTR void **nedindependent_calloc(size_t elemsno, size_t elemsize, void **chunks) THROWSPEC; -NEDMALLOCEXTSPEC NEDMALLOCNOALIASATTR NEDMALLOCPTRATTR void **nedindependent_comalloc(size_t elems, size_t *sizes, void **chunks) THROWSPEC; - -/* Destroys the system memory pool used by the functions above. -Useful for when you have nedmalloc in a DLL you're about to unload. -If you call ANY nedmalloc functions after calling this you will -get a fatal exception! -*/ -NEDMALLOCEXTSPEC void neddestroysyspool() THROWSPEC; - -/* These are the pool functions */ -struct nedpool_t; -typedef struct nedpool_t nedpool; - -/* Creates a memory pool for use with the nedp* functions below. -Capacity is how much to allocate immediately (if you know you'll be allocating a lot -of memory very soon) which you can leave at zero. Threads specifies how many threads -will *normally* be accessing the pool concurrently. Setting this to zero means it -extends on demand, but be careful of this as it can rapidly consume system resources -where bursts of concurrent threads use a pool at once. -*/ -NEDMALLOCEXTSPEC NEDMALLOCPTRATTR nedpool *nedcreatepool(size_t capacity, int threads) THROWSPEC; - -/* Destroys a memory pool previously created by nedcreatepool(). -*/ -NEDMALLOCEXTSPEC void neddestroypool(nedpool *p) THROWSPEC; - -/* Returns a zero terminated snapshot of threadpools existing at the time of call. Call -nedfree() on the returned list when you are done. Returns zero if there is only the -system pool in existence. -*/ -NEDMALLOCEXTSPEC nedpool **nedpoollist() THROWSPEC; - -/* Sets a value to be associated with a pool. You can retrieve this value by passing -any memory block allocated from that pool. -*/ -NEDMALLOCEXTSPEC void nedpsetvalue(nedpool *p, void *v) THROWSPEC; - -/* Gets a previously set value using nedpsetvalue() or zero if memory is unknown. -Optionally can also retrieve pool. You can detect an unknown block by the return -being zero and *p being unmodifed. -*/ -NEDMALLOCEXTSPEC void *nedgetvalue(nedpool **p, void *mem) THROWSPEC; - -/* Trims the thread cache for the calling thread, returning any existing cache -data to the central pool. Remember to ALWAYS call with zero if you used the -system pool. Setting disable to non-zero replicates neddisablethreadcache(). -*/ -NEDMALLOCEXTSPEC void nedtrimthreadcache(nedpool *p, int disable) THROWSPEC; - -/* Disables the thread cache for the calling thread, returning any existing cache -data to the central pool. Remember to ALWAYS call with zero if you used the -system pool. -*/ -NEDMALLOCEXTSPEC void neddisablethreadcache(nedpool *p) THROWSPEC; - - -NEDMALLOCEXTSPEC NEDMALLOCPTRATTR void * nedpmalloc(nedpool *p, size_t size) THROWSPEC; -NEDMALLOCEXTSPEC NEDMALLOCPTRATTR void * nedpcalloc(nedpool *p, size_t no, size_t size) THROWSPEC; -NEDMALLOCEXTSPEC NEDMALLOCPTRATTR void * nedprealloc(nedpool *p, void *mem, size_t size) THROWSPEC; -NEDMALLOCEXTSPEC void nedpfree(nedpool *p, void *mem) THROWSPEC; -NEDMALLOCEXTSPEC NEDMALLOCPTRATTR void * nedpmemalign(nedpool *p, size_t alignment, size_t bytes) THROWSPEC; -NEDMALLOCEXTSPEC struct nedmallinfo nedpmallinfo(nedpool *p) THROWSPEC; -NEDMALLOCEXTSPEC int nedpmallopt(nedpool *p, int parno, int value) THROWSPEC; -NEDMALLOCEXTSPEC int nedpmalloc_trim(nedpool *p, size_t pad) THROWSPEC; -NEDMALLOCEXTSPEC void nedpmalloc_stats(nedpool *p) THROWSPEC; -NEDMALLOCEXTSPEC size_t nedpmalloc_footprint(nedpool *p) THROWSPEC; -NEDMALLOCEXTSPEC NEDMALLOCPTRATTR void **nedpindependent_calloc(nedpool *p, size_t elemsno, size_t elemsize, void **chunks) THROWSPEC; -NEDMALLOCEXTSPEC NEDMALLOCPTRATTR void **nedpindependent_comalloc(nedpool *p, size_t elems, size_t *sizes, void **chunks) THROWSPEC; -NEDMALLOCEXTSPEC NEDMALLOCPTRATTR char * nedstrdup(const char *str) THROWSPEC; - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/polymer-perf/eduke32/build/include/osd.h b/polymer-perf/eduke32/build/include/osd.h deleted file mode 100644 index cebb319a5..000000000 --- a/polymer-perf/eduke32/build/include/osd.h +++ /dev/null @@ -1,201 +0,0 @@ -// On-screen display (ie. console) -// for the Build Engine -// by Jonathon Fowler (jonof@edgenetwk.com) - -#ifndef __osd_h__ -#define __osd_h__ - - -typedef struct { - int32_t numparms; - const char *name; - const char **parms; - const char *raw; -} osdfuncparm_t; - -typedef struct _symbol -{ - const char *name; - struct _symbol *next; - - const char *help; - int32_t (*func)(const osdfuncparm_t *); -} symbol_t; - -symbol_t *symbols; - -const char *OSD_StripColors(char *out, const char *in); - -enum cvartype_t -{ - CVAR_FLOAT = 0x00000001, - CVAR_INT = 0x00000002, - CVAR_UINT = 0x00000004, - CVAR_BOOL = 0x00000008, - CVAR_STRING = 0x00000010, - CVAR_DOUBLE = 0x00000020, - CVAR_NOMULTI = 0x00000040, - CVAR_MULTI = 0x00000080, - CVAR_NOSAVE = 0x00000100, - CVAR_FUNCPTR = 0x00000200, -}; - -typedef struct -{ - const char *name; - const char *helpstr; - void *var; - int32_t type; // see cvartype_t - int32_t min; - int32_t max; // for string, is the length -} cvar_t; - -typedef struct -{ - char *name; - char *helpstr; - void *var; - int32_t type; // see cvartype_t - int32_t min; - int32_t max; // for string, is the length - - // everything before this point needs to match cvar_t - - // default value for cvar, assigned when var is registered - union - { - int32_t i; - uint32_t uint; - float f; - double d; - } dval; -} osdcvar_t; - -enum osdflags_t -{ - OSD_INITIALIZED = 0x00000001, - OSD_DRAW = 0x00000002, - OSD_CAPTURE = 0x00000004, - OSD_OVERTYPE = 0x00000008, - OSD_SHIFT = 0x00000010, - OSD_CTRL = 0x00000020, - OSD_CAPS = 0x00000040 -}; - -#define OSD_ALIAS (void *)0x1337 -#define OSD_UNALIASED (void *)0xDEAD - -#define OSDCMD_OK 0 -#define OSDCMD_SHOWHELP 1 - -int32_t OSD_ParsingScript(void); - -int32_t OSD_OSDKey(void); -int32_t OSD_GetTextMode(void); -void OSD_SetTextMode(int32_t mode); - -int32_t OSD_Exec(const char *szScript); - -char *OSD_GetFmt(char *ptr); -char *OSD_GetTextPtr(void); -char *OSD_GetFmtPtr(void); - -int32_t OSD_GetCols(void); -int32_t OSD_IsMoving(void); - -// initializes things -void OSD_Init(void); - -// sets the file to echo output to -void OSD_SetLogFile(char *fn); - -// sets the functions the OSD will call to interrogate the environment -void OSD_SetFunctions( - void (*drawchar)(int32_t,int32_t,char,int32_t,int32_t), - void (*drawstr)(int32_t,int32_t,char*,int32_t,int32_t,int32_t), - void (*drawcursor)(int32_t,int32_t,int32_t,int32_t), - int32_t (*colwidth)(int32_t), - int32_t (*rowheight)(int32_t), - void (*clearbg)(int32_t,int32_t), - int32_t (*gettime)(void), - void (*onshow)(int32_t) - ); - -// sets the parameters for presenting the text -void OSD_SetParameters( - int32_t promptshade, int32_t promptpal, - int32_t editshade, int32_t editpal, - int32_t textshade, int32_t textpal - ); - -// sets the scancode for the key which activates the onscreen display -void OSD_CaptureKey(int32_t sc); - -// handles keyboard input when capturing input. returns 0 if key was handled -// or the scancode if it should be handled by the game. -int32_t OSD_HandleScanCode(int32_t sc, int32_t press); -int32_t OSD_HandleChar(char ch); - -// handles the readjustment when screen resolution changes -void OSD_ResizeDisplay(int32_t w,int32_t h); - -// captures and frees osd input -void OSD_CaptureInput(int32_t cap); - -// sets the console version string -void OSD_SetVersion(const char *version, int32_t shade, int32_t pal); - -// shows or hides the onscreen display -void OSD_ShowDisplay(int32_t onf); - -// draw the osd to the screen -void OSD_Draw(void); - -// just like printf -void OSD_Printf(const char *fmt, ...) ATTRIBUTE((format(printf,1,2))); - -// executes buffered commands -void OSD_DispatchQueued(void); - -// executes a string -int32_t OSD_Dispatch(const char *cmd); - -// registers a function -// name = name of the function -// help = a short help string -// func = the entry point to the function -int32_t OSD_RegisterFunction(const char *name, const char *help, int32_t (*func)(const osdfuncparm_t*)); - -int32_t osdcmd_cvar_set(const osdfuncparm_t *parm); -int32_t OSD_RegisterCvar(const cvar_t *cvar); -void OSD_WriteCvars(FILE *fp); - -// these correspond to the Duke palettes, so they shouldn't really be here -// ...but I don't care - -#define OSDTEXT_BLUE "^00" -#define OSDTEXT_GOLD "^07" -#define OSDTEXT_DARKRED "^10" -#define OSDTEXT_GREEN "^11" -#define OSDTEXT_GRAY "^12" -#define OSDTEXT_DARKGRAY "^13" -#define OSDTEXT_DARKGREEN "^14" -#define OSDTEXT_BROWN "^15" -#define OSDTEXT_DARKBLUE "^16" -#define OSDTEXT_RED "^21" -#define OSDTEXT_YELLOW "^23" - -#define OSDTEXT_BRIGHT "^S0" - -#define OSD_ERROR OSDTEXT_DARKRED OSDTEXT_BRIGHT -#define TEXTSIZE 32768 - -#define OSD_EDITLENGTH 511 -#define OSD_HISTORYDEPTH 32 - -extern char osdhistorybuf[OSD_HISTORYDEPTH][OSD_EDITLENGTH+1]; // history strings -extern int32_t osdhistorysize; // number of entries in history -extern int32_t osdhistorytotal; // number of total history entries - -#endif // __osd_h__ - diff --git a/polymer-perf/eduke32/build/include/osxbits.h b/polymer-perf/eduke32/build/include/osxbits.h deleted file mode 100644 index 42f35bdce..000000000 --- a/polymer-perf/eduke32/build/include/osxbits.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef __osxbits_h__ -#define __osxbits_h__ -#include - -int32_t osx_msgbox(char *name, char *msg); -int32_t osx_ynbox(char *name, char *msg); - -#endif \ No newline at end of file diff --git a/polymer-perf/eduke32/build/include/osxmain.h b/polymer-perf/eduke32/build/include/osxmain.h deleted file mode 100644 index 4683df57a..000000000 --- a/polymer-perf/eduke32/build/include/osxmain.h +++ /dev/null @@ -1,11 +0,0 @@ -/* SDLMain.m - main entry point for our Cocoa-ized SDL app - Initial Version: Darrell Walisser - Non-NIB-Code & other changes: Max Horn - - Feel free to customize this file to suit your needs -*/ - -#import - -@interface SDLMain : NSObject -@end diff --git a/polymer-perf/eduke32/build/include/polymer.h b/polymer-perf/eduke32/build/include/polymer.h deleted file mode 100644 index cdc5efd68..000000000 --- a/polymer-perf/eduke32/build/include/polymer.h +++ /dev/null @@ -1,506 +0,0 @@ -// here lies the GREAT JUSTICE RENDERER -// TODO : -// - CORE STUFF -// o there's also the texture alignment problem Hunter reported (san andreas fault) -// o RTT portals (water) -// o clip mirrors/portals to their planes -// o merge mirrors/portals from the same plane -// - SPRITES -// o sprite panning -// - SKIES -// o skyview -// - MDSPRITES -// o need full translation and rotation support from CON to attach to game world or tags -// -// the renderer should hopefully be pretty solid after all that -// the rest will be a bliss :) - -#ifndef _polymer_h_ -# define _polymer_h_ - -# include "compat.h" -# include "baselayer.h" -# include "build.h" -# include "glbuild.h" -# include "osd.h" -# include "hightile.h" -# include "mdsprite.h" -# include "polymost.h" -# include "pragmas.h" -# include - -// CVARS -extern int32_t pr_lighting; -extern int32_t pr_normalmapping; -extern int32_t pr_specularmapping; -extern int32_t pr_shadows; -extern int32_t pr_shadowcount; -extern int32_t pr_shadowdetail; -extern int32_t pr_shadowfiltering; -extern int32_t pr_maxlightpasses; -extern int32_t pr_maxlightpriority; -extern int32_t pr_fov; -extern float pr_customaspect; -extern int32_t pr_billboardingmode; -extern int32_t pr_verbosity; -extern int32_t pr_wireframe; -extern int32_t pr_vbos; -extern int32_t pr_gpusmoothing; -extern int32_t pr_overrideparallax; -extern float pr_parallaxscale; -extern float pr_parallaxbias; -extern int32_t pr_overridespecular; -extern float pr_specularpower; -extern float pr_specularfactor; -extern int32_t pr_highpalookups; -extern int32_t pr_overridehud; -extern float pr_hudxadd; -extern float pr_hudyadd; -extern float pr_hudzadd; -extern int32_t pr_hudangadd; -extern int32_t pr_hudfov; -extern float pr_overridemodelscale; -extern int32_t pr_ati_fboworkaround; -extern int32_t pr_ati_nodepthoffset; -#ifdef __APPLE__ -extern int32_t pr_ati_textureformat_one; -#endif - -extern int32_t r_pr_maxlightpasses; - -// MATERIAL -typedef enum { - PR_BIT_HEADER, // must be first - PR_BIT_ANIM_INTERPOLATION, - PR_BIT_LIGHTING_PASS, - PR_BIT_NORMAL_MAP, - PR_BIT_DIFFUSE_MAP, - PR_BIT_DIFFUSE_DETAIL_MAP, - PR_BIT_DIFFUSE_MODULATION, - PR_BIT_DIFFUSE_MAP2, - PR_BIT_HIGHPALOOKUP_MAP, - PR_BIT_SPECULAR_MAP, - PR_BIT_SPECULAR_MATERIAL, - PR_BIT_MIRROR_MAP, - PR_BIT_FOG, - PR_BIT_GLOW_MAP, - PR_BIT_PROJECTION_MAP, - PR_BIT_SHADOW_MAP, - PR_BIT_LIGHT_MAP, - PR_BIT_SPOT_LIGHT, - PR_BIT_POINT_LIGHT, - PR_BIT_FOOTER, // must be just before last - PR_BIT_COUNT // must be last -} prbittype; - -typedef struct s_prmaterial { - // PR_BIT_ANIM_INTERPOLATION - GLfloat frameprogress; - GLfloat* nextframedata; - // PR_BIT_NORMAL_MAP - GLuint normalmap; - GLfloat normalbias[2]; - GLfloat* tbn; - // PR_BIT_DIFFUSE_MAP - GLuint diffusemap; - GLfloat diffusescale[2]; - // PR_BIT_HIGHPALOOKUP_MAP - GLuint highpalookupmap; - // PR_BIT_DIFFUSE_DETAIL_MAP - GLuint detailmap; - GLfloat detailscale[2]; - // PR_BIT_DIFFUSE_MODULATION - GLubyte diffusemodulation[4]; - // PR_BIT_SPECULAR_MAP - GLuint specmap; - // PR_BIT_SPECULAR_MATERIAL - GLfloat specmaterial[2]; - // PR_BIT_MIRROR_MAP - GLuint mirrormap; - // PR_BIT_GLOW_MAP - GLuint glowmap; - // PR_BIT_SHADOW_MAP - GLboolean mdspritespace; -} _prmaterial; - -typedef struct s_prrograminfo { - GLhandleARB handle; - // PR_BIT_ANIM_INTERPOLATION - GLint attrib_nextFrameData; - GLint attrib_nextFrameNormal; - GLint uniform_frameProgress; - // PR_BIT_NORMAL_MAP - GLint attrib_T; - GLint attrib_B; - GLint attrib_N; - GLint uniform_eyePosition; - GLint uniform_normalMap; - GLint uniform_normalBias; - // PR_BIT_DIFFUSE_MAP - GLint uniform_diffuseMap; - GLint uniform_diffuseScale; - // PR_BIT_HIGHPALOOKUP_MAP - GLuint uniform_highPalookupMap; - // PR_BIT_DIFFUSE_DETAIL_MAP - GLint uniform_detailMap; - GLint uniform_detailScale; - // PR_BIT_SPECULAR_MAP - GLint uniform_specMap; - // PR_BIT_SPECULAR_MATERIAL - GLint uniform_specMaterial; - // PR_BIT_MIRROR_MAP - GLint uniform_mirrorMap; - // PR_BIT_GLOW_MAP - GLint uniform_glowMap; - // PR_BIT_PROJECTION_MAP - GLint uniform_shadowProjMatrix; - // PR_BIT_SHADOW_MAP - GLint uniform_shadowMap; - // PR_BIT_LIGHT_MAP - GLint uniform_lightMap; - // PR_BIT_SPOT_LIGHT - GLint uniform_spotDir; - GLint uniform_spotRadius; -} _prprograminfo; - -#define PR_INFO_LOG_BUFFER_SIZE 8192 - -// Think about changing highPal[Scale|Bias] in the program bit if you change this -#define PR_HIGHPALOOKUP_BIT_DEPTH 6 -#define PR_HIGHPALOOKUP_DIM (1 << PR_HIGHPALOOKUP_BIT_DEPTH) -#define PR_HIGHPALOOKUP_DATA_SIZE (4 * PR_HIGHPALOOKUP_DIM * \ - PR_HIGHPALOOKUP_DIM * \ - PR_HIGHPALOOKUP_DIM) - -typedef struct s_prprogrambit { - int32_t bit; - char* vert_def; - char* vert_prog; - char* frag_def; - char* frag_prog; -} _prprogrambit; - -#include "prlights.h" - -// RENDER TARGETS -typedef struct s_prrt { - GLenum target; - GLuint color; - GLuint z; - GLuint fbo; - int32_t xdim, ydim; -} _prrt; - -// BUILD DATA -typedef struct s_prplane { - // geometry - GLfloat* buffer; - int32_t vertcount; - GLuint vbo; - // attributes - GLfloat tbn[3][3]; - GLfloat plane[4]; - _prmaterial material; - // elements - GLushort* indices; - int32_t indicescount; - GLuint ivbo; - // lights - int16_t lights[PR_MAXLIGHTS]; - uint16_t lightcount; -} _prplane; - -typedef struct s_prsector { - // polymer data - GLdouble* verts; - _prplane floor; - _prplane ceil; - int16_t curindice; - int32_t indicescount; - int32_t oldindicescount; - // stuff - float wallsproffset; - float floorsproffset; - // build sector data - int32_t ceilingz, floorz; - int16_t ceilingstat, floorstat; - int16_t ceilingpicnum, ceilingheinum; - int8_t ceilingshade; - char ceilingpal, ceilingxpanning, ceilingypanning; - int16_t floorpicnum, floorheinum; - int8_t floorshade; - char floorpal, floorxpanning, floorypanning; - - struct { - int32_t empty : 1; - int32_t uptodate : 1; - int32_t invalidtex : 1; - } flags; - uint32_t invalidid; -} _prsector; - -typedef struct s_prwall { - _prplane wall; - _prplane over; - _prplane mask; - // stuff - GLfloat* bigportal; - GLfloat* cap; - GLuint stuffvbo; - // build wall data - int16_t cstat, nwallcstat; - int16_t picnum, overpicnum, nwallpicnum; - int8_t shade; - char pal, xrepeat, yrepeat, xpanning, ypanning; - char nwallxpanning, nwallypanning; - int8_t nwallshade; - - char underover; - uint32_t invalidid; - struct { - int32_t empty : 1; - int32_t uptodate : 1; - int32_t invalidtex : 1; - } flags; -} _prwall; - -typedef struct s_prsprite { - _prplane plane; - uint32_t crc; -} _prsprite; - -typedef struct s_prmirror { - _prplane *plane; - int16_t sectnum; - int16_t wallnum; -} _prmirror; - -typedef struct s_prhighpalookup { - char *data; - GLuint map; -} _prhighpalookup; - -typedef void (*animatespritesptr)(int32_t, int32_t, int32_t, int32_t); - -typedef struct s_pranimatespritesinfo { - animatespritesptr animatesprites; - int32_t x, y, a, smoothratio; -} _pranimatespritesinfo; - -// EXTERNAL FUNCTIONS -int32_t polymer_init(void); -void polymer_uninit(void); -void polymer_setaspect(int32_t); -void polymer_glinit(void); -void polymer_resetlights(void); -void polymer_loadboard(void); -void polymer_drawrooms(int32_t daposx, int32_t daposy, int32_t daposz, int16_t daang, int32_t dahoriz, int16_t dacursectnum); -void polymer_drawmasks(void); -void polymer_editorpick(void); -void polymer_inb4rotatesprite(int16_t tilenum, char pal, int8_t shade); -void polymer_postrotatesprite(void); -void polymer_drawmaskwall(int32_t damaskwallcnt); -void polymer_drawsprite(int32_t snum); -void polymer_setanimatesprites(animatespritesptr animatesprites, int32_t x, int32_t y, int32_t a, int32_t smoothratio); -int16_t polymer_addlight(_prlight* light); -void polymer_deletelight(int16_t lighti); -void polymer_invalidatelights(void); -void polymer_texinvalidate(void); -void polymer_definehighpalookup(char basepalnum, char palnum, char *fn); - -# ifdef POLYMER_C - -// CORE -static void polymer_displayrooms(int16_t sectnum); -static void polymer_drawplane(_prplane* plane); -static inline void polymer_inb4mirror(GLfloat* buffer, GLfloat* plane); -static void polymer_animatesprites(void); -static void polymer_freeboard(void); -// SECTORS -static int32_t polymer_initsector(int16_t sectnum); -static int32_t polymer_updatesector(int16_t sectnum); -void PR_CALLBACK polymer_tesserror(GLenum error); -void PR_CALLBACK polymer_tessedgeflag(GLenum error); -void PR_CALLBACK polymer_tessvertex(void* vertex, void* sector); -static int32_t polymer_buildfloor(int16_t sectnum); -static void polymer_drawsector(int16_t sectnum); -// WALLS -static int32_t polymer_initwall(int16_t wallnum); -static void polymer_updatewall(int16_t wallnum); -static void polymer_drawwall(int16_t sectnum, int16_t wallnum); -// HSR -static void polymer_computeplane(_prplane* p); -static inline void polymer_crossproduct(GLfloat* in_a, GLfloat* in_b, GLfloat* out); -static inline void polymer_transformpoint(const float* inpos, float* pos, float* matrix); -static inline void polymer_normalize(float* vec); -static inline void polymer_pokesector(int16_t sectnum); -static void polymer_extractfrustum(GLfloat* modelview, GLfloat* projection, float* frustum); -static inline int32_t polymer_planeinfrustum(_prplane *plane, float* frustum); -static inline void polymer_scansprites(int16_t sectnum, spritetype* tsprite, int32_t* spritesortcnt); -static inline void polymer_updatesprite(int32_t snum); -// SKIES -static void polymer_getsky(void); -static void polymer_drawsky(int16_t tilenum, char palnum, int8_t shade); -static void polymer_initartsky(void); -static void polymer_drawartsky(int16_t tilenum, char palnum, int8_t shade); -static void polymer_drawartskyquad(int32_t p1, int32_t p2, GLfloat height); -static void polymer_drawskybox(int16_t tilenum, char palnum, int8_t shade); -// MDSPRITES -static void polymer_drawmdsprite(spritetype *tspr); -static void polymer_loadmodelvbos(md3model_t* m); -// MATERIALS -static void polymer_getscratchmaterial(_prmaterial* material); -static void polymer_getbuildmaterial(_prmaterial* material, int16_t tilenum, char pal, int8_t shade, int32_t cmeth); -static int32_t polymer_bindmaterial(_prmaterial material, int16_t* lights, int lightcount); -static void polymer_unbindmaterial(int32_t programbits); -static void polymer_compileprogram(int32_t programbits); -// LIGHTS -static void polymer_removelight(int16_t lighti); -static void polymer_updatelights(void); -static inline void polymer_resetplanelights(_prplane* plane); -static void polymer_addplanelight(_prplane* plane, int16_t lighti); -static inline void polymer_deleteplanelight(_prplane* plane, int16_t lighti); -static int32_t polymer_planeinlight(_prplane* plane, _prlight* light); -static void polymer_invalidateplanelights(_prplane* plane); -static void polymer_invalidatesectorlights(int16_t sectnum); -static void polymer_processspotlight(_prlight* light); -static inline void polymer_culllight(int16_t lighti); -static void polymer_prepareshadows(void); -// RENDER TARGETS -static void polymer_initrendertargets(int32_t count); - -// the following from gle/vvector.h - -/* ========================================================== */ -/* determinant of matrix - * - * Computes determinant of matrix m, returning d - */ - -#define DETERMINANT_3X3(d,m) \ -{ \ - d = m[0][0] * (m[1][1]*m[2][2] - m[1][2] * m[2][1]); \ - d -= m[0][1] * (m[1][0]*m[2][2] - m[1][2] * m[2][0]); \ - d += m[0][2] * (m[1][0]*m[2][1] - m[1][1] * m[2][0]); \ -} - -/* ========================================================== */ -/* i,j,th cofactor of a 4x4 matrix - * - */ - -#define COFACTOR_4X4_IJ(fac,m,i,j) \ -{ \ - int ii[4], jj[4], k; \ - \ - /* compute which row, columnt to skip */ \ - for (k=0; k 239) ? (float)(gvisibility*((vis-240+f)/(klabs(vis-256)))) : - (float)(gvisibility*(vis+16+f)); - - fogresult = clamp(f, 0.001f, 100.f); - - Bmemcpy(fogcol, &fogtable[pal<<2], sizeof(fogcol)); -} - - -#endif - -#endif diff --git a/polymer-perf/eduke32/build/include/pragmas.h b/polymer-perf/eduke32/build/include/pragmas.h deleted file mode 100644 index 6625401c7..000000000 --- a/polymer-perf/eduke32/build/include/pragmas.h +++ /dev/null @@ -1,1909 +0,0 @@ -// This file has been modified from Ken Silverman's original release -// by Jonathon Fowler (jonof@edgenetwk.com) - - -#ifndef __pragmas_h__ -#define __pragmas_h__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -extern int32_t dmval; - -// break the C version of divscale out from the others -// because asm version overflows in drawmapview() - -#define qw(x) ((int64_t)(x)) // quadword cast -#define dw(x) ((int32_t)(x)) // doubleword cast -#define by(x) ((uint8_t)(x)) // byte cast - -#define _scaler(a) \ - static inline int32_t divscale##a(int32_t eax, int32_t ebx) \ -{ \ - return dw((qw(eax) << a) / qw(ebx)); \ -} \ - -_scaler(1) _scaler(2) _scaler(3) _scaler(4) -_scaler(5) _scaler(6) _scaler(7) _scaler(8) -_scaler(9) _scaler(10) _scaler(11) _scaler(12) -_scaler(13) _scaler(14) _scaler(15) _scaler(16) -_scaler(17) _scaler(18) _scaler(19) _scaler(20) -_scaler(21) _scaler(22) _scaler(23) _scaler(24) -_scaler(25) _scaler(26) _scaler(27) _scaler(28) -_scaler(29) _scaler(30) _scaler(31) _scaler(32) - -static inline int32_t divscale(int32_t eax, int32_t ebx, int32_t ecx) { return dw((qw(eax) << by(ecx)) / qw(ebx)); } - -#undef qw -#undef dw -#undef by -#undef _scaler - -#if defined(__GNUC__) && defined(__i386__) && !defined(NOASM) - -// -// GCC Inline Assembler version -// - -//{{{ - -#ifndef UNDERSCORES -#define _DMVAL "dmval" -#else -#define _DMVAL "_dmval" -#endif - - -// maybe one day I'll make these into macros -int32_t boundmulscale(int32_t a, int32_t b, int32_t c); -void clearbufbyte(void *D, int32_t c, int32_t a); -void copybufbyte(void *S, void *D, int32_t c); -void copybufreverse(void *S, void *D, int32_t c); - - -#ifdef NO_GCC_BUILTINS -#define sqr(a) \ - ({ int32_t __a=(a); \ - __asm__ __volatile__ ("imull %0, %0" \ - : "=q" (__a) \ - : "0" (__a) \ - : "cc"); \ - __a; }) -#else -#define sqr(a) __builtin_sqr(a) -#endif - -#define scale(a,d,c) \ - ({ int32_t __a=(a), __d=(d), __c=(c); \ - __asm__ __volatile__ ("imull %%edx; idivl %%ecx" \ - : "=a" (__a), "=d" (__d) \ - : "0" (__a), "1" (__d), "c" (__c) : "cc"); \ - __a; }) - -#define mulscale(a,d,c) \ - ({ int32_t __a=(a), __d=(d), __c=(c); \ - __asm__ __volatile__ ("imull %%edx; shrdl %%cl, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d), "c" (__c) : "cc"); \ - __a; }) -#define mulscale1(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $1, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale2(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $2, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale3(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $3, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale4(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $4, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale5(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $5, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale6(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $6, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale7(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $7, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale8(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $8, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale9(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $9, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale10(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $10, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale11(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $11, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale12(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $12, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale13(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $13, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale14(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $14, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale15(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $15, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale16(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $16, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale17(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $17, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale18(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $18, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale19(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $19, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale20(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $20, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale21(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $21, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale22(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $22, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale23(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $23, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale24(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $24, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale25(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $25, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale26(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $26, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale27(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $27, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale28(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $28, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale29(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $29, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale30(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $30, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale31(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx; shrdl $31, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __a; }) -#define mulscale32(a,d) \ - ({ int32_t __a=(a), __d=(d); \ - __asm__ __volatile__ ("imull %%edx" \ - : "=a" (__a), "=d" (__d) \ - : "a" (__a), "d" (__d) : "cc"); \ - __d; }) - -#define dmulscale(a,d,S,D,c) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D), __c=(c); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl %%cl, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D), "c" (__c) : "ebx", "cc"); \ - __a; }) -#define dmulscale1(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $1, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale2(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $2, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale3(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $3, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale4(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $4, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale5(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $5, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale6(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $6, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale7(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $7, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale8(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $8, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale9(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $9, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale10(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $10, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale11(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $11, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale12(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $12, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale13(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $13, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale14(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $14, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale15(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $15, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale16(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $16, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale17(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $17, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale18(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $18, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale19(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $19, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale20(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $20, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale21(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $21, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale22(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $22, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale23(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $23, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale24(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $24, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale25(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $25, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale26(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $26, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale27(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $27, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale28(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $28, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale29(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $29, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale30(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $30, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale31(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx; shrdl $31, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __a; }) -#define dmulscale32(a,d,S,D) \ - ({ int32_t __a=(a), __d=(d), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; movl %%eax, %%ebx; movl %%esi, %%eax; movl %%edx, %%esi; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%esi, %%edx" \ - : "=a" (__a), "=d" (__d), "=S" (__S) \ - : "a" (__a), "d" (__d), "S" (__S), "D" (__D) : "ebx", "cc"); \ - __d; }) - -#define tmulscale1(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $1, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale2(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $2, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale3(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $3, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale4(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $4, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale5(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $5, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale6(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $6, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale7(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $7, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale8(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $8, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale9(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $9, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale10(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $10, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale11(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $11, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale12(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $12, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale13(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $13, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale14(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $14, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale15(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $15, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale16(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $16, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale17(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $17, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale18(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $18, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale19(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $19, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale20(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $20, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale21(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $21, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale22(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $22, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale23(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $23, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale24(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $24, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale25(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $25, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale26(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $26, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale27(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $27, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale28(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $28, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale29(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $29, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale30(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $30, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale31(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx; shrdl $31, %%edx, %%eax" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __a; }) -#define tmulscale32(a,d,b,c,S,D) \ - ({ int32_t __a=(a), __d=(d), __b=(b), __c=(c), __S=(S), __D=(D); \ - __asm__ __volatile__ ("imull %%edx; xchgl %%ebx, %%eax; xchgl %%ecx, %%edx; " \ - "imull %%edx; addl %%eax, %%ebx; adcl %%edx, %%ecx; movl %%esi, %%eax; " \ - "imull %%edi; addl %%ebx, %%eax; adcl %%ecx, %%edx" \ - : "=a" (__a), "=d" (__d), "=b" (__b), "=c" (__c) \ - : "a" (__a), "d" (__d), "b" (__b), "c" (__c), "S" (__S), "D" (__D) : "cc"); \ - __d; }) - -#if 0 -#define divscale(a,b,c) \ - ({ int32_t __a=(a), __b=(b), __c=(c); \ - __asm__ __volatile__ ("movl %%eax, %%edx; shll %%cl, %%eax; negb %%cl; sarl %%cl, %%edx; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "c" (__c), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale1(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("addl %%eax, %%eax; sbbl %%edx, %%edx; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale2(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $30, %%edx; leal (,%%eax,4), %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale3(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $29, %%edx; leal (,%%eax,8), %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale4(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $28, %%edx; shll $4, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale5(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $27, %%edx; shll $5, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale6(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $26, %%edx; shll $6, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale7(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $25, %%edx; shll $7, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale8(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $24, %%edx; shll $8, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale9(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $23, %%edx; shll $9, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale10(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $22, %%edx; shll $10, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale11(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $21, %%edx; shll $11, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale12(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $20, %%edx; shll $12, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale13(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $19, %%edx; shll $13, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale14(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $18, %%edx; shll $14, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale15(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $17, %%edx; shll $15, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale16(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $16, %%edx; shll $16, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale17(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $15, %%edx; shll $17, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale18(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $14, %%edx; shll $18, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale19(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $13, %%edx; shll $19, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale20(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $12, %%edx; shll $20, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale21(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $11, %%edx; shll $21, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale22(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $10, %%edx; shll $22, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale23(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $9, %%edx; shll $23, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale24(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $8, %%edx; shll $24, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale25(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $7, %%edx; shll $25, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale26(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $6, %%edx; shll $26, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale27(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $5, %%edx; shll $27, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale28(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $4, %%edx; shll $28, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale29(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $3, %%edx; shll $29, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale30(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $2, %%edx; shll $30, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale31(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("movl %%eax, %%edx; sarl $1, %%edx; shll $31, %%eax; idivl %%ebx" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "edx", "cc"); \ - __a; }) -#define divscale32(d,b) \ - ({ int32_t __d=(d), __b=(b), __r; \ - __asm__ __volatile__ ("xorl %%eax, %%eax; idivl %%ebx" \ - : "=a" (__r), "=d" (__d) : "d" (__d), "b" (__b) : "cc"); \ - __r; }) -#endif -#define readpixel(D) \ - ({ void *__D=(D); int32_t __a; \ - __asm__ __volatile__ ("movb (%%edi), %%al" \ - : "=a" (__a): "D" (__D) : "cc"); \ - __a; }) -#define drawpixel(D,a) \ - ({ void *__D=(D); int32_t __a=(a); \ - __asm__ __volatile__ ("movb %%al, (%%edi)" \ - : : "D" (__D), "a" (__a) : "memory", "cc"); \ - 0; }) -#define drawpixels(D,a) \ - ({ void *__D=(D); int32_t __a=(a); \ - __asm__ __volatile__ ("movw %%ax, (%%edi)" \ - : : "D" (__D), "a" (__a) : "memory", "cc"); \ - 0; }) -#define drawpixelses(D,a) \ - ({ void *__D=(D); int32_t __a=(a); \ - __asm__ __volatile__ ("movl %%eax, (%%edi)" \ - : : "D" (__D), "a" (__a) : "memory", "cc"); \ - 0; }) -#define clearbuf(D,c,a) \ - ({ void *__D=(D); int32_t __c=(c), __a=(a); \ - __asm__ __volatile__ ("rep; stosl" \ - : "=&D" (__D), "=&c" (__c) : "0" (__D), "1" (__c), "a" (__a) : "memory", "cc"); \ - 0; }) -#define copybuf(S,D,c) \ - ({ void *__S=(S), *__D=(D); int32_t __c=(c); \ - __asm__ __volatile__ ("rep; movsl" \ - : "=&S" (__S), "=&D" (__D), "=&c" (__c) : "0" (__S), "1" (__D), "2" (__c) : "memory", "cc"); \ - 0; }) - -#define mul3(a) \ - ({ int32_t __a=(a), __r; \ - __asm__ __volatile__ ("lea (%1,%1,2), %0" \ - : "=r" (__r) : "0" (__a) : "cc"); \ - __r; }) -#define mul5(a) \ - ({ int32_t __a=(a), __r; \ - __asm__ __volatile__ ("lea (%1,%1,4), %0" \ - : "=r" (__r) : "0" (__a) : "cc"); \ - __r; }) -#define mul9(a) \ - ({ int32_t __a=(a), __r; \ - __asm__ __volatile__ ("lea (%1,%1,8), %0" \ - : "=r" (__r) : "0" (__a) : "cc"); \ - __r; }) - -//returns eax/ebx, dmval = eax%edx; -#define divmod(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("xorl %%edx, %%edx; divl %%ebx; movl %%edx, "_DMVAL \ - : "+a" (__a) : "b" (__b) : "edx", "memory", "cc"); \ - __a; }) -//returns eax%ebx, dmval = eax/edx; -#define moddiv(a,b) \ - ({ int32_t __a=(a), __b=(b), __d; \ - __asm__ __volatile__ ("xorl %%edx, %%edx; divl %%ebx; movl %%eax, "_DMVAL \ - : "=d" (__d) : "a" (__a), "b" (__b) : "eax", "memory", "cc"); \ - __d; }) - -#define klabs(a) \ - ({ int32_t __a=(a); \ - __asm__ __volatile__ ("testl %%eax, %%eax; jns 0f; negl %%eax; 0:" \ - : "=a" (__a) : "a" (__a) : "cc"); \ - __a; }) -#define ksgn(b) \ - ({ int32_t __b=(b), __r; \ - __asm__ __volatile__ ("addl %%ebx, %%ebx; sbbl %%eax, %%eax; cmpl %%ebx, %%eax; adcb $0, %%al" \ - : "=a" (__r) : "b" (__b) : "cc"); \ - __r; }) - -#define umin(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("subl %%ebx, %%eax; sbbl %%ecx, %%ecx; andl %%ecx, %%eax; addl %%ebx, %%eax" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "ecx", "cc"); \ - __a; }) -#define umax(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("subl %%ebx, %%eax; sbbl %%ecx, %%ecx; xorl $0xffffffff, %%ecx; andl %%ecx, %%eax; addl %%ebx, %%eax" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "ecx", "cc"); \ - __a; }) - -#define kmin(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("cmpl %%ebx, %%eax; jl 0f; movl %%ebx, %%eax; 0:" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "cc"); \ - __a; }) -#define kmax(a,b) \ - ({ int32_t __a=(a), __b=(b); \ - __asm__ __volatile__ ("cmpl %%ebx, %%eax; jg 0f; movl %%ebx, %%eax; 0:" \ - : "=a" (__a) : "a" (__a), "b" (__b) : "cc"); \ - __a; }) - -#define swapchar(a,b) \ - ({ void *__a=(a), *__b=(b); \ - __asm__ __volatile__ ("movb (%%eax), %%cl; movb (%%ebx), %%ch; movb %%cl, (%%ebx); movb %%ch, (%%eax)" \ - : : "a" (__a), "b" (__b) : "ecx", "memory", "cc"); \ - 0; }) -#define swapshort(a,b) \ - ({ void *__a=(a), *__b=(b); \ - __asm__ __volatile__ ("movw (%%eax), %%cx; movw (%%ebx), %%dx; movw %%cx, (%%ebx); movw %%dx, (%%eax)" \ - : : "a" (__a), "b" (__b) : "ecx", "edx", "memory", "cc"); \ - 0; }) -#define swaplong(a,b) \ - ({ void *__a=(a), *__b=(b); \ - __asm__ __volatile__ ("movl (%%eax), %%ecx; movl (%%ebx), %%edx; movl %%ecx, (%%ebx); movl %%edx, (%%eax)" \ - : : "a" (__a), "b" (__b) : "ecx", "edx", "memory", "cc"); \ - 0; }) -#define swapbuf4(a,b,c) \ - ({ void *__a=(a), *__b=(b); int32_t __c=(c); \ - __asm__ __volatile__ ("0: movl (%%eax), %%esi; movl (%%ebx), %%edi; movl %%esi, (%%ebx); " \ - "movl %%edi, (%%eax); addl $4, %%eax; addl $4, %%ebx; decl %%ecx; jnz 0b" \ - : : "a" (__a), "b" (__b), "c" (__c) : "esi", "edi", "memory", "cc"); \ - 0; }) -#define swap64bit(a,b) \ - ({ void *__a=(a), *__b=(b); \ - __asm__ __volatile__ ("movl (%%eax), %%ecx; movl (%%ebx), %%edx; movl %%ecx, (%%ebx); " \ - "movl 4(%%eax), %%ecx; movl %%edx, (%%eax); movl 4(%%ebx), %%edx; " \ - "movl %%ecx, 4(%%ebx); movl %%edx, 4(%%eax)" \ - : : "a" (__a), "b" (__b) : "ecx", "edx", "memory", "cc"); \ - 0; }) - -//swapchar2(ptr1,ptr2,xsiz); is the same as: -//swapchar(ptr1,ptr2); swapchar(ptr1+1,ptr2+xsiz); -#define swapchar2(a,b,S) \ - ({ void *__a=(a), *__b=(b); int32_t __S=(S); \ - __asm__ __volatile__ ("addl %%ebx, %%esi; movw (%%eax), %%cx; movb (%%ebx), %%dl; " \ - "movb %%cl, (%%ebx); movb (%%esi), %%dh; movb %%ch, (%%esi); " \ - "movw %%dx, (%%eax)" \ - : "=S" (__S) : "a" (__a), "b" (__b), "S" (__S) : "ecx", "edx", "memory", "cc"); \ - 0; }) - - -#define qinterpolatedown16(a,c,d,S) \ - ({ void *__a=(void*)(a); int32_t __c=(c), __d=(d), __S=(S); \ - __asm__ __volatile__ ("movl %%ecx, %%ebx; shrl $1, %%ecx; jz 1f; " \ - "0: leal (%%edx,%%esi,), %%edi; sarl $16, %%edx; movl %%edx, (%%eax); " \ - "leal (%%edi,%%esi,), %%edx; sarl $16, %%edi; movl %%edi, 4(%%eax); " \ - "addl $8, %%eax; decl %%ecx; jnz 0b; testl $1, %%ebx; jz 2f; " \ - "1: sarl $16, %%edx; movl %%edx, (%%eax); 2:" \ - : "=a" (__a), "=c" (__c), "=d" (__d) : "a" (__a), "c" (__c), "d" (__d), "S" (__S) \ - : "ebx", "edi", "memory", "cc"); \ - 0; }) - -#define qinterpolatedown16short(a,c,d,S) \ - ({ void *__a=(void*)(a); int32_t __c=(c), __d=(d), __S=(S); \ - __asm__ __volatile__ ("testl %%ecx, %%ecx; jz 3f; testb $2, %%al; jz 0f; movl %%edx, %%ebx; " \ - "sarl $16, %%ebx; movw %%bx, (%%eax); addl %%esi, %%edx; addl $2, %%eax; " \ - "decl %%ecx; jz 3f; " \ - "0: subl $2, %%ecx; jc 2f; " \ - "1: movl %%edx, %%ebx; addl %%esi, %%edx; sarl $16, %%ebx; movl %%edx, %%edi; " \ - "andl $0xffff0000, %%edi; addl %%esi, %%edx; addl %%edi, %%ebx; " \ - "movl %%ebx, (%%eax); addl $4, %%eax; subl $2, %%ecx; jnc 1b; testb $1, %%cl; " \ - "jz 3f; " \ - "2: movl %%edx, %%ebx; sarl $16, %%ebx; movw %%bx, (%%eax); 3:" \ - : "=a" (__a), "=c" (__c), "=d" (__d) : "a" (__a), "c" (__c), "d" (__d), "S" (__S) \ - : "ebx", "edi", "memory", "cc"); \ - 0; }) - - -//}}} - -#elif defined(_MSC_VER) && !defined(NOASM) // __GNUC__ - -// -// Microsoft C inline assembler -// - -//{{{ -static __inline int32_t sqr(int32_t a) -{ - _asm { - mov eax, a - imul eax, eax - } -} - -static __inline int32_t scale(int32_t a, int32_t d, int32_t c) -{ - _asm { - mov eax, a - imul d - idiv c - } -} - -static __inline int32_t mulscale(int32_t a, int32_t d, int32_t c) -{ - _asm { - mov ecx, c - mov eax, a - imul d - shrd eax, edx, cl - } -} - -#define MULSCALE(x) \ -static __inline int32_t mulscale##x (int32_t a, int32_t d) \ -{ \ - _asm mov eax, a \ - _asm imul d \ - _asm shrd eax, edx, x \ -} - -MULSCALE(1) MULSCALE(2) MULSCALE(3) MULSCALE(4) -MULSCALE(5) MULSCALE(6) MULSCALE(7) MULSCALE(8) -MULSCALE(9) MULSCALE(10) MULSCALE(11) MULSCALE(12) -MULSCALE(13) MULSCALE(14) MULSCALE(15) MULSCALE(16) -MULSCALE(17) MULSCALE(18) MULSCALE(19) MULSCALE(20) -MULSCALE(21) MULSCALE(22) MULSCALE(23) MULSCALE(24) -MULSCALE(25) MULSCALE(26) MULSCALE(27) MULSCALE(28) -MULSCALE(29) MULSCALE(30) MULSCALE(31) -#undef MULSCALE -static __inline int32_t mulscale32(int32_t a, int32_t d) -{ - _asm { - mov eax, a - imul d - mov eax, edx - } -} - -static __inline int32_t dmulscale(int32_t a, int32_t d, int32_t S, int32_t D, int32_t c) -{ - _asm { - mov ecx, c - mov eax, a - imul d - mov ebx, eax - mov eax, S - mov esi, edx - imul D - add eax, ebx - adc edx, esi - shrd eax, edx, cl - } -} - -#define DMULSCALE(x) \ -static __inline int32_t dmulscale##x (int32_t a, int32_t d, int32_t S, int32_t D) \ -{ \ - _asm mov eax, a \ - _asm imul d \ - _asm mov ebx, eax \ - _asm mov eax, S \ - _asm mov esi, edx \ - _asm imul D \ - _asm add eax, ebx \ - _asm adc edx, esi \ - _asm shrd eax, edx, x \ -} - -DMULSCALE(1) DMULSCALE(2) DMULSCALE(3) DMULSCALE(4) -DMULSCALE(5) DMULSCALE(6) DMULSCALE(7) DMULSCALE(8) -DMULSCALE(9) DMULSCALE(10) DMULSCALE(11) DMULSCALE(12) -DMULSCALE(13) DMULSCALE(14) DMULSCALE(15) DMULSCALE(16) -DMULSCALE(17) DMULSCALE(18) DMULSCALE(19) DMULSCALE(20) -DMULSCALE(21) DMULSCALE(22) DMULSCALE(23) DMULSCALE(24) -DMULSCALE(25) DMULSCALE(26) DMULSCALE(27) DMULSCALE(28) -DMULSCALE(29) DMULSCALE(30) DMULSCALE(31) -#undef DMULSCALE -static __inline int32_t dmulscale32(int32_t a, int32_t d, int32_t S, int32_t D) -{ - _asm { - mov eax, a - imul d - mov ebx, eax - mov eax, S - mov esi, edx - imul D - add eax, ebx - adc edx, esi - mov eax, edx - } -} - -#define TMULSCALE(x) \ -static __inline int32_t tmulscale##x (int32_t a, int32_t d, int32_t b, int32_t c, int32_t S, int32_t D) \ -{ \ - _asm mov eax, a \ - _asm mov ebx, b \ - _asm imul d \ - _asm xchg eax, ebx \ - _asm mov ecx, c \ - _asm xchg edx, ecx \ - _asm imul edx \ - _asm add ebx, eax \ - _asm adc ecx, edx \ - _asm mov eax, S \ - _asm imul D \ - _asm add eax, ebx \ - _asm adc edx, ecx \ - _asm shrd eax, edx, x \ -} - -TMULSCALE(1) TMULSCALE(2) TMULSCALE(3) TMULSCALE(4) -TMULSCALE(5) TMULSCALE(6) TMULSCALE(7) TMULSCALE(8) -TMULSCALE(9) TMULSCALE(10) TMULSCALE(11) TMULSCALE(12) -TMULSCALE(13) TMULSCALE(14) TMULSCALE(15) TMULSCALE(16) -TMULSCALE(17) TMULSCALE(18) TMULSCALE(19) TMULSCALE(20) -TMULSCALE(21) TMULSCALE(22) TMULSCALE(23) TMULSCALE(24) -TMULSCALE(25) TMULSCALE(26) TMULSCALE(27) TMULSCALE(28) -TMULSCALE(29) TMULSCALE(30) TMULSCALE(31) -#undef TMULSCALE -static __inline int32_t tmulscale32(int32_t a, int32_t d, int32_t b, int32_t c, int32_t S, int32_t D) -{ - _asm { - mov eax, a - mov ebx, b - imul d - xchg eax, ebx - mov ecx, c - xchg edx, ecx - imul edx - add ebx, eax - adc ecx, edx - mov eax, S - imul D - add eax, ebx - adc edx, ecx - mov eax, edx - } -} - -static __inline int32_t boundmulscale(int32_t a, int32_t b, int32_t c) -{ - _asm { - mov eax, a - mov ecx, c - imul b - mov ebx, edx - shrd eax, edx, cl - sar edx, cl - xor edx, eax - js checkit - xor edx, eax - jz skipboundit - cmp edx, 0xffffffff - je skipboundit - checkit: - mov eax, ebx - sar eax, 31 - xor eax, 0x7fffffff - skipboundit: - } -} -#if 0 -static __inline int32_t divscale(int32_t a, int32_t b, int32_t c) -{ - _asm { - mov eax, a - mov ecx, c - mov edx, eax - shl eax, cl - neg cl - sar edx, cl - idiv b - } -} - -static __inline int32_t divscale1(int32_t a, int32_t b) -{ - _asm { - mov eax, a - add eax, eax - sbb edx, edx - idiv b - } -} - -static __inline int32_t divscale2(int32_t a, int32_t b) -{ - _asm { - mov eax, a - mov edx, eax - sar edx, 30 - lea eax, [eax*4] - idiv b - } -} - -static __inline int32_t divscale3(int32_t a, int32_t b) -{ - _asm { - mov eax, a - mov edx, eax - sar edx, 29 - lea eax, [eax*8] - idiv b - } -} - -#define DIVSCALE(x,y) \ -static __inline int32_t divscale##y(int32_t a, int32_t b) \ -{ \ - _asm mov eax, a \ - _asm mov edx, eax \ - _asm sar edx, x \ - _asm shl eax, y \ - _asm idiv b \ -} - -DIVSCALE(28,4) DIVSCALE(27,5) DIVSCALE(26,6) DIVSCALE(25,7) -DIVSCALE(24,8) DIVSCALE(23,9) DIVSCALE(22,10) DIVSCALE(21,11) -DIVSCALE(20,12) DIVSCALE(19,13) DIVSCALE(18,14) DIVSCALE(17,15) -DIVSCALE(16,16) DIVSCALE(15,17) DIVSCALE(14,18) DIVSCALE(13,19) -DIVSCALE(12,20) DIVSCALE(11,21) DIVSCALE(10,22) DIVSCALE(9,23) -DIVSCALE(8,24) DIVSCALE(7,25) DIVSCALE(6,26) DIVSCALE(5,27) -DIVSCALE(4,28) DIVSCALE(3,29) DIVSCALE(2,30) DIVSCALE(1,31) - -static __inline int32_t divscale32(int32_t d, int32_t b) -{ - _asm { - mov edx, d - xor eax, eax - idiv b - } -} -#endif -static __inline char readpixel(void *d) -{ - _asm { - mov edx, d - mov al, byte ptr [edx] - } -} - -static __inline void drawpixel(void *d, char a) -{ - _asm { - mov edx, d - mov al, a - mov byte ptr [edx], al - } -} - -static __inline void drawpixels(void *d, int16_t a) -{ - _asm { - mov edx, d - mov ax, a - mov word ptr [edx], ax - } -} - -static __inline void drawpixelses(void *d, int32_t a) -{ - _asm { - mov edx, d - mov eax, a - mov dword ptr [edx], eax - } -} - -static __inline void clearbuf(void *d, int32_t c, int32_t a) -{ - _asm { - mov edi, d - mov ecx, c - mov eax, a - rep stosd - } -} - -static __inline void clearbufbyte(void *d, int32_t c, int32_t a) -{ - _asm { - mov edi, d - mov ecx, c - mov eax, a - cmp ecx, 4 - jae longcopy - test cl, 1 - jz preskip - stosb - preskip: - shr ecx, 1 - rep stosw - jmp endit - longcopy: - test edi, 1 - jz skip1 - stosb - dec ecx - skip1: - test edi, 2 - jz skip2 - stosw - sub ecx, 2 - skip2: - mov ebx, ecx - shr ecx, 2 - rep stosd - test bl, 2 - jz skip3 - stosw - skip3: - test bl, 1 - jz endit - stosb - endit: - } -} - -static __inline void copybuf(void *s, void *d, int32_t c) -{ - _asm { - mov esi, s - mov edi, d - mov ecx, c - rep movsd - } -} - -static __inline void copybufbyte(void *s, void *d, int32_t c) -{ - _asm { - mov esi, s - mov edi, d - mov ecx, c - cmp ecx, 4 - jae longcopy - test cl, 1 - jz preskip - movsb - preskip: - shr ecx, 1 - rep movsw - jmp endit - longcopy: - test edi, 1 - jz skip1 - movsb - dec ecx - skip1: - test edi, 2 - jz skip2 - movsw - sub ecx, 2 - skip2: - mov ebx, ecx - shr ecx, 2 - rep movsd - test bl, 2 - jz skip3 - movsw - skip3: - test bl, 1 - jz endit - movsb - endit: - } -} - -static __inline void copybufreverse(void *s, void *d, int32_t c) -{ - _asm { - mov esi, s - mov edi, d - mov ecx, c - shr ecx, 1 - jnc skipit1 - mov al, byte ptr [esi] - dec esi - mov byte ptr [edi], al - inc edi - skipit1: - shr ecx, 1 - jnc skipit2 - mov ax, word ptr [esi-1] - sub esi, 2 - ror ax, 8 - mov word ptr [edi], ax - add edi, 2 - skipit2: - test ecx, ecx - jz endloop - begloop: - mov eax, dword ptr [esi-3] - sub esi, 4 - bswap eax - mov dword ptr [edi], eax - add edi, 4 - dec ecx - jnz begloop - endloop: - } -} - -static __inline void qinterpolatedown16(int32_t a, int32_t c, int32_t d, int32_t s) -{ - _asm { - mov eax, a - mov ecx, c - mov edx, d - mov esi, s - mov ebx, ecx - shr ecx, 1 - jz skipbegcalc - begqcalc: - lea edi, [edx+esi] - sar edx, 16 - mov dword ptr [eax], edx - lea edx, [edi+esi] - sar edi, 16 - mov dword ptr [eax+4], edi - add eax, 8 - dec ecx - jnz begqcalc - test ebx, 1 - jz skipbegqcalc2 - skipbegcalc: - sar edx, 16 - mov dword ptr [eax], edx - skipbegqcalc2: - } -} - -static __inline void qinterpolatedown16short(int32_t a, int32_t c, int32_t d, int32_t s) -{ - _asm { - mov eax, a - mov ecx, c - mov edx, d - mov esi, s - test ecx, ecx - jz endit - test al, 2 - jz skipalignit - mov ebx, edx - sar ebx, 16 - mov word ptr [eax], bx - add edx, esi - add eax, 2 - dec ecx - jz endit - skipalignit: - sub ecx, 2 - jc finishit - begqcalc: - mov ebx, edx - add edx, esi - sar ebx, 16 - mov edi, edx - and edi, 0ffff0000h - add edx, esi - add ebx, edi - mov dword ptr [eax], ebx - add eax, 4 - sub ecx, 2 - jnc begqcalc - test cl, 1 - jz endit - finishit: - mov ebx, edx - sar ebx, 16 - mov word ptr [eax], bx - endit: - } -} - -static __inline int32_t mul3(int32_t a) -{ - _asm { - mov eax, a - lea eax, [eax+eax*2] - } -} - -static __inline int32_t mul5(int32_t a) -{ - _asm { - mov eax, a - lea eax, [eax+eax*4] - } -} - -static __inline int32_t mul9(int32_t a) -{ - _asm { - mov eax, a - lea eax, [eax+eax*8] - } -} - - //returns eax/ebx, dmval = eax%edx; -static __inline int32_t divmod(int32_t a, int32_t b) -{ - _asm { - mov eax, a - xor edx, edx - div b - mov dmval, edx - } -} - - //returns eax%ebx, dmval = eax/edx; -static __inline int32_t moddiv(int32_t a, int32_t b) -{ - _asm { - mov eax, a - xor edx, edx - div b - mov dmval, eax - mov eax, edx - } -} - -static __inline int32_t klabs(int32_t a) -{ - _asm { - mov eax, a - test eax, eax - jns skipnegate - neg eax - skipnegate: - } -} - -static __inline int32_t ksgn(int32_t b) -{ - _asm { - mov ebx, b - add ebx, ebx - sbb eax, eax - cmp eax, ebx - adc al, 0 - } -} - - //eax = (unsigned min)umin(eax,ebx) -static __inline int32_t umin(int32_t a, int32_t b) -{ - _asm { - mov eax, a - sub eax, b - sbb ecx, ecx - and eax, ecx - add eax, b - } -} - - //eax = (unsigned max)umax(eax,ebx) -static __inline int32_t umax(int32_t a, int32_t b) -{ - _asm { - mov eax, a - sub eax, b - sbb ecx, ecx - xor ecx, 0xffffffff - and eax, ecx - add eax, b - } -} - -static __inline int32_t kmin(int32_t a, int32_t b) -{ - _asm { - mov eax, a - mov ebx, b - cmp eax, ebx - jl skipit - mov eax, ebx - skipit: - } -} - -static __inline int32_t kmax(int32_t a, int32_t b) -{ - _asm { - mov eax, a - mov ebx, b - cmp eax, ebx - jg skipit - mov eax, ebx - skipit: - } -} - -static __inline void swapchar(void *a, void *b) -{ - _asm { - mov eax, a - mov ebx, b - mov cl, [eax] - mov ch, [ebx] - mov [ebx], cl - mov [eax], ch - } -} - -static __inline void swapshort(void *a, void *b) -{ - _asm { - mov eax, a - mov ebx, b - mov cx, [eax] - mov dx, [ebx] - mov [ebx], cx - mov [eax], dx - } -} - -static __inline void swaplong(void *a, void *b) -{ - _asm { - mov eax, a - mov ebx, b - mov ecx, [eax] - mov edx, [ebx] - mov [ebx], ecx - mov [eax], edx - } -} - -static __inline void swapbuf4(void *a, void *b, int32_t c) -{ - _asm { - mov eax, a - mov ebx, b - mov ecx, c - begswap: - mov esi, [eax] - mov edi, [ebx] - mov [ebx], esi - mov [eax], edi - add eax, 4 - add ebx, 4 - dec ecx - jnz short begswap - } -} - -static __inline void swap64bit(void *a, void *b) -{ - _asm { - mov eax, a - mov ebx, b - mov ecx, [eax] - mov edx, [ebx] - mov [ebx], ecx - mov ecx, [eax+4] - mov [eax], edx - mov edx, [ebx+4] - mov [ebx+4], ecx - mov [eax+4], edx - } -} - - //swapchar2(ptr1,ptr2,xsiz); is the same as: - //swapchar(ptr1,ptr2); swapchar(ptr1+1,ptr2+xsiz); -static __inline void swapchar2(void *a, void *b, int32_t s) -{ - _asm { - mov eax, a - mov ebx, b - mov esi, s - add esi, ebx - mov cx, [eax] - mov dl, [ebx] - mov [ebx], cl - mov dh, [esi] - mov [esi], ch - mov [eax], dx - } -} -//}}} - -#else // _MSC_VER - -// -// Generic C -// - -#define qw(x) ((int64_t)(x)) // quadword cast -#define dw(x) ((int32_t)(x)) // doubleword cast -#define wo(x) ((int16_t)(x)) // word cast -#define by(x) ((uint8_t)(x)) // byte cast - -#define _scaler(a) \ -static inline int32_t mulscale##a(int32_t eax, int32_t edx) \ -{ \ - return dw((qw(eax) * qw(edx)) >> a); \ -} \ -\ -static inline int32_t dmulscale##a(int32_t eax, int32_t edx, int32_t esi, int32_t edi) \ -{ \ - return dw(((qw(eax) * qw(edx)) + (qw(esi) * qw(edi))) >> a); \ -} \ -\ -static inline int32_t tmulscale##a(int32_t eax, int32_t edx, int32_t ebx, int32_t ecx, int32_t esi, int32_t edi) \ -{ \ - return dw(((qw(eax) * qw(edx)) + (qw(ebx) * qw(ecx)) + (qw(esi) * qw(edi))) >> a); \ -} \ - -_scaler(1) _scaler(2) _scaler(3) _scaler(4) -_scaler(5) _scaler(6) _scaler(7) _scaler(8) -_scaler(9) _scaler(10) _scaler(11) _scaler(12) -_scaler(13) _scaler(14) _scaler(15) _scaler(16) -_scaler(17) _scaler(18) _scaler(19) _scaler(20) -_scaler(21) _scaler(22) _scaler(23) _scaler(24) -_scaler(25) _scaler(26) _scaler(27) _scaler(28) -_scaler(29) _scaler(30) _scaler(31) _scaler(32) - -static inline void swapchar(void* a, void* b) { char t = *((char*)b); *((char*)b) = *((char*)a); *((char*)a) = t; } -static inline void swapchar2(void* a, void* b, int32_t s) { swapchar(a,b); swapchar((char*)a+1,(char*)b+s); } -static inline void swapshort(void* a, void* b) { int16_t t = *((int16_t*)b); *((int16_t*)b) = *((int16_t*)a); *((int16_t*)a) = t; } -static inline void swaplong(void* a, void* b) { int32_t t = *((int32_t*)b); *((int32_t*)b) = *((int32_t*)a); *((int32_t*)a) = t; } -static inline void swap64bit(void* a, void* b) { int64_t t = *((int64_t*)b); *((int64_t*)b) = *((int64_t*)a); *((int64_t*)a) = t; } - -static inline char readpixel(void* s) { return (*((char*)(s))); } -static inline void drawpixel(void* s, char a) { *((char*)(s)) = a; } -static inline void drawpixels(void* s, int16_t a) { *((int16_t*)(s)) = a; } -static inline void drawpixelses(void* s, int32_t a) { *((int32_t*)(s)) = a; } - -static inline int32_t mul3(int32_t a) { return (a<<1)+a; } -static inline int32_t mul5(int32_t a) { return (a<<2)+a; } -static inline int32_t mul9(int32_t a) { return (a<<3)+a; } - -static inline int32_t divmod(int32_t a, int32_t b) { uint32_t _a=(uint32_t)a, _b=(uint32_t)b; dmval = _a%_b; return _a/_b; } -static inline int32_t moddiv(int32_t a, int32_t b) { uint32_t _a=(uint32_t)a, _b=(uint32_t)b; dmval = _a/_b; return _a%_b; } - -static inline int32_t klabs(int32_t a) { if (a < 0) return -a; return a; } -static inline int32_t ksgn(int32_t a) { if (a > 0) return 1; if (a < 0) return -1; return 0; } - -static inline int32_t umin(int32_t a, int32_t b) { if ((uint32_t)a < (uint32_t)b) return a; return b; } -static inline int32_t umax(int32_t a, int32_t b) { if ((uint32_t)a < (uint32_t)b) return b; return a; } -static inline int32_t kmin(int32_t a, int32_t b) { if ((int32_t)a < (int32_t)b) return a; return b; } -static inline int32_t kmax(int32_t a, int32_t b) { if ((int32_t)a < (int32_t)b) return b; return a; } - -static inline int32_t sqr(int32_t eax) { return (eax) * (eax); } -static inline int32_t scale(int32_t eax, int32_t edx, int32_t ecx) { return dw((qw(eax) * qw(edx)) / qw(ecx)); } -static inline int32_t mulscale(int32_t eax, int32_t edx, int32_t ecx) { return dw((qw(eax) * qw(edx)) >> by(ecx)); } -static inline int32_t dmulscale(int32_t eax, int32_t edx, int32_t esi, int32_t edi, int32_t ecx) { return dw(((qw(eax) * qw(edx)) + (qw(esi) * qw(edi))) >> by(ecx)); } - -static inline int32_t boundmulscale(int32_t a, int32_t d, int32_t c) -{ // courtesy of Ken - int64_t p; - p = (((int64_t)a)*((int64_t)d))>>c; - if (p >= INT_MAX) p = INT_MAX; - if (p < INT_MIN) p = INT_MIN; - return((int32_t)p); -} - -#undef qw -#undef dw -#undef wo -#undef by -#undef _scaler - -void qinterpolatedown16 (intptr_t bufptr, int32_t num, int32_t val, int32_t add); -void qinterpolatedown16short (intptr_t bufptr, int32_t num, int32_t val, int32_t add); - -void clearbuf(void* d, int32_t c, int32_t a); -void copybuf(void* s, void* d, int32_t c); -void swapbuf4(void* a, void* b, int32_t c); - -void clearbufbyte(void *D, int32_t c, int32_t a); -void copybufbyte(void *S, void *D, int32_t c); -void copybufreverse(void *S, void *D, int32_t c); - -#endif - -#ifdef __cplusplus -} -#endif - -#endif // __pragmas_h__ - diff --git a/polymer-perf/eduke32/build/include/prlights.h b/polymer-perf/eduke32/build/include/prlights.h deleted file mode 100644 index 03a7c52d0..000000000 --- a/polymer-perf/eduke32/build/include/prlights.h +++ /dev/null @@ -1,40 +0,0 @@ -// LIGHTS -#ifndef _prlight_h_ -# define _prlight_h_ - -#define PR_MAXLIGHTS 1024 -#define SHADOW_DEPTH_OFFSET 30 -#define PR_MAXLIGHTPRIORITY 6 - -typedef struct s_prplanelist { - struct s_prplane* plane; - struct s_prplanelist* n; -} _prplanelist; - -#pragma pack(push,1) -typedef struct s_prlight { - int32_t x, y, z, horiz, range; - int16_t angle, faderadius, radius, sector; - uint8_t color[3], priority; - int8_t minshade, maxshade; - int16_t tilenum; - // internal members - float proj[16]; - float transform[16]; - float frustum[5 * 4]; - int32_t rtindex; - struct { - int32_t active : 1; - int32_t invalidate : 1; - int32_t isinview : 1; - } flags; - uint32_t lightmap; - _prplanelist* planelist; - int32_t planecount; -} _prlight; - -extern _prlight prlights[PR_MAXLIGHTS]; -extern int32_t lightcount; -#pragma pack(pop) - -#endif diff --git a/polymer-perf/eduke32/build/include/quicklz.h b/polymer-perf/eduke32/build/include/quicklz.h deleted file mode 100644 index dd20d4b57..000000000 --- a/polymer-perf/eduke32/build/include/quicklz.h +++ /dev/null @@ -1,150 +0,0 @@ -#ifndef QLZ_HEADER -#define QLZ_HEADER - -// Fast data compression library -// Copyright (C) 2006-2009 Lasse Mikkel Reinhold -// lar@quicklz.com -// -// QuickLZ can be used for free under the GPL-1 or GPL-2 license (where anything -// released into public must be open source) or under a commercial license if such -// has been acquired (see http://www.quicklz.com/order.html). The commercial license -// does not cover derived or ported versions created by third parties under GPL. - -// You can edit following user settings. Data must be decompressed with the same -// setting of QLZ_COMPRESSION_LEVEL and QLZ_STREAMING_BUFFER as it was compressed -// (see manual). If QLZ_STREAMING_BUFFER > 0, scratch buffers must be initially -// zeroed out (see manual). First #ifndef makes it possible to define settings from -// the outside like the compiler command line. - -// BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION -// BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION -// BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION -// BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION -// BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION - -// 1.5.0 BETA 2 - -#ifndef QLZ_COMPRESSION_LEVEL - //#define QLZ_COMPRESSION_LEVEL 1 - #define QLZ_COMPRESSION_LEVEL 2 - //#define QLZ_COMPRESSION_LEVEL 3 - - #define QLZ_STREAMING_BUFFER 0 - //#define QLZ_STREAMING_BUFFER 100000 - //#define QLZ_STREAMING_BUFFER 1000000 - - //#define QLZ_MEMORY_SAFE -#endif - -#define QLZ_VERSION_MAJOR 1 -#define QLZ_VERSION_MINOR 5 -#define QLZ_VERSION_REVISION 0 - -// Using size_t, memset() and memcpy() -#include - -// Verify compression level -#if QLZ_COMPRESSION_LEVEL != 1 && QLZ_COMPRESSION_LEVEL != 2 && QLZ_COMPRESSION_LEVEL != 3 -#error QLZ_COMPRESSION_LEVEL must be 1, 2 or 3 -#endif - -typedef unsigned int ui32; -typedef unsigned short int ui16; - -// Decrease QLZ_POINTERS for level 3 to increase compression speed. Do not touch any other values! -#if QLZ_COMPRESSION_LEVEL == 1 -#define QLZ_POINTERS 1 -#define QLZ_HASH_VALUES 4096 -#elif QLZ_COMPRESSION_LEVEL == 2 -#define QLZ_POINTERS 4 -#define QLZ_HASH_VALUES 2048 -#elif QLZ_COMPRESSION_LEVEL == 3 -#define QLZ_POINTERS 16 -#define QLZ_HASH_VALUES 4096 -#endif - -// Detect if pointer size is 64-bit. It's not fatal if some 64-bit target is not detected because this is only for adding an optional 64-bit optimization. -#if defined _LP64 || defined __LP64__ || defined __64BIT__ || _ADDR64 || defined _WIN64 || defined __arch64__ || __WORDSIZE == 64 || (defined __sparc && defined __sparcv9) || defined __x86_64 || defined __amd64 || defined __x86_64__ || defined _M_X64 || defined _M_IA64 || defined __ia64 || defined __IA64__ - #define QLZ_PTR_64 -#endif - -// hash entry -typedef struct -{ -#if QLZ_COMPRESSION_LEVEL == 1 - ui32 cache; -#if defined QLZ_PTR_64 && QLZ_STREAMING_BUFFER == 0 - unsigned int offset; -#else - const unsigned char *offset; -#endif -#else - const unsigned char *offset[QLZ_POINTERS]; -#endif - -} qlz_hash_compress; - -typedef struct -{ -#if QLZ_COMPRESSION_LEVEL == 1 - const unsigned char *offset; -#else - const unsigned char *offset[QLZ_POINTERS]; -#endif -} qlz_hash_decompress; - - -// states -typedef struct -{ - #if QLZ_STREAMING_BUFFER > 0 - unsigned char stream_buffer[QLZ_STREAMING_BUFFER]; - #endif - size_t stream_counter; - qlz_hash_compress hash[QLZ_HASH_VALUES]; - unsigned char hash_counter[QLZ_HASH_VALUES]; -} qlz_state_compress; - - -#if QLZ_COMPRESSION_LEVEL == 1 || QLZ_COMPRESSION_LEVEL == 2 - typedef struct - { -#if QLZ_STREAMING_BUFFER > 0 - unsigned char stream_buffer[QLZ_STREAMING_BUFFER]; -#endif - qlz_hash_decompress hash[QLZ_HASH_VALUES]; - unsigned char hash_counter[QLZ_HASH_VALUES]; - size_t stream_counter; - } qlz_state_decompress; -#elif QLZ_COMPRESSION_LEVEL == 3 - typedef struct - { -#if QLZ_STREAMING_BUFFER > 0 - unsigned char stream_buffer[QLZ_STREAMING_BUFFER]; -#endif - qlz_hash_decompress hash[QLZ_HASH_VALUES]; - size_t stream_counter; - } qlz_state_decompress; -#endif - - -#if defined (__cplusplus) -extern "C" { -#endif - -// Public functions of QuickLZ -size_t qlz_size_decompressed(const char *source); -size_t qlz_size_compressed(const char *source); -size_t qlz_compress(const void *source, char *destination, size_t size, qlz_state_compress *state); -size_t qlz_decompress(const char *source, void *destination, qlz_state_decompress *state); -int qlz_get_setting(int setting); - -extern qlz_state_compress *state_compress; -extern qlz_state_decompress *state_decompress; - -#if defined (__cplusplus) -} -#endif - -#endif - diff --git a/polymer-perf/eduke32/build/include/rawinput.h b/polymer-perf/eduke32/build/include/rawinput.h deleted file mode 100644 index b0c6678d7..000000000 --- a/polymer-perf/eduke32/build/include/rawinput.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef rawinput_h__ -#define rawinput_h__ - -#include "compat.h" - -void RI_PollDevices(BOOL loop); -void RI_ProcessMessage(MSG *msg); -BOOL RI_CaptureInput(BOOL grab, HWND target); - -#ifndef VK_LBUTTON -#define VK_LBUTTON 0x01 -#endif -#ifndef VK_RBUTTON -#define VK_RBUTTON 0x02 -#endif -#ifndef VK_CANCEL -#define VK_CANCEL 0x03 -#endif -#ifndef VK_MBUTTON -#define VK_MBUTTON 0x04 /* NOT contiguous with L & RBUTTON */ -#endif - -#endif // rawinput_h__ - diff --git a/polymer-perf/eduke32/build/include/scancodes.h b/polymer-perf/eduke32/build/include/scancodes.h deleted file mode 100644 index 28760d96b..000000000 --- a/polymer-perf/eduke32/build/include/scancodes.h +++ /dev/null @@ -1,123 +0,0 @@ - -#define sc_None 0 -#define sc_Bad 0xff -#define sc_Comma 0x33 -#define sc_Period 0x34 -#define sc_Return 0x1c -#define sc_Enter sc_Return -#define sc_Escape 0x01 -#define sc_Space 0x39 -#define sc_BackSpace 0x0e -#define sc_Tab 0x0f -#define sc_LeftAlt 0x38 -#define sc_LeftControl 0x1d -#define sc_CapsLock 0x3a -#define sc_LeftShift 0x2a -#define sc_RightShift 0x36 -#define sc_F1 0x3b -#define sc_F2 0x3c -#define sc_F3 0x3d -#define sc_F4 0x3e -#define sc_F5 0x3f -#define sc_F6 0x40 -#define sc_F7 0x41 -#define sc_F8 0x42 -#define sc_F9 0x43 -#define sc_F10 0x44 -#define sc_F11 0x57 -#define sc_F12 0x58 -#define sc_Kpad_Star 0x37 -#define sc_Pause 0x59 -#define sc_ScrollLock 0x46 -#define sc_NumLock 0x45 -#define sc_Slash 0x35 -#define sc_SemiColon 0x27 -#define sc_Quote 0x28 -#define sc_Tilde 0x29 -#define sc_BackSlash 0x2b - -#define sc_OpenBracket 0x1a -#define sc_CloseBracket 0x1b - -#define sc_1 0x02 -#define sc_2 0x03 -#define sc_3 0x04 -#define sc_4 0x05 -#define sc_5 0x06 -#define sc_6 0x07 -#define sc_7 0x08 -#define sc_8 0x09 -#define sc_9 0x0a -#define sc_0 0x0b -#define sc_Minus 0x0c -#define sc_Equals 0x0d -#define sc_Plus 0x0d - -#define sc_kpad_1 0x4f -#define sc_kpad_2 0x50 -#define sc_kpad_3 0x51 -#define sc_kpad_4 0x4b -#define sc_kpad_5 0x4c -#define sc_kpad_6 0x4d -#define sc_kpad_7 0x47 -#define sc_kpad_8 0x48 -#define sc_kpad_9 0x49 -#define sc_kpad_0 0x52 -#define sc_kpad_Minus 0x4a -#define sc_kpad_Plus 0x4e -#define sc_kpad_Period 0x53 - -#define sc_A 0x1e -#define sc_B 0x30 -#define sc_C 0x2e -#define sc_D 0x20 -#define sc_E 0x12 -#define sc_F 0x21 -#define sc_G 0x22 -#define sc_H 0x23 -#define sc_I 0x17 -#define sc_J 0x24 -#define sc_K 0x25 -#define sc_L 0x26 -#define sc_M 0x32 -#define sc_N 0x31 -#define sc_O 0x18 -#define sc_P 0x19 -#define sc_Q 0x10 -#define sc_R 0x13 -#define sc_S 0x1f -#define sc_T 0x14 -#define sc_U 0x16 -#define sc_V 0x2f -#define sc_W 0x11 -#define sc_X 0x2d -#define sc_Y 0x15 -#define sc_Z 0x2c - -// Extended scan codes - -#define sc_UpArrow 0xc8 //0x5a -#define sc_DownArrow 0xd0 //0x6a -#define sc_LeftArrow 0xcb //0x6b -#define sc_RightArrow 0xcd //0x6c -#define sc_Insert 0xd2 //0x5e -#define sc_Delete 0xd3 //0x5f -#define sc_Home 0xc7 //0x61 -#define sc_End 0xcf //0x62 -#define sc_PgUp 0xc9 //0x63 -#define sc_PgDn 0xd1 //0x64 -#define sc_RightAlt 0xb8 //0x65 -#define sc_RightControl 0x9d //0x66 -#define sc_kpad_Slash 0xb5 //0x67 -#define sc_kpad_Enter 0x9c //0x68 -#define sc_PrintScreen 0xb7 //0x69 -#define sc_LastScanCode 0x6e - -// Ascii scan codes - -#define asc_Enter 13 -#define asc_Escape 27 -#define asc_BackSpace 8 -#define asc_Tab 9 -#define asc_Space 32 - diff --git a/polymer-perf/eduke32/build/include/scriptfile.h b/polymer-perf/eduke32/build/include/scriptfile.h deleted file mode 100644 index a19531a9a..000000000 --- a/polymer-perf/eduke32/build/include/scriptfile.h +++ /dev/null @@ -1,27 +0,0 @@ -typedef struct { - char *textbuf; - uint32_t textlength; - char *ltextptr; // pointer to start of the last token fetched (use this for line numbers) - char *textptr; - char *eof; - char *filename; - int32_t linenum; - int32_t *lineoffs; -} scriptfile; - -char *scriptfile_gettoken(scriptfile *sf); -int32_t scriptfile_getnumber(scriptfile *sf, int32_t *num); -int32_t scriptfile_getdouble(scriptfile *sf, double *num); -int32_t scriptfile_getstring(scriptfile *sf, char **st); -int32_t scriptfile_getsymbol(scriptfile *sf, int32_t *num); -int32_t scriptfile_getlinum(scriptfile *sf, char *ptr); -int32_t scriptfile_getbraces(scriptfile *sf, char **braceend); - -scriptfile *scriptfile_fromfile(const char *fn); -scriptfile *scriptfile_fromstring(const char *string); -void scriptfile_close(scriptfile *sf); -int32_t scriptfile_eof(scriptfile *sf); - -int32_t scriptfile_getsymbolvalue(char *name, int32_t *val); -int32_t scriptfile_addsymbolvalue(char *name, int32_t val); -void scriptfile_clearsymbols(void); diff --git a/polymer-perf/eduke32/build/include/sdl_inc.h b/polymer-perf/eduke32/build/include/sdl_inc.h deleted file mode 100644 index 267703358..000000000 --- a/polymer-perf/eduke32/build/include/sdl_inc.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef __SDL_INC_H -#define __SDL_INC_H - -#if defined(SDL_FRAMEWORK) -# include -#else -# include "SDL.h" -#endif - -/* ================================================================= -Minimum required SDL versions: -=================================================================== */ - -#define SDL_MIN_X 1 -#define SDL_MIN_Y 2 -#define SDL_MIN_Z 10 - -#define SDL_REQUIREDVERSION (SDL_VERSIONNUM(SDL_MIN_X,SDL_MIN_Y,SDL_MIN_Z)) - -#define SDL_MIXER_MIN_X 1 -#define SDL_MIXER_MIN_Y 2 -#define SDL_MIXER_MIN_Z 7 -#define MIX_REQUIREDVERSION (SDL_VERSIONNUM(SDL_MIXER_MIN_X,SDL_MIXER_MIN_Y,SDL_MIXER_MIN_Z)) - -#if !(SDL_VERSION_ATLEAST(SDL_MIN_X,SDL_MIN_Y,SDL_MIN_Z)) -#error SDL version found is too old -#endif - -#if defined(_NEED_SDLMIXER) -# if defined(SDL_FRAMEWORK) -# include -# else -# include "SDL_mixer.h" -# endif -/* starting with 1.2.1, SDL_mixer provides MIX_xxx version - macros. the new SDL_MIXER_xxx version macros start with - 1.2.6 but they keep backwards compatibility. 1.2.0 does - not even have any version macros, so let's reject it */ -#if !defined(MIX_MAJOR_VERSION) || !defined(MIX_MINOR_VERSION) || !defined(MIX_PATCHLEVEL) -#error SDL_mixer version found is too old -#endif -#ifndef MIX_COMPILEDVERSION -#define MIX_COMPILEDVERSION (SDL_VERSIONNUM(MIX_MAJOR_VERSION,MIX_MINOR_VERSION,MIX_PATCHLEVEL)) -#endif -#if MIX_COMPILEDVERSION < MIX_REQUIREDVERSION -#error SDL_mixer version found is too old -#endif /* end of bad version error */ -#endif /* end of SDL_mixer checks */ - -#endif /* __SDL_INC_H */ - diff --git a/polymer-perf/eduke32/build/include/sdlayer.h b/polymer-perf/eduke32/build/include/sdlayer.h deleted file mode 100644 index ab19ff2a3..000000000 --- a/polymer-perf/eduke32/build/include/sdlayer.h +++ /dev/null @@ -1,21 +0,0 @@ -// SDL interface layer -// for the Build Engine -// by Jonathon Fowler (jonof@edgenetwk.com) - -#ifndef __build_interface_layer__ -#define __build_interface_layer__ SDL - -#include "baselayer.h" - -struct sdlappicon { - int32_t width,height; - uint32_t *pixels; - uint8_t *mask; -}; - -#else -#if (__build_interface_layer__ != SDL) -#error "Already using the " __build_interface_layer__ ". Can't now use SDL." -#endif -#endif // __build_interface_layer__ - diff --git a/polymer-perf/eduke32/build/include/startwin.editor.h b/polymer-perf/eduke32/build/include/startwin.editor.h deleted file mode 100644 index c0fff2210..000000000 --- a/polymer-perf/eduke32/build/include/startwin.editor.h +++ /dev/null @@ -1,19 +0,0 @@ -// resource ids -#define WIN_STARTWIN 1000 -#define WIN_STARTWINPAGE_CONFIG 2000 -#define WIN_STARTWIN_BITMAP 100 // banner bitmap -#define WIN_STARTWIN_TABCTL 101 -#define WIN_STARTWIN_CANCEL IDCANCEL -#define WIN_STARTWIN_START IDOK - -#define WIN_STARTWIN_MESSAGES 104 // output list box - -#define RSRC_ICON 100 -#define RSRC_BMP 200 - -// config page -#define IDCFULLSCREEN 100 -#define IDC2DVMODE 101 -#define IDC3DVMODE 102 -#define IDCALWAYSSHOW 103 - diff --git a/polymer-perf/eduke32/build/include/winlayer.h b/polymer-perf/eduke32/build/include/winlayer.h deleted file mode 100644 index ce0937db8..000000000 --- a/polymer-perf/eduke32/build/include/winlayer.h +++ /dev/null @@ -1,28 +0,0 @@ -// Windows DIB/DirectDraw interface layer -// for the Build Engine -// by Jonathon Fowler (jonof@edgenetwk.com) - -#ifndef __build_interface_layer__ -#define __build_interface_layer__ WIN - -extern int32_t backgroundidle; // set to 1 to tell winlayer to go to idle priority when inactive -extern uint32_t maxrefreshfreq; - -extern int32_t glusecds; - -extern char di_disabled; - -int32_t win_gethwnd(void); -int32_t win_gethinstance(void); - -void win_allowtaskswitching(int32_t onf); -int32_t win_checkinstance(void); - -#include "baselayer.h" - -#else -#if (__build_interface_layer__ != WIN) -#error "Already using the " __build_interface_layer__ ". Can't now use Windows." -#endif -#endif // __build_interface_layer__ - diff --git a/polymer-perf/eduke32/build/obj.gnu/keep.me b/polymer-perf/eduke32/build/obj.gnu/keep.me deleted file mode 100644 index e69de29bb..000000000 diff --git a/polymer-perf/eduke32/build/obj.msc/keep.me b/polymer-perf/eduke32/build/obj.msc/keep.me deleted file mode 100644 index e69de29bb..000000000 diff --git a/polymer-perf/eduke32/build/rsrc/build.bmp b/polymer-perf/eduke32/build/rsrc/build.bmp deleted file mode 100644 index 6800c5365ec87dc16c14e76d41208066142bdc01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26774 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 diff --git a/polymer-perf/eduke32/build/rsrc/build.xcf b/polymer-perf/eduke32/build/rsrc/build.xcf deleted file mode 100644 index a1ddd6d4e38f66802ca9434816dde2b9c7f994d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129379 zcmeFad5qjimfu$qzx$VWCF{uSDzeD#>FwE>mRh@JA3TcpCDz56mHx0T8{IveKFr~; zrkYptsFO3YF{_nq!;sgIpfwE0hakf?Y#Fi*$+j#53ki}9Nm%QG3>dZn$r9|{otf^g z`q7_n#P64t#b)=cZ0LZtNMz+N-h1)l#f!+ycrRYOc<+Pn+?u)f?zd;|y!P79jf{+# zN&fuvy!5Zb%NYK2d8KFn;K+zx{5!xa+gQ_!FO-2d^LaN+wZ;m-5cNi-pniR?bYwS_s-ih zul^^XPus`lqW9)#WJE$L$3HC#`5rRB5eH3J0KznoX~TpN0>4?Q=Ao?ASNSM@L9 zp{ifaFtuC$v;T>I7|08){hz3Em)9n*U)qZgqLGn+sTF*M*HK;Nw;|2D6`1U>lh zxazF7|9`%aa&`C>wMJfh8jKvD*K2j;&yK8CkY5Gzt9u~74&>K8QMRDDgV04Kk@WWf47wW zLtd}yfqxfy=?g*sUgV|OqksQCuNhvNX^peDKe+L&nG4_g;G^%lsTl**booayB{l8e z;`O{K$+U6bSpO35{wwIC>-Ro-^+xrPL0EJ46~ShX49k3kPwuzBdsEO4K3e&RFUIf8 z{NC%|dwb@aZ{J**Is4rk->N8HUHRbS>oY%hwE6<_^&HfH!f$CSw{Lv#_DWg4@%GL4Zu4b1bL9HXSKq#^*4}x0<@&4N`rv#1OLFGM zN8bbZ`ESWD{)QWT`RS|f!`mw#eemu3GdHe(`y+}sKDc@P)#{7x)ryB&{qDV2zw_O1 zU7z{Z{hM!p=Yw}kko(@Nx`uMAfAN1r3jLoA zHTXXW@b^XkclGq&@fEf6)$Qk1bsG6iX~YlH;p4xeKK@s#`(N|)+5MlH|62^>=cK&` zveZ2@?{|y-ou{?W(e2njUybJ{H<571{%OiPfAx=jP8cT4)ZcUyCVBelPyWyUcKz^3 zH1eb5{$Kg=Z~W!W#`EUoC(R%H%}@URf5TVzpLyo9wBcv)SN2R~W{0M4jk#6)e%^*B z`TrN3K4^n_F#F}1NT8B&ZDi-`=^Xlo-A1_MjlFbQ~m!F-T3NFfR zQ8Ji6+C!STPfRob@A6#vtRkepb!Nce<5FQN+L@UVH?d3IINIuyLbVbnYD8o@zw#{O z@^iuzC{eq#aYb7x$Vig%6GDX&|NII+WC2%wES^U@5X4CaZTUfXo*;uBR>p-ZW$@KhhJYI6MrXf^K{l@dHecxMlxpY-9=q6F^}{+_|)Vfg+6 zYX7mH?G?PFTs8ka%Qt>Usu%0e;D^QB$YDQR&%UKk!;v4o{EL6#|N89j|HVJ>Gj9I= zU~j-rI{=_kK=_ji2tU;H`W=WwL>qs-u)PiCZ`8TXs?M;uwPKnLBx zK=ZdW%m0)n+JC91zX1iPzfyhHp!kvC`lc-Y4L$v)r}!g3mEsqND4uEMZ+ad-grfM& zvwxnre{_iK|A6erfBX2%46At8_g`E1%G{vuRd4=dO@lu{wc-y-dB5b9r*?LZea2Uz z!)@Ci6i(~E-)o(j6peiL=AZoEohW~Tp8n`(e(^8DXT8oHZ;Dv$U z{;{&COqPKeqQz)-x1izyLT>r<^-QeIlCiuNCc$s_~4GMUs)`LFfA z`Gbj{IIstKT;|GV<=PjEsEv+Q`VQ zKchOsCes?)dAk39UjzFZ*w?_m2KF_uuYr9H>}z0O1N$1-*TB98_BF7tfq&LDu}z0O1N$1-*T8Q(4XlzGp?a(72+pW!hn<80`k#aLkU|2{Re>#`|IKry$JeZiSc%K`(?; z(6PXSv7ls>_3c#Nx8N)|)v0iCFYQNDY2WlBC&4f-0vChZ=`~xvCh}S2^K3)V=~U7; z%?P%(WE+kfCwtPbO@(`KyY-TOeJbc%>Pb}JWK}QTgWKDUxZjvE{h+K@;e2~>zd2R( zn_*M^cbc?=PDVXpBT&QLHxm{ei)Ybr^@MaIAms=fI;?5%*_5eQ)up`9b+b}JI%PkHt)^4l zPo{zrTeLe>KpJO z_^=u587i+EX5$ys)=(w=CV{ZhYSat+IarHaQLEI9K33JoC+OE} z)}gEM^h%dlanJONyjF7ryK;*_+|_o`&kYpf;AcdodChqdgn16OQj5n{t<$kQtC=sr z2E7z)#d#olFc$L3x09xq=jrFsA!suZOxE*cfUG`=!l_?PhYK3E{M5L4=#j1GR+F+i zV7#c+_=Qf5#Y8TY*Wq5&fjkCo2A>B_=y1%8k2zKvl3ksLW5swro=49JtqPNSprQL* z*s;EYhJ#Lsc`=svU7Mb_pA2DlY5=Rg2yJ(I(49&K(>++q}IVyEEVwhqmr}=Vu392wGpyL#XueGp$!0Tyv&q<*yEu z^;*f<`;)QfET1pqqLgXYE#zo*_a61d<&ik6kXOYjd4MC?%$)Y(I!Pb^+!>h*0 zo-Edu!aca%ddXsaDOj}Blc>JQs$RSYx3?SdVq?iH24%ep=i7@Hn@h#wx$vC&?=)!# zos1TQjX(`|-^^KbES|+#S5HVc0#c5!p~IT9zNYWtZZ9OMJsS@7LO5S9QZK-HVTK1O zT8N~X0dCNsAM$81Un*sAJVkk}AU``z82F3cQXfqeg*H0w_Wc5iDPW@^+TyWNwpBgt0J+k%O zYEo7Qj2E>UztE|%m_q|*woz6L2E$vTPt69i%~LVLn861_DhjWdtNCp1xN3BE)gN9d zuFlp#MbGp=m725J9(d?JCicqcY~tYIpjT?7xH2n*TK8@E`4L_|Fa)i>9qr}u*?7>) zN*;50qJ;W^Fc%`4>;dy!t1p7$(rj-wMF!(W%ztlAl~Pqz?ZtzxqF1CEE-uah4eY+)7UySMv&qROAPtnd+nTMNY?RD`v*uiI z-+UZCC>}lv9)*wXs$Dbd(Z={@xbagE=HYIIm`j3)^IoeDI*lH38E3HNw;bsojB3E?3)Qmn>)yF5;tlzc{U5%$#y2Oe% z%x1B2yXFXXRN-cg|s@Cb)N_N|P0XEo3!AdsG zwSnltU#>-CjnfUG`=!l_?PhYRl7@>ApHp+~l!TTRO9fbpVM z;}<$L7Heq0EH}!E!C-hx^vZIu++2wf#tc3fQc?KWtmezPl|1IrL<#i+ zVLpy%vIop_t-c6~hs(X?6d8;gG5@_eRZ3M=wGR%uie8awxOlL9XgPAcs!4LVB(d(x z>BvyWg8N?q7t$MjPR;$7DM?AHS=?W4Eho2{fHY9*Zfm)At5Grw?wWff=6PE5Ce0*P z_c(5gZZX=ioub{cE!#8=+$y!n-1L4c_<;JhYew-2wQUP~%+;RAEwwScODygr&)hbO zdM&7p=fMD9wyx^7Xf#;(+&#^}3DL@f0f9wFzK=oK$EeoG!vVh10p7n7AJ=Mm^aXfzGOFcyG1ZT7Y*va= z6Q+Y1Ug{yPrMa2Hm-HNpz-cP3#kqYB#df<64*ppCiJzQZ^)tAP>Kg0?$W1 zsTKLuE(sovG5iObG~yDL?Zg8fQmGqPH}IZ9eNH}4VO@_sivWV8?5}5m-;E|hx`KgU zFKSbA!+M20OMr8uo_(&m?F2}OJBx`oB`2-M+%o34mC(269?=0fgiw+;l@gZPLV@Ypp0Ex!pZZX-5hd{Afm`r=4{TyY4 z@Q?XIDJJ-K%6lzZFn^#a5brTn;dve66rof0M= zBHfuhOj+FI7F2o0m1CweFzTormG}_+!CvS@3ddqcKTSE}Tg`MmB%18?A}DCF8^HtK zlamf&#zP=6kZ^Lm7gGzrVFijOyMV%p?aruxv8$O(b^zjr#gi7hx(Rh#y;NUOY-5Do z1iEA*oy>aKWHHf^%T2&|Jf3)A(zI2MV3t8NK3TNd7WcnE$yhp`PIM>vf^|eOL-7Ji4L0;c2HL~YW$9%DzC!YrA{CyRx7GmnjZ6(_~z;?hNXvAA&F zp10@BS#t(g!>R79S@<%F=+tOQ5x~P&RRHNY?pXkNWKYswm5S- zI31m8&jtgEQVOxK=WNNMH5+~zL3FAyTP!Yw3&s50p1uqV5}&HgnnipKqVcl2{#Gqv z4I)ZDYoSqx_mJT1Ifw1%NV3^rKw{CF?{QG}I6935JsS=vDxKi}D=A_qg4yT`DAeWX zbbhK>T8waRR*F+I<|1}?sg?M2dde)}PkIhT;Pe)sj!)U=P;6hgDD{iTo{1UZ;B!Ry zSIUM&5u6IYkOJ?=ndEeFYH61QFUJ*J2AWFZ5|-`610GVW8)Y{UJcat4e4fI(9(xu6 z1WDOn&jQ~YO@wp>%l%AodP%NWuaIX6@MoOKK3Cmd43H3)787wvj#`bpW#n-!p>NMU zq60NV+l#|tLdzkOyuJq)mi2I4IGpDhxY;C}uZN#uaj8}|xQh(vF5ZlD2LC5cXM`EX z1>h{s&uoD4Vn$9$0dCKH2&2Y?G3R4k)cIn(U|rWD21jDp3&r_GdA(~xsK`lgFVq&9 ze)SR&q7IM1&$6)Cb6^Q3R=Aii+J(u*1opvPMT%kx@!K3y1H%uz-N|Cq0sVvg^ue4zypx8_`gAm*~1d9{VwVtoMHxqNj_ z&^m6@)_78-?#VeJ#!b2$n9{YyKFYTj3QbYEhz$c*hl6e zE}f60)w}ac!N_#mNP?S=Lg}rA>7Omy*%Lt;C#&WT_ z5pERgYkT@KEJ(akTQ-|G4n*T+b^Wbc!n8w_eAz;y4(}nsb8`~VA(b9gx%P*gg>nO9Q8Pz1}-7f`6n(d~St*xHOXhkI=vngqG>5AFHIW(k~ ziXw1&i*Ls(_Bj;WA3u=#MP%>9jBxNdBAg{FlHjs^cmH_9( zo$Pbf?SlXb@lP=kx8!xz$XiApKM}*~xkq%MhG=_nct2=4WRlnS;KH&VUI>TtJOekI zg!A=q8fsrL%NDTXNaeq@T?Aj12a?;z6Ynx2JdWi^8hezNv+1Ttkumlq;{KXIK#^h!K z`(UjiMX?(bo9PhDJ}e&a0UaL##x#~}j13^sgrz7Y?BVzscIZj5f`C?kY_%vVgY z#&=e}(E^B%axFp-^GKe#+D2`&K7j2!T3r*gjt{i85g?u@<(ReWjg4TlQ^MpFq&w?} zDT|x@d@9ela?ErFMje%-5+8y;xDh&$!pE_rpQaq~EoX3+2@$bcddED<#>JOq2J3XGCj z`P1+@^@&F^#2GjS3WD+>U@{!DUM&yckF%s{2fZNcc zZw0<6>;_vKwCUk$8m?WTWwVBpjWWbyPhAFwg)W#cQJ$ka!9mNe5Pt?a-W0T!rG6mCyCgiEf zQ>U9w=3vK>Hk-tKGCqk{u{K$sXaQ@3YmbkPMY9;fZcEsn3w$5}tM)2{M#jf)g(8Fp z(JO|1Wyi#_ZuS8~0VYNUkLXlDD+(*HgWw-;qS*Pw;U$Ie0|q`uKsF2EFEH?8mMth) zLZKSiW)PT#q$C({s0d``g!4j2uA6)6%Yc!D$*lIu%^7WsD*{H9)x3-ukJCQ7WUFv8 zbgaWw@dFhua)wMXHyg3zAD2vh^oJ}ORcs9f9VlqY8#Tez_A_vA0U6+l<5Ptb2%cUM z)Q2u8RzT*9OrbV`AG;9*f+mEd6sJ!$T)>E;0V?w3GCqydnF~Tu%)l<(T&dyyIIZXx zRfrvb3#T68GC>&^6(fRCL`)rL;sNk^+=cDuaxjKOCe8en3 z)br`N{A~SP4gt!feDGWi9G$!nbO)a^a|y9896q0_7~ptF!5;L*=yE{Stg*ve$ie{u4I&6x)@x| zuH=v%xfr>p5*kE)_6g%M~N3=Z6;1R6^ zw4(iGJBR}D%UipiIJ~3~e!#$Q7Hhpr90Ux!m}LvvHP@a!>v{;xMp6^enA|pwx5Cf)w2Qaw{NR`Wx>w>py1>5L3l5_Tceyp63|L<|6X!0#e}}w0G0wnn)}JU zvAek|MGvC;*}eAN8l_NCL?7Re?&tUF0J8fLvj9==r}y%^^?Nx4D3kKRdo^%${^RWa zzMrto&*#iM zMC^|b-%nKxFj`Zv2YoSm6i_w!xOYFN>f=WV=$vx7_mn)GdXTK*wVdbHqc*YxJl7w$AB{eY*D{{Q9@QQuYqizJ;~qWPdGrwTH(sl+wjNJD z3f5CFZD>NCnmlzLrRzD^aiq=GG22!r@n+Q4>uW7wZE)??(Z{mTnr!P?_W#(NW9?P# zz9tP*|1yj=P@h+)?zaAhF;R;JJlt|N=&ax5E8B@$vD+Z-rJ%Hji0L&DL8$FI+j@p= zH|v%hz0g8EMlv$2Hi01g|e)j=(rg)`jmsR zj><)MY=YHp1(F0ox62~jx~*v6Sk!H?@V2b4WnYLU?$*cZdmx7>VKzDOU|a7_!!#)? z1ZbSC(Y^!8X5mNyG^1v;Pc;lEs$roucIqAMk8#K{SF?geqaDnLtYok8>vTqw(K@C= zhMnW3B+R9gYsVBDL~Te;Q;$0bMr%Xmw9_7~yE+;vW={tTjdJ4DW9yAhMma3&+xm+< zr|`neiQejX(j7gNb`uzoW+2`@bk^eqRzWH3a%7}!m;R7_L?#EHszdh>^fxXT{ob9Ks55$Yn=he zP2u`jIL7%xYKcmqCVM}YO(J%1SY%aObO}4EUxqRB+PM0Box0l}8pcHDS*gPm6> zVA>c{54B$yp9{~n=h*0Z1{SdOQ-`be?sh51p{pPxZGv6ZQXvQZ!Egp zVufv4NXw8AO?FWWDJukMoc*)D1IakSB829Wxzwi`mJ-!4 z#m?@Wxrm`L4q4`ERaLDPirI6q;mV0qk3G}4m{AVP`u5C=Jg4x|ruK`@c=FFj99$|4&K$<} zNnL&aEMDjlxUUEos5rH<=|XKI+USW1@~ zrSvkL^UFC3t`vsCG2K-5nlWeElyl0l>ySCqbpz@LL?eIY%H_@glv%bDzaNujFquQv!=zwEO=3Q9C zrb7+7Vb}|0S$kSB+jo7+L0L!T;?d&?)~^*v5(JOBEUT^C)bfo*k6J9HEh}bO45Eo2 z)gRaQKn_vD5OU(d_Rgbem?mX~0FATB(sv+PA((#9JTwpcRKp~q8aCJ6ojVV(D8?bn zT+Ip=J?vl*WF>oz--8DalZSN{{~4Bxmy%862f2(!tO~UuInAB;!GVXhp>q15{jl!p zXr!1u4;rqVIQ7^&jRzU!u&i(IyvTD3FYSE3=&U6Fe8j<}!r;zfjGWZf_s`;m9)bJ1 z5u2jL?FWY-t5B{etf!=Suw$G2Wv>}?r%gGh9J>ygJ6$)Ren2$xj~_qk3_xxQ-+3H99%atth~kG)Mps&o*sTa! z&wD2<*1`R|wl56j1bWjd8g;*S!9(h{HijQEw+8|wckB(D7!lhpMAGuEsM!YZ1i?0% zuxmryVJoG}MvPubJ*cH@4#oAP)~s`0ob8LW-eRw$%`Qrpt(Y#`I0ptVQy*i4XpG&t zn)}lroOzVk={h0S97lIAwtm2TWpX%NphO7LKv7{l7>ntSD^>$tod_`{n+ulgx7n?MoF#?VIm%}&M7 z{hOY`^$*Xzf0NS*5dSwl&3U?6{})LV0vXQ^9#}I`JDN3TL=nv@rZ71b&Zc)F{7b?8 z=e-j^;o$yV4ktr7f!^FN?%wgG?ZDt=?u_Bm8^gnT z+x=+}_%ceAO`Twz+U=Tq<+tnj_Zm3=nnSNTr*IM|g5?<6h`-rN{M^6k3Vu#_?){tG zPJsBo>1|GtEc?GmqFAALdGNsR2DPJQb4L`>vVw1tm2i1A9(nq6<^J+N$7jpbP2;HB z@_n7ZMLmBL0vs%U+l*=Vh;ihvP zYmh}MS(4gR?!7K*Le!*VC|wM42PB-fNd|5S(U0eTS5=Mk#R=p<&i*nEmC8{eeROjj zVW?oT!sA*eSHM2|)}@Ce0M^R=#;YWhoh`aXZk(rwEl}qUkz*|3%hKZ9@%y{p!y?)| z51h-#wenDlfl0eM*ioFCZOqo)vE|5ZMcPyK z*`_ONW7V8hx$TZIYlAeP)HzvaFPGr$GpAG>b;yW#@W$+cleO7|ZRiO2_{p4S%lC3^ zcG6X0hcu$lgD5&>_@dTxJ{v-m5I^6C5j#$6iQQ+^|2_vC*S^4UWtL;oWn z@XSfW7r#gvAU>Ntd*;mP#8o(S68YUvLT$EjGC7f+lvO8OjXtL*l9RQ=&^I|gsr(rl68(+`ClwN3!DX;(sFGQGQbFMCXTwL%lc0nbCkbBGuB`ea z+uT=(XN~g@RpQ8TuKs*Jnh9jJCZOOio0*ppbPz)q->w(T~7EGxn;r zPcDy{4jn{5V>stde;%4RSVb8kVQ@ZkwYAgj^{j&g3)w z5>Om<$mn)Rxb}ftHICOR_`AM5ekq(&5a5JfA7C61o+}^$Q`+&qxeSQK$mHZQqN=+&t%c4W_9EuX86w66F2}AZ z(Ii0FSe3s*vCgThnB0nPR;~}-m#(0+Tj5QGTFbVrq|JcZo8F5fVSN2; zIRdJkS2;4|WRTFJEp9$w=d$#9csWxM^zu?V+= z67Dr3=abG7nA?$q%XKC`5h@gX`}X?!TChf_uM^Ju$P`Im++lk;Tq7#jA>;*99ZqxL zIE|=~(YE)Y$pvX$RJ5RKK{|}+N8q3tTiV)Am%mMM?Gexz&biZ{hb9hIQHDqu+|OKX zZHRk4D^`6Y+X$&FSE2?{Q;;Jc1ih>ia15pQLvom7vj$-bOxjg=y1XumE;Yn%vL+-> zmh~NRyvqFMV@?ItG0TiCWaU2dw2FIW)dsDZBmmSS6r!pyRvq!oCP-SSNLkkSE_T%; zvhjGry0}_a?!c>7b43rkcvwZNh6)ZX+qDxud7WAooHes+V0!|GijNu=N^N^oGH$We zFct9au!tvS(|3$racA|(_oIMV$tqUCc;e`ZjCB#Ql}Khhb8z{HhWXSSbT=qhT%xfm zF`w_Qcwpv?b+8;2(z~lncE`tja=l&E=*a6hlnMu~DA_LWVu)d_svp(SSljInWED(( zE4sPQk{2{~nhm0MJ)+8hhfP;PUUWvVk8@ULP@nD&8^_^EclR?Tfe)zmDeime*+BCBbkyw9L`+6hRJ*;bGElqH_T)* zk@R#Zb9T4vt^*W&=7fOfgBfAv&K~RL)0x4#k#!beu})>y*-ONEQ+gpobB;2ojpqGK z2kw0mhyY8LGPaS2I5FA?&r*@tL{=p3co{2Yt$c8#pgK#Iu?4F9O`cW(nyee3 zHSq6?Y}p*y*%Z>rdea42dPK%XsKqM6Y3ATnt2q&^p|h40Rv9Xav22%k zRar@{Wx-jsxdyi9PMtdK4J;qCsmM-$KF+!rQO`QuoM8OPc=YswtH(Q+Po6L*Vu$m*cFvt8 z_SECycLMu~dLE~PgQ^#uz|KNi>D6cWQm(`%d@z2XWm#ReU0giT0*pmd5|{bTPK3u} zSY!VxTi?c=$Fg@gLV`QziqLzs$ClR=T${o@H1WP(ZSr^lh= z0o4>)9XN{O#PONq2D>wc#DPwX9xsj^Zyv{_D}mc*PMkR2IvyW0!sKuWPjW6CBiWv) z9UncGAO8#s^~6czpvCDE_C$Vs;#dmb5VM$A^AqXuKIP)XNdd?XhjEu4KX@!gUIWBZ zPL3Zr7Qq`F<$&^w;HhG*f@~z zI0hFK5#`=n$uWCe?a=$<>9Hxwm}#z*96R(@cnmWMYDS!H(#V_HTlSa*rZysA`CIKb zledavr>yKdfZ_4zSoYR|H>0<3A`AnQwjJB|sx3G=3|2v-w8wChp{54J;;;hXl2`1R~4q3_NR^m<^XSkNI{jYAtO zEm?}H9H0{j3<8DJH*Z9*=SQtG=lCQz0>%PtFu?MOar~Kd!__@ONOhe`_jwcckVu38 z2?LQ}@OdJqF|*64qOwpaD%22j$?A)fTCAkj!gXbQ^0A_V>R49BMzQi5d0NG*vOa>= ztP{BD5eh9;_^FPBWou+DQ-mw)Y8P|r5gFUX*2TlJP6l4Jny<1w?&4S#Wg04|vuxL{ z`Rr9{S#VaTu7T~fm6hAxkQ7R7dsMP&UC1rVYFGutTKbN$_w537wF96)R>>+>!78@H zpy^#jm{k_)4x_z-VNRhlN_|SUT_q7RT+&yaR_BNgeVhUJNz!(e%3k>6nhQNv@NT6f zjDkmjvt|`~tdwh>KU?IFA}m|q1NE#rTxTC87`e(E<>>`ik9Qv3x@m644(EC8+`CIC zuE)dgCUzqAJWip{su$hFo zzx`hFe(~Xol^qK(yb*nvy?@}n=zW|e!@%VI$@lF0q!b(wh94&HzwjOgA`taFplb4d z_Fi;7e@{pJ(MSo6-%s9aUJu@L=kkXU5s1$9&)$>AM2u7g?cNAKjNgym3$C}`l}#DI zEGU_UA4Vm{c}`@wVhWeYz#;AR_PhRAy=RI2e?yq?J$pTVH+zSZ05E0VI6W{^Ea(uf z#-R-sr7U7q4$uh%27yBAo9ofL`8(E`t$Y$30b>C+7-0FtIQ~q!;p(0sq&jB?%ER`1 zNF+jlgn>vfY(0_FnAv4iQCX;DfOaMuoJ}*N5g*IPx|6MmF8edR$u>aFR!&S#gYS%+ zi5XCJ48@lwwV0-F%2K;` zfGZt{KK5yr0z~NbZI`HNSFPUb_my2qr(Oe2^Y;5L-4a=?93TfE^H4`>MUeFxQ1=TU32p=(mR4J#4r7bT-xJ`)31L;Rhl(XzwP(r>>oS3gC>0UO z?Mha@W96~#-3Aj;#m*?!?qPX6dqC!IlL$$m23g{mvCY?1`nND8ebS57xFh=8JPd=gGx{ z!?Z&r!Bl&Q2}&e^qfWF-6vLp3jhz~W#yN}V5oWmKSQQljsCsUZ@$!Nv9(8Cf8Q^fTza6fF|dYeEv# zKGjG_gO#2oi~6)P*~?mvODXN3or!;8Y zS<^A*+7>@e+=L}i0NExT-(B^%p^#90SIG@hIVs9fGGi}12c@YwGS-=IaB|R)8T?9q zr90o6>#{A@n{NZ;vJ&4mU>5J~(*il2#v zoMVW^)wyUco9}~&=GbGKi%FA|6CBS0%DHI%6{S1kDV+b>0_Pp67|nluf$(yl`{?Tn zZ2Gxl$zNOWM~DNGAJrGxIC2MygZcKtfyH2fka3?tDL{nYqUG?eKh0cU=r8J^u+An2 zoWSlcxWrB#w&$)CVh>Zy1kfxgO%?vHL) z@aB?EP6s-(>S`!sylUuj2A?@!=f$hU`$~*2j6Y27FPIR&Drdj0U)a8OMxHV(R@`mX zNpG=LQvVoj>|B$}jBQOvp|0&-eIW`iQ@CdF!LX5Dinf;`aujaEUu<+LoTOu=ls?&3 zxWMfJNP_Q7N88nw%fv4#e+z&YCxlgT4Znb>e0yvemJ(HWFofKwv3+fJwj`?rclT20 zF#c|n3Cw0Ko|M3!xUUY>m#6lAp|-#5%A>pA7eyWkRVSx$a?b$Lq6{gSRy zs_*MARRBNdfWec3w?{qk+E-613E9LY0~wb^;Fd81mg zMuMslf^r6WwY#J2#j-~u8u0Y^IW^^cN1h{;Y7}!vgQKC7DR50_MvMP|UQ^ELRpcqO z5+`^IzhWuBanf)fji3MSLrTO7JuLn@uXNBJ#GdF?M+xk)a`t}>IzrhGg5Glva ze{p9JjJ^Y;o^r;SD@{aU$c!Vm$G7p_&KjJu&ywqdJ94G7-rzi}A@TX+{Bd`^wbo@9 zx3}H~$a(Iy^=a^(RkJn&s*aQErS{0U+fc6LD z1JXg&H`(WWEQ(;gy>VbO*x-DGPSp$0+~{rEN1W?$rTRvHQ<}Ig zRl~k(yEl7?g1aJ~*xTj~aUZ2<5@7enhR9L4_!O~GDg@H7l~VfjW8nsuBOnPbP$g_o zTkfI(QTa;_ERI?3Fo0F@1ow`pe0%J0J67ZsWC%P_3ajPilB^P(?0P=M#BP%b%$6+< zvB2k%sM16X2uU!uF49+*8KDk6lVK`-r56u4zw+*QTValfE#Mz9%e8N6#|z*3#jgb_=n%kX^`Ww;f{<#x+=XZy}wc}JD? z!mGy)kp^414FkFIo@GoX4ia8UO_J8Q-Upj@EBG)#jN%r`k_w!M939|sa_qe%6}j1p zAUCDd>L0NZ3_8qr#jc3Ax88sML$R;u%b}3$pAZJZ2hmBRj*<+IIEqa?QqT{iw|?wY zL3%02&Q$bv69*dfxVw;jR~j>k^-Doz3@bSwrG` zRfl+#cg^+i zJsf^?!T90A1$X;XO$LotHN5JB6tuIx@veQ>mUYZfGi9#_l2tW|^>vd_2PI zni7=mgS`a{TPbvL3G;^sf)=UrOPG>Dh@WY-2ozU9yAnxw7?%l{ep8NIV&)ai@2hif ztcyq&Or%OGmjYAfe8F_~0Dohs_Ch4K6D~r zHKOYk!H+kXR!t}8N`vZV042n*qfH=+mREufwONc#wH!!c`MOge>TlO)#A$l`5 z4qj!o5snvQ)BWiTK*eBcI-iOh+Tu$;ID|9fGp-cDDwsIJb3`ptK~B`BTL;tWwB)ig zF*Th{w-07OL}4cj0m6gHq2OTdfJtwAa%yTiowf&ShvI|DwC>=5a!QcKp^&=%R*qmQ z0n$EXOKx1Ci~{Vz(L>R}*wJt`@>B%m0L(p~qNiIy0F56qh$Ti*S+*sK%I4t29(-}| z&?Gz}C!h!b^k`Us9d4h%Nw^DC+Xm-ignWI7;^}yba}~oR$#gg+|Km`tWIC9_E9nW7 z=@)39?oDYIgG4R^(!P`H)2Ru;MXc^1O$i?#z{T1#DP5VKb5s#iYi!)$G#oTKKt

Gg$stifG)0To$RVaQWWF4pYZ7X$1PMNq0RjBPRC|aI7PsdTJa|4*FzGvt$6e*WIQ~dLKl}X ze=;CAPhRyBrlb(!XU?|>`Bo6R5=wX&ndi-7Q@%l>-xZhdt8>w)i!B#Sq{8Y^GE=Is=#K|ib9|t3?nu|I4 z@2fQON{nGIHGwGZU5Pr>W^rk$4QgdbHBl%|Vjobl~h3)yJrEBRm`;FQ+<8LI_bYTOOOM*1M8B$jed`e3RkoGri$t_sm zb_gJ&-;BNyI~ubPEk!^Mz})jG7IcLKpz&`S#1f;ZEZdSqW%G@RJ^11q-<*U;AC)cM-bApRl-9efXesutsK%PnI#qyk^ikMngt`Y|*uhlcC=$a|LLBWE0HmDO` zBcTMgv0eiH`OVANFnUB{(;#xNe;TU@1vl zb*+Rcsyn`4+*=O;`cQ2#cZ8&+7R(2v`;hJkA4lpU%d6n;@O}ziT*4GOuT1tN;VxlH z4k4Ji-y(QhLFP&<;bEjHH=9klO^9PxguSoM6_YMXTriO;ZCnaWIk^Q>S~uJeA2-Mn zu4a@DLv-PTmWvQq{tchK0%ycl6Drm8RLbZd0jm-5uBdu^FSKeN|lrZZA zs=2ZfxGM)q^mz11eJj~iS`D9k84yv}^+JH~`^gW2@8=Gf zY;3P@Z9Pe!*zebV5Pv^;qU`=qZVA%(K}cPn??2c|fV6*LOK#k?iURESM}H7~KXx?S zqPi6UIRJCdr`XVa1AxYVU=T};qOxpD5|z#OC-&fr@Bd&D9+4AJ1OR$8EWpm@#-?># zN}$>{8}djbPx=tWPvR}kIt-H}PjEs!3&Pp3zTpXzCoj-G-P@ASki;&7+I=V2r(0`+ zi&)*E;S#<&fJ;ixq%`n7=cpp4*5g$o-DJ=|gNmM*(ohaI)U!dI@QDIa%9Gu-oTL%{ zBr*n9J>l#zp#;2V9Q9T?%l(P!R7bu&DAA*b#(MNeh`AY$pmQBxj&gsjIMH!qm#mBv z0y+rp!5jkM@V9?XYlK!flBA|X;A#K{(^DS6gDxt>D#MV_WrBfw4|>~Y%Y(z5Ek4WEW^y`KdyP*K%zM@!b!FqB zgt4hsKABnKemyuj#bX8Mu{yx2Bg8tIN-Vg0N))Gi&Yy=3PH}+Pg9&jzrAxL%%)RQw zG9aNbPHgu@|dm?nPJiv&5u7u%xE}zUYQH~y*tngUD zd902l;^K!mzD?w-drB0Q$Z1Bwf)$R1dN2XKE4rOW#N4iYp9{TR8#(~024GM=MYlQd zDX@={G#?A0hKYCl*u#}giIlr65p{smu!8h71WmHq(y_kit`<&&Y*W+c(TeY}2LYuP zlFGm3j|{RdacAz_;l6SSMkx6`Wf=1-K`n=LDi7#m9n17b`M5l#gwrXv01G$|%GMUp zfaNOtZYmIu{=m59l4DY?)gW+BT91(}S8E@o2~+kqJ;8zXPNXHFTlu&p84DLJ;<#W) zH(U9XX}I^@Vn{2#kS8sZATFO^z*d~9;U#8`;%o8a=~g!4zy?OSxQaH}l%YOnI!hQX z+^tO&*os-xeM^3s6}TrYo%m^YYcqbzx$1^JKh|#PM)73J19;HYNXdp}fuZY*0{0$l ztdi3uz!8@?FJtE1f2I@R=#!5zcP>2qgg6LAp|YHCd{MUmq&O@2CFo}T_Ml|Cd4H7K zExFMW9N+1Aze|SQ1fOF#W~S=>iC#>_h|4)Gr5>b8))C;1+L$t4m(-1e| zVV?1{O^x z>V3m|r+kf0eXZY}Isj#d_cpcLyf?XowACLaX3&XUBakzgPWqGFPTH6Xr=$K9VWV}P zLIlhRdc+CTe~~9VdDAcRj=ygD6#_<6XuisO!u!t>5SqeA(X~50cu`I$*LnxI;WPqg zr?Xz4=vBOiJQJEK%~B32o9T#hhd@+cE~Y2*$sWbTg)LIdCSMp7BLaNu+ySb~X}E-V zDkPq_!%0y*w3LIX*2FkLy8MVzvQzoQG$nQ!XahOmxQ%xftGJVyweuA6zCv zF>tKvqud!nh+KeECvhID%(;@x#R#X7{8hPg2jO$V*(3^;<{8!->vs7Q4!0VOrV?ular5>b8;Sk^O6%Am=TkOLt*hnp707?dzp89Ki6I%o-KvutGp+?|19xpDSQ4CiP@Sy6AnB8!mr)iFX36{p8aVzI;h3JD=IA}Q{IcnOR7$cCIuplMt6O$59tp){I{1aX##Z^#w5|KF8MQ_-(F&u3fWd&*kn=E45t7Am?C>(~B$YzJ+ z{2X|5JeIGtMOd(HU`0gj+xpnXG4yG&r&nIGz<{CR43}r@kg<^B&UDv4zJNC8AuI{l z)Kl(V%VgA71Vbz;f;97coE$)L9EuK?k#jPpQdT`rGJkcvr+|fPM419geb)0hv$E2i z@z3E1Hxvl6hbGGWwkInEddt1>>dv!7VU}w7hrs;i4>S6#Ng`5uRL_Hq4N=y3tT*U3 zXDGU#O0#MW&6XmO9WM(VncN>Dv(G0pS%S|Yq)EvoZa?wdTEyvl9pUK8rnLPlD&MB< z?u=?MHPoLf(IL*Syx~X~Pvbb*ZaLy!3vNKOy!9-RQ^RkzTdk(+VJ%Pdn7!$cBUEZl zGL^d87LjRwh91bWk=NLPt*E3dCFCC{)Jq=c&1qJvu-cxSm|)LSygpO^+|YQUC~rf= ziIAQX-4p$|QUVHfk_UOp-f)WlWe=qq{dFmSAU^3u*ksNjv}G3t&AKtF2GT$m9ITae zrF=M+O3j*9MOft12FmPEcrcibXx^e27OP_G`}`9%@27{Q?dGB4;4}++C%~ub`1qI@ zyMYy@;WCOEOtpos&1bRH=s!bL)E!NiedmB(YjtP9%?zorXh3J!SEpG|Xom^i0DtN< z;!?Bw6%%qrY-&^Bn zdkcZsB99L>p)&_7GB?maVzJ-tid#k0IUIRr7Rjui4%?za%^ji@9Ixn57qY+!X519T zO=%d3?NMSEQ2U`V@a7=CJJ04vegtT1%3wLghsFWjh& z5FCmR$47z}qazXRlsyrnVv?vDCW2HNLKGfJUJN0!UKrn+;u0Ji>nQRUgCikqn3%3V zL+A(wbh(^FIBv9F3XERP(Zwi^GG#)+wL$HI`^!dgfRQnh_J1Rr}}*EsZ8Syy(RugK&A zV~%7mny=(wLv+k%w2HDA)K<&r?JJpUVC0a+sTtx$<%q$Vz@+q}KJ? zyq+BO_mwCdLT+XP*3XJT1%hAmy-?1TCt6e z8XU1AmgXg|H1B2DK1o6o&Z{_LRApWdk8%_YiMhv*qaURb26B}8@^X~)9Q%U1;x6P! zRuA1sNR%P=#N@vo9Ob~4lV$tTMI~V5gvmKv^N#&<=DR^YRYU}E1dm<1*DP|BDGZ;g*85j*M1EXYWXpB)}3TDWEs88rm z=uhZRXtNrg)$3=KsZ3=Gh`4d8*V^0t96vV#Qm;y8DDFMJeDCes{hWKR@9ldn)3W&a z=FM|B)xxX|?GvfdJ{A=#8=kV8b>|t!lSD_kZ!eQ*{Isc(rLV$FVBu^oM84u7UyQ=p zg|H@Q)dJ`4%dJM%MENo(Tmn(i<}WF?Iw%oX0vMgHzz! z;5JOjTQy+YSI2Xt0|X^#iN)%T$NOv9z5?ccSBw-c-bL z{8X4d0a|W9Zh&kd{m30pVFJ!p9mf6+1*;d{(FDKfpuKmpJaHU*VPe7peQ@vq1YKVI;Gr31h%TIPsWmK!e=$O8a*68iB2L>TS zDLdH%&YTD^neU$ug7s!Ur3KLFsZ@noSY~xq^ofF-_aRwKWThv^0dr!Qk)?~sputS^ zzeeg9+SRPUmM5fUFv$+L#t5VyqzAXWZ!oVyque)SN;< z7tIdMSQ5wK9*&p@Q9%LjbnlFX04okb#a+ZlMS(jB<4%v9F`{3Lgm}3!Qk*6ono5~lU{BUT8*C3jW7LDw!XC-m#YhNSHlfEyvM&(c^8flX`-8y5= zw$Ylv$GAsBl3UfAn&G#zEm82vNu0Yuq>=0lh%Vm5v6<^eOR{Jw6!Q&Bp(x!F&h((n zDC+k%P^`RCesjrQDlYaffY*iDTR8d!fh%EAq=wl1qPbAs2V)N<)ar4b zfnXzG!~!KRjFD9}l~{}7FgU4l#iDeKy_7*H1Dgzzs!VTzjfE;U1(pF%gBYc|hXY7r z0f!cWaR38?4Fs1L9)J#3WaD5*7@ZNgz1IKk+i$PpWC!f9up=QH{Jq{}9QX;&z%dJ$ zV!ku5ItWkTwucO-63^M7=^UaO)4%o|3*=C`cSmv&2Nz)sxKwda32-l7t?{#`)`Td0Ww77sbefAH1I~ppR4!UU2~G=LL=G0V#Bm%^hJmQ^JsfPaD7zcX zYK(gEn@g82;tUoO>9mh`Ro%y;9B`u#R*&Fu7W$9Wy5_74D@Q^P? z;UJPuwT@$fbNB64BP*l)=81WdqZ7l>I1(pI4+HsFAI;Lk1~U9>)mb0yVJ;U>vU!7X zo2H7zJGaGG9Jjr;^qm@2UVdsMc#REe7=^=h_ZK+rGz!x$cQ8l7KDq=Gfg2eEA{r~h zWsPISnk)I!{7C|PI08z4r_%4@%u_sflwDqV%KS#6)fRhy=?AVrF4%X>@wj>822U!9 zB|`$m+A|{AhUKcxT!_Ku>hK^~mcvi??%qWiaJZ!wTwZ;aA}cd_;=~LZ?cLrd+T3~H zfOn9A7_f9W394|=O6N2TP!`&^&xVkgNNoS{qen>nqu@n)L*_rmjsS?$gYz;t1-=b# z!<4*Ld#_)6mLpTLK-NJ6OcVad8H~nu{aJ>j%QiD1{lF^yGSy*mEZrc|J@0s=Hx(%r zek#n}04;AkGeEYG5$c|$Faak4A0tdc!Rm!~G{G-AXz#r!pFcxLNlaLv4<0_CU|A7F z8ql@fgit1x=Fgmnlj!aDVENMzJkw?qhz!_wkLahSre5Katt+XIs65RBQ z{_|(gpIIoTkCq;DD6wimwO$l2ix-K28sgr|Ox_jK@)zBg8P%#VI;O9qHF~?;g+WLf z&0h3?GtUD|=KJS|ASAm_X#q6)GF4#~mRVgDeWKvz?~%VNveFmhfH^VD$kIiEj=@ay ze?T@b-2P$`?dCbMR#eQ-Is?#!CqVKndolGgK|AL3sezWap&4*dki3`yz#%8rKB0mI zj_AQtcneNWUbJ84ukx3Uh6WLEHXwqqKol?Af}jX$kme_qfc)hUnoT`YBeV5{2rSRUgfV7fUFv$+T`3Z5mpfG*X~sUG1iYKYEB`b zi)M#rEQx1u4@XRdsGtD%s`uJLfE9w9-(H5fFXwk^tda@U{zVXvqgLLs#VP?t3R`Kb zg*xuwW~#NNt&YF+&Rg6{T0^)*CFqN?ROmKbOvr^rUcmd&VqD&{Diz*>B3Y!uf>wri zY&0+tZzj>iH#utijp9|=fo=M-XwBjh!huLv8bJxLw)`y+Kl~NmXNWWMZ;HRG@i#$O za!rAVCL)*oYZ2YlzrEI4v>RMsE7yC7LktOiUC~AVA-wP4Z?E<1q6NA9TeJ#X|81eO8X8(*IBtO!(aK(HtO!A&S{FT| zHjEbKEJDVAsKPfAdkd{21!E>=rDlrm6^J32*?(rxC4_&f{sasaj6r<3y;~RrRm|+7 zNZ{E1f=H+Y;MB>(t#-jkh?)KWLSzR)CPnx$4CB^8c!+`!vO=WSJJp8~btuEFqCkjF zFffNPAV#Yq41%extSHwpUM7)~L0Fh~+;xQsA(p1`cJ%E?J&_|VSB#))OkIzrssZD6 z{Je7)Yw+yZ%OXfpzGiIB*Nef{x|El}c44#9ja2yQf4zVIT!lr*faQt4!oKD9s3wje zm%iRVH!#@+*Dw&gH8F|G_G5J-G2F&WrDV$ z?iu{p-jsZnORJ3Ch}Q#PGeovFWuFzB;PBcx^x=C-KpY{P%Qv+l0a2nRfMwkgjmhV- zO&#BEJ~uM0?2qOxzIo`gY*Qu<;nFZNMeo1bvV~!aY%bk2{8$D(Xn1VHe_R{V%s}MQ1NoTO)(|Uq}RmfU5fhx@R(9 z5;Mbq(JI4DVb!E>HCx^z;G)to;|Qp+jiUbwS8a>hmN3-16)SJsqO^LeWvo*o_3h^E zD8?UxGH{7V)i%aC;(lUK0;OzD=YHnCKl=LEN!&M?V}QtPd#CXpbw@4Q&HX8C+Dkl0 z+Z*ET+>bu8AR2;8YZ+#)zgr?Wpd2*YYRAxwY|e>|f1Io18DWr-XBA}j{HY3h#GoL? zZTf=-4}!_?79v=bLkOq9ZbF4FL}lJqCL@#ODqpRG2J6owUDf z()b3g-+>!Fgn6Px$7z`O>>oGj-gq3_`06XaMEv?vq}~5dx+NctbpS}+W1n%8{GV5Z zs+qW@8Og;x$iT*jkyh7l0_gB(3>}y_w4uvGLsz)ZYHaT_-AUKod(FN*IAN+Wa%K3{SvjNX(EY4Df)MS0tRf2%8v00w&Sx4z_{R_Tpl^6f^6^uAh8=Ko zub;wnuGoZ-m2|>@ z7!%;lfBj8Yz#&3Pv;m8?K>Z7B=-z z1#99$a?zmT5(R1%C06t29`nsm7YT%H7xD}Cd)0*oM@aNGdY2^g?=}bv}bs zvD1jy3X6@>x|UOVp>sY5&~iWuj4CIYoA10|FC-U+0CWMU+N%kW>QJa~1;xYXQyC6z z^uwuLdFReWNE$t#d;qctbwrE{V)4>9DF0+G8=XIhq3yt2R7?tc+$B|mjaE@(;M$Ak zVsc>;B35d~wF}edos2nH_?D%juA}xHN?*AP?eodGTzY%27@3s-x&)A=f6o;F+29e5 zl|Ft?N!X>gkd&WqLz06XQcSF#2+l9UKh&0;?^GD`O#^bdf()I@AjZnnb1@mO>hfg< z1gI)KKYT6~RsBof=u|4mTt*Qs#boD4&Lx8w`|aWtiopUDF{2P;n-;(Q_6i~2sFdXV zm_WE_{EE3^H2y&e+N@*le{=cr74cq;urQSZh@b!t2J8@sMwOJ$=5cSO#oU@J{co>c zg^)^xA{s{auShI{ph(Pwh~Wg;%M!$ za16>oC`sZO?=&)_E^Dg!@nYCvm*9;;mTCIY2LeP@@O>=EThfAPXXG?Cj}z_ zCXP_(+TrLJ+-jhE=X6V4x8)htc}It6Xepk3uYr$%p>rY5V5-q_&G;o;IVS4TJy*^n z-ufS_FoDE*KF~#{sB=yu0{{5oKJ=5`&-7Ap4qMu0{y#7VfH;FhBbsXb(yF`U=eSA! z%X?(!({l!K05iWRTIlCLBibi1BOMJst`R2J=LAn^vzgYbtUDDy+)9A)9{f z#j+1SG)j3tN?WuK^w z$Z+gnln`b4SgNQwB14H8p`l>rSRi{x!&sKH%P?4nlMcX;0YyU>(U>$Tn=WB;_u94V za_oPuTelXu;0#TCxI=-8gh+s2yU_7C&}jI9#J)hG4gk%%e68vH+b8sq58N>Gx(;CKUIrYp=F zLJKl59@4L5tB2Plh|*}>Cq`A%=LFVUlLGcO3`Koon=7eUjbkl9{W+kTQ-~TW5S3%R z1q@pr+(IZpj!%=rrhuPYA0DM<-zOkQa$xFNS(x+p97%t0Ks^>_N8;s2yAqs)FA={1 z%5?imq_PsKv)Z(9#;PMhEWesaKf)=cQ3+UxaPGZ?vd?~slah3|_+;bd*N0jX&I9is`d>?q@kuu&evc7P{ zO4hf6aL#`K2-q05muSi%zV?1A?(QCI}9l4*+n4PEPojMeBn?6w{wYL@>tG^QGe?(w*xZM?CSM^*&c7tqjpmjk{v{8?7jK zF_oj0D`;8Q1T1X@TiJJo)&flo8Ana>QAEeIq+1n@7K5Y_=SnBraU+&v+*(c|0y`oT z7nZ(nCJ|NVLrr$PJJ7^W5ge7p5+C|NOF3SIPGJbzWk>?j^hiZ;FrgDE1kuykXB ztYNlb?@U-TLN=?m%t(u;?ufEgS$R<_QJUiw0R_cYB^!~NePUAbm~k9~v?8k3bDW^C zfp1?rUPTOJ!xB``G$+QPereB&02YxX0I9uua5TXO9hLW^GJ?tWqlD~cZvWn;ifkn^ zl$a43y4&tq*ek?Hk+G~lnPIRFY4gA|STO=jGkob1W(uD;aWco&;K`FGkXXEP*Dh7< z?Td$)qHHK~_EAW5VTZ>_oHO#4N=Bh20L{t#gxT>Eks4>kU`XU)5B9a-W`fylA8#SE z96R?v#yEsn4>a6QAfz1!X;BoJ{E&7OBjxglgP1EpNh36JyxfKeDmK}73PFi*vJ8x! zlsnn6;o}Zu^={w z1KxkBV4Ax;d`&(TCU2AUsNiD!vI@U`&}EwJoq$uy9e=;|OOekw@yha@zdy+z<&I;| z{7Z7j5M4!;ZDYx*F<`X%V(V6%LknoLv#<0wE1^5b7)%UcyF=o_ax*Ab5toGy6UDub z`KYy+QDdzVLFsZ2U{E}1pt6=7rV^*M^p@9|RGzKm7@}4UQ$movUQ1leeEy^;u!8!s zAr#8MvxeK35!2`mfRjhkXWwf;3#HXsd7**7c;{2QjhyAQ*et_OEO?~XAD+EQ|j@l5D z9_S~NB##(xX56hjI%fy^I>40e5(MC;7aiKOBZ;>xh2P_R(I6oaxxa zZUaVE-KzULEPcBlhc?lV!EMqqRg1WK<_spon6KG~Wpp+%fR8*De|K@&H~6Hgg(2|I z0I$5j`!Qbh%4Ak?Tsc{SCA(;ffZo5V!QUeM)btui%7_=1@HFb*s<7MS;E^oa(=k2 z<38nq&s0g3F7okCWDQKks$bl}qC-enp+o7Ph48862jaimklD}xp37=r`irEBd<BN5@IZk^|&W=Gjo%sukt zWo}-YIj&Oo}X|`Z%@xDX#o{-0@Ei=;MDR!bfU6ujXvdHFHMHEAYRsCQjr9YpP4DN__ z#uElHc{#K%J*#5Bv0(|yC7b8tP``9{MF6TE3IIvXcX24ghmSdeDw&uN`+Sti*>`xV z;oee3iWC`2%m@ty5z+#AlgL%1rue~R7_7sA0bm;JH36o%&2$NKq@O>3kz?2N#f#@i zsb(BjRD1j4A*QHdjnfLKYQ1pN<0M*Lk@SSAK&3|j&5QiGx%rci>>^^0!5B=LeJE9- zEviPPPutI0$f-xzP&rPE`RQREHi3}#4CG=_RQW^NQ5l=d1}fdSdm;b$7D*HC$ktLBiFW>0(1z#pWs^0#47nk``KX(F_E+IjXa zgoMq_KL>DgPR(QL&*6ag-zu2qE>A>2U`7gKk({jHVyu~oKIjKcb5Fqi=AOO3`mM;P zqv2vkjkWipTReb4#il{xT6UO9oKw?e4xLGsEX#1mBk{}vc`*FH;_ zFhnvWU7^+_=HVEX+-lk@eX@A*lFxC_^Z}pw!88V*Qj6|+K2?=%F2lM*xK~p){H%~0 zOIL`w<@0sa1# zKAeLKlZ=CUGHIsHKlq@TzFY7LPDIW}X$!xk8?~{1U3vZj75+jy)t&6wpFgiXKkgaN z$R;0sbPXvDZJc5eY#s1uvtJ^gM(4HTfT>l->UIxzg1wK^tLVuj1jJ0ir&g`%X6{Z! zPp3CCX*bJ9=QVc$aX5d&@lL=o;`*^ttrh8TPC8U8g*Rz@Cvai%v(a}_hRTwioEX>C z;_rY)hlF1%kUPSOMn=NGV_=#51SG2G0=~+?3C~A<46V?`LOyaBL_TLmAEpCfS+TMb z#2Th=Rjv(B-zv#VMl3zteH_g8_E+}szK^1(Uh&GJ*P55Nz1BLQgoFYRK{ zrOq>=d+Do%@Zr|v(Q|m}8+6G1QfBUwmkI4s(@>*tu9xs9*5L1C>=)a z!lBhyaEfLetO_Gw&?{E;XIHJ7{RdPbo1L7sGZVAr^o*SuL*+U*Gcudt|Gn9AY8spj zs1t2xEb2akd=TZGhi1U-H(ktt^(;jhX$0q{Eh;&8r$H_;)tLsx!&GY;;rV2;$50{a zEe}sQ{C{XF!T-Bc2(-EJ9F?L`rE?togi{h-cX*ji8H5Xx@eYDr4&`aEr*#B0MPSNG zQCFsQG?QyN{*QY4_&*8>gPaPbdrzRA47LOtFW6*xr2r2W{)Ex&izz7(@ilhA_M~@!) z2bA?VGKpGA6GzHJhwb69BPcj@c;rZe|M!lR2M>W)0HuskO9{1ydxuee>d??(aFrb@ z4ui!hMJZ!!TOP8gCfq#)f`o&eL!c=**gAv|MRK6W?LO4}9X^Pk#s`KDCis8%Ahur| zN(Z+N;z#Fx@U0z`2!q4R?4aQ<(fu84sX3hO#@C|x1bG z9AbZV?P>Ys={Tg0LFq7#;txH&f^?YiCn?JLwo!k#KmX*({6FAK?EEAO4NS~~3EMs% zo3|)|J2Ic(|Gjw-T_+%~&RK{6^>2HiwN4%lfzlckj30xQCPg`2d_R3eLhJ4$l38~i zq167v)}!)1id6LYjq!f^VE7>(oezc{l0Lfo5Fgv_evXQ{g11i<@yX>=e#+_ z-Pmfm?!Zdw#@6EX4E}aUdn4d-LA~>2tc`POInzJJ<<0m=HadY}c9`8WT<#8My{vlI9&Yy%yd%nvw1!7|<*@I> zx1*q|!Oe?CHf~AsdIPZ0ayW!AL0?1>(R&;c zwReK6uABI)2}%VkJr5~^Qn^Y8kc=l8CYD#NOhmYVY~LYkId*2>Mc zYkZ$^PzZ&h%-SckOf*`^{8V-jy``ebsEK8t5e(L*bbJOB6D-^uDngqsZR2(7;dQmG z?24=uE^t%rMk6cxN@IdXd}N{Gb0`qa%FZgUnCwjDjh1p~l#%H11Rr6&sZ82nu6VX? z%O=67fa1SaDmc^Y@G(BwvdJ;I9&87xlUz?HCq$N1L#FX{!(_9e>_I<8rIT%Zytb!O zm{4^K(h7VqlQXw!sv`L8m`}Bvt&G&u=LwbXF!fs}_Jwa||?!Mk$unK)WiBkCOeIt8whR(+2&G_DI-vnN@ z_N9BfdlGD{PM`zdjqGvQ?$me5-f_I+YtpUGU^gD!-PbudiDvh(dxpzhFehczyY`;; z?ga0MvU^*5Ms}Bbd?&sg1#!}tG`hX{p0VBb>(Le8WqXR&o$_5Nt~t>~A|?_%rMvR#S}uLl-N~*( zuF*mgJrS3nFZQ6(dmIwAcY>>KXX39WUne4ySMAPJuF?Ss>`wNCt5zl=TvhI>bO*0a zK`zOkSc_F9@anW&r434orPvval$KGhL-kO-I*Y5Ms7i6w%2n>Fud1%P=qh+`h1-@k zQ=^5=$qwRM_!d+^s}sAe$k&!)f7`dP4_hqiwz5xwrAX3RR&-Tqtmw*?eE(3?M=h|@ zl3^*U9=n$nV`*_{85NR|Ak9FJ@qNaH0ZS{#YM;1*VVRir^rg-0tY7FxRI4Jr7=MxzIdWqE4_y>1x96dsl4Jq zM|e=`mU7oV#xeFM_#)Z^4HtXCT(P5W%MO5>1I08gYE7!wF?M`E%?^yo^_A#xLq4b+f^=lr4y=Bd?k-GRZ?{je6V zXYjZCeeWK4uYQ;WsY3hvk$X9}*T&_|_`U4=3A}27@~V3`!H?z%bl|&@yAD5M^<8pr z9Pjv=B(O8sut9eRLagN8>|J)xaJhRoyOUM#+IQP`61*eI-fP_*xl`Wto%nVX6kcP} zNXpo;JNAds72jodi#zSxRV28Do~e=m-5>Q z=)~AlVWb$#Z>OXf6J4YPBh^@XJFl*Ja@ae`?Lw~6LQ;+qm!L297tnhg618`NtL|3f zuO_JQN1428Z>4gT4j|1~QeCw&5#g$`sHHb~bqaDxPsS33DuGw0wt+LGTNiuz~^=-<#M!%|i~tYO$}85O#kAk9FJ@qNaHi%n}O zYM;f%F+{K-dXp4KjA^^Ej^G_~g&+k-FL7 zSt8zW=$JknLkmkYO2<#`$%zk1*PZ351lD+W>rnW8eX${x0`K-y>^f;WyPLHUAm7m5 zm~AlY&8Nm^L5Fq}*Eb>~+t2~TuGds*IY1F4xKHi+Y(sZr3JFXG_Gc%wSp*P~Zs-w# zuex?cgn^9S#$*E%hKWF0a%H2#AkqyZ8|?=0wbmL;T?IcN%m&#Y`xt0+qu(;C4ii|U zd{-6mgCu^VXZmq%3pfKvHel8%WO$>)?^^sySs7BU-;it=-iY6(f>F0~NRb%9^fu!6 zPoxaKH3DPtfA^_ihBo5&w3nm?DWoz8D7Rr~BgkeXX*jkDb$x2X1=rn(-&75p*J*@s zKy*6HH-3MwghCmh;0F=c-iRD%Q0$Jp$3_cJokS-vf|-6KZbNG$sDx#og?{03Tbd37 z1}%dQ*lj2_Vw*zplQEx^hq^?1c8J4i>d!ZtA#7H_Sk9R$mm@DIz9eI>q-Gl}kd#{^ zMeH(Ux)GZnkjV^bSioZvoI&wZ!vZY%4Q?ZLUI3QNX|b1wtB|6PX+$xkH9YL|sl^(` z>fVSA5lF^w)X0Y5f&sAEn06CLCb%-gMh@$*!C@k^PDPg+yLs0Mym4+L8eru&vmT5Z zouq5Mbf5QLxmo?;#dEpa4MhhV9|Et=LwpF1Rbe)?fyb7PA8F;om8|Kn->{+6={T5! z?G5pa$Jc{JeX2D$UnTcm526VLdlSz?an9-Rg=z3+%z_ofu7>4n#4+Xi&aj|qNSGg; zO*7pOa6d)nQ|xQCJHTTHqiKj=e)T#rpW05|ZXw4Wdr>mT>LAkq_C04`iis5sw3-<|2;&<7F0Ne%nZ0%fDE6^pYa71cEp0lZz{zn0Y|g~~MTjDD13cUrZ(|qF zD;MwjnP?*WYoL6>L#aH5@&Uz1DjqwX$q2(E1YxeiiZ55=fY~%a)$s$~7owBH2r%23 zZDVdQ((3p}g?Xpbz6z{n3c@znfJK$>TxXTYQHUK`;AuXdg(QN@0YX*-;foORaauv_ z6do$G9oJcdDu{GZW7=sg+PhJ^PD->amZsUf7V@LfM(qZ>ksoSZoFcQ8?fkk@&Krde zmDNlNGdIv^M}OwvCQ*4!8za3kU((DneiZzv2#y@gRw=^A*7b70CTc|;N6=q!8xVTe zqi^LhzZB3a#A;P5-c={J`edjgnOh=#)th$s9X>v!0G>8&5T%?eS+v;J<2Gi}(d#sZ zJH))^I)4{og~zOJsBHUWn3>W3w1$%k>B%W`x;T?c^>cd)5hTsR=Lwe@ke_Lv%}_$! zoH9N~I<%wmyg5l3*_jR?DA6v-*Pse@kVqMvXG9b$ z z3Vsl^?XyUkO|cd79@T+x-e-SwjwG1rN8--3&Vt%rc3bHeF1MvaVZh)l&;h$M#aV1t zLZs}HP#zMYbzyTjP5t>3F?0hat3cNY7v083&m)}O_=cq4MQQ3&Zc4=}JeRvYQ|!R@r@*TO_z%IcD$JQS@YvY(BNb}~@Rbkyr_Y?((b?f(4mLT(GahfN z)q(0&IG(2WUJs%P1%VTfvT@Go@C6>*Is(cJam;aXOnG|8u%Ky3m>-=@bEqHSeu~T~ z>~3%G0FQmlrXdYCa-Et}c1OOwg*g27rqvPC{mHdj=?Wvtw%;zThowc8mfiDfif-js1&sgUAi=@Q(5A*vt3I#k+nc zn#lffD4+09DvzOjK>5ecj>!najPfv7VGWnZa9}Rqo^ERa80DVJf&>i=rZqt6@AkHA zJLU)@HVvi3z0>JG3c|K@`_Q&jfY=ys0HY=7c4XUo+mZ-o_b%-FnrHh^APr;S@_?{x z`-q^#e^eX6{anS+q20f622GY5WP7bOrd-P9uUE0Em+v4C_y zoz()2ilPZ2YIlulZA-r@pv^W>C_alL3k)WRx?)@LRW7nBH~S?8lyJ1ss0IpGc@$J& zeU?omu^d7-K()LqoejI^9X^(%ZeM`p+d5xm-Y6~+xhW7lU_^u>*iLhT(Tqp2jYeeK zhR|2rw6CyYEeE)8Fy@mzOwjeo{;WXmUL+_{Uc64F{J4FIEEG)!=Ru1akiTxf$xy@G zyfi*lH?*U$yAc`L>kc5OkuEvFq9RB@+4NW0>+YMBRnVn>)GPvsNMHAez;;`8x4cKr12`3?FZUiY`y-r>azrp^vVASm^VR~<{7aS>r z)kZ|IG`)K%a)#buPv1*YgA`I31eAL{^aeC6lD8OJg`Df!aKUxoU|+X^^EwUE_q|Ss z`9=(2B@`<61V4zl_8X*$r+3Z0_o(5+!yM6ZhG1qTwe`l`NhQ`pzi_!NJqiN`X@Cyc zy)ND$R05H*M@xA;&*SHFP=Ef$+(y6z#&XV7xtt_HbtV~mB{h3vfu!6TDPor)(>Dmf zK&H2V2V^*d;wK8NJb)$t+Py*a2VmK##`*&Rjoc-iZ4@hd#xpc8E!Hqr_Zx(2AQ}7Q zkqyBG17Pzey_G;R!Qu!#rxVaPSimzn=7owb-`vV?Ie|CMEkpy1tOno1&E%H#(tSR0 z(@6sHyzADh($c( z@wQqWs4|69QhM+8AevAxDDgxU=bR2-cm!65`6rwnSpG~LQ@*-6ENB`M<|kOv4{$$4 z<|SflH#)#0iqbU1FTZ-7n3wiuexr30+*(K~=L}Vcg9fngIs2$Q*1AzN&}#Mo7z7kI zhi>Em1{1>g27rstUqEK>Mg}NiX|c5pU+|VTH%Eb!#BKzLV*es#(LAc$01w|Bzkx`i zS1#W5Gtor$pF#PAhf;YA+5TmC&u(CjFybmNU+g39olgG~u&AXshOVaqL|AUXy2_94W_F`@J&9oU-U1KJ@yH=j z^b3S#H%0^{{-fFmCP&uhZ#rlkg+|b}BM5yl{5 zn%tPY?qKsuh{cB_bK>wPAte~Y8;XlaRz2y)9E3~_0POcabKnn9MNI+IO)WCN0%5T< zDoJj1uG?!Zz^Evi5Tc~?qM};Y(`yB^*(M5=Y(e_OP^Q>ZTraNWBCB$g)wbe!X)o^G0!r$W4LJB}26o!FHMxjAk^P zZFF6BeF%NEP5TNh)pCH-Th841>zIkHd@7F?N$OXqAJ4m4Z&o=i0Cpzuu_bm%2cb|h|r$m zJu&$JzQMv#v@C+CYKvKeP?^eJfncQF&RT96_Pr+~G2_@<9$DZ%tqw75B^%uaD}&Ve zGqW`qQw=i$XG^P{v=Bi9I-c!5d^gD{>;ud)Wj!UFX}4`F6GP~eur?xx$N<%QsD;)l zfR&k1Fk)=8f32qlwf^1(5|MVhY;7c*{vf*YM_@1!tAprvg^V1HF$!26vINoCkOo(c z{S88yUNDZAaGBEAKh~D0Y%?SrJ9#_(OD+HP;LF_w_#HvP#?K z#^2N`?7F43VTH%kFVWgc+Gb;|;}>*rZMTsc#QU7sprXFxh0sTK@VRI#I>Z{H`zYMa zKl(=mqY%99Ha2^hwF}|S3qAhS?6DCm$2*FvXN3-n(xDNc`XWC)%U>2LfGKz*E@xgy~iTit50&?=21iIDnusA2u_HFdU! zq^9_XAD<$2_MN|RaqC;8$ROyQAOnMGG@PFx%s-h{qwc5Aq)8={h7a_B@(x76NqDGtSH`PEW0B0GSAsAQ6bFYamwy&a#O_vzDn6 zW<4;HFofixFe#iqKoMUjw8}d%>nHJ)=TIU)R~amDf+P=3KxgtnjDt?Me$>lBkl#P1 z8#x>@V@zfuj$D*&t?7N84;VE|KA@_|$LakR<$?gj^m!6WY{ zr@TC->fo^spQI4isZeh9Usg>jDkKopu-1lTed>iRtqP%KpEpt^8KqF0Y)IEa#y#noCH7N5ny86;Xo zumYyF1XivN#bz1Y_P(QOxSdg!cJk8%vf{vh<=`4L0T5@jQKUD*aUv{)jd`3w#GPeO z8Pt}5I&*`}ss!#x){T6c(iNYqvBKYtNJhoi0bY=ON;@xfC}!Ir4+fZPK!Dv>UhlZ) z-z0X)=gLi|5YK?lCP&DJdXjuYI9Sm0GC>kW^g0=J7K(Z7?vp@8_j&`>OyE62L7XjavzxPL zV6??>-_cjca3s?l`9n=`qF&yKumq}zHAs`(W;^E);~wZc$o7K$ahamPK!nmhTS&E2 z&LKq0Q5zvZhh`F;L=-8adH08UpRIaVb8L?Mr`qlTVwT^spxsvIXX>m$WL+&+P8W0J z-+zqMhKxtFyZrpDUDorx?}_jX(%cug^}gI)c1v>BAzy&b(sgBy)E)ne5XnfCKz#KT z_+V%+R~ACA=ohcYK1Ruy%>F*QvDRLLo(a|L&@U4+>D;i2F~A0CO+7DArj$+vI>}Z|LRD(mt6oE{~w8en|e+ zKP1C~EVp6#X4RM)w|sa`{aE$UJMXM(^e`tD!b2kT_*1jTSu8!Tg3E7(4vW&k?0L_q z*p3}oKJH)A;mkmX=(!b43L4DrrCmD_d@s)0-$9Fi+?W%6j)4ou9_sTMt1FIoQn~Al zJu^{3S#Z@u>$~-B7%(0|3gunxAHKqn)xgS=i1{eve$f+Kd2t!^^e=$E7Yk0E#^W=R z8W~%!P`G06UVbPc+hVLTfDZ-U-Zc)-l70LT0c=!Kmv}o@x0r1rL;41h{(zf-+#Q$H;7nIeO(Q=#0kzZ^ZFsF1=^!&+yO z)2SD>bTlM0h)1F{w-joVGwJC}1|kElv#d00%N=*{T@Mgf&B02T>{KVl_)LR3UyC_> z@QFQ{pUO`c5ay0A9%G&u^E>Dg)C8?F@a)L~rnLlC9t-5ROr!9bTAF2NQ0RH`R03IX z>Ph9`8Z-eAXS7lFI>K=xEQF1DoI!pE>so8BRkZ>VR=vx|2yP*yN&Xw%{tq4tOjoG9bJD~gPG0WX$FDGvtQb_15U0i0q?)YDX0Z0NzLeq2&G(NPK%L~zX^oti| zAERWL?tUNLSeLTFyhRo%dnFSy>D;iCF~Hzi@l8E1P^N5M1v<%M&|V~8`fJq7-1}op z7v#H@SKhE6y~%D!4?s6iDFtQZHmXR5%yrZ|#K78Bk7)Mb59y?iTtY8|m}J>4i9gD# zzc;@}4u#i+Iybz}sP4x>b>{X@fxU`m{yzDAUiFJK{^w@D*v>xs{XSi}+hWBoWxxN6 zK8^yr6uP~My4e>?&%@$`vdAeB^_98azxL+8p_h9@`((JS0MoKQ(*2!P4_8xcpY=uqYkO-S@gIuzcLVq{Hih z4$*Tfm=rXaJ4?53As?f7V}B1V{&8cT_c;bG9Q&xxhpetR-bv-{*Y@>91!XB%53TRk zw_(6|1SynvwSV{u$yoy{cNWge1*qnBsDU&UZHTsy?gvz zLITcMWdI)vyuE82o+aP=Je^U=X5;N#-D0+h3>iH{`Ul1bpg#GB>1ljMa79%2Uo5oB zElVP#K22&^|Nb+k{6L6g)bY8f&r?2h?EE`_H{-Ejk++9ToCIlM%T6*2FD<~j4X%qw6dixK9AN#XPXiliUPtdil(t4X+pLy7!crPVRZj6?0I!Ax=z?Jw01{1n zR+&@xakR;+?rR5$!6WY`yz$7PK9z$|MKL4qC!?v4QstlUZq~x(vy(i zQmOThOQAM-oxaLsATr=O@lF%@oMe>t0CCkEtc1y4c4CatER}Od!jrjx z?rI{Kbc(@4*qFx|r2Merw!u(+k!mJ_B}lDGUW~j<>55ODF~?(Ac!8YfTXVyG9K$Ml z#ki0Kc@iPH+QQWaFA%S`TE!5s4Yr_iq?O?MM62idm3S5|Z{@|L;KF&YcFPpAa>bt> zGsC|@mx^|%9B%z4>L72U=D!!LGETMr2YExuWv`_z!mcN;ot(I9{VR_thwyS(^|Y(2 zrmYuC@I|%%9__A^v?{LrZcntv+V6c@1y6B~ z;=LVSlxVr>j3K3Eye+5Q!liMfqD-`xB)=kDn?^RqRJ+e~1XK0>hjxfsE6jHOm-fQA zWO10`1w9mKI{&6^#wDan$~9&_i2eU_+w!U?sjvR)cFEB85@g_DqQWs9o&Twg@X_F9 z+xZ{cJ{JCtl9*1v1NovoXf_ukMp4EBcp6~L;!JUS^sW2AA^R;zrTO#F5G?W$R? zfbGlsuWL&fe?fJ`GOE$7Z8PNjVT8l6RYcut1ab^eJG{yWB0V@%%+}<)xj_XnSQI3L=|m`*|WMWwR%E%nNN|S3%;jqqT0_^9AL&id==>5)J;GFt=v)w!`kRYQZgOU<^QP0xuEt}ou zDcG{26k!J1Vi0b$n1sha<#WDtS`UZ zYDJd)JVQuzb4y@}_*2Z+L0SX_DGk<-0+9>~fEZvgSmMaMv&|jG^9W-WJTA$}lfZe{dWBWEn3%y;* z7x|X-^TMMlNA-7XAAn5?#OV!3i#)_4?&!9rUyN=^zewQ2+F*=~*#p0&G1(WrEm_s> zut0Dii=l6e7@Z8Bn66+PWZ?GaXb@%cC^49tvM*X&a!86$eT~CmdV{cJ>r@lMBVc{T z61~Q+Fe%B_i7!%-W4?0R-fd@qxzcC9a$lxfMy7TyJaUah5o-KgKz% zJB&2_vJIdWwIw5fOHhrIfhrSs=nmXoT%x}%Faw20V&8obXa&fTjDP7woDV6!qjE-v z&F;Pqh7uDhAO12CB=+4SffkeR2jjLm2yfKgo+c!whm(eHj~?+ViCQj;ClcE@Mk&G81vM^~SNVshA2XcF z>~EL6mJdTwuM%fG%k4ZaeWZdRB7@3{24xSuM8c-9+?gh0k1QeJs8eXZF1dOlT(W(f zPY;Hf5zRSVu88EAc~lmuH3-LAltRb(W0Zg8SWx}2R?TCWDURo2nG3M8&@u@msFs7F z1a`JL4>X6l9#E5E1zc(@)=Y2R7TBAm`4-2mV0uz_9TTi~6z*gXHDo>5O+sAQ;^U6Qqls6(! z6;uR8p7ltu7l3sal8aUeUnthbj1m4Q3b7Y1oF4)<1-k;`8<$q3?G?_RoeF}XMdAV=%qZw{i?8jk2(N-uT=WWQ0i=TgfWF1C5UblM+GzaLCe~%a`1x0wKBrV^~p|kl|c5m(4d8KzpGD zf0WQJwZ8{ zgvLlQ1Vo?g<@C}}1)(56N;;#wg(wrmUtYRIkF+nQ;#n$;MB!k~w^yymvfpHgqFrhU zEYao01+Rm&hyzg?tRDp;5z8Y%P{<$?LCIzNP4|+kFyaIb&)h^jqehu;I`DkzC2_J9 zw0K6OvT>6L_BGL^v?8T8;i+OsRY%URX#U?`4dG1_Sn zmXW~|(-n-x$Ez4Fs4}Pv)A0W>DAE)P~JckaIpaqA7)p3SF%dX(hUX+YZ!(~SKDv1tDP%( z1?%6Cpklz$bh^rY+rsR&1O~@mUj!_cSL3EV#$69#7?s6P9%Wg`nz)+4l^DtOh5Hiw zGpcSm9Hx}`+Jb70L}T)K&dL*c6sKGb8N$5@Jj`h31Ent0%%GH^%w&cq#(T<8nnL z$IJt>cpf4GXF;lhL=BXn=2%dHwN}l;m?;kFVwnpt8VF-`UbP$#C9uO&nF2JAxgM}v ze}6fybz|W=9-r55;E1e%kxM``iH@{;spB`0Pr`_f3;tn73H@Vb+!m)oQ=G3B6bDnQ zHYl%)qoMSUqDF4WIZ#xZOTcU4!`$eTH`yf1 zw>f#8PGXx)DqrTP^XjVCDA+2m?O1ypW#U-djvZR#EV2h(d{f997E2}fOMj@RIMzkY z$IBrWoP!M2BX3zZlVGr2NFhpXOvabG1hcrOGCuffd;ty$hAt2JK^%BR&>y?qo$e6( zD8!-W-V&~`1fWU*Q^mLmRsHl5K&TQZcElId5^8p1HWbaHSWzT(1+`|T6poEWf(u3k zvK^!=qh%X=n%duQe&j zmhVRq!|F9E3Ce5xb$dVR4Y8OKJGAzj-BM7DZwh(CDt@FU>0={Ta4guD?=N>@KZLSX zkGy3;H-gjsNce{wZA|v-=6fQo996Y*u5d5}?Bo#vhy(2f`eVaq2RDvs3n30go|bS0 zCuer66c8!w$3CWl^b$Zj{N{apK`l`!)!sP8iX!v~0I6sgi_G>p6{tf=_m$hZIp{lp zcqCk~V!FQ|I#@PJbzpZ4U6#N1b=%-eZ2rnPct!jnyT;-V??DlvW;#xB+(Q-sF38B$ zP({>sE`N_rg~})j2=6%q&G$43zxlUeAJdn8QZuV-K@DMAGAsDAe(z*r2I)d>}4x!+JRGrOYIlG!~R*+FTA4>7`$)OcSh>anO!Tt178cYYa7-^ z{FViO5^w`J`P+Sf6al@|(U;&txZiq!&vevu%1|L+xVZIA_5j}|@3GiZc0YZ9k8`Qq zlcP?Rt6rnvl)Sb-wC|%V1#51wL+d_^fj}4E6!M0}p2(jeRL8`zu2X(rNTw-U^~hUR zl_4060oV+o0yZZ1bsvYtiP$%}Uv0oB9A)gu-OKG0a5JC>eh~;Sw-zP=KLpY-mT-lo zN>qx)75vcURz$c25H=me4#nsNwSSfHhmw9ToZZ~l z7`UM2Y(Q;6gy_K6Cn>RmVp_5lvi!X-?*o5eZ$rkxE8-8?RuF%95Bl8{0vzW%?jZ|6 zDw<&AYL_BvJD0!5w@!>qjiP|?o-@#VPm}Pakj&z~I*6KCT?=Xm)5cC(|1P76|u4r+Xml(R0P_! z4Kp9VeF%O-evd_|YNhzfK>X=I9)@qe3}NF7G+J2)pZs6xbbAJTp`p=KjUXbMN~XIr z=`{YLrzQ}{*Kaa|CR1*D1Y)&OvNg~~W&+TVp)H$nv-s!R`(volAC$5=nQ6@?Xm%o7 zzY>S8Zl*iyd>bP3N@b?@va1EjX)ZDyu?n~^qgFG(X*WoRrXSz*Mxmvj&`cN(LC^eKL^PdF{w zj|$tfc2!3NBf}sxlmCG|4VqKXz8dr{r$n%_F*tbGqPaEOT2)B1_T>*Fc4b>J+g+8T z%}ndB2U!huV{cW4#&VkZ2bH-Aj$7NAe0CT;%b8*QZ4`V!q5146`qeZJD$mYjvtyvB zt*_H9#AmY;$c*6iV0gGbxeB=uT0d9mmNHPOxivM!sv3Yc)CO4vj#pHcGq>ZC0eREj#Rv;Gb{re~n7XK`EP) z!>uC;nw`kz*Bdp6ZSHXQi1Td-YbdQ$-E2V{n;Zs-EV|-|Y-lDYl|yfPcobx^lH z?jLM5prJLsRlf|YV8`;she=aQ!3ccF_npw@aAar7x8Vp6zf`c^FiUr<%FtLI;Bj5= zK^EnvJ<}Ksq#xwB*re`9g>6(!?ucMSWkNHnaI>dDa|$9|92Y{&NCc~!9K3JQ+&a=a zT1d0@OM{%;V&9>vr4{FIebY<9=b;(5UY){ zZ;3Wm%Op`d)IE0d_~+aEKcH@8P|D`yace$7vlH3+H79g+kGu2Ew_$rnDSp&mcD0Xt z=xU`aPKShM@&h?(9tAxwCA$ZU_Xk_e;|c8FXsdqbQ^5|UAMIlj|57kEfaGI6v^lW) zPWd)uucFOYtqdwdWBCA^x50xfQA%^CF&apJs9yy!Ei8bl3frh3*%86mokGV%XH9#W z$L;y_NgMW}EagKH%x{A%S(?CH0~fZQ6w(~NWoq$MwiWZ;C%J4@>6au~4V0^my(bwO z%SYV1@)J&}I8F69pC3lg^6_2yboUEI`{nba=vS8(ReAPtHb3?xjjrqP46aXLSB>~! zxXQ`qC$W#FANhEcSF{9vI|Z9lRUR7I3j7YnLQj$(@gWy=;6?+#8w4>-VAL%Yq}bJB zs>}LKLeWUj)a(5&vN>xh)pZlTc@R&Y1qbQ2BRO>e9xj_s^*tp+9P1ghonWY!0ulZ6klt zMoswi^*&yMR8fAlp!%k;)$MX-8Xvu)$tM}s{eIQv7l0KT6XZnpXJ_ipKGl((oswkC zAdQs$o0_ZUX*64YNf6ypck){#ovF5_6JQGfNdj&=%Pea}=#V{EMcuWz_f>|dzyGzp zuv>CZ@KLn877!5f+uLU~u$9HDvu(pj^w8hU;GZ;6P=8tT*Zh?C+L5nfVO?Hz@9#to z&qvx#;Df{`3vx}u;D*I|WQnZQoFgfOgEKp-Zzyr^+`DFJ#{qH;2#+S)C2>Km^ZoHX zWmz-F&Ss=mNOL`O8JiZk&bMJBV|nj-VwScaJfQvSvFq3h$y71;xwADKG#-2$nRAjDq?@u1lY5yj)sn%{d}%9GtmXecg$B z=iW6-Hy^N!vk)W>Sm*oWOV6@qj-AbjS4nd{bg^A)hvtZT;iGY|cRevnHy%FF{`J^( zW(o=a8GLtP_gZ@0ifKh_({i>Za4V~#A|PiY06zWwq!PdqtVX`zEEk_hND%@UtD}he z3t=Rqg{XD=I=_;v2w`c}$?N_3$F&e2pQ9lzlzBx6QNFj}>p(Qn2rveKMTn1Mbs@wT z#=;u8qu2TM0iU$XOJG^l@j|h!wd;~~-A}W1izpOGG9`v0Sn6|anRj}Zf zR2W5^j6b4dqA8`)qtJvxGgN6S*1d<&5L8XEcj- znYCl<-a;P3W*VlekhZooS)Ee-&^nd~lW#o|pc#bPSqGsB3Waq9xzOoqI4(9pU4R`0 zu^?IF*5>Q%S_?|ESTMdNjAKs$CMYsp-CC2b1v*69Jk`6fi{Ye!0I5G+U93p}j5xFy zX=>n{;BwfBVYR`F714ZoXl-Qzk-ashNd_h;wGcZEGqaSKt?sU2FsO=B2DcN3y^Mfs z)0sF0vJ9$Y_Pm_f1Xwk^I+5>__?D?*KQ1ClBgV`mfDElpSAyV+mWQOPI;*oLq%xjH zQB1n3wL1R*MpdP=Ioy!LWSu0>(MM~jiel2)0xP=s7$n2)3rfybGB`05kzk^^d6Um( ztJ=%jmE4niKLxz3?HbU7gDJp?M+j)mnpOPeyR7g98Mqv)cO)mfr?QiaC=aw-etBbK z1fivfU&sm7k~vYZ%!gDsLl}%(12KV#QaDj)LZKPzixel{LuiPZtqe|&Pe`>ko{_*W z^tj@O@Y1k=h&{>@9p=Q?$+wWV(?b~?sknrE0TBmeO7%lh7(^p8+%Xu0+9QM}C=b#R z347sRad<*lXQxusVYaLHd038BpA`;P} zPM%F8jwo8FrtN287xvki{9>=P!~M-Iv*mMbrmiA$A57@TCO%57kjxM-BiSRxWtXS4y1RArf2v z+{xf^S`SsKmxMyI7s<=w#d`?74KTMZRtBffCZt>oLRN&uM}CE?fG3FU6Q0pE&&OW8 zg*-{LZAz?85IZ1KsvnY*!Sc0M;%Aj|54H1zCeQ5ijvyCq-qNU9Y=XJ~J4s?e^2|NY zU)bmH#LZYRzCL;nC^CK8dX_#1Iz-Jxq-R3l$z$X+VNmW#`m}hK0N7vw7{EEf<**aO zx`7(|;j2Cz>Y=rj2}Jgu8N_M^QEH(OpHO1Q_&iDkPMZBpmCIy zK50F*A4JhG^EjQ);Si$8HDPX7vVua2O6Lo#Ze%uo43uFHE@?pMeTqr2^to}E&u354 z6%a~2#BIldGwBf;s`IgHhhcHY%wnt0JbB0v*_vhNJMrlqAIZ$YiK{5L!YNQhM`UBC zz%gvICXutE47YH<$Zu;!$2$wuZtr(cXPZhRakA6Jpqm{=nh^F}#ya3nUyZNR*tOx7 z5WZ|xn@mL5?g$W6=ky@#pgskGei)!wjNelen~>cDRUkALj1yHVhb}<;3dT67!mgem zk}!VV^5X7QfPl9+hR|RaPSYkL#&uhQNno*#Nu^LxK!BroO$Kv`;9eJn_)w)nk}jx( z*Q_Qc8IXeDlITggX{TtkbEgeKN7xFU?4bnPbNT8N{hPaO2<43+)LN+J8bjWq_ebYAw z(MWrP@!$@}TyzH75K$AsDQ2=Qp*{_X>Y!C=HWUJcKF$hvAVUxOvY`T@LydMKU>i)) zCUe{kp2Wc?W_)-i2OpxM+>zzybr6%0y`f@92dG43={X$kAK_3>Lsqe)h2xQ^a7m?+ zxN4io?r|b+Y=?zm_)3c{9_}RZgb?lGE+7$h=Lir~=kyE{x4U9}3Ig>cK(QFVpC^Zd zkPw6IK#*Aq#)&GGqpFa)1BBh#^@t>lpQ?0cEkM9oDMCDi23K27iHLDKTY^bov5rZl za7+OKe#+w+%q4=GV-zAT43K0eXe5sxBPJP;f{>QzNp_|?ibgxP=@9DN>-K;nbytFY zzWi8<{>@D~1Q7Qk!bV7nvxpHSY_L&AB7kgXehgn@#RA=3Q->vcK-r4!8RWAyZ1Ay_ z_OTWEkL5=h>|-kfxiUgFC%e;KZl^s~_~sxQiF+^}ys?;z&OjUDcp^B(Otujwq*x!r z#h_Jbwkw1sOPfuG&wscah+7+uRzv3I4*T_zEd;DtvxN+ge1} zTO&YFozo0*?u*6x6a@M&fMPLz<4XUH%x?h2o0|GrVk*RP0xee!2|IC=kq98W zl|RMTMzKJ*;nZQtUC`#Cdxp+z4LgBsrG0FL{--%Yh1!a6pe_~?`LsYZ4YoDQaF z6TehR8nEeFNolqtIW|W={5rulkQvF4MeGExuM^oGs$ZwWX~%VWb>&w{Cqb)2N__na zrE~nX`c>KK=Kf;Q#m6l=#D8fF-w*yxu{X%;{M(Xt?9~lH6fdFP3^OMUQe-ueGXLo7 z1izcj-VBMCPVo9Vk>Atx>vT`L!|mkNm0uxBfmVmK(fSn*@cL`@t8xdZrxjT2#6uJv z;=eS8?+5>;*c{Bqe_PUy z-;%c>ikHmYhjzz*{p6ERe((R`&nNr*Kfd1J|KX3B!Tq-I2mhPEKfbnnBmbFq z2mOm+X7Y)7_isNj@3-UMLHs+@XgBZv9oqjd{QJN0@BhKS{}=!Mh=2bT*kSxzhkyTu veQ;9ezwaNsgQrLI?-5@Acl@*0K6x1ZgNdBJe@$EQAE$3hUg`AF*Ps0VNoD<) diff --git a/polymer-perf/eduke32/build/rsrc/build_icon.bmp b/polymer-perf/eduke32/build/rsrc/build_icon.bmp deleted file mode 100644 index 0244f3f79a8be15ddc0b79af964876b3ead92197..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3126 zcmeH}dr(tX8o-H&BGy0%At8iBLUKbw-pNhK^CtI^2T33=1PK_x0_y_=DQyMhQ3wwO z!b>LIx(JA%Qmfcjs}`}V>+I}yX2)4=x6_$*_MiP{XSV&L)1CFNJq4Fx6nDG-`N!Tl z_sn;`?>oQq-S0c+%tbw#H{#YF4d`>hyZ8A^iemr?JkRaxga7xhLk8&Nl=K~BY63Z9 z2RUOWnL>(BiQD$?MoNi``=1)%V}Ut|F|#sSS4*$DeFC+KiG>Far_gBph_h0>8*V(|DC{r zCneQS_tpNjtoFOmk-vwUzwuVzz>ChBY!R)YNvl1C8R{@&EoN?PI`QbsZ+?9A?GIJ8 zD|^#*lx+!M6(%{Sr2L81a#<~Jb2{&vuyd}$2YFB}Fj2QBDU>G=yYicV6xaP$D)`0P zSCG8^s|4{`p>G95uF*#QW%pIe-qZv#eHYE`e~4k%y@6lr^=B=_WryRgqhJ+9uOY+& z$R04+-Ae><%Vt~QFp2bCi~}|I9(?s9iqCIOqh8bGblq_K=e_>rJm{dye-9^?G5o4T z)aWU_Yc|hWoeLJrqRq2_2xs*aS@PB_L$YWWFmfvqF3~mNx(N^ zXF&`S@!MH+jXSuifk!CuN$Y!zurFmM3pewDZ1*jKt%w#baOj8`ozQ3|4MYrv$5H!) zRy$=tqB{KtI{hGu&q`#i0&cm0S6Sd)Hk&Wx8_u`__b}`uy)l-uZ3jS!xS=eH^aZ|B zen5}Jbe1#hbR%MXN2waXoMUqNdpaztP=O?Ln~9i2dXjL>h{df2bXqJvfjU1_DhD%Y zO1Ezgd}%h@kwV%Iu#DXtKC9pbK7BXSTfVF@4e;2ALVkd74xw1L(byppRvbA#FP6M5 zm38p>HFZrF#FBSqiY{=0pw9OdiUDxatp#V*>QR}rleU}n6P6TD+nM$P9}Ia}YCgxv zO36w~e8W>72_Bwuh5I%3aOhZ{w{gm{uSe%;@YS>z9~-xnM0AD6v5G!h<)p3h48&4p zXX?3G2HGy_%h)Y7cy+hG<3iDi=|Ja#ul;=4z{kX)Q-RLK!goFhc3mv)zO=9B!~Ols zrTy1}or_x%URH7$s4VxWEcXbPVaYeVD->fQF=q45@*x#kFmCgnHxd1ONNsVBTAWdh zu|cLT1ty1Yo=JuzP%W4!6&$9lmH1^i(8xv2;KcDV9qd%44vuE*;lc7wpZ77Bj@WIt zMA`eD_7y101C+4rqy(yiSZ-lsw>9Hu=Vj`A~|K(l@)Y{{1ikC}}#D(OjJ)hPP` z0Wr?lZJ+Zp3q(0#cACaynC7G^MBEAi$1mbl$%PHL^(u~C&&j~SMm6eUOfr8<^14zg ztmm^_%sqSxX*;a!4F?GI{Vs3~-Rps%jayda!PDL>Il+VOL{0F`udw;%m!fZM(1(_5!h_Xw-?X87Jz${qVXEM$p#&e7$rc&MoD-5weFYK`qG10A1Jeivl)9HX8T;ta{9P9i~2M5>rofQ=ub1!vv z3ewWJ$;o$yhw;3;4gCv3jl*%Jw|9A9;7&9;QD0AukB>Ds0|B^ohr^eGkZG_*208mX=Z>Dr8a9scoN=NSG4$r~<+ diff --git a/polymer-perf/eduke32/build/rsrc/build_icon.c b/polymer-perf/eduke32/build/rsrc/build_icon.c deleted file mode 100644 index f08f95938..000000000 --- a/polymer-perf/eduke32/build/rsrc/build_icon.c +++ /dev/null @@ -1,192 +0,0 @@ -#include "sdlayer.h" - -static unsigned int sdlappicon_pixels[] = { - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff654848, 0xffad8484, - 0xffb18888, 0xffbb8f8f, 0xff936d6d, 0xff130303, 0xff987373, 0xff936d6d, - 0xff100000, 0xff815f5f, 0xffaa8181, 0xff362020, 0xffa98080, 0xff5c3f3f, - 0xff715252, 0xffb78b8b, 0xff130202, 0xff100000, 0xff2f1a1a, 0xffa07a7a, - 0xffb78c8c, 0xffbd9090, 0xff856262, 0xff140303, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff432a2a, 0xff825f5f, 0xff190808, 0xff4c3131, 0xffd5a2a2, 0xff2c1717, - 0xff7e5b5b, 0xff543939, 0xff100000, 0xff674848, 0xff6e4f4f, 0xff100000, - 0xffb58989, 0xff1c0a0a, 0xff513535, 0xff7f5d5d, 0xff100000, 0xff100000, - 0xff100000, 0xffa97f7f, 0xff271414, 0xff220f0f, 0xffbb8d8d, 0xff442b2b, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff432a2a, 0xffba8e8e, 0xffb88d8d, 0xffc19494, - 0xff987171, 0xff110101, 0xff7e5b5b, 0xff533939, 0xff100000, 0xff694949, - 0xff6e4f4f, 0xff100000, 0xffb08585, 0xff1c0a0a, 0xff513535, 0xff7b5a5a, - 0xff100000, 0xff100000, 0xff100000, 0xffa67c7c, 0xff261212, 0xff100000, - 0xff956e6e, 0xff704f4f, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff4c3232, 0xff896565, - 0xff261212, 0xff503535, 0xffd4a2a2, 0xff351e1e, 0xff755454, 0xff835f5f, - 0xff261111, 0xff936c6c, 0xff715050, 0xff160505, 0xffb28686, 0xff241111, - 0xff573a3a, 0xff836060, 0xff251111, 0xff674949, 0xff140303, 0xffa77e7e, - 0xff392222, 0xff3a2222, 0xffbf9191, 0xff3b2424, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff725252, 0xffb78a8a, 0xffc19292, 0xffba8c8c, 0xff866161, 0xff110101, - 0xff2c1818, 0xffb28585, 0xffc49393, 0xffab8080, 0xff261313, 0xff3f2727, - 0xffb18686, 0xff644545, 0xff7c5a5a, 0xffb98c8c, 0xffc09191, 0xffba8c8c, - 0xff341e1e, 0xffa77e7e, 0xffbf9090, 0xffba8d8d, 0xff745353, 0xff110101, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff272159, 0xff383793, 0xff3e3da3, 0xff2e286b, - 0xff2e296e, 0xff2a2157, 0xff100001, 0xff37358e, 0xff140611, 0xff353286, - 0xff3d3ca0, 0xff3f3c9f, 0xff180a1a, 0xff323080, 0xff353285, 0xff261e51, - 0xff322c75, 0xff100000, 0xff322e7b, 0xff1f153a, 0xff333284, 0xff3b3a9d, - 0xff403fa8, 0xff13040b, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff2e296d, 0xff251c4b, - 0xff1a0d25, 0xff110104, 0xff353284, 0xff5453db, 0xff1a0d22, 0xff3e3da6, - 0xff231a47, 0xff332f7d, 0xff150714, 0xff2c225b, 0xff1f1333, 0xff2b2461, - 0xff281f54, 0xff2a235d, 0xff5454df, 0xff251a44, 0xff38358f, 0xff211841, - 0xff332f7e, 0xff1c0f29, 0xff140611, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff2f296f, 0xff3e3ca0, 0xff332e7d, 0xff100000, 0xff363287, 0xff2d2667, - 0xff3f3ca0, 0xff4746bc, 0xff241b4a, 0xff2a235f, 0xff1e1436, 0xff3d3b9e, - 0xff1f1231, 0xff2a225d, 0xff271f52, 0xff2a2461, 0xff30296e, 0xff4441af, - 0xff4443b2, 0xff231944, 0xff3e3ea5, 0xff3c3998, 0xff1a0e25, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff302a73, 0xff2e2768, 0xff241b48, 0xff1e1232, - 0xff39358f, 0xff190d24, 0xff35307f, 0xff5150d4, 0xff22173f, 0xff4746b9, - 0xff2a2159, 0xff4947bd, 0xff261d4d, 0xff35307f, 0xff352f7d, 0xff2d2667, - 0xff261c4c, 0xff292158, 0xff5555df, 0xff231a47, 0xff38358f, 0xff251b49, - 0xff261c4c, 0xff110205, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff221842, 0xff2f286c, - 0xff2f286b, 0xff221840, 0xff383b78, 0xff292c43, 0xff2a2c43, 0xff4650a1, - 0xff252633, 0xff424a92, 0xff4650a3, 0xff3d4587, 0xff252634, 0xff404990, - 0xff40498f, 0xff363c6e, 0xff2f3458, 0xff252633, 0xff4851a4, 0xff1a0e26, - 0xff2d2666, 0xff2f286b, 0xff2e276a, 0xff110206, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff446281, 0xff527ea5, - 0xff4f799e, 0xff537fa6, 0xff517ca3, 0xff5a88b3, 0xff45698a, 0xff537fa7, - 0xff4e779b, 0xff5480a8, 0xff5581a9, 0xff5683ac, 0xff5987b1, 0xff5887b0, - 0xff547fa7, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff241d34, 0xff251f3c, 0xff1c101d, 0xff14080c, - 0xff4d5c85, 0xff546a96, 0xff4b5f87, 0xff36475f, 0xff5b6f86, 0xff507096, - 0xff405683, 0xff394d6e, 0xff51657c, 0xff556f92, 0xff405785, 0xff394e72, - 0xff435d86, 0xff466094, 0xff466095, 0xff261c33, 0xff211b3a, 0xff221d3b, - 0xff150913, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff170b1a, 0xff505cb1, 0xff363d88, - 0xff241e3f, 0xff31305e, 0xff45498c, 0xff424381, 0xff3c3c7e, 0xff2a295d, - 0xff6b72a4, 0xff2c2d76, 0xff2e2f7e, 0xff252565, 0xff6771a5, 0xff2c2d78, - 0xff2f3180, 0xff292970, 0xff424999, 0xff313188, 0xff2d2d7b, 0xff414a9c, - 0xff343490, 0xff2f2e7f, 0xff150b1c, 0xff100000, 0xff100103, 0xff150714, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff32305e, - 0xff3a3f98, 0xff394095, 0xff1e163c, 0xff3f3c77, 0xff323388, 0xff434991, - 0xff303082, 0xff39438f, 0xff313385, 0xff323481, 0xff3e4598, 0xff2d2e7d, - 0xff454ba0, 0xff2c2c7a, 0xff3b429e, 0xff2c2c79, 0xff4249ac, 0xff323289, - 0xff191532, 0xff4c51a2, 0xff393998, 0xff211e48, 0xff100104, 0xff100000, - 0xff180b1f, 0xff251c4a, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff4751a7, 0xff3b3b9e, 0xff424ea6, 0xff1f173f, 0xff3e4293, - 0xff363694, 0xff3b4598, 0xff353592, 0xff424793, 0xff373796, 0xff3b3f8f, - 0xff393a9b, 0xff393a89, 0xff4244a1, 0xff2d2f7a, 0xff27225c, 0xff272460, - 0xff4a50b1, 0xff3e3ea5, 0xff383b95, 0xff4b53c0, 0xff4343ae, 0xff3a3c98, - 0xff100206, 0xff100000, 0xff2a225b, 0xff1d112e, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff1a0e22, 0xff545bc6, 0xff3e42a0, 0xff464db5, - 0xff231b47, 0xff4f58b7, 0xff3e3ea3, 0xff4e53ab, 0xff393998, 0xff4045a8, - 0xff4040a7, 0xff3d4798, 0xff4141ab, 0xff3d459a, 0xff4242ad, 0xff3a4094, - 0xff4444b0, 0xff3c439c, 0xff4445b1, 0xff2d2c76, 0xff1d1736, 0xff4c54bf, - 0xff36358e, 0xff11030a, 0xff0f0000, 0xff100000, 0xff4547ab, 0xff1b0f29, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff3a3671, 0xff494bb6, - 0xff4c52a4, 0xff5052b1, 0xff2b2663, 0xff4b52c0, 0xff4445b1, 0xff4344af, - 0xff2d2a70, 0xff4d58be, 0xff3e3ea2, 0xff4149a6, 0xff4040a7, 0xff464da6, - 0xff4444b1, 0xff454ca2, 0xff4444b0, 0xff414ca1, 0xff4444b3, 0xff343585, - 0xff323473, 0xff4a4cc3, 0xff3f45a1, 0xff1e182d, 0xff100000, 0xff190e26, - 0xff758bf0, 0xff21173f, 0xff100000, 0xff100000, 0xff100000, 0xff100001, - 0xff5052af, 0xff4545b8, 0xff4e51bd, 0xff4444b4, 0xff36378f, 0xff525ac3, - 0xff333284, 0xff12050e, 0xff170915, 0xff4c52c6, 0xff4343b2, 0xff5053c2, - 0xff3a3a9c, 0xff4045aa, 0xff4848be, 0xff484abf, 0xff4242b0, 0xff3f45a6, - 0xff4545b7, 0xff4343b2, 0xff474cab, 0xff4545b9, 0xff4646bd, 0xff1f1a45, - 0xff160918, 0xff5e65c0, 0xffc4d6f6, 0xff4244a4, 0xff100103, 0xff100000, - 0xff100000, 0xff1a0e23, 0xff575cd5, 0xff4140aa, 0xff34307b, 0xff4949c3, - 0xff3d439f, 0xff4b4ec4, 0xff2b2666, 0xff100000, 0xff13040a, 0xff313279, - 0xff3f3fa9, 0xff3e41a5, 0xff333681, 0xff333183, 0xff4041ad, 0xff4248ae, - 0xff4751b6, 0xff5467ca, 0xff556bcc, 0xff5870d1, 0xff7385d6, 0xff7b87d3, - 0xff9096d5, 0xff969fd7, 0xffb6bef0, 0xffebeff9, 0xfffafafa, 0xffadc5f7, - 0xff5567c8, 0xff2e2768, 0xff100000, 0xff373872, 0xff5154d4, 0xff332e7a, - 0xff33326d, 0xff4d4dcf, 0xff474fa7, 0xff4444b4, 0xff2d2761, 0xff2a2751, - 0xff3a4186, 0xff4b52bb, 0xff535ed5, 0xff5762df, 0xff5666e6, 0xff5a66ef, - 0xff5b6bee, 0xff5b73d9, 0xff5062b6, 0xff444f9c, 0xff3d4685, 0xff373b71, - 0xff373769, 0xff433b67, 0xff433c66, 0xff433e70, 0xff7179d1, 0xffccd9f6, - 0xffd1dbf4, 0xff6166bd, 0xff201639, 0xff110205, 0xff100001, 0xff525abb, - 0xff5050d7, 0xff231a45, 0xff3c3a63, 0xff3d3da4, 0xff3e46a1, 0xff404ba1, - 0xff3f47a2, 0xff3f42a7, 0xff4545b7, 0xff4c4ccb, 0xff5050d7, 0xff4e4fd1, - 0xff393792, 0xff251c4d, 0xff160a1b, 0xff100103, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff1a0f29, 0xff6d87f4, 0xff5b67d8, 0xff150712, 0xff100000, 0xff100000, - 0xff1c1227, 0xff5b66de, 0xff4646bf, 0xff261f4e, 0xff3c4389, 0xff3c4599, - 0xff2f317c, 0xff2d2d7a, 0xff303081, 0xff34348f, 0xff383898, 0xff3b3b9e, - 0xff2a2a64, 0xff150817, 0xff0f0000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100103, 0xff5863e1, 0xff2e286a, 0xff100000, - 0xff100000, 0xff100000, 0xff38386d, 0xff4143aa, 0xff3f499e, 0xff374089, - 0xff2b2b73, 0xff2b2b75, 0xff2a2a73, 0xff2b2b74, 0xff2d2d7b, 0xff303081, - 0xff2c2e75, 0xff150f1c, 0xff0f0000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff4c4bc6, - 0xff150815, 0xff100000, 0xff100000, 0xff100000, 0xff3a438e, 0xff353f84, - 0xff262766, 0xff262665, 0xff262666, 0xff272769, 0xff272769, 0xff28286d, - 0xff292970, 0xff272769, 0xff120a0f, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff100001, 0xff3a358f, 0xff0f0000, 0xff100000, 0xff100000, 0xff100000, - 0xff170e10, 0xff16060e, 0xff13050e, 0xff19060e, 0xff19070e, 0xff110103, - 0xff100002, 0xff100002, 0xff100002, 0xff100001, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff13050e, 0xff28215b, 0xff100000, 0xff100000, - 0xff100000, 0xff100000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, 0xff000000, - 0xff000000, 0xff000000, 0xff000000, 0xff000000,}; - -static unsigned char sdlappicon_mask[] = { - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255,}; - -struct sdlappicon sdlappicon = { - 32,32, // width,height - sdlappicon_pixels, - sdlappicon_mask -}; diff --git a/polymer-perf/eduke32/build/rsrc/build_icon.ico b/polymer-perf/eduke32/build/rsrc/build_icon.ico deleted file mode 100644 index d585cc1569ed4bc75982a81982d15cdeba8565a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2998 zcmds(J&4>!7>2*Kr!ZJZnmhXnqr!0!;x5Nj1{c9Aso6ESx!T=yw+i@zA*8sSY zFsWSR7m~%8sL467%Q-1>Q`=2kUE#3ghz%(WDJIWIyEb-yAmAn$X;wS$_s#b{Gpk*# z$Uu(C*|RxUB|je%c~gY3Fg_t)oDfNmi@X&z`aATP_s?xtgj05R`wOqUmDy}2v!7=2 zPdPc0!MyPL zqNi=1-um_{k?)I(`CvUtdwcJHJ{RwcJn`#(-}`y;AqJkKC>RxQ%N-0Z7RCDd{(OH< z^%>*h_(Y5%Bsfr_TW5^x!9W-DzMhr>&%r7zWHK5stgx*_vjwo zqkD9Z9vBD4!7CF)g>D^|wKzJO1QlQ~Fc=sN419U$K^Yhf3FvJ zJ~FTe9tMw}hmGG2I=OK8$iW_XIDF*b^YE;}!{TA_uy|NJEFKmQi^tQ$!tV_o9Tp#1 z_)I)3KJG`yV%QT)M}r~25MT%}1Q-Gg0fqpBhatcaVDK;m7y=9dh5$o=A;1t|2rvW~ z0t^9$07Jmv;~(%3_*-gN#ukpy)s8th8>({TV8#ivKTeohhgM$Ng_wHTw z@Zm%C=+Pr}czCE5i-mgn^r?FG?3wzz=Tdw!g?PkA)$4vvQTyMvG`7E-l$KGhs&d)> zlvTxeSuHcF^3{Yo3RzPRV+LujW;C5a)95Z()pb)>!xu%ejV2DtrY!5Kroy;sn#04U zSsFHH&NN9hsJghMeVHz8XXob4?|us(M~g{4uB)a>({atzx~5n>b=sWiS5S|dl9X~B z83}PvF_-K;%6A5}9#^9njg5Gjk1N=!EXIXM-iP8VyG0>R(EB)C`I4sfp`(!=WmrAWDa&DAWo47pWj!P?EE`=7d$^bcl7K`kXC<_%rcA%ME1k%$d@;?Y z3u&`c(`-$qTDPmeH8SkxZ=aI2HEC13&BSRY)3sHB;WRznX0OE4_W1(Wj-vmR^GF}r OMJp2hr>p7z>+2tGa-44f diff --git a/polymer-perf/eduke32/build/rsrc/editor_banner.c b/polymer-perf/eduke32/build/rsrc/editor_banner.c deleted file mode 100644 index 017374033..000000000 --- a/polymer-perf/eduke32/build/rsrc/editor_banner.c +++ /dev/null @@ -1,2260 +0,0 @@ -#include -/* GdkPixbuf RGB C-Source image dump */ - -const GdkPixdata startbanner_pixdata = { - 0x47646b50, /* Pixbuf magic: 'GdkP' */ - 24 + 76160, /* header length + pixel_data length */ - 0x1010001, /* pixdata_type */ - 272, /* rowstride */ - 90, /* width */ - 280, /* height */ - /* pixel_data: */ - "\2\36E\2\36E\2\36E\5\40H\2\36E\5\40H\2\36E\2\36E\5\40H\2\36E\2\36E\2" - "\36E\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\0\"M\4\37M\4\37M\0\"M" - "\4\37M\4\37M\0\"M\0\"M\4\37M\0\"M\0#O\0#O\0$P\0#O\0$P\0$P\14#Q\0%Q\0" - "$P\0$P\14#Q\0%Q\14#Q\0%Q\14#Q\14#Q\14#Q\0%Q\0%Q\14#Q\0%Q\0%Q\2'T\2'T" - "\2'T\14#Q\2'T\2'T\2'T\2'T\2'T\10*X\2'T\10*X\10*X\10*X\10*X\10*X\10*X" - "\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13" - ",Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\0\0\11>q\11>q\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11" - ">q\15@s\15@s\15@s\15@s\15@s\15@s\15@s\17At\17At\23Bv\23Bv\23Bv\23Bv\24" - "Cw\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\30Ey\24Cw\30Ey\30Ey\30Ey\30Ey\32G{\32" - "G{\32G{\34H|\32G{\32G{\35I}\35I}\35I}\35I}\34H|\20L\177\20L\177\20L\177" - "\35I}\22M\200\22M\200\22M\200\24N\201\24N\201\26O\202\26O\202\26O\202" - "\26O\202\26O\202\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203\27P" - "\203\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\0\0\2\36E\2\36E\2\36E\2\36E" - "\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\5\40H\5\40H\5\40H\5\40H\5\40H\5" - "\40H\5\40H\5\40H\5\40H\0\"M\4\37M\4\37M\4\37M\4\37M\4\37M\0\"M\0\"M\0" - "#O\0\"M\14#Q\0$P\0$P\0$P\0#O\14#Q\0%Q\0$P\0%Q\14#Q\0%Q\0%Q\14#Q\0%Q\14" - "#Q\14#Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\14#Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2" - "'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12" - "+Y\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13" - ",Z\13,Z\13,Z\0\0\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\15@s\17At\15@s\17" - "At\17At\17At\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\30" - "Ey\24Cw\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\34H|\34H|\34H|\32G{\35I}\35I}\35" - "I}\20L\177\35I}\35I}\20L\177\20L\177\20L\177\22M\200\22M\200\22M\200" - "\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\27P" - "\203\27P\203\27P\203\27P\203\35I}\27P\203\27P\203\27P\203\27P\203\33" - "Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205K\312\363K\312\363\33Q\205" - "\33Q\205\33Q\205\0\0\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\5\40H" - "\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\0\"M\4\37M\0\"M\4\37" - "M\4\37M\4\37M\0\"M\4\37M\4\37M\0\"M\0#O\0\"M\0#O\0#O\0#O\0$P\0$P\0$P" - "\0%Q\14#Q\0$P\0%Q\14#Q\0%Q\0%Q\14#Q\0%Q\0%Q\14#Q\0%Q\0%Q\14#Q\0%Q\14" - "#Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X" - "\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13" - ",Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,ZK\312\363K\312\363\13,Z\13,Z\13,Z\0\0" - "\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11" - ">q\11>q\11>q\15@s\15@s\15@s\15@s\15@s\15@s\15@s\17At\17At\23Bv\23Bv\23" - "Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\24Cw\30Ey\30" - "Ey\30Ey\32G{\32G{\32G{\34H|\34H|\34H|\35I}\35I}\35I}\35I}\34H|\20L\177" - "\20L\177\35I}\20L\177\22M\200\22M\200\22M\200\24N\201\24N\201\26O\202" - "\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203\27P\203\27P\203\27P" - "\203\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205K\312\363K\312\363\33Q\205\33Q\205\33" - "Q\205\0\0\2\36E\5\40H\2\36E\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\5\40" - "H\5\40H\5\40H\5\40H\5\40H\5\40H\4\37M\0\"M\4\37M\4\37M\4\37M\4\37M\0" - "\"M\0\"M\4\37M\0\"M\14#Q\0\"M\0$P\0$P\0$P\0$P\0$P\14#Q\0$P\14#Q\0$P\0" - "%Q\0%Q\14#Q\0%Q\14#Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\14#Q\2'T\2'T\2'T\2'T\2" - "'T\2'T\2'T\2'T\10*X\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X" - "\10*X\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13" - ",Z\13,Z\13,Z\13,Z\13,ZK\312\363K\312\363\13,Z\13,Z\13,Z\0\0\11>q\11>" - "q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15" - "@s\15@s\15@s\15@s\15@s\15@s\17At\17At\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23" - "Bv\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\34" - "H|\32G{\20L\177\34H|\32G{\35I}\35I}\35I}\34H|\20L\177\20L\177\20L\177" - "\35I}\22M\200\22M\200\24N\201\24N\201\24N\201\26O\202\26O\202\26O\202" - "\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203\27P\203\27P\203\27P" - "\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205K\312\363K\312\363\33Q\205\33Q\205\33" - "Q\205\0\0\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\5\40" - "H\5\40H\5\40H\4\37M\4\37M\0\"M\4\37M\4\37M\4\37M\4\37M\0\"M\0\"M\4\37" - "M\0\"M\0\"M\0#O\0\"M\0$P\0$P\0#O\0$P\0%Q\0$P\14#Q\0$P\14#Q\0%Q\0%Q\14" - "#Q\14#Q\0%Q\14#Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T\2" - "'T\2'T\10*X\10*X\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12" - "+Y\12+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13" - ",Z\13,Z\13,Z\13,ZK\312\363K\312\363\13,Z\13,Z\13,Z\0\0\11>q\11>q\11>" - "q\11>q\11>q\11>q\11>q\11>q\15@s\11>q\11>q\15@s\15@s\15@s\15@s\15@s\17" - "At\15@s\15@s\17At\17At\17At\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24" - "Cw\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\30Ey\30Ey\32G{\30Ey\34H|\34H|\32" - "G{\34H|\20L\177\35I}\35I}\34H|\35I}\20L\177\20L\177\35I}\20L\177\22M" - "\200\22M\200\24N\201\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202" - "\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P" - "\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205K\312\363K\312\363\33Q\205\33Q\205\33" - "Q\205\0\0\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\4\37" - "M\0\"M\4\37M\4\37M\4\37M\4\37M\4\37M\4\37M\0\"M\0\"M\4\37M\0\"M\0\"M" - "\0\"M\14#Q\0#O\0$P\0$P\0#O\0$P\0$P\0%Q\14#Q\0$P\0%Q\0%Q\14#Q\0%Q\14#" - "Q\0%Q\0%Q\0%Q\14#Q\0%Q\14#Q\0%Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10" - "*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12" - "+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13" - ",Z\13,Z\13,ZK\312\363K\312\363\13,Z\13,Z\13,Z\0\0\11>q\11>q\11>q\11>" - "q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\15@s\15@s\15@s\15@s\15@s\15@s\17" - "At\17At\17At\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24" - "Cw\24Cw\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\32G{\30Ey\34H|\34H|\32G{\34H|\35" - "I}\35I}\34H|\35I}\35I}\20L\177\35I}\20L\177\20L\177\22M\200\22M\200\24" - "N\201\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202\27P\203" - "\27P\203\27P\203\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205K\312\363K\312\363\33Q\205\33Q\205\33Q\205\0" - "\0\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\4\37M\4\37M\0\"M\4\37M\4\37M\4" - "\37M\0\"M\4\37M\4\37M\4\37M\4\37M\0\"M\4\37M\0\"M\0\"M\0\"M\0#O\0$P\0" - "$P\0$P\0$P\0$P\0$P\0%Q\0$P\14#Q\0%Q\0%Q\14#Q\0%Q\14#Q\14#Q\14#Q\14#Q" - "\14#Q\0%Q\14#Q\0%Q\14#Q\2'T\14#Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10" - "*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\12" - "+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15" - "-[\15-[K\312\363K\312\363\15-[\15-[\15-[\0\0\11>q\11>q\11>q\11>q\15@" - "s\15@s\15@s\15@s\15@s\15@s\15@s\15@s\15@s\15@s\15@s\17At\17At\17At\23" - "Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\30Ey\24" - "Cw\30Ey\30Ey\30Ey\30Ey\30Ey\32G{\34H|\34H|\34H|\32G{\34H|\35I}\35I}\35" - "I}\35I}\35I}\20L\177\35I}\35I}\22M\200\22M\200\22M\200\24N\201\24N\201" - "\26O\202\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203\27P\203\27P" - "\203\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205K\312\363K\312\363\33Q\205\33Q\205\33Q\205\0\0\5" - "\40H\5\40H\5\40H\5\40H\4\37M\4\37M\4\37M\4\37M\0\"M\4\37M\4\37M\4\37" - "M\5\40H\4\37M\0\"M\0\"M\4\37M\0\"M\0#O\0\"M\0#O\0#O\0$P\0#O\0$P\0$P\14" - "#Q\0%Q\0%Q\14#Q\0$P\0%Q\14#Q\14#Q\0%Q\14#Q\0%Q\0%Q\14#Q\14#Q\0%Q\14#" - "Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\2'T\10*X\10*X\10*X\10" - "*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13" - ",Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[K" - "\312\363K\312\363\15-[\15-[\15-[\0\0\15@s\15@s\15@s\15@s\15@s\15@s\15" - "@s\15@s\15@s\15@s\15@s\15@s\15@s\17At\17At\17At\23Bv\23Bv\23Bv\23Bv\23" - "Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\30" - "Ey\30Ey\32G{\30Ey\34H|\34H|\34H|\34H|\35I}\35I}\35I}\35I}\35I}\35I}\20" - "L\177\20L\177\22M\200\22M\200\22M\200\24N\201\24N\201\35I}\26O\202\26" - "O\202\26O\202\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203" - "\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205K\312\363K\312\363\33Q\205\33Q\205\33Q\205\0\0\0\"M\4" - "\37M\4\37M\4\37M\4\37M\0\"M\4\37M\0\"M\4\37M\4\37M\4\37M\0\"M\4\37M\0" - "\"M\4\37M\0\"M\0\"M\0\"M\0#O\0\"M\14#Q\0#O\0$P\0$P\14#Q\0$P\0%Q\14#Q" - "\0%Q\14#Q\0%Q\0%Q\0%Q\0%Q\14#Q\0%Q\0%Q\0%Q\14#Q\0%Q\14#Q\0%Q\14#Q\2'" - "T\2'T\14#Q\2'T\2'T\2'T\2'T\10*X\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10" - "*X\10*X\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13" - ",Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[K\312\363" - "K\312\363\15-[\15-[\15-[\0\0\15@s\15@s\15@s\15@s\15@s\15@s\15@s\15@s" - "\15@s\15@s\15@s\17At\17At\17At\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23" - "Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\32" - "G{\30Ey\34H|\32G{\34H|\34H|\35I}\35I}\34H|\35I}\20L\177\20L\177\35I}" - "\20L\177\22M\200\22M\200\22M\200\24N\201\24N\201\26O\202\26O\202\26O" - "\202\26O\202\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205K\312\363K\312\363\33Q\205\33Q\205\33Q\205\0" - "\0\0\"M\4\37M\5\40H\4\37M\4\37M\0\"M\4\37M\0\"M\4\37M\0\"M\0\"M\0\"M" - "\4\37M\0\"M\0#O\0\"M\0\"M\0#O\0$P\0#O\0$P\0#O\14#Q\14#Q\0$P\0%Q\0$P\0" - "%Q\0%Q\14#Q\0%Q\14#Q\14#Q\0%Q\0%Q\0%Q\14#Q\0%Q\0%Q\0%Q\14#Q\2'T\2'T\2" - "'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12" - "+Y\12+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15" - "-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[K\312\363" - "K\312\363\15-[\15-[\15-[\0\0\15@s\15@s\15@s\15@s\15@s\15@s\15@s\15@s" - "\23Bv\17At\17At\17At\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24" - "Cw\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\34" - "H|\34H|\34H|\34H|\20L\177\35I}\35I}\35I}\34H|\20L\177\20L\177\20L\177" - "\20L\177\22M\200\22M\200\22M\200\24N\201\26O\202\26O\202\26O\202\26O" - "\202\26O\202\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205K\312\363K\312\363\33Q\205\33Q\205\33" - "Q\205\0\0\4\37M\4\37M\0\"M\4\37M\0\"M\4\37M\0\"M\0\"M\0\"M\4\37M\0\"" - "M\0#O\0#O\0\"M\0\"M\0\"M\0$P\0#O\0$P\0$P\0$P\14#Q\0%Q\14#Q\0%Q\0%Q\14" - "#Q\0%Q\0%Q\0%Q\14#Q\14#Q\14#Q\0%Q\0%Q\14#Q\0%Q\14#Q\0%Q\2'T\2'T\2'T\2" - "'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12" - "+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15" - "-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[K" - "\312\363K\312\363\15-[\15-[\15-[\0\0\15@s\15@s\15@s\15@s\15@s\17At\17" - "At\17At\17At\17At\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24" - "Cw\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\24Cw\30Ey\30Ey\30Ey\30Ey\32G{\30Ey\34" - "H|\34H|\34H|\34H|\35I}\34H|\35I}\35I}\35I}\20L\177\20L\177\35I}\22M\200" - "\22M\200\22M\200\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202\26O" - "\202\27P\203\27P\203\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205K\312\363K\312\363\33Q\205\33Q\205\33" - "Q\205\0\0\4\37M\4\37M\0\"M\4\37M\4\37M\4\37M\0\"M\0\"M\0#O\14#Q\0\"M" - "\0\"M\0\"M\0\"M\0\"M\0$P\0$P\0$P\0#O\0$P\0$P\0%Q\14#Q\0%Q\0%Q\0%Q\0%" - "Q\0%Q\0%Q\14#Q\14#Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\2'T\14#Q\2'T\14#Q\2'T\2" - "'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+" - "Y\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15" - "-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15" - "-[K\312\363K\312\363\15-[\15-[\15-[\0\0\15@s\17At\17At\17At\17At\17A" - "t\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24" - "Cw\24Cw\24Cw\24Cw\30Ey\24Cw\30Ey\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\32G{\34" - "H|\34H|\20L\177\34H|\34H|\35I}\35I}\35I}\20L\177\20L\177\20L\177\35I" - "}\22M\200\35I}\22M\200\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202" - "\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\34R\206\34R\206\34R" - "\206\34R\206\34R\206\34R\206\34R\206\34R\206K\312\363K\312\363\33Q\205" - "\33Q\205\33Q\205\0\0\0\"M\0\"M\4\37M\0\"M\4\37M\0\"M\0\"M\0\"M\14#Q\0" - "\"M\0$P\0#O\0$P\0#O\0$P\0$P\0$P\14#Q\0$P\0%Q\0$P\0%Q\14#Q\0%Q\14#Q\0" - "%Q\0%Q\14#Q\0%Q\0%Q\0%Q\0%Q\0%Q\14#Q\0%Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T" - "\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y" - "\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15" - "-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\17.\\\15-[\15-[\15-[" - "\15-[\15-[K\312\363K\312\363\15-[\15-[\15-[\0\0\17At\17At\17At\23Bv\23" - "Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24" - "Cw\24Cw\24Cw\24Cw\24Cw\30Ey\24Cw\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\20L\177" - "\34H|\34H|\34H|\34H|\20L\177\35I}\35I}\35I}\35I}\20L\177\20L\177\35I" - "}\22M\200\22M\200\24N\201\24N\201\26O\202\26O\202\26O\202\35I}\26O\202" - "\27P\203\27P\203\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\34R\206\34R\206\34R" - "\206\34R\206\34R\206\34R\206\34R\206\34R\206\34R\206K\312\363K\312\363" - "\33Q\205\33Q\205\33Q\205\0\0\4\37M\0\"M\14#Q\0\"M\14#Q\0\"M\0\"M\0\"" - "M\0#O\0$P\0#O\0$P\0#O\0#O\0$P\14#Q\14#Q\14#Q\0$P\14#Q\0$P\0%Q\0%Q\0%" - "Q\14#Q\0%Q\0%Q\14#Q\0%Q\0%Q\14#Q\0%Q\14#Q\0%Q\0%Q\2'T\2'T\2'T\2'T\2'" - "T\2'T\2'T\2'T\10*X\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12" - "+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15" - "-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\17.\\\17.\\\17.\\\17" - ".\\\15-[\15-[\15-[K\312\363K\312\363\15-[\15-[\15-[\0\0\23Bv\23Bv\23" - "Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\23Bv\23Bv\24Cw\23Bv\24Cw\24Cw\24" - "Cw\24Cw\24Cw\24Cw\24Cw\30Ey\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\32G{\34" - "H|\34H|\34H|\34H|\34H|\35I}\20L\177\35I}\35I}\20L\177\35I}\20L\177\20" - "L\177\22M\200\22M\200\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202" - "\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\34R\206\34R\206\34R\206\34R\206\34R\206\36S" - "\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\34R\206\34R\206" - "K\312\363K\312\363\34R\206\33Q\205\33Q\205\0\0\0\"M\0\"M\0#O\0\"M\0\"" - "M\0$P\0#O\0$P\0#O\0$P\0#O\0#O\0#O\14#Q\0$P\14#Q\0$P\14#Q\0$P\0%Q\14#" - "Q\0%Q\14#Q\0%Q\14#Q\0%Q\14#Q\14#Q\0%Q\0%Q\14#Q\0%Q\14#Q\0%Q\2'T\2'T\2" - "'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12" - "+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15-[\15" - "-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\17.\\\17.\\\17.\\\17.\\\17" - ".\\\17.\\\17.\\\17.\\\17.\\\15-[\15-[K\312\363K\312\363\15-[\15-[\15" - "-[\0\0\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24" - "Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\32" - "G{\30Ey\34H|\34H|\34H|\32G{\34H|\35I}\20L\177\35I}\20L\177\35I}\20L\177" - "\35I}\20L\177\22M\200\22M\200\22M\200\24N\201\24N\201\26O\202\26O\202" - "\26O\202\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\34R\206\34R\206\34R\206\36S\207\36S" - "\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207" - "\34R\206\34R\206\34R\206K\312\363K\312\363\34R\206\33Q\205\33Q\205\0" - "\0\0\"M\0\"M\0\"M\0\"M\0$P\0$P\0$P\0$P\0$P\0#O\0$P\0%Q\14#Q\0$P\14#Q" - "\0$P\14#Q\0%Q\0%Q\0%Q\0%Q\0%Q\14#Q\14#Q\0%Q\0%Q\14#Q\0%Q\0%Q\14#Q\0%" - "Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10" - "*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13" - ",Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\17.\\\17.\\\17.\\\17" - ".\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\15-[\15-[K" - "\312\363K\312\363\15-[\15-[\15-[\0\0\23Bv\23Bv\24Cw\23Bv\23Bv\23Bv\23" - "Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\30Ey\30" - "Ey\30Ey\30Ey\30Ey\30Ey\32G{\30Ey\34H|\34H|\34H|\34H|\35I}\34H|\35I}\34" - "H|\35I}\20L\177\20L\177\20L\177\20L\177\22M\200\35I}\24N\201\24N\201" - "\24N\201\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203\27P\203\27P" - "\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\34R\206\34R\206\36S" - "\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\34R\206K\312\363K\312" - "\363\34R\206\33Q\205\33Q\205\0\0\0$P\0#O\0#O\0$P\0$P\0#O\0$P\0$P\0$P" - "\0$P\14#Q\0%Q\14#Q\0%Q\14#Q\0$P\0%Q\0%Q\0%Q\14#Q\0%Q\14#Q\14#Q\0%Q\0" - "%Q\14#Q\14#Q\0%Q\14#Q\0%Q\14#Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10" - "*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\13,Z\13" - ",Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\17" - ".\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\" - "\17.\\\17.\\\17.\\\17.\\\17.\\K\312\363K\312\363\15-[\15-[\15-[\0\0\23" - "Bv\23Bv\24Cw\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24" - "Cw\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\32G{\34H|\32G{\34" - "H|\32G{\35I}\35I}\35I}\35I}\20L\177\20L\177\35I}\20L\177\35I}\22M\200" - "\22M\200\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202\27P" - "\203\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\34R" - "\206\34R\206\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\36S\207\36S\207K\312\363K\312\363\34R\206\33Q\205\33Q\205\0\0\0" - "$P\0#O\0$P\0#O\5\40H\0$P\0%Q\14#Q\0$P\0%Q\14#Q\0%Q\0$P\14#Q\0%Q\0%Q\0" - "%Q\0%Q\14#Q\0%Q\14#Q\0%Q\14#Q\0%Q\0%Q\14#Q\0%Q\0%Q\14#Q\0%Q\14#Q\2'T" - "\2'T\14#Q\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10" - "*X\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15" - "-[\15-[\15-[\15-[\15-[\15-[\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\" - "\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\15" - "-[K\312\363K\312\363\15-[\15-[\15-[\0\0\23Bv\23Bv\23Bv\23Bv\23Bv\24C" - "w\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\24Cw\24Cw\30Ey\30Ey\30Ey\30" - "Ey\30Ey\30Ey\32G{\30Ey\34H|\20L\177\34H|\34H|\34H|\35I}\35I}\35I}\34" - "H|\20L\177\20L\177\35I}\20L\177\22M\200\22M\200\24N\201\24N\201\24N\201" - "\26O\202\26O\202\26O\202\35I}\27P\203\27P\203\27P\203\27P\203\27P\203" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\34R\206\34R\206\36S\207\36S\207\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\34R\206\34R\206" - "K\312\363K\312\363\33Q\205\33Q\205\33Q\205\0\0\0$P\0$P\0$P\0#O\14#Q\0" - "%Q\14#Q\0%Q\14#Q\0$P\14#Q\14#Q\0%Q\14#Q\0%Q\14#Q\0%Q\14#Q\0%Q\14#Q\14" - "#Q\14#Q\0%Q\0%Q\0%Q\0%Q\0%Q\14#Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T" - "\10*X\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\13," - "Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\17" - ".\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\" - "\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\15-[\15-[K\312\363K\312\363" - "\15-[\15-[\15-[\0\0\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24C" - "w\24Cw\30Ey\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\32G{\32G{\32" - "G{\34H|\32G{\34H|\35I}\35I}\35I}\20L\177\35I}\20L\177\20L\177\20L\177" - "\22M\200\35I}\22M\200\22M\200\24N\201\26O\202\26O\202\26O\202\26O\202" - "\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\34R\206\34R\206\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\34R\206\34R\206K\312\363K\312" - "\363\33Q\205\33Q\205\33Q\205\0\0\14#Q\14#Q\0$P\14#Q\14#Q\0$P\14#Q\0$" - "P\14#Q\14#Q\0%Q\0%Q\0%Q\0%Q\0%Q\14#Q\14#Q\14#Q\14#Q\0%Q\0%Q\14#Q\0%Q" - "\14#Q\0%Q\0%Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*" - "X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13" - ",Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\17.\\\17.\\\17." - "\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\" - "\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\15-[\15-[K\312\363K\312\363\15-" - "[\15-[\15-[\0\0\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24" - "Cw\30Ey\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\32G{\34H|\32G{\34H|\32" - "G{\20L\177\35I}\20L\177\35I}\35I}\35I}\20L\177\20L\177\20L\177\20L\177" - "\22M\200\22M\200\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202\26O" - "\202\27P\203\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\34R\206\34R" - "\206\34R\206\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\36S\207\36S\207\36S\207\36S\207\34R\206\34R\206\33Q\205K\312\363" - "K\312\363\33Q\205\33Q\205\33Q\205\0\0\0$P\14#Q\0%Q\0$P\14#Q\0$P\14#Q" - "\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\14#Q\0%Q\14#Q\0%Q\14#Q\0%Q\14#Q\0%Q\14#Q\0" - "%Q\14#Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10" - "*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13" - ",Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\17.\\\17.\\\17.\\\17.\\\17" - ".\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\" - "\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\15-[\15-[K\312\363K\312\363\15-" - "[\15-[\13,Z\0\0\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\24" - "Cw\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\32G{\32G{\34H|\32G{\34H|\32" - "G{\35I}\35I}\20L\177\35I}\20L\177\20L\177\20L\177\20L\177\35I}\22M\200" - "\35I}\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202\27P\203" - "\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\34R\206\34R\206\34R\206\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207" - "\36S\207\36S\207\36S\207\34R\206\33Q\205\33Q\205\33Q\205K\312\363K\312" - "\363\33Q\205\33Q\205\33Q\205\0\0\14#Q\14#Q\0$P\0%Q\0$P\0$P\14#Q\0%Q\0" - "%Q\0%Q\0%Q\14#Q\0%Q\14#Q\14#Q\0%Q\0%Q\0%Q\0%Q\0%Q\0%Q\0%Q\0%Q\0%Q\2'" - "T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*" - "X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15" - "-[\15-[\15-[\15-[\15-[\15-[\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\" - "\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17" - ".\\\17.\\\17.\\\17.\\\15-[\15-[\15-[\15-[K\312\363K\312\363\15-[\13," - "Z\13,Z\0\0\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\24Cw\30Ey\24Cw\30Ey\30" - "Ey\30Ey\30Ey\30Ey\30Ey\32G{\30Ey\34H|\20L\177\34H|\32G{\20L\177\32G{" - "\20L\177\35I}\34H|\35I}\20L\177\20L\177\20L\177\20L\177\22M\200\22M\200" - "\22M\200\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202\27P\203\27P" - "\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\34R\206\36S\207\36S" - "\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\36S\207\36S\207\36S\207\34R\206\34R\206\34R\206\33Q\205\33Q\205" - "K\312\363K\312\363\33Q\205\33Q\205\33Q\205\0\0\14#Q\14#Q\0$P\14#Q\0%" - "Q\0%Q\0%Q\0%Q\0%Q\14#Q\0%Q\14#Q\14#Q\14#Q\14#Q\14#Q\0%Q\14#Q\0%Q\14#" - "Q\0%Q\0%Q\0%Q\2'T\2'T\2'T\2'T\14#Q\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10" - "*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13" - ",Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\17.\\\17.\\\17.\\\17.\\\17" - ".\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\" - "\17.\\\17.\\\17.\\\17.\\\17.\\\15-[\15-[\15-[\15-[\15-[\15-[K\312\363" - "K\312\363\13,Z\13,Z\13,Z\0\0\24Cw\24Cw\24Cw\30Ey\24Cw\24Cw\30Ey\24Cw" - "\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\32G{\32G{\32G{\34H|\34H|\34H|\20" - "L\177\35I}\35I}\35I}\20L\177\35I}\20L\177\20L\177\20L\177\35I}\22M\200" - "\35I}\22M\200\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202\27P\203" - "\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\34R\206\34R\206\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207" - "\36S\207\36S\207\36S\207\36S\207\34R\206\34R\206\33Q\205\33Q\205\33Q" - "\205\33Q\205K\312\363K\312\363\33Q\205\33Q\205\33Q\205\0\0\14#Q\0%Q\0" - "%Q\14#Q\0%Q\0%Q\14#Q\14#Q\0%Q\14#Q\0%Q\14#Q\0%Q\14#Q\14#Q\14#Q\14#Q\0" - "%Q\14#Q\0%Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10" - "*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13" - ",Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\17.\\\17.\\\17.\\\17" - ".\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\" - "\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\15-[\15-[\15-[\15-[\15-[\15-[\15" - "-[K\312\363K\312\363\13,Z\13,Z\13,Z\0\0\30Ey\24Cw\24Cw\30Ey\30Ey\30E" - "y\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\32G{\30Ey\34H|\34H|\32G{\34" - "H|\20L\177\35I}\35I}\35I}\35I}\35I}\35I}\20L\177\20L\177\35I}\35I}\22" - "M\200\22M\200\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202\27P\203" - "\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\34R\206\34R\206\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207" - "\36S\207\36S\207\36S\207\34R\206\34R\206\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205K\312\363K\312\363\33Q\205\33Q\205\27P\203\0\0\0" - "%Q\14#Q\0%Q\0%Q\14#Q\14#Q\0%Q\14#Q\0%Q\0%Q\14#Q\14#Q\14#Q\0%Q\14#Q\0" - "%Q\0%Q\14#Q\0%Q\14#Q\2'T\2'T\2'T\2'T\14#Q\2'T\2'T\2'T\2'T\10*X\10*X\10" - "*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13" - ",Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\17.\\\17.\\\17.\\\17" - ".\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\" - "\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\15-[\15-[\15-[\15-[\15-[\15" - "-[\15-[\13,ZK\312\363K\312\363\13,Z\12+Y\12+Y\0\0\30Ey\30Ey\24Cw\30E" - "y\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\32G{\32G{\32G{\32G{\34H|\34H|\34" - "H|\34H|\34H|\35I}\34H|\35I}\35I}\35I}\35I}\20L\177\20L\177\22M\200\35" - "I}\22M\200\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202\27P\203\27" - "P\203\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\34R\206\34R\206\36S\207\36S" - "\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\36S\207\36S\207\36S\207\34R\206\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205K\312\363K\312\363\33Q\205\27P\203\27" - "P\203\0\0\14#Q\0%Q\14#Q\0%Q\14#Q\14#Q\0%Q\14#Q\14#Q\14#Q\0%Q\14#Q\14" - "#Q\0%Q\0%Q\0%Q\0%Q\14#Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X" - "\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\13,Z\13" - ",Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\17.\\\17.\\" - "\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17" - ".\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\15-[\15-[\15-[\15-[\15" - "-[\15-[\15-[\13,Z\13,Z\13,ZK\312\363K\312\363\12+Y\12+Y\12+Y\0\0\30E" - "y\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\32G{\32G{\32G{\34H|\20" - "L\177\32G{\32G{\34H|\34H|\35I}\20L\177\35I}\35I}\35I}\20L\177\20L\177" - "\20L\177\22M\200\22M\200\22M\200\24N\201\24N\201\26O\202\26O\202\26O" - "\202\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\34R\206\34R\206\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\34R\206\34R\206" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205K\312" - "\363K\312\363\27P\203\27P\203\26O\202\0\0\0%Q\0%Q\14#Q\14#Q\0%Q\0%Q\14" - "#Q\14#Q\0%Q\0%Q\0%Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\14#Q\2'T\2'T\2'T\2'T\2" - "'T\2'T\2'T\2'T\10*X\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y" - "\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15" - "-[\15-[\15-[\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17" - ".\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\" - "\15-[\15-[\15-[\15-[\15-[\15-[\15-[\13,Z\13,Z\13,Z\13,ZK\312\363K\312" - "\363\12+Y\12+Y\10*X\0\0\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\32G{" - "\30Ey\32G{\32G{\34H|\32G{\34H|\32G{\34H|\35I}\35I}\35I}\35I}\35I}\20" - "L\177\20L\177\20L\177\20L\177\22M\200\22M\200\22M\200\35I}\24N\201\26" - "O\202\26O\202\26O\202\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\34R\206\34R\206\36S\207\36S\207\36S\207\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207" - "\34R\206\34R\206\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205K\312\363K\312\363\27P\203\26O\202\26O\202\0\0\14" - "#Q\0%Q\14#Q\0%Q\14#Q\0%Q\14#Q\14#Q\0%Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\0%Q" - "\0%Q\2'T\2'T\2'T\2'T\14#Q\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10" - "*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15" - "-[\15-[\15-[\15-[\15-[\15-[\15-[\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\" - "\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17" - ".\\\17.\\\17.\\\17.\\\15-[\15-[\15-[\15-[\15-[\15-[\13,Z\13,Z\13,Z\13" - ",Z\13,Z\12+YK\312\363K\312\363\10*X\10*X\10*X\0\0\30Ey\30Ey\30Ey\30E" - "y\30Ey\30Ey\30Ey\32G{\30Ey\32G{\34H|\34H|\32G{\20L\177\34H|\34H|\20L" - "\177\35I}\34H|\35I}\35I}\20L\177\20L\177\20L\177\20L\177\22M\200\22M" - "\200\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202\27P\203" - "\27P\203\27P\203\27P\203\27P\203\33Q\205\27P\203\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\34R\206\34R\206\34R\206" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207" - "\36S\207\36S\207\36S\207\34R\206\34R\206\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\27P\203\27P\203K\312\363" - "K\312\363\26O\202\26O\202\26O\202\0\0\14#Q\0%Q\14#Q\0%Q\14#Q\0%Q\14#" - "Q\14#Q\0%Q\14#Q\14#Q\0%Q\0%Q\0%Q\0%Q\14#Q\2'T\2'T\2'T\2'T\2'T\2'T\2'" - "T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+" - "Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15" - "-[\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\" - "\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\15-[\15-[\15-" - "[\15-[\15-[\15-[\15-[\13,Z\13,Z\13,Z\13,Z\12+Y\12+Y\12+YK\312\363K\312" - "\363\10*X\10*X\10*X\0\0\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\32G{\32G{\30Ey" - "\34H|\34H|\34H|\32G{\32G{\34H|\34H|\35I}\34H|\35I}\20L\177\20L\177\20" - "L\177\35I}\20L\177\22M\200\22M\200\22M\200\24N\201\24N\201\26O\202\26" - "O\202\26O\202\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\34R\206\34R\206\36S\207\36S\207\36S\207\36S\207\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\34R\206\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\27P\203\27P\203\27P\203K\312\363K\312\363\26O\202\24N\201\24N\201" - "\0\0\14#Q\14#Q\14#Q\0%Q\14#Q\0%Q\14#Q\0%Q\0%Q\14#Q\0%Q\0%Q\0%Q\14#Q\0" - "%Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X" - "\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15" - "-[\15-[\15-[\15-[\15-[\15-[\15-[\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\" - "\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17" - ".\\\17.\\\17.\\\15-[\15-[\15-[\15-[\15-[\15-[\13,Z\13,Z\13,Z\13,Z\13" - ",Z\12+Y\12+Y\12+Y\10*XK\312\363K\312\363\10*X\10*X\10*X\0\0\30Ey\30E" - "y\30Ey\30Ey\30Ey\32G{\30Ey\30Ey\32G{\34H|\32G{\20L\177\34H|\34H|\34H" - "|\35I}\35I}\20L\177\35I}\20L\177\35I}\20L\177\20L\177\22M\200\35I}\22" - "M\200\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203" - "\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\34R\206\34R\206\34R\206\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207" - "\36S\207\34R\206\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\27P\203\27P\203\27P\203\26O\202\26O\202" - "K\312\363K\312\363\24N\201\22M\200\22M\200\0\0\14#Q\0%Q\14#Q\14#Q\0%" - "Q\14#Q\0%Q\0%Q\0%Q\14#Q\0%Q\0%Q\0%Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2" - "'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12" - "+Y\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15" - "-[\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\" - "\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\15-[\15-[\15-[\15-[\15-[\15" - "-[\13,Z\13,Z\13,Z\13,Z\13,Z\12+Y\12+Y\12+Y\10*X\10*X\10*XK\312\363K\312" - "\363\2'T\10*X\2'T\0\0\30Ey\30Ey\30Ey\30Ey\30Ey\32G{\32G{\32G{\34H|\34" - "H|\32G{\34H|\34H|\20L\177\35I}\20L\177\35I}\35I}\20L\177\20L\177\20L" - "\177\35I}\22M\200\22M\200\22M\200\24N\201\24N\201\26O\202\26O\202\26" - "O\202\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203\33Q\205\33Q\205" - "\33Q\205\33Q\205\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\34R" - "\206\34R\206\34R\206\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\36S\207\36S\207\36S\207\34R\206\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\27P\203\27P\203\27P" - "\203\27P\203\26O\202\26O\202\26O\202K\312\363K\312\363\22M\200\20L\177" - "\35I}\0\0\0%Q\14#Q\14#Q\0%Q\0%Q\0%Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\14#Q\2" - "'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*" - "X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15" - "-[\15-[\15-[\15-[\15-[\15-[\15-[\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\" - "\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\15" - "-[\15-[\15-[\15-[\15-[\15-[\13,Z\13,Z\13,Z\13,Z\13,Z\12+Y\12+Y\12+Y\12" - "+Y\10*X\10*X\10*X\10*XK\312\363K\312\363\2'T\2'T\2'T\0\0\30Ey\30Ey\32" - "G{\30Ey\32G{\32G{\34H|\32G{\34H|\34H|\34H|\32G{\35I}\35I}\34H|\35I}\35" - "I}\35I}\35I}\20L\177\20L\177\22M\200\35I}\22M\200\24N\201\24N\201\26" - "O\202\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203\27P\203\27P\203" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\34R\206\34R\206\36S\207\36S\207\36S\207\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\36S\207\36S\207\36S\207\36S\207\34R\206\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\27P\203\27P" - "\203\27P\203\27P\203\26O\202\26O\202\26O\202\24N\201\24N\201K\312\363" - "K\312\363\35I}\20L\177\35I}\0\0\14#Q\14#Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\0" - "%Q\0%Q\14#Q\0%Q\2'T\2'T\2'T\2'T\14#Q\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10" - "*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13" - ",Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\17.\\\17.\\\17.\\\17" - ".\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\" - "\17.\\\15-[\15-[\15-[\15-[\15-[\15-[\15-[\13,Z\13,Z\13,Z\13,Z\13,Z\12" - "+Y\12+Y\12+Y\10*X\10*X\10*X\10*X\10*X\10*XK\312\363K\312\363\2'T\2'T" - "\2'T\0\0\30Ey\32G{\32G{\32G{\32G{\32G{\34H|\20L\177\32G{\34H|\34H|\35" - "I}\20L\177\35I}\35I}\35I}\20L\177\20L\177\20L\177\20L\177\35I}\22M\200" - "\22M\200\24N\201\35I}\26O\202\26O\202\26O\202\26O\202\26O\202\27P\203" - "\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\34R\206\34R\206" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\27P\203\27P\203\27P\203\26O\202\26O\202\26O\202\26O\202" - "\24N\201\22M\200\22M\200K\312\363K\312\363\35I}\35I}\35I}\0\0\0%Q\0%" - "Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\0%Q\0%Q\14#Q\2'T\2'T\2'T\14#Q\2'T\2'T\2'" - "T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+" - "Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15" - "-[\15-[\15-[\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17" - ".\\\17.\\\17.\\\17.\\\17.\\\15-[\15-[\15-[\15-[\15-[\15-[\15-[\13,Z\13" - ",Z\13,Z\13,Z\13,Z\12+Y\12+Y\12+Y\10*X\10*X\10*X\10*X\10*X\10*X\2'T\2" - "'TK\312\363K\312\363\14#Q\2'T\0%Q\0\0\30Ey\30Ey\32G{\32G{\34H|\34H|\34" - "H|\32G{\34H|\34H|\20L\177\35I}\35I}\35I}\35I}\20L\177\35I}\20L\177\20" - "L\177\35I}\22M\200\22M\200\24N\201\24N\201\26O\202\26O\202\26O\202\26" - "O\202\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\34R\206\34R\206\36S\207\36S\207\36S\207\36S\207\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\34R" - "\206\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\27P\203\27P\203\27P\203\26O\202\26O\202\26O" - "\202\26O\202\24N\201\22M\200\35I}\20L\177\20L\177K\312\363K\312\363\35" - "I}\34H|\20L\177\0\0\14#Q\0%Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\0%Q\14#Q\2'T\2" - "'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10" - "*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15" - "-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\17.\\\17.\\\17.\\\17.\\\17.\\\17" - ".\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\15-[\15-[\15-[\15-[\15-[\15-" - "[\15-[\13,Z\13,Z\13,Z\13,Z\13,Z\12+Y\12+Y\12+Y\12+Y\10*X\10*X\10*X\14" - "#Q\10*X\10*X\2'T\2'T\2'TK\312\363K\312\363\0%Q\14#Q\0%Q\0\0\30Ey\32G" - "{\32G{\32G{\34H|\34H|\32G{\20L\177\34H|\34H|\35I}\35I}\35I}\35I}\35I" - "}\35I}\20L\177\35I}\20L\177\22M\200\22M\200\22M\200\24N\201\24N\201\26" - "O\202\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203\27P\203\27P\203" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\34R\206\34R\206\36S\207\36S\207" - "\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\36S" - "\207\34R\206\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\27P\203\27P\203\27P\203\26O" - "\202\26O\202\26O\202\24N\201\22M\200\22M\200\35I}\20L\177\20L\177\35" - "I}K\312\363K\312\363\32G{\34H|\32G{\0\0\0%Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%" - "Q\0%Q\0%Q\2'T\2'T\14#Q\2'T\2'T\14#Q\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10" - "*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13" - ",Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\17.\\\17.\\" - "\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\17.\\\15-[\15-[\15-[\15-[" - "\15-[\15-[\15-[\15-[\13,Z\13,Z\13,Z\13,Z\13,Z\12+Y\12+Y\12+Y\10*X\10" - "*X\10*X\10*X\10*X\10*X\2'T\2'T\2'T\2'T\2'TK\312\363K\312\363\14#Q\0%" - "Q\0%Q\0\0\30Ey\32G{\20L\177\34H|\34H|\20L\177\34H|\34H|\32G{\34H|\35" - "I}\35I}\34H|\35I}\20L\177\20L\177\20L\177\35I}\22M\200\35I}\22M\200\24" - "N\201\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203" - "\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\34R\206" - "\34R\206\34R\206\36S\207\36S\207\36S\207\36S\207\36S\207\36S\207\34R" - "\206\34R\206\34R\206\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\27P\203\27P\203\27P" - "\203\26O\202\26O\202\26O\202\26O\202\24N\201\22M\200\22M\200\35I}\20" - "L\177\20L\177\35I}\35I}K\312\363K\312\363\32G{\30Ey\30Ey\0\0\0%Q\14#" - "Q\0%Q\0%Q\0%Q\0%Q\14#Q\0%Q\2'T\2'T\14#Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10" - "*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\12+Y\13" - ",Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15" - "-[\15-[\15-[\17.\\\17.\\\17.\\\17.\\\17.\\\15-[\15-[\15-[\15-[\15-[\15" - "-[\15-[\15-[\15-[\15-[\13,Z\13,Z\13,Z\13,Z\13,Z\12+Y\12+Y\12+Y\10*X\10" - "*X\10*X\10*X\10*X\10*X\2'T\2'T\2'T\2'T\2'T\2'T\0%QK\312\363K\312\363" - "\14#Q\0%Q\0%Q\0\0\32G{\30Ey\34H|\32G{\34H|\20L\177\34H|\34H|\34H|\35" - "I}\35I}\35I}\35I}\20L\177\35I}\20L\177\20L\177\20L\177\35I}\22M\200\24" - "N\201\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203" - "\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\34R\206\34R\206\34R\206\34R\206\34R\206\34R\206\34R\206\34R\206\34R" - "\206\34R\206\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\27P\203\27P\203\35I}\26O\202" - "\26O\202\26O\202\26O\202\24N\201\22M\200\22M\200\20L\177\20L\177\35I" - "}\35I}\35I}\32G{\34H|K\312\363K\312\363\30Ey\30Ey\30Ey\0\0\14#Q\0%Q\0" - "%Q\0%Q\0%Q\0%Q\0%Q\2'T\2'T\2'T\2'T\2'T\14#Q\2'T\2'T\2'T\2'T\10*X\10*" - "X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13" - ",Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15" - "-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15" - "-[\15-[\13,Z\13,Z\13,Z\13,Z\13,Z\12+Y\12+Y\12+Y\10*X\10*X\10*X\10*X\10" - "*X\10*X\10*X\2'T\2'T\2'T\2'T\2'T\14#Q\0%Q\14#QK\312\363K\312\363\0%Q" - "\0%Q\14#Q\0\0\32G{\34H|\32G{\34H|\32G{\34H|\20L\177\35I}\20L\177\35I" - "}\35I}\35I}\35I}\20L\177\35I}\20L\177\20L\177\22M\200\22M\200\22M\200" - "\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203\27P" - "\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\34R\206\34R\206\34R\206\34R\206\34R\206\34R\206\34R\206\34R\206" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\27P\203\33Q\205\33Q\205\27P\203\27P\203\27P\203\26O\202\26O\202" - "\26O\202\26O\202\24N\201\22M\200\35I}\20L\177\20L\177\20L\177\35I}\20" - "L\177\34H|\34H|\32G{\32G{K\312\363K\312\363\30Ey\24Cw\24Cw\0\0\14#Q\0" - "%Q\14#Q\0%Q\0%Q\14#Q\0%Q\2'T\2'T\2'T\14#Q\2'T\2'T\2'T\2'T\2'T\2'T\2'" - "T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\12+Y\13" - ",Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15" - "-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15" - "-[\13,Z\13,Z\13,Z\13,Z\13,Z\12+Y\12+Y\12+Y\12+Y\10*X\10*X\10*X\10*X\10" - "*X\10*X\2'T\2'T\2'T\2'T\2'T\0%Q\0%Q\0%Q\0%Q\0%QK\312\363K\312\363\14" - "#Q\14#Q\0#O\0\0\32G{\34H|\34H|\34H|\34H|\34H|\34H|\35I}\34H|\35I}\35" - "I}\35I}\20L\177\35I}\20L\177\20L\177\22M\200\22M\200\22M\200\24N\201" - "\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203\27P" - "\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\27P\203\27P\203\27P\203\26O\202\26O\202\26O\202" - "\24N\201\24N\201\22M\200\22M\200\35I}\20L\177\35I}\35I}\35I}\32G{\34" - "H|\30Ey\30Ey\30EyK\312\363K\312\363\24Cw\24Cw\24Cw\0\0\0%Q\0%Q\0%Q\14" - "#Q\0%Q\14#Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\2'T\10*X\10" - "*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13" - ",Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15" - "-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\13,Z\13,Z\13,Z\13" - ",Z\13,Z\13,Z\12+Y\12+Y\12+Y\10*X\10*X\10*X\10*X\10*X\10*X\10*X\2'T\2" - "'T\2'T\2'T\2'T\14#Q\0%Q\14#Q\14#Q\14#Q\0%QK\312\363K\312\363\0%Q\0$P" - "\0$P\0\0\34H|\34H|\20L\177\34H|\34H|\34H|\34H|\35I}\20L\177\35I}\35I" - "}\34H|\20L\177\20L\177\35I}\20L\177\22M\200\22M\200\24N\201\24N\201\26" - "O\202\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203\27P\203\27P\203" - "\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\27P\203\27P\203\27P\203\26O\202\26O\202\26O\202\24N\201\24N\201\22M" - "\200\22M\200\35I}\35I}\35I}\35I}\35I}\32G{\34H|\32G{\32G{\30Ey\24Cw\24" - "CwK\312\363K\312\363\23Bv\23Bv\23Bv\0\0\14#Q\0%Q\0%Q\14#Q\0%Q\0%Q\2'" - "T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\14#Q\10*X\10*X\10*X" - "\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13" - ",Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15" - "-[\15-[\15-[\15-[\15-[\15-[\15-[\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\12+Y\12" - "+Y\12+Y\10*X\10*X\10*X\10*X\10*X\10*X\2'T\2'T\2'T\2'T\2'T\14#Q\0%Q\0" - "%Q\0%Q\0%Q\14#Q\0%Q\0%Q\0$PK\312\363K\312\363\0$P\0\"M\4\37M\0\0\34H" - "|\20L\177\34H|\32G{\34H|\20L\177\35I}\35I}\34H|\35I}\35I}\20L\177\20" - "L\177\20L\177\20L\177\22M\200\22M\200\22M\200\24N\201\24N\201\26O\202" - "\26O\202\26O\202\26O\202\27P\203\27P\203\27P\203\27P\203\35I}\27P\203" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\27P\203\27P\203\27P\203" - "\27P\203\26O\202\26O\202\35I}\24N\201\22M\200\22M\200\20L\177\20L\177" - "\35I}\35I}\34H|\34H|\32G{\34H|\30Ey\30Ey\30Ey\30Ey\24Cw\24CwK\312\363" - "K\312\363\23Bv\23Bv\17At\0\0\0%Q\0%Q\0%Q\0%Q\0%Q\2'T\2'T\2'T\2'T\2'T" - "\14#Q\2'T\2'T\2'T\2'T\10*X\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12" - "+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15" - "-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15" - "-[\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\12+Y\12+Y\12+Y\12+Y\10*X\10*X\10" - "*X\10*X\10*X\2'T\2'T\2'T\2'T\2'T\2'T\0%Q\14#Q\0%Q\14#Q\14#Q\0%Q\0%Q\0" - "%Q\0%Q\14#QK\312\363K\312\363\0#O\0\"M\4\37M\0\0\32G{\34H|\34H|\20L\177" - "\34H|\20L\177\35I}\35I}\34H|\35I}\35I}\35I}\20L\177\20L\177\22M\200\22" - "M\200\22M\200\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202" - "\27P\203\27P\203\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\27P\203\27P\203\27P\203\27P\203\26O\202\26O\202\26O\202\24N" - "\201\22M\200\22M\200\20L\177\20L\177\20L\177\35I}\35I}\32G{\34H|\34H" - "|\32G{\30Ey\30Ey\24Cw\24Cw\24Cw\24Cw\23BvK\312\363K\312\363\17At\15@" - "s\15@s\0\0\0%Q\0%Q\14#Q\0%Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2" - "'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\12" - "+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15" - "-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\13,Z\13,Z\13,Z\13,Z\13,Z\13" - ",Z\13,Z\12+Y\12+Y\12+Y\12+Y\10*X\10*X\10*X\10*X\10*X\10*X\2'T\2'T\2'" - "T\2'T\2'T\2'T\0%Q\14#Q\0%Q\0%Q\0%Q\0%Q\14#Q\0$P\14#Q\0#O\0\"MK\312\363" - "K\312\363\0\"M\4\37M\5\40H\0\0\34H|\32G{\34H|\32G{\32G{\35I}\34H|\35" - "I}\35I}\35I}\20L\177\20L\177\20L\177\20L\177\22M\200\22M\200\24N\201" - "\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203\27P" - "\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\27P\203\27P\203\27P" - "\203\27P\203\26O\202\26O\202\26O\202\24N\201\24N\201\22M\200\22M\200" - "\35I}\20L\177\35I}\35I}\35I}\32G{\34H|\30Ey\30Ey\30Ey\30Ey\30Ey\24Cw" - "\24Cw\23Bv\23Bv\23BvK\312\363K\312\363\15@s\11>q\11>q\0\0\0%Q\14#Q\0" - "%Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\14#Q\10*X\10" - "*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13" - ",Z\13,Z\13,Z\13,Z\13,Z\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\15" - "-[\15-[\15-[\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\12+Y\12+Y\12+Y\12+Y\10" - "*X\10*X\10*X\10*X\10*X\10*X\2'T\2'T\2'T\2'T\14#Q\2'T\14#Q\0%Q\0%Q\14" - "#Q\14#Q\0%Q\0%Q\14#Q\0$P\0#O\0#O\0\"M\0\"MK\312\363K\312\363\4\37M\5" - "\40H\0\"M\0\0\34H|\34H|\32G{\32G{\35I}\20L\177\35I}\20L\177\35I}\20L" - "\177\20L\177\20L\177\35I}\20L\177\22M\200\22M\200\24N\201\24N\201\26" - "O\202\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203\35I}\27P\203\27" - "P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\27P\203\27P\203\27P\203\27P\203\26O\202\26O\202\26O" - "\202\35I}\24N\201\35I}\22M\200\20L\177\20L\177\35I}\35I}\35I}\34H|\34" - "H|\34H|\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\17At\15@sK\312\363" - "K\312\363\11>q\11>q\11>q\0\0\0%Q\14#Q\0%Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'" - "T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12" - "+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\15-[\15" - "-[\15-[\15-[\15-[\15-[\15-[\15-[\15-[\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13" - ",Z\13,Z\12+Y\12+Y\12+Y\12+Y\10*X\10*X\10*X\10*X\10*X\10*X\10*X\2'T\2" - "'T\14#Q\2'T\2'T\0%Q\0%Q\14#Q\14#Q\14#Q\14#Q\0%Q\0$P\0%Q\14#Q\0#O\0\"" - "M\0\"M\0\"M\4\37MK\312\363K\312\363\5\40H\2\36E\5\40H\0\0\32G{\34H|\34" - "H|\20L\177\35I}\35I}\35I}\34H|\35I}\20L\177\20L\177\20L\177\20L\177\22" - "M\200\22M\200\22M\200\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202" - "\26O\202\27P\203\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\27P\203\27P\203\27P\203" - "\27P\203\26O\202\26O\202\26O\202\26O\202\24N\201\22M\200\22M\200\20L" - "\177\20L\177\20L\177\35I}\35I}\34H|\32G{\34H|\32G{\30Ey\30Ey\24Cw\24" - "Cw\24Cw\24Cw\23Bv\23Bv\23Bv\17At\17At\15@sK\312\363K\312\363\11>q\11" - ">q\6=p\0\0\0%Q\0%Q\0%Q\0%Q\2'T\14#Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10" - "*X\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+Y\13,Z\13" - ",Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13" - ",Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\12+Y\12+Y\12+Y\12+Y\10" - "*X\10*X\10*X\10*X\10*X\10*X\2'T\2'T\2'T\2'T\2'T\2'T\0%Q\0%Q\0%Q\0%Q\0" - "%Q\14#Q\0%Q\0$P\0%Q\0$P\0#O\0$P\0\"M\4\37M\4\37M\4\37M\5\40HK\312\363" - "K\312\363\5\40H\2\36E\2\36E\0\0\32G{\34H|\32G{\34H|\35I}\35I}\35I}\34" - "H|\34H|\20L\177\35I}\20L\177\20L\177\22M\200\22M\200\24N\201\24N\201" - "\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203\27P" - "\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\27P\203\27P\203\27P\203\27P\203\26O\202\26O\202\35I}\26O\202\24N\201" - "\24N\201\22M\200\22M\200\20L\177\20L\177\35I}\35I}\35I}\20L\177\34H|" - "\30Ey\30Ey\30Ey\30Ey\30Ey\24Cw\24Cw\23Bv\23Bv\23Bv\17At\15@s\15@s\11" - ">q\11>qK\312\363K\312\363\6=p\4q\11>q\11>qK\312\363K\312\363\4q\11>q\11>q\11>q\6=pK\312" - "\363K\312\363\2" - "\0\0\34H|\32G{\35I}\35I}\35I}\35I}\20L\177\20L\177\35I}\20L\177\20L\177" - "\22M\200\22M\200\22M\200\35I}\24N\201\26O\202\26O\202\26O\202\26O\202" - "\26O\202\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\27P\203\27P" - "\203\27P\203\27P\203\27P\203\26O\202\26O\202\26O\202\26O\202\26O\202" - "\24N\201\35I}\22M\200\20L\177\35I}\20L\177\34H|\35I}\35I}\32G{\34H|\30" - "Ey\32G{\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\23Bv\23Bv\17At\15@s\15@s\11>q\11" - ">q\11>q\11>q\11>q\6=p\6=pK\312\363K\312\363\0:l\2\10\32=\11\33>\0\0\32G{\34H|\35I}\35I}\35I}\35I}\20L" - "\177\20L\177\35I}\20L\177\20L\177\22M\200\22M\200\35I}\24N\201\24N\201" - "\26O\202\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203\27P\203\27P" - "\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\27P\203" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\27P\203\27P\203\27P\203\27P\203\27P\203\26O\202\26O\202\26O\202" - "\35I}\26O\202\24N\201\24N\201\22M\200\22M\200\20L\177\20L\177\35I}\20" - "L\177\35I}\32G{\32G{\32G{\30Ey\30Ey\24Cw\24Cw\24Cw\24Cw\23Bv\23Bv\23" - "Bv\23Bv\17At\15@s\15@s\11>q\11>q\11>q\11>q\6=p\6=p\4K\312\363K\312\363\11\33>\10\32=\0" - "\34C\0\0\34H|\34H|\34H|\34H|\35I}\35I}\35I}\35I}\20L\177\20L\177\22M" - "\200\35I}\22M\200\24N\201\24N\201\24N\201\26O\202\26O\202\26O\202\26" - "O\202\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203" - "\26O\202\26O\202\26O\202\26O\202\26O\202\24N\201\24N\201\22M\200\22M" - "\200\20L\177\20L\177\35I}\35I}\35I}\34H|\32G{\32G{\30Ey\30Ey\30Ey\24" - "Cw\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\17At\15@s\15@s\11>q\11>q\11>q\11>q\6" - "=p\6=p\2q\11>q\11>q\11>q\6=p\4\0\34C\10\32=\11\33>K\312\363K\312\363\10\32=\0\32:\0\32:\0\0" - "\34H|\34H|\20L\177\35I}\35I}\35I}\20L\177\20L\177\35I}\20L\177\22M\200" - "\22M\200\24N\201\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202\26O" - "\202\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203" - "\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P" - "\203\27P\203\27P\203\27P\203\27P\203\26O\202\26O\202\26O\202\26O\202" - "\26O\202\24N\201\24N\201\22M\200\22M\200\22M\200\35I}\20L\177\35I}\34" - "H|\35I}\32G{\34H|\32G{\32G{\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\23Bv\23Bv\23" - "Bv\17At\15@s\15@s\11>q\11>q\11>q\11>q\6=p\4\11\33>\10\32=K\312" - "\363K\312\363\0\32:\10\32=\5\30:\0\0\34H|\34H|\35I}\35I}\35I}\20L\177" - "\20L\177\20L\177\35I}\22M\200\22M\200\22M\200\24N\201\24N\201\24N\201" - "\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203\27P" - "\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203" - "\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\26O\202\26O" - "\202\26O\202\26O\202\26O\202\24N\201\24N\201\22M\200\22M\200\22M\200" - "\20L\177\20L\177\20L\177\20L\177\35I}\34H|\32G{\34H|\32G{\30Ey\30Ey\30" - "Ey\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\17At\15@s\15@s\15@s\11>q\11>q\11>q\6" - "=p\4\10\32=\11\33>\0\34C\10\32=\10\32=K\312\363K\312\363\0\32:\5" - "\30:\5\30:\0\0\34H|\35I}\35I}\35I}\35I}\20L\177\35I}\20L\177\35I}\22" - "M\200\22M\200\24N\201\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202" - "\26O\202\26O\202\26O\202\27P\203\35I}\27P\203\27P\203\27P\203\27P\203" - "\27P\203\27P\203\35I}\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203" - "\27P\203\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\24N\201\24N" - "\201\22M\200\22M\200\20L\177\20L\177\35I}\35I}\35I}\35I}\34H|\32G{\34" - "H|\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\11" - ">q\11>q\11>q\11>q\6=p\4\0\34C\11\33>\10\32=\0\32:\10\32=\10\32=\10\32=\0\32" - ":K\312\363K\312\363\5\30:\5\30:\0\32:\0\0\35I}\34H|\35I}\35I}\20L\177" - "\35I}\20L\177\35I}\22M\200\22M\200\35I}\24N\201\24N\201\26O\202\26O\202" - "\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\27P\203\27P" - "\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203" - "\27P\203\27P\203\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O" - "\202\35I}\24N\201\22M\200\35I}\22M\200\20L\177\35I}\35I}\20L\177\35I" - "}\34H|\34H|\34H|\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\17" - "At\15@s\15@s\11>q\376\377\374\376\377\374\376\377\374^\203\243\6=p\6" - "=p\2\0\34C\0\32:\10\32=\11\33>\10\32=\10\32=\10\32=\0\32:\0\32:K" - "\312\363K\312\363\5\31""6\0\32:\0\32:\0\0\35I}\20L\177\35I}\35I}\20L" - "\177\35I}\20L\177\20L\177\22M\200\35I}\22M\200\24N\201\24N\201\26O\202" - "\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O" - "\202\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\26O\202" - "\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\24N" - "\201\24N\201\22M\200\22M\200\22M\200\20L\177\35I}\20L\177\20L\177\35" - "I}\34H|\34H|\32G{\32G{\32G{\30Ey\30Ey\30Ey\24Cw\24Cw\23Bv\23Bv\23Bv\23" - "Bv\17At\15@s\15@s\11>q\11>q\326\336\347\376\377\374\376\377\3745_\211" - "\2\0\34C\0\34C\0\32:\0\32:\10\32=\10\32=\10\32=\0\32:" - "\0\32:\5\30:\5\30:K\312\363K\312\363\0\32:\0\32:\5\31""6\0\0\34H|\35" - "I}\34H|\35I}\35I}\20L\177\35I}\20L\177\22M\200\22M\200\22M\200\24N\201" - "\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O" - "\202\35I}\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26" - "O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\24N\201" - "\24N\201\22M\200\22M\200\35I}\20L\177\20L\177\35I}\35I}\35I}\34H|\34" - "H|\20L\177\34H|\32G{\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\17" - "At\15@s\15@s\11>q\11>q\11>q\11>q\36Ky\331\342\352\376\377\374\363\370" - "\373`|\235\0:l\0:l\0:l\21""9f\17""8e\17""8e\17""8e\17""8e\13""6c\10""4" - "a\10""4a\10""4aK\312\363K\312\363\10""4a\6""3`\4""3_\0\0\2'T\2'T\2'T" - "\2'T\2'T\2'T\2'T\10*X\2'T\10*X\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*" - "X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10" - "*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\2'T\2'T\2'T\2'T\2'T\14" - "#Q\0%Q\0%Q\0%Q\0%Q\0%Q\14#Q\14#Q\0%Q\14#Q\0%Q\0#O\0$P\0\"M\0\"M\0\"M" - "\4\37M\0\"M\5\40H\5\40H\2\36E\2\36E\213\232\255\235\251\266\367\375\377" - "\376\377\374\376\377\374\325\332\334\235\251\266\216\232\247\215\230" - "\245\215\230\245\210\227\252\215\230\245\215\230\245\215\230\245\5\30" - ":\5\30:\5\30:K\312\363K\312\363\0\32:\5\31""6\5\31""6\0\0\35I}\20L\177" - "\35I}\20L\177\20L\177\20L\177\35I}\22M\200\22M\200\22M\200\24N\201\24" - "N\201\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202" - "\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O" - "\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\24N\201\24N\201" - "\22M\200\22M\200\22M\200\35I}\20L\177\20L\177\35I}\34H|\35I}\34H|\32" - "G{\34H|\30Ey\32G{\30Ey\30Ey\24Cw\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\17At\15" - "@s\15@s\11>q\11>q\11>q\11>q\6=p\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\10""4a\10" - "4a\10""4aK\312\363K\312\363\11""6]\6""3`\6""3`\0\0\2'T\2'T\2'T\2'T\2" - "'T\2'T\2'T\2'T\10*X\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X" - "\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10" - "*X\10*X\10*X\10*X\10*X\2'T\10*X\2'T\2'T\2'T\14#Q\2'T\2'T\2'T\14#Q\0%" - "Q\14#Q\0%Q\14#Q\0%Q\0%Q\14#Q\0$P\14#Q\0$P\0#O\0\"M\4\37M\4\37M\4\37M" - "\5\40H\0\"M\2\36E\5\40H\2\36E\2\36E\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\5\30" - ":\0\32:\0\32:K\312\363K\312\363\5\31""6\0\32:\5\31""6\0\0\34H|\35I}\35" - "I}\20L\177\20L\177\35I}\20L\177\22M\200\22M\200\22M\200\24N\201\24N\201" - "\26O\202\26O\202\26O\202\26O\202\35I}\26O\202\26O\202\26O\202\26O\202" - "\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O" - "\202\26O\202\26O\202\26O\202\24N\201\24N\201\24N\201\22M\200\22M\200" - "\20L\177\35I}\35I}\35I}\35I}\35I}\34H|\32G{\34H|\34H|\32G{\30Ey\30Ey" - "\30Ey\30Ey\24Cw\24Cw\23Bv\23Bv\23Bv\17At\15@s\15@s\15@s\11>q\11>q\11" - ">q\11>q\6=p\4q\11>q\11>q\11>q\6=" - "p\6=p\4\10\32=\0\32:\10\32=\10\32=\0\32:\0\32:\10" - "\32=\5\30:\5\30:\5\30:\0\32:\0\32:\0\32:\5\31""6K\312\363K\312\363\5" - "\31""6\5\31""6\4\30""5\0\0\34H|\20L\177\20L\177\20L\177\20L\177\20L\177" - "\22M\200\22M\200\22M\200\24N\201\24N\201\24N\201\26O\202\26O\202\26O" - "\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202" - "\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\24N\201\24N\201\24N" - "\201\22M\200\22M\200\22M\200\35I}\20L\177\35I}\35I}\20L\177\35I}\35I" - "}\34H|\20L\177\34H|\32G{\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\23Bv\23Bv\23B" - "v\23Bv\17At\15@s\15@s\11>q\11>q\11>q\11>q\6=p\6=p\2\0\34" - "C\0\32:\11\33>6Kk\235\251\266\333\340\343\362\367\371\362\367\371\326" - "\336\347\235\251\2669Id\0\32:\0\32:\0\32:\5\31""6\5\31""6\5\31""6K\312" - "\363K\312\363\5\31""6\4\30""5\4\30""5\0\0\35I}\20L\177\35I}\20L\177\20" - "L\177\22M\200\22M\200\22M\200\22M\200\24N\201\24N\201\24N\201\26O\202" - "\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O" - "\202\26O\202\26O\202\26O\202\26O\202\26O\202\24N\201\24N\201\24N\201" - "\24N\201\22M\200\22M\200\20L\177\20L\177\20L\177\20L\177\34H|\35I}\35" - "I}\34H|\32G{\34H|\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\24Cw\24Cw\23Bv\23Bv\23" - "Bv\17At\15@s\15@s\11>q\11>q\11>q\11>q\11>q\6=p\4\10\32=\205\224" - "\247\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\210\224\241" - "\0\32:\5\31""6\5\31""6\5\31""6K\312\363K\312\363\4\30""5\4\30""5\4\30" - "5\0\0\35I}\20L\177\20L\177\20L\177\22M\200\22M\200\22M\200\35I}\24N\201" - "\24N\201\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202\26O" - "\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\24N\201" - "\24N\201\24N\201\24N\201\22M\200\22M\200\20L\177\35I}\20L\177\20L\177" - "\34H|\35I}\35I}\34H|\34H|\32G{\32G{\32G{\30Ey\30Ey\30Ey\24Cw\24Cw\24" - "Cw\23Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\11>q\11>q\11>q\11>q\6=p\4q\11>q\11>q\11>q\6=p\4\0\34C\0\34C\0\32:\10\32=\10\32=\353\360" - "\363\376\377\374\376\377\374M_u\0\32:\5\30:\5\30:\5\30:\0\32:\0\32:M" - "_u\376\377\374\376\377\374\354\362\364\5\31""6\5\31""6\5\31""6K\312\363" - "K\312\363\4\30""5\4\30""5\4\30""5\0\0\20L\177\35I}\20L\177\22M\200\22" - "M\200\22M\200\22M\200\22M\200\24N\201\24N\201\24N\201\24N\201\26O\202" - "\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\24N" - "\201\35I}\24N\201\24N\201\22M\200\35I}\22M\200\22M\200\20L\177\35I}\20" - "L\177\35I}\20L\177\35I}\35I}\20L\177\34H|\34H|\32G{\30Ey\30Ey\30Ey\24" - "Cw\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\17At\15@s\15@s\11>q\11>q\11>q\11>q\11" - ">q\6=p\6=p\2q\11>q\11>q\11>q\6=p\4\0\34C\0\32:\10\32=\10\32=\10\32=\10\32=\215\230" - "\245\376\377\374\376\377\374\376\377\374\370\372\367\267\277\307\222" - "\236\253\222\236\253\267\277\307\370\372\367\376\377\374\376\377\374" - "\376\377\374\215\230\245\5\31""6\0\32:\5\31""6K\312\363K\312\363\5\31" - "6\5\31""6\0\32:\0\0\20L\177\20L\177\35I}\22M\200\22M\200\24N\201\24N" - "\201\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201" - "\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\22M\200\22M\200\35I" - "}\22M\200\20L\177\20L\177\20L\177\20L\177\35I}\35I}\35I}\35I}\32G{\34" - "H|\34H|\30Ey\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\17At\17" - "At\15@s\15@s\15@s\11>q\11>q\11>q\6=p\6=p\4\0\34C\10\32=\10\32" - "=\0\34C\10\32=\10\32=\0\32:\0\32:\201\220\242\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\206\222\237\5\31""6\5\31""6\5\31""6\5\31" - "6K\312\363K\312\363\5\31""6\5\31""6\5\31""6\0\0\20L\177\20L\177\22M\200" - "\22M\200\22M\200\24N\201\24N\201\24N\201\35I}\24N\201\24N\201\24N\201" - "\24N\201\24N\201\24N\201\24N\201\35I}\24N\201\24N\201\24N\201\22M\200" - "\22M\200\22M\200\22M\200\35I}\20L\177\20L\177\20L\177\35I}\20L\177\34" - "H|\35I}\34H|\32G{\34H|\30Ey\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\24Cw\23Bv\24" - "Cw\23Bv\17At\15@s\15@s\15@s\11>q\11>q\11>q\11>q\6=p\6=p\4\11\33>\10\32=\10\32=\10\32=\0\32:\0\32:\10\32=\5\30:\0\32:9" - "Id\235\251\266\333\340\343\363\370\373\370\372\367\333\340\343\235\251" - "\2668K`\5\31""6\5\31""6\5\31""6\5\31""6\5\31""6\5\31""6K\312\363K\312" - "\363\5\31""6\5\31""6\5\31""6\0\0\22M\200\22M\200\22M\200\22M\200\35I" - "}\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\24" - "N\201\24N\201\24N\201\24N\201\22M\200\22M\200\22M\200\35I}\22M\200\35" - "I}\20L\177\20L\177\20L\177\20L\177\20L\177\35I}\35I}\32G{\34H|\32G{\30" - "Ey\32G{\30Ey\30Ey\24Cw\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\17At\15@s\15" - "@s\11>q\11>q\11>q\11>q\11>q\6=p\4\10\32=\11\33>\0\34C\10\32=\0\32:\0\32:\0\32:\10\32=\5" - "\30:\5\30:\5\30:\5\30:\0\32:\5\31""6\0\32:\0\32:\5\31""6\5\31""6\5\31" - "6\5\31""6\5\31""6\5\31""6\5\31""6\5\31""6\5\31""6K\312\363K\312\363\5" - "\31""6\5\31""6\5\31""6\0\0\22M\200\22M\200\22M\200\22M\200\24N\201\24" - "N\201\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201" - "\24N\201\24N\201\22M\200\22M\200\22M\200\22M\200\35I}\20L\177\20L\177" - "\20L\177\20L\177\34H|\35I}\34H|\35I}\20L\177\34H|\34H|\32G{\30Ey\30E" - "y\24Cw\24Cw\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\11>q\15" - "@s\11>q\11>q\11>q\4\10\32=\11\33>\0\32:\10\32=\0\34C\10\32=\10\32" - "=\0\32:\0\32:\5\30:\376\377\374\376\377\374\376\377\374%6P\0\32:\0\32" - ":\5\31""6\0\32:\5\31""6\5\31""6%6P\376\377\374\376\377\374\376\377\374" - "\5\31""6\5\31""6\5\31""6K\312\363K\312\363\5\31""6\0\32:\5\31""6\0\0" - "\22M\200\22M\200\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\24N" - "\201\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\22M\200\22M\200" - "\35I}\22M\200\35I}\20L\177\20L\177\20L\177\20L\177\20L\177\35I}\20L\177" - "\34H|\32G{\34H|\32G{\30Ey\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\24Cw\23Bv\23" - "Bv\23Bv\17At\17At\15@s\15@s\11>q\11>q\11>q\11>q\6=p\6=p\4\10" - "\32=\11\33>\0\34C\10\32=\0\34C\0\32:\0\32:\0\32:\5\30:\5\30:\376\377" - "\374\376\377\374\376\377\374%6P\5\31""6\0\32:\0\32:\0\32:\0\32:\5\31" - "6;Nc\376\377\374\376\377\374\376\377\374\5\31""6\0\32:\0\32:K\312\363" - "K\312\363\0\32:\5\31""6\0\32:\0\0\22M\200\22M\200\24N\201\24N\201\24" - "N\201\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201" - "\24N\201\22M\200\22M\200\35I}\22M\200\20L\177\20L\177\20L\177\20L\177" - "\20L\177\35I}\34H|\35I}\20L\177\34H|\32G{\34H|\32G{\30Ey\30Ey\30Ey\24" - "Cw\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\17At\15@s\15@s\15@s\11>q\11>q\11>q\11" - ">q\6=p\6=p\4\0\34C\11\33>\0\32:\11\33>\0\34C\10\32=\10\32=\0\32:\0\32" - ":\215\230\245\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\343\350\353\0\32:\5\31""6\0\32:K\312\363K\312\363\5\30:\5\30:\5\30:" - "\0\0\22M\200\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201" - "\35I}\24N\201\24N\201\24N\201\22M\200\22M\200\22M\200\22M\200\22M\200" - "\20L\177\20L\177\20L\177\20L\177\35I}\35I}\35I}\20L\177\34H|\32G{\34" - "H|\20L\177\32G{\30Ey\30Ey\24Cw\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\17" - "At\15@s\15@s\17At\11>q\11>q\11>q\11>q\6=p\4\0\34C\11\33>\10" - "\32=\0\32:\11\33>\10\32=\0\34C\10\32=\0\32:\10\32=\0\32:\215\230\245" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\370\372\3675Mg\0\32:\5\31" - "6\0\32:K\312\363K\312\363\5\30:\5\30:\5\30:\0\0\24N\201\24N\201\24N\201" - "\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\22M" - "\200\22M\200\35I}\22M\200\22M\200\20L\177\20L\177\35I}\20L\177\34H|\35" - "I}\35I}\35I}\34H|\20L\177\34H|\32G{\32G{\30Ey\30Ey\30Ey\30Ey\24Cw\24" - "Cw\23Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\15@s\11>q\11>q\11>q\11>q\6=p\6" - "=p\4" - "\11\33>\0\32:\11\33>\10\32=\10\32=\10\32=\0\32:\10\32=\0\32:\0\32:\5" - "\30:\5\30:\5\30:\5\30:\376\377\374\376\377\374\376\377\374%6P\0\32:\4" - "\30""5\0\32:\5\31""6\0\32:\0\32:\0\32:\5\31""6\0\32:\5\31""6\0\32:\5" - "\30:\0\32:K\312\363K\312\363\5\30:\0\32:\10\32=\0\0\24N\201\24N\201\24" - "N\201\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\22M\200\22M\200" - "\35I}\22M\200\22M\200\22M\200\20L\177\20L\177\20L\177\20L\177\20L\177" - "\35I}\34H|\35I}\34H|\32G{\34H|\30Ey\32G{\30Ey\30Ey\30Ey\24Cw\24Cw\24" - "Cw\24Cw\23Bv\23Bv\23Bv\17At\15@s\15@s\11>q\11>q\11>q\11>q\11>q\6=p\6" - "=p\4\10\32=\11\33>\10\32=\10\32=\10\32=\0\34C\0\32:\0\32:\0\32:\5" - "\30:\5\30:\5\30:\5\30:\5\30:\5\30:\5\30:\5\30:\0\32:\0\32:\0\32:\5\31" - "6\0\32:\5\31""6\0\32:\0\32:\0\32:\5\30:\5\30:\5\30:\5\30:\5\30:K\312" - "\363K\312\363\0\32:\10\32=\0\34C\0\0\24N\201\24N\201\24N\201\24N\201" - "\24N\201\24N\201\24N\201\24N\201\24N\201\22M\200\22M\200\22M\200\22M" - "\200\35I}\20L\177\20L\177\20L\177\20L\177\20L\177\35I}\35I}\35I}\20L" - "\177\34H|\34H|\30Ey\32G{\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\23Bv\23Bv\23B" - "v\23Bv\17At\15@s\15@s\11>q\11>q\11>q\11>q\11>q\6=p\4\0\34C\10\32=\10\32=\0\32:\0\32:\10\32=\10\32=\214\227\244\214\227" - "\244\214\227\244\30'F\5\30:\214\227\244\214\227\244\214\227\244\214\227" - "\244\214\227\244\214\227\244\214\227\244\214\227\244\214\227\244\214" - "\227\244\214\227\244\214\227\244\214\227\244\214\227\244\5\30:\0\32:" - "\10\32=K\312\363K\312\363\10\32=\10\32=\0\34C\0\0\35I}\24N\201\24N\201" - "\24N\201\24N\201\24N\201\24N\201\24N\201\22M\200\22M\200\22M\200\22M" - "\200\35I}\20L\177\20L\177\20L\177\20L\177\35I}\35I}\35I}\35I}\34H|\20" - "L\177\34H|\30Ey\32G{\30Ey\30Ey\24Cw\30Ey\24Cw\24Cw\23Bv\23Bv\24Cw\23" - "Bv\17At\15@s\15@s\11>q\15@s\11>q\11>q\11>q\6=p\6=p\4\10" - "\32=\11\33>\10\32=\0\34C\10\32=\10\32=\10\32=\0\32:\0\32:\0\32:\10\32" - "=\376\377\374\376\377\374\376\377\374\37""6U\5\30:\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\0\32:\10\32=\10\32=K\312\363K\312\363\10\32=\0\32:\11\33" - ">\0\0\24N\201\24N\201\24N\201\24N\201\24N\201\24N\201\22M\200\22M\200" - "\22M\200\22M\200\35I}\20L\177\20L\177\20L\177\20L\177\35I}\35I}\35I}" - "\35I}\34H|\34H|\32G{\34H|\30Ey\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\24Cw\24" - "Cw\23Bv\23Bv\23Bv\17At\15@s\15@s\11>q\11>q\11>q\11>q\11>q\6=p\4\11\33>\10\32=\10\32=\0\34C\10\32=\0\34C\10\32=\10\32=" - "\10\32=\0\32:\10\32=\0\32:\376\377\374\376\377\374\376\377\374\37""6" - "U\5\30:\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\0\32:\10\32=\0\34CK\312\363K\312" - "\363\0\32:\0\32:\0\34C\0\0\24N\201\24N\201\24N\201\24N\201\24N\201\24" - "N\201\22M\200\22M\200\35I}\22M\200\20L\177\20L\177\20L\177\35I}\20L\177" - "\35I}\20L\177\35I}\35I}\32G{\34H|\34H|\30Ey\30Ey\30Ey\30Ey\24Cw\30Ey" - "\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\11>q\11>q\11>q\11>q\11" - ">q\6=p\4\0\34C\0\34C\0\0\24N\201" - "\24N\201\24N\201\24N\201\24N\201\24N\201\22M\200\22M\200\22M\200\22M" - "\200\35I}\20L\177\35I}\20L\177\35I}\34H|\35I}\35I}\34H|\34H|\34H|\30" - "Ey\30Ey\30Ey\30Ey\30Ey\30Ey\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\17At\15@s\15" - "@s\11>q\11>q\11>q\11>q\11>q\6=p\6=p\4\10\32=\10\32" - "=\10\32=\0\34C\10\32=\10\32=\10\32=\10\32=\0\32:\0\32:\10\32=\0\32:\0" - "\32:\5\30:\5\30:\5\30:\5\30:\5\30:\5\30:\0\32:\0\32:\10\32=\0\32:\10" - "\32=\10\32=\0\32:\10\32=\10\32=\10\32=\10\32=\0\32:\11\33>\0\32:K\312" - "\363K\312\363\0\34C\0\35D\0\35D\0\0\24N\201\24N\201\24N\201\24N\201\24" - "N\201\22M\200\22M\200\22M\200\22M\200\35I}\20L\177\20L\177\20L\177\35" - "I}\35I}\35I}\35I}\34H|\32G{\34H|\30Ey\30Ey\30Ey\30Ey\30Ey\24Cw\24Cw\24" - "Cw\23Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\15@s\11>q\11>q\11>q\11>q\11>q\6" - "=p\6=p\4\0\32:\10\32=\0\34C\10\32" - "=\0\34C\10\32=\10\32=\10\32=\0\32:\0\32:\10\32=\10\32=\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\10\32=\11\33>\0\34CK\312\363K\312\363\0\35D\2\36E\2\36E\0\0" - "\24N\201\24N\201\24N\201\22M\200\22M\200\22M\200\22M\200\22M\200\20L" - "\177\20L\177\35I}\20L\177\35I}\35I}\35I}\34H|\34H|\32G{\34H|\30Ey\30" - "Ey\30Ey\30Ey\24Cw\30Ey\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\15" - "@s\11>q\15@s\11>q\11>q\11>q\6=p\6=p\4\0\32:\11" - "\33>\11\33>\10\32=\0\34C\10\32=\10\32=\10\32=\0\32:\10\32=\10\32=\0\32" - ":\10\32=\0\32:\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\0\34C\11\33>\0\35DK\312\363K\312" - "\363\2\36E\2\36E\5\40H\0\0\24N\201\24N\201\24N\201\22M\200\22M\200\22" - "M\200\22M\200\20L\177\20L\177\20L\177\20L\177\35I}\20L\177\35I}\35I}" - "\20L\177\34H|\20L\177\30Ey\30Ey\30Ey\30Ey\24Cw\30Ey\24Cw\24Cw\23Bv\23" - "Bv\23Bv\23Bv\17At\15@s\15@s\15@s\11>q\11>q\11>q\11>q\11>q\6=p\4q\11>q\0\0\10*X\10*X\10*X\10" - "*X\2'T\10*X\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\0%Q\0%Q\0%Q\0%Q\0%Q\0%Q\14" - "#Q\0%Q\0%Q\14#Q\0$P\0%Q\0$P\0#O\0\"M\0\"M\4\37M\4\37M\0\"M\4\37M\5\40" - "H\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\0\35D\0\35D\0\35D\11\33>\0\34C" - "\0\34C\11\33>\11\33>\11\33>\10\32=\10\32=\10\32=\0\34C\10\32=\10\32=" - "\10\32=\0\32:\10\32=\10\32=\0\32:\10\32=\0\32:\10\32=\0\32:\0\32:\0\32" - ":\0\32:\10\32=Pcy\370\372\367\367\375\377\200\217\241*\77_\5\40H\5!C" - "-Cb\201\220\242\370\372\367\367\375\377w\206\231\0\34C\0\35D\0\35D\0" - "\35DK\312\363K\312\363\5\40H\2\36E\2\36E\0\0\24N\201\24N\201\24N\201" - "\22M\200\22M\200\22M\200\20L\177\20L\177\20L\177\20L\177\34H|\35I}\35" - "I}\35I}\32G{\34H|\34H|\30Ey\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\24Cw\23Bv\23" - "Bv\23Bv\23Bv\17At\15@s\15@s\15@s\11>q\11>q\11>q\11>q\11>q\6=p\6=p\6=" - "p\2q\11>q\11>q\0\0\10*X\10*" - "X\10*X\10*X\10*X\10*X\2'T\2'T\2'T\2'T\2'T\2'T\2'T\0%Q\0%Q\14#Q\0%Q\0" - "%Q\14#Q\14#Q\14#Q\0%Q\0$P\0%Q\0$P\0$P\0\"M\0\"M\0\"M\4\37M\4\37M\0\"" - "M\4\37M\5\40H\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\0\35D\0\35D\0" - "\35D\0\34C\0\34C\0\34C\10\32=\0\32:\0\32:\11\33>\0\32:\10\32=\10\32=" - "\10\32=\10\32=\10\32=\0\34C\0\32:\10\32=\10\32=\0\32:\10\32=\10\32=\0" - "\32:\10\32=\10\32=\0\34C\247\262\300\376\377\374\376\377\374*\77_\10" - "\32=\11\33>\11\33>\10\32=\0\32:\0\34C*\77_\376\377\374\376\377\374\275" - "\305\315\0\35D\2\36E\2\36EK\312\363K\312\363\2\36E\5\40H\5\40H\0\0\24" - "N\201\24N\201\22M\200\22M\200\22M\200\20L\177\20L\177\35I}\20L\177\34" - "H|\35I}\35I}\35I}\20L\177\32G{\34H|\32G{\30Ey\30Ey\30Ey\30Ey\24Cw\24" - "Cw\24Cw\23Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\15@s\11>q\11>q\11>q\11>q\11" - ">q\6=p\6=p\4q\11>q\15@s\0\0" - "\10*X\10*X\10*X\2'T\10*X\2'T\2'T\2'T\2'T\2'T\14#Q\2'T\2'T\0%Q\0%Q\14" - "#Q\0%Q\0%Q\14#Q\0%Q\0%Q\0%Q\0$P\0%Q\0$P\0#O\0\"M\14#Q\0\"M\0\"M\4\37" - "M\4\37M\5\40H\5\40H\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\0\35D\0\35D\0" - "\35D\0\34C\0\34C\0\34C\11\33>\10\32=\0\32:\10\32=\0\32:\10\32=\0\34C" - "\10\32=\10\32=\10\32=\10\32=\10\32=\10\32=\0\34C\10\32=\0\34C\10\32=" - "\10\32=\0\34C\10\32=\10\32=\10\32=\365\372\375\376\377\374\376\377\374" - "\307\317\330\30""0N\0\32:\11\33>\11\33>\0\34C\30""0N\307\317\330\376" - "\377\374\376\377\374\370\372\367\2\36E\2\36E\2\36EK\312\363K\312\363" - "\5\40H\0\"M\4\37M\0\0\24N\201\22M\200\22M\200\22M\200\22M\200\35I}\20" - "L\177\35I}\35I}\35I}\35I}\35I}\20L\177\34H|\32G{\32G{\32G{\30Ey\30Ey" - "\30Ey\30Ey\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\17At\17At\15@s\15@s\11>q\11" - ">q\11>q\11>q\11>q\11>q\6=p\4q\11>qK\312\363K\312\363\15@s\15" - "@s\15@s\0\0\10*X\10*X\10*X\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\14#Q\0" - "%Q\14#Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\0$P\14#Q\0#O\0#O\0\"M\0#O\4\37M\4\37" - "M\4\37M\4\37M\5\40H\5\40H\5\40H\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\0" - "\35D\0\35D\0\35D\0\34C\11\33>\0\34C\11\33>\0\32:\11\33>\0\32:\10\32=" - "\0\32:\10\32=\10\32=\10\32=\10\32=\10\32=\10\32=\0\34C\10\32=\10\32=" - "\0\34C\10\32=\0\34C\0\34C\10\32=\10\32=\10\32=\205\224\247\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\210" - "\227\252\2\36E\2\36E\2\36EK\312\363K\312\363\4\37M\4\37M\4\37M\0\0\22" - "M\200\22M\200\22M\200\22M\200\20L\177\20L\177\20L\177\35I}\35I}\35I}" - "\35I}\34H|\34H|\32G{\32G{\30Ey\30Ey\30Ey\24Cw\30Ey\24Cw\24Cw\23Bv\23" - "Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6" - "=p\4q\11" - ">q\11>qK\312\363K\312\363\15@s\17At\23Bv\0\0\10*X\2'T\10*X\10*X\2'T\2" - "'T\2'T\2'T\14#Q\2'T\2'T\0%Q\14#Q\0%Q\14#Q\14#Q\0%Q\0%Q\0%Q\0%Q\0$P\14" - "#Q\0$P\0$P\14#Q\0\"M\0\"M\0\"M\4\37M\4\37M\5\40H\5\40H\5\40H\5\40H\2" - "\36E\5\40H\2\36E\2\36E\2\36E\0\35D\0\35D\0\35D\11\33>\0\34C\0\34C\0\34" - "C\0\32:\11\33>\0\32:\10\32=\0\32:\11\33>\10\32=\0\34C\10\32=\10\32=\0" - "\34C\10\32=\0\34C\10\32=\10\32=\0\34C\10\32=\10\32=\10\32=\11\33>\0\32" - ":\10\32=\11\33>\34""4R\307\317\330\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\307\317" - "\330\33""9]\2\36E\2\36E\5\40H\5\40HK\312\363K\312\363\4\37M\0\"M\0\"" - "M\0\0\22M\200\22M\200\22M\200\20L\177\20L\177\35I}\20L\177\34H|\35I}" - "\35I}\32G{\34H|\34H|\32G{\30Ey\30Ey\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\23" - "Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\15@s\11>q\11>q\11>q\11>q\11>q\6=p\6" - "=p\6=p\4q\11>q\11>q\11>q\15@sK\312\363K\312\363\23Bv\23Bv\23Bv\0\0\2" - "'T\10*X\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\0%Q\14#Q\0%Q\14#Q\0%Q\14#Q\14" - "#Q\0%Q\0%Q\14#Q\0$P\0$P\0$P\0$P\0\"M\4\37M\0\"M\0\"M\4\37M\5\40H\5\40" - "H\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\0\35D\0\35D\0\35D\11\33>" - "\0\34C\0\34C\0\34C\0\34C\0\32:\11\33>\11\33>\10\32=\0\32:\10\32=\11\33" - ">\0\32:\10\32=\10\32=\0\34C\0\34C\10\32=\10\32=\10\32=\0\32:\10\32=\10" - "\32=\10\32=\11\33>\0\32:\0\32:\10\32=\0\34C\0\34C\0\34C\0\34C\0\35D\0" - "\35D\0\35D\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\5\40H\5\40H\4\37MK\312" - "\363K\312\363\14#Q\0$P\0$P\0\0\22M\200\22M\200\22M\200\35I}\20L\177\20" - "L\177\35I}\20L\177\35I}\32G{\34H|\34H|\34H|\32G{\30Ey\30Ey\30Ey\30Ey" - "\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\15@s\11>q\11>q\11" - ">q\11>q\11>q\11>q\6=p\6=p\4q\11>q\11>q\11>q\15@s\15@s\15@s" - "K\312\363K\312\363\23Bv\23Bv\24Cw\0\0\10*X\2'T\2'T\2'T\2'T\2'T\2'T\2" - "'T\2'T\0%Q\0%Q\14#Q\0%Q\14#Q\14#Q\14#Q\0%Q\14#Q\0%Q\14#Q\0#O\0#O\0$P" - "\0\"M\0#O\4\37M\4\37M\0\"M\5\40H\5\40H\5\40H\2\36E\5\40H\2\36E\5\40H" - "\2\36E\2\36E\2\36E\0\35D\0\35D\0\35D\11\33>\0\34C\0\34C\11\33>\0\34C" - "\11\33>\10\32=\11\33>\10\32=\0\32:\11\33>\0\32:\10\32=\10\32=\11\33>" - "\11\33>\0\32:\10\32=\11\33>\10\32=\0\32:\10\32=\0\32:\10\32=\11\33>\0" - "\34C\11\33>\0\34C\11\33>\0\34C\0\35D\0\35D\0\35D\2\36E\2\36E\2\36E\2" - "\36E\2\36E\5\40H\5\40H\4\37M\4\37M\4\37M\0\"MK\312\363K\312\363\0$P\14" - "#Q\14#Q\0\0\22M\200\20L\177\35I}\20L\177\20L\177\35I}\35I}\20L\177\35" - "I}\32G{\34H|\32G{\32G{\30Ey\30Ey\24Cw\24Cw\24Cw\24Cw\24Cw\23Bv\23Bv\23" - "Bv\23Bv\17At\15@s\15@s\15@s\11>q\15@s\11>q\11>q\11>q\11>q\6=p\4q\6=p\11>q\11>q%P\177\313\327\345\320\331\341\313\327\345\15@s" - "\17At\23BvK\312\363K\312\363\23Bv\24Cw\24Cw\0\0\10*X\2'T\2'T\2'T\2'T" - "\14#Q\2'T\2'T\0%Q\14#Q\0%Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\14#Q\0$P\14#Q\0" - "$P\0$P\0\"M\14#Q\0\"M\0\"M\4\37M\4\37M\5\40H\5\40H\2\36E\2\36E\5\40H" - "\2\36E\2\36E\2\36E\2\36E\0\35D\0\35D\0\35D\11\33>\0\34C\0\34C\0\34C\0" - "\34C\11\33>\11\33>\10\32=\11\33>\10\32=\0\32:\11\33>\10\32=\11\33>\11" - "\33>\10\32=\0\32:\11\33>\10\32=\0\32:\11\33>\10\32=\0\32:\0\32:\376\377" - "\374\376\377\374\376\377\374\"9X\11\33>\0\35D\0\35D\376\377\374\376\377" - "\374\376\377\374\37<`\2\36E\2\36E\5\40H\37<`\376\377\374\376\377\374" - "\376\377\374\0\"M\14#Q\0#OK\312\363K\312\363\0$P\0%Q\14#Q\0\0\20L\177" - "\20L\177\20L\177\20L\177\34H|\35I}\35I}\35I}\32G{\34H|\34H|\30Ey\30E" - "y\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\15" - "@s\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6=p\4q\11>q\11>q\40W\204\376\377\374\376\377\374\376\377" - "\374\23Bv\23Bv\23BvK\312\363K\312\363\24Cw\24Cw\30Ey\0\0\2'T\2'T\2'T" - "\2'T\2'T\2'T\2'T\14#Q\0%Q\0%Q\14#Q\14#Q\14#Q\14#Q\14#Q\0%Q\0%Q\0$P\0" - "$P\0$P\0$P\0#O\0\"M\4\37M\0\"M\4\37M\4\37M\5\40H\5\40H\5\40H\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\0\35D\0\35D\0\35D\0\35D\0\34C\0\34C\0\34" - "C\0\34C\0\34C\0\34C\0\32:\10\32=\0\32:\10\32=\10\32=\0\32:\11\33>\10" - "\32=\0\32:\11\33>\10\32=\0\32:\11\33>\10\32=\11\33>\0\34C\0\34C\11\33" - ">\376\377\374\376\377\374\376\377\374\37""6U\0\35D\0\35D\2\36E\376\377" - "\374\376\377\374\376\377\374\37<`\2\36E\5\40H\5\40H(q\11>q\11>q\11>q\11>q\6=p\6=p\6=p\4q\11>q\11>q\40W\204\376\377\374\376\377\374\376" - "\377\374\23Bv\23Bv\23BvK\312\363K\312\363\24Cw\30Ey\30Ey\0\0\2'T\2'T" - "\2'T\14#Q\2'T\2'T\0%Q\0%Q\0%Q\14#Q\0%Q\14#Q\14#Q\14#Q\0%Q\0%Q\14#Q\0" - "$P\0$P\0$P\0\"M\0#O\0\"M\0\"M\4\37M\4\37M\5\40H\5\40H\5\40H\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\0\35D\0\35D\0\35D\0\35D\0\34C\0\34C\0" - "\34C\0\34C\0\34C\0\34C\11\33>\10\32=\11\33>\11\33>\0\32:\11\33>\0\32" - ":\0\32:\0\32:\11\33>\0\32:\10\32=\0\34C\0\34C\0\34C\0\34C\0\34C\11\33" - ">\376\377\374\376\377\374\376\377\374(q\11>q\11>q\11>q\11>q\11>q\6=p\6=p\4q\376\377\374\376\377" - "\374\376\377\374\40W\204\11>q\15@s\15@s\40W\204\376\377\374\376\377\374" - "\376\377\374\23Bv\24Cw\24CwK\312\363K\312\363\24Cw\30Ey\32G{\0\0\2'T" - "\2'T\2'T\2'T\2'T\2'T\0%Q\0%Q\0%Q\14#Q\14#Q\14#Q\0%Q\0%Q\0%Q\0$P\14#Q" - "\0$P\0#O\14#Q\0\"M\0\"M\0\"M\4\37M\4\37M\4\37M\5\40H\5\40H\2\36E\5\40" - "H\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\0\35D\0\35D\0\35D\0\35D\0\34C\0" - "\34C\0\34C\0\34C\11\33>\0\34C\0\34C\11\33>\10\32=\10\32=\0\32:\0\32:" - "\0\32:\10\32=\0\32:\0\34C\0\34C\0\34C\0\34C\0\34C\0\34C\0\34C\0\35D\0" - "\35D\376\377\374\376\377\374\376\377\374\"9X\2\36E\2\36E\2\36E\376\377" - "\374\376\377\374\376\377\374(q\11>q\11" - ">q\11>q\11>q\11>q\6=p\6=p\4\0\34C\0\34C\0\34" - "C\0\34C\0\34C\11\33>\0\34C\11\33>\0\34C\11\33>\0\34C\0\34C\11\33>\0\34" - "C\0\35D\0\35D\0\35D\0\35D\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\0$P\0%Q\14#QK\312\363K\312\363\0" - "%Q\0%Q\0%Q\0\0\20L\177\34H|\35I}\35I}\34H|\32G{\34H|\30Ey\32G{\30Ey\30" - "Ey\30Ey\24Cw\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\15@s\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\4\0\34C\0\34C\0\34C\0\34C\0\34C\0\34C\11\33>\0\34C\0\34C\0\34C\11\33" - ">\0\34C\11\33>\0\35D\0\35D\0\35D\0\35D\2\36E\2\36E\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\0%Q\14#" - "Q\0%QK\312\363K\312\363\0%Q\0%Q\2'T\0\0\20L\177\35I}\35I}\32G{\34H|\32" - "G{\32G{\30Ey\30Ey\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\17" - "At\15@s\15@s\15@s\11>q\15@s\11>q\11>q\11>q\11>q\11>q\6=p\6=p\4\0\34C\0\34C\0\34C\0\34C\11\33>\0\34" - "C\11\33>\0\34C\0\34C\0\34C\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\2\36E" - "\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\5\40H\4\37M\4\37M\4\37M\0" - "\"M\0\"M\0\"M\0#O\0#O\0$P\0$P\0$P\0%Q\0%Q\0%Q\0%QK\312\363K\312\363\14" - "#Q\2'T\2'T\0\0\34H|\35I}\34H|\34H|\34H|\34H|\32G{\30Ey\30Ey\30Ey\24C" - "w\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\17At\17At\15@s\15@s\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\6=p\6=p\6=p\4q\11>q\11>q\11>q\11>q\11>q\15" - "@s\15@s\15@s\15@s\17At\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\30Ey\30" - "Ey\34H|K\312\363K\312\363\35I}\35I}\35I}\0\0\2'T\2'T\14#Q\0%Q\14#Q\14" - "#Q\14#Q\14#Q\0%Q\14#Q\0%Q\14#Q\14#Q\0#O\0$P\0\"M\0#O\0\"M\4\37M\4\37" - "M\4\37M\4\37M\5\40H\5\40H\5\40H\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2" - "\36E\2\36E\2\36E\0\35D\0\35D\0\35D\0\35D\0\35D\0\34C\0\34C\11\33>\0\34" - "C\0\34C\0\34C\11\33>\0\34C\0\34C\0\34C\0\34C\0\34C\0\34C\0\35D\0\35D" - "\0\35D\0\35D\0\35D\0\35D\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\2" - "\36E\5\40H\5\40H\5\40H\0\"M\4\37M\4\37M\0\"M\14#Q\0\"M\0$P\0$P\0%Q\0" - "$P\14#Q\0%Q\14#Q\14#Q\14#Q\0%QK\312\363K\312\363\2'T\2'T\2'T\0\0\20L" - "\177\35I}\34H|\32G{\34H|\32G{\30Ey\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\23B" - "v\23Bv\23Bv\23Bv\17At\17At\15@s\15@s\15@s\11>q\11>q\11>q\11>q\11>q\11" - ">q\11>q\6=p\6=p\6=p\4q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\17At\23Bv" - "\23Bv\24Cw\23Bv\24Cw\24Cw\24Cw\30Ey\30Ey\30Ey\32G{\34H|\32G{K\312\363" - "K\312\363\35I}\20L\177\20L\177\0\0\2'T\0%Q\0%Q\14#Q\0%Q\0%Q\14#Q\14#" - "Q\0%Q\0%Q\0%Q\14#Q\0$P\0$P\5\40H\0\"M\0\"M\0\"M\4\37M\4\37M\4\37M\5\40" - "H\5\40H\5\40H\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\34C\0\34C\11\33>\11\33>\0" - "\34C\0\34C\0\34C\0\34C\0\34C\11\33>\0\35D\0\35D\0\35D\0\35D\0\35D\0\35" - "D\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\5\40H\5\40H\0" - "\"M\4\37M\4\37M\4\37M\0\"M\0#O\0\"M\0$P\14#Q\0%Q\0$P\0%Q\0%Q\14#Q\0%" - "Q\0%Q\0%Q\14#QK\312\363K\312\363\2'T\2'T\2'T\0\0\35I}\34H|\20L\177\34" - "H|\32G{\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\23Bv\17" - "At\15@s\15@s\15@s\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6=p\4q\11>q\11>q\11>q" - "\11>q\11>q\11>q\15@s\15@s\15@s\17At\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24" - "Cw\30Ey\30Ey\30Ey\32G{\20L\177\34H|\35I}K\312\363K\312\363\20L\177\20" - "L\177\22M\200\0\0\0%Q\14#Q\0%Q\0%Q\0%Q\14#Q\0%Q\0%Q\0%Q\0%Q\14#Q\0$P" - "\0$P\0#O\0#O\0\"M\4\37M\4\37M\4\37M\4\37M\4\37M\5\40H\5\40H\5\40H\2\36" - "E\5\40H\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\0\35D\0\35D\0\35D\0" - "\35D\0\35D\0\35D\0\35D\0\34C\11\33>\0\34C\11\33>\0\34C\0\34C\11\33>\0" - "\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\2\36E\2\36E\2\36E\2\36E\2\36" - "E\5\40H\5\40H\2\36E\2\36E\5\40H\5\40H\5\40H\4\37M\0\"M\4\37M\0\"M\0\"" - "M\0\"M\0$P\0#O\0%Q\14#Q\0%Q\0%Q\0%Q\14#Q\14#Q\0%Q\0%Q\14#Q\2'TK\312\363" - "K\312\363\2'T\2'T\10*X\0\0\34H|\32G{\34H|\30Ey\30Ey\30Ey\30Ey\30Ey\24" - "Cw\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\15@s\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\6=p\6=p\4q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\17At\23" - "Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\32G{\34H|\32G{\34H|\35" - "I}\35I}K\312\363K\312\363\20L\177\22M\200\22M\200\0\0\14#Q\0%Q\0%Q\0" - "%Q\14#Q\14#Q\14#Q\0%Q\0$P\0%Q\0$P\0#O\5\40H\0\"M\0\"M\0\"M\0\"M\4\37" - "M\4\37M\4\37M\5\40H\5\40H\0\"M\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\2" - "\36E\2\36E\2\36E\2\36E\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35" - "D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0" - "\35D\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\5\40H\2\36E\5\40H\5\40H\5\40" - "H\0\"M\4\37M\0\"M\0\"M\0\"M\14#Q\0$P\0#O\0$P\0$P\14#Q\0%Q\0%Q\0%Q\14" - "#Q\14#Q\0%Q\0%Q\2'T\2'T\2'TK\312\363K\312\363\2'T\10*X\10*X\0\0\34H|" - "\34H|\30Ey\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\23" - "Bv\17At\15@s\15@s\15@s\15@s\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6" - "=p\4q\11>q\11>q\11>q" - "\11>q\11>q\15@s\15@s\15@s\17At\17At\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24" - "Cw\24Cw\30Ey\30Ey\30Ey\32G{\20L\177\34H|\35I}\34H|\20L\177K\312\363K" - "\312\363\22M\200\22M\200\24N\201\0\0\0%Q\0%Q\0%Q\14#Q\0%Q\0%Q\0%Q\14" - "#Q\0%Q\14#Q\0$P\0$P\14#Q\0\"M\0\"M\4\37M\4\37M\0\"M\4\37M\5\40H\5\40" - "H\5\40H\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\0" - "\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35" - "D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\5\40H\2\36E\2\36E\5\40H\5\40H\5\40H\5\40H\4\37M\4\37M\0\"M\0\"M" - "\14#Q\0\"M\0$P\0#O\14#Q\0%Q\0$P\0%Q\0%Q\0%Q\0%Q\0%Q\14#Q\0%Q\2'T\2'T" - "\2'T\2'TK\312\363K\312\363\2'T\10*X\10*X\0\0\32G{\32G{\30Ey\30Ey\30E" - "y\30Ey\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\15@s\15" - "@s\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6=p\6=p\4q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15" - "@s\17At\17At\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\32G{\32" - "G{\34H|\32G{\35I}\34H|\35I}\35I}K\312\363K\312\363\22M\200\24N\201\35" - "I}\0\0\0%Q\0%Q\14#Q\0%Q\0%Q\14#Q\0%Q\14#Q\0$P\0$P\0$P\0#O\0#O\0\"M\0" - "\"M\4\37M\4\37M\0\"M\5\40H\5\40H\5\40H\2\36E\2\36E\5\40H\2\36E\5\40H" - "\2\36E\2\36E\2\36E\2\36E\2\36E\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0" - "\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\5\40H\5" - "\40H\5\40H\0\"M\4\37M\0\"M\0\"M\14#Q\0\"M\0$P\0$P\0$P\14#Q\0$P\0%Q\14" - "#Q\14#Q\0%Q\14#Q\0%Q\14#Q\2'T\14#Q\2'T\2'T\2'TK\312\363K\312\363\10*" - "X\10*X\10*X\0\0\32G{\30Ey\30Ey\30Ey\30Ey\24Cw\24Cw\24Cw\23Bv\23Bv\23" - "Bv\23Bv\23Bv\17At\15@s\15@s\15@s\15@s\11>q\11>q\11>q\11>q\11>q\11>q\11" - ">q\11>q\6=p\6=p\6=p\4q\11>q\11>q\11" - ">q\11>q\11>q\11>q\15@s\15@s\220\253\302\220\253\302\220\253\302\220\253" - "\302\220\253\302\230\253\304\221\254\303\230\253\304\221\254\303\221" - "\254\303\222\255\304\222\255\304\222\255\304\222\255\304\230\253\304" - "\222\255\304\230\253\304\223\256\305\223\256\305\34H|\20L\177\35I}K\312" - "\363K\312\363\24N\201\26O\202\26O\202\0\0\0%Q\0%Q\14#Q\0%Q\0%Q\14#Q\0" - "$P\0$P\0#O\0$P\0#O\0\"M\4\37M\4\37M\0\"M\4\37M\4\37M\5\40H\0\"M\5\40" - "H\5\40H\5\40H\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\0" - "\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35" - "D\0\35D\0\35D\0\35D\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\2\36E\5\40H\5\40H\5\40H\5\40H\4\37M\4\37M\0\"M\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\2'T\2'T\10*XK\312\363K\312\363\10*X\10*X\10*X\0\0\30Ey\30Ey\30E" - "y\24Cw\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\15@s\15" - "@s\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6=p\6=p\6=p\4q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s" - "\15@s\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\20L\177\35I}\22M\200K\312\363K\312\363\26" - "O\202\26O\202\26O\202\0\0\14#Q\14#Q\0%Q\0%Q\0%Q\0$P\0%Q\0$P\0#O\0$P\14" - "#Q\0\"M\4\37M\4\37M\0\"M\4\37M\5\40H\5\40H\5\40H\5\40H\2\36E\2\36E\2" - "\36E\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\0\35D\0\35D\0\35" - "D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\0\35D\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\5\40" - "H\5\40H\5\40H\0\"M\4\37M\4\37M\0\"M\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\2'T\2'T\10*" - "XK\312\363K\312\363\10*X\10*X\10*X\0\0\30Ey\30Ey\24Cw\24Cw\24Cw\24Cw" - "\23Bv\23Bv\24Cw\23Bv\23Bv\17At\15@s\15@s\15@s\15@s\11>q\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\6=p\6=p\6=p\4q\11>q" - "\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\17At\17At\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\35I}\22M\200\22M\200K\312\363K\312\363\26O\202\26O\202\26O\202" - "\0\0\0%Q\0%Q\0%Q\0%Q\0$P\0$P\0#O\0$P\0#O\0\"M\4\37M\0\"M\0\"M\4\37M\0" - "\"M\4\37M\5\40H\5\40H\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\0\35D\0\35D\0\35D\0\35D\0\35D\0" - "\35D\0\35D\0\35D\0\35D\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\5\40H\2\36E\5\40H\5\40H\5\40H\4\37M\4\37M\0\"M\4" - "\37M\0\"M\0\"M\0\"M\14#Q\0$P\0$P\0$P\0$POk\214\363\370\373\367\375\377" - "\204\230\257,Gl\10*X\12+Y,Gl\205\224\247\367\375\377\367\375\377x\213" - "\243\2'T\2'T\10*X\10*XK\312\363K\312\363\10*X\10*X\10*X\0\0\30Ey\24C" - "w\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\15@s\15@s\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6=p\6=p\4q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\17At\23" - "Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw3e\224\365\372\375\376\377\374y\231\265" - "\30Ey\30Ey\34H|\32G{\34H|\35I}r\227\267\376\377\374\376\377\374c\207" - "\250\22M\200\22M\200\24N\201K\312\363K\312\363\26O\202\26O\202\27P\203" - "\0\0\0%Q\14#Q\0$P\0%Q\0$P\0#O\0$P\0\"M\0\"M\0\"M\4\37M\4\37M\4\37M\4" - "\37M\5\40H\5\40H\0\"M\5\40H\5\40H\2\36E\2\36E\5\40H\5\40H\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\0\35D\0\35D\0\35D\0\35D\0" - "\35D\0\35D\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40" - "H\2\36E\5\40H\2\36E\2\36E\5\40H\5\40H\5\40H\5\40H\4\37M\0\"M\4\37M\4" - "\37M\0\"M\0#O\0\"M\0$P\0#O\14#Q\14#Q\14#Q\252\265\303\376\377\374\376" - "\377\374,Gl\14#Q\0%Q\0%Q\14#Q\2'T\2'T.In\376\377\374\376\377\374\274" - "\310\326\2'T\10*X\10*XK\312\363K\312\363\10*X\10*X\12+Y\0\0\24Cw\24C" - "w\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\23Bv\17At\15@s\15@s\15@s\15@s\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6=p\6=p\6=p\4q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\15@s\17At\23Bv\23" - "Bv\24Cw\23Bv\23Bv\24Cw\24Cw\24Cw\354\362\364\376\377\374\376\377\374" - "Ks\237\32G{\34H|\32G{\34H|\20L\177\34H|Tv\234\376\377\374\376\377\374" - "\354\362\364\22M\200\24N\201\24N\201K\312\363K\312\363\26O\202\26O\202" - "\27P\203\0\0\0$P\14#Q\0$P\0%Q\0$P\0$P\0\"M\0\"M\4\37M\4\37M\4\37M\0\"" - "M\4\37M\5\40H\5\40H\5\40H\5\40H\2\36E\2\36E\5\40H\2\36E\5\40H\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\5\40H\2\36E\2\36E\2\36E\5\40H\5\40H\5\40H\5\40H\0\"M\4\37M\4\37" - "M\4\37M\0\"M\0\"M\0$P\0#O\0#O\14#Q\0%Q\14#Q\14#Q\365\372\375\376\377" - "\374\376\377\374\312\322\333\34""8a\14#Q\0%Q\2'T\2'T\37:d\312\322\333" - "\376\377\374\376\377\374\365\372\375\10*X\10*X\10*XK\312\363K\312\363" - "\10*X\12+Y\12+Y\0\0\24Cw\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\23Bv\17At\15@" - "s\15@s\15@s\15@s\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6=" - "p\6=p\6=p\6=p\4q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15" - "@s\15@s\15@s\17At\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\30Ey\333\344" - "\354\376\377\374\376\377\374\376\377\374\363\370\373\274\310\326\225" - "\260\307\225\260\307\274\310\326\364\371\374\376\377\374\376\377\374" - "\376\377\374\336\347\357\22M\200\35I}\26O\202K\312\363K\312\363\26O\202" - "\27P\203\27P\203\0\0\0%Q\14#Q\0#O\0#O\0$P\14#Q\0\"M\0\"M\4\37M\4\37M" - "\4\37M\0\"M\4\37M\5\40H\5\40H\5\40H\2\36E\2\36E\2\36E\5\40H\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\5\40H\2\36E\5\40H\5\40H\5\40H\4\37M\4\37M\4\37M\4" - "\37M\0\"M\0\"M\0\"M\0$P\0#O\0$P\0$P\14#Q\14#Q\0%Q\0%Q\210\227\252\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\213\232\255\10*X\10*X\10*XK\312\363K\312\363\10*X\12+Y\12+Y\0\0" - "\24Cw\24Cw\23Bv\23Bv\23Bv\23Bv\23Bv\17At\17At\15@s\15@s\15@s\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6=p\6=p\6=p\6=p\6=p\4q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\15@s\23Bv\23Bv\23" - "Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\30Ey\27P\203\333\344\354\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\336\347\357\"V\212\24N\201" - "\26O\202\26O\202K\312\363K\312\363\26O\202\27P\203\27P\203\0\0\0%Q\0" - "$P\0$P\0$P\0\"M\0#O\4\37M\4\37M\4\37M\4\37M\4\37M\5\40H\5\40H\5\40H\5" - "\40H\5\40H\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40" - "H\5\40H\5\40H\5\40H\4\37M\4\37M\4\37M\4\37M\4\37M\0\"M\0#O\0\"M\0$P\0" - "#O\14#Q\0%Q\14#Q\0%Q\0%Q\14#Q\14#Q\37:d\303\314\324\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\307\317\330&@k\10*X\10*X\10*X\10*XK\312\363K\312\363\10*X\12" - "+Y\12+Y\0\0\23Bv\23Bv\24Cw\23Bv\23Bv\23Bv\17At\15@s\15@s\15@s\15@s\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6=p\6=p\6=p\6=p\6=p\6" - "=p\4q\11" - ">q\11>q\11>q\11>q\11>q\15@s\11>q\11>q\11>q\15@s\15@s\15@s\17At\17At\23" - "Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\35I}X" - "\203\250\263\303\326\341\352\362\365\372\375\365\372\375\343\350\353" - "\264\304\327o\206\243\24N\201\22M\200\24N\201\24N\201\26O\202\26O\202" - "K\312\363K\312\363\27P\203\27P\203\27P\203\0\0\0$P\0$P\0\"M\0\"M\0\"" - "M\4\37M\0\"M\0\"M\4\37M\4\37M\5\40H\5\40H\5\40H\5\40H\5\40H\2\36E\2\36" - "E\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\5\40H\5\40H\5\40H\4" - "\37M\4\37M\0\"M\4\37M\4\37M\0\"M\0#O\0$P\0#O\0#O\14#Q\0%Q\0$P\0%Q\0%" - "Q\0%Q\14#Q\14#Q\14#Q\0%Q\0%Q\14#Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10" - "*X\10*X\10*X\10*XK\312\363K\312\363\12+Y\12+Y\12+Y\0\0\23Bv\23Bv\23B" - "v\23Bv\17At\17At\15@s\15@s\15@s\15@s\11>q\11>q\11>q\11>q\11>q\11>q\11" - ">q\11>q\11>q\11>q\6=p\6=p\6=p\6=p\6=p\6=p\4q\11>q\11>q\11>q\11>q\11>q\11>q" - "\11>q\11>q\15@s\15@s\15@s\15@s\17At\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24" - "Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\32G{\34H|\32G{\34H|\35I}\35I}\34H|\35" - "I}\20L\177\20L\177\22M\200\22M\200\22M\200\24N\201\26O\202\26O\202\26" - "O\202K\312\363K\312\363\27P\203\27P\203\27P\203\0\0\0$P\0\"M\14#Q\0\"" - "M\0\"M\4\37M\0\"M\4\37M\4\37M\4\37M\5\40H\5\40H\5\40H\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\5\40H\5\40H\5\40H\0" - "\"M\4\37M\4\37M\4\37M\4\37M\0\"M\0\"M\0$P\0#O\0$P\0$P\14#Q\0$P\0%Q\14" - "#Q\0%Q\14#Q\14#Q\14#Q\0%Q\14#Q\0%Q\14#Q\2'T\2'T\2'T\2'T\2'T\2'T\10*X" - "\10*X\10*X\10*X\10*X\10*XK\312\363K\312\363\12+Y\12+Y\12+Y\0\0\23Bv\23" - "Bv\23Bv\17At\15@s\15@s\15@s\15@s\15@s\11>q\11>q\11>q\11>q\11>q\11>q\11" - ">q\11>q\11>q\6=p\6=p\6=p\6=p\6=p\6=p\4q\11>q\11>q\11>q\11>q\11>q\11>q\11>q" - "\11>q\11>q\15@s\15@s\15@s\15@s\17At\17At\23Bv\23Bv\23Bv\23Bv\24Cw\24" - "Cw\24Cw\24Cw\230\253\304\222\255\304\222\255\304\222\255\304\230\253" - "\304\230\253\304\230\253\304\230\253\304\230\253\304\230\253\304\223" - "\256\305\223\256\305\224\257\306\224\257\306\224\257\306\224\257\306" - "\224\257\306\225\260\307\225\260\307\26O\202\26O\202\26O\202K\312\363" - "K\312\363\27P\203\27P\203\27P\203\0\0\0$P\14#Q\0\"M\0\"M\0\"M\4\37M\4" - "\37M\4\37M\5\40H\5\40H\5\40H\5\40H\5\40H\2\36E\2\36E\2\36E\5\40H\2\36" - "E\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\5\40H\5\40H\5\40H\5\40H\4\37M\4\37M\0\"M\0" - "\"M\0\"M\0#O\0\"M\0\"M\0$P\0$P\0$P\0$P\14#Q\0%Q\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\10*X\10*X\10*XK\312\363K\312\363\12+Y\12+Y\12+Y\0\0\23Bv\23Bv\17At\17" - "At\15@s\15@s\15@s\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6" - "=p\6=p\6=p\6=p\6=p\6=p\6=p\4q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@" - "s\15@s\17At\15@s\17At\17At\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24" - "Cw\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\26O\202\26O\202\26O\202K\312\363K\312\363\27" - "P\203\27P\203\27P\203\0\0\0\"M\4\37M\0\"M\4\37M\0\"M\4\37M\4\37M\5\40" - "H\5\40H\5\40H\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\2" - "\36E\5\40H\5\40H\5\40H\5\40H\4\37M\0\"M\4\37M\4\37M\0\"M\4\37M\14#Q\0" - "\"M\0$P\0#O\0$P\0$P\14#Q\0$P\0%Q\0%Q\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\10*X\10" - "*X\10*XK\312\363K\312\363\12+Y\12+Y\12+Y\0\0\23Bv\17At\23Bv\15@s\15@" - "s\15@s\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6=" - "p\6=p\6=p\6=p\6=p\6=p\4q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15" - "@s\15@s\17At\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\26O\202\26O\202\26O\202K\312\363K\312\363\27P\203" - "\27P\203\27P\203\0\0\0\"M\4\37M\4\37M\4\37M\4\37M\0\"M\5\40H\5\40H\5" - "\40H\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\5\40" - "H\5\40H\5\40H\5\40H\4\37M\4\37M\0\"M\4\37M\4\37M\0\"M\0\"M\0#O\0\"M\0" - "$P\0$P\0$P\14#Q\14#Q\0%Q\14#Q\0%Q\14#Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\2'T" - "\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*XK\312" - "\363K\312\363\12+Y\12+Y\12+Y\0\0\17At\15@s\15@s\15@s\15@s\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6=p\6=p\6=p\6=p\6=p\6" - "=p\6=p\4q\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\17At\17At\23Bv\23" - "Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\34" - "H|\34H|\32G{\35I}\35I}\35I}\20L\177\20L\177\20L\177\20L\177\22M\200\35" - "I}\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202K\312\363K" - "\312\363\27P\203\27P\203\27P\203\0\0\0\"M\4\37M\4\37M\4\37M\4\37M\5\40" - "H\5\40H\5\40H\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\5" - "\40H\5\40H\5\40H\5\40H\0\"M\4\37M\0\"M\0\"M\4\37M\4\37M\4\37M\0\"M\0" - "#O\0#O\0#O\0#O\14#Q\0%Q\0%Q\14#Q\14#Q\14#Q\0%Q\0%Q\0%Q\0%Q\0%Q\14#Q\2" - "'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10" - "*X\10*XK\312\363K\312\363\12+Y\12+Y\12+Y\0\0\15@s\15@s\15@s\15@s\11>" - "q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6=p\6=p\6=p\6" - "=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\11>q\11>q" - "\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\15@s\17" - "At\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\30Ey\30" - "Ey\32G{\20L\177\34H|\34H|\35I}\35I}\35I}\35I}\20L\177\20L\177\20L\177" - "\22M\200\22M\200\22M\200\24N\201\26O\202\26O\202\26O\202\26O\202\26O" - "\202\26O\202K\312\363K\312\363\27P\203\27P\203\27P\203\0\0\0\"M\4\37" - "M\4\37M\5\40H\5\40H\5\40H\5\40H\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\2" - "\36E\5\40H\2\36E\5\40H\5\40H\5\40H\5\40H\5\40H\4\37M\4\37M\0\"M\4\37" - "M\0\"M\14#Q\0\"M\0#O\0$P\0$P\0$P\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\14#Q\14#Q" - "\217\236\261\217\236\261\217\236\261\27""5]\0%Q\217\236\261\217\236\261" - "\217\236\261\217\236\261\217\236\261\217\236\261\217\236\261\217\236" - "\261\217\236\261\217\236\261\217\236\261\220\240\262\220\240\262\220" - "\240\262\10*X\10*X\10*XK\312\363K\312\363\12+Y\12+Y\12+Y\0\0\15@s\15" - "@s\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6" - "=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6" - "=p\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15" - "@s\15@s\17At\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30" - "Ey\30Ey\30Ey\376\377\374\376\377\374\376\377\374-`\217\35I}\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\26O\202\26O\202\26O\202K\312\363K\312\363\27P\203" - "\27P\203\27P\203\0\0\4\37M\4\37M\5\40H\5\40H\5\40H\0\"M\2\36E\2\36E\2" - "\36E\2\36E\5\40H\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\5\40H\5\40H\5\40H\5\40" - "H\4\37M\4\37M\4\37M\4\37M\0\"M\4\37M\0\"M\0\"M\14#Q\0#O\0#O\14#Q\0%Q" - "\0$P\0%Q\0%Q\0%Q\0%Q\14#Q\0%Q\376\377\374\376\377\374\376\377\374&@k" - "\2'T\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\10*X\10*X\10*XK\312\363K\312\363" - "\12+Y\12+Y\12+Y\0\0\15@s\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>" - "q\11>q\11>q\11>q\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p" - "\6=p\6=p\6=p\6=p\6=p\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11" - ">q\11>q\15@s\15@s\15@s\15@s\17At\17At\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24" - "Cw\24Cw\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\376\377\374\376\377\374\376" - "\377\374-`\217\34H|\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\26O\202\26O\202\26O" - "\202K\312\363K\312\363\27P\203\27P\203\27P\203\0\0\0\"M\5\40H\5\40H\5" - "\40H\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\5\40" - "H\5\40H\5\40H\5\40H\5\40H\0\"M\4\37M\4\37M\4\37M\0\"M\0\"M\0#O\0\"M\0" - "#O\5\40H\0$P\14#Q\0$P\14#Q\0%Q\0%Q\0%Q\0%Q\14#Q\14#Q\0%Q\376\377\374" - "\376\377\374\376\377\374(q\11>q\11>q\11>q\11>" - "q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p" - "\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\11>q\11>q\11>q\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\17At\15@s\15@s\15@s\17At\17At\23Bv\23Bv\23" - "Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\30Ey\24Cw\30Ey\30Ey\30Ey\32G{\34H|\32" - "G{\34H|\20L\177\35I}\35I}\34H|\35I}\20L\177\20L\177\20L\177\22M\200\22" - "M\200\22M\200\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202" - "\26O\202\26O\202K\312\363K\312\363\27P\203\27P\203\27P\203\0\0\5\40H" - "\5\40H\5\40H\5\40H\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2" - "\36E\5\40H\5\40H\5\40H\5\40H\5\40H\4\37M\4\37M\4\37M\0\"M\0\"M\0\"M\0" - "\"M\0\"M\0#O\0#O\0$P\0$P\14#Q\0$P\0%Q\14#Q\14#Q\0%Q\14#Q\14#Q\0%Q\14" - "#Q\0%Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\2'T\10*X\10*X\10" - "*X\10*X\10*X\10*X\10*X\10*X\12+YK\312\363K\312\363\12+Y\12+Y\12+Y\0\0" - "\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6=p\6=p\6" - "=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\11>q\11>q\11>" - "q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\15@s\17" - "At\17At\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\30Ey\30" - "Ey\30Ey\30Ey\32G{\34H|\32G{\34H|\35I}\20L\177\35I}\35I}\35I}\20L\177" - "\20L\177\20L\177\22M\200\22M\200\24N\201\24N\201\26O\202\26O\202\26O" - "\202\26O\202\26O\202\26O\202\26O\202\27P\203K\312\363K\312\363\27P\203" - "\27P\203\27P\203\0\0\5\40H\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H" - "\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\4\37M\4\37M\4" - "\37M\0\"M\0\"M\4\37M\0#O\0\"M\0\"M\0$P\0#O\14#Q\0%Q\14#Q\0%Q\0%Q\14#" - "Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\0%Q\14#Q\2'T\2'T\2'T\14#Q\2'T\2'T\2'T\10" - "*X\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*XK\312\363" - "K\312\363\12+Y\12+Y\12+Y\0\0\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q" - "\11>q\11>q\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6" - "=p\6=p\6=p\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11" - ">q\15@s\15@s\15@s\15@s\17At\17At\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24" - "Cw\24Cw\24Cw\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\34H|\32G{\34H|\35I}\35I}\34" - "H|\35I}\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\26O\202\26O\202\26O\202K\312\363" - "K\312\363\27P\203\27P\203\27P\203\0\0\5\40H\5\40H\2\36E\5\40H\2\36E\2" - "\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\5" - "\40H\2\36E\2\36E\2\36E\2\36E\2\36E\0\"M\5\40H\5\40H\5\40H\5\40H\4\37" - "M\4\37M\4\37M\4\37M\4\37M\0\"M\0\"M\14#Q\0#O\0#O\0$P\0$P\14#Q\0%Q\0%" - "Q\0%Q\0%Q\14#Q\14#Q\0%Q\0%Q\0%Q\14#Q\0%Q\14#Q\2'T\14#Q\2'T\2'T\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\10*X\10*X\10*XK\312\363K\312\363\12+Y\12+Y\12" - "+Y\0\0\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6=p\6=p\6=p\6" - "=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\11>q\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\15@s\17At\17" - "At\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\30" - "Ey\32G{\30Ey\32G{\34H|\34H|\35I}\35I}\35I}\35I}\20L\177\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\26O\202\26O\202\26O\202K\312\363K\312\363\27P\203\27" - "P\203\27P\203\0\0\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\5\40H\2\36" - "E\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\5\40H\2\36E\5\40H\2\36" - "E\2\36E\5\40H\5\40H\5\40H\5\40H\0\"M\4\37M\4\37M\4\37M\4\37M\4\37M\0" - "\"M\0\"M\0\"M\5\40H\0$P\0$P\0%Q\0$P\14#Q\0%Q\0%Q\14#Q\0%Q\0%Q\14#Q\0" - "%Q\14#Q\0%Q\0%Q\0%Q\14#Q\2'T\2'T\2'T\2'T\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\10*X\10*X\10*XK\312\363K\312\363\12+Y\12+Y\12+Y\0\0\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6" - "=p\6=p\6=p\6=p\6=p\6=p\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11" - ">q\11>q\11>q\11>q\15@s\15@s\15@s\15@s\17At\17At\23Bv\23Bv\23Bv\23Bv\23" - "Bv\23Bv\24Cw\24Cw\24Cw\30Ey\24Cw\30Ey\30Ey\30Ey\32G{\30Ey\34H|\32G{\34" - "H|\32G{\35I}\35I}\35I}\35I}\20L\177\224\257\306\224\257\306\224\257\306" - "\224\257\306\230\253\304\224\257\306\230\253\304\233\267\316\310\324" - "\342\367\375\377\376\377\374\376\377\374\246\276\317\225\260\307\26O" - "\202\26O\202\26O\202K\312\363K\312\363\27P\203\27P\203\27P\203\0\0\2" - "\36E\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5" - "\40H\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\5\40H\5\40H\5\40H\5\40" - "H\5\40H\4\37M\0\"M\4\37M\4\37M\4\37M\4\37M\0\"M\14#Q\0\"M\0\"M\0$P\0" - "$P\0$P\14#Q\0%Q\0$P\14#Q\0%Q\0%Q\14#Q\0%Q\0%Q\14#Q\0%Q\0%Q\0%Q\0%Q\2" - "'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X1Lq\337\344" - "\347\376\377\374\325\332\334\13""6c\10*X\10*X\10*XK\312\363K\312\363" - "\12+Y\12+Y\12+Y\0\0\11>q\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6=p\6=p\6" - "=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\11>q\11>q\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\15@s\15@s\23" - "Bv\17At\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30" - "Ey\30Ey\30Ey\32G{\34H|\32G{\34H|\20L\177\35I}\35I}\35I}\34H|\20L\177" - "\20L\177\20L\177\35I}\22M\200\22M\200\22M\200\24N\201\24N\201\24N\201" - "\26O\202\26O\202_\200\247\376\377\374\376\377\374\215\250\277\26O\202" - "\26O\202\27P\203K\312\363K\312\363\27P\203\27P\203\27P\203\0\0\2\36E" - "\2\36E\5\40H\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40" - "H\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\5\40H\5\40H\5\40H\5\40H\5\40H\4" - "\37M\4\37M\4\37M\4\37M\4\37M\4\37M\0\"M\14#Q\0\"M\0#O\0$P\0#O\0%Q\14" - "#Q\0$P\0$P\0%Q\0%Q\14#Q\14#Q\0%Q\0%Q\0%Q\14#Q\0%Q\0%Q\14#Q\2'T\14#Q\2" - "'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X/Jo\376" - "\377\374\376\377\374\320\331\341\10*X\12+Y\12+YK\312\363K\312\363\12" - "+Y\12+Y\12+Y\0\0\11>q\11>q\11>q\11>q\11>q\11>q\6=p\6=p\6=p\6=p\6=p\6" - "=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\11>q\11>q\11>q\11>q\11>q\11>q" - "\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\15@s\15@s\17At\17" - "At\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\30" - "Ey\30Ey\30Ey\34H|\32G{\34H|\32G{\35I}\35I}\35I}\35I}\35I}\20L\177\20" - "L\177\20L\177\22M\200\22M\200\22M\200\24N\201\24N\201\24N\201\26O\202" - "\26O\202\26O\202\202\231\266\376\377\374\376\377\374\363\370\373\26O" - "\202\27P\203\27P\203K\312\363K\312\363\27P\203\27P\203\27P\203\0\0\2" - "\36E\5\40H\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5" - "\40H\2\36E\2\36E\5\40H\2\36E\2\36E\5\40H\5\40H\5\40H\5\40H\5\40H\0\"" - "M\4\37M\4\37M\4\37M\4\37M\0\"M\4\37M\0\"M\0#O\0$P\0#O\0$P\0$P\14#Q\0" - "%Q\14#Q\0%Q\0%Q\14#Q\0%Q\14#Q\14#Q\0%Q\0%Q\0%Q\14#Q\0%Q\2'T\2'T\14#Q" - "\2'T\2'T\2'T\2'T\217\236\261\221\244\274\217\236\261\221\244\274\217" - "\236\261\217\236\261\217\236\261\222\242\264\232\251\274\303\314\324" - "\376\377\374\376\377\374\376\377\374\364\371\374\10*X\12+Y\12+YK\312" - "\363K\312\363\12+Y\12+Y\12+Y\0\0\11>q\11>q\11>q\11>q\11>q\6=p\6=p\6=" - "p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\11>q\11>q\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\15@s\15" - "@s\17At\17At\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\30" - "Ey\30Ey\30Ey\30Ey\32G{\34H|\32G{\34H|\34H|\34H|\34H|\35I}\35I}\35I}\35" - "I}\20L\177\20L\177\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\330\341\351\26O\202\27P\203\27P" - "\203K\312\363K\312\363\27P\203\27P\203\27P\203\0\0\2\36E\2\36E\2\36E" - "\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2" - "\36E\5\40H\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40" - "H\2\36E\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\4\37M\0\"M\4\37M\0\"M\4\37" - "M\0\"M\4\37M\0\"M\0\"M\14#Q\0#O\0$P\14#Q\0%Q\0%Q\0$P\14#Q\0%Q\0%Q\14" - "#Q\0%Q\0%Q\0%Q\0%Q\0%Q\14#Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374|\217\247\10*X\12+Y\12+YK\312\363K\312\363\12+Y\12+Y\12+" - "Y\0\0\11>q\11>q\11>q\11>q\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=" - "p\6=p\6=p\6=p\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q" - "\11>q\11>q\11>q\15@s\15@s\15@s\15@s\15@s\17At\17At\23Bv\23Bv\24Cw\23" - "Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\30Ey\30Ey\32G{\30Ey\20" - "L\177\34H|\34H|\34H|\35I}\35I}\35I}\35I}\35I}\20L\177\35I}\20L\177\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\303\317\335\36S\207\26O\202\27P\203\27P\203K\312\363K\312\363\27" - "P\203\27P\203\27P\203\0\0\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\5\40H\2\36E\2\36E\5\40H\2\36E\2\36E\5\40H\5\40H\5\40H\5\40H\5\40H\5" - "\40H\4\37M\4\37M\4\37M\4\37M\4\37M\0\"M\0\"M\0\"M\14#Q\0\"M\0#O\0$P\0" - "$P\0$P\14#Q\0$P\0$P\14#Q\0%Q\14#Q\0%Q\14#Q\0%Q\14#Q\0%Q\0%Q\14#Q\0%Q" - "\2'T\2'T\14#Q\2'T\2'T\2'T\2'T\2'T\2'T\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\367" - "\375\377\353\360\363\275\305\315e|\231\13,Z\10*X\12+Y\12+Y\12+YK\312" - "\363K\312\363\12+Y\12+Y\12+Y\0\0\11>q\11>q\11>q\11>q\6=p\6=p\6=p\6=p" - "\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\11>q\11>q\11>q\11>q\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\17At\15@s\15@s\15@s\17At\17" - "At\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\30" - "Ey\30Ey\32G{\30Ey\32G{\34H|\34H|\34H|\34H|\35I}\35I}\35I}\20L\177\35" - "I}\20L\177\20L\177\35I}\22M\200\22M\200\24N\201\24N\201\24N\201\26O\202" - "\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\27P" - "\203\27P\203\27P\203K\312\363K\312\363\27P\203\27P\203\27P\203\0\0\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\2" - "\36E\2\36E\5\40H\5\40H\5\40H\5\40H\5\40H\4\37M\0\"M\4\37M\4\37M\0\"M" - "\0\"M\0\"M\0\"M\14#Q\0#O\0$P\0#O\0$P\0%Q\0$P\14#Q\0$P\14#Q\0%Q\14#Q\14" - "#Q\0%Q\0%Q\0%Q\0%Q\0%Q\14#Q\0%Q\2'T\2'T\2'T\2'T\14#Q\2'T\2'T\10*X\2'" - "T\10*X\10*X\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10" - "*X\10*X\12+Y\12+Y\12+YK\312\363K\312\363\12+Y\12+Y\12+Y\0\0\11>q\11>" - "q\11>q\11>q\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\6=p\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15" - "@s\15@s\15@s\15@s\17At\17At\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24" - "Cw\30Ey\30Ey\24Cw\30Ey\30Ey\30Ey\30Ey\20L\177\34H|\32G{\34H|\34H|\35" - "I}\20L\177\35I}\34H|\20L\177\20L\177\20L\177\20L\177\20L\177\22M\200" - "\22M\200\22M\200\24N\201\24N\201\26O\202\26O\202\35I}\26O\202\26O\202" - "\26O\202\26O\202\26O\202\26O\202\26O\202\27P\203\27P\203\27P\203K\312" - "\363K\312\363\27P\203\27P\203\27P\203\0\0\2\36E\2\36E\2\36E\2\36E\2\36" - "E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5" - "\40H\2\36E\5\40H\2\36E\2\36E\2\36E\5\40H\2\36E\5\40H\5\40H\5\40H\5\40" - "H\5\40H\4\37M\4\37M\4\37M\4\37M\4\37M\0\"M\4\37M\0\"M\0#O\0$P\0#O\0$" - "P\0$P\14#Q\0$P\0$P\0$P\0%Q\14#Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\0%Q\0%Q\0%" - "Q\2'T\14#Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10*X\10*X\10*X\10*X\10" - "*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12+Y\12+YK\312\363" - "K\312\363\12+Y\12+Y\12+Y\0\0\11>q\11>q\11>q\11>q\6=p\6=p\6=p\6=p\6=p" - "\6=p\6=p\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q" - "\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\15@s\15@s\17At\17At\23Bv\23" - "Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\30Ey\30Ey\30" - "Ey\32G{\32G{\32G{\34H|\34H|\32G{\35I}\35I}\35I}\34H|\20L\177\35I}\20" - "L\177\20L\177\22M\200\22M\200\22M\200\22M\200\24N\201\24N\201\26O\202" - "\26O\202\33Q\205\177\237\272\331\342\352\366\373\376\357\364\367\303" - "\317\335_\200\247\26O\202\27P\203\27P\203\27P\203\27P\203K\312\363K\312" - "\363\27P\203\27P\203\27P\203\0\0\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E" - "\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\5\40H\2" - "\36E\2\36E\2\36E\2\36E\5\40H\2\36E\5\40H\5\40H\5\40H\5\40H\0\"M\4\37" - "M\4\37M\0\"M\4\37M\4\37M\0\"M\14#Q\0\"M\0\"M\0\"M\0$P\0#O\0#O\0$P\0$" - "P\14#Q\0%Q\0%Q\0%Q\0%Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\14#Q\0%Q\2'T\14#Q\2" - "'T\2'T\2'T\2'T\2'T\2'T\2'T\27""5]\204\230\257\333\340\343\370\372\367" - "\353\360\363\242\261\305#=g\15-[\270\303\321\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374o\206\243\12+Y\12+Y\12" - "+Y\12+YK\312\363K\312\363\12+Y\12+Y\12+Y\0\0\11>q\11>q\11>q\11>q\11>" - "q\6=p\6=p\6=p\6=p\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\15@s\15@s\17At\17" - "At\23Bv\23Bv\23Bv\24Cw\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30" - "Ey\30Ey\30Ey\32G{\32G{\34H|\34H|\34H|\32G{\35I}\35I}\35I}\34H|\20L\177" - "\20L\177\20L\177\20L\177\24N\201\276\312\330\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\333\344\354\202\242\276\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\366\373\3763e\224\27P\203\27P\203\27P\203K\312\363K\312\363" - "\27P\203\27P\203\27P\203\0\0\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36" - "E\5\40H\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\2" - "\36E\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\0\"M\0\"M\4\37M\4\37M" - "\4\37M\0\"M\4\37M\0\"M\14#Q\0\"M\0#O\0$P\0$P\0$P\0$P\14#Q\0%Q\14#Q\0" - "%Q\0%Q\14#Q\14#Q\0%Q\0%Q\0%Q\0%Q\14#Q\0%Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'" - "T\2'T\2'T\2'TRj\205\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\367\375\377\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\204\230\257\12+Y\12+Y\12+YK\312\363K\312\363\12+Y\12+Y\12+Y\0\0" - "\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15" - "@s\15@s\15@s\15@s\17At\17At\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24" - "Cw\24Cw\30Ey\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\20L\177\34H|\34H|\20L\177" - "\34H|\34H|\35I}\35I}\35I}\35I}\20L\177\20L\177\35I}\35I}\246\276\317" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\300\314\332\231" - "\264\313\313\327\345\376\377\374\376\377\374\376\377\374\310\324\342" - "\27P\203\27P\203\27P\203K\312\363K\312\363\27P\203\27P\203\27P\203\0" - "\0\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H" - "\2\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\5\40H\5\40H\5\40H\5" - "\40H\0\"M\5\40H\0\"M\4\37M\4\37M\0\"M\4\37M\0\"M\4\37M\0\"M\0\"M\14#" - "Q\0#O\0$P\0#O\0$P\0$P\0$P\14#Q\0%Q\14#Q\0%Q\0%Q\14#Q\14#Q\0%Q\0%Q\0%" - "Q\0%Q\0%Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\320\331\341\376" - "\377\374\376\377\374\365\372\375\247\262\300\242\261\305\370\372\367" - "\376\377\374\376\377\374\376\377\374\204\230\257\10*X\10*X\12+Y\242\261" - "\305\376\377\374\376\377\374\350\355\360\12+Y\12+Y\12+YK\312\363K\312" - "\363\12+Y\12+Y\12+Y\0\0\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q" - "\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11" - ">q\11>q\15@s\15@s\15@s\15@s\15@s\15@s\17At\17At\23Bv\23Bv\23Bv\23Bv\23" - "Bv\23Bv\24Cw\24Cw\24Cw\24Cw\30Ey\24Cw\30Ey\30Ey\30Ey\30Ey\32G{\30Ey\34" - "H|\32G{\34H|\34H|\34H|\35I}\20L\177\35I}\35I}\35I}\20L\177\35I}\22M\200" - "\22M\200\357\364\367\376\377\374\376\377\374y\231\265\24N\201\26O\202" - "r\227\267\376\377\374\376\377\374\376\377\374-`\217\26O\202\27P\203\27" - "P\203Tv\234\376\377\374\376\377\374\366\373\376\27P\203\27P\203\27P\203" - "K\312\363K\312\363\27P\203\27P\203\27P\203\0\0\2\36E\2\36E\5\40H\2\36" - "E\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2" - "\36E\5\40H\2\36E\5\40H\5\40H\5\40H\5\40H\5\40H\0\"M\4\37M\4\37M\4\37" - "M\4\37M\4\37M\0\"M\0\"M\14#Q\0\"M\0\"M\0\"M\0$P\0#O\0%Q\14#Q\0$P\14#" - "Q\0%Q\0%Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\0%Q\0%Q\0%Q\0%Q\14#Q\2'T\2'T\2'T" - "\2'T\2'T\2'T\2'T\2'T\2'T\10*X\372\374\371\376\377\374\376\377\374#Gp" - "\10*X\10*X/Jo\376\377\374\376\377\374\376\377\374\13,Z\10*X\12+Y\12+" - "Y,Ep\376\377\374\376\377\374\376\377\374\12+Y\12+Y\12+YK\312\363K\312" - "\363\12+Y\12+Y\12+Y\0\0\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q" - "\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11" - ">q\15@s\15@s\15@s\15@s\15@s\15@s\17At\17At\23Bv\23Bv\23Bv\23Bv\23Bv\23" - "Bv\24Cw\24Cw\24Cw\24Cw\30Ey\24Cw\30Ey\30Ey\30Ey\30Ey\32G{\32G{\34H|\32" - "G{\20L\177\34H|\35I}\35I}\34H|\35I}\20L\177\20L\177\20L\177\35I}\22M" - "\200\22M\200\22M\200\376\377\374\376\377\374\376\377\3743e\224\26O\202" - "\26O\2023e\224\376\377\374\376\377\374\376\377\374\26O\202\27P\203\27" - "P\203\27P\2033e\224\376\377\374\376\377\374\376\377\374\27P\203\27P\203" - "\27P\203K\312\363K\312\363\27P\203\27P\203\27P\203\0\0\2\36E\5\40H\2" - "\36E\2\36E\2\36E\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\2\36E\5\40H\2\36" - "E\2\36E\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\0\"M\4\37M\4\37M\4" - "\37M\4\37M\4\37M\0\"M\4\37M\0\"M\0\"M\0$P\0#O\0$P\0#O\14#Q\0%Q\14#Q\14" - "#Q\0%Q\14#Q\0%Q\0%Q\14#Q\0%Q\14#Q\0%Q\0%Q\0%Q\0%Q\0%Q\2'T\14#Q\2'T\2" - "'T\2'T\2'T\2'T\2'T\2'T\10*X\2'T\10*X\376\377\374\376\377\374\376\377" - "\374,Ep\10*X\10*X\"Fo\376\377\374\376\377\374\376\377\374\12+Y\12+Y\12" - "+Y\12+Y,Ep\376\377\374\376\377\374\376\377\374\12+Y\12+Y\12+YK\312\363" - "K\312\363\12+Y\12+Y\12+Y\0\0\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q" - "\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15" - "@s\15@s\15@s\15@s\15@s\15@s\17At\17At\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24" - "Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\30Ey\32G{\32G{\34H|\34" - "H|\32G{\34H|\35I}\35I}\35I}\34H|\20L\177\20L\177\35I}\20L\177\20L\177" - "\22M\200\22M\200\22M\200\376\377\374\376\377\374\376\377\374\242\271" - "\313\225\260\307\225\260\307\242\271\313\376\377\374\376\377\374\376" - "\377\374\225\260\307\225\260\307\225\260\307\235\261\311\242\271\313" - "\376\377\374\376\377\374\376\377\374\27P\203\27P\203\27P\203K\312\363" - "K\312\363\35I}\27P\203\27P\203\0\0\5\40H\2\36E\2\36E\2\36E\2\36E\5\40" - "H\2\36E\5\40H\2\36E\2\36E\2\36E\5\40H\2\36E\2\36E\5\40H\5\40H\5\40H\5" - "\40H\5\40H\5\40H\5\40H\4\37M\0\"M\4\37M\4\37M\4\37M\0\"M\4\37M\0\"M\14" - "#Q\0\"M\0#O\0$P\0$P\0#O\14#Q\0$P\0%Q\14#Q\0%Q\14#Q\14#Q\0%Q\14#Q\14#" - "Q\14#Q\14#Q\0%Q\0%Q\14#Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T" - "\10*X\2'T\10*X\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\12+Y\12+Y\12+YK\312\363K\312\363\12+Y\12+Y\12" - "+Y\0\0\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\15@s\15@s\15@s\17At\17" - "At\17At\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30" - "Ey\30Ey\30Ey\30Ey\30Ey\30Ey\32G{\32G{\34H|\32G{\34H|\35I}\35I}\35I}\35" - "I}\20L\177\35I}\20L\177\35I}\22M\200\22M\200\22M\200\24N\201\24N\201" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\27P\203\27P\203\27P\203K\312\363K\312\363\27P\203\27P\203" - "\27P\203\0\0\5\40H\2\36E\5\40H\2\36E\2\36E\5\40H\2\36E\5\40H\2\36E\2" - "\36E\2\36E\2\36E\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\4\37M\0\"" - "M\4\37M\0\"M\4\37M\4\37M\0\"M\0\"M\0#O\0\"M\0\"M\5\40H\0$P\0#O\0$P\0" - "%Q\0$P\14#Q\0$P\0%Q\0%Q\0%Q\14#Q\14#Q\14#Q\14#Q\14#Q\0%Q\0%Q\14#Q\0%" - "Q\2'T\2'T\2'T\2'T\14#Q\2'T\2'T\2'T\10*X\2'T\10*X\10*X\10*X\10*X\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\12+Y\12+Y\12+YK\312\363K\312\363\12+Y\12+Y\12+Y\0\0\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11" - ">q\11>q\15@s\15@s\15@s\15@s\15@s\15@s\17At\17At\17At\23Bv\23Bv\23Bv\24" - "Cw\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\32" - "G{\34H|\32G{\34H|\34H|\32G{\35I}\35I}\35I}\35I}\20L\177\20L\177\20L\177" - "\20L\177\22M\200\22M\200\22M\200\24N\201\24N\201\24N\201\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\33Q\205\33Q\205\33Q\205K\312\363K\312\363\33Q\205\33Q\205\33Q\205\0" - "\0\2\36E\2\36E\5\40H\2\36E\5\40H\2\36E\5\40H\2\36E\2\36E\5\40H\5\40H" - "\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\4\37M\4\37M\4\37M\4\37M\0\"M\4\37" - "M\0\"M\0\"M\0\"M\14#Q\0\"M\0#O\0$P\0#O\0$P\0$P\0$P\0%Q\14#Q\14#Q\14#" - "Q\0%Q\0%Q\14#Q\0%Q\0%Q\0%Q\14#Q\0%Q\0%Q\14#Q\0%Q\2'T\14#Q\2'T\2'T\2'" - "T\2'T\2'T\2'T\10*X\10*X\2'T\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10" - "*X\10*X\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13" - ",Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\0\0\11>q\11>q\11>q\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\17At\15" - "@s\15@s\15@s\17At\17At\17At\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24" - "Cw\24Cw\24Cw\30Ey\30Ey\30Ey\30Ey\30Ey\30Ey\32G{\30Ey\34H|\20L\177\34" - "H|\34H|\35I}\35I}\35I}\34H|\35I}\20L\177\20L\177\20L\177\20L\177\35I" - "}\22M\200\22M\200\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202\26" - "O\202\26O\202\26O\202\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203" - "\27P\203\27P\203\27P\203\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\0\0\2\36E\2\36E" - "\5\40H\2\36E\2\36E\5\40H\2\36E\5\40H\5\40H\5\40H\5\40H\5\40H\5\40H\5" - "\40H\5\40H\0\"M\4\37M\0\"M\4\37M\4\37M\4\37M\4\37M\4\37M\0\"M\0#O\0\"" - "M\0\"M\0$P\0$P\0#O\0#O\14#Q\0%Q\14#Q\0$P\14#Q\0%Q\0%Q\0%Q\14#Q\0%Q\14" - "#Q\14#Q\0%Q\0%Q\14#Q\0%Q\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\2'T\10*X\10" - "*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\10*X\12+Y\12+Y\12" - "+Y\12+Y\12+Y\12+Y\12+Y\12+Y\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13,Z\13" - ",Z\13,Z\13,Z\13,Z\13,Z\0\0\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11>q\11" - ">q\11>q\11>q\11>q\11>q\11>q\15@s\15@s\15@s\15@s\15@s\15@s\15@s\17At\17" - "At\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\23Bv\24Cw\24Cw\24Cw\24Cw\24Cw\24Cw\30" - "Ey\24Cw\30Ey\30Ey\30Ey\30Ey\32G{\34H|\32G{\34H|\20L\177\35I}\35I}\20" - "L\177\35I}\34H|\20L\177\20L\177\20L\177\35I}\22M\200\22M\200\22M\200" - "\24N\201\24N\201\26O\202\26O\202\26O\202\26O\202\26O\202\26O\202\26O" - "\202\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203\27P\203" - "\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q" - "\205\33Q\205\33Q\205\33Q\205\33Q\205\33Q\205\0\0", -}; - - diff --git a/polymer-perf/eduke32/build/rsrc/game.bmp b/polymer-perf/eduke32/build/rsrc/game.bmp deleted file mode 100644 index 1b00a3ad0bfac200b6ed1d0f988ed73f4ef546fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26774 zcma)_37j2OnZ>^hB%Q6h15HmN49KVnNmv4Ow={u3fT2S--88tsAP5SGh=U-Yj)L-2 zK-rN+Kv}{n76irsA{hl8HbIm{Q3hpDWK94I#c`kIob!G6R@HkQX6kjm+^&Y#9U37$L`TaU(^Re|F{LYzVHp!;y@hcBATYrZCzJ^EmJ9YDJTW5-6>5q;2Nd^lfI_0H}* zr};K(_f7G;nXSLaTWr%^Hn-l9xwgsf+t^0Ki){V97TU~r%(u7f(Qh;N-pab(wa~iW zv9)!-dvjZV-z{yk@qXKUY&+}OZ!4R>_keA&*Py-aoqe{!{##qufm>SVd$zT??;fy) z?;NzQ1Nv;!eYdk&2Q9LV_kX+1-)}ox@8GR%i+3-!1^aJrJ@4Pvw%Tt;d-H+Y+Xjd9 z+2#lAV7-U-+ut5GVBH_s&bB>Zsm(bY|K@|++oFSaww@#VZG#UF*uX)%S?@o+-TDq4 zwmC;FwSmKTw+)Zp#kM$d$Tm7=S6gz#sJ-pj-E8M0_p&XH-NTlCc-*%A=$LJH^xn4B z@gp{J%s#fwC-$_j{AiWBWK7k$A_ zy7)Bv{KaS4aaW#fpS|w zOK-c*&Rcb*ee}`K*(G;eYZrX$YP(?7^>)oSZm^j>h7DYxaU^8?*5f_?Y+0#%6smx>mRtyZu;IgZPopE*c}gj$L@OYZu{;- z_uAb*yx;D5_}DYhJQvfBmAZer1il@S8REa`~#g`r5Cp{OxPD z`nRv!Yp?&te*2%V+v|V$o&D~QzqjB2=@0gYKmXDG_?JJ~pZ@x1`}2SO#s2a?f3?5< z&wtw@Edza6w9@?mwg(3L`v(^fE?$h^!6jUlV%d$$5SL{`Bg3O3qhljuSdWg3jg5|u zV?8!DGLFYaM#juKCUfbS(lK=kmyRjApE_mQv}x0^%&0A$on4*XGrPOHXJP5->FMP% zhd)?pJ!iIVT+N*KEMZ7|6#*#>WK@?vBYs z@95~5B4l8b9e3^IU7cMbpBdmzF6z_(5&J50FB+($iyp1$9}LN*_@KZgxdeyeBO_(o z0`#H)z8R>&jTIJ`d@8}wiV47HQ1UKlPV%1hD0$niOSGdXu&TJjE(3M5^bG(!kvAoW zO_nVif>ql04e^TtD{zxo=)@;($PM}16&Ey;MSLV_EVn{1Zu0eddyjm@cU_kEZ%VVvClhfuBxfUF7IG6^RvAo+6PiCK zyo_D{^5Z|_f8e2g&^t$=HyYsn7PM@Ft;w>vdZzklo8*cWq)J%j{j0IhXZGyf{@=Ot zJ2xSDi{1mFIPXQPmB$Pe7q|yvwu+2$+#2lh*(2cR!=C2O?*Vz{cCBMg)jK9LO<)pV zx0_sjlYvOZU*N9yl0p7K5Mh^gaCrquK5N!`dFUkgoZf%*ewp&S#$8ig$eA2N=b*Z0TaI(gANk0? zKK05gPu+10OagrL%Za#&PjtDQp`u`!*1o8Vb;SDT{ahH^y%kf%x&<3mHw zm*vqcR1O_I32`f*!0j>a)C6~QJRqZM2%^);-C`9EK%RyecXlTCj=g)9<;%@}i6EI6 zJi4c+IM8#ok`(u<_Sv#LVHx&)_~_wfxdzD0LHfi2lhXNK{T28Oaxb&I&Z-n=8Y&KF z-CLHAZA+h{tw^xj=i^)<=GW?AECLlf+unroG#&_T7~3F74%JV?>6+2 zm$dVP_j|D{k3*D1JqQO#adgAh#h)OwN|ko2C=4}j?)3n7zT-car z98%*q*Hz$gz1OaI4sxl^S_R|{#gQpMX95CSJ{hG?=wE@i>m7a5hagIxW^Z+mch-w> zjy!}f3areiVFRFo+xsQ`EfL>9@sQkK7B2VMaxM;cyWx(qeD&d5ZnzP1pB0$zs9%Dc)VL9@JyY0> z@IT)cvA5(nXAv9ysC;q{PVwavtT0|O2SduWTP1siF5$xQht;7gPOE&mEKk%-nHGmb zG|q=lRBF4j?SgxsrODYqwy>!>I8!km7B&Y3DLSKP^g&aUZG zx1~#wf)@ri4ykCoMCYVW1cViPr;??WU2g>|Tb5XSbDH2?ot*J}_o}PDbP<+|FLJ%v zFY(qp_Wwh1piA@t4xGRSH*QOpKHe}Pidp6$d@@b%J_m9J`NUREk&GEIG055nKzo(5*H zKuLML)h6*bd#>jCdTmp2On+u-g0HTb$DRH#ityJOhm@Rc3Zt-haw5SvBzZM%V)Uu< zdpf~k+5}FoOh~T0A-IeM#T!=Xj9T0?CF<|~{=pDiT~6c^S|z-K-at$Fm=Ef@Lwp-u z6aMDBVFv#5)20E31_u)j5#X)-BF780q*Q6&x5gbGFBfC3j>01;`3B%lt|TNnLIoyo z-#6y=nC~!8W;i%m6c*~76AF$8^`yEdUoXYm_pLn9d>-#L^EfYVm5CKkl9O3CG#UH8 z^{ZdK6?ZqRxM9UNa6dGR`Ww?sa+4g2GvH_e3cePr@EN=tWM(J|96Q@`#*D3Thf1aU z?YPJ2!}vnyA5$7HVe(6m3w`iz?fi)g;=l3o z!AS9#&!<|N9+$zXWaaP%ca1y_Qo!cxpZ4RIe|6JlUElVde;N~fal_xNq8Y>NoZj1T zSAo0K(p;M%I$sd)4*n4vKDhe@kH7r<4?e|d8@MrOdcPDq^H4nwCRi(XBIgjK0vN4i zlBd=q#(88S^j^xDqB>_kh9E5VfrzH-_=IMh;Kq?Rv##`? zROdvTKyHBN5N{E@;THB|{M5nWaU7>D3WSQ;Qh+C`IJi1p4Lo>5bKFfpu4+ZIWr7cZ zdkEY!I}^ADAjO2zFm=v$@DQEd)BAGRuYC2HyN+LvBR;r$#4T{V)9|?B5F)x$S_QAj zCAv$_cPQFE& zpt%2|{{Byv<)tVO!Mz*xCU?y$Dr>1Yi&_Qt#Cq#dqEm5oPmu5Qlk!I!;@v9>^iFao zr$}*DhoL!8XZvQHdtP}-IZZ-?SRkMnBPI2?F3YRzF zmRmYH8XhdgjajGJP=NFB6LVZK?)oM0Ag-j=mU~9z&3z+Qz`ZoMyIT~8eo!zUoOmN} zkvI1(Zk#SOTNdE#oXp_GG2&D9Bsjs5+!DTir^i9w+&Ao26fimTo`o_F$IBX4;h2eE z+P78lb$qF{g|DE^nTaeBoqGnj(eabw(i?qKRV{OZ<0b`lQ#f{QotlDI@U4-}(OT@L zC@=_-dlrtV@<1Q{ds^5ziGUF(EM9{QY~EFm5}f4tM>;G7e`8P7n}U0&VBFMcvwoIX z1W()$mXM)%Mo)h;&hb(;75}imAKXivdlt|B;_yvyr*a$^D8{LHMOedjbi9q5t=oJr zA$f4~xJL$88ba_W4K@5^!4qZ1<_32AF0N_|hW*gHhX-tMEVyRz81Z41l!Y0*g?pWK zu+LU*`^_c(ORjYuL3-Zp^ZQPbGzeWpeUKDT`xO<_vLIo#(!Cj3%DzSLH!Rr)vLXCS;TB^sA zTi}x^;vN=wwhC)npZ`EJEcHyOxUn^F-u!uUxtcfMEv_|R0&bY4&dtu*T4VW)Q<>80 zaHlrE%jo{9qQF0)-os(>>~Sa8Q57doPO0Gmd;VP9=Fguy7vyt4w(4hV);#sCk1bTw ziUMXy+!CBt!GK>WjtM8d0>#Ep*68dzk@Cd^W8tOD_U0+C>6y`qeQ4Q6!$4UYt;I%nWPoB%Y8J$-&Bex#U(h*!c;+``{?66dc*40C2KSs~agIN=qLu?E ziw=<2#``)rxor}T`h0(5ZfyKWS+2qJ;9hrKv*D3pNbcZSappLSS|0M0#i2O58;E2B zM+Y|q=MT=$e@NQT`%qav@7xO(xZdiTvWhNLt4b__d#coi%~tM7lUA1HR>Yn(X`8aV ztKuFRPTWZG3Y=9f7F?ecwMu~3j1qdo;0LZLPbK%<`KOlUCxUxnojXEBBYx#^9@VGI zHEuR6?gkg``&Pel@>Wx)Zgui2uYP9IBTw2Pe0+?ihdLQF7yR2T+@W4{PwL6^99&$MxMSu6Rvw z_R9(O4dI*Ixo=_`p@FkfoQJV^@VL$5w8jMc#z!N98_dL(#XZPtBd1T?h)vB~Jw6YF z7<4Y@;)BoS*IvH-a@eIP=GOFfizllzbKIv9kt%J9lRi=$ciILw+#t)d|a zN5_2;c)e$;S9;$>8?>PnxaZ;nBp5GaNomNL8zrwR&haPaZ36ecS#x-zR|~|A&!o^K z4z2+|6^D7qSCN$_5=n8mmkR`svBw+0Y)Rbn8{BS{94qx9pH|@{tQvpn;GwpoOLOWC zZl1Vv@L{DPEuM0mhgBxFigR> zi+M!dqY zCpUZo&oL(R~|z0%Hv66`hwOVx53}~gP0CZczT5edF7R;RpNLMaz(XD zHEyD&N|KY<7xqi}qz29wNO2~4kXLgzKOa#|+>+uhHU)QV=Aif~FfR8Ov&K#Zc_N48 z5#&6qBCoKn#gM-+p{ME!^zsSGgPT{kR*Fk{KEgQ=4o|ei3QZ21r|K|)yVezU=H}=Q z?jYAaLxtq6Nv;tHqmaO(Ya&&$;BDNE%W~Z^1W!>uv#M5Tat@uf5s2h&5wg2Uu#xm8 zW0G5{;}1|L#Tke$Im#?5UXA(5XG5Epq0az_t?SLDej;&!KyxrN-lQXQa}7AD7_ z-!W0|ba3j8#j%lw;Kda$xL60jLpbVb58{m$fG-vlDdDAPZ z$aA$KlPA3+QJ5#eO+Imt;_4{B0x-z=Za{NSazB+a=y}*;aw2P}lv671?3Bam(M5pH9PG*7NOK|;nf0_ijSHk2RIQ^%VC%W<+ zc9z5fc4nc6&6|heI0@o1HO0!h(K{)+hj{n|XGz`S z{1k@^q&QX+a0}c8pW}ij&0TWjN*aSO2ZGBrmxxh6yyE>6LT7Gpkz9fk7G`myqZt^7 zWb>4WoCWbRgy^4?+#QbfT)NyX9zIDQ!wJC?vY@r{Nc3Du{gZ*nLTf^=K=s6pGhb4i z+!UJ*LEnVYsXMwTT_m$mavjV9JG-am%bEnaSrp{Tmc*St+?TT?BWnW>2e}Rl#puZ> zXOe3S%DLi3f$GsOapKE;f<&Q1(u$Jnm(fDeljO`5P4xv{>z;s5UP;`w4{U|K$%|i_ zCeSqs!R0`24Ey!cRwhTkBz)%P$3R(>NN{#YT~bV|^AFtD`lkjVo)(AXQEAaD)LWV> z5LFMdK4IMl2eSt{u9&fzsmZ=p$$3s9#vnI2J0`fX(s@8AE*B%f9hJ0d06jz1IS#RP zITC4e%=Ohlz0gWFXB={#Chq(Rxy(&yETMJqJ2|sFhq=4Fb~Gz;MclyW`O6e3Y2ZoB z409870%#HBZ4ZU5AAjh&n1nmq)J1 zClxn`b?Plpc1UK5w07Y~$55N|Z3)R89W|oJ>6IKTh;ndqe#s9gWTOzzfw`6ch{xa- zW+F^pi^P^ni{x2voY+l*Gq2Sx#Z6w|%PR5>Qn79pk+Wh6vsB;<61P5Q#;P^+&cMEr z|5SsrSt{`9Dp)!ciCJ>acM#*wt)8g}SBj(zgyw`-7v+|YvM>{U6yik`=`gt@N8eQU zgum$%*4Wht6kK9gI)kTR;R7O9nCC19x#r9)%Y!`nC9iXV;L30$O6Uu*!O1SEyCBE2 zUMS*UD9qzPxoWL6ogjHpAj`qsN%E${MU0hx{GQwR#X8JV9n{j~4iX#srJm_{i4vcJ=V!|K(Uzc2 z(EddhI}T(BSRvO<7}?Cq7Yu8;PeOkRo;hK^rh^Gg%3!9kQ;9yqW$dxUI`NgR(jSHmaF62~>Wa2;0|JVlDAfhVD>75x&} zcts5TjZuil;$)UMZjb)Oju~T*d;+y;ZJN8TI3Hop9P4E*3;2)*G_8YRXa z=L(-tX8&=?u{|4F`;Tjm7UwY6w3+A~I1h+mq23iYhQwhq(aY?g!X_>CX8+`kKYWRz zCE1+dadLu3Sa4p7-1yHzaCf+mnRE(&>2F!3zDlC=`LH?89@fl)Dsd{fVRLcU!C`PB zYc)Q`E*YASxl!;p8Ubp&Mn|`@S?F^NL#h(N&GS;=&Y#VW!CufnhuD&scYc%Z=%i_J zn^%(ic@>_YNB^vI%d-6X0VxggaeW~OfMIapGg@4Bk&B&~2y(n>K5y1VHv>4&jbw3d zMIj^H9j;DEG*UaUu%i)t(BBZegye8pb@hshEu44lXyImENdJ0J6P2Wt*uNQsTXH5TwaqJZ1I?UGAwM;CKy1=|wj-a+wk-Ru^E^L+7C z*IP!BbmW#zJXGjwM}^=nHhr#byi86Z0b!=F^G-{j>H^p|r2}#llR*%F({yKuIPOO!Qxc-Fa=V47O9)FEWHmoztT zsS#=pp2cGv`YW^eCBnR}0Nltyl_-(n00&5RIJrTIo1(v!9+_9mrU|sjHJBab19OE?$3&mWTFCN78RsFagg49l4&%(gzb*Y_PZE#-U$G8-4 z4K;_&y=KAnRlMFuawoyzak!O7fJhC^>2Ca0nL0^MX1)jf#Y?Fj8PD)V**dE z-e;fjar`FJ;9+$IyjYWpusOH~aebA(`39YnU9+07d0b#kkMKv_PEXV5!C1*xRNXU? z=y4rhd`U$(T%qFSEc2Pzv;)={gCH)T$Fb})zK`AlrXt(p{kXC@uGd^bZvU)cp}#sCXQD*AyKk4osJu zO>ydI3wtL%U%XxqxG_plaeaWlKK$rZmE^+;n)1fb3v6Yf|3P}TO?l%!$LFQ$+>jg= z$2YOy=4n{Xl5-`Vbd}_;dRk|A_GNxvs>k&vc+=yI1sqsbylK=VnM@4HlSinw(D9J$ zg2+J&@gDK>uEUkyh(qt3^h%0x_Dg9_k-1QB_k^~jHMdC3r@4WDkUm!@=r(YU+M4?? z-$3qy)5Z>))@~T7Pdl-BASd@|otujDr**ceci!c6kFYm7tT(}l{W;$zw?0=VaG9kV z@s%kWf9P;(NUH#gTvS;SQ+ih%_t@a`NSHC`jRL2^Esrw}y>q5C48g@HEb1z7sp}g1 zLzJ99;O6%%;0r;>jQSI6AAzdg3CZ2CNEK(2o}z55gpX#RQEX=IbGphxu3&Kt7>t#w zR0*p9&#CAH8iJ%js|`J-Cuf5j4%6p!om{flz%hQn;~Y3W$zc`xfKHIuuDRl+QeRIq z2SMM|TSLC$5F=34IbCqgHpT4Rg0F-pJJHp=%*|sTg09G=xPx=T>4P|hWOYSF=@4k_ zKk|A!B5?X7{GC5NNy%BP(BidJ5jSH(9uS&Sx+^Nr=q=#8QWRLZ-aJx9=ysEn9n`95 z`V%X(a6*533uu)L-mJ%EUyxDn z#H_ZcJyIS|!Qa76wY315xl;SyQl2AZl?8nnhFmiX$v$2$vO?`>!W(h>sIPLR@`?{Y zGC2(aa=%Ob{-@)U8~(--rbG?=q_`x{d5B4;Vnx+Qm<8NuLlT|ZYg-%pKyQ9;B0d1v z=$GLcO3sV%Quk!Hl*O~j6FA!->HSXIp*OJOdo?7x98TS9USa3NRm=1@Z&Vy+P|mnF z2Z(y|A~W7pt&bv<4~=mBNs`We!$E>{8#FyemTf57R18u=p#6O zl35bCOiu7&=AptI7AH51jvrw;un47H@Opdo9N&cd7N(xhpS3- zYUg*6LwBOXC(Q5oP%hc|nH?8hUm`>JN^*d+vJIm^cJ@nzA?>aWPeZ7Vr6>@G_&z0p zXY>g)XRfrE9OTlL<^ZSYWpRI$+{_c6!sDqhe!DHMh~XCx=oWS%xLhv5d32mTlZvx* zD$cQvSa-L`C+G_Nem0!gsEgi0?p^_U_6kf+#f9$1pv2<$cKEmhZZZ=)`Gxp2Iacy{ zmYjNXGC^{my>V7Sr(n%U9E-^iOvCz{-1t~4zgwXudy^biQAwUB6Pa7&p|IjFq@R=O zlf4+6r4A$;Pli%E5&oYLdjX!f)%o}1wzFgn6a&D7x~S)N+-Z{ z0uPSKerb|NBBs;fE_k44k2ty;CUFy4PI0#Y9#%}4O%X|(=W-}l}3Kk9hKtRBsov)ArhUOCTI7Q#W@CH&J45Y#_=C^kx8%-+%$GpoF6Y@ zL(&&%!sRuiqtf#4i%n5Zm&@r~k(X*aw|ugQ#7S-eyXKTUDn)4y_yo>+1yu}RLQ?vq9Qy2LPt_){x*DJi|8 zOeA{E=hxu4$@RZMV2H~rT1jsV zL6Ilm_QiRl1$qNO&Z0#%BFzHyu!`r37q_9gz=`kv#vQ*OS>(KKB*`taU^S8C^h!FR z;xjm6SMY8YjQ7mJpytO!Bzx60X&TnIkt-Cu>Yd>gKb?<2BsQyDlqv-0I&-`16rJ?^ af#kJZNj67)*n0hhxG6VUka{SEH~U`=C>Tiq diff --git a/polymer-perf/eduke32/build/rsrc/game.xcf b/polymer-perf/eduke32/build/rsrc/game.xcf deleted file mode 100644 index fadc54b2d9b82786e3cc3e30a3b53b4d32dd4cee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86377 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 - -/* GdkPixbuf RGB C-Source image dump */ - -const GdkPixdata startbanner_pixdata = { - 0x47646b50, /* Pixbuf magic: 'GdkP' */ - 24 + 76160, /* header length + pixel_data length */ - 0x1010001, /* pixdata_type */ - 272, /* rowstride */ - 90, /* width */ - 280, /* height */ - /* pixel_data: */ - "\30""1\1\30""1\1\30""1\1\25""0\10\30""1\1\25""0\10\30""1\1\30""1\1\25" - "0\10\30""1\1\25""0\10\30""1\1\30""1\1\23""3\3\27""1\12\23""3\3\23""3" - "\3\23""3\3\23""3\3\27""1\12\23""3\3\23""3\3\27""1\12\23""3\3\23""3\3" - "\30""1\1\23""3\3\27""1\12\24""4\5\24""4\5\25""5\6\25""5\6\25""5\6\25" - "5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\32""8\2\31""9\13\32" - "8\2\32""8\2\27""8\11\34:\5\34:\5\27""8\11\34:\5\27=\7\27=\7\27=\7\27" - "=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12" - "\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32" - "\77\12\32\77\12\36B\5\32\77\12\36B\5\33A\14\33A\14\36B\5\33A\14\36B\5" - "\33A\14\36B\5\33A\14\33A\14\0\0.W\23.W\23.W\23.W\23.W\23.W\23.W\23""2" - "Z\15.W\23.W\23.W\23.W\23""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""2Z\15""0" - "Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0" - "Y\24""2Z\15-\\\16-\\\16""0Y\24-\\\16-\\\16""3[\16/^\20""3[\16/^\20/^" - "\20/^\20""3[\16""0_\21""3[\16""0_\21""0_\21""0_\21""2a\23""2a\23""2a" - "\23""2a\23""3b\24""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""5d\26""7" - "e\17""7e\17""7e\17""7e\17""9g\21""7f\30""4j\23""4j\23""9g\21""4j\23""5" - "k\24""4j\23""9g\21""5k\24""9g\21""5k\24""4j\23""5k\24""9g\21""4j\23""5" - "k\24""5k\24""5k\24""6l\25""9g\21""5k\24""5k\24""5k\24""5k\24""6l\25""9" - "g\21\0\0\30""1\1\30""1\1\30""1\1\25""0\10\30""1\1\25""0\10\30""1\1\25" - "0\10\30""1\1\25""0\10\25""0\10\23""3\3\23""3\3\27""1\12\23""3\3\27""1" - "\12\23""3\3\23""3\3\23""3\3\30""1\1\23""3\3\23""3\3\23""3\3\23""3\3\30" - "1\1\23""3\3\23""3\3\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25""5\6\25" - "5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\31""9\13\32""8\2\32" - "8\2\32""8\2\27""8\11\34:\5\34:\5\34:\5\27=\7\27=\7\27=\7\27=\7\27=\7" - "\30>\10\30>\10\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32" - "\77\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\32\77" - "\12\32\77\12\32\77\12\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\36" - "B\5\33A\14\36B\5\33A\14\0\0.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23." - "W\23""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0" - "Y\24""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""2Z\15""2Z\15""2" - "Z\15""2Z\15""3[\16-\\\16""3[\16""0Y\24/^\20/^\20""3[\16/^\20/^\20/^\20" - "3[\16""0_\21""0_\21""3[\16""0_\21""3[\16""2a\23""2a\23""2a\23""2a\23" - "3b\24""3b\24""3b\24""3b\24""3b\24""7e\17""5d\26""5d\26""5d\26""5d\26" - "7e\17""5d\26""9g\21""9g\21""9g\21""4j\23""4j\23""4j\23""9g\21""4j\23" - "9g\21""4j\23""9g\21""5k\24""9g\21""5k\24""9g\21""4j\23""9g\21""5k\24" - "9g\21""6l\25""9g\21""5k\24""5k\24\202\320q\202\320q9g\21""6l\25""9g\21" - "\0\0\30""1\1\25""0\10\30""1\1\25""0\10\30""1\1\30""1\1\25""0\10\25""0" - "\10\23""3\3\27""1\12\23""3\3\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3" - "\27""1\12\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3\30""1\1\23""3\3\27" - "1\12\23""3\3\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25""5\6\25""5\6" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\32""8\2\31""9\13\31""9\13\32" - "8\2\27""8\11\34:\5\31""9\13\34:\5\34:\5\27=\7\27=\7\27=\7\27=\7\35;\6" - "\30>\10\30>\10\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77" - "\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32" - "\77\12\32\77\12\33A\14\36B\5\33A\14\33A\14\33A\14\33A\14\36B\5\36B\5" - "\202\320q\202\320q\33A\14\36B\5\33A\14\0\0.W\23.W\23.W\23""2Z\15.W\23" - "0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""0Y\24" - "0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24" - "2Z\15""2Z\15""2Z\15""0Y\24-\\\16-\\\16""0Y\24/^\20/^\20/^\20/^\20""3" - "[\16/^\20/^\20""3[\16""3[\16""0_\21""3[\16""0_\21""2a\23""2a\23""2a\23" - "2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""7e\17" - "5d\26""5d\26""7e\17""5d\26""9g\21""7f\30""4j\23""4j\23""4j\23""9g\21" - "4j\23""9g\21""9g\21""4j\23""9g\21""5k\24""9g\21""5k\24""9g\21""6l\25" - "9g\21""5k\24""9g\21""5k\24""6l\25""9g\21""6l\25""5k\24\202\320q\202\320" - "q5k\24""6l\25""5k\24\0\0\30""1\1\25""0\10\30""1\1\23""3\3\27""1\12\23" - "3\3\23""3\3\27""1\12\30""1\1\23""3\3\23""3\3\23""3\3\23""3\3\23""3\3" - "\27""1\12\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3\23""3\3\30""1\1\23" - "3\3\30""1\1\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25""5\6\25""5\6\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\32""8\2\32""8\2\32""8\2\31""9" - "\13\34:\5\27""8\11\31""9\13\34:\5\31""9\13\27=\7\27=\7\27=\7\30>\10\30" - ">\10\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77" - "\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\32\77" - "\12\32\77\12\33A\14\33A\14\33A\14\33A\14\33A\14\36B\5\33A\14\33A\14\36" - "B\5\33A\14\202\320q\202\320q\36B\5\33A\14\36B\5\0\0.W\23""0Y\24""2Z\15" - "0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15" - "0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24" - "0Y\24""2Z\15""0Y\24-\\\16-\\\16""3[\16-\\\16""3[\16/^\20/^\20""3[\16" - "/^\20/^\20""3[\16""3[\16""0_\21""0_\21""3[\16""0_\21""0_\21""2a\23""2" - "a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""5" - "d\26""7e\17""7e\17""7e\17""9g\21""7f\30""9g\21""4j\23""4j\23""4j\23""9" - "g\21""4j\23""9g\21""4j\23""4j\23""4j\23""9g\21""5k\24""9g\21""9g\21""5" - "k\24""9g\21""5k\24""9g\21""5k\24""9g\21""5k\24""9g\21""6l\25""5k\24""5" - "k\24\202\320q\202\320q9g\21""6l\25""6l\25\0\0\27""1\12\30""1\1\23""3" - "\3\23""3\3\30""1\1\23""3\3\23""3\3\30""1\1\23""3\3\23""3\3\27""1\12\23" - "3\3\23""3\3\30""1\1\30""1\1\23""3\3\23""3\3\23""3\3\23""3\3\27""1\12" - "\23""3\3\27""1\12\23""3\3\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25" - "5\6\25""5\6\27""7\10\27""7\10\25""5\6\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\31""9\13\32" - "8\2\32""8\2\32""8\2\34:\5\27""8\11\34:\5\34:\5\27=\7\27=\7\27=\7\27=" - "\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32" - "\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77" - "\12\32\77\12\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\33" - "A\14\36B\5\33A\14\36B\5\202\320q\202\320q\33A\14\33A\14\36B\5\0\0""0" - "Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0" - "Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0" - "Y\24""0Y\24""0Y\24""2Z\15""0Y\24-\\\16-\\\16-\\\16-\\\16""3[\16""3[\16" - "/^\20/^\20/^\20/^\20""3[\16""0_\21""0_\21""0_\21""0_\21""0_\21""0_\21" - "2a\23""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""7e\17""5d\26" - "5d\26""7e\17""5d\26""5d\26""7e\17""9g\21""9g\21""7f\30""5k\24""9g\21" - "9g\21""9g\21""4j\23""9g\21""4j\23""9g\21""4j\23""9g\21""5k\24""9g\21" - "4j\23""9g\21""6l\25""5k\24""6l\25""5k\24""6l\25""5k\24""9g\21""5k\24" - "9g\21""6l\25""5k\24\202\320q\202\320q5k\24""9g\21""5k\24\0\0\23""3\3" - "\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3\23""3\3\23""3\3\23""3\3\23" - "3\3\27""1\12\30""1\1\23""3\3\23""3\3\23""3\3\30""1\1\23""3\3\30""1\1" - "\23""3\3\27""1\12\23""3\3\24""4\5\24""4\5\30""1\1\25""5\6\25""5\6\25" - "5\6\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\31""9\13\32" - "8\2\31""9\13\32""8\2\31""9\13\34:\5\34:\5\34:\5\34:\5\27=\7\27=\7\27" - "=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\32" - "\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32" - "\77\12\36B\5\33A\14\33A\14\36B\5\33A\14\36B\5\36B\5\33A\14\33A\14\36" - "B\5\33A\14\33A\14\36B\5\33A\14\36B\5\202\320q\202\320q\36B\5\33A\14\36" - "B\5\0\0""2Z\15""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24" - "0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24" - "0Y\24""0Y\24""2Z\15""0Y\24-\\\16-\\\16-\\\16-\\\16""0Y\24/^\20""3[\16" - "/^\20/^\20""3[\16""3[\16""0_\21""0_\21""0_\21""0_\21""0_\21""0_\21""0" - "_\21""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""7e\17""5" - "d\26""7e\17""5d\26""5d\26""5d\26""7e\17""7f\30""9g\21""7f\30""9g\21""5" - "k\24""9g\21""4j\23""9g\21""4j\23""4j\23""9g\21""4j\23""4j\23""5k\24""6" - "l\25""9g\21""5k\24""5k\24""9g\21""6l\25""5k\24""9g\21""9g\21""5k\24""9" - "g\21""6l\25""9g\21""5k\24""5k\24\202\320q\202\320q5k\24""9g\21""5k\24" - "\0\0\23""3\3\23""3\3\30""1\1\23""3\3\23""3\3\30""1\1\23""3\3\23""3\3" - "\27""1\12\23""3\3\23""3\3\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3\27" - "1\12\23""3\3\30""1\1\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25""5\6" - "\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\31""9" - "\13\32""8\2\31""9\13\32""8\2\27""8\11\34:\5\27""8\11\34:\5\34:\5\27=" - "\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\32\77\12" - "\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\36" - "B\5\32\77\12\36B\5\33A\14\33A\14\33A\14\36B\5\33A\14\33A\14\36B\5\33" - "A\14\33A\14\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\202\320q\202\320" - "q\36B\5\33A\14\36B\5\0\0""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2" - "Z\15""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0" - "Y\24""0Y\24""2Z\15""2Z\15""0Y\24""3[\16-\\\16-\\\16-\\\16""3[\16-\\\16" - "3[\16/^\20""3[\16/^\20/^\20/^\20""0_\21""0_\21""3[\16""0_\21""3[\16""0" - "_\21""2a\23""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""7" - "e\17""5d\26""7e\17""7e\17""7e\17""7e\17""7e\17""7f\30""9g\21""4j\23""9" - "g\21""5k\24""9g\21""5k\24""4j\23""9g\21""5k\24""4j\23""9g\21""4j\23""9" - "g\21""6l\25""9g\21""5k\24""9g\21""6l\25""5k\24""9g\21""5k\24""5k\24""5" - "k\24""9g\21""5k\24""6l\25""9g\21""5k\24""9g\21\202\320q\202\320q5k\24" - "5k\24""9g\21\0\0\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3\23""3\3\23" - "3\3\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3\27""1\12\23""3\3\23""3\3" - "\23""3\3\27""1\12\24""4\5\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25" - "5\6\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\31" - "9\13\32""8\2\31""9\13\32""8\2\31""9\13\34:\5\27""8\11\34:\5\27=\7\27" - "=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\32\77\12\36B\5" - "\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32" - "\77\12\32\77\12\33A\14\36B\5\33A\14\33A\14\33A\14\33A\14\36B\5\33A\14" - "\36B\5\33A\14\36B\5\33A\14\33A\14\36B\5\36B\5\33A\14\33A\14\202\320q" - "\202\320q\33A\14\33A\14\36B\5\0\0""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24" - "2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""0Y\24" - "0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""2Z\15-\\\16-\\\16-\\\16""0Y\24/^\20" - "3[\16/^\20""3[\16/^\20""3[\16""3[\16""0_\21""0_\21""0_\21""0_\21""0_" - "\21""3[\16""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""3" - "b\24""7e\17""5d\26""5d\26""5d\26""7e\17""5d\26""9g\21""9g\21""9g\21""5" - "k\24""9g\21""9g\21""4j\23""5k\24""4j\23""5k\24""9g\21""9g\21""4j\23""9" - "g\21""6l\25""5k\24""6l\25""6l\25""9g\21""6l\25""9g\21""6l\25""9g\21""6" - "l\25""9g\21""5k\24""9g\21""5k\24""6l\25""5k\24""9g\21""5k\24\202\320" - "q\202\320q9g\21""5k\24""5k\24\0\0\27""1\12\30""1\1\23""3\3\23""3\3\23" - "3\3\27""1\12\23""3\3\27""1\12\30""1\1\23""3\3\23""3\3\27""1\12\23""3" - "\3\23""3\3\30""1\1\24""4\5\24""4\5\24""4\5\24""4\5\24""4\5\30""1\1\25" - "5\6\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\31""9\13\32""8\2\31""9\13\32""8\2\27""8\11\34:\5\34:\5\27""8\11" - "\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\32\77\12\32\77\12\36B\5\32\77" - "\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12" - "\32\77\12\32\77\12\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\33A" - "\14\33A\14\33A\14\33A\14\33A\14\33A\14\33A\14\33A\14\36B\5\33A\14\33" - "A\14\33A\14\202\320q\202\320q\33A\14\36B\5\33A\14\0\0""0Y\24""0Y\24""0" - "Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0" - "Y\24""2Z\15""2Z\15""0Y\24""0Y\24""2Z\15""2Z\15-\\\16-\\\16""3[\16-\\" - "\16/^\20""3[\16/^\20""3[\16/^\20""3[\16/^\20""0_\21""3[\16""0_\21""0" - "_\21""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3" - "b\24""3b\24""5d\26""5d\26""7e\17""5d\26""5d\26""7e\17""5d\26""9g\21""9" - "g\21""4j\23""5k\24""9g\21""5k\24""9g\21""4j\23""9g\21""9g\21""5k\24""9" - "g\21""5k\24""9g\21""5k\24""9g\21""6l\25""9g\21""6l\25""5k\24""6l\25""9" - "g\21""9g\21""9g\21""6l\25""9g\21""9g\21""9g\21""9g\21""5k\24""9g\21""5" - "k\24""9g\21\202\320q\202\320q9g\21""5k\24""9g\21\0\0\27""1\12\23""3\3" - "\27""1\12\23""3\3\30""1\1\27""1\12\23""3\3\27""1\12\23""3\3\23""3\3\23" - "3\3\23""3\3\27""1\12\24""4\5\24""4\5\24""4\5\24""4\5\24""4\5\25""5\6" - "\25""5\6\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\31""9\13\32""8\2\31""9\13\32""8\2\31""9\13\34:\5\34:\5\34" - ":\5\31""9\13\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\32\77\12\32\77\12" - "\32\77\12\36B\5\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12\32\77" - "\12\36B\5\32\77\12\33A\14\36B\5\33A\14\33A\14\33A\14\33A\14\36B\5\33" - "A\14\36B\5\33A\14\33A\14\33A\14\36B\5\33A\14\33A\14\33A\14\33A\14\33" - "A\14\33A\14\36B\5\33A\14\202\320q\202\320q\33A\14\36B\5\33A\14\0\0""0" - "Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2" - "Z\15""0Y\24""2Z\15""2Z\15""0Y\24""2Z\15""0Y\24""2Z\15-\\\16""3[\16-\\" - "\16/^\20/^\20/^\20""3[\16/^\20""3[\16/^\20""3[\16""0_\21""0_\21""0_\21" - "0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24" - "3b\24""3b\24""5d\26""5d\26""5d\26""5d\26""7e\17""5d\26""7e\17""9g\21" - "4j\23""4j\23""4j\23""9g\21""5k\24""9g\21""5k\24""4j\23""4j\23""5k\24" - "4j\23""5k\24""9g\21""5k\24""9g\21""5k\24""6l\25""9g\21""6l\25""9g\21" - "5k\24""9g\21""6l\25""9g\21""5k\24""5k\24""9g\21""5k\24""5k\24""9g\21" - "9g\21""5k\24""6l\25\202\320q\202\320q5k\24""6l\25""9g\21\0\0\23""3\3" - "\23""3\3\27""1\12\23""3\3\30""1\1\30""1\1\27""1\12\23""3\3\23""3\3\30" - "1\1\23""3\3\24""4\5\24""4\5\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25" - "5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\32" - "8\2\31""9\13\31""9\13\31""9\13\32""8\2\34:\5\34:\5\31""9\13\34:\5\34" - ":\5\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\36B\5\32" - "\77\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\36B\5\32\77\12\36B\5\36" - "B\5\33A\14\33A\14\33A\14\33A\14\36B\5\36B\5\33A\14\33A\14\33A\14\33A" - "\14\36B\5\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14" - "\36B\5\33A\14\202\320q\202\320q\33A\14\36B\5\33A\14\0\0""2Z\15""0Y\24" - "0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""0Y\24" - "2Z\15""0Y\24""0Y\24-\\\16""3[\16-\\\16""0Y\24/^\20""3[\16/^\20/^\20/" - "^\20/^\20""3[\16/^\20/^\20""0_\21""0_\21""3[\16""0_\21""0_\21""0_\21" - "2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""3b\24""5d\26" - "5d\26""7e\17""7e\17""7e\17""5d\26""9g\21""9g\21""9g\21""4j\23""5k\24" - "9g\21""5k\24""5k\24""9g\21""5k\24""9g\21""4j\23""6l\25""5k\24""9g\21" - "5k\24""9g\21""6l\25""5k\24""5k\24""9g\21""5k\24""9g\21""5k\24""6l\25" - "9g\21""6l\25""9g\21""6l\25""6l\25""9g\21""5k\24""6l\25""9g\21""6l\25" - "6l\25\202\320q\202\320q9g\21""6l\25""5k\24\0\0\23""3\3\30""1\1\27""1" - "\12\23""3\3\30""1\1\27""1\12\23""3\3\23""3\3\24""4\5\24""4\5\24""4\5" - "\24""4\5\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25""5\6\25""5\6\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\31""9\13\32""8\2\31" - "9\13\31""9\13\34:\5\27""8\11\34:\5\27""8\11\34:\5\27=\7\27=\7\27=\7\27" - "=\7\30>\10\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5" - "\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5" - "\33A\14\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\36" - "B\5\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14" - "\36B\5\36B\5\202\320q\202\320q\33A\14\33A\14\36B\5\0\0""2Z\15""0Y\24" - "0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""2Z\15""0Y\24""2Z\15""0Y\24" - "-\\\16""3[\16-\\\16-\\\16-\\\16-\\\16""3[\16""3[\16/^\20""3[\16/^\20" - "/^\20""3[\16/^\20""3[\16""0_\21""0_\21""0_\21""0_\21""0_\21""0_\21""2" - "a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""5" - "d\26""7e\17""7e\17""5d\26""7e\17""9g\21""7f\30""4j\23""9g\21""4j\23""4" - "j\23""5k\24""9g\21""9g\21""5k\24""9g\21""4j\23""9g\21""5k\24""9g\21""5" - "k\24""6l\25""9g\21""6l\25""5k\24""9g\21""5k\24""5k\24""9g\21""6l\25""6" - "l\25""5k\24""5k\24""6l\25@m\30""6l\25""6l\25""6l\25""6l\25@m\30""6l\25" - "6l\25\202\320q\202\320q9g\21""9g\21""5k\24\0\0\23""3\3\23""3\3\27""1" - "\12\23""3\3\30""1\1\24""4\5\24""4\5\24""4\5\24""4\5\24""4\5\25""5\6\25" - "5\6\25""5\6\25""5\6\25""5\6\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\31""9\13\31""9\13\31""9\13\32" - "8\2\34:\5\34:\5\31""9\13\34:\5\34:\5\27=\7\27=\7\27=\7\30>\10\30>\10" - "\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32" - "\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\33A\14\33A\14\33A\14" - "\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\33A\14\33" - "A\14\36B\5\33A\14\36B\5\36B\5\36B\5\33A\14\33A\14\33A\14\36B\5\36B\5" - "\33A\14\202\320q\202\320q\33A\14\33A\14\36B\5\0\0""0Y\24""0Y\24""0Y\24" - "0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""2Z\15-\\\16-\\\16""3[\16""3[\16""3" - "[\16-\\\16-\\\16/^\20/^\20""3[\16/^\20""3[\16/^\20""3[\16/^\20/^\20/" - "^\20""0_\21""0_\21""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23""2" - "a\23""3b\24""3b\24""3b\24""3b\24""7e\17""5d\26""5d\26""7e\17""7e\17""7" - "e\17""9g\21""7f\30""4j\23""9g\21""4j\23""9g\21""9g\21""4j\23""4j\23""9" - "g\21""4j\23""9g\21""9g\21""6l\25""5k\24""5k\24""5k\24""9g\21""6l\25""9" - "g\21""5k\24""5k\24""5k\24""5k\24""5k\24""9g\21""6l\25""9g\21""6l\25""9" - "g\21""6l\25""6l\25@m\30""6l\25""6l\25""6l\25""6l\25@m\30""6l\25\202\320" - "q\202\320q9g\21""5k\24""5k\24\0\0\23""3\3\24""4\5\24""4\5\24""4\5\24" - "4\5\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25""5\6\25""5\6\25""5\6\25" - "5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\32""8\2\31""9\13\31""9\13\32""8\2\31""9\13\34:\5\34:\5" - "\27""8\11\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\32\77\12\32\77\12\32" - "\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32" - "\77\12\36B\5\33A\14\33A\14\36B\5\33A\14\36B\5\36B\5\33A\14\33A\14\33" - "A\14\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\36B\5\36B\5\36B\5" - "\33A\14\36B\5\36B\5\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\202\320q" - "\202\320q\36B\5\33A\14\36B\5\0\0""0Y\24""2Z\15""2Z\15""0Y\24""2Z\15""2" - "Z\15""0Y\24""0Y\24-\\\16""3[\16-\\\16""3[\16""0Y\24-\\\16""3[\16/^\20" - "/^\20/^\20""3[\16/^\20/^\20/^\20""3[\16""0_\21""3[\16""0_\21""0_\21""0" - "_\21""3[\16""0_\21""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3" - "b\24""3b\24""5d\26""7e\17""5d\26""5d\26""5d\26""7e\17""9g\21""9g\21""5" - "k\24""9g\21""5k\24""9g\21""4j\23""9g\21""5k\24""9g\21""4j\23""9g\21""6" - "l\25""9g\21""5k\24""9g\21""5k\24""6l\25""6l\25""9g\21""9g\21""6l\25""9" - "g\21""5k\24""9g\21""5k\24""6l\25""6l\25""6l\25@m\30@m\30""6l\25@m\30" - "6l\25""6l\25""6l\25""6l\25""6l\25""6l\25""6l\25\202\320q\202\320q@m\30" - "6l\25""5k\24\0\0\24""4\5\24""4\5\24""4\5\24""4\5\24""4\5\25""5\6\25""5" - "\6\25""5\6\25""5\6\25""5\6\25""5\6\25""5\6\25""5\6\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\31""9\13\31" - "9\13\32""8\2\31""9\13\32""8\2\34:\5\34:\5\34:\5\31""9\13\27=\7\27=\7" - "\27=\7\27=\7\30>\10\30>\10\32\77\12\32\77\12\36B\5\32\77\12\32\77\12" - "\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\36B\5\33A\14\33A" - "\14\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\33A\14" - "\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\36B\5\36B\5\33A\14" - "\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\202\320q\202\320q\36B\5\36B" - "\5\33A\14\0\0""2Z\15""0Y\24""2Z\15""0Y\24-\\\16""3[\16-\\\16-\\\16""3" - "[\16-\\\16""0Y\24-\\\16/^\20/^\20/^\20""3[\16/^\20""3[\16/^\20""3[\16" - "/^\20""0_\21""0_\21""3[\16""0_\21""0_\21""0_\21""0_\21""2a\23""2a\23" - "2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""3b\24""5d\26""7e\17" - "5d\26""5d\26""7e\17""7e\17""7f\30""9g\21""4j\23""9g\21""5k\24""9g\21" - "5k\24""4j\23""4j\23""9g\21""4j\23""5k\24""9g\21""5k\24""9g\21""5k\24" - "9g\21""5k\24""6l\25""9g\21""6l\25""6l\25""9g\21""9g\21""6l\25@m\30""6" - "l\25""6l\25""6l\25@m\30""6l\25@m\30@m\30""6l\25""6l\25""6l\25""6l\25" - "6l\25@m\30""6l\25""6l\25\202\320q\202\320q6l\25""6l\25""9g\21\0\0\24" - "4\5\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25""5\6\25""5\6\25""5\6\25" - "5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\32""8\2\31""9\13\31""9\13\31""9\13\32""8\2\34:\5\34:\5" - "\34:\5\34:\5\34:\5\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32" - "\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77" - "\12\32\77\12\36B\5\33A\14\36B\5\33A\14\33A\14\33A\14\33A\14\36B\5\33" - "A\14\33A\14\33A\14\36B\5\33A\14\33A\14\36B\5\36B\5\33A\14\33A\14\36B" - "\5\36B\5\33A\14\36B\5\36B\5\33A\14\33A\14\36B\5\33A\14\33A\14\36B\5\36" - "B\5\33A\14\202\320q\202\320q\33A\14\36B\5\33A\14\0\0""3[\16""0Y\24""3" - "[\16-\\\16-\\\16-\\\16-\\\16-\\\16""0Y\24-\\\16/^\20/^\20/^\20""3[\16" - "/^\20/^\20""3[\16/^\20/^\20""0_\21""0_\21""0_\21""0_\21""0_\21""3[\16" - "0_\21""0_\21""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24" - "3b\24""5d\26""5d\26""5d\26""5d\26""7e\17""5d\26""9g\21""9g\21""7f\30" - "4j\23""5k\24""9g\21""4j\23""9g\21""5k\24""4j\23""9g\21""4j\23""9g\21" - "5k\24""6l\25""5k\24""9g\21""6l\25""9g\21""5k\24""6l\25""9g\21""5k\24" - "6l\25""9g\21@m\30@m\30""6l\25""6l\25""6l\25@m\30""6l\25""6l\25""6l\25" - "@m\30""6l\25""6l\25@m\30""6l\25""6l\25""6l\25@m\30""6l\25\202\320q\202" - "\320q6l\25""5k\24""9g\21\0\0\25""5\6\25""5\6\25""5\6\25""5\6\25""5\6" - "\25""5\6\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\31""9\13\32""8\2\31" - "9\13\32""8\2\31""9\13\34:\5\34:\5\27""8\11\34:\5\27=\7\27=\7\27=\7\27" - "=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12" - "\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\33A\14\33A" - "\14\36B\5\33A\14\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\33A\14\36B\5" - "\36B\5\36B\5\36B\5\36B\5\33A\14\33A\14\36B\5\36B\5\33A\14\33A\14\36B" - "\5\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\202\320q\202\320" - "q\33A\14\33A\14\33A\14\0\0""0Y\24-\\\16""3[\16-\\\16-\\\16-\\\16-\\\16" - "/^\20""3[\16/^\20""3[\16/^\20""3[\16/^\20/^\20""0Y\24/^\20/^\20""0_\21" - "0_\21""0_\21""0_\21""3[\16""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23" - "2a\23""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""7e\17""5d\26""5d\26" - "7e\17""5d\26""9g\21""9g\21""9g\21""9g\21""5k\24""5k\24""9g\21""5k\24" - "9g\21""4j\23""9g\21""5k\24""5k\24""9g\21""5k\24""9g\21""5k\24""9g\21" - "6l\25""9g\21""9g\21""6l\25""6l\25""9g\21""6l\25""6l\25@m\30""6l\25""6" - "l\25@m\30""6l\25@m\30""6l\25""6l\25""6l\25""6l\25""6l\25""6l\25@m\30" - "6l\25""6l\25""6l\25@m\30""6l\25\202\320q\202\320q6l\25""9g\21""5k\24" - "\0\0\25""5\6\25""5\6\25""5\6\25""5\6\25""5\6\25""5\6\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\31""9\13\32""8\2\32""8\2\31""9\13\32""8\2\27""8\11\34:" - "\5\34:\5\27""8\11\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\32\77\12\32\77" - "\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32" - "\77\12\32\77\12\33A\14\33A\14\33A\14\33A\14\36B\5\33A\14\33A\14\33A\14" - "\33A\14\33A\14\33A\14\36B\5\33A\14\36B\5\36B\5\33A\14\36B\5\33A\14\33" - "A\14\36B\5\36B\5\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\36B\5" - "\36B\5\36B\5\33A\14\36B\5\33A\14\202\320q\202\320q\36B\5\33A\14\33A\14" - "\0\0-\\\16-\\\16""3[\16-\\\16""3[\16/^\20/^\20""3[\16/^\20""3[\16/^\20" - "/^\20""3[\16/^\20/^\20""3[\16""0_\21""0_\21""0_\21""0_\21""3[\16""0_" - "\21""0_\21""3[\16""2a\23""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3" - "b\24""3b\24""5d\26""5d\26""7e\17""5d\26""5d\26""7e\17""7f\30""7f\30""9" - "g\21""5k\24""9g\21""4j\23""9g\21""4j\23""9g\21""4j\23""9g\21""9g\21""6" - "l\25""9g\21""9g\21""6l\25""5k\24""9g\21""9g\21""9g\21""5k\24""9g\21""5" - "k\24""6l\25@m\30""6l\25@m\30""6l\25""6l\25""6l\25""6l\25@m\30""6l\25" - "@m\30""6l\25@m\30""6l\25@m\30""6l\25""6l\25@m\30""6l\25@m\30""6l\25""6" - "l\25""6l\25\202\320q\202\320q5k\24""9g\21""5k\24\0\0\25""5\6\25""5\6" - "\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\32""8\2\31""9\13\32" - "8\2\31""9\13\27""8\11\31""9\13\34:\5\34:\5\31""9\13\34:\5\27=\7\27=\7" - "\27=\7\27=\7\30>\10\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\32\77" - "\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\33A\14\36B\5\33" - "A\14\36B\5\33A\14\36B\5\33A\14\33A\14\33A\14\33A\14\33A\14\36B\5\33A" - "\14\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\33A\14\36B\5\36" - "B\5\36B\5\33A\14\36B\5\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\33A\14\36" - "B\5\202\320q\202\320q\36B\5\33A\14\33A\14\0\0""3[\16-\\\16-\\\16""3[" - "\16/^\20/^\20/^\20/^\20/^\20/^\20""3[\16/^\20""3[\16/^\20""0_\21""0_" - "\21""0_\21""0_\21""0_\21""3[\16""0_\21""0_\21""0_\21""2a\23""2a\23""2" - "a\23""2a\23""3b\24""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""5d\26""7" - "e\17""5d\26""7e\17""7e\17""9g\21""4j\23""9g\21""4j\23""4j\23""5k\24""4" - "j\23""9g\21""5k\24""9g\21""4j\23""9g\21""6l\25""5k\24""5k\24""5k\24""6" - "l\25""9g\21""6l\25""9g\21""5k\24""9g\21""6l\25""6l\25""6l\25""6l\25@" - "m\30""6l\25@m\30""6l\25@m\30""6l\25""6l\25@m\30""6l\25""6l\25""6l\25" - "6l\25@m\30""6l\25""6l\25""6l\25@m\30""6l\25""6l\25@m\30\202\320q\202" - "\320q5k\24""5k\24""5k\24\0\0\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\32""8\2\31""9\13\32""8\2\32""8\2\32""8\2\31""9\13\34:\5" - "\34:\5\34:\5\27""8\11\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12" - "\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\32" - "\77\12\32\77\12\36B\5\33A\14\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14" - "\33A\14\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\36B\5\36B\5\36" - "B\5\33A\14\36B\5\36B\5\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\36B\5" - "\33A\14\36B\5\36B\5\33A\14\36B\5\33A\14\36B\5\202\320q\202\320q\36B\5" - "\33A\14\36B\5\0\0/^\20/^\20""3[\16/^\20/^\20""3[\16/^\20/^\20/^\20/^" - "\20/^\20/^\20""3[\16""0_\21""0_\21""3[\16""0_\21""3[\16""0_\21""3[\16" - "0_\21""2a\23""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24" - "3b\24""5d\26""5d\26""5d\26""5d\26""5d\26""7e\17""7f\30""9g\21""9g\21" - "9g\21""5k\24""9g\21""4j\23""4j\23""9g\21""9g\21""5k\24""9g\21""6l\25" - "9g\21""9g\21""5k\24""6l\25""9g\21""6l\25""9g\21""6l\25""9g\21@m\30""6" - "l\25@m\30""6l\25""6l\25""6l\25@m\30@m\30""6l\25""6l\25""6l\25@m\30""6" - "l\25@m\30""6l\25""6l\25@m\30""6l\25""6l\25""6l\25@m\30@m\30""6l\25@m" - "\30""6l\25""5k\24\202\320q\202\320q5k\24""9g\21""5k\24\0\0\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\32""8\2\31""9\13\32""8\2\31""9\13\32""8\2\34:" - "\5\31""9\13\34:\5\34:\5\34:\5\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\32" - "\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\36" - "B\5\32\77\12\32\77\12\36B\5\33A\14\33A\14\33A\14\33A\14\33A\14\36B\5" - "\33A\14\33A\14\33A\14\36B\5\36B\5\36B\5\33A\14\36B\5\36B\5\33A\14\36" - "B\5\36B\5\36B\5\33A\14\36B\5\36B\5\33A\14\36B\5\36B\5\36B\5\33A\14\36" - "B\5\33A\14\36B\5\33A\14\36B\5\36B\5\36B\5\33A\14\33A\14\36B\5\202\320" - "q\202\320q\36B\5\33A\14\33A\14\0\0/^\20/^\20""3[\16""3[\16/^\20""3[\16" - "/^\20/^\20/^\20/^\20""0Y\24/^\20""0_\21""0_\21""0_\21""0_\21""0_\21""3" - "[\16""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3" - "b\24""3b\24""5d\26""5d\26""5d\26""5d\26""5d\26""7e\17""5d\26""9g\21""9" - "g\21""9g\21""9g\21""4j\23""4j\23""9g\21""4j\23""4j\23""9g\21""5k\24""5" - "k\24""9g\21""6l\25""9g\21""6l\25""9g\21""5k\24""9g\21""9g\21""5k\24""6" - "l\25""6l\25""6l\25@m\30""6l\25@m\30""6l\25@m\30@m\30""6l\25""6l\25@m" - "\30@m\30""6l\25@m\30""6l\25@m\30""6l\25@m\30""6l\25@m\30""6l\25""6l\25" - "@m\30""6l\25""5k\24""9g\21""5k\24\202\320q\202\320q5k\24""9g\21""5k\24" - "\0\0\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\32""8\2\32""8\2\32""8\2\32""8\2\32""8" - "\2\34:\5\31""9\13\34:\5\34:\5\34:\5\27=\7\27=\7\27=\7\30>\10\30>\10\30" - ">\10\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77" - "\12\32\77\12\32\77\12\32\77\12\36B\5\33A\14\36B\5\36B\5\33A\14\36B\5" - "\33A\14\33A\14\33A\14\33A\14\33A\14\33A\14\33A\14\36B\5\36B\5\33A\14" - "\36B\5\36B\5\33A\14\36B\5\36B\5\33A\14\36B\5\36B\5\36B\5\36B\5\33A\14" - "\36B\5\36B\5\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\33A\14\33A\14\36B" - "\5\33A\14\202\320q\202\320q\33A\14\33A\14\33A\14\0\0/^\20/^\20""3[\16" - "/^\20""3[\16/^\20/^\20""3[\16/^\20""3[\16""0_\21""0_\21""0_\21""3[\16" - "0_\21""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23""2a\23""2a\23" - "3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""5d\26""5d\26""5d\26""7e\17" - "5d\26""9g\21""9g\21""5k\24""4j\23""9g\21""5k\24""9g\21""5k\24""9g\21" - "4j\23""9g\21""6l\25""5k\24""5k\24""5k\24""6l\25""5k\24""5k\24""9g\21" - "9g\21""9g\21""9g\21""6l\25""6l\25@m\30@m\30""6l\25""6l\25@m\30""6l\25" - "6l\25@m\30""6l\25@m\30""6l\25@m\30""6l\25@m\30""6l\25@m\30""6l\25""6" - "l\25@m\30""6l\25@m\30@m\30""6l\25""6l\25""5k\24""9g\21\202\320q\202\320" - "q9g\21""5k\24""9g\21\0\0\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\32""8\2\31""9\13\31" - "9\13\32""8\2\32""8\2\34:\5\34:\5\34:\5\34:\5\27""8\11\27=\7\27=\7\27" - "=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32" - "\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\33A\14\36B\5\33A\14" - "\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\33A\14\33A\14\36B\5\36" - "B\5\33A\14\36B\5\33A\14\36B\5\36B\5\33A\14\36B\5\36B\5\36B\5\33A\14\36" - "B\5\36B\5\36B\5\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\36" - "B\5\33A\14\33A\14\36B\5\33A\14\202\320q\202\320q\33A\14\36B\5\33A\14" - "\0\0/^\20/^\20/^\20/^\20/^\20""3[\16/^\20""3[\16""0_\21""0_\21""0_\21" - "0_\21""3[\16""0_\21""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23" - "2a\23""3b\24""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""5d\26""7e\17" - "5d\26""5d\26""7e\17""9g\21""5k\24""4j\23""4j\23""5k\24""9g\21""4j\23" - "5k\24""9g\21""9g\21""6l\25""9g\21""6l\25""6l\25""9g\21""5k\24""9g\21" - "6l\25""5k\24""9g\21""5k\24@m\30""6l\25@m\30""6l\25""6l\25""6l\25""6l" - "\25@m\30""6l\25""6l\25""6l\25@m\30@m\30""6l\25""6l\25@m\30@m\30""6l\25" - "6l\25@m\30""6l\25""6l\25""6l\25@m\30""6l\25@m\30""5k\24""9g\21""6l\25" - "5k\24\202\320q\202\320q6l\25""6l\25""9g\21\0\0\27""7\10\27""7\10\27""7" - "\10\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\31""9\13\32""8\2\31" - "9\13\32""8\2\31""9\13\34:\5\27""8\11\34:\5\31""9\13\34:\5\27=\7\27=\7" - "\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\36B\5\32\77\12\36" - "B\5\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\33A\14" - "\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\36B\5\36B\5\33" - "A\14\36B\5\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\33A\14\36B\5\36B\5" - "\36B\5\36B\5\33A\14\36B\5\36B\5\36B\5\33A\14\36B\5\33A\14\33A\14\36B" - "\5\36B\5\36B\5\33A\14\33A\14\33A\14\33A\14\36B\5\202\320q\202\320q\33" - "A\14\33A\14\36B\5\0\0/^\20/^\20""3[\16/^\20/^\20/^\20""0_\21""0_\21""0" - "_\21""0_\21""0_\21""0_\21""0_\21""0_\21""0_\21""0_\21""2a\23""2a\23""2" - "a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""3b\24""7e\17""5d\26""5" - "d\26""7e\17""5d\26""7e\17""5d\26""9g\21""9g\21""5k\24""9g\21""5k\24""4" - "j\23""9g\21""4j\23""4j\23""5k\24""9g\21""5k\24""9g\21""5k\24""6l\25""6" - "l\25""5k\24""6l\25""5k\24""9g\21""5k\24@m\30""6l\25""6l\25""6l\25""6" - "l\25@m\30""6l\25""6l\25@m\30""6l\25""6l\25@m\30""6l\25@m\30""6l\25@m" - "\30""6l\25@m\30@m\30""6l\25""6l\25""6l\25""6l\25@m\30""6l\25""9g\21""6" - "l\25""9g\21""5k\24""9g\21""5k\24\202\320q\202\320q5k\24""9g\21""4j\23" - "\0\0\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\31""9\13\32" - "8\2\31""9\13\31""9\13\32""8\2\31""9\13\34:\5\34:\5\31""9\13\31""9\13" - "\27""8\11\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77" - "\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\36B\5\32\77\12\36" - "B\5\33A\14\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5" - "\33A\14\36B\5\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\33A\14\36B\5\36B" - "\5\36B\5\36B\5\33A\14\36B\5\36B\5\36B\5\33A\14\36B\5\36B\5\36B\5\33A" - "\14\36B\5\33A\14\36B\5\36B\5\33A\14\36B\5\33A\14\33A\14\33A\14\33A\14" - "\202\320q\202\320q\36B\5\32\77\12\32\77\12\0\0/^\20/^\20/^\20/^\20""0" - "_\21""3[\16""0_\21""0_\21""0_\21""0_\21""0_\21""0_\21""0_\21""0_\21""2" - "a\23""2a\23""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""3" - "b\24""7e\17""5d\26""5d\26""7e\17""5d\26""7e\17""7f\30""9g\21""4j\23""9" - "g\21""4j\23""4j\23""4j\23""9g\21""4j\23""5k\24""5k\24""5k\24""9g\21""9" - "g\21""5k\24""6l\25""9g\21""6l\25""9g\21""5k\24""9g\21@m\30""6l\25""6" - "l\25@m\30""6l\25""6l\25@m\30@m\30""6l\25""6l\25@m\30@m\30@m\30""6l\25" - "6l\25""6l\25@m\30@m\30""6l\25""6l\25@m\30""6l\25@m\30""6l\25""6l\25""6" - "l\25""9g\21""6l\25""9g\21""5k\24""9g\21""9g\21""9g\21\202\320q\202\320" - "q5k\24""9g\21""5k\24\0\0\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\32""8\2\32""8\2\32""8\2\32""8\2\31""9\13\31""9\13\31""9\13\34:\5" - "\34:\5\34:\5\27""8\11\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32" - "\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77" - "\12\36B\5\36B\5\33A\14\33A\14\33A\14\33A\14\36B\5\33A\14\33A\14\33A\14" - "\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\33A\14\33A\14\36B\5\36B\5\36B" - "\5\33A\14\36B\5\36B\5\36B\5\36B\5\33A\14\33A\14\36B\5\36B\5\33A\14\36" - "B\5\36B\5\33A\14\36B\5\36B\5\33A\14\33A\14\33A\14\36B\5\33A\14\36B\5" - "\33A\14\33A\14\33A\14\202\320q\202\320q\36B\5\32\77\12\32\77\12\0\0/" - "^\20/^\20""0_\21""3[\16""0_\21""0_\21""0_\21""3[\16""0_\21""3[\16""0" - "_\21""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23""2a\23""2a\23""3b\24""3" - "b\24""3b\24""3b\24""3b\24""5d\26""5d\26""5d\26""7e\17""7e\17""5d\26""9" - "g\21""7f\30""5k\24""9g\21""4j\23""9g\21""5k\24""4j\23""5k\24""5k\24""4" - "j\23""6l\25""9g\21""9g\21""6l\25""9g\21""6l\25""9g\21""5k\24""9g\21""5" - "k\24""9g\21""6l\25""6l\25@m\30@m\30""6l\25""6l\25""6l\25@m\30@m\30""6" - "l\25""6l\25""6l\25@m\30@m\30""6l\25""6l\25""6l\25@m\30""6l\25@m\30""6" - "l\25@m\30""6l\25@m\30""6l\25""6l\25""9g\21""5k\24""6l\25""5k\24""9g\21" - "5k\24""9g\21\202\320q\202\320q4j\23""4j\23""5k\24\0\0\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\32""8\2\31""9\13\32""8\2\32""8\2\32""8\2\31""9" - "\13\34:\5\31""9\13\34:\5\34:\5\27""8\11\27=\7\27=\7\27=\7\30>\10\30>" - "\10\30>\10\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12\36" - "B\5\32\77\12\32\77\12\36B\5\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\33" - "A\14\33A\14\33A\14\33A\14\36B\5\33A\14\33A\14\36B\5\36B\5\36B\5\36B\5" - "\33A\14\36B\5\36B\5\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\36B\5\33A\14" - "\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\36B\5\36B\5\33A\14\33A\14\33A" - "\14\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\202\320q\202\320q\32\77\12" - "\36B\5\32\77\12\0\0""0_\21""0_\21""0_\21""0_\21""0_\21""0_\21""0_\21" - "3[\16""0_\21""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23""2a\23" - "3b\24""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""5d\26""5d\26""7e\17" - "5d\26""7e\17""7f\30""9g\21""9g\21""4j\23""4j\23""5k\24""9g\21""5k\24" - "9g\21""4j\23""4j\23""6l\25""5k\24""9g\21""5k\24""5k\24""6l\25""9g\21" - "9g\21""5k\24""9g\21""5k\24""6l\25@m\30""6l\25@m\30@m\30""6l\25""6l\25" - "@m\30""6l\25@m\30""6l\25""6l\25""6l\25@m\30""6l\25@m\30""6l\25""6l\25" - "6l\25""6l\25""6l\25@m\30@m\30""6l\25@m\30""5k\24""6l\25""9g\21""9g\21" - "6l\25""9g\21""6l\25""5k\24""5k\24\202\320q\202\320q5k\24""4j\23""4j\23" - "\0\0\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\31""9\13\32""8\2\32""8\2\31""9\13\32" - "8\2\32""8\2\31""9\13\34:\5\27""8\11\34:\5\27""8\11\27=\7\27=\7\27=\7" - "\27=\7\30>\10\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77" - "\12\32\77\12\36B\5\32\77\12\32\77\12\36B\5\33A\14\36B\5\33A\14\33A\14" - "\36B\5\33A\14\36B\5\33A\14\33A\14\33A\14\36B\5\33A\14\36B\5\36B\5\36" - "B\5\36B\5\36B\5\33A\14\36B\5\36B\5\33A\14\36B\5\36B\5\33A\14\33A\14\36" - "B\5\33A\14\36B\5\33A\14\33A\14\33A\14\33A\14\36B\5\36B\5\36B\5\33A\14" - "\33A\14\33A\14\36B\5\33A\14\33A\14\33A\14\33A\14\33A\14\36B\5\36B\5\202" - "\320q\202\320q\32\77\12\32\77\12\36B\5\0\0""0_\21""0_\21""0_\21""0_\21" - "0_\21""0_\21""0_\21""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23" - "2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""5d\26" - "5d\26""7e\17""5d\26""9g\21""7f\30""4j\23""5k\24""9g\21""5k\24""4j\23" - "9g\21""4j\23""9g\21""4j\23""5k\24""5k\24""9g\21""5k\24""9g\21""5k\24" - "9g\21""5k\24""6l\25""9g\21""5k\24@m\30""6l\25@m\30""6l\25@m\30""6l\25" - "@m\30""6l\25@m\30""6l\25@m\30""6l\25@m\30""6l\25""6l\25""6l\25@m\30""6" - "l\25""6l\25""6l\25""6l\25""6l\25@m\30""6l\25@m\30""5k\24""9g\21""9g\21" - "5k\24""6l\25""9g\21""5k\24""9g\21""5k\24""9g\21""4j\23\202\320q\202\320" - "q9g\21""9g\21""4j\23\0\0\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\31""9\13\31""9\13\32""8" - "\2\32""8\2\32""8\2\31""9\13\34:\5\34:\5\34:\5\34:\5\34:\5\27=\7\27=\7" - "\27=\7\27=\7\30>\10\30>\10\32\77\12\32\77\12\36B\5\32\77\12\32\77\12" - "\32\77\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\36B\5\33A\14\33A\14" - "\33A\14\33A\14\33A\14\33A\14\33A\14\36B\5\33A\14\36B\5\36B\5\36B\5\33" - "A\14\33A\14\36B\5\33A\14\36B\5\36B\5\33A\14\36B\5\36B\5\36B\5\36B\5\36" - "B\5\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\33A\14\36B\5\33A\14" - "\33A\14\33A\14\33A\14\33A\14\36B\5\36B\5\33A\14\36B\5\33A\14\36B\5\32" - "\77\12\36B\5\202\320q\202\320q\32\77\12\32\77\12\32\77\12\0\0""3[\16" - "0_\21""0_\21""0_\21""0_\21""0_\21""0_\21""0_\21""0_\21""2a\23""2a\23" - "2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""3b\24""5d\26" - "5d\26""7e\17""5d\26""7e\17""5d\26""7e\17""9g\21""9g\21""4j\23""9g\21" - "5k\24""9g\21""4j\23""9g\21""4j\23""5k\24""9g\21""6l\25""6l\25""9g\21" - "5k\24""9g\21""6l\25""9g\21""5k\24""5k\24""9g\21""5k\24@m\30""6l\25""6" - "l\25""6l\25""6l\25""6l\25@m\30""6l\25""6l\25@m\30""6l\25@m\30""6l\25" - "@m\30""6l\25@m\30""6l\25""6l\25""6l\25@m\30""6l\25""6l\25@m\30""6l\25" - "5k\24""9g\21""9g\21""6l\25""5k\24""5k\24""6l\25""5k\24""9g\21""4j\23" - "4j\23""5k\24\202\320q\202\320q9g\21""9g\21""7f\30\0\0\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\31" - "9\13\32""8\2\32""8\2\32""8\2\31""9\13\32""8\2\34:\5\31""9\13\34:\5\31" - "9\13\34:\5\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77" - "\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77" - "\12\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\33A\14\36B\5\33A\14\36B\5" - "\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\33A\14\36B\5\33A\14\36" - "B\5\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14" - "\36B\5\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\33" - "A\14\36B\5\33A\14\32\77\12\32\77\12\32\77\12\32\77\12\202\320q\202\320" - "q\32\77\12\32\77\12\30>\10\0\0""0_\21""0_\21""3[\16""0_\21""0_\21""0" - "_\21""0_\21""3[\16""2a\23""2a\23""2a\23""2a\23""2a\23""2a\23""3b\24""3" - "b\24""3b\24""3b\24""3b\24""5d\26""7e\17""5d\26""5d\26""7e\17""5d\26""7" - "e\17""9g\21""9g\21""9g\21""4j\23""9g\21""4j\23""9g\21""9g\21""4j\23""9" - "g\21""4j\23""6l\25""5k\24""9g\21""5k\24""9g\21""5k\24""9g\21""6l\25""9" - "g\21""5k\24""6l\25@m\30""6l\25""6l\25""6l\25""6l\25""6l\25""6l\25""6" - "l\25""6l\25@m\30""6l\25@m\30""6l\25@m\30""6l\25""6l\25""6l\25""6l\25" - "@m\30""6l\25@m\30""6l\25""9g\21""5k\24""9g\21""9g\21""6l\25""5k\24""6" - "l\25""9g\21""6l\25""5k\24""9g\21""4j\23""9g\21""5k\24""4j\23\202\320" - "q\202\320q9g\21""5d\26""7e\17\0\0\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\32""8\2\31""9\13\32""8\2\32""8\2" - "\31""9\13\32""8\2\34:\5\34:\5\31""9\13\34:\5\34:\5\27=\7\27=\7\27=\7" - "\27=\7\30>\10\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77" - "\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\33A\14\36B\5\33A\14\33" - "A\14\33A\14\33A\14\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\36B" - "\5\33A\14\33A\14\33A\14\36B\5\33A\14\33A\14\36B\5\36B\5\36B\5\33A\14" - "\36B\5\36B\5\36B\5\33A\14\36B\5\36B\5\36B\5\33A\14\36B\5\33A\14\33A\14" - "\36B\5\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\36B\5\32\77\12" - "\36B\5\32\77\12\32\77\12\36B\5\202\320q\202\320q\35;\6\30>\10\27=\7\0" - "\0""3[\16""0_\21""0_\21""0_\21""3[\16""0_\21""0_\21""2a\23""2a\23""2" - "a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""3b\24""5d\26""5" - "d\26""5d\26""7e\17""7e\17""7e\17""5d\26""9g\21""9g\21""9g\21""9g\21""4" - "j\23""4j\23""4j\23""5k\24""9g\21""9g\21""5k\24""9g\21""9g\21""5k\24""9" - "g\21""9g\21""5k\24""9g\21""9g\21""5k\24""5k\24@m\30""6l\25@m\30@m\30" - "6l\25""6l\25""6l\25""6l\25""6l\25""6l\25@m\30""6l\25""6l\25""6l\25@m" - "\30""6l\25@m\30""6l\25@m\30@m\30""6l\25""6l\25""9g\21""9g\21""5k\24""5" - "k\24""9g\21""5k\24""6l\25""9g\21""5k\24""9g\21""5k\24""4j\23""9g\21""5" - "k\24""9g\21""5k\24""4j\23\202\320q\202\320q7e\17""5d\26""7e\17\0\0\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\31""9\13\32""8\2\31" - "9\13\32""8\2\31""9\13\32""8\2\31""9\13\34:\5\34:\5\34:\5\34:\5\27""8" - "\11\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\32" - "\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12\36B\5\33A\14\33" - "A\14\33A\14\36B\5\33A\14\33A\14\33A\14\33A\14\33A\14\33A\14\36B\5\36" - "B\5\36B\5\36B\5\36B\5\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\33" - "A\14\33A\14\36B\5\36B\5\33A\14\36B\5\36B\5\36B\5\36B\5\36B\5\33A\14\33" - "A\14\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\32\77\12\32" - "\77\12\36B\5\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\202\320q\202\320" - "q\27=\7\27=\7\27=\7\0\0""0_\21""0_\21""0_\21""0_\21""0_\21""2a\23""2" - "a\23""2a\23""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""3" - "b\24""3b\24""7e\17""5d\26""5d\26""7e\17""5d\26""7e\17""7f\30""9g\21""5" - "k\24""4j\23""9g\21""5k\24""4j\23""9g\21""5k\24""5k\24""4j\23""9g\21""5" - "k\24""9g\21""6l\25""5k\24""9g\21""9g\21""5k\24""9g\21""6l\25""5k\24@" - "m\30@m\30""6l\25@m\30""6l\25""6l\25""6l\25@m\30""6l\25""6l\25""6l\25" - "6l\25""6l\25@m\30""6l\25""6l\25@m\30@m\30@m\30""6l\25""5k\24""9g\21""9" - "g\21""5k\24""5k\24""6l\25""9g\21""5k\24""5k\24""6l\25""4j\23""9g\21""4" - "j\23""9g\21""4j\23""9g\21""9g\21""9g\21""9g\21\202\320q\202\320q7e\17" - "5d\26""3b\24\0\0\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\32""8\2" - "\31""9\13\32""8\2\32""8\2\31""9\13\31""9\13\32""8\2\34:\5\34:\5\31""9" - "\13\34:\5\27""8\11\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\32\77\12\32" - "\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5" - "\32\77\12\32\77\12\33A\14\33A\14\33A\14\36B\5\33A\14\33A\14\33A\14\33" - "A\14\33A\14\36B\5\33A\14\36B\5\36B\5\36B\5\36B\5\33A\14\33A\14\36B\5" - "\36B\5\36B\5\33A\14\33A\14\33A\14\36B\5\36B\5\33A\14\36B\5\36B\5\36B" - "\5\36B\5\33A\14\33A\14\33A\14\33A\14\36B\5\36B\5\33A\14\33A\14\36B\5" - "\33A\14\36B\5\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77" - "\12\32\77\12\30>\10\202\320q\202\320q\27=\7\34:\5\31""9\13\0\0""3[\16" - "0_\21""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23""2a\23""2a\23" - "3b\24""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""5d\26""5d\26""5d\26" - "5d\26""7e\17""7f\30""7f\30""4j\23""4j\23""4j\23""9g\21""4j\23""5k\24" - "9g\21""5k\24""4j\23""6l\25""9g\21""6l\25""9g\21""6l\25""9g\21""5k\24" - "9g\21""5k\24""9g\21""5k\24""9g\21@m\30""6l\25@m\30""6l\25""6l\25""6l" - "\25@m\30@m\30""6l\25""6l\25""6l\25""6l\25@m\30@m\30""6l\25@m\30""6l\25" - "9g\21""6l\25""9g\21""9g\21""5k\24""9g\21""5k\24""6l\25""9g\21""5k\24" - "5k\24""9g\21""4j\23""9g\21""5k\24""5k\24""9g\21""9g\21""9g\21""9g\21" - "5d\26""7e\17\202\320q\202\320q3b\24""3b\24""3b\24\0\0\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\32""8\2\31""9\13\32""8\2\32""8\2\32""8" - "\2\31""9\13\34:\5\31""9\13\31""9\13\27""8\11\34:\5\27=\7\27=\7\27=\7" - "\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\32\77\12\36B\5\32\77\12" - "\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\33A\14\36B" - "\5\33A\14\33A\14\33A\14\36B\5\33A\14\33A\14\33A\14\36B\5\33A\14\36B\5" - "\36B\5\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\36B\5\33A\14\33A\14\36B" - "\5\36B\5\36B\5\33A\14\36B\5\36B\5\36B\5\33A\14\33A\14\33A\14\33A\14\33" - "A\14\36B\5\33A\14\33A\14\36B\5\33A\14\32\77\12\32\77\12\32\77\12\32\77" - "\12\32\77\12\32\77\12\32\77\12\32\77\12\30>\10\30>\10\27=\7\202\320q" - "\202\320q\27""8\11\34:\5\31""9\13\0\0""3[\16""0_\21""0_\21""0_\21""2" - "a\23""2a\23""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""3" - "b\24""5d\26""7e\17""5d\26""5d\26""5d\26""7e\17""5d\26""7f\30""9g\21""9" - "g\21""9g\21""4j\23""9g\21""5k\24""9g\21""4j\23""9g\21""4j\23""9g\21""5" - "k\24""5k\24""6l\25""5k\24""9g\21""9g\21""6l\25""6l\25""9g\21""5k\24""6" - "l\25""5k\24@m\30""6l\25@m\30""6l\25""6l\25""6l\25@m\30""6l\25@m\30""6" - "l\25""6l\25@m\30""6l\25@m\30""6l\25""6l\25""9g\21""6l\25""9g\21""5k\24" - "9g\21""9g\21""5k\24""6l\25""9g\21""5k\24""9g\21""4j\23""9g\21""5k\24" - "4j\23""4j\23""9g\21""5k\24""9g\21""7e\17""5d\26""5d\26""5d\26\202\320" - "q\202\320q3b\24""2a\23""2a\23\0\0\27""7\10\27""7\10\27""7\10\32""8\2" - "\31""9\13\31""9\13\32""8\2\32""8\2\31""9\13\31""9\13\34:\5\34:\5\27""8" - "\11\34:\5\27""8\11\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77" - "\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77" - "\12\32\77\12\32\77\12\33A\14\36B\5\36B\5\33A\14\36B\5\33A\14\33A\14\33" - "A\14\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\36B\5\36B\5\33A\14\36B\5\33" - "A\14\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\33A\14\36B\5\33A\14\36B\5" - "\33A\14\33A\14\33A\14\33A\14\33A\14\33A\14\33A\14\36B\5\33A\14\33A\14" - "\32\77\12\36B\5\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\36B\5\30>\10" - "\30>\10\27=\7\27=\7\27=\7\202\320q\202\320q\32""8\2\31""9\13\31""9\13" - "\0\0""3[\16""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23""2a\23""2a\23""2" - "a\23""3b\24""3b\24""3b\24""3b\24""3b\24""7e\17""5d\26""7e\17""5d\26""5" - "d\26""5d\26""7e\17""7f\30""9g\21""4j\23""9g\21""5k\24""9g\21""5k\24""9" - "g\21""5k\24""9g\21""9g\21""5k\24""6l\25""5k\24""9g\21""5k\24""6l\25""9" - "g\21""5k\24""6l\25""5k\24""5k\24""9g\21""5k\24@m\30@m\30""6l\25""6l\25" - "@m\30""6l\25""6l\25""6l\25@m\30""6l\25@m\30""6l\25""6l\25@m\30""5k\24" - "6l\25""9g\21""9g\21""6l\25""9g\21""5k\24""9g\21""5k\24""5k\24""5k\24" - "9g\21""5k\24""4j\23""9g\21""4j\23""4j\23""9g\21""9g\21""7e\17""5d\26" - "7e\17""5d\26""5d\26""3b\24\202\320q\202\320q2a\23""2a\23""0_\21\0\0\27" - "7\10\27""7\10\27""7\10\31""9\13\32""8\2\31""9\13\32""8\2\32""8\2\31""9" - "\13\34:\5\34:\5\27""8\11\34:\5\34:\5\27""8\11\27=\7\27=\7\27=\7\27=\7" - "\30>\10\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32" - "\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\33A\14\36B\5\33A" - "\14\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\33A\14\33A\14" - "\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\36B" - "\5\33A\14\36B\5\36B\5\33A\14\36B\5\33A\14\33A\14\33A\14\36B\5\33A\14" - "\36B\5\33A\14\33A\14\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\36B\5" - "\32\77\12\32\77\12\32\77\12\30>\10\27=\7\27=\7\27=\7\34:\5\27""8\11\202" - "\320q\202\320q\31""9\13\27""7\10\27""7\10\0\0""0_\21""0_\21""2a\23""2" - "a\23""2a\23""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""3" - "b\24""5d\26""5d\26""5d\26""7e\17""7e\17""5d\26""7e\17""7f\30""9g\21""9" - "g\21""5k\24""4j\23""5k\24""9g\21""4j\23""9g\21""5k\24""9g\21""6l\25""9" - "g\21""5k\24""5k\24""9g\21""5k\24""5k\24""9g\21""6l\25""9g\21""6l\25""5" - "k\24""6l\25""9g\21""6l\25""6l\25""6l\25""6l\25""6l\25""6l\25@m\30""6" - "l\25""6l\25@m\30""6l\25@m\30""5k\24""9g\21""5k\24""6l\25""9g\21""6l\25" - "9g\21""6l\25""6l\25""5k\24""9g\21""9g\21""4j\23""9g\21""5k\24""9g\21" - "4j\23""4j\23""9g\21""9g\21""7e\17""7e\17""7e\17""5d\26""3b\24""3b\24" - "3b\24\202\320q\202\320q0_\21""0_\21""0_\21\0\0\27""7\10\27""7\10\32""8" - "\2\32""8\2\31""9\13\32""8\2\31""9\13\31""9\13\34:\5\34:\5\27""8\11\34" - ":\5\34:\5\34:\5\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\32\77\12\32\77" - "\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\36B\5\32\77\12" - "\32\77\12\32\77\12\33A\14\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\36" - "B\5\33A\14\36B\5\33A\14\36B\5\36B\5\33A\14\33A\14\33A\14\36B\5\33A\14" - "\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\36B\5\36" - "B\5\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\32\77\12\32" - "\77\12\32\77\12\36B\5\32\77\12\32\77\12\36B\5\32\77\12\30>\10\30>\10" - "\27=\7\27=\7\34:\5\34:\5\31""9\13\32""8\2\202\320q\202\320q\27""7\10" - "\27""7\10\27""7\10\0\0""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23""2a" - "\23""2a\23""3b\24""3b\24""3b\24""3b\24""3b\24""5d\26""7e\17""5d\26""5" - "d\26""5d\26""5d\26""5d\26""9g\21""7f\30""4j\23""9g\21""4j\23""4j\23""9" - "g\21""9g\21""4j\23""4j\23""5k\24""6l\25""9g\21""6l\25""6l\25""9g\21""5" - "k\24""6l\25""9g\21""6l\25""5k\24""6l\25""6l\25""5k\24""5k\24""5k\24""6" - "l\25""6l\25@m\30""6l\25""6l\25""6l\25""6l\25@m\30""6l\25@m\30""5k\24" - "6l\25""9g\21""5k\24""5k\24""6l\25""5k\24""6l\25""9g\21""5k\24""6l\25" - "5k\24""9g\21""4j\23""9g\21""4j\23""5k\24""9g\21""5k\24""9g\21""5d\26" - "7e\17""5d\26""5d\26""3b\24""3b\24""3b\24""2a\23""2a\23\202\320q\202\320" - "q0_\21""0_\21/^\20\0\0\27""7\10\32""8\2\32""8\2\31""9\13\32""8\2\32""8" - "\2\32""8\2\31""9\13\34:\5\34:\5\31""9\13\34:\5\27""8\11\27=\7\27=\7\27" - "=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\36B\5\32\77\12\36B\5" - "\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\36B\5\33A\14\36B\5\33" - "A\14\33A\14\36B\5\33A\14\33A\14\33A\14\33A\14\36B\5\36B\5\33A\14\36B" - "\5\33A\14\33A\14\36B\5\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\36B\5\33" - "A\14\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14" - "\36B\5\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\36B\5\32\77\12\32\77" - "\12\30>\10\30>\10\27=\7\27=\7\27""8\11\34:\5\34:\5\31""9\13\32""8\2\31" - "9\13\202\320q\202\320q\27""7\10\27""7\10\27""7\10\0\0""0_\21""2a\23""2" - "a\23""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""3b\24""3" - "b\24""5d\26""7e\17""5d\26""5d\26""7e\17""5d\26""7e\17""7f\30""9g\21""4" - "j\23""5k\24""4j\23""9g\21""4j\23""4j\23""5k\24""9g\21""4j\23""5k\24""6" - "l\25""9g\21""9g\21""6l\25""5k\24""6l\25""9g\21""5k\24""9g\21""5k\24""6" - "l\25""5k\24""9g\21""5k\24""6l\25@m\30@m\30""6l\25""6l\25@m\30@m\30""6" - "l\25""9g\21""5k\24""9g\21""5k\24""9g\21""6l\25""9g\21""6l\25""5k\24""9" - "g\21""5k\24""9g\21""4j\23""5k\24""9g\21""5k\24""9g\21""4j\23""4j\23""7" - "f\30""7e\17""5d\26""5d\26""5d\26""5d\26""3b\24""3b\24""2a\23""2a\23""2" - "a\23""0_\21\202\320q\202\320q/^\20""3[\16/^\20\0\0\27""7\10\32""8\2\31" - "9\13\32""8\2\31""9\13\31""9\13\32""8\2\34:\5\34:\5\31""9\13\27""8\11" - "\34:\5\27=\7\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\32\77\12\32\77\12" - "\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36" - "B\5\32\77\12\36B\5\33A\14\33A\14\33A\14\33A\14\36B\5\33A\14\36B\5\33" - "A\14\33A\14\36B\5\36B\5\33A\14\33A\14\36B\5\33A\14\33A\14\33A\14\33A" - "\14\33A\14\33A\14\33A\14\33A\14\33A\14\33A\14\36B\5\33A\14\33A\14\36" - "B\5\33A\14\33A\14\36B\5\33A\14\33A\14\36B\5\32\77\12\36B\5\32\77\12\36" - "B\5\32\77\12\36B\5\32\77\12\32\77\12\30>\10\27=\7\27=\7\27=\7\34:\5\31" - "9\13\32""8\2\31""9\13\32""8\2\27""7\10\27""7\10\202\320q\202\320q\27" - "7\10\27""7\10\25""5\6\0\0""2a\23""2a\23""2a\23""2a\23""2a\23""2a\23""2" - "a\23""3b\24""3b\24""3b\24""3b\24""3b\24""5d\26""7e\17""5d\26""5d\26""7" - "e\17""7e\17""7e\17""7f\30""9g\21""9g\21""5k\24""4j\23""4j\23""9g\21""5" - "k\24""5k\24""9g\21""4j\23""5k\24""9g\21""6l\25""5k\24""9g\21""9g\21""5" - "k\24""5k\24""6l\25""9g\21""5k\24""5k\24""9g\21""6l\25""9g\21""5k\24""9" - "g\21""5k\24""9g\21""6l\25""9g\21""6l\25""9g\21""6l\25""9g\21""6l\25""9" - "g\21""5k\24""5k\24""5k\24""5k\24""9g\21""5k\24""5k\24""5k\24""9g\21""5" - "k\24""4j\23""9g\21""5k\24""4j\23""9g\21""9g\21""5d\26""5d\26""7e\17""5" - "d\26""3b\24""3b\24""3b\24""2a\23""2a\23""0_\21""0_\21""3[\16\202\320" - "q\202\320q/^\20/^\20""0Y\24\0\0\32""8\2\31""9\13\32""8\2\31""9\13\32" - "8\2\31""9\13\32""8\2\31""9\13\34:\5\34:\5\27""8\11\34:\5\27=\7\27=\7" - "\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\32\77\12\32\77\12" - "\36B\5\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\33A\14\33A" - "\14\36B\5\33A\14\33A\14\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5" - "\33A\14\33A\14\33A\14\33A\14\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14" - "\33A\14\36B\5\33A\14\33A\14\33A\14\33A\14\36B\5\36B\5\33A\14\33A\14\36" - "B\5\33A\14\36B\5\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\32" - "\77\12\30>\10\30>\10\27=\7\27=\7\31""9\13\27""8\11\34:\5\31""9\13\32" - "8\2\27""7\10\27""7\10\27""7\10\27""7\10\202\320q\202\320q\27""7\10\25" - "5\6\25""5\6\0\0""2a\23""2a\23""2a\23""2a\23""2a\23""2a\23""3b\24""3b" - "\24""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""7e\17""5d\26""5d\26""7" - "e\17""9g\21""7f\30""9g\21""4j\23""9g\21""4j\23""4j\23""4j\23""4j\23""9" - "g\21""5k\24""9g\21""9g\21""9g\21""6l\25""9g\21""9g\21""6l\25""9g\21""6" - "l\25""9g\21""6l\25""5k\24""6l\25""9g\21""6l\25""9g\21""6l\25""6l\25""9" - "g\21""5k\24""9g\21""5k\24""9g\21""6l\25""5k\24""9g\21""9g\21""6l\25""9" - "g\21""6l\25""6l\25""9g\21""5k\24""5k\24""9g\21""5k\24""4j\23""4j\23""4" - "j\23""9g\21""9g\21""7f\30""7e\17""5d\26""7e\17""7e\17""3b\24""3b\24""3" - "b\24""2a\23""2a\23""2a\23""0_\21""0_\21/^\20""3[\16\202\320q\202\320" - "q3[\16-\\\16""2Z\15\0\0\31""9\13\31""9\13\32""8\2\31""9\13\32""8\2\31" - "9\13\34:\5\34:\5\34:\5\34:\5\31""9\13\27=\7\27=\7\27=\7\27=\7\30>\10" - "\30>\10\30>\10\36B\5\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12" - "\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\33A\14\33A\14\33A\14\33A\14" - "\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\33A\14\33A\14\33A\14\36" - "B\5\33A\14\36B\5\33A\14\33A\14\33A\14\33A\14\33A\14\36B\5\33A\14\33A" - "\14\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\33A\14\36B\5\32\77\12\36" - "B\5\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\30>\10\30>\10\27=\7\27" - "=\7\34:\5\34:\5\27""8\11\32""8\2\31""9\13\32""8\2\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\202\320q\202\320q\25""5\6\24""4\5\27""1\12\0\0" - "2a\23""2a\23""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24" - "3b\24""5d\26""5d\26""5d\26""5d\26""5d\26""7e\17""5d\26""9g\21""9g\21" - "4j\23""5k\24""4j\23""5k\24""9g\21""4j\23""9g\21""4j\23""9g\21""5k\24" - "9g\21""9g\21""9g\21""9g\21""6l\25""6l\25""9g\21""5k\24""5k\24""5k\24" - "5k\24""9g\21""5k\24""9g\21""5k\24""9g\21""6l\25""9g\21""6l\25""9g\21" - "6l\25""9g\21""5k\24""9g\21""9g\21""5k\24""6l\25""9g\21""6l\25""5k\24" - "9g\21""9g\21""5k\24""9g\21""5k\24""4j\23""4j\23""9g\21""9g\21""5d\26" - "7e\17""5d\26""5d\26""3b\24""3b\24""3b\24""2a\23""2a\23""2a\23""3[\16" - "0_\21""3[\16/^\20""3[\16/^\20\202\320q\202\320q2Z\15""0Y\24""0Y\24\0" - "\0\32""8\2\32""8\2\31""9\13\32""8\2\32""8\2\34:\5\34:\5\31""9\13\34:" - "\5\34:\5\27""8\11\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32" - "\77\12\36B\5\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77" - "\12\32\77\12\32\77\12\36B\5\33A\14\33A\14\33A\14\33A\14\36B\5\33A\14" - "\33A\14\36B\5\33A\14\33A\14\33A\14\36B\5\33A\14\33A\14\33A\14\36B\5\33" - "A\14\36B\5\33A\14\33A\14\33A\14\33A\14\33A\14\36B\5\33A\14\33A\14\36" - "B\5\33A\14\33A\14\36B\5\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36" - "B\5\32\77\12\32\77\12\30>\10\30>\10\27=\7\27=\7\27=\7\34:\5\27""8\11" - "\32""8\2\31""9\13\32""8\2\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\202\320q\202\320q\24""4\5\23""3\3\23""3\3\0\0""2a" - "\23""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""3b\24""3" - "b\24""7e\17""5d\26""5d\26""7e\17""7e\17""5d\26""9g\21""9g\21""4j\23""9" - "g\21""4j\23""9g\21""4j\23""5k\24""9g\21""5k\24""4j\23""9g\21""5k\24""5" - "k\24""9g\21""5k\24""6l\25""9g\21""6l\25""9g\21""6l\25""9g\21""5k\24""9" - "g\21""5k\24""5k\24""9g\21""5k\24""6l\25""9g\21""6l\25""6l\25""9g\21""9" - "g\21""9g\21""6l\25""5k\24""9g\21""5k\24""6l\25""9g\21""5k\24""5k\24""4" - "j\23""9g\21""9g\21""5k\24""9g\21""4j\23""9g\21""5d\26""5d\26""5d\26""5" - "d\26""5d\26""3b\24""3b\24""2a\23""2a\23""2a\23""0_\21""0_\21""0_\21/" - "^\20/^\20""3[\16/^\20-\\\16\202\320q\202\320q0Y\24""2Z\15""0Y\24\0\0" - "\32""8\2\32""8\2\31""9\13\32""8\2\32""8\2\34:\5\34:\5\31""9\13\34:\5" - "\34:\5\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12" - "\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12" - "\36B\5\32\77\12\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14" - "\33A\14\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\33" - "A\14\36B\5\33A\14\33A\14\33A\14\36B\5\33A\14\33A\14\33A\14\36B\5\33A" - "\14\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12" - "\32\77\12\30>\10\27=\7\27=\7\27=\7\31""9\13\34:\5\27""8\11\32""8\2\31" - "9\13\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25" - "5\6\24""4\5\202\320q\202\320q\27""1\12\23""3\3\27""1\12\0\0""2a\23""2" - "a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""7e\17""5d\26""5" - "d\26""5d\26""5d\26""7e\17""5d\26""9g\21""9g\21""9g\21""4j\23""9g\21""4" - "j\23""5k\24""5k\24""9g\21""4j\23""4j\23""5k\24""9g\21""6l\25""9g\21""9" - "g\21""5k\24""9g\21""6l\25""5k\24""6l\25""9g\21""6l\25""6l\25""5k\24""9" - "g\21""6l\25""9g\21""5k\24""6l\25""9g\21""5k\24""5k\24""6l\25""9g\21""5" - "k\24""5k\24""9g\21""6l\25""9g\21""5k\24""9g\21""4j\23""9g\21""5k\24""9" - "g\21""9g\21""4j\23""9g\21""9g\21""7e\17""7e\17""7e\17""5d\26""3b\24""3" - "b\24""3b\24""2a\23""2a\23""0_\21""0_\21""0_\21""3[\16/^\20/^\20/^\20" - "-\\\16""0Y\24""0Y\24\202\320q\202\320q0Y\24""0Y\24""0Y\24\0\0\32""8\2" - "\31""9\13\32""8\2\32""8\2\34:\5\34:\5\31""9\13\34:\5\34:\5\27=\7\27=" - "\7\27=\7\27=\7\27=\7\30>\10\30>\10\36B\5\32\77\12\36B\5\32\77\12\32\77" - "\12\36B\5\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\33A\14\36" - "B\5\33A\14\33A\14\33A\14\33A\14\33A\14\33A\14\36B\5\33A\14\36B\5\36B" - "\5\33A\14\33A\14\33A\14\36B\5\33A\14\33A\14\33A\14\36B\5\33A\14\36B\5" - "\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\32\77\12\36B\5\32\77\12\32\77" - "\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\30>\10\30>\10\27=\7\27" - "=\7\31""9\13\27""8\11\34:\5\27""8\11\32""8\2\32""8\2\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\24""4\5\24""4\5\23""3\3" - "\202\320q\202\320q\30""1\1\23""3\3\27""1\12\0\0""2a\23""2a\23""2a\23" - "2a\23""3b\24""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""5d\26""7e\17" - "5d\26""7e\17""5d\26""9g\21""9g\21""5k\24""4j\23""4j\23""5k\24""4j\23" - "4j\23""4j\23""9g\21""5k\24""9g\21""5k\24""5k\24""9g\21""6l\25""9g\21" - "5k\24""9g\21""5k\24""9g\21""6l\25""6l\25""5k\24""5k\24""9g\21""6l\25" - "5k\24""9g\21""5k\24""9g\21""6l\25""5k\24""6l\25""9g\21""6l\25""9g\21" - "6l\25""9g\21""4j\23""4j\23""5k\24""9g\21""9g\21""9g\21""4j\23""9g\21" - "9g\21""5d\26""7e\17""5d\26""5d\26""3b\24""3b\24""3b\24""2a\23""2a\23" - "2a\23""0_\21""0_\21""3[\16""3[\16/^\20/^\20""3[\16""0Y\24""2Z\15""2Z" - "\15""0Y\24\202\320q\202\320q0Y\24""0Y\24.W\23\0\0\32""8\2\31""9\13\32" - "8\2\32""8\2\31""9\13\34:\5\34:\5\34:\5\31""9\13\27=\7\27=\7\27=\7\27" - "=\7\27=\7\30>\10\30>\10\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36" - "B\5\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\33A\14\33" - "A\14\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\33A\14\36B\5" - "\33A\14\36B\5\36B\5\33A\14\33A\14\33A\14\36B\5\36B\5\33A\14\33A\14\33" - "A\14\33A\14\33A\14\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12" - "\32\77\12\32\77\12\32\77\12\30>\10\30>\10\27=\7\27=\7\27""8\11\34:\5" - "\27""8\11\32""8\2\31""9\13\31""9\13\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\25""5\6\24""4\5\24""4\5\23""3\3\23""3" - "\3\202\320q\202\320q\30""1\1\30""1\1\25""0\10\0\0""2a\23""2a\23""2a\23" - "2a\23""3b\24""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""5d\26""5d\26" - "7e\17""5d\26""7e\17""9g\21""7f\30""4j\23""4j\23""9g\21""5k\24""9g\21" - "5k\24""4j\23""5k\24""9g\21""6l\25""6l\25""5k\24""9g\21""5k\24""9g\21" - "5k\24""5k\24""5k\24""5k\24""5k\24""6l\25""5k\24""9g\21""5k\24""5k\24" - "5k\24""9g\21""6l\25""9g\21""5k\24""6l\25""9g\21""5k\24""9g\21""6l\25" - "9g\21""9g\21""4j\23""9g\21""4j\23""9g\21""9g\21""4j\23""9g\21""7e\17" - "5d\26""5d\26""5d\26""5d\26""3b\24""3b\24""2a\23""2a\23""2a\23""0_\21" - "0_\21""0_\21""3[\16/^\20""3[\16""3[\16-\\\16-\\\16""0Y\24""0Y\24""2Z" - "\15""0Y\24\202\320q\202\320q.W\23.W\23-V\22\0\0\32""8\2\31""9\13\32""8" - "\2\32""8\2\34:\5\27""8\11\34:\5\34:\5\34:\5\27=\7\27=\7\27=\7\27=\7\30" - ">\10\30>\10\30>\10\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12" - "\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\33A\14\36B\5\33A\14\36B\5" - "\33A\14\33A\14\33A\14\36B\5\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\36" - "B\5\33A\14\36B\5\33A\14\33A\14\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14" - "\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77" - "\12\32\77\12\30>\10\30>\10\27=\7\27=\7\27=\7\34:\5\31""9\13\32""8\2\31" - "9\13\32""8\2\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\25""5\6\25""5\6\24""4\5\30""1\1\23""3\3\23""3\3\23""3\3\202\320" - "q\202\320q\25""0\10\25""0\10\25""0\10\0\0""2a\23""2a\23""2a\23""2a\23" - "3b\24""3b\24""3b\24""3b\24""3b\24""5d\26""7e\17""5d\26""5d\26""5d\26" - "7e\17""9g\21""7f\30""4j\23""5k\24""9g\21""4j\23""9g\21""4j\23""5k\24" - "9g\21""4j\23""9g\21""6l\25""5k\24""6l\25""6l\25""9g\21""5k\24""9g\21" - "5k\24""6l\25""9g\21""6l\25""9g\21""5k\24""5k\24""5k\24""5k\24""9g\21" - "5k\24""9g\21""5k\24""9g\21""5k\24""9g\21""6l\25""9g\21""9g\21""4j\23" - "9g\21""9g\21""4j\23""9g\21""4j\23""7f\30""9g\21""5d\26""7e\17""5d\26" - "5d\26""3b\24""3b\24""3b\24""2a\23""2a\23""3[\16""0_\21""0_\21""0_\21" - "/^\20""3[\16/^\20""0Y\24""3[\16""2Z\15""0Y\24""0Y\24""2Z\15""0Y\24""2" - "Z\15\202\320q\202\320q-V\22-V\22-V\22\0\0\32""8\2\31""9\13\32""8\2\27" - "8\11\34:\5\34:\5\27""8\11\34:\5\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10" - "\30>\10\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\36" - "B\5\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\33A\14\36B\5\36B\5\33A" - "\14\36B\5\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14" - "\36B\5\33A\14\33A\14\36B\5\33A\14\33A\14\33A\14\33A\14\32\77\12\32\77" - "\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32" - "\77\12\30>\10\30>\10\27=\7\27=\7\27""8\11\34:\5\27""8\11\32""8\2\32""8" - "\2\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25" - "5\6\25""5\6\24""4\5\30""1\1\30""1\1\23""3\3\23""3\3\27""1\12\30""1\1" - "\202\320q\202\320q\25""0\10\25""0\10\25/\7\0\0""2a\23""2a\23""2a\23""3" - "b\24""3b\24""3b\24""3b\24""3b\24""5d\26""7e\17""5d\26""5d\26""5d\26""7" - "e\17""7e\17""7f\30""9g\21""5k\24""4j\23""9g\21""4j\23""9g\21""4j\23""5" - "k\24""9g\21""4j\23""9g\21""5k\24""9g\21""5k\24""6l\25""9g\21""6l\25""5" - "k\24""9g\21""5k\24""9g\21""6l\25""9g\21""9g\21""5k\24""6l\25""9g\21""5" - "k\24""9g\21""5k\24""9g\21""5k\24""9g\21""9g\21""5k\24""9g\21""9g\21""4" - "j\23""9g\21""4j\23""9g\21""9g\21""9g\21""5d\26""7e\17""7e\17""5d\26""3" - "b\24""3b\24""3b\24""2a\23""2a\23""2a\23""0_\21""0_\21""3[\16/^\20/^\20" - "3[\16-\\\16""3[\16""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15.W\23.W\23" - "\202\320q\202\320q-V\22""0R\16*T\16\0\0\31""9\13\31""9\13\32""8\2\34" - ":\5\34:\5\27""8\11\34:\5\27""8\11\27=\7\27=\7\27=\7\27=\7\30>\10\30>" - "\10\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12" - "\36B\5\32\77\12\32\77\12\36B\5\32\77\12\33A\14\36B\5\33A\14\33A\14\36" - "B\5\33A\14\33A\14\36B\5\33A\14\33A\14\33A\14\33A\14\33A\14\36B\5\33A" - "\14\33A\14\36B\5\33A\14\33A\14\33A\14\36B\5\32\77\12\32\77\12\36B\5\32" - "\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\30>\10\30>" - "\10\27=\7\27=\7\34:\5\34:\5\31""9\13\32""8\2\31""9\13\32""8\2\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5\6\24""4\5" - "\24""4\5\23""3\3\27""1\12\23""3\3\27""1\12\23""3\3\30""1\1\30""1\1\202" - "\320q\202\320q\25/\7\25/\7\25/\7\0\0""2a\23""2a\23""2a\23""3b\24""3b" - "\24""3b\24""3b\24""3b\24""5d\26""7e\17""5d\26""5d\26""7e\17""5d\26""9" - "g\21""9g\21""9g\21""9g\21""4j\23""4j\23""4j\23""4j\23""5k\24""4j\23""9" - "g\21""5k\24""9g\21""5k\24""6l\25""9g\21""5k\24""6l\25""9g\21""6l\25""9" - "g\21""5k\24""9g\21""5k\24""9g\21""6l\25""6l\25""9g\21""9g\21""5k\24""9" - "g\21""5k\24""9g\21""4j\23""9g\21""9g\21""5k\24""4j\23""9g\21""5k\24""4" - "j\23""9g\21""9g\21""7e\17""5d\26""5d\26""7e\17""3b\24""3b\24""3b\24""2" - "a\23""2a\23""2a\23""3[\16""0_\21""0_\21""3[\16/^\20/^\20/^\20""3[\16" - "-\\\16""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24.W\23.W\23-V\22\202\320" - "q\202\320q*T\16""0R\16*T\16\0\0\31""9\13\32""8\2\27""8\11\34:\5\34:\5" - "\34:\5\31""9\13\27=\7\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\32\77\12" - "\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32" - "\77\12\32\77\12\32\77\12\36B\5\36B\5\33A\14\33A\14\36B\5\33A\14\36B\5" - "\33A\14\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\33A\14\33" - "A\14\33A\14\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77" - "\12\32\77\12\32\77\12\36B\5\32\77\12\30>\10\30>\10\27=\7\27=\7\27=\7" - "\27""8\11\34:\5\32""8\2\32""8\2\31""9\13\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\25""5\6\24""4\5\24""4\5\27""1\12\23""3" - "\3\27""1\12\23""3\3\23""3\3\25""0\10\30""1\1\25""0\10\25""0\10\202\320" - "q\202\320q\25/\7\25/\7\25/\7\0\0""2a\23""2a\23""3b\24""3b\24""3b\24""3" - "b\24""3b\24""5d\26""7e\17""5d\26""5d\26""5d\26""5d\26""7e\17""7f\30""9" - "g\21""4j\23""4j\23""5k\24""9g\21""4j\23""4j\23""5k\24""9g\21""4j\23""4" - "j\23""5k\24""5k\24""6l\25""9g\21""6l\25""9g\21""6l\25""5k\24""9g\21""5" - "k\24""5k\24""6l\25""9g\21""9g\21""5k\24""5k\24""9g\21""5k\24""9g\21""5" - "k\24""5k\24""9g\21""9g\21""5k\24""4j\23""5k\24""9g\21""9g\21""9g\21""5" - "d\26""5d\26""5d\26""7e\17""5d\26""3b\24""3b\24""3b\24""2a\23""2a\23""3" - "[\16""0_\21""0_\21/^\20/^\20/^\20/^\20""3[\16-\\\16""2Z\15""0Y\24""0" - "Y\24""0Y\24""0Y\24""0Y\24.W\23.W\23.W\23-V\22-V\22\202\320q\202\320q" - "*T\16*T\16*T\16\0\0\32""8\2\31""9\13\34:\5\34:\5\27""8\11\34:\5\34:\5" - "\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\36B\5" - "\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32" - "\77\12\36B\5\36B\5\33A\14\36B\5\33A\14\33A\14\33A\14\36B\5\33A\14\33" - "A\14\33A\14\36B\5\33A\14\33A\14\33A\14\36B\5\33A\14\32\77\12\32\77\12" - "\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12" - "\32\77\12\30>\10\30>\10\27=\7\27=\7\27=\7\34:\5\34:\5\34:\5\32""8\2\32" - "8\2\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25" - "5\6\25""5\6\24""4\5\30""1\1\23""3\3\27""1\12\23""3\3\27""1\12\25""0\10" - "\30""1\1\25""0\10\25""0\10\25""0\10\25/\7\202\320q\202\320q\25/\7\24" - ".\5\24.\5\0\0""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""3b\24""5d\26" - "7e\17""5d\26""5d\26""5d\26""7e\17""5d\26""9g\21""7f\30""4j\23""9g\21" - "5k\24""9g\21""5k\24""4j\23""4j\23""4j\23""9g\21""5k\24""4j\23""5k\24" - "5k\24""6l\25""9g\21""6l\25""9g\21""5k\24""9g\21""5k\24""9g\21""6l\25" - "6l\25""9g\21""5k\24""6l\25""9g\21""4j\23""5k\24""9g\21""5k\24""9g\21" - "5k\24""9g\21""9g\21""5k\24""9g\21""9g\21""7e\17""7e\17""5d\26""5d\26" - "3b\24""3b\24""3b\24""2a\23""2a\23""0_\21""3[\16""0_\21/^\20""3[\16/^" - "\20""3[\16-\\\16-\\\16""0Y\24""2Z\15""2Z\15""0Y\24""0Y\24""0Y\24.W\23" - ".W\23.W\23-V\22-V\22*T\16*T\16\202\320q\202\320q*T\16*T\16*T\16\0\0\32" - "8\2\31""9\13\34:\5\34:\5\27""8\11\34:\5\27=\7\27=\7\27=\7\27=\7\27=\7" - "\30>\10\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12" - "\32\77\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\36B\5\32\77\12\36B\5" - "\33A\14\36B\5\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\33A\14\36B\5\33" - "A\14\32\77\12\36B\5\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12" - "\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\30>\10\30>\10\27" - "=\7\27=\7\27""8\11\34:\5\31""9\13\32""8\2\32""8\2\32""8\2\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\24""4\5\24" - "4\5\23""3\3\30""1\1\23""3\3\27""1\12\23""3\3\30""1\1\25""0\10\25""0\10" - "\25""0\10\25/\7\25/\7\25/\7\202\320q\202\320q\24.\5\24.\5\24.\5\0\0""2" - "a\23""2a\23""3b\24""3b\24""3b\24""3b\24""3b\24""7e\17""5d\26""5d\26""7" - "e\17""5d\26""7e\17""7f\30""9g\21""9g\21""9g\21""9g\21""4j\23""5k\24""9" - "g\21""4j\23""4j\23""9g\21""5k\24""9g\21""4j\23""5k\24""6l\25""9g\21""6" - "l\25""5k\24""5k\24""9g\21""6l\25""6l\25""9g\21""5k\24""4j\23""9g\21""4" - "j\23""9g\21""4j\23""5k\24""4j\23""9g\21""4j\23""9g\21""5k\24""9g\21""9" - "g\21""9g\21""7e\17""7e\17""5d\26""5d\26""3b\24""3b\24""3b\24""2a\23""2" - "a\23""2a\23""0_\21""3[\16""0_\21""3[\16/^\20/^\20""3[\16-\\\16""2Z\15" - "0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24.W\23.W\23-V\22-V\22*T\16*T\16" - "*T\16*T\16\202\320q\202\320q*T\16*T\16*T\16\0\0\32""8\2\31""9\13\34:" - "\5\34:\5\34:\5\31""9\13\34:\5\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10" - "\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32" - "\77\12\36B\5\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\33A\14\33" - "A\14\36B\5\33A\14\36B\5\33A\14\33A\14\33A\14\32\77\12\36B\5\32\77\12" - "\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\36" - "B\5\32\77\12\32\77\12\30>\10\30>\10\27=\7\27=\7\31""9\13\34:\5\34:\5" - "\31""9\13\31""9\13\32""8\2\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\25""5\6\24""4\5\24""4\5\23""3\3\30""1\1\23""3\3" - "\27""1\12\23""3\3\25""0\10\30""1\1\25""0\10\25""0\10\25/\7\25/\7\25/" - "\7\25/\7\25/\7\202\320q\202\320q\24.\5\24.\5\23,\3\0\0""2a\23""2a\23" - "3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""7e\17""5d\26""5d\26""7e\17" - "5d\26""9g\21""7f\30""4j\23""9g\21""4j\23""9g\21""5k\24""4j\23""9g\21" - "4j\23""4j\23""9g\21""4j\23""4j\23""5k\24""4j\23""9g\21""5k\24""6l\25" - "9g\21""6l\25""9g\21""5k\24""9g\21""9g\21""5k\24""9g\21""4j\23""5k\24" - "9g\21""4j\23""5k\24""4j\23""4j\23""4j\23""9g\21""9g\21""7e\17""5d\26" - "5d\26""5d\26""7e\17""3b\24""3b\24""3b\24""2a\23""2a\23""0_\21""3[\16" - "0_\21""0_\21/^\20""3[\16/^\20-\\\16""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24" - "0Y\24""0Y\24""0Y\24.W\23.W\23-V\22-V\22*T\16*T\16*T\16""0R\16*T\16\202" - "\320q\202\320q*T\16*T\16*N\22\0\0\31""9\13\32""8\2\31""9\13\34:\5\34" - ":\5\31""9\13\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32" - "\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32" - "\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\36B\5\32\77\12\32\77" - "\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32" - "\77\12\36B\5\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12" - "\32\77\12\30>\10\30>\10\27=\7\27=\7\27=\7\34:\5\34:\5\31""9\13\32""8" - "\2\32""8\2\31""9\13\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\25""5\6\25""5\6\24""4\5\24""4\5\30""1\1\23""3\3\27""1\12\23""3\3" - "\27""1\12\30""1\1\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7" - "\24.\5\24.\5\202\320q\202\320q\24.\5\23,\3\23,\3\0\0""2a\23""2a\23""3" - "b\24""3b\24""3b\24""3b\24""5d\26""5d\26""7e\17""5d\26""5d\26""7e\17""9" - "g\21""7f\30""9g\21""4j\23""9g\21""5k\24""9g\21""9g\21""5k\24""9g\21""5" - "k\24""9g\21""5k\24""4j\23""5k\24""9g\21""5k\24""4j\23""9g\21""4j\23""4" - "j\23""5k\24""9g\21""5k\24""4j\23""4j\23""9g\21""4j\23""4j\23""5k\24""9" - "g\21""4j\23""9g\21""4j\23""9g\21""9g\21""5d\26""7e\17""7e\17""7e\17""5" - "d\26""3b\24""3b\24""3b\24""2a\23""2a\23""2a\23""0_\21""0_\21""3[\16/" - "^\20/^\20/^\20""3[\16-\\\16-\\\16""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24" - "0Y\24.W\23.W\23-V\22-V\22*T\16""0R\16*T\16*T\16""0R\16*T\16*T\16\202" - "\320q\202\320q(R\14*N\22.P\14\0\0\31""9\13\34:\5\34:\5\31""9\13\34:\5" - "\27""8\11\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\32" - "\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\32" - "\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77" - "\12\32\77\12\36B\5\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12\36" - "B\5\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\30>\10" - "\30>\10\30>\10\27=\7\27=\7\34:\5\31""9\13\34:\5\31""9\13\32""8\2\31""9" - "\13\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25" - "5\6\25""5\6\24""4\5\27""1\12\27""1\12\23""3\3\23""3\3\27""1\12\30""1" - "\1\30""1\1\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\24.\5\24" - ".\5\24.\5\202\320q\202\320q\23,\3\17+\10\23,\3\0\0""2a\23""3b\24""3b" - "\24""3b\24""3b\24""5d\26""5d\26""5d\26""7e\17""7e\17""7e\17""5d\26""9" - "g\21""7f\30""9g\21""9g\21""4j\23""5k\24""4j\23""9g\21""4j\23""9g\21""9" - "g\21""4j\23""5k\24""9g\21""4j\23""9g\21""9g\21""4j\23""9g\21""4j\23""5" - "k\24""9g\21""9g\21""4j\23""9g\21""4j\23""4j\23""5k\24""9g\21""4j\23""5" - "k\24""9g\21""9g\21""7f\30""7e\17""5d\26""7e\17""5d\26""5d\26""5d\26""3" - "b\24""3b\24""2a\23""2a\23""2a\23""0_\21""3[\16""0_\21""0_\21""3[\16""3" - "[\16/^\20-\\\16""3[\16""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15.W\23" - ".W\23-V\22-V\22-V\22""0R\16*T\16*T\16""0R\16*T\16*T\16*T\16*T\16\202" - "\320q\202\320q*N\22.P\14.P\14\0\0\32""8\2\31""9\13\27""8\11\34:\5\34" - ":\5\35;\6\27=\7\27=\7\27=\7\30>\10\30>\10\32\77\12\32\77\12\32\77\12" - "\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12" - "\32\77\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\32" - "\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36" - "B\5\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\30>\10\30>\10" - "\30>\10\27=\7\27=\7\27=\7\31""9\13\34:\5\34:\5\31""9\13\32""8\2\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\25" - "5\6\24""4\5\27""1\12\23""3\3\27""1\12\23""3\3\30""1\1\23""3\3\25""0\10" - "\30""1\1\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5" - "\24.\5\24.\5\202\320q\202\320q\23,\3\23,\3\17+\10\0\0""2a\23""3b\24""3" - "b\24""3b\24""3b\24""5d\26""7e\17""5d\26""5d\26""7e\17""5d\26""9g\21""9" - "g\21""9g\21""9g\21""9g\21""5k\24""4j\23""5k\24""9g\21""4j\23""5k\24""9" - "g\21""4j\23""4j\23""5k\24""9g\21""5k\24""9g\21""9g\21""4j\23""4j\23""9" - "g\21""5k\24""9g\21""9g\21""5k\24""9g\21""4j\23""9g\21""5k\24""9g\21""4" - "j\23""9g\21""7f\30""7e\17""5d\26""5d\26""5d\26""7e\17""3b\24""3b\24""3" - "b\24""2a\23""2a\23""2a\23""0_\21""0_\21""0_\21""3[\16/^\20/^\20""0Y\24" - "3[\16""2Z\15""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24.W\23.W\23-V\22" - "-V\22*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*N\22\202\320q\202" - "\320q.P\14*N\22.P\14\0\0\27""8\11\34:\5\27""8\11\34:\5\31""9\13\27=\7" - "\27=\7\27=\7\30>\10\30>\10\30>\10\30>\10\32\77\12\36B\5\32\77\12\32\77" - "\12\32\77\12\36B\5\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\36B\5\32" - "\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32" - "\77\12\36B\5\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\36B\5" - "\32\77\12\32\77\12\32\77\12\30>\10\30>\10\27=\7\27=\7\27=\7\34:\5\34" - ":\5\27""8\11\32""8\2\31""9\13\32""8\2\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\25""5\6\24""4\5\24""4\5\23""3\3\30""1" - "\1\23""3\3\23""3\3\23""3\3\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10" - "\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5\17+\10\23,\3\202\320" - "q\202\320q\23,\3\23,\3\23,\3\0\0""3b\24""3b\24""3b\24""3b\24""5d\26""7" - "e\17""5d\26""7e\17""7e\17""7e\17""5d\26""9g\21""7f\30""4j\23""4j\23""9" - "g\21""9g\21""5k\24""9g\21""4j\23""4j\23""5k\24""9g\21""4j\23""4j\23""4" - "j\23""9g\21""4j\23""9g\21""5k\24""4j\23""9g\21""4j\23""5k\24""9g\21""5" - "k\24""9g\21""5k\24""9g\21""4j\23""5k\24""7f\30""9g\21""5d\26""5d\26""7" - "e\17""5d\26""7e\17""3b\24""3b\24""3b\24""2a\23""2a\23""2a\23""0_\21""0" - "_\21""0_\21""3[\16/^\20/^\20""3[\16-\\\16-\\\16""0Y\24""0Y\24""2Z\15" - "0Y\24""0Y\24""2Z\15.W\23.W\23-V\22-V\22-V\22*T\16*T\16*T\16*T\16*T\16" - "*T\16*T\16*T\16(R\14.P\14*N\22\202\320q\202\320q.P\14*N\22.P\14\0\0\34" - ":\5\34:\5\34:\5\27""8\11\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10" - "\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77" - "\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77" - "\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12" - "\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\30>\10\30" - ">\10\30>\10\27=\7\27=\7\27=\7\34:\5\34:\5\32""8\2\31""9\13\32""8\2\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\27""7\10\25""5\6\25" - "5\6\24""4\5\23""3\3\23""3\3\23""3\3\23""3\3\27""1\12\30""1\1\25""0\10" - "\30""1\1\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5" - "\24.\5\24.\5\23,\3\23,\3\23,\3\202\320q\202\320q\17+\10\23,\3\23,\3\0" - "\0""3b\24""3b\24""3b\24""3b\24""5d\26""7e\17""5d\26""5d\26""7e\17""5" - "d\26""7e\17""9g\21""7f\30""4j\23""9g\21""4j\23""5k\24""9g\21""4j\23""9" - "g\21""5k\24""9g\21""5k\24""9g\21""5k\24""9g\21""5k\24""4j\23""4j\23""9" - "g\21""9g\21""9g\21""5k\24""9g\21""4j\23""9g\21""5k\24""9g\21""4j\23""9" - "g\21""9g\21""5d\26""7e\17""7e\17""5d\26""7e\17""5d\26""3b\24""3b\24""3" - "b\24""2a\23""2a\23""0_\21""0_\21""3[\16/^\20/^\20""3[\16/^\20-\\\16""0" - "Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""0Y\24.W\23.W\23-V\22" - "-V\22*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16(R\14.P\14.P\14*N\22" - "\202\320q\202\320q.P\14.P\14.P\14\0\0\34:\5\31""9\13\34:\5\31""9\13\27" - "=\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\32\77\12" - "\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12" - "\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12" - "\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12\32" - "\77\12\32\77\12\30>\10\30>\10\30>\10\27=\7\27=\7\27=\7\31""9\13\34:\5" - "\34:\5\32""8\2\32""8\2\31""9\13\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\25""5\6\24""4\5\24""4\5\23""3\3\23""3\3\27""1" - "\12\30""1\1\23""3\3\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10\25/\7" - "\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5\23,\3\23,\3\23,\3\17+\10\23" - ",\3\202\320q\202\320q\23,\3\23,\3\23,\3\0\0""3b\24""3b\24""3b\24""3b" - "\24""7e\17""5d\26""7e\17""5d\26""7e\17""7e\17""5d\26""9g\21""7f\30""4" - "j\23""4j\23""5k\24""9g\21""5k\24""9g\21""4j\23""5k\24""9g\21""4j\23""9" - "g\21""5k\24""9g\21""5k\24""9g\21""5k\24""9g\21""5k\24""9g\21""9g\21""5" - "k\24""4j\23""9g\21""4j\23""9g\21""9g\21""5d\26""7e\17""5d\26""5d\26""5" - "d\26""7e\17""3b\24""3b\24""3b\24""2a\23""2a\23""2a\23""0_\21""3[\16""0" - "_\21""0_\21/^\20/^\20""3[\16-\\\16""3[\16""0Y\24""0Y\24""2Z\15""0Y\24" - "0Y\24""0Y\24.W\23.W\23.W\23-V\22-V\22*T\16*T\16*T\16*T\16*T\16*T\16*" - "T\16*T\16*T\16*N\22.P\14.P\14.P\14.P\14\202\320q\202\320q*N\22*N\22*" - "N\22\0\0\34:\5\34:\5\34:\5\31""9\13\27=\7\27=\7\27=\7\30>\10\30>\10\30" - ">\10\30>\10\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77" - "\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77" - "\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12" - "\36B\5\32\77\12\32\77\12\32\77\12\30>\10\30>\10\30>\10\27=\7\27=\7\27" - "=\7\34:\5\34:\5\27""8\11\32""8\2\32""8\2\31""9\13\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5\6\24""4\5\24""4" - "\5\30""1\1\23""3\3\27""1\12\23""3\3\27""1\12\30""1\1\30""1\1\25""0\10" - "\25""0\10\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\23,\3" - "\17+\10\23,\3\23,\3\17+\10\23,\3\202\320q\202\320q\23,\3\17+\10\23,\3" - "\0\0""3b\24""3b\24""3b\24""5d\26""5d\26""5d\26""7e\17""7e\17""7e\17""7" - "e\17""9g\21""7f\30""9g\21""9g\21""4j\23""5k\24""9g\21""5k\24""9g\21""5" - "k\24""5k\24""9g\21""4j\23""9g\21""4j\23""9g\21""4j\23""4j\23""5k\24""9" - "g\21""5k\24""9g\21""4j\23""9g\21""4j\23""9g\21""9g\21""7e\17""5d\26""5" - "d\26""7e\17""5d\26""5d\26""3b\24""3b\24""3b\24""2a\23""2a\23""2a\23""3" - "[\16""0_\21""3[\16""0_\21""3[\16/^\20/^\20/^\20""3[\16-\\\16""2Z\15""0" - "Y\24""0Y\24""0Y\24""0Y\24""0Y\24.W\23.W\23-V\22-V\22""0R\16*T\16*T\16" - "*T\16""0R\16*T\16*T\16*T\16*T\16(R\14.P\14.P\14*N\22.P\14.P\14*N\22\202" - "\320q\202\320q*N\22*N\22*N\22\0\0\34:\5\34:\5\31""9\13\27=\7\27=\7\27" - "=\7\27=\7\30>\10\30>\10\35;\6\32\77\12\32\77\12\32\77\12\32\77\12\36" - "B\5\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\32\77\12" - "\36B\5\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12\36B\5\32\77\12" - "\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\30>\10\30>\10\27=\7\27" - "=\7\27=\7\27""8\11\34:\5\34:\5\34:\5\27""8\11\32""8\2\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\25" - "5\6\24""4\5\27""1\12\23""3\3\23""3\3\23""3\3\27""1\12\30""1\1\25""0\10" - "\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5" - "\24.\5\23,\3\17+\10\23,\3\17+\10\23,\3\23,\3\23,\3\23,\3\202\320q\202" - "\320q\17+\10\23,\3\17+\10\0\0""3b\24""3b\24""7e\17""5d\26""5d\26""7e" - "\17""5d\26""7e\17""5d\26""7e\17""9g\21""9g\21""5k\24""4j\23""5k\24""9" - "g\21""9g\21""5k\24""4j\23""5k\24""9g\21""9g\21""5k\24""4j\23""4j\23""9" - "g\21""4j\23""5k\24""4j\23""9g\21""4j\23""5k\24""4j\23""7f\30""9g\21""9" - "g\21""7e\17""7e\17""5d\26""7e\17""7e\17""3b\24""3b\24""3b\24""3b\24""2" - "a\23""2a\23""2a\23""0_\21""0_\21""0_\21""3[\16/^\20/^\20/^\20-\\\16-" - "\\\16""2Z\15""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24.W\23.W\23-V\22" - "-V\22*T\16*T\16*T\16*T\16*T\16*T\16""0R\16*T\16*T\16*N\22.P\14*N\22." - "P\14.P\14*N\22.P\14*N\22\202\320q\202\320q*N\22*N\22*N\22\0\0\34:\5\27" - "8\11\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\32" - "\77\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\36B\5\32\77\12" - "\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\36B\5\32" - "\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\30>\10\30" - ">\10\30>\10\27=\7\27=\7\27=\7\34:\5\34:\5\27""8\11\32""8\2\32""8\2\31" - "9\13\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25" - "5\6\25""5\6\24""4\5\24""4\5\30""1\1\23""3\3\23""3\3\23""3\3\23""3\3\30" - "1\1\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24" - ".\5\24.\5\24.\5\23,\3\23,\3\23,\3\23,\3\17+\10\23,\3\17+\10\23,\3\23" - ",\3\202\320q\202\320q\17+\10\23,\3\17+\10\0\0""3b\24""3b\24""5d\26""5" - "d\26""7e\17""5d\26""5d\26""7e\17""5d\26""9g\21""7f\30""9g\21""9g\21""4" - "j\23""9g\21""5k\24""4j\23""9g\21""5k\24""9g\21""9g\21""4j\23""4j\23""5" - "k\24""4j\23""9g\21""9g\21""4j\23""5k\24""9g\21""4j\23""9g\21""9g\21""7" - "f\30""7e\17""7e\17""5d\26""5d\26""5d\26""5d\26""3b\24""3b\24""3b\24""2" - "a\23""2a\23""2a\23""0_\21""0_\21""0_\21/^\20""3[\16/^\20/^\20/^\20""3" - "[\16""2Z\15""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15.W\23.W\23-V\22" - "-V\22-V\22*T\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16(R\14*N\22.P\14*" - "N\22.P\14.P\14*N\22.P\14*N\22.P\14\202\320q\202\320q*N\22*N\22*N\22\0" - "\0\34:\5\34:\5\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12" - "\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12" - "\36B\5\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\32\77" - "\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\30>\10\30>\10" - "\30>\10\27=\7\27=\7\27=\7\34:\5\31""9\13\34:\5\31""9\13\32""8\2\32""8" - "\2\31""9\13\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\25""5\6\24""4\5\24""4\5\23""3\3\23""3\3\27""1\12\23""3\3\23""3\3" - "\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7" - "\24.\5\24.\5\24.\5\24.\5\24.\5\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23" - ",\3\23,\3\23,\3\23,\3\202\320q\202\320q\17+\10\17+\10\17+\10\0\0""3b" - "\24""5d\26""5d\26""5d\26""5d\26""5d\26""5d\26""7e\17""5d\26""9g\21""7" - "f\30""9g\21""9g\21""5k\24""4j\23""5k\24""9g\21""9g\21""4j\23""4j\23""4" - "j\23""4j\23""9g\21""4j\23""5k\24""9g\21""4j\23""9g\21""4j\23""9g\21""7" - "f\30""9g\21""7e\17""5d\26""7e\17""7e\17""5d\26""7e\17""3b\24""3b\24""3" - "b\24""3b\24""2a\23""2a\23""2a\23""0_\21""3[\16""0_\21/^\20/^\20""3[\16" - "3[\16-\\\16""3[\16""2Z\15""2Z\15""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24." - "W\23.W\23-V\22-V\22*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*N\22" - "(R\14.P\14.P\14*N\22*N\22.P\14*N\22.P\14*N\22*N\22\202\320q\202\320q" - "*N\22*N\22*N\22\0\0\34:\5\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10" - "\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77" - "\12\32\77\12\32\77\12\36B\5\36B\5\32\77\12\32\77\12\36B\5\32\77\12\32" - "\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\30>\10\30>" - "\10\27=\7\27=\7\27=\7\34:\5\31""9\13\34:\5\27""8\11\32""8\2\31""9\13" - "\32""8\2\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\25""5\6\24""4\5\30""1\1\24""4\5\27""1\12\23""3\3\30""1\1\23""3\3" - "\27""1\12\30""1\1\30""1\1\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/" - "\7\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\23,\3\23,\3\17+\10\23,\3\23,\3" - "\23,\3\23,\3\23,\3\17+\10\17+\10\17+\10\202\320q\202\320q\17+\10\17+" - "\10\17+\10\0\0""3b\24""5d\26""7e\17""5d\26""5d\26""7e\17""5d\26""7e\17" - "5d\26""9g\21""9g\21""9g\21""9g\21""4j\23""9g\21""4j\23""4j\23""9g\21" - "5k\24""4j\23""5k\24""9g\21""4j\23""4j\23""9g\21""4j\23""5k\24""9g\21" - "9g\21""9g\21""9g\21""7e\17""5d\26""5d\26""5d\26""5d\26""5d\26""3b\24" - "3b\24""3b\24""2a\23""2a\23""2a\23""0_\21""3[\16""0_\21/^\20/^\20""3[" - "\16/^\20""3[\16-\\\16""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24" - ".W\23.W\23.W\23-V\22-V\22*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16*" - "T\16*N\22.P\14*N\22.P\14.P\14*N\22.P\14*N\22*N\22*N\22*N\22*N\22\202" - "\320q\202\320q*N\22*N\22*N\22\0\0\34:\5\27=\7\27=\7\27=\7\27=\7\30>\10" - "\30>\10\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12" - "\32\77\12\36B\5\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32" - "\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\30>\10\30>" - "\10\30>\10\30>\10\27=\7\27=\7\27=\7\27""8\11\34:\5\34:\5\31""9\13\32" - "8\2\32""8\2\31""9\13\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\25""5\6\25""5\6\24""4\5\23""3\3\23""3\3\23""3\3\23""3\3" - "\23""3\3\27""1\12\25""0\10\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25" - "/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5\23,\3\23,\3\23,\3\23,\3\23,\3" - "\23,\3\23,\3\17+\10\23,\3\23,\3\17+\10\17+\10\17+\10\202\320q\202\320" - "q\17+\10\17+\10\17+\10\0\0""7e\17""5d\26""5d\26""5d\26""7e\17""7e\17" - "5d\26""5d\26""9g\21""7f\30""9g\21""9g\21""5k\24""9g\21""4j\23""5k\24" - "9g\21""4j\23""4j\23""5k\24""9g\21""5k\24""5k\24""9g\21""5k\24""9g\21" - "9g\21""9g\21""9g\21""7e\17""5d\26""5d\26""7e\17""5d\26""5d\26""3b\24" - "3b\24""3b\24""3b\24""2a\23""2a\23""2a\23""0_\21""0_\21""3[\16""0_\21" - "0Y\24""3[\16/^\20-\\\16-\\\16""2Z\15""2Z\15""2Z\15""0Y\24""0Y\24""2Z" - "\15""0Y\24.W\23.W\23-V\22-V\22-V\22*T\16""0R\16*T\16*T\16*T\16*T\16*" - "T\16*T\16(R\14.P\14*N\22.P\14.P\14*N\22.P\14.P\14*N\22.P\14*N\22*N\22" - "*N\22*N\22\202\320q\202\320q*N\22*N\22*N\22\0\0\27=\7\27=\7\27=\7\27" - "=\7\30>\10\30>\10\30>\10\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\36" - "B\5\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12" - "\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\30>\10\30" - ">\10\30>\10\27=\7\27=\7\27=\7\34:\5\31""9\13\34:\5\34:\5\32""8\2\27""8" - "\11\32""8\2\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\25""5\6\25""5\6\24""4\5\23""3\3\23""3\3\27""1\12\23""3" - "\3\23""3\3\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25" - "/\7\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\23,\3\23,\3\23,\3\23,\3\23,\3" - "\23,\3\23,\3\17+\10\23,\3\17+\10\17+\10\17+\10\23,\3\17+\10\202\320q" - "\202\320q\23,\3\17+\10\17+\10\0\0""5d\26""7e\17""5d\26""7e\17""7e\17" - "5d\26""7e\17""5d\26""9g\21""9g\21""9g\21""7f\30""4j\23""4j\23""4j\23" - "4j\23""9g\21""9g\21""5k\24""5k\24""9g\21""4j\23""9g\21""9g\21""7f\30" - "9g\21""9g\21""7e\17""5d\26""7e\17""5d\26""5d\26""7e\17""5d\26""3b\24" - "3b\24""3b\24""2a\23""2a\23""2a\23""0_\21""3[\16""0_\21""3[\16""3[\16" - "/^\20/^\20""3[\16-\\\16""3[\16""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2" - "Z\15""0Y\24.W\23.W\23-V\22-V\22*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T" - "\16*T\16*T\16*N\22.P\14*N\22.P\14.P\14.P\14*N\22.P\14.P\14*N\22*N\22" - "*N\22*N\22*N\22\202\320q\202\320q*N\22*N\22*N\22\0\0\27=\7\27=\7\27=" - "\7\30>\10\30>\10\30>\10\30>\10\30>\10\32\77\12\32\77\12\32\77\12\32\77" - "\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\36B\5\32" - "\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\30>\10\30>\10\30" - ">\10\27=\7\27=\7\27=\7\27=\7\34:\5\31""9\13\34:\5\34:\5\32""8\2\31""9" - "\13\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\25""5\6\25""5\6\24""4\5\24""4\5\27""1\12\23""3\3\23""3\3\23""3\3" - "\23""3\3\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/" - "\7\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\23,\3\23,\3\23,\3\23,\3\23,\3" - "\23,\3\23,\3\23,\3\23,\3\17+\10\17+\10\17+\10\17+\10\23,\3\17+\10\202" - "\320q\202\320q\17+\10\23,\3\17+\10\0\0""5d\26""7e\17""5d\26""7e\17""5" - "d\26""7e\17""7e\17""7e\17""9g\21""9g\21""9g\21""7f\30""4j\23""9g\21""4" - "j\23""5k\24""9g\21""4j\23""4j\23""5k\24""9g\21""9g\21""7f\30""9g\21""9" - "g\21""7e\17""5d\26""7e\17""7e\17""5d\26""7e\17""5d\26""3b\24""3b\24""3" - "b\24""3b\24""2a\23""2a\23""2a\23""0_\21""0_\21""0_\21""0_\21""3[\16/" - "^\20""3[\16/^\20-\\\16""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y" - "\24.W\23.W\23.W\23-V\22-V\22*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16" - "*T\16(R\14.P\14.P\14*N\22.P\14*N\22.P\14*N\22.P\14*N\22.P\14*N\22*N\22" - "*N\22*N\22*N\22\202\320q\202\320q*N\22*N\22*N\22\0\0\27=\7\27=\7\30>" - "\10\30>\10\30>\10\30>\10\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\32" - "\77\12\36B\5\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12" - "\32\77\12\32\77\12\32\77\12\32\77\12\30>\10\30>\10\30>\10\30>\10\27=" - "\7\27=\7\27=\7\34:\5\31""9\13\34:\5\34:\5\31""9\13\32""8\2\31""9\13\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25" - "5\6\24""4\5\24""4\5\27""1\12\23""3\3\27""1\12\23""3\3\23""3\3\30""1\1" - "\25""0\10\30""1\1\25""0\10\30""1\1\25/\7\25/\7\25/\7\25/\7\25/\7\24." - "\5\24.\5\24.\5\24.\5\24.\5\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3" - "\23,\3\23,\3\23,\3\17+\10\17+\10\17+\10\17+\10\17+\10\23,\3\202\320q" - "\202\320q\17+\10\17+\10\17+\10\0\0""5d\26""5d\26""7e\17""5d\26""7e\17" - "5d\26""7e\17""9g\21""9g\21""9g\21""7f\30""9g\21""4j\23""9g\21""9g\21" - "5k\24""4j\23""9g\21""9g\21""7f\30""9g\21""9g\21""9g\21""5d\26""7e\17" - "7e\17""7e\17""5d\26""7e\17""5d\26""3b\24""3b\24""3b\24""3b\24""2a\23" - "2a\23""2a\23""2a\23""0_\21""0_\21""3[\16/^\20""3[\16/^\20""0Y\24""3[" - "\16""2Z\15""2Z\15""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15.W\23.W\23" - "-V\22-V\22-V\22*T\16*T\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16.P\14*" - "N\22.P\14*N\22.P\14*N\22.P\14*N\22.P\14*N\22.P\14*N\22*N\22*N\22*N\22" - "*N\22*N\22\202\320q\202\320q*N\22*N\22*N\22\0\0\27=\7\27=\7\30>\10\30" - ">\10\30>\10\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77" - "\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12\32\77\12\32\77\12" - "\32\77\12\32\77\12\30>\10\30>\10\30>\10\30>\10\27=\7\27=\7\27=\7\27=" - "\7\27""8\11\34:\5\31""9\13\34:\5\31""9\13\32""8\2\32""8\2\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\24" - "4\5\24""4\5\23""3\3\27""1\12\30""1\1\23""3\3\30""1\1\30""1\1\25""0\10" - "\30""1\1\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5" - "\24.\5\24.\5\23,\3\17+\10\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23" - ",\3\23,\3\17+\10\17+\10\17+\10\17+\10\17+\10\23,\3\17+\10\202\320q\202" - "\320q\23,\3\17+\10\23,\3\0\0""5d\26""5d\26""5d\26""7e\17""7e\17""7f\30" - "9g\21""9g\21""9g\21""7f\30""9g\21""9g\21""7f\30""9g\21""9g\21""9g\21" - "7f\30""9g\21""7f\30""9g\21""9g\21""7e\17""7e\17""5d\26""7e\17""5d\26" - "5d\26""5d\26""5d\26""3b\24""3b\24""3b\24""3b\24""2a\23""2a\23""2a\23" - "3[\16""0_\21""0_\21""0_\21""3[\16/^\20""3[\16/^\20""3[\16""0Y\24""2Z" - "\15""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24.W\23.W\23-V\22-V\22-V\22" - "*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16(R\14(R\14.P\14*N\22." - "P\14*N\22*N\22.P\14*N\22.P\14*N\22*N\22*N\22*N\22*N\22*N\22*N\22*N\22" - "\202\320q\202\320q*N\22*N\22*N\22\0\0\27=\7\27=\7\30>\10\30>\10\30>\10" - "\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77" - "\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\30" - ">\10\30>\10\30>\10\30>\10\30>\10\27=\7\27=\7\27=\7\27=\7\34:\5\34:\5" - "\34:\5\27""8\11\32""8\2\31""9\13\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5\6\24""4\5\24""4\5" - "\23""3\3\30""1\1\23""3\3\23""3\3\23""3\3\25""0\10\30""1\1\25""0\10\25" - "0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5\23" - ",\3\23,\3\23,\3\17+\10\23,\3\23,\3\23,\3\23,\3\17+\10\23,\3\17+\10\17" - "+\10\23,\3\17+\10\17+\10\17+\10\23,\3\17+\10\23,\3\202\320q\202\320q" - "\17+\10\17+\10\23,\3\0\0""5d\26""5d\26""5d\26""7e\17""5d\26""9g\21""7" - "f\30""9g\21""7f\30""9g\21""9g\21""9g\21""7f\30""9g\21""9g\21""9g\21""7" - "f\30""9g\21""9g\21""9g\21""7e\17""5d\26""5d\26""7e\17""7e\17""5d\26""5" - "d\26""5d\26""3b\24""3b\24""3b\24""3b\24""2a\23""2a\23""2a\23""0_\21""0" - "_\21""0_\21""0_\21/^\20/^\20""3[\16/^\20-\\\16""3[\16""2Z\15""2Z\15""0" - "Y\24""0Y\24""2Z\15""2Z\15""0Y\24.W\23.W\23-V\22-V\22*T\16*T\16*T\16*" - "T\16*T\16*T\16*T\16*T\16*T\16*T\16(R\14*N\22.P\14*N\22.P\14*N\22.P\14" - "*N\22.P\14.P\14.P\14*N\22*N\22*N\22*N\22*N\22*N\22*N\22*N\22\202\320" - "q\202\320q*N\22*N\22*N\22\0\0\27=\7\30>\10\30>\10\30>\10\30>\10\32\77" - "\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32" - "\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\30>\10\30>\10\30" - ">\10\30>\10\35;\6\27=\7\27=\7\27=\7\34:\5\31""9\13\34:\5\34:\5\31""9" - "\13\32""8\2\32""8\2\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\25""5\6\25""5\6\24""4\5\24""4\5\23""3\3\23""3\3" - "\23""3\3\23""3\3\23""3\3\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10" - "\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\23,\3\23" - ",\3\23,\3\23,\3\17+\10\23,\3\23,\3\17+\10\23,\3\23,\3\17+\10\17+\10\17" - "+\10\23,\3\17+\10\17+\10\23,\3\17+\10\17+\10\202\320q\202\320q\17+\10" - "\17+\10\23,\3\0\0""5d\26""7e\17""5d\26""7e\17""5d\26""9g\21""7f\30""9" - "g\21""9g\21""9g\21""7f\30""9g\21""9g\21""7f\30""7f\30""9g\21""9g\21""7" - "e\17""5d\26""7e\17""5d\26""7e\17""7e\17""5d\26""5d\26""5d\26""5d\26""3" - "b\24""3b\24""3b\24""2a\23""2a\23""2a\23""3[\16""0_\21""0_\21""0_\21""3" - "[\16/^\20/^\20""3[\16-\\\16-\\\16""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15" - "0Y\24""2Z\15""0Y\24.W\23.W\23-V\22-V\22*T\16""0R\16*T\16""0R\16*T\16" - "*T\16*T\16*T\16*T\16*T\16(R\14*N\22.P\14.P\14.P\14.P\14*N\22.P\14.P\14" - "*N\22.P\14.P\14*N\22*N\22*N\22*N\22*N\22*N\22*N\22*N\22\202\320q\202" - "\320q*N\22*N\22*N\22\0\0\30>\10\30>\10\30>\10\30>\10\32\77\12\32\77\12" - "\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77" - "\12\32\77\12\32\77\12\32\77\12\30>\10\30>\10\30>\10\30>\10\27=\7\27=" - "\7\27=\7\27=\7\27=\7\31""9\13\34:\5\34:\5\34:\5\32""8\2\31""9\13\32""8" - "\2\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\25""5\6\25""5\6\24""4\5\27""1\12\23""3\3\27""1\12\23""3\3\23""3" - "\3\30""1\1\30""1\1\30""1\1\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25" - "/\7\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\23,\3\23,\3\17+\10\23," - "\3\17+\10\23,\3\23,\3\23,\3\17+\10\23,\3\23,\3\23,\3\17+\10\17+\10\17" - "+\10\23,\3\17+\10\17+\10\23,\3\17+\10\202\320q\202\320q\17+\10\17+\10" - "\23,\3\0\0""5d\26""7e\17""7e\17""5d\26""7f\30""9g\21""7f\30""9g\21""9" - "g\21""9g\21""7f\30""9g\21""9g\21""9g\21""7f\30""9g\21""7e\17""7e\17""7" - "e\17""7e\17""7e\17""5d\26""5d\26""5d\26""5d\26""3b\24""3b\24""3b\24""3" - "b\24""2a\23""2a\23""2a\23""0_\21""0_\21""0_\21""3[\16/^\20""3[\16/^\20" - "/^\20-\\\16-\\\16""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15.W" - "\23.W\23.W\23-V\22-V\22*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16" - "*T\16(R\14(R\14*N\22.P\14*N\22.P\14*N\22.P\14*N\22.P\14.P\14*N\22*N\22" - "*N\22*N\22*N\22*N\22*N\22*N\22*N\22*N\22\202\320q\202\320q*N\22*N\22" - "*N\22\0\0\30>\10\30>\10\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\32" - "\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\30" - ">\10\30>\10\30>\10\30>\10\30>\10\27=\7\27=\7\27=\7\27=\7\31""9\13\34" - ":\5\34:\5\34:\5\32""8\2\31""9\13\32""8\2\32""8\2\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5\6\24" - "4\5\27""1\12\23""3\3\30""1\1\23""3\3\23""3\3\30""1\1\30""1\1\30""1\1" - "\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24" - ".\5\24.\5\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3" - "\23,\3\17+\10\23,\3\23,\3\17+\10\17+\10\17+\10\17+\10\23,\3\17+\10\17" - "+\10\17+\10\202\320q\202\320q\17+\10\23,\3\23,\3\0\0""7e\17""7e\17""9" - "g\21""7f\30""9g\21""7f\30""9g\21""9g\21""9g\21""9g\21""7f\30""9g\21""9" - "g\21""7f\30""9g\21""5d\26""7e\17""5d\26""7e\17""7e\17""5d\26""5d\26""5" - "d\26""5d\26""3b\24""3b\24""3b\24""2a\23""2a\23""2a\23""2a\23""0_\21""0" - "_\21""0_\21""0_\21/^\20/^\20""0Y\24/^\20-\\\16-\\\16""2Z\15""0Y\24""0" - "Y\24""0Y\24""0Y\24""0Y\24""2Z\15.W\23.W\23-V\22-V\22-V\22*T\16*T\16""0" - "R\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16.P\14*N\22.P\14*N\22.P\14.P\14" - ".P\14.P\14*N\22.P\14*N\22.P\14*N\22.P\14*N\22*N\22*N\22*N\22*N\22*N\22" - "*N\22*N\22\202\320q\202\320q*N\22.P\14.P\14\0\0\30>\10\30>\10\32\77\12" - "\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77" - "\12\32\77\12\32\77\12\32\77\12\32\77\12\30>\10\30>\10\30>\10\30>\10\27" - "=\7\35;\6\27=\7\27=\7\34:\5\34:\5\34:\5\34:\5\31""9\13\32""8\2\31""9" - "\13\32""8\2\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\25""5\6\25""5\6\24""4\5\24""4\5\27""1\12\23""3\3\23""3\3\27""1\12" - "\30""1\1\30""1\1\30""1\1\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/\7" - "\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\23,\3\23,\3\23,\3\23" - ",\3\23,\3\17+\10\23,\3\17+\10\23,\3\17+\10\23,\3\23,\3\23,\3\23,\3\17" - "+\10\17+\10\17+\10\17+\10\23,\3\17+\10\23,\3\23,\3\202\320q\202\320q" - "\23,\3\23,\3\23,\3\0\0""7e\17""7e\17""9g\21""7f\30""9g\21""9g\21""9g" - "\21""9g\21""9g\21""7f\30""9g\21""9g\21""9g\21""7f\30""7e\17""5d\26""5" - "d\26""7e\17""5d\26""5d\26""5d\26""5d\26""5d\26""3b\24""3b\24""3b\24""2" - "a\23""2a\23""2a\23""2a\23""0_\21""3[\16""0_\21""0_\21""3[\16/^\20""3" - "[\16/^\20""3[\16-\\\16""2Z\15""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y" - "\24.W\23.W\23-V\22-V\22-V\22*T\16*T\16*T\16*T\16""0R\16*T\16*T\16*T\16" - "*T\16*T\16(R\14*N\22.P\14*N\22.P\14*N\22.P\14*N\22.P\14.P\14.P\14*N\22" - "*N\22*N\22.P\14*N\22*N\22*N\22*N\22.P\14*N\22.P\14*N\22\202\320q\202" - "\320q*N\22.P\14*N\22\0\0\30>\10\30>\10\36B\5\32\77\12\32\77\12\32\77" - "\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\30>\10\30>" - "\10\30>\10\30>\10\30>\10\30>\10\27=\7\27=\7\27=\7\27=\7\27""8\11\31""9" - "\13\34:\5\34:\5\32""8\2\31""9\13\32""8\2\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\24""4\5\24""4\5\24""4" - "\5\23""3\3\23""3\3\23""3\3\30""1\1\27""1\12\30""1\1\30""1\1\25""0\10" - "\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24" - ".\5\24.\5\24.\5\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3" - "\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23" - ",\3\17+\10\23,\3\202\320q\202\320q\23,\3\17+\10\23,\3\0\0""7e\17""7f" - "\30""9g\21""9g\21""9g\21""9g\21""9g\21""9g\21""7f\30""9g\21""7f\30""9" - "g\21""7e\17""7e\17""5d\26""7e\17""5d\26""5d\26""5d\26""5d\26""5d\26""3" - "b\24""3b\24""3b\24""3b\24""2a\23""2a\23""2a\23""2a\23""0_\21""0_\21""0" - "_\21/^\20/^\20""3[\16/^\20-\\\16-\\\16""2Z\15""0Y\24""0Y\24""0Y\24""0" - "Y\24""2Z\15""0Y\24""0Y\24.W\23.W\23-V\22-V\22-V\22*T\16*T\16*T\16*T\16" - "*T\16*T\16*T\16*T\16*T\16*T\16(R\14(R\14.P\14*N\22.P\14*N\22.P\14.P\14" - "*N\22.P\14*N\22.P\14*N\22.P\14*N\22.P\14.P\14*N\22.P\14.P\14*N\22*N\22" - ".P\14.P\14\202\320q\202\320q.P\14.P\14*N\22\0\0\32\77\12\32\77\12\32" - "\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12" - "\32\77\12\30>\10\30>\10\30>\10\30>\10\30>\10\30>\10\27=\7\27=\7\27=\7" - "\27=\7\31""9\13\34:\5\31""9\13\34:\5\32""8\2\31""9\13\32""8\2\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5" - "\6\25""5\6\24""4\5\23""3\3\23""3\3\27""1\12\23""3\3\23""3\3\27""1\12" - "\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7" - "\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\23,\3\23,\3\23,\3\23,\3\23" - ",\3\23,\3\17+\10\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\17+" - "\10\23,\3\17+\10\23,\3\17+\10\23,\3\23,\3\17+\10\23,\3\202\320q\202\320" - "q\23,\3\23,\3\23,\3\0\0""7f\30""9g\21""9g\21""9g\21""9g\21""9g\21""9" - "g\21""7f\30""9g\21""9g\21""9g\21""5d\26""7e\17""5d\26""5d\26""7e\17""5" - "d\26""5d\26""7e\17""5d\26""3b\24""3b\24""3b\24""3b\24""2a\23""2a\23""2" - "a\23""0_\21""0_\21""0_\21""3[\16""0_\21/^\20""3[\16/^\20-\\\16-\\\16" - "-\\\16""2Z\15""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24.W\23.W\23-V\22" - "-V\22-V\22*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16(R\14.P\14" - ".P\14*N\22.P\14*N\22.P\14.P\14.P\14*N\22.P\14*N\22.P\14.P\14*N\22.P\14" - "*N\22.P\14.P\14*N\22.P\14.P\14*N\22.P\14.P\14\202\320q\202\320q*N\22" - ".P\14.P\14\0\0\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12" - "\32\77\12\32\77\12\32\77\12\32\77\12\30>\10\30>\10\30>\10\30>\10\30>" - "\10\27=\7\27=\7\27=\7\27=\7\27=\7\34:\5\34:\5\27""8\11\34:\5\31""9\13" - "\32""8\2\32""8\2\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\25""5\6\25""5\6\24""4\5\27""1\12\23""3\3\27""1\12" - "\23""3\3\27""1\12\23""3\3\30""1\1\25""0\10\30""1\1\25""0\10\25""0\10" - "\25/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\23" - ",\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\17+\10\23,\3\23,\3\23,\3\23," - "\3\23,\3\17+\10\23,\3\17+\10\23,\3\23,\3\23,\3\17+\10\23,\3\23,\3\23" - ",\3\23,\3\17+\10\202\320q\202\320q\23,\3\23,\3\23,\3\0\0""7f\30""9g\21" - "9g\21""9g\21""9g\21""9g\21""7f\30""9g\21""9g\21""5d\26""7e\17""5d\26" - "5d\26""5d\26""7e\17""5d\26""5d\26""5d\26""5d\26""3b\24""3b\24""3b\24" - "3b\24""2a\23""2a\23""2a\23""0_\21""0_\21""0_\21""0_\21""0_\21""3[\16" - "/^\20/^\20/^\20""0Y\24-\\\16""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24" - "0Y\24.W\23.W\23-V\22-V\22-V\22""0R\16*T\16*T\16*T\16*T\16*T\16*T\16*" - "T\16*T\16*T\16*T\16*N\22.P\14*N\22.P\14.P\14*N\22.P\14.P\14*N\22.P\14" - ".P\14*N\22.P\14.P\14.P\14.P\14.P\14*N\22.P\14.P\14.P\14.P\14*N\22.P\14" - ".P\14\202\320q\202\320q*N\22*N\22.P\14\0\0\32\77\12\32\77\12\32\77\12" - "\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\30>\10\30>\10" - "\30>\10\30>\10\30>\10\27=\7\27=\7\27=\7\27=\7\34:\5\34:\5\34:\5\34:\5" - "\31""9\13\32""8\2\31""9\13\32""8\2\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\24""4\5\24""4\5\23""3\3" - "\27""1\12\23""3\3\23""3\3\23""3\3\30""1\1\30""1\1\25""0\10\30""1\1\25" - "0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24" - ".\5\24.\5\24.\5\23,\3\23,\3\23,\3\23,\3\17+\10\23,\3\23,\3\17+\10\23" - ",\3\17+\10\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\17+\10\23,\3\23,\3\17" - "+\10\23,\3\17+\10\23,\3\23,\3\17+\10\202\320q\202\320q\23,\3\23,\3\24" - ".\5\0\0""9g\21""9g\21""9g\21""9g\21""9g\21""9g\21""7f\30""9g\21""9g\21" - "7e\17""7e\17""5d\26""5d\26""7e\17""5d\26""5d\26""5d\26""5d\26""3b\24" - "3b\24""3b\24""3b\24""2a\23""2a\23""2a\23""0_\21""0_\21""0_\21""0_\21" - "/^\20/^\20""3[\16/^\20-\\\16-\\\16""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24" - "2Z\15""0Y\24""0Y\24.W\23.W\23-V\22-V\22-V\22*T\16*T\16*T\16""0R\16*T" - "\16*T\16*T\16*T\16*T\16*T\16*T\16(R\14.P\14.P\14.P\14\242\261\230\236" - "\262\222\242\261\230\235\261\220\235\261\220\235\261\220\235\261\220" - "\235\261\220\242\261\230\236\262\222\242\261\230\236\262\222\242\261" - "\230\236\262\222\235\261\220\242\261\230\235\261\220\236\262\222\235" - "\261\220.P\14*N\22.P\14\202\320q\202\320q*N\22*T\16*T\16\0\0\32\77\12" - "\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\30>\10" - "\30>\10\30>\10\30>\10\30>\10\27=\7\27=\7\27=\7\27=\7\34:\5\34:\5\27""8" - "\11\34:\5\31""9\13\32""8\2\31""9\13\32""8\2\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5\6\24""4\5" - "\23""3\3\23""3\3\30""1\1\30""1\1\23""3\3\23""3\3\25""0\10\30""1\1\25" - "0\10\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24." - "\5\24.\5\24.\5\24.\5\24.\5\23,\3\23,\3\17+\10\23,\3\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\17+\10\23,\3\17+\10\202\320q\202\320q\24.\5\24.\5\24.\5\0\0""7f" - "\30""9g\21""9g\21""7f\30""9g\21""9g\21""9g\21""7f\30""7e\17""5d\26""7" - "e\17""5d\26""7e\17""5d\26""5d\26""5d\26""5d\26""3b\24""3b\24""3b\24""3" - "b\24""2a\23""2a\23""2a\23""3[\16""0_\21""0_\21""0_\21""3[\16/^\20/^\20" - "/^\20-\\\16-\\\16""3[\16""2Z\15""2Z\15""0Y\24""0Y\24""0Y\24""2Z\15""0" - "Y\24.W\23.W\23-V\22-V\22-V\22*T\16""0R\16*T\16""0R\16*T\16*T\16*T\16" - "*T\16*T\16*T\16*T\16*T\16(R\14*N\22.P\14.P\14\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - ".P\14.P\14.P\14\202\320q\202\320q*T\16*T\16*T\16\0\0\32\77\12\32\77\12" - "\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\30>\10\30>\10\30>\10\30" - ">\10\27=\7\27=\7\27=\7\27=\7\27=\7\34:\5\27""8\11\34:\5\34:\5\31""9\13" - "\32""8\2\32""8\2\31""9\13\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\25""5\6\25""5\6\24""4\5\23""3\3\23""3\3\30" - "1\1\23""3\3\23""3\3\30""1\1\30""1\1\25""0\10\30""1\1\25""0\10\25""0\10" - "\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\24" - ".\5\23,\3\23,\3\23,\3\23,\3\17+\10\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\23,\3\23,\3" - "\17+\10\202\320q\202\320q\24.\5\24.\5\24.\5\0\0""9g\21""7f\30""9g\21" - "7f\30""9g\21""9g\21""7e\17""7e\17""5d\26""7e\17""5d\26""5d\26""5d\26" - "5d\26""5d\26""7e\17""3b\24""3b\24""3b\24""3b\24""2a\23""2a\23""2a\23" - "3[\16""0_\21""0_\21""0_\21""3[\16/^\20/^\20/^\20""3[\16-\\\16""0Y\24" - "0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""0Y\24.W\23.W\23-V\22-V\22-" - "V\22*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*N\22" - "(R\14*N\22.P\14.P\14\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374*N\22(R\14*T\16\202\320q" - "\202\320q*T\16*T\16*T\16\0\0\32\77\12\32\77\12\32\77\12\32\77\12\32\77" - "\12\32\77\12\30>\10\30>\10\30>\10\30>\10\30>\10\27=\7\27=\7\27=\7\27" - "=\7\34:\5\34:\5\34:\5\31""9\13\32""8\2\32""8\2\31""9\13\32""8\2\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25" - "5\6\24""4\5\24""4\5\23""3\3\23""3\3\23""3\3\30""1\1\23""3\3\27""1\12" - "\30""1\1\30""1\1\30""1\1\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25" - "/\7\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\23,\3\23,\3\23,\3" - "\23,\3\23,\3\23,\3\23,\3\17+\10\23,\3\23,\3\23,\3[mP\367\371\366\372" - "\374\371\214\227\2067M+\27""1\12\27""1\12""7M+\214\227\206\372\374\371" - "\373\375\372\177\216v\23,\3\23,\3\24.\5\24.\5\202\320q\202\320q\24.\5" - "\24.\5\25/\7\0\0""9g\21""7f\30""7f\30""9g\21""9g\21""9g\21""7e\17""7" - "e\17""5d\26""7e\17""5d\26""5d\26""5d\26""7e\17""5d\26""3b\24""3b\24""3" - "b\24""3b\24""2a\23""2a\23""2a\23""0_\21""0_\21""3[\16""0_\21/^\20/^\20" - "/^\20/^\20-\\\16""3[\16""0Y\24""2Z\15""2Z\15""0Y\24""0Y\24""0Y\24""0" - "Y\24""0Y\24.W\23.W\23-V\22-V\22-V\22*T\16*T\16""0R\16*T\16""0R\16*T\16" - "*T\16*T\16*T\16*T\16*T\16*T\16*T\16*N\22(R\14*N\22.P\14.P\14*N\22.P\14" - ".P\14*N\22*N\22Po7\370\372\367\376\377\374\215\236y*N\22.P\14.P\14.P" - "\14*N\22.P\14\215\236y\376\377\374\376\377\374t\211^*T\16*T\16*T\16\202" - "\320q\202\320q*T\16*T\16""0R\16\0\0\32\77\12\32\77\12\32\77\12\32\77" - "\12\32\77\12\32\77\12\30>\10\30>\10\30>\10\30>\10\27=\7\27=\7\27=\7\27" - "=\7\31""9\13\34:\5\31""9\13\34:\5\31""9\13\32""8\2\31""9\13\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\25""5\6\25""5\6\24""4\5\30""1\1\23""3\3\27""1\12\23""3\3\23""3\3" - "\23""3\3\25""0\10\30""1\1\30""1\1\25""0\10\25""0\10\25""0\10\25/\7\25" - "/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5" - "\23,\3\23,\3\23,\3\23,\3\17+\10\23,\3\23,\3\23,\3\23,\3\23,\3\253\271" - "\255\376\377\374\376\377\3747M+\23,\3\23,\3\17+\10\23,\3\23,\3\23,\3" - "8N,\376\377\374\376\377\374\302\311\276\24.\5\24.\5\24.\5\202\320q\202" - "\320q\25/\7\25/\7\25/\7\0\0""7f\30""9g\21""7f\30""9g\21""9g\21""9g\21" - "7e\17""7e\17""5d\26""7e\17""7e\17""5d\26""7e\17""5d\26""3b\24""3b\24" - "3b\24""3b\24""2a\23""2a\23""2a\23""0_\21""3[\16""0_\21""0_\21/^\20/^" - "\20""3[\16/^\20""3[\16-\\\16""3[\16""2Z\15""0Y\24""0Y\24""0Y\24""2Z\15" - "0Y\24""2Z\15.W\23.W\23-V\22-V\22-V\22*T\16*T\16*T\16""0R\16*T\16*T\16" - "*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*N\22(R\14*N\22*N\22.P\14.P\14" - "*N\22.P\14.P\14*N\22\360\362\357\376\377\374\376\377\374b|K*N\22.P\14" - ".P\14.P\14.P\14(R\14b|K\376\377\374\376\377\374\361\363\360*T\16*T\16" - "*T\16\202\320q\202\320q*T\16*T\16*T\16\0\0\32\77\12\32\77\12\32\77\12" - "\32\77\12\36B\5\32\77\12\30>\10\30>\10\30>\10\27=\7\27=\7\27=\7\27=\7" - "\27""8\11\34:\5\34:\5\31""9\13\31""9\13\32""8\2\31""9\13\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25" - "5\6\25""5\6\24""4\5\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3\23""3\3" - "\30""1\1\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/" - "\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5" - "\23,\3\23,\3\23,\3\23,\3\17+\10\23,\3\23,\3\23,\3\17+\10\23,\3\370\372" - "\367\376\377\374\376\377\374\315\324\311(>\35\23,\3\23,\3\17+\10\23," - "\3(>\35\321\327\314\376\377\374\376\377\374\370\372\367\24.\5\24.\5\24" - ".\5\202\320q\202\320q\25/\7\25/\7\25/\7\0\0""9g\21""9g\21""7f\30""9g" - "\21""9g\21""7e\17""7e\17""5d\26""7e\17""7e\17""5d\26""5d\26""5d\26""3" - "b\24""3b\24""3b\24""3b\24""2a\23""2a\23""2a\23""3[\16""0_\21""0_\21""3" - "[\16/^\20""3[\16/^\20/^\20-\\\16-\\\16""2Z\15""2Z\15""2Z\15""0Y\24""0" - "Y\24""2Z\15""0Y\24""2Z\15.W\23.W\23.W\23-V\22-V\22-V\22*T\16""0R\16*" - "T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16.P\14*N\22(R" - "\14*N\22.P\14.P\14*N\22.P\14*N\22.P\14.P\14\341\347\334\376\377\374\376" - "\377\374\376\377\374\366\370\364\277\313\270\245\264\233\245\264\233" - "\277\313\270\367\371\366\376\377\374\376\377\374\376\377\374\341\347" - "\334*T\16*T\16*T\16\202\320q\202\320q*T\16""0R\16-V\22\0\0\32\77\12\32" - "\77\12\32\77\12\32\77\12\30>\10\30>\10\30>\10\30>\10\30>\10\27=\7\27" - "=\7\27=\7\34:\5\27""8\11\34:\5\34:\5\31""9\13\32""8\2\31""9\13\32""8" - "\2\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25" - "5\6\25""5\6\24""4\5\24""4\5\27""1\12\23""3\3\30""1\1\23""3\3\23""3\3" - "\30""1\1\30""1\1\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10\25/\7\25" - "/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5" - "\24.\5\23,\3\23,\3\23,\3\23,\3\23,\3\17+\10\23,\3\23,\3\23,\3\23,\3\23" - ",\3\221\234\213\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\221\234\213\24.\5\25/\7\25/\7\202\320q\202\320q" - "\25/\7\25""0\10\25""0\10\0\0""9g\21""9g\21""9g\21""5d\26""7e\17""7e\17" - "5d\26""7e\17""5d\26""5d\26""7e\17""5d\26""3b\24""3b\24""3b\24""3b\24" - "2a\23""2a\23""2a\23""3[\16""0_\21""0_\21""0_\21""3[\16/^\20""3[\16/^" - "\20-\\\16-\\\16""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2Z" - "\15.W\23.W\23.W\23-V\22-V\22-V\22*T\16*T\16*T\16""0R\16*T\16""0R\16*" - "T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16(R\14*N\22(R\14*N\22.P\14.P\14" - ".P\14.P\14*N\22.P\14*N\22""6Y\35\341\347\334\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\341\347\3349\\\37*T\16*T\16*T\16\202\320" - "q\202\320q*T\16-V\22-V\22\0\0\32\77\12\32\77\12\32\77\12\30>\10\30>\10" - "\30>\10\30>\10\27=\7\27=\7\27=\7\27=\7\27=\7\34:\5\27""8\11\34:\5\32" - "8\2\32""8\2\32""8\2\32""8\2\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5\6\24""4\5\23""3\3\30""1" - "\1\23""3\3\27""1\12\23""3\3\30""1\1\23""3\3\30""1\1\25""0\10\25""0\10" - "\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24" - ".\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\23,\3\23,\3\23,\3\23,\3\23,\3" - "\23,\3\17+\10\23,\3\23,\3\23,\3\23,\3\17+\10+A\40\307\316\303\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\313\321\3061E\36\25/\7\25/\7\25/\7\25/\7\202\320" - "q\202\320q\25""0\10\25""0\10\25""0\10\0\0""9g\21""9g\21""7f\30""7e\17" - "7e\17""5d\26""7e\17""5d\26""5d\26""5d\26""5d\26""3b\24""3b\24""3b\24" - "3b\24""2a\23""2a\23""2a\23""0_\21""3[\16""0_\21""0_\21""3[\16/^\20/^" - "\20""3[\16-\\\16""0Y\24-\\\16""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y" - "\24""2Z\15.W\23.W\23.W\23-V\22-V\22-V\22*T\16*T\16*T\16*T\16*T\16*T\16" - "*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16(R\14.P\14*N\22.P\14*N\22" - ".P\14.P\14.P\14*N\22*N\22.P\14(R\14(R\14*N\22m\212^\270\303\261\344\353" - "\340\370\372\367\370\372\367\345\354\341\267\307\255m\212^0R\16""0R\16" - "*T\16*T\16*T\16*T\16\202\320q\202\320q-V\22.W\23.W\23\0\0\32\77\12\32" - "\77\12\32\77\12\30>\10\30>\10\30>\10\27=\7\27=\7\27=\7\27=\7\27=\7\31" - "9\13\34:\5\34:\5\31""9\13\32""8\2\31""9\13\32""8\2\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5" - "\6\24""4\5\24""4\5\27""1\12\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3" - "\25""0\10\30""1\1\30""1\1\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25" - "/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5" - "\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\17+\10\23,\3\23,\3\23,\3\23,\3\23" - ",\3\23,\3\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\25/\7" - "\25/\7\25/\7\25/\7\25/\7\25/\7\202\320q\202\320q\25""0\10\30""1\1\30" - "1\1\0\0""9g\21""9g\21""7f\30""5d\26""7e\17""5d\26""5d\26""5d\26""5d\26" - "5d\26""3b\24""3b\24""3b\24""3b\24""2a\23""2a\23""2a\23""3[\16""0_\21" - "0_\21""3[\16/^\20/^\20/^\20""3[\16-\\\16-\\\16""0Y\24""0Y\24""0Y\24""0" - "Y\24""0Y\24""0Y\24""2Z\15""0Y\24.W\23.W\23.W\23-V\22-V\22-V\22*T\16*" - "T\16*T\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16""0" - "R\16*T\16*T\16(R\14(R\14.P\14(R\14*N\22(R\14(R\14.P\14(R\14(R\14.P\14" - "*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16""0R\16*T\16*" - "T\16*T\16-V\22\202\320q\202\320q.W\23.W\23""0Y\24\0\0\32\77\12\32\77" - "\12\32\77\12\30>\10\30>\10\30>\10\27=\7\27=\7\27=\7\27=\7\34:\5\34:\5" - "\27""8\11\32""8\2\32""8\2\31""9\13\32""8\2\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\24""4\5\24""4\5" - "\24""4\5\30""1\1\23""3\3\27""1\12\23""3\3\30""1\1\23""3\3\30""1\1\30" - "1\1\25""0\10\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25/\7" - "\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24" - ".\5\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\23,\3\24.\5\24.\5" - "\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\25/\7\25/\7\25/\7\25" - "/\7\25/\7\25/\7\25""0\10\25""0\10\202\320q\202\320q\30""1\1\23""3\3\23" - "3\3\0\0""9g\21""9g\21""5d\26""7e\17""5d\26""5d\26""5d\26""7e\17""5d\26" - "3b\24""3b\24""3b\24""3b\24""2a\23""2a\23""2a\23""0_\21""0_\21""0_\21" - "3[\16""0_\21""3[\16""3[\16""3[\16""0Y\24-\\\16""3[\16""2Z\15""0Y\24""0" - "Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15.W\23.W\23-V\22-V\22-V\22*T\16" - "*T\16*T\16""0R\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16" - "*T\16*T\16*T\16*T\16*T\16*T\16(R\14(R\14(R\14\236\262\222\236\262\222" - "\236\262\222\242\261\230\236\262\222\242\261\230\236\262\222\242\261" - "\230\236\262\222\242\261\230\236\262\222\236\262\222\236\262\222\237" - "\263\223\237\263\223\237\263\223\237\263\223\237\263\223\237\263\223" - "-V\22-V\22-V\22\202\320q\202\320q2Z\15""0Y\24""2Z\15\0\0\32\77\12\30" - ">\10\30>\10\30>\10\30>\10\27=\7\27=\7\27=\7\27=\7\34:\5\27""8\11\34:" - "\5\34:\5\32""8\2\32""8\2\31""9\13\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5\6\24""4\5\30""1\1" - "\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3\23""3\3\25""0\10\25""0\10\30" - "1\1\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25" - "/\7\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5" - "\24.\5\24.\5\24.\5\24.\5\24.\5\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\25""0\10\25""0\10" - "\30""1\1\202\320q\202\320q\23""3\3\27""1\12\23""3\3\0\0""9g\21""7e\17" - "7e\17""7e\17""5d\26""7e\17""5d\26""7e\17""3b\24""3b\24""3b\24""3b\24" - "2a\23""2a\23""2a\23""0_\21""0_\21""0_\21""0_\21""0_\21/^\20""3[\16/^" - "\20""3[\16-\\\16""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2" - "Z\15""0Y\24.W\23.W\23.W\23-V\22-V\22-V\22*T\16*T\16""0R\16*T\16*T\16" - "0R\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16" - "*T\16*T\16*T\16*T\16\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374-V\22.W\23.W\23\202\320q" - "\202\320q0Y\24""0Y\24""0Y\24\0\0\32\77\12\30>\10\30>\10\35;\6\27=\7\27" - "=\7\27=\7\27=\7\27""8\11\34:\5\27""8\11\34:\5\31""9\13\32""8\2\31""9" - "\13\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\25""5\6\24""4\5\24""4\5\24""4\5\23""3\3\23""3\3\23""3\3\23""3\3" - "\23""3\3\23""3\3\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10" - "\25""0\10\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5" - "\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24" - ".\5\24.\5\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\30""1\1\25""0\10\25""0\10\202\320q\202" - "\320q\23""3\3\23""3\3\30""1\1\0\0""7e\17""7e\17""5d\26""7e\17""5d\26" - "5d\26""5d\26""3b\24""3b\24""3b\24""3b\24""2a\23""2a\23""2a\23""0_\21" - "0_\21""0_\21""0_\21""3[\16/^\20""3[\16/^\20-\\\16-\\\16""2Z\15""2Z\15" - "0Y\24""0Y\24""0Y\24""2Z\15""2Z\15""0Y\24""0Y\24.W\23.W\23.W\23-V\22-" - "V\22-V\22""0R\16*T\16*T\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16" - "*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374.W\23.W\23""0Y\24\202\320q\202\320q0Y\24""2Z\15""2" - "Z\15\0\0\30>\10\30>\10\30>\10\30>\10\27=\7\27=\7\27=\7\34:\5\27""8\11" - "\31""9\13\34:\5\32""8\2\27""8\11\32""8\2\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5\6\24""4\5\24""4" - "\5\23""3\3\30""1\1\23""3\3\23""3\3\23""3\3\23""3\3\23""3\3\25""0\10\30" - "1\1\25""0\10\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25/\7" - "\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24" - ".\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5" - "\24.\5\24.\5\24.\5\24.\5\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25""0\10" - "\25""0\10\25""0\10\25""0\10\30""1\1\30""1\1\23""3\3\23""3\3\202\320q" - "\202\320q\30""1\1\24""4\5\24""4\5\0\0""7e\17""7e\17""7e\17""5d\26""5" - "d\26""7e\17""5d\26""3b\24""3b\24""3b\24""2a\23""2a\23""2a\23""0_\21""3" - "[\16""0_\21""0_\21""0_\21/^\20/^\20/^\20""0Y\24-\\\16-\\\16""2Z\15""0" - "Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15.W\23.W\23.W\23-V\22-V" - "\22-V\22-V\22*T\16*T\16*T\16*T\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16" - "*T\16*T\16*T\16*T\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*" - "T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16""0R\16*T\16""0R\16*T\16" - "*T\16-V\22-V\22.W\23.W\23.W\23""0Y\24""0Y\24""2Z\15\202\320q\202\320" - "q2Z\15""0Y\24-\\\16\0\0\30>\10\30>\10\30>\10\27=\7\27=\7\27=\7\31""9" - "\13\34:\5\34:\5\34:\5\31""9\13\31""9\13\31""9\13\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5\6\25" - "5\6\24""4\5\30""1\1\23""3\3\27""1\12\23""3\3\23""3\3\30""1\1\23""3\3" - "\30""1\1\30""1\1\30""1\1\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/\7" - "\25/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24" - ".\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5" - "\24.\5\24.\5\24.\5\24.\5\24.\5\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25" - "/\7\25""0\10\25""0\10\25""0\10\25""0\10\30""1\1\30""1\1\23""3\3\23""3" - "\3\23""3\3\202\320q\202\320q\24""4\5\25""5\6\25""5\6\0\0""7e\17""5d\26" - "7e\17""7e\17""5d\26""5d\26""3b\24""3b\24""3b\24""2a\23""2a\23""2a\23" - "2a\23""0_\21""3[\16""0_\21""0_\21/^\20/^\20/^\20""3[\16""3[\16-\\\16" - "2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24.W\23.W\23.W\23" - ".W\23-V\22-V\22-V\22*T\16*T\16*T\16*T\16*T\16*T\16*T\16""0R\16*T\16*" - "T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16" - "*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16""0R\16*T\16""0R\16*T\16""0R" - "\16*T\16-V\22-V\22-V\22""2Z\15.W\23""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15" - "\202\320q\202\320q-\\\16-\\\16/^\20\0\0\30>\10\30>\10\27=\7\27=\7\27" - "=\7\27""8\11\34:\5\34:\5\31""9\13\32""8\2\32""8\2\31""9\13\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\25" - "5\6\25""5\6\24""4\5\24""4\5\27""1\12\23""3\3\27""1\12\23""3\3\23""3\3" - "\23""3\3\30""1\1\25""0\10\30""1\1\30""1\1\25""0\10\25""0\10\25""0\10" - "\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24" - ".\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5" - "\24.\5\24.\5\226\240\217\226\240\217\226\240\217#>\27\25/\7\226\240\217" - "\226\240\217\226\240\217\226\240\217\226\240\217\226\240\217\227\241" - "\220\227\241\220\227\241\220\227\241\220\227\241\220\230\242\221\225" - "\245\214\230\242\221\23""3\3\30""1\1\23""3\3\202\320q\202\320q\25""5" - "\6\27""7\10\27""7\10\0\0""5d\26""5d\26""7e\17""5d\26""5d\26""3b\24""3" - "b\24""3b\24""3b\24""2a\23""2a\23""2a\23""0_\21""0_\21""0_\21""3[\16/" - "^\20/^\20""3[\16/^\20-\\\16""3[\16""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24" - "2Z\15""0Y\24""2Z\15""0Y\24.W\23.W\23.W\23-V\22-V\22-V\22*T\16*T\16*T" - "\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16""0R\16" - "*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16\376\377\374\376\377" - "\374\376\377\374Po7*T\16\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\3740Y\24""0Y\24" - "2Z\15\202\320q\202\320q-\\\16/^\20/^\20\0\0\30>\10\27=\7\27=\7\27=\7" - "\27=\7\27""8\11\34:\5\34:\5\32""8\2\31""9\13\32""8\2\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5" - "\6\25""5\6\24""4\5\24""4\5\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3\30" - "1\1\30""1\1\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25/" - "\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5" - "\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24" - ".\5\24.\5\24.\5\376\377\374\376\377\374\376\377\3744H\"\25/\7\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\23""3\3\24""4\5\24""4\5\202\320q\202\320q\27" - "7\10\27""7\10\25""5\6\0\0""5d\26""5d\26""5d\26""5d\26""3b\24""3b\24""3" - "b\24""3b\24""2a\23""2a\23""2a\23""0_\21""0_\21""3[\16""0_\21/^\20""3" - "[\16/^\20""3[\16-\\\16-\\\16""2Z\15""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24" - "0Y\24""2Z\15""0Y\24.W\23.W\23.W\23-V\22-V\22-V\22-V\22*T\16*T\16*T\16" - "0R\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*" - "T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16\376\377\374\376\377" - "\374\376\377\374Fj,*T\16\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\3742Z\15""0Y\24" - "-\\\16\202\320q\202\320q3[\16""3[\16""0_\21\0\0\27=\7\27=\7\27=\7\27" - "=\7\34:\5\31""9\13\34:\5\31""9\13\32""8\2\31""9\13\31""9\13\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5" - "\6\25""5\6\24""4\5\24""4\5\30""1\1\27""1\12\23""3\3\23""3\3\27""1\12" - "\23""3\3\27""1\12\30""1\1\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10" - "\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24" - ".\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5" - "\24.\5\24.\5\25/\7\25/\7\376\377\374\376\377\374\376\377\3744H\"\25/" - "\7\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\24""4\5\25""5\6\25""5\6\202\320q\202" - "\320q\27""7\10\27""7\10\27""7\10\0\0""7e\17""5d\26""5d\26""3b\24""3b" - "\24""3b\24""3b\24""2a\23""2a\23""2a\23""0_\21""0_\21""0_\21/^\20/^\20" - "0Y\24/^\20""3[\16/^\20""0Y\24-\\\16""2Z\15""2Z\15""0Y\24""0Y\24""2Z\15" - "0Y\24""0Y\24""0Y\24.W\23.W\23.W\23-V\22-V\22-V\22-V\22*T\16""0R\16*T" - "\16*T\16""0R\16*T\16""0R\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16" - "*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16""0R\16*T\16*T\16*T\16*" - "T\16*T\16*T\16*T\16""0R\16-V\22-V\22-V\22.W\23.W\23.W\23""2Z\15""0Y\24" - "0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15-\\\16-\\\16\202\320q\202\320" - "q3[\16""0_\21""0_\21\0\0\27=\7\27=\7\27=\7\27""8\11\34:\5\27""8\11\31" - "9\13\32""8\2\32""8\2\31""9\13\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5\6\24""4\5\24""4\5\23""3" - "\3\27""1\12\23""3\3\23""3\3\30""1\1\27""1\12\23""3\3\25""0\10\30""1\1" - "\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7" - "\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5\24" - ".\5\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\25/\7\25/\7\25/\7\25/\7\25/\7" - "\25/\7\25/\7\25/\7\25/\7\25/\7\25""0\10\25""0\10\25""0\10\30""1\1\30" - "1\1\25""0\10\30""1\1\23""3\3\27""1\12\23""3\3\23""3\3\27""1\12\24""4" - "\5\24""4\5\24""4\5\25""5\6\27""7\10\202\320q\202\320q\27""7\10\27""7" - "\10\27""7\10\0\0""5d\26""5d\26""7e\17""3b\24""3b\24""3b\24""2a\23""2" - "a\23""2a\23""0_\21""0_\21""3[\16/^\20/^\20""3[\16/^\20/^\20""3[\16-\\" - "\16-\\\16""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0" - "Y\24.W\23.W\23.W\23-V\22-V\22-V\22-V\22*T\16*T\16*T\16""0R\16*T\16*T" - "\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16" - "*T\16*T\16*T\16*T\16""0R\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16-V\22" - "-V\22-V\22.W\23.W\23.W\23.W\23""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0" - "Y\24""0Y\24""2Z\15""3[\16/^\20/^\20\202\320q\202\320q3[\16""3[\16""0" - "_\21\0\0\27=\7\27=\7\34:\5\34:\5\34:\5\31""9\13\32""8\2\32""8\2\32""8" - "\2\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\25""5\6\25""5\6\24""4\5\24""4\5\23""3\3\27""1\12\23""3\3\23""3\3" - "\23""3\3\27""1\12\23""3\3\30""1\1\25""0\10\30""1\1\25""0\10\25""0\10" - "\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7" - "\25/\7\25/\7\25/\7\25/\7\25/\7\24.\5\24.\5\24.\5\24.\5\24.\5\24.\5\24" - ".\5\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7" - "\25""0\10\25""0\10\25""0\10\25""0\10\30""1\1\25""0\10\30""1\1\23""3\3" - "\30""1\1\23""3\3\27""1\12\23""3\3\23""3\3\24""4\5\25""5\6\25""5\6\27" - "7\10\27""7\10\27""7\10\202\320q\202\320q\27""7\10\27""7\10\32""8\2\0" - "\0""7e\17""5d\26""3b\24""3b\24""3b\24""2a\23""2a\23""2a\23""2a\23""0" - "_\21""3[\16""0_\21/^\20""3[\16""3[\16""3[\16/^\20-\\\16""0Y\24""2Z\15" - "2Z\15""2Z\15""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15.W\23.W\23.W\23" - "-V\22-V\22-V\22-V\22*T\16""0R\16*T\16*T\16*T\16""0R\16*T\16""0R\16*T" - "\16*T\16*T\16*T\16*T\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16""0" - "R\16*T\16*T\16*T\16""0R\16*T\16*T\16*T\16""0R\16-V\22-V\22-V\22\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374/^\20/^\20/^\20\202\320q\202\320q0_\21""2a\23" - "2a\23\0\0\27=\7\34:\5\27""8\11\34:\5\34:\5\32""8\2\31""9\13\32""8\2\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25" - "5\6\25""5\6\24""4\5\24""4\5\23""3\3\30""1\1\23""3\3\30""1\1\23""3\3\23" - "3\3\27""1\12\30""1\1\30""1\1\30""1\1\25""0\10\25""0\10\30""1\1\25""0" - "\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25" - "/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7" - "\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25""0\10\25""0\10\25" - "0\10\25""0\10\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\27""7\10\27""7\10\27""7" - "\10\202\320q\202\320q\27""7\10\31""9\13\32""8\2\0\0""5d\26""3b\24""3" - "b\24""3b\24""2a\23""2a\23""2a\23""0_\21""0_\21""0_\21""0_\21""3[\16/" - "^\20/^\20""3[\16/^\20-\\\16-\\\16""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15" - "0Y\24""2Z\15""0Y\24""0Y\24.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22""0" - "R\16*T\16*T\16*T\16*T\16""0R\16*T\16*T\16""0R\16*T\16*T\16*T\16""0R\16" - "*T\16*T\16*T\16*T\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16""0R\16*T\16" - "*T\16""0R\16-V\22-V\22-V\22-V\22.W\23\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "3[\16/^\20""0_\21\202\320q\202\320q2a\23""2a\23""3b\24\0\0\27=\7\34:" - "\5\27""8\11\34:\5\31""9\13\32""8\2\31""9\13\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5\6\25""5\6" - "\24""4\5\24""4\5\23""3\3\23""3\3\23""3\3\23""3\3\23""3\3\23""3\3\27""1" - "\12\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7" - "\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25" - "/\7\25/\7\25/\7\25/\7\25/\7\25""0\10\25""0\10\25""0\10\25""0\10\30""1" - "\1\30""1\1\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\27""7\10\27""7\10\27""7\10\202" - "\320q\202\320q\32""8\2\32""8\2\31""9\13\0\0""3b\24""3b\24""3b\24""2a" - "\23""2a\23""2a\23""0_\21""3[\16""0_\21""0_\21""0_\21/^\20""3[\16/^\20" - "/^\20-\\\16""3[\16""2Z\15""0Y\24""0Y\24""2Z\15""2Z\15""0Y\24""2Z\15""2" - "Z\15""0Y\24.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22*T\16*T\16*T\16*T" - "\16*T\16""0R\16*T\16""0R\16*T\16*T\16*T\16*T\16""0R\16*T\16""0R\16*T" - "\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16""0R\16*T\16*T\16-V\22-V\22" - "-V\22-V\22.W\23.W\23.W\23\240\264\224\240\264\224\240\264\224\240\264" - "\224\240\264\224\240\264\224\240\264\224\247\273\233\313\326\304\373" - "\375\372\376\377\374\376\377\374\263\303\251\242\266\226/^\20""0_\21" - "0_\21\202\320q\202\320q2a\23""3b\24""3b\24\0\0\34:\5\34:\5\31""9\13\32" - "8\2\31""9\13\32""8\2\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\25""5\6\25""5\6\24""4\5\24""4\5\24""4\5\23""3" - "\3\23""3\3\23""3\3\23""3\3\23""3\3\23""3\3\23""3\3\25""0\10\30""1\1\30" - "1\1\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/\7\25" - "/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7" - "\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25" - "/\7\25""0\10\25""0\10\25""0\10\30""1\1\30""1\1\30""1\1\30""1\1\23""3" - "\3\30""1\1\23""3\3\23""3\3\30""1\1\23""3\3\23""3\3\24""4\5\24""4\5:U" - ",\341\344\340\376\377\374\327\336\323&\77\23\27""7\10\27""7\10\27""7" - "\10\202\320q\202\320q\31""9\13\34:\5\34:\5\0\0""3b\24""3b\24""2a\23""2" - "a\23""2a\23""2a\23""0_\21""0_\21""0_\21""0_\21""3[\16/^\20/^\20/^\20" - "-\\\16""2Z\15""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""0Y\24" - "2Z\15""0Y\24.W\23.W\23.W\23-V\22-V\22-V\22-V\22-V\22*T\16*T\16*T\16*" - "T\16*T\16""0R\16*T\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16""0R\16*T\16" - "*T\16*T\16""0R\16*T\16*T\16*T\16*T\16""0R\16*T\16-V\22-V\22-V\22-V\22" - ".W\23.W\23.W\23.W\23""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24" - "0Y\24""2Z\15-\\\16-\\\16m\217[\376\377\374\376\377\374\236\257\2123[" - "\16""0_\21""2a\23\202\320q\202\320q3b\24""3b\24""7e\17\0\0\34:\5\34:" - "\5\31""9\13\32""8\2\31""9\13\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5\6\24""4\5\24""4\5\24""4" - "\5\30""1\1\23""3\3\23""3\3\23""3\3\23""3\3\23""3\3\23""3\3\30""1\1\30" - "1\1\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7" - "\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25" - "/\7\25""0\10\25""0\10\25""0\10\30""1\1\25""0\10\30""1\1\25""0\10\30""1" - "\1\23""3\3\23""3\3\23""3\3\30""1\1\23""3\3\23""3\3\23""3\3\24""4\5\24" - "4\5\25""5\6\25""5\6\27""7\10:U,\376\377\374\376\377\374\324\332\317\27" - "7\10\27""7\10\32""8\2\202\320q\202\320q\34:\5\31""9\13\27=\7\0\0""3b" - "\24""3b\24""2a\23""2a\23""2a\23""0_\21""0_\21""3[\16""0_\21/^\20""3[" - "\16/^\20/^\20""3[\16-\\\16""0Y\24""2Z\15""2Z\15""0Y\24""2Z\15""2Z\15" - "0Y\24""2Z\15""0Y\24.W\23.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22-V\22" - "*T\16*T\16*T\16*T\16*T\16""0R\16*T\16*T\16*T\16*T\16""0R\16*T\16*T\16" - "0R\16*T\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16-V\22-V\22-V\22-" - "V\22-V\22.W\23.W\23.W\23""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""2" - "Z\15""2Z\15""2Z\15""3[\16-\\\16/^\20""3[\16\222\253\204\376\377\374\376" - "\377\374\366\370\3640_\21""2a\23""2a\23\202\320q\202\320q3b\24""5d\26" - "5d\26\0\0\34:\5\31""9\13\32""8\2\31""9\13\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5" - "\6\24""4\5\24""4\5\23""3\3\23""3\3\23""3\3\23""3\3\23""3\3\23""3\3\30" - "1\1\25""0\10\30""1\1\25""0\10\30""1\1\30""1\1\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7" - "\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25" - "/\7\25/\7\25/\7\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10" - "\30""1\1\30""1\1\30""1\1\30""1\1\23""3\3\27""1\12\230\242\221\230\242" - "\221\225\245\214\230\242\221\230\242\221\230\242\221\225\245\214\230" - "\242\221\243\256\234\310\317\304\376\377\374\376\377\374\376\377\374" - "\367\371\366\31""9\13\32""8\2\31""9\13\202\320q\202\320q\27""8\11\27" - "=\7\27=\7\0\0""3b\24""2a\23""2a\23""2a\23""0_\21""3[\16""0_\21""0_\21" - "3[\16""3[\16/^\20/^\20""3[\16-\\\16-\\\16""0Y\24""2Z\15""2Z\15""0Y\24" - "2Z\15""0Y\24""2Z\15""0Y\24""2Z\15.W\23.W\23.W\23.W\23-V\22-V\22-V\22" - "-V\22-V\22*T\16*T\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*" - "T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16-V\22-V\22-V" - "\22-V\22-V\22.W\23.W\23.W\23.W\23""2Z\15""0Y\24""0Y\24""0Y\24\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\336\344\3312a\23""2a\23""3b\24\202\320q\202\320q5d\26""5" - "d\26""7e\17\0\0\32""8\2\31""9\13\32""8\2\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5\6\25""5\6\24""4" - "\5\24""4\5\27""1\12\23""3\3\23""3\3\23""3\3\30""1\1\23""3\3\23""3\3\23" - "3\3\30""1\1\25""0\10\30""1\1\30""1\1\30""1\1\25""0\10\25""0\10\25""0" - "\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25" - "/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7" - "\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\30""1" - "\1\25""0\10\23""3\3\23""3\3\30""1\1\23""3\3\27""1\12\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\207\226~\32""8\2\31""9\13\34:\5\202\320q\202\320q\27=\7\30>\10\30" - ">\10\0\0""2a\23""2a\23""2a\23""0_\21""0_\21""3[\16""0_\21/^\20""3[\16" - "/^\20/^\20-\\\16""3[\16-\\\16""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""0Y" - "\24""0Y\24""2Z\15""0Y\24.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22-V\22" - "-V\22*T\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16*" - "T\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16""0R\16-V\22-V\22-V\22-V\22.W" - "\23.W\23.W\23.W\23""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\311\324\3025d\26""2a\23""3b\24""3b\24\202\320q\202\320q5d\26""7e\17" - "7e\17\0\0\27""8\11\32""8\2\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5\6\25""5\6\24""4\5\24""4" - "\5\23""3\3\30""1\1\23""3\3\23""3\3\23""3\3\23""3\3\23""3\3\27""1\12\30" - "1\1\25""0\10\30""1\1\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25" - "/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\30""1\1\25""0\10\30""1\1\23""3" - "\3\30""1\1\23""3\3\27""1\12\23""3\3\27""1\12\23""3\3\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\373\375\372\355\357\353\302\311\276q\204f\35;\6\32""8\2" - "\27""8\11\34:\5\31""9\13\202\320q\202\320q\30>\10\30>\10\32\77\12\0\0" - "2a\23""2a\23""0_\21""0_\21""3[\16""0_\21""3[\16/^\20""3[\16/^\20-\\\16" - "3[\16-\\\16""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15""0" - "Y\24""0Y\24.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22-V\22-V\22*T\16""0" - "R\16*T\16*T\16*T\16""0R\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16" - "*T\16*T\16*T\16*T\16-V\22-V\22-V\22-V\22-V\22-V\22.W\23.W\23.W\23.W\23" - "0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""3[\16" - "-\\\16/^\20""3[\16/^\20""3[\16/^\20""0_\21""0_\21""0_\21""2a\23""2a\23" - "3b\24""3b\24""5d\26\202\320q\202\320q7e\17""5d\26""9g\21\0\0\31""9\13" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\25""5\6\25""5\6\24""4\5\24""4\5\23""3\3\27""1\12\30""1\1" - "\27""1\12\23""3\3\23""3\3\23""3\3\23""3\3\25""0\10\25""0\10\30""1\1\30" - "1\1\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25/\7\25/\7" - "\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25" - "/\7\25/\7\25/\7\25/\7\25/\7\25""0\10\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\30""1\1\30""1\1\25""0\10\23""3\3\23""3\3\30""1" - "\1\23""3\3\23""3\3\30""1\1\23""3\3\24""4\5\24""4\5\25""5\6\25""5\6\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\31" - "9\13\32""8\2\31""9\13\34:\5\34:\5\27=\7\202\320q\202\320q\30>\10\32\77" - "\12\32\77\12\0\0""2a\23""0_\21""0_\21""0_\21""0_\21/^\20/^\20/^\20""3" - "[\16-\\\16-\\\16-\\\16""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y" - "\24""2Z\15""0Y\24""2Z\15.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22-V\22" - "-V\22*T\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16*T\16""0R\16*T\16" - "*T\16*T\16""0R\16*T\16""0R\16-V\22-V\22-V\22-V\22-V\22-V\22.W\23.W\23" - ".W\23.W\23""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2" - "Z\15""0Y\24-\\\16-\\\16/^\20/^\20""3[\16""3[\16""3[\16""0_\21""0_\21" - "0_\21""2a\23""2a\23""3b\24""3b\24""3b\24""7e\17\202\320q\202\320q7e\17" - "9g\21""9g\21\0\0\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\25""5\6\25""5\6\25""5\6\24""4\5\23""3\3\23" - "3\3\23""3\3\23""3\3\27""1\12\30""1\1\23""3\3\23""3\3\25""0\10\30""1\1" - "\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0" - "\10\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7" - "\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\30""1\1\30""1\1\30""1\1\30""1\1\30""1\1\27""1\12" - "\23""3\3\23""3\3\27""1\12\23""3\3\27""1\12\23""3\3\24""4\5\24""4\5\25" - "5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\32""8\2\31""9\13\34:\5\27""8\11\34:\5\27=\7\27=\7\202\320" - "q\202\320q\32\77\12\32\77\12\32\77\12\0\0""0_\21""0_\21""3[\16""0_\21" - "/^\20/^\20""3[\16/^\20""0Y\24-\\\16-\\\16""0Y\24""2Z\15""0Y\24""2Z\15" - "0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""0Y\24.W\23.W\23.W\23.W\23.W\23-V\22" - "-V\22-V\22-V\22-V\22*T\16*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16*" - "T\16*T\16*T\16*T\16""0R\16*T\16*T\16-V\22-V\22-V\22-V\22-V\22-V\22-V" - "\22.W\23.W\23.W\23.W\23""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0" - "Y\24""2Z\15""0Y\24""2Z\15""3[\16/^\20""3[\16/^\20""3[\16""4c\25\221\252" - "\202\336\344\331\371\373\370\361\363\360\316\327\277p\217V3b\24""3b\24" - "3b\24""5d\26""7e\17\202\320q\202\320q9g\21""5k\24""4j\23\0\0\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5" - "\6\25""5\6\24""4\5\24""4\5\27""1\12\23""3\3\27""1\12\23""3\3\23""3\3" - "\23""3\3\27""1\12\23""3\3\23""3\3\25""0\10\30""1\1\25""0\10\30""1\1\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25/\7\25/\7\25/\7\25" - "/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7" - "\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\30""1" - "\1\30""1\1\30""1\1\25""0\10\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3" - "\27""1\12\23""3\3\30""1\1\33;\15\216\235\205\331\343\336\371\373\370" - "\356\360\355\252\265\2434H\"\31""9\13\270\306\271\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374|\217p\34:\5\27=" - "\7\27=\7\30>\10\202\320q\202\320q\32\77\12\32\77\12\36B\5\0\0""0_\21" - "3[\16""0_\21""3[\16/^\20""3[\16/^\20-\\\16""3[\16""3[\16""2Z\15""0Y\24" - "0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24.W\23.W\23.W\23" - ".W\23.W\23-V\22-V\22-V\22-V\22-V\22-V\22""0R\16*T\16*T\16*T\16*T\16*" - "T\16*T\16*T\16*T\16*T\16""0R\16*T\16""0R\16*T\16-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22.W\23.W\23.W\23.W\23.W\23""0Y\24""0Y\24""0Y\24""2Z\15" - "0Y\24""0Y\24""0Y\24""3[\16\305\320\276\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\341\347\334\221\252\202\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\371\373\370Nw15d\26""7e\17""7e\17\202\320q\202\320q4j\23""9g\21""4j" - "\23\0\0\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10" - "\25""5\6\25""5\6\25""5\6\24""4\5\23""3\3\30""1\1\23""3\3\27""1\12\23" - "3\3\27""1\12\23""3\3\23""3\3\27""1\12\30""1\1\25""0\10\30""1\1\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7" - "\25/\7\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10" - "\30""1\1\30""1\1\25""0\10\30""1\1\30""1\1\27""1\12\23""3\3\23""3\3\27" - "1\12\23""3\3\23""3\3\23""3\3\24""4\5]pS\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\373\375\372\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\212\240\206\27=\7\27=\7\30>\10\202\320q\202" - "\320q\32\77\12\32\77\12\32\77\12\0\0""3[\16/^\20/^\20""3[\16/^\20""3" - "[\16-\\\16-\\\16""0Y\24""2Z\15""2Z\15""2Z\15""0Y\24""0Y\24""0Y\24""0" - "Y\24""0Y\24""0Y\24""0Y\24.W\23.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22*T\16*T\16*T\16*T\16*T\16*T\16""0R\16*T\16*T\16*" - "T\16-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22.W\23.W\23.W\23.W\23.W\23" - "0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""2Z\15""2Z\15""2Z\15\263\303" - "\251\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\311\321\271" - "\247\273\233\321\334\312\376\377\374\376\377\374\376\377\374\316\331" - "\3077e\17""7e\17""7e\17\202\320q\202\320q5k\24""9g\21""5k\24\0\0\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5\6\25""5\6\25""5" - "\6\24""4\5\30""1\1\23""3\3\27""1\12\23""3\3\27""1\12\23""3\3\23""3\3" - "\27""1\12\27""1\12\30""1\1\30""1\1\30""1\1\25""0\10\25""0\10\25""0\10" - "\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25/\7" - "\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\30""1\1\30""1\1\30" - "1\1\25""0\10\30""1\1\23""3\3\23""3\3\27""1\12\23""3\3\23""3\3\27""1\12" - "\23""3\3\23""3\3\24""4\5\24""4\5\341\344\340\376\377\374\376\377\374" - "\371\373\370\252\265\243\252\265\243\370\372\367\376\377\374\376\377" - "\374\376\377\374\216\235\205\31""9\13\32""8\2\31""9\13\252\265\243\376" - "\377\374\376\377\374\352\354\351\30>\10\30>\10\30>\10\202\320q\202\320" - "q\36B\5\32\77\12\36B\5\0\0""0_\21""3[\16/^\20""3[\16""3[\16-\\\16""3" - "[\16""3[\16""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0" - "Y\24""0Y\24""0Y\24.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22*T\16""0R\16*T\16*T\16*T\16*T\16*T\16*T\16-V\22-V\22-" - "V\22-V\22-V\22-V\22-V\22-V\22.W\23.W\23.W\23.W\23.W\23""2Z\15""0Y\24" - "2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15\361\363" - "\360\376\377\374\376\377\374\213\241u3[\16/^\20\203\240s\376\377\374" - "\376\377\374\376\377\374Jt.2a\23""2a\23""3b\24b\207G\376\377\374\376" - "\377\374\371\373\3707e\17""5d\26""7f\30\202\320q\202\320q5k\24""9g\21" - "5k\24\0\0\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\25""5\6\25""5" - "\6\24""4\5\24""4\5\24""4\5\27""1\12\23""3\3\23""3\3\23""3\3\30""1\1\23" - "3\3\27""1\12\23""3\3\25""0\10\25""0\10\30""1\1\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25/\7\25/\7\25/\7\25/\7\25/\7\25/\7\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\30""1\1\25" - "0\10\30""1\1\25""0\10\23""3\3\30""1\1\23""3\3\30""1\1\23""3\3\30""1\1" - "\23""3\3\23""3\3\23""3\3\24""4\5\24""4\5\25""5\6\373\375\372\376\377" - "\374\376\377\374:U,\27""7\10\27""7\10:U,\376\377\374\376\377\374\376" - "\377\374\35;\6\31""9\13\34:\5\34:\5""8S*\376\377\374\376\377\374\376" - "\377\374\30>\10\30>\10\32\77\12\202\320q\202\320q\32\77\12\32\77\12\36" - "B\5\0\0/^\20/^\20/^\20""3[\16-\\\16""0Y\24-\\\16""0Y\24""2Z\15""0Y\24" - "0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24.W\23.W\23.W\23" - ".W\23.W\23-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22""0R\16*T\16*" - "T\16*T\16*T\16-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22.W\23.W\23" - ".W\23.W\23.W\23.W\23""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24" - "2Z\15""0Y\24""2Z\15""0Y\24-\\\16\376\377\374\376\377\374\376\377\374" - "Mq23[\16""0_\21Jt.\376\377\374\376\377\374\376\377\3742a\23""2a\23""3" - "b\24""3b\24Nw1\376\377\374\376\377\374\376\377\3747e\17""7f\30""9g\21" - "\202\320q\202\320q5k\24""9g\21""5k\24\0\0\27""7\10\27""7\10\27""7\10" - "\27""7\10\25""5\6\25""5\6\24""4\5\24""4\5\30""1\1\27""1\12\23""3\3\27" - "1\12\23""3\3\27""1\12\23""3\3\23""3\3\27""1\12\30""1\1\25""0\10\25""0" - "\10\30""1\1\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\30""1\1\25""0\10\25""0\10\30""1\1\30""1\1\23""3" - "\3\23""3\3\23""3\3\23""3\3\27""1\12\23""3\3\30""1\1\23""3\3\23""3\3\24" - "4\5\25""5\6\25""5\6\25""5\6\376\377\374\376\377\374\376\377\3744O'\27" - "7\10\27""7\10""5P(\376\377\374\376\377\374\376\377\374\32""8\2\34:\5" - "\34:\5\34:\5""5U%\376\377\374\376\377\374\376\377\374\30>\10\32\77\12" - "\32\77\12\202\320q\202\320q\36B\5\32\77\12\36B\5\0\0""3[\16/^\20/^\20" - "0Y\24-\\\16-\\\16""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0" - "Y\24""0Y\24""0Y\24.W\23.W\23.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22-V\22.W\23.W\23.W\23.W\23.W\23.W\23""2Z\15""0Y\24" - "2Z\15""2Z\15""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""2Z\15""3[\16-\\\16""3" - "[\16\376\377\374\376\377\374\376\377\374\261\276\237\242\266\226\242" - "\266\226\261\276\237\376\377\374\376\377\374\376\377\374\244\270\230" - "\247\271\223\244\270\230\247\271\223\255\302\241\376\377\374\376\377" - "\374\376\377\3745d\26""7f\30""5k\24\202\320q\202\320q4j\23""4j\23""5" - "k\24\0\0\27""7\10\27""7\10\25""5\6\25""5\6\25""5\6\24""4\5\24""4\5\23" - "3\3\23""3\3\23""3\3\23""3\3\30""1\1\23""3\3\27""1\12\23""3\3\27""1\12" - "\30""1\1\25""0\10\30""1\1\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10" - "\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\30""1\1\25""0\10\30" - "1\1\25""0\10\30""1\1\27""1\12\23""3\3\23""3\3\23""3\3\23""3\3\23""3\3" - "\23""3\3\23""3\3\23""3\3\24""4\5\25""5\6\25""5\6\25""5\6\27""7\10\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\32\77\12\32\77\12\32\77\12\202\320q\202\320q\36B\5\32\77\12" - "\36B\5\0\0""0Y\24/^\20""3[\16-\\\16""3[\16""2Z\15""2Z\15""2Z\15""2Z\15" - "0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24.W\23.W\23.W\23.W\23." - "W\23-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22.W\23.W\23.W\23.W\23" - ".W\23""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15" - "2Z\15""0Y\24-\\\16""3[\16-\\\16/^\20\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\3747f\30""5k\24""9g\21\202" - "\320q\202\320q5k\24""4j\23""9g\21\0\0\27""7\10\25""5\6\25""5\6\25""5" - "\6\24""4\5\24""4\5\30""1\1\23""3\3\23""3\3\23""3\3\30""1\1\23""3\3\30" - "1\1\23""3\3\27""1\12\23""3\3\30""1\1\25""0\10\25""0\10\30""1\1\30""1" - "\1\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\30""1\1\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\30""1\1\30" - "1\1\25""0\10\30""1\1\30""1\1\23""3\3\23""3\3\23""3\3\23""3\3\23""3\3" - "\23""3\3\23""3\3\23""3\3\30""1\1\24""4\5\24""4\5\24""4\5\25""5\6\25""5" - "\6\27""7\10\27""7\10\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\32\77\12\36B\5\32\77\12\202\320q\202" - "\320q\36B\5\32\77\12\32\77\12\0\0-\\\16-\\\16""3[\16""2Z\15""0Y\24""2" - "Z\15""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24." - "W\23.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22.W\23" - ".W\23.W\23.W\23.W\23.W\23""2Z\15""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""2" - "Z\15""0Y\24""2Z\15""2Z\15""2Z\15""0Y\24-\\\16""3[\16/^\20""3[\16\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\3747f\30""4j\23""9g\21\202\320q\202\320q9g\21""9g\21""9g\21\0\0" - "\25""5\6\25""5\6\24""4\5\24""4\5\24""4\5\27""1\12\23""3\3\27""1\12\30" - "1\1\23""3\3\23""3\3\27""1\12\23""3\3\23""3\3\25""0\10\30""1\1\25""0\10" - "\30""1\1\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10" - "\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\30""1\1\30""1\1\25""0\10\30""1\1\30""1\1\30""1\1\30""1\1\23""3\3" - "\23""3\3\27""1\12\23""3\3\23""3\3\27""1\12\23""3\3\23""3\3\24""4\5\24" - "4\5\25""5\6\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\32""8\2\32""8\2\31""9\13\34:" - "\5\34:\5\27""8\11\27=\7\27=\7\27=\7\30>\10\30>\10\32\77\12\32\77\12\32" - "\77\12\32\77\12\202\320q\202\320q\32\77\12\32\77\12\32\77\12\0\0-\\\16" - "2Z\15""0Y\24""2Z\15""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24" - "0Y\24""0Y\24.W\23.W\23.W\23.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22-" - "V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22.W\23""2Z\15.W\23.W\23.W\23""2Z\15""0Y\24""2Z\15""0Y\24" - "0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15-\\\16""0Y\24-\\\16""3" - "[\16/^\20/^\20""3[\16/^\20""3[\16""0_\21""3[\16""0_\21""2a\23""2a\23" - "2a\23""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""7e\17""7e\17""5d\26" - "9g\21""4j\23""5k\24""9g\21\202\320q\202\320q4j\23""9g\21""5k\24\0\0\25" - "5\6\24""4\5\24""4\5\24""4\5\23""3\3\23""3\3\27""1\12\30""1\1\23""3\3" - "\23""3\3\27""1\12\23""3\3\23""3\3\25""0\10\30""1\1\30""1\1\30""1\1\30" - "1\1\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\30" - "1\1\30""1\1\30""1\1\30""1\1\30""1\1\30""1\1\23""3\3\23""3\3\23""3\3\27" - "1\12\30""1\1\23""3\3\23""3\3\27""1\12\24""4\5\24""4\5\25""5\6\25""5\6" - "\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\31""9\13\31""9\13\32""8\2\27""8\11\34:\5\31""9" - "\13\27=\7\27=\7\27=\7\30>\10\30>\10\32\77\12\32\77\12\32\77\12\36B\5" - "\32\77\12\202\320q\202\320q\32\77\12\32\77\12\36B\5\0\0-\\\16""0Y\24" - "2Z\15""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24" - "2Z\15.W\23""2Z\15.W\23.W\23.W\23-V\22-V\22-V\22-V\22-V\22-V\22-V\22-" - "V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22" - ".W\23.W\23.W\23.W\23.W\23.W\23""0Y\24""0Y\24""2Z\15""2Z\15""0Y\24""0" - "Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24-\\\16""3[\16/^\20""3[" - "\16/^\20""3[\16""3[\16""0_\21""3[\16""0_\21""0_\21""2a\23""2a\23""2a" - "\23""2a\23""3b\24""3b\24""3b\24""5d\26""5d\26""7e\17""7e\17""7e\17""7" - "f\30""9g\21""9g\21""5k\24""9g\21\202\320q\202\320q4j\23""9g\21""5k\24" - "\0\0\25""5\6\24""4\5\24""4\5\23""3\3\30""1\1\23""3\3\23""3\3\23""3\3" - "\23""3\3\23""3\3\27""1\12\23""3\3\23""3\3\25""0\10\30""1\1\30""1\1\25" - "0\10\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10\30""1\1\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\30""1\1\30""1\1\25" - "0\10\25""0\10\30""1\1\25""0\10\25""0\10\23""3\3\30""1\1\23""3\3\23""3" - "\3\23""3\3\23""3\3\30""1\1\23""3\3\23""3\3\24""4\5\24""4\5\24""4\5\25" - "5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\32""8\2\27""8\11q\204f\304\313\300\356\360\355" - "\373\375\372\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\32\77\12\32\77\12\36B\5\202" - "\320q\202\320q\36B\5\32\77\12\32\77\12\0\0""0Y\24""2Z\15""0Y\24""0Y\24" - "0Y\24""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15.W\23.W\23.W\23" - ".W\23.W\23-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22.W\23.W\23.W\23.W\23.W\23" - ".W\23""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24" - "0Y\24""2Z\15""2Z\15""3[\16-\\\16/^\20""3[\16/^\20""0Y\24""3[\16""0_\21" - "3[\16""0_\21""0_\21""2a\23""5d\26\311\321\271\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\3749g\21""5k\24""4j" - "\23\202\320q\202\320q4j\23""9g\21""4j\23\0\0\24""4\5\27""1\12\23""3\3" - "\23""3\3\27""1\12\23""3\3\30""1\1\23""3\3\23""3\3\30""1\1\23""3\3\30" - "1\1\25""0\10\30""1\1\25""0\10\30""1\1\30""1\1\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\30""1\1\30""1\1\25""0\10\30""1\1\30""1\1\27""1" - "\12\23""3\3\23""3\3\23""3\3\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3" - "\27""1\12\24""4\5\24""4\5\25""5\6\25""5\6\25""5\6\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\32""8\2\210" - "\227\177\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\32\77\12\32\77\12\36B\5\202\320q\202\320" - "q\32\77\12\32\77\12\36B\5\0\0""2Z\15""0Y\24""2Z\15""2Z\15""0Y\24""0Y" - "\24""0Y\24""2Z\15""0Y\24""0Y\24.W\23.W\23.W\23.W\23.W\23.W\23.W\23-V" - "\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22-V\22.W\23.W\23.W\23.W\23.W\23.W\23.W\23""0Y\24""0" - "Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""2Z\15""3" - "[\16-\\\16-\\\16/^\20/^\20/^\20/^\20""3[\16""0_\21""3[\16""0_\21""3[" - "\16""2a\23""2a\23\336\344\331\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\3744j\23""9g\21""4j\23\202" - "\320q\202\320q9g\21""4j\23""4j\23\0\0\23""3\3\30""1\1\23""3\3\23""3\3" - "\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3\23""3\3\25""0\10\30""1\1\25" - "0\10\30""1\1\30""1\1\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\30""1\1\30" - "1\1\30""1\1\25""0\10\30""1\1\25""0\10\30""1\1\27""1\12\23""3\3\30""1" - "\1\23""3\3\30""1\1\23""3\3\27""1\12\23""3\3\27""1\12\23""3\3\24""4\5" - "\24""4\5\24""4\5\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\31""9\13\32""8\2\367\371" - "\366\376\377\374\376\377\374\376\377\374\306\315\302\236\261\235\236" - "\261\235\230\247\216\231\250\217\231\250\217\231\250\217\231\250\217" - "\232\251\220\231\250\217\32\77\12\32\77\12\32\77\12\202\320q\202\320" - "q\32\77\12\32\77\12\32\77\12\0\0""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""0" - "Y\24""0Y\24""0Y\24""2Z\15""0Y\24.W\23.W\23""2Z\15.W\23.W\23.W\23-V\22" - "-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22.W\23.W\23.W\23.W\23.W\23.W\23""0Y\24""2Z\15""0Y" - "\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""2" - "Z\15""0Y\24-\\\16/^\20""3[\16/^\20/^\20/^\20""3[\16""0_\21""0_\21""0" - "_\21""0_\21""2a\23""2a\23\366\370\364\376\377\374\376\377\374\222\253" - "\2045d\26""5d\26""5d\26""5d\26""7e\17""5d\26""9g\21""7f\30""4j\23""9" - "g\21""5k\24""9g\21""4j\23\202\320q\202\320q9g\21""4j\23""9g\21\0\0\27" - "1\12\23""3\3\30""1\1\23""3\3\23""3\3\27""1\12\27""1\12\23""3\3\23""3" - "\3\25""0\10\30""1\1\30""1\1\30""1\1\30""1\1\30""1\1\25""0\10\25""0\10" - "\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\30""1\1\25""0\10\25""0\10\30""1\1\30""1\1\30""1\1\25""0" - "\10\23""3\3\23""3\3\23""3\3\27""1\12\23""3\3\27""1\12\27""1\12\23""3" - "\3\30""1\1\30""1\1\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\32" - "8\2\32""8\2\31""9\13\321\327\314\376\377\374\376\377\374\10\30>\10\32\77\12\32\77\12\32\77\12\36B\5\32\77" - "\12\32\77\12\32\77\12\202\320q\202\320q\32\77\12\32\77\12\32\77\12\0" - "\0""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24.W\23.W\23" - ".W\23.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22.W\23.W\23.W\23.W\23" - ".W\23.W\23.W\23""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y" - "\24""0Y\24""2Z\15""0Y\24-\\\16-\\\16""0Y\24/^\20""3[\16/^\20""3[\16/" - "^\20""0_\21""3[\16""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23\227\260" - "\210\376\377\374\376\377\374r\224`5d\26""5d\26""5d\26""5d\26""7e\17""5" - "d\26""9g\21""9g\21""4j\23""4j\23""9g\21""5k\24""9g\21\202\320q\202\320" - "q5k\24""9g\21""5k\24\0\0\27""1\12\23""3\3\23""3\3\27""1\12\23""3\3\27" - "1\12\23""3\3\30""1\1\30""1\1\30""1\1\30""1\1\25""0\10\30""1\1\30""1\1" - "\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\30""1\1\30""1\1\25""0\10\30""1\1\25""0" - "\10\30""1\1\25""0\10\23""3\3\30""1\1\23""3\3\27""1\12\23""3\3\23""3\3" - "\27""1\12\23""3\3\23""3\3\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25" - "5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\32""8\2\32""8\2\31""9\13\31""9\13\"B\24\327\336\323\376" - "\377\374\345\347\344@[2\27=\7\27=\7\30>\10\30>\10\32\77\12\32\77\12\32" - "\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\202\320q\202\320" - "q\32\77\12\36B\5\32\77\12\0\0""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y" - "\24""0Y\24.W\23.W\23.W\23.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22" - ".W\23.W\23.W\23.W\23.W\23.W\23""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0" - "Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""2Z\15""0Y\24-\\\16/^" - "\20""3[\16/^\20/^\20""3[\16""0_\21""0_\21""0_\21""0_\21""0_\21""2a\23" - "2a\23""2a\23""3b\24\244\270\230\266\304\244\376\377\374\376\377\374\373" - "\375\372\316\331\307\254\300\237\244\270\230\242\273\223\247\271\223" - "\247\271\223\243\274\224\247\271\223\243\274\2244j\23""9g\21""9g\21\202" - "\320q\202\320q9g\21""4j\23""4j\23\0\0\23""3\3\30""1\1\27""1\12\23""3" - "\3\23""3\3\27""1\12\30""1\1\30""1\1\30""1\1\25""0\10\25""0\10\30""1\1" - "\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\30""1\1\30""1\1\30""1\1\30""1" - "\1\30""1\1\30""1\1\27""1\12\23""3\3\23""3\3\23""3\3\27""1\12\23""3\3" - "\23""3\3\23""3\3\23""3\3\23""3\3\27""1\12\24""4\5\24""4\5\24""4\5\25" - "5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\31""9\13\32""8\2\31""9\13\34:\5\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\36B\5\32\77\12\32\77\12\202\320q\202\320q\32" - "\77\12\32\77\12\36B\5\0\0""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24." - "W\23.W\23.W\23.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22.W\23.W\23.W\23" - ".W\23.W\23.W\23""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""2Z" - "\15""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""3[\16/^\20/^\20" - "/^\20""3[\16/^\20""0_\21""3[\16""0_\21""0_\21""3[\16""2a\23""2a\23""2" - "a\23""2a\23""3b\24\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\3744j\23""5k\24""9g\21\202" - "\320q\202\320q5k\24""9g\21""4j\23\0\0\27""1\12\23""3\3\30""1\1\23""3" - "\3\27""1\12\30""1\1\30""1\1\30""1\1\25""0\10\30""1\1\30""1\1\25""0\10" - "\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\30""1\1\30""1\1\25""0\10\30""1\1\30""1" - "\1\30""1\1\27""1\12\23""3\3\23""3\3\27""1\12\23""3\3\27""1\12\23""3\3" - "\23""3\3\30""1\1\23""3\3\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25""5" - "\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\32""8\2\31""9\13\32""8\2\31""9\13\34:\5\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\32\77\12\36B\5\32\77\12\202\320q\202\320q\32" - "\77\12\32\77\12\32\77\12\0\0""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24.W\23" - ".W\23.W\23.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22.W\23.W\23.W\23.W\23" - ".W\23.W\23.W\23""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""2Z" - "\15""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""3[\16-\\\16/^\20/^\20""3[\16" - "/^\20/^\20""3[\16""0_\21""0_\21""3[\16""0_\21""2a\23""2a\23""2a\23""2" - "a\23""3b\24""3b\24\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\3744j\23""5k\24""9g\21\202" - "\320q\202\320q4j\23""9g\21""5k\24\0\0\23""3\3\23""3\3\23""3\3\27""1\12" - "\25""0\10\30""1\1\25""0\10\30""1\1\25""0\10\30""1\1\25""0\10\25""0\10" - "\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\30""1\1\30""1\1\30""1\1\25""0\10\30""1\1\30""1\1\25""0" - "\10\23""3\3\23""3\3\30""1\1\23""3\3\30""1\1\23""3\3\23""3\3\23""3\3\27" - "1\12\23""3\3\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25""5\6\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\31""9\13\32""8\2\32""8\2\34:\5\34:\5\31""9\13\34:\5\27=" - "\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\32\77\12" - "\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\202\320q\202\320" - "q\36B\5\32\77\12\32\77\12\0\0""0Y\24""2Z\15""0Y\24.W\23.W\23.W\23.W\23" - ".W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22-V\22-V\22-V\22.W\23.W\23.W\23.W\23.W\23.W\23.W\23" - "0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24" - "2Z\15""2Z\15""0Y\24""0Y\24""3[\16-\\\16/^\20/^\20/^\20""3[\16/^\20/^" - "\20""0_\21""0_\21""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""3b\24""3" - "b\24""3b\24""3b\24""7e\17""5d\26""5d\26""5d\26""7e\17""5d\26""9g\21""9" - "g\21""4j\23""9g\21""9g\21""5k\24""5k\24""9g\21""4j\23""9g\21\202\320" - "q\202\320q4j\23""5k\24""4j\23\0\0\23""3\3\30""1\1\30""1\1\25""0\10\30" - "1\1\25""0\10\30""1\1\25""0\10\25""0\10\30""1\1\30""1\1\25""0\10\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\30""1\1\25" - "0\10\30""1\1\30""1\1\30""1\1\30""1\1\30""1\1\25""0\10\23""3\3\27""1\12" - "\23""3\3\27""1\12\23""3\3\30""1\1\23""3\3\30""1\1\27""1\12\23""3\3\23" - "3\3\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\31""9" - "\13\32""8\2\32""8\2\31""9\13\31""9\13\34:\5\34:\5\27""8\11\27=\7\27=" - "\7\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\36B\5\32\77\12\32\77" - "\12\32\77\12\36B\5\32\77\12\36B\5\32\77\12\202\320q\202\320q\32\77\12" - "\32\77\12\36B\5\0\0""2Z\15""0Y\24.W\23.W\23.W\23.W\23.W\23.W\23.W\23" - ".W\23-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22.W\23.W\23.W\23.W\23.W\23.W\23.W\23""0Y\24""0Y\24" - "0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""2Z\15" - "2Z\15""0Y\24-\\\16""0Y\24/^\20/^\20""3[\16/^\20""3[\16/^\20/^\20""0_" - "\21""0_\21""0_\21""3[\16""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3" - "b\24""5d\26""5d\26""7e\17""5d\26W\201:\210\245w\231\262\213\247\271\223" - "Cr$5k\24""4j\23""4j\23""9g\21""5k\24""5k\24""4j\23""4j\23\202\320q\202" - "\320q9g\21""4j\23""5k\24\0\0\23""3\3\23""3\3\30""1\1\25""0\10\30""1\1" - "\30""1\1\30""1\1\25""0\10\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10" - "\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\30""1\1\25" - "0\10\30""1\1\30""1\1\30""1\1\25""0\10\30""1\1\27""1\12\23""3\3\23""3" - "\3\30""1\1\23""3\3\23""3\3\23""3\3\23""3\3\23""3\3\30""1\1\24""4\5\24" - "4\5\24""4\5\25""5\6\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\32""8\2\31" - "9\13\32""8\2\31""9\13\34:\5\27""8\11\34:\5\34:\5\27=\7\27=\7C^5\313\321" - "\306\376\377\374\376\377\374\376\377\374\376\377\3747W(r\212e\376\377" - "\374\376\377\374\341\347\334\33A\14\32\77\12\36B\5\32\77\12\202\320q" - "\202\320q\32\77\12\32\77\12\36B\5\0\0""0Y\24.W\23.W\23.W\23.W\23.W\23" - ".W\23.W\23.W\23-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22-V\22-V\22.W\23.W\23.W\23.W\23.W\23.W\23.W\23""2" - "Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""2Z\15""0Y\24""0Y\24""0" - "Y\24""0Y\24""0Y\24-\\\16""3[\16-\\\16""3[\16/^\20""3[\16/^\20""3[\16" - "/^\20""0_\21""0_\21""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""3b\24" - "3b\24""3b\24""3b\24""3b\24""5d\26c\210H\366\370\364\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374Nw1Cr$\364\367\363\376\377\374" - "\376\377\374h\214L4j\23""5k\24""9g\21\202\320q\202\320q9g\21""4j\23""9" - "g\21\0\0\30""1\1\30""1\1\25""0\10\30""1\1\25""0\10\30""1\1\30""1\1\25" - "0\10\30""1\1\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\30""1\1\25""0\10\30""1\1\25""0\10\30""1\1\25""0\10\30""1" - "\1\25""0\10\23""3\3\23""3\3\27""1\12\30""1\1\27""1\12\23""3\3\23""3\3" - "\23""3\3\23""3\3\27""1\12\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25" - "5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\31""9\13\32""8\2\31""9\13\32""8\2\27""8\11\34" - ":\5\27""8\11\34:\5\34:\5'E\20\350\352\347\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\3747W(\32\77\12\262\275\253" - "\376\377\374\376\377\374\217\245\213\36B\5\32\77\12\32\77\12\202\320" - "q\202\320q\32\77\12\36B\5\32\77\12\0\0.W\23.W\23.W\23.W\23.W\23.W\23" - ".W\23.W\23-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23""0Y\24""2" - "Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""2Z\15""0Y\24""0Y\24""2" - "Z\15""0Y\24""0Y\24-\\\16-\\\16-\\\16""3[\16/^\20""3[\16/^\20/^\20/^\20" - "0_\21""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24" - "3b\24""3b\24""5d\26\221\247{\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374N}/9g\21\210\243p\376\377" - "\374\376\377\374\316\327\2779g\21""4j\23""9g\21\202\320q\202\320q5k\24" - "5k\24""4j\23\0\0\30""1\1\25""0\10\30""1\1\30""1\1\30""1\1\25""0\10\30" - "1\1\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\30""1\1\30""1\1\30""1\1\25""0\10\25""0\10\30""1\1\25""0" - "\10\25""0\10\23""3\3\23""3\3\23""3\3\27""1\12\23""3\3\27""1\12\30""1" - "\1\23""3\3\23""3\3\23""3\3\23""3\3\24""4\5\24""4\5\24""4\5\25""5\6\25" - "5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\31""9\13\32""8\2\31""9\13\32""8\2\32""8\2\34:" - "\5\27""8\11\34:\5\34:\5\27=\7\310\317\304\376\377\374\376\377\374\324" - "\332\3173S$\376\377\374\376\377\374\376\377\3747W(\36B\5Ok@\376\377\374" - "\376\377\374\347\351\346\36B\5\32\77\12\32\77\12\202\320q\202\320q\32" - "\77\12\36B\5\32\77\12\0\0.W\23.W\23.W\23.W\23.W\23.W\23.W\23-V\22-V\22" - "-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22.W\23" - ".W\23.W\23.W\23.W\23.W\23.W\23""2Z\15.W\23""0Y\24""0Y\24""2Z\15""0Y\24" - "0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""2Z\15" - "3[\16-\\\16-\\\16""3[\16/^\20""3[\16/^\20/^\20/^\20""0_\21""0_\21""0" - "_\21""0_\21""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""5" - "d\26""5d\26\360\362\357\376\377\374\376\377\374s\222Y7e\17\376\377\374" - "\376\377\374\376\377\374V\17794j\23V\1779\376\377\374\376\377\374\370" - "\372\3675k\24""9g\21""5k\24\202\320q\202\320q9g\21""5k\24""9g\21\0\0" - "\30""1\1\30""1\1\25""0\10\30""1\1\30""1\1\30""1\1\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\30""1\1\25""0\10\25" - "0\10\30""1\1\30""1\1\30""1\1\25""0\10\30""1\1\23""3\3\23""3\3\23""3\3" - "\23""3\3\30""1\1\23""3\3\23""3\3\30""1\1\23""3\3\23""3\3\30""1\1\24""4" - "\5\24""4\5\24""4\5\25""5\6\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\31""9\13\32""8\2\32""8\2\31""9\13\34:\5\27""8\11\34:\5\34:\5\27=" - "\7\27=\7\372\374\371\376\377\374\376\377\3749Y)\32\77\12\376\377\374" - "\376\377\374\376\377\3747W(\32\77\12\77_/\376\377\374\376\377\374\371" - "\373\370\32\77\12\32\77\12\36B\5\202\320q\202\320q\32\77\12\32\77\12" - "\32\77\12\0\0.W\23.W\23.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22.W\23.W\23.W\23.W\23" - ".W\23.W\23.W\23.W\23""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15" - "0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""2Z\15""2Z\15""0Y\24-\\\16-\\\16""3" - "[\16/^\20/^\20/^\20""3[\16""3[\16""0_\21""0_\21""0_\21""0_\21""3[\16" - "2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""7e\17""5d\26" - "5d\26\361\363\360\376\377\374\376\377\374d\211I9g\21\376\377\374\376" - "\377\374\376\377\374N}/4j\23|\234b\376\377\374\376\377\374\355\357\353" - "5k\24""9g\21""4j\23\202\320q\202\320q5k\24""9g\21""5k\24\0\0\30""1\1" - "\25""0\10\30""1\1\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10" - "\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\30""1\1\30""1\1\25""0\10\30""1" - "\1\30""1\1\25""0\10\30""1\1\25""0\10\27""1\12\23""3\3\27""1\12\23""3" - "\3\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3\30""1\1\23""3\3\30""1\1\24" - "4\5\24""4\5\25""5\6\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\31" - "9\13\32""8\2\27""8\11\32""8\2\34:\5\31""9\13\27""8\11\34:\5\27=\7\27" - "=\7\27=\7\321\327\314\376\377\374\376\377\374\236\261\235\32\77\12\376" - "\377\374\376\377\374\376\377\3747V\40\40E\20\324\332\317\376\377\374" - "\376\377\374\313\321\306\36B\5\32\77\12\32\77\12\202\320q\202\320q\32" - "\77\12\32\77\12\32\77\12\0\0.W\23.W\23.W\23.W\23.W\23-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22.W\23.W\23.W\23" - ".W\23.W\23.W\23.W\23.W\23.W\23.W\23""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24" - "0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15""3[\16" - "0Y\24-\\\16/^\20/^\20""3[\16/^\20""3[\16/^\20""0_\21""0_\21""0_\21""0" - "_\21""2a\23""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""7" - "e\17""5d\26""5d\26\240\271\221\376\377\374\376\377\374\376\377\374\261" - "\306\245\376\377\374\376\377\374\376\377\374\240\271\221\341\347\334" - "\376\377\374\376\377\374\376\377\374\233\264\2155k\24""4j\23""9g\21\202" - "\320q\202\320q4j\23""9g\21""4j\23\0\0\30""1\1\30""1\1\30""1\1\25""0\10" - "\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10\25" - "0\10\30""1\1\25""0\10\30""1\1\25""0\10\30""1\1\25""0\10\30""1\1\25""0" - "\10\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3\23""3\3\27""1\12\23""3\3" - "\27""1\12\23""3\3\23""3\3\27""1\12\24""4\5\24""4\5\24""4\5\25""5\6\25" - "5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\31""9\13\32""8\2\31""9\13\31""9\13\31" - "9\13\34:\5\34:\5\27""8\11\27=\7\27=\7\27=\7\27=\7""9Y)\373\375\372\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\372\374\3717V\40\32" - "\77\12\32\77\12\32\77\12\202\320q\202\320q\32\77\12\32\77\12\32\77\12" - "\0\0.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22-V\22.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23" - "0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""0Y\24" - "0Y\24""2Z\15""2Z\15""0Y\24""3[\16-\\\16-\\\16""3[\16/^\20""0Y\24""3[" - "\16/^\20/^\20""0_\21""0_\21""0_\21""3[\16""0_\21""0_\21""2a\23""2a\23" - "2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""7e\17""5d\26""7e\17""5d\26" - "5d\26\231\262\213\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\232\261\2049g\21""9g\21""4j\23""9g\21\202\320q\202\320q5k\24""9g\21" - "9g\21\0\0\30""1\1\30""1\1\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10" - "\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\30""1\1\30""1\1\25""0" - "\10\30""1\1\30""1\1\25""0\10\23""3\3\27""1\12\23""3\3\30""1\1\23""3\3" - "\30""1\1\23""3\3\30""1\1\23""3\3\30""1\1\23""3\3\23""3\3\24""4\5\30""1" - "\1\24""4\5\25""5\6\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\32""8" - "\2\32""8\2\31""9\13\32""8\2\27""8\11\34:\5\27""8\11\34:\5\27=\7\27=\7" - "\27=\7\27=\7\27=\7\30>\10\32\77\12\234\253\222\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\234\253\222\36B\5\32\77\12\32\77\12\36B\5\32\77\12\202\320q\202" - "\320q\36B\5\32\77\12\32\77\12\0\0.W\23.W\23.W\23.W\23-V\22-V\22-V\22" - "-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22.W\23.W\23.W\23.W\23" - ".W\23.W\23.W\23.W\23.W\23""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""2" - "Z\15""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""2Z\15-\\\16""0Y\24-\\" - "\16""3[\16""3[\16/^\20/^\20""3[\16/^\20""0_\21""0_\21""0_\21""0_\21""0" - "_\21""0_\21""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""5" - "d\26""7e\17""5d\26""5d\26""5d\26""5d\26""7e\17""9g\21c\210H\264\310\247" - "\345\354\341\372\374\371\372\374\371\345\354\341\266\304\244`\214J5k" - "\24""4j\23""4j\23""5k\24""9g\21""4j\23\202\320q\202\320q4j\23""5k\24" - "9g\21\0\0\30""1\1\30""1\1\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10" - "\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\30""1\1\30""1\1\30""1\1\25""0\10\30""1\1\25""0\10\30""1" - "\1\30""1\1\25""0\10\23""3\3\23""3\3\30""1\1\23""3\3\27""1\12\23""3\3" - "\27""1\12\23""3\3\23""3\3\27""1\12\23""3\3\23""3\3\24""4\5\24""4\5\25" - "5\6\25""5\6\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\32""8\2\32" - "8\2\31""9\13\32""8\2\31""9\13\34:\5\31""9\13\34:\5\27""8\11\27=\7\27" - "=\7\35;\6\27=\7\30>\10\30>\10\30>\10\32\77\12\32\77\12\32\77\12\32\77" - "\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12Nj\77" - "\32\77\12\36B\5\32\77\12\202\320q\202\320q\32\77\12\36B\5\32\77\12\0" - "\0.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-V\22-" - "V\22-V\22.W\23.W\23.W\23.W\23.W\23.W\23.W\23""2Z\15.W\23""0Y\24""0Y\24" - "2Z\15""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24" - "2Z\15""2Z\15""2Z\15-\\\16""3[\16-\\\16/^\20""3[\16/^\20""3[\16/^\20/" - "^\20/^\20""0_\21""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23""2" - "a\23""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26p\217V5d\26""5d\26""7e" - "\17""5d\26""7e\17""9g\21""9g\21""9g\21""5k\24""9g\21""5k\24""9g\21""4" - "j\23""9g\21""4j\23c\210H\363\365\3629g\21""4j\23""4j\23\202\320q\202" - "\320q9g\21""5k\24""9g\21\0\0\30""1\1\25""0\10\30""1\1\25""0\10\25""0" - "\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\25" - "0\10\25""0\10\30""1\1\30""1\1\25""0\10\30""1\1\25""0\10\30""1\1\30""1" - "\1\30""1\1\25""0\10\30""1\1\27""1\12\23""3\3\27""1\12\23""3\3\30""1\1" - "\23""3\3\23""3\3\23""3\3\30""1\1\23""3\3\23""3\3\30""1\1\24""4\5\24""4" - "\5\25""5\6\25""5\6\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\32""8" - "\2\31""9\13\31""9\13\32""8\2\31""9\13\27""8\11\34:\5\34:\5\34:\5\27=" - "\7\27=\7\367\371\366QpJ\30>\10\30>\10\30>\10\32\77\12\32\77\12\32\77" - "\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12Ef" - "5\360\362\357\376\377\374\32\77\12\32\77\12\36B\5\202\320q\202\320q\32" - "\77\12\32\77\12\32\77\12\0\0.W\23.W\23.W\23""2Z\15-V\22-V\22-V\22-V\22" - "-V\22-V\22-V\22.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23" - ".W\23""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15" - "0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15-\\\16""3[\16""0Y\24/^\20""3" - "[\16/^\20""0Y\24""3[\16/^\20""0_\21""0_\21""0_\21""0_\21""0_\21""0_\21" - "2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""5d\26""7e\17" - "5d\26\376\377\374\367\371\366d\211I7e\17""5d\26""7f\30""9g\21""9g\21" - "5k\24""9g\21""5k\24""9g\21""5k\24""9g\21[\205>\363\362\351\376\377\374" - "\376\377\3749g\21""5k\24""4j\23\202\320q\202\320q4j\23""5k\24""4j\23" - "\0\0\30""1\1\25""0\10\30""1\1\30""1\1\25""0\10\25""0\10\25""0\10\25""0" - "\10\25""0\10\25""0\10\30""1\1\30""1\1\30""1\1\30""1\1\25""0\10\30""1" - "\1\25""0\10\30""1\1\30""1\1\30""1\1\30""1\1\25""0\10\30""1\1\30""1\1" - "\23""3\3\27""1\12\23""3\3\30""1\1\23""3\3\23""3\3\27""1\12\23""3\3\27" - "1\12\23""3\3\24""4\5\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25""5\6" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\31""9\13\32""8\2\31""9\13\32""8\2\34:" - "\5\27""8\11\34:\5\34:\5\34:\5\27=\7\27=\7\27=\7\376\377\374\376\377\374" - "\363\365\362Lh=\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12" - "\32\77\12\32\77\12\32\77\12\77_/\355\357\353\376\377\374\376\377\374" - "\376\377\374\32\77\12\36B\5\32\77\12\202\320q\202\320q\36B\5\32\77\12" - "\36B\5\0\0.W\23.W\23.W\23.W\23.W\23-V\22-V\22-V\22-V\22.W\23.W\23.W\23" - ".W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23""0Y\24""2Z\15""0Y" - "\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2" - "Z\15""2Z\15""0Y\24""3[\16""3[\16-\\\16""3[\16/^\20""3[\16/^\20""3[\16" - "3[\16""0_\21""0_\21""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23" - "2a\23""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""5d\26""5d\26\376\377" - "\374\376\377\374\376\377\374\364\367\363b\207G9g\21""7f\30""5k\24""9" - "g\21""9g\21""4j\23""9g\21V\1779\355\357\353\376\377\374\376\377\374\376" - "\377\374\376\377\3745k\24""4j\23""4j\23\202\320q\202\320q9g\21""5k\24" - "5k\24\0\0\25""0\10\25""0\10\30""1\1\30""1\1\25""0\10\30""1\1\30""1\1" - "\25""0\10\30""1\1\30""1\1\25""0\10\30""1\1\30""1\1\25""0\10\25""0\10" - "\30""1\1\30""1\1\30""1\1\30""1\1\25""0\10\23""3\3\27""1\12\23""3\3\23" - "3\3\23""3\3\23""3\3\27""1\12\27""1\12\23""3\3\23""3\3\23""3\3\23""3\3" - "\27""1\12\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25""5\6\25""5\6\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\32""8\2\31""9\13\32""8\2\31""9\13\34:\5\34:\5" - "\27""8\11\34:\5\34:\5\27=\7\27=\7\27=\7\27=\7\363\365\362\376\377\374" - "\376\377\374\376\377\374\360\362\357C^5\32\77\12\32\77\12\32\77\12\32" - "\77\12\36B\5;[+\337\351\344\376\377\374\376\377\374\376\377\374\376\377" - "\374\270\303\261\36B\5\32\77\12\36B\5\202\320q\202\320q\32\77\12\32\77" - "\12\36B\5\0\0.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23""2Z\15.W\23.W\23" - ".W\23.W\23.W\23.W\23.W\23""2Z\15.W\23.W\23.W\23""0Y\24""0Y\24""0Y\24" - "0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""2Z\15""0Y\24""0Y\24" - "0Y\24""2Z\15""0Y\24-\\\16""3[\16-\\\16/^\20/^\20""3[\16/^\20/^\20""3" - "[\16/^\20""3[\16""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23""2" - "a\23""3b\24""3b\24""3b\24""3b\24""7e\17""5d\26""5d\26""7e\17""7e\17h" - "\214L\370\372\367\376\377\374\376\377\374\376\377\374\360\362\357Y\203" - "<9g\21""4j\23""9g\21T{/\347\356\343\376\377\374\376\377\374\376\377\374" - "\376\377\374\303\323\271@m\30""9g\21""5k\24""4j\23\202\320q\202\320q" - "4j\23""9g\21""4j\23\0\0\25""0\10\30""1\1\25""0\10\30""1\1\30""1\1\25" - "0\10\30""1\1\30""1\1\30""1\1\30""1\1\25""0\10\25""0\10\30""1\1\30""1" - "\1\30""1\1\25""0\10\30""1\1\25""0\10\30""1\1\27""1\12\23""3\3\23""3\3" - "\23""3\3\27""1\12\23""3\3\27""1\12\23""3\3\23""3\3\27""1\12\23""3\3\23" - "3\3\30""1\1\23""3\3\24""4\5\24""4\5\25""5\6\25""5\6\25""5\6\25""5\6\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\32""8\2\32""8\2\31""9\13\32""8\2\34:\5\34:\5\34" - ":\5\34:\5\34:\5\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10YpL\367\371\366" - "\376\377\374\376\377\374\376\377\374\355\357\353\77_/\32\77\12""7V\40" - "\337\351\344\376\377\374\376\377\374\376\377\374\376\377\374\277\313" - "\270\40E\20\32\77\12\36B\5\32\77\12\32\77\12\202\320q\202\320q\32\77" - "\12\32\77\12\36B\5\0\0.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23." - "W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23""0Y\24""0Y\24""2Z\15""0" - "Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0" - "Y\24""0Y\24""0Y\24""2Z\15-\\\16-\\\16""3[\16/^\20/^\20""3[\16/^\20/^" - "\20/^\20""0_\21""0_\21""0_\21""0_\21""0_\21""3[\16""2a\23""2a\23""2a" - "\23""2a\23""3b\24""3b\24""3b\24""3b\24""7e\17""7e\17""5d\26""7e\17""7" - "e\17""5d\26""7e\17""7e\17s\222Y\371\373\370\376\377\374\376\377\374\376" - "\377\374\352\361\346j\217N\344\353\340\376\377\374\376\377\374\376\377" - "\374\376\377\374\313\326\304@m\30""9g\21""5k\24""9g\21""4j\23""4j\23" - "\202\320q\202\320q4j\23""9g\21""4j\23\0\0\30""1\1\30""1\1\25""0\10\30" - "1\1\30""1\1\25""0\10\30""1\1\30""1\1\25""0\10\30""1\1\30""1\1\30""1\1" - "\25""0\10\30""1\1\30""1\1\30""1\1\25""0\10\30""1\1\30""1\1\23""3\3\23" - "3\3\23""3\3\23""3\3\30""1\1\30""1\1\23""3\3\30""1\1\23""3\3\23""3\3\23" - "3\3\23""3\3\24""4\5\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\31""9\13\32""8\2\32""8\2\31""9\13\31""9" - "\13\34:\5\31""9\13\34:\5\31""9\13\27=\7\27=\7\27=\7\27=\7\30>\10\30>" - "\10\35;\6\32\77\12\32\77\12d{V\372\374\371\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\304\322\305\"H\22\32\77\12\36B\5\32\77\12\32\77\12\36B\5\32\77\12\202" - "\320q\202\320q\32\77\12\32\77\12\36B\5\0\0.W\23.W\23.W\23.W\23.W\23." - "W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23""0Y\24""0Y\24" - "0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15" - "0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""3[\16-\\\16""3[\16-\\\16""3[\16/^" - "\20/^\20/^\20/^\20""3[\16""0_\21""0_\21""0_\21""0_\21""0_\21""2a\23""2" - "a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""5" - "d\26""7e\17""7e\17""7e\17""5d\26""7e\17""9g\21""7f\30""4j\23|\234b\373" - "\375\372\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\321\334\312Cr$4j\23""9g\21""4j\23""5k\24""9g\21""4j\23""9" - "g\21\202\320q\202\320q4j\23""4j\23""9g\21\0\0\30""1\1\25""0\10\30""1" - "\1\30""1\1\30""1\1\30""1\1\30""1\1\30""1\1\25""0\10\30""1\1\30""1\1\30" - "1\1\25""0\10\30""1\1\30""1\1\23""3\3\27""1\12\23""3\3\27""1\12\23""3" - "\3\23""3\3\23""3\3\27""1\12\23""3\3\30""1\1\23""3\3\23""3\3\23""3\3\23" - "3\3\27""1\12\24""4\5\24""4\5\25""5\6\25""5\6\25""5\6\25""5\6\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\31""9\13\32""8\2\32""8\2\32""8\2\34:\5" - "\27""8\11\34:\5\34:\5\34:\5\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\30" - ">\10\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12m\204_\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\321\327\314'E\20\32\77\12" - "\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\202\320" - "q\202\320q\32\77\12\32\77\12\36B\5\0\0.W\23.W\23.W\23.W\23.W\23.W\23" - ".W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23""0Y\24""0Y\24""2Z\15""0" - "Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0" - "Y\24""2Z\15""0Y\24""0Y\24-\\\16-\\\16-\\\16/^\20/^\20""0Y\24/^\20/^\20" - "/^\20/^\20/^\20""0_\21""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""2a" - "\23""2a\23""3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""7e\17""5d\26""5" - "d\26""7e\17""7e\17""5d\26\247\271\223\247\271\223\247\271\223\243\274" - "\224\243\274\224\243\274\224\341\347\334\376\377\374\376\377\374\376" - "\377\374\376\377\374\261\306\245\243\274\224\247\271\223\243\274\224" - "\247\271\223\243\274\224\243\274\2244j\23""9g\21""4j\23\202\320q\202" - "\320q9g\21""4j\23""4j\23\0\0\25""0\10\25""0\10\30""1\1\30""1\1\30""1" - "\1\25""0\10\30""1\1\25""0\10\25""0\10\30""1\1\30""1\1\25""0\10\25""0" - "\10\30""1\1\30""1\1\23""3\3\23""3\3\23""3\3\30""1\1\23""3\3\27""1\12" - "\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3\23""3\3\27""1\12\24""4\5\24" - "4\5\24""4\5\25""5\6\25""5\6\25""5\6\25""5\6\27""7\10\27""7\10\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\32""8\2\32""8\2\31""9\13\32""8\2\27""8\11\34:\5\34:\5\31" - "9\13\34:\5\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77\12\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\32\77\12\32\77\12\32\77\12\202\320q\202\320q\32\77\12\36B\5" - "\32\77\12\0\0.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23.W\23" - ".W\23.W\23""2Z\15""0Y\24""2Z\15""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0" - "Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""2Z\15-\\\16""3" - "[\16-\\\16-\\\16""3[\16/^\20""3[\16/^\20/^\20/^\20/^\20""0_\21""0_\21" - "0_\21""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24" - "3b\24""3b\24""5d\26""7e\17""5d\26""7e\17""7e\17""5d\26""5d\26""9g\21" - "7f\30\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\3749g\21""4j\23""9g\21\202\320q\202\320q9g\21""4j\23""9" - "g\21\0\0\25""0\10\30""1\1\25""0\10\30""1\1\25""0\10\25""0\10\30""1\1" - "\25""0\10\30""1\1\30""1\1\30""1\1\30""1\1\27""1\12\23""3\3\23""3\3\23" - "3\3\23""3\3\23""3\3\27""1\12\23""3\3\30""1\1\23""3\3\27""1\12\30""1\1" - "\23""3\3\23""3\3\23""3\3\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25""5" - "\6\25""5\6\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\32""8\2\32""8\2\31""9" - "\13\32""8\2\31""9\13\34:\5\27""8\11\34:\5\27""8\11\27=\7\27=\7\27=\7" - "\30>\10\35;\6\30>\10\30>\10\32\77\12\32\77\12\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\32\77\12\36" - "B\5\32\77\12\202\320q\202\320q\32\77\12\36B\5\32\77\12\0\0.W\23.W\23" - ".W\23.W\23.W\23.W\23.W\23.W\23""2Z\15.W\23""2Z\15""0Y\24""0Y\24""0Y\24" - "2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24" - "2Z\15""0Y\24""0Y\24""2Z\15""0Y\24-\\\16""3[\16-\\\16""3[\16/^\20""3[" - "\16/^\20/^\20/^\20/^\20""3[\16""0_\21""0_\21""0_\21""3[\16""0_\21""2" - "a\23""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24""3b\24""5d\26""5" - "d\26""5d\26""5d\26""7e\17""7e\17""5d\26""9g\21""9g\21""9g\21\376\377" - "\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376" - "\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374" - "\376\377\374\376\377\374\376\377\374\376\377\374\376\377\374\376\377" - "\3749g\21""5k\24""6l\25\202\320q\202\320q5k\24""6l\25""9g\21\0\0\30""1" - "\1\30""1\1\25""0\10\30""1\1\25""0\10\25""0\10\25""0\10\30""1\1\30""1" - "\1\30""1\1\23""3\3\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3\27""1\12" - "\23""3\3\23""3\3\30""1\1\23""3\3\27""1\12\23""3\3\27""1\12\23""3\3\23" - "3\3\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25""5\6\25""5\6\27""7\10" - "\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7" - "\10\27""7\10\27""7\10\31""9\13\32""8\2\31""9\13\31""9\13\32""8\2\34:" - "\5\27""8\11\34:\5\27""8\11\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>" - "\10\30>\10\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B" - "\5\32\77\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77" - "\12\36B\5\32\77\12\36B\5\33A\14\36B\5\33A\14\33A\14\36B\5\33A\14\36B" - "\5\33A\14\33A\14\36B\5\33A\14\0\0.W\23.W\23.W\23.W\23.W\23.W\23.W\23" - "2Z\15""0Y\24""0Y\24""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24" - "0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""2Z\15" - "2Z\15-\\\16-\\\16""0Y\24-\\\16/^\20""3[\16/^\20/^\20/^\20/^\20""0_\21" - "0_\21""0_\21""0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23""3b\24" - "3b\24""3b\24""3b\24""3b\24""5d\26""5d\26""5d\26""5d\26""5d\26""7e\17" - "5d\26""9g\21""9g\21""4j\23""9g\21""4j\23""9g\21""5k\24""4j\23""4j\23" - "9g\21""4j\23""9g\21""4j\23""5k\24""9g\21""5k\24""9g\21""5k\24""6l\25" - "9g\21""5k\24""6l\25""9g\21""6l\25""6l\25""5k\24""5k\24""9g\21""6l\25" - "5k\24\0\0\30""1\1\25""0\10\25""0\10\25""0\10\25""0\10\25""0\10\30""1" - "\1\23""3\3\30""1\1\27""1\12\23""3\3\23""3\3\23""3\3\23""3\3\23""3\3\30" - "1\1\23""3\3\27""1\12\23""3\3\23""3\3\23""3\3\23""3\3\27""1\12\23""3\3" - "\24""4\5\24""4\5\24""4\5\25""5\6\25""5\6\25""5\6\25""5\6\27""7\10\27" - "7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27""7\10\27" - "7\10\27""7\10\27""7\10\32""8\2\32""8\2\31""9\13\32""8\2\34:\5\27""8\11" - "\34:\5\34:\5\34:\5\27=\7\27=\7\27=\7\27=\7\30>\10\30>\10\30>\10\32\77" - "\12\32\77\12\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\32\77\12\36B\5" - "\32\77\12\36B\5\32\77\12\32\77\12\32\77\12\36B\5\32\77\12\36B\5\32\77" - "\12\36B\5\33A\14\36B\5\33A\14\36B\5\33A\14\36B\5\36B\5\33A\14\36B\5\33" - "A\14\33A\14\36B\5\0\0.W\23.W\23.W\23.W\23.W\23.W\23""2Z\15""0Y\24""0" - "Y\24""0Y\24""0Y\24""2Z\15""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0Y\24""0" - "Y\24""2Z\15""0Y\24""2Z\15""0Y\24""2Z\15""0Y\24""2Z\15""3[\16-\\\16-\\" - "\16""3[\16/^\20""3[\16/^\20/^\20/^\20""3[\16/^\20""3[\16""0_\21""0_\21" - "0_\21""0_\21""0_\21""2a\23""2a\23""2a\23""2a\23""3b\24""3b\24""3b\24" - "3b\24""3b\24""5d\26""5d\26""5d\26""5d\26""5d\26""7e\17""5d\26""9g\21" - "7f\30""4j\23""9g\21""4j\23""5k\24""9g\21""5k\24""4j\23""9g\21""4j\23" - "4j\23""9g\21""5k\24""5k\24""4j\23""4j\23""6l\25""9g\21""5k\24""5k\24" - "5k\24""5k\24""9g\21""6l\25""5k\24""9g\21""5k\24""9g\21""9g\21""5k\24" - "\0\0", -}; - - diff --git a/polymer-perf/eduke32/build/rsrc/game_icon.bmp b/polymer-perf/eduke32/build/rsrc/game_icon.bmp deleted file mode 100644 index b921dcd0379fe7db56b6e50dfc41dad3d9de6463..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3126 zcmeH}TZ`I26o9wy{Q-Rx$(GRi5NMHh5wS(2gsfPxB1LvXkPw0tu|Xt=h=|A{OX*V| zee`Gct7kh5$r9Gf?nCKe9L^l)eCLwM<>O`X`Poj2%qG9w-S64i3pC{Je_6=vM86mp zov3Jc)nNJM`|a0nv#a5P(Hq|cliU96rysAq(Mk>M;q-?X>t1AE4P;b1p`boo$H3oQ z`Z>eQ>0+2p+l``VFc@@p((QIxP9_s9Ze&~eoH_!@@s^1UNf0N-x6)9IAC-|yq1 z_`~5)=L?g0wOWxmE`(bw7HR(ZYwJ~|_3m>(2!Oa$Di!#f%|`gtI2w&~eyi2OBKbpR zo3v=XUb9T(pU>ydt&5EOtJP{4hLof7hfkg`5yeNRKg3G#RsRWLnr6EH@VO!hKKYBN zZ%nE(aaMvM;|>D$#t-5621LX0u7V;FBsem{I~3bav`| z{e04&MCP)z45M5wbJ8dT!NqYLIpDT!qbp&_*?6l-p->QrT;F^7Cow)HpN9Ls|L5Wz zCqO`@`-5HGo<}O6(tNT$606)nW$-!k+*yYS$CW7Ae8?)3y%c$L|MUD_uXkAUas1!^ zj1%?1^YfJb=V{OF#-pCx5LxOoFE3RQ8}_}vzQ61bNWBNopoA&!ugB&~ YEvL<2^@mSrslttxd}*I#fD$I~-{LrYJOBUy diff --git a/polymer-perf/eduke32/build/rsrc/game_icon.c b/polymer-perf/eduke32/build/rsrc/game_icon.c deleted file mode 100644 index 82d833ac8..000000000 --- a/polymer-perf/eduke32/build/rsrc/game_icon.c +++ /dev/null @@ -1,192 +0,0 @@ -#include "sdlayer.h" - -static unsigned int sdlappicon_pixels[] = { - 0xff415f7a, 0xff364a5c, 0xff364a5c, 0xff607486, 0xff667a8c, 0xff667a8c, - 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c, - 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c, - 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c, - 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff667a8c, 0xff607486, 0xff364a5c, - 0xff364a5c, 0xff415f7a, 0xff364a5c, 0xff202020, 0xff202020, 0xff747474, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff747474, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff334d66, - 0xff334d66, 0xff747474, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff747474, 0xff334d66, 0xff334d66, 0xff364a5c, - 0xff364a5c, 0xff334d66, 0xff334d66, 0xff747474, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff747474, 0xff334d66, - 0xff334d66, 0xff364a5c, 0xff364a5c, 0xff202020, 0xff202020, 0xff5c5c5c, - 0xff404040, 0xff808080, 0xff646464, 0xff686868, 0xff686868, 0xff686868, - 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, - 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, - 0xff686868, 0xff686868, 0xff686868, 0xff646464, 0xff7c7c7c, 0xff404040, - 0xff5c5c5c, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, - 0xff202020, 0xff6c6c6c, 0xff686868, 0xff808080, 0xff686868, 0xff808080, - 0xff808080, 0xff808080, 0xff6c6c6c, 0xff6a6a6a, 0xff727272, 0xff6c6c6c, - 0xff6c6c6c, 0xff767676, 0xff626262, 0xff6c6c6c, 0xff808080, 0xff6c6c6c, - 0xff686868, 0xff747474, 0xff808080, 0xff808080, 0xff808080, 0xff707070, - 0xff787878, 0xff686868, 0xff6c6c6c, 0xff202020, 0xff202020, 0xff364a5c, - 0xff364a5c, 0xff202020, 0xff202020, 0xff747474, 0xff808080, 0xff808080, - 0xff686868, 0xff808080, 0xff808080, 0xff808080, 0xff6c6c6c, 0xff6a6a6a, - 0xff727272, 0xff6a6a6a, 0xff6a6a6a, 0xff808080, 0xff6c6c6c, 0xff6c6c6c, - 0xff808080, 0xff6c6c6c, 0xff7c7c7c, 0xff6c6c6c, 0xff808080, 0xff808080, - 0xff808080, 0xff707070, 0xff787878, 0xff808080, 0xff747474, 0xff202020, - 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, 0xff202020, 0xff747474, - 0xff808080, 0xff808080, 0xff686868, 0xff808080, 0xff808080, 0xff808080, - 0xff767676, 0xff6c6c6c, 0xff7c7c7c, 0xff707070, 0xff707070, 0xff767676, - 0xff6c6c6c, 0xff767676, 0xff6c6c6c, 0xff767676, 0xff6c6c6c, 0xff7e7e7e, - 0xff808080, 0xff808080, 0xff808080, 0xff707070, 0xff787878, 0xff808080, - 0xff747474, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, - 0xff202020, 0xff747474, 0xff808080, 0xff808080, 0xff646464, 0xff686868, - 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, - 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, - 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff646464, - 0xff787878, 0xff808080, 0xff747474, 0xff202020, 0xff202020, 0xff364a5c, - 0xff364a5c, 0xff202020, 0xff202020, 0xff747474, 0xff808080, 0xff808080, - 0xff686868, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff707070, 0xff787878, 0xff808080, 0xff747474, 0xff202020, - 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, 0xff202020, 0xff747474, - 0xff808080, 0xff808080, 0xff686868, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff707070, 0xff787878, 0xff808080, - 0xff747474, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, - 0xff202020, 0xff747474, 0xff808080, 0xff808080, 0xff686868, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff707070, - 0xff787878, 0xff808080, 0xff747474, 0xff202020, 0xff202020, 0xff364a5c, - 0xff364a5c, 0xff202020, 0xff202020, 0xff747474, 0xff808080, 0xff808080, - 0xff646464, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, - 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, - 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, - 0xff686868, 0xff646464, 0xff787878, 0xff808080, 0xff747474, 0xff202020, - 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, 0xff202020, 0xff747474, - 0xff808080, 0xff808080, 0xff686868, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff707070, 0xff787878, 0xff808080, - 0xff747474, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, - 0xff202020, 0xff747474, 0xff808080, 0xff808080, 0xff686868, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff707070, - 0xff787878, 0xff808080, 0xff747474, 0xff202020, 0xff202020, 0xff364a5c, - 0xff364a5c, 0xff202020, 0xff202020, 0xff747474, 0xff808080, 0xff808080, - 0xff686868, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff707070, 0xff787878, 0xff808080, 0xff747474, 0xff202020, - 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, 0xff202020, 0xff747474, - 0xff808080, 0xff808080, 0xff6c6c6c, 0xff686868, 0xff686868, 0xff686868, - 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, - 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff686868, - 0xff686868, 0xff686868, 0xff686868, 0xff686868, 0xff787878, 0xff808080, - 0xff747474, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, - 0xff202020, 0xff747474, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff747474, 0xff202020, 0xff202020, 0xff364a5c, - 0xff364a5c, 0xff202020, 0xff202020, 0xff666666, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff808080, - 0xff808080, 0xff808080, 0xff808080, 0xff808080, 0xff666666, 0xff202020, - 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, 0xff202020, 0xff3c3c3c, - 0xff666666, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474, - 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474, - 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474, - 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff747474, 0xff666666, - 0xff3c3c3c, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, - 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, - 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, - 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, - 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, - 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff364a5c, - 0xff364a5c, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, - 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, - 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, - 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, - 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, - 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, 0xff202020, 0xff202020, - 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff302424, 0xff3e3e3e, - 0xff484848, 0xff444444, 0xff444444, 0xff464646, 0xff4c4c4c, 0xff484848, - 0xff484848, 0xff4a4a4a, 0xff4c4c4c, 0xff4c4c4c, 0xff4c4c4c, 0xff4c4c4c, - 0xff4a4a4a, 0xff404040, 0xff343434, 0xff343434, 0xff343434, 0xff343434, - 0xff2c2c2c, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff202020, - 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, - 0xff3c3c3c, 0xff727272, 0xff707070, 0xff565656, 0xff505050, 0xff525252, - 0xff6a6a6a, 0xff787878, 0xff767676, 0xff747474, 0xff7a7a7a, 0xff7c7c7c, - 0xff787878, 0xff787878, 0xff7a7a7a, 0xff727272, 0xff505050, 0xff484848, - 0xff484848, 0xff484848, 0xff464646, 0xff202020, 0xff202020, 0xff364a5c, - 0xff364a5c, 0xff202020, 0xff202020, 0xff202020, 0xff202020, 0xff202020, - 0xff202020, 0xff202020, 0xff444444, 0xff6c6c6c, 0xff6c6c6c, 0xff303030, - 0xff202020, 0xff202020, 0xff545454, 0xff787878, 0xff747474, 0xff747474, - 0xff787878, 0xff7c7c7c, 0xff808080, 0xff808080, 0xff7a7a7a, 0xff747474, - 0xff505050, 0xff484848, 0xff484848, 0xff484848, 0xff484848, 0xff202020, - 0xff202020, 0xff364a5c, 0xff364a5c, 0xff282828, 0xff606060, 0xff686868, - 0xff747474, 0xff4e4e4e, 0xff565656, 0xff202020, 0xff444444, 0xff686868, - 0xff6c6c6c, 0xff303030, 0xff202020, 0xff202020, 0xff545454, 0xff767676, - 0xff767676, 0xff767676, 0xff7c7c7c, 0xff787878, 0xff7c7c7c, 0xff7c7c7c, - 0xff7e7e7e, 0xff767676, 0xff505050, 0xff484848, 0xff484848, 0xff484848, - 0xff484848, 0xff202020, 0xff202020, 0xff364a5c, 0xff364a5c, 0xff606060, - 0xffa8a8a8, 0xff7e7e7e, 0xffa8a8a8, 0xff6c6c6c, 0xff7c7c7c, 0xff202020, - 0xff444444, 0xff6a6a6a, 0xff6c6c6c, 0xff303030, 0xff202020, 0xff202020, - 0xff545454, 0xff747474, 0xff787878, 0xff787878, 0xff7e7e7e, 0xff7c7c7c, - 0xff787878, 0xff787878, 0xff828282, 0xff7c7c7c, 0xff505050, 0xff484848, - 0xff484848, 0xff484848, 0xff484848, 0xff202020, 0xff202020, 0xff364a5c, - 0xff364a5c, 0xff7c7c7c, 0xff808080, 0xff404040, 0xffa8a8a8, 0xffa0a0a0, - 0xff7c7c7c, 0xff202020, 0xff464646, 0xff767676, 0xff727272, 0xff303030, - 0xff202020, 0xff202020, 0xff545454, 0xff767676, 0xff7a7a7a, 0xff787878, - 0xff7e7e7e, 0xff7c7c7c, 0xff787878, 0xff7c7c7c, 0xff8c8c8c, 0xff7e7e7e, - 0xff505050, 0xff484848, 0xff484848, 0xff484848, 0xff484848, 0xff222222, - 0xff25303a, 0xff364a5c, 0xff364a5c, 0xff606060, 0xffa8a8a8, 0xff7e7e7e, - 0xffa8a8a8, 0xff6c6c6c, 0xff7c7c7c, 0xff202020, 0xff484848, 0xff787878, - 0xff727272, 0xff303030, 0xff202020, 0xff202020, 0xff585858, 0xff808080, - 0xff808080, 0xff808080, 0xff888888, 0xff868686, 0xff7e7e7e, 0xff7a7a7a, - 0xff848484, 0xff747474, 0xff505050, 0xff484848, 0xff484848, 0xff484848, - 0xff484848, 0xff252b30, 0xff2a4054, 0xff385168, 0xff3a5874, 0xff282c30, - 0xff606060, 0xff686868, 0xff747474, 0xff4e4e4e, 0xff565656, 0xff202020, - 0xff484848, 0xff787878, 0xff707070, 0xff303030, 0xff202020, 0xff202020, - 0xff585858, 0xff7c7c7c, 0xff7a7a7a, 0xff787878, 0xff828282, 0xff808080, - 0xff808080, 0xff7c7c7c, 0xff828282, 0xff747474, 0xff505050, 0xff484848, - 0xff484848, 0xff484848, 0xff484848, 0xff242424, 0xff26394c, 0xff364a5c, - 0xff4c7498, 0xff334d66, 0xff202428, 0xff202020, 0xff202020, 0xff202020, - 0xff202020, 0xff202428, 0xff4c5660, 0xff747474, 0xff707070, 0xff585858, - 0xff585858, 0xff5c5c5c, 0xff747474, 0xff7c7c7c, 0xff707070, 0xff787878, - 0xff7c7c7c, 0xff787878, 0xff7c7c7c, 0xff868686, 0xff828282, 0xff787878, - 0xff505050, 0xff484848, 0xff484848, 0xff484848, 0xff464646, 0xff202020, - 0xff202020, 0xff364a5c, 0xff4c7498, 0xff4c7498, 0xff3a5874, 0xff364a5c, - 0xff364a5c, 0xff364a5c, 0xff364a5c, 0xff3a5874, 0xff55738e, 0xff5a6e80, - 0xff5e7284, 0xff5e7284, 0xff64788a, 0xff687c8e, 0xff6c8092, 0xff667a8c, - 0xff627688, 0xff627688, 0xff627688, 0xff627688, 0xff64788a, 0xff6a7e90, - 0xff667a8c, 0xff627688, 0xff4e6274, 0xff4a5e70, 0xff4a5e70, 0xff4a5e70, - 0xff44586a, 0xff364a5c, 0xff364a5c, 0xff415f7a,}; - -static unsigned char sdlappicon_mask[] = { - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255,}; - -struct sdlappicon sdlappicon = { - 32,32, // width,height - sdlappicon_pixels, - sdlappicon_mask -}; diff --git a/polymer-perf/eduke32/build/rsrc/game_icon.ico b/polymer-perf/eduke32/build/rsrc/game_icon.ico deleted file mode 100644 index b6868267fa73d296c4094cfc51f47d527b7e1dc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2998 zcmds&FKi=66o;qh2M$!#+Fl0*Tm!0xoir#?K$R?V6zNEC*kfB#5K>?iT&Yr|VF%i( z1tp<9uu`OgW^h6-DBvourCd-~DtP^79Xl7>xfWD9wa=d2o!{Gizi(#tk8>ZnC+^v^ zjJ>$upE&oKbMzhkr|!q6&VABx?(?M4zM!S^-XA09_`A_)x?{_stE$RXuPgWVw;$Zw zKh1sj@+EpY(b~T=bJ2Sr=W(`uMt0tfRp)t(Rjg)G)!%;g>S4e7<=uW~A-{Ni=Xt7s zU$5JbVXP6fF95TdO#280X?Ee^oSnOBYH$P`bOWPcynUyIFzvj8k#dP7MU0snx1 zz&|iI0fqoWFoOe~d5HK$7-C{z4tR&s&|r&jMEoKgF>x>l5ssKRSdYjUA}kS>2up+| z!os_YhK^^1g-4o(4ogfdtVx6=ruk@DJaeKnG#Cs9gTY`h7z_r3!C;6m7z_qOgu!4i z7z_r3!C){L3+5S7kH>O*dn--T$Yb9nzEFIn_@z%3o4vhZK@7i4(R|hJ z(q>38GQ+*1n-Se!U8B@ZP4Q+jX?p#BKhLsaxLcNWznAr!dN<3)ZF15~>Xh$igQ6&J znwzqj - -#include "baselayer.h" - -@interface StartupWinController : NSWindowController -{ - IBOutlet NSButton *alwaysShowButton; - IBOutlet NSButton *fullscreenButton; - IBOutlet NSTextView *messagesView; - IBOutlet NSTabView *tabView; - IBOutlet NSComboBox *videoModeCbox; - - IBOutlet NSButton *cancelButton; - IBOutlet NSButton *startButton; -} - -- (IBAction)alwaysShowClicked:(id)sender; -- (IBAction)fullscreenClicked:(id)sender; - -- (IBAction)cancel:(id)sender; -- (IBAction)start:(id)sender; - -- (void)setupRunMode; -- (void)setupMessagesMode; -- (void)putsMessage:(NSString *)str; -- (void)setTitle:(NSString *)str; -@end - -@implementation StartupWinController - -- (IBAction)alwaysShowClicked:(id)sender -{ -} - -- (IBAction)fullscreenClicked:(id)sender -{ - // XXX: recalculate the video modes list to take into account the fullscreen status -} - -- (IBAction)cancel:(id)sender -{ - [NSApp abortModal]; -} - -- (IBAction)start:(id)sender -{ - // XXX: write the states of the form controls to their respective homes - [NSApp stopModal]; -} - -- (void)setupRunMode -{ - // XXX: populate the lists and set everything up to represent the current options - - // enable all the controls on the Configuration page - NSEnumerator *enumerator = [[[[tabView tabViewItemAtIndex:0] view] subviews] objectEnumerator]; - NSControl *control; - while (control = [enumerator nextObject]) - [control setEnabled:true]; - - [cancelButton setEnabled:true]; - [startButton setEnabled:true]; - - [tabView selectTabViewItemAtIndex:0]; -} - -- (void)setupMessagesMode -{ - [tabView selectTabViewItemAtIndex:1]; - - // disable all the controls on the Configuration page except "always show", so the - // user can enable it if they want to while waiting for something else to happen - NSEnumerator *enumerator = [[[[tabView tabViewItemAtIndex:0] view] subviews] objectEnumerator]; - NSControl *control; - while (control = [enumerator nextObject]) { - if (control == alwaysShowButton) continue; - [control setEnabled:false]; - } - - [cancelButton setEnabled:false]; - [startButton setEnabled:false]; -} - -- (void)putsMessage:(NSString *)str -{ - NSRange end; - NSTextStorage *text = [messagesView textStorage]; - BOOL shouldAutoScroll; - - shouldAutoScroll = ((int)NSMaxY([messagesView bounds]) == (int)NSMaxY([messagesView visibleRect])); - - end.location = [text length]; - end.length = 0; - - [text beginEditing]; - [messagesView replaceCharactersInRange:end withString:str]; - [text endEditing]; - - if (shouldAutoScroll) { - end.location = [text length]; - end.length = 0; - [messagesView scrollRangeToVisible:end]; - } -} - -- (void)setTitle:(NSString *)str -{ - [[self window] setTitle:str]; -} - -@end - -static StartupWinController *startwin = nil; - -int startwin_open(void) -{ - if (startwin != nil) return 1; - - startwin = [[StartupWinController alloc] initWithWindowNibName:@"startwin.editor"]; - if (startwin == nil) return -1; - - [startwin showWindow:nil]; - [startwin setupMessagesMode]; - - return 0; -} - -int startwin_close(void) -{ - if (startwin == nil) return 1; - - [startwin close]; - startwin = nil; - - return 0; -} - -int startwin_puts(const char *s) -{ - NSString *ns; - - if (!s) return -1; - if (startwin == nil) return 1; - - ns = [[NSString alloc] initWithCString:s]; - [startwin putsMessage:ns]; - [ns release]; - - return 0; -} - -int startwin_settitle(const char *s) -{ - NSString *ns; - - if (!s) return -1; - if (startwin == nil) return 1; - - ns = [[NSString alloc] initWithCString:s]; - [startwin setTitle:ns]; - [ns release]; - - return 0; -} - -int startwin_idle(void *v) -{ - if (startwin) [[startwin window] displayIfNeeded]; - return 0; -} - -int startwin_run(void) -{ - int retval; - - if (startwin == nil) return 0; - - [startwin setupRunMode]; - - switch ([NSApp runModalForWindow:[startwin window]]) { - case NSRunStoppedResponse: retval = 1; break; - case NSRunAbortedResponse: retval = 0; break; - default: retval = -1; - } - - [startwin setupMessagesMode]; - - return retval; -} diff --git a/polymer-perf/eduke32/build/src/a-c.c b/polymer-perf/eduke32/build/src/a-c.c deleted file mode 100644 index 505088bf3..000000000 --- a/polymer-perf/eduke32/build/src/a-c.c +++ /dev/null @@ -1,299 +0,0 @@ -// A.ASM replacement using C -// Mainly by Ken Silverman, with things melded with my port by -// Jonathon Fowler (jonof@edgenetwork.org) -// -// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman -// Ken Silverman's official web site: "http://www.advsys.net/ken" -// See the included license file "BUILDLIC.TXT" for license info. - -#include "a.h" - -#ifdef ENGINE_USING_A_C - -int32_t krecip(int32_t num); // from engine.c - -#define BITSOFPRECISION 3 -#define BITSOFPRECISIONPOW 8 - -extern intptr_t asm1, asm2, asm3, asm4; -extern int32_t fpuasm, globalx3, globaly3; -extern void *reciptable; - -static int32_t bpl, transmode = 0; -static int32_t glogx, glogy, gbxinc, gbyinc, gpinc; -static char *gbuf, *gpal, *ghlinepal, *gtrans; - -//Global variable functions -void setvlinebpl(int32_t dabpl) { bpl = dabpl; } -void fixtransluscence(intptr_t datransoff) { gtrans = (char *)datransoff; } -void settransnormal(void) { transmode = 0; } -void settransreverse(void) { transmode = 1; } - - -//Ceiling/floor horizontal line functions -void sethlinesizes(int32_t logx, int32_t logy, intptr_t bufplc) -{ glogx = logx; glogy = logy; gbuf = (char *)bufplc; } -void setpalookupaddress(char *paladdr) { ghlinepal = paladdr; } -void setuphlineasm4(int32_t bxinc, int32_t byinc) { gbxinc = bxinc; gbyinc = byinc; } -void hlineasm4(int32_t cnt, int32_t skiploadincs, int32_t paloffs, uint32_t by, uint32_t bx, intptr_t p) -{ - char *palptr; - - palptr = (char *)&ghlinepal[paloffs]; - if (!skiploadincs) { gbxinc = asm1; gbyinc = asm2; } - for (; cnt>=0; cnt--) - { - *((char *)p) = palptr[gbuf[((bx>>(32-glogx))<>(32-glogy))]]; - bx -= gbxinc; - by -= gbyinc; - p--; - } -} - - -//Sloped ceiling/floor vertical line functions -void setupslopevlin(int32_t logylogx, intptr_t bufplc, int32_t pinc) -{ - glogx = (logylogx&255); glogy = (logylogx>>8); - gbuf = (char *)bufplc; gpinc = pinc; -} -void slopevlin(intptr_t p, int32_t i, intptr_t slopaloffs, int32_t cnt, int32_t bx, int32_t by) -{ - intptr_t *slopalptr; - int32_t bz, bzinc; - uint32_t u, v; - - bz = asm3; bzinc = (asm1>>3); - slopalptr = (intptr_t *)slopaloffs; - for (; cnt>0; cnt--) - { - i = krecip(bz>>6); bz += bzinc; - u = bx+globalx3*i; - v = by+globaly3*i; - (*(char *)p) = *(char *)(((intptr_t)slopalptr[0])+gbuf[((u>>(32-glogx))<>(32-glogy))]); - slopalptr--; - p += gpinc; - } -} - - -//Wall,face sprite/wall sprite vertical line functions -void setupvlineasm(int32_t neglogy) { glogy = neglogy; } -void vlineasm1(int32_t vinc, intptr_t paloffs, int32_t cnt, uint32_t vplc, intptr_t bufplc, intptr_t p) -{ - gbuf = (char *)bufplc; - gpal = (char *)paloffs; - for (; cnt>=0; cnt--) - { - *((char *)p) = gpal[gbuf[vplc>>glogy]]; - p += bpl; - vplc += vinc; - } -} - -void setupmvlineasm(int32_t neglogy) { glogy = neglogy; } -void mvlineasm1(int32_t vinc, intptr_t paloffs, int32_t cnt, uint32_t vplc, intptr_t bufplc, intptr_t p) -{ - char ch; - - gbuf = (char *)bufplc; - gpal = (char *)paloffs; - for (; cnt>=0; cnt--) - { - ch = gbuf[vplc>>glogy]; if (ch != 255) *((char *)p) = gpal[ch]; - p += bpl; - vplc += vinc; - } -} - -void setuptvlineasm(int32_t neglogy) { glogy = neglogy; } -void tvlineasm1(int32_t vinc, intptr_t paloffs, int32_t cnt, uint32_t vplc, intptr_t bufplc, intptr_t p) -{ - char ch; - - gbuf = (char *)bufplc; - gpal = (char *)paloffs; - if (transmode) - { - for (; cnt>=0; cnt--) - { - ch = gbuf[vplc>>glogy]; - if (ch != 255) *((char *)p) = gtrans[(*((char *)p))+(gpal[ch]<<8)]; - p += bpl; - vplc += vinc; - } - } - else - { - for (; cnt>=0; cnt--) - { - ch = gbuf[vplc>>glogy]; - if (ch != 255) *((char *)p) = gtrans[((*((char *)p))<<8)+gpal[ch]]; - p += bpl; - vplc += vinc; - } - } -} - -//Floor sprite horizontal line functions -void msethlineshift(int32_t logx, int32_t logy) { glogx = logx; glogy = logy; } -void mhline(intptr_t bufplc, uint32_t bx, int32_t cntup16, int32_t junk, uint32_t by, intptr_t p) -{ - char ch; - - gbuf = (char *)bufplc; - gpal = (char *)asm3; - for (cntup16>>=16; cntup16>0; cntup16--) - { - ch = gbuf[((bx>>(32-glogx))<>(32-glogy))]; - if (ch != 255) *((char *)p) = gpal[ch]; - bx += asm1; - by += asm2; - p++; - } -} - -void tsethlineshift(int32_t logx, int32_t logy) { glogx = logx; glogy = logy; } -void thline(intptr_t bufplc, uint32_t bx, int32_t cntup16, int32_t junk, uint32_t by, intptr_t p) -{ - char ch; - - gbuf = (char *)bufplc; - gpal = (char *)asm3; - if (transmode) - { - for (cntup16>>=16; cntup16>0; cntup16--) - { - ch = gbuf[((bx>>(32-glogx))<>(32-glogy))]; - if (ch != 255) *((char *)p) = gtrans[(*((char *)p))+(gpal[ch]<<8)]; - bx += asm1; - by += asm2; - p++; - } - } - else - { - for (cntup16>>=16; cntup16>0; cntup16--) - { - ch = gbuf[((bx>>(32-glogx))<>(32-glogy))]; - if (ch != 255) *((char *)p) = gtrans[((*((char *)p))<<8)+gpal[ch]]; - bx += asm1; - by += asm2; - p++; - } - } -} - - -//Rotatesprite vertical line functions -void setupspritevline(intptr_t paloffs, int32_t bxinc, int32_t byinc, int32_t ysiz) -{ - gpal = (char *)paloffs; - gbxinc = bxinc; - gbyinc = byinc; - glogy = ysiz; -} -void spritevline(int32_t bx, int32_t by, int32_t cnt, intptr_t bufplc, intptr_t p) -{ - gbuf = (char *)bufplc; - for (; cnt>1; cnt--) - { - (*(char *)p) = gpal[gbuf[(bx>>16)*glogy+(by>>16)]]; - bx += gbxinc; - by += gbyinc; - p += bpl; - } -} - -//Rotatesprite vertical line functions -void msetupspritevline(intptr_t paloffs, int32_t bxinc, int32_t byinc, int32_t ysiz) -{ - gpal = (char *)paloffs; - gbxinc = bxinc; - gbyinc = byinc; - glogy = ysiz; -} -void mspritevline(int32_t bx, int32_t by, int32_t cnt, intptr_t bufplc, intptr_t p) -{ - char ch; - - gbuf = (char *)bufplc; - for (; cnt>1; cnt--) - { - ch = gbuf[(bx>>16)*glogy+(by>>16)]; - if (ch != 255)(*(char *)p) = gpal[ch]; - bx += gbxinc; - by += gbyinc; - p += bpl; - } -} - -void tsetupspritevline(intptr_t paloffs, int32_t bxinc, int32_t byinc, int32_t ysiz) -{ - gpal = (char *)paloffs; - gbxinc = bxinc; - gbyinc = byinc; - glogy = ysiz; -} -void tspritevline(int32_t bx, int32_t by, int32_t cnt, intptr_t bufplc, intptr_t p) -{ - char ch; - - gbuf = (char *)bufplc; - if (transmode) - { - for (; cnt>1; cnt--) - { - ch = gbuf[(bx>>16)*glogy+(by>>16)]; - if (ch != 255) *((char *)p) = gtrans[(*((char *)p))+(gpal[ch]<<8)]; - bx += gbxinc; - by += gbyinc; - p += bpl; - } - } - else - { - for (; cnt>1; cnt--) - { - ch = gbuf[(bx>>16)*glogy+(by>>16)]; - if (ch != 255) *((char *)p) = gtrans[((*((char *)p))<<8)+gpal[ch]]; - bx += gbxinc; - by += gbyinc; - p += bpl; - } - } -} - -void setupdrawslab(int32_t dabpl, intptr_t pal) -{ bpl = dabpl; gpal = (char *)pal; } - -void drawslab(int32_t dx, int32_t v, int32_t dy, int32_t vi, intptr_t vptr, intptr_t p) -{ - int32_t x; - - while (dy > 0) - { - for (x=0; x>16)+vptr))]; - p += bpl; v += vi; dy--; - } -} - -void stretchhline(intptr_t p0, int32_t u, int32_t cnt, int32_t uinc, intptr_t rptr, intptr_t p) -{ - p0 = p-(cnt<<2); - do - { - p--; - *(char *)p = *(char *)((u>>16)+rptr); u -= uinc; - } - while (p > p0); -} - - -void mmxoverlay() { } - -#endif -/* - * vim:ts=4: - */ - diff --git a/polymer-perf/eduke32/build/src/a.masm b/polymer-perf/eduke32/build/src/a.masm deleted file mode 100644 index d2fdfbda7..000000000 --- a/polymer-perf/eduke32/build/src/a.masm +++ /dev/null @@ -1,2668 +0,0 @@ -; "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman -; Ken Silverman's official web site: "http://www.advsys.net/ken" -; See the included license file "BUILDLIC.TXT" for license info. - -.586P -;.8087 -;include mmx.inc ;Include this if using < WATCOM 11.0 WASM - -;Warning: IN THIS FILE, ALL SEGMENTS ARE REMOVED. THIS MEANS THAT DS:[] -;MUST BE ADDED FOR ALL SELF-MODIFIES FOR MASM TO WORK. -; -;WASM PROBLEMS: -; 1. Requires all scaled registers (*1,*2,*4,*8) to be last thing on line -; 2. Using 'DATA' is nice for self-mod. code, but WDIS only works with 'CODE' -; -;MASM PROBLEMS: -; 1. Requires DS: to be written out for self-modifying code to work -; 2. Doesn't encode short jumps automatically like WASM -; 3. Stupidly adds wait prefix to ffree's - -EXTRN _asm1 : dword -EXTRN _asm2 : dword -EXTRN _asm3 : dword -EXTRN _asm4 : dword -EXTRN _reciptable : near -EXTRN _fpuasm : dword -EXTRN _globalx3 : dword -EXTRN _globaly3 : dword -EXTRN _ylookup : near - -EXTRN _vplce : near -EXTRN _vince : near -EXTRN _palookupoffse : near -EXTRN _bufplce : near - -EXTRN _ebpbak : dword -EXTRN _espbak : dword - -EXTRN _pow2char : near -EXTRN _pow2long : near - - -; Some macros to help make cdecl calling easier to manage -CDECLBEGIN MACRO noi:=<0> - IF noi GE 2 - push ebx - ENDIF - IF noi GE 3 - push ecx - ENDIF - IF noi GE 4 - push edx - ENDIF - IF noi GE 5 - push esi - ENDIF - IF noi GE 6 - push edi - ENDIF -ENDM - -CDECLEND MACRO noi:=<0> - IF noi GE 6 - pop edi - ENDIF - IF noi GE 5 - pop esi - ENDIF - IF noi GE 4 - pop edx - ENDIF - IF noi GE 3 - pop ecx - ENDIF - IF noi GE 2 - pop ebx - ENDIF -ENDM - -CDECLPARAM MACRO registername:REQ,paramnumber:REQ,offsetted:REQ -; mov registername, dword ptr [esp + (paramnumber*4+16)] - mov registername, dword ptr [esp + ((paramnumber+offsetted)*4+4)] -ENDM - -CDECLBEGINSET MACRO numparams:REQ - CDECLBEGIN numparams - -% _offsetted = numparams - 1 - - IF numparams GE 1 - CDECLPARAM eax,0,%_offsetted - ENDIF - IF numparams GE 2 - CDECLPARAM ebx,1,%_offsetted - ENDIF - IF numparams GE 3 - CDECLPARAM ecx,2,%_offsetted - ENDIF - IF numparams GE 4 - CDECLPARAM edx,3,%_offsetted - ENDIF - IF numparams GE 5 - CDECLPARAM esi,4,%_offsetted - ENDIF - IF numparams GE 6 - CDECLPARAM edi,5,%_offsetted - ENDIF -ENDM - -CDECLENDSET MACRO numparams:REQ - CDECLEND numparams -ENDM - -code segment 'CODE' PUBLIC USE32 -ASSUME cs:CODE,ds:CODE -PUBLIC _dep_begin -_dep_begin: - -ALIGN 16 -PUBLIC _sethlinesizes -_sethlinesizes: -CDECLBEGINSET 3 - - mov byte ptr [machxbits1+2], al - mov byte ptr [machxbits2+2], al - mov byte ptr [machxbits3+2], al - neg al - mov byte ptr [hxsiz1+2], al - mov byte ptr [hxsiz2+2], al - mov byte ptr [hxsiz3+2], al - mov byte ptr [hxsiz4+2], al - mov byte ptr [machnegxbits1+2], al - - mov byte ptr [hysiz1+3], bl - mov byte ptr [hysiz2+3], bl - mov byte ptr [hysiz3+3], bl - mov byte ptr [hysiz4+3], bl - mov byte ptr [hmach3a+2], bl - mov byte ptr [hmach3b+2], bl - mov byte ptr [hmach3c+2], bl - mov byte ptr [hmach3d+2], bl - - mov dword ptr [hoffs1+2], ecx - mov dword ptr [hoffs2+2], ecx - mov dword ptr [hoffs3+2], ecx - mov dword ptr [hoffs4+2], ecx - mov dword ptr [hoffs5+2], ecx - mov dword ptr [hoffs6+2], ecx - mov dword ptr [hoffs7+2], ecx - mov dword ptr [hoffs8+2], ecx - - push edx ;JBF - mov edx, -1 - mov cl, al - sub cl, bl - shr edx, cl - mov dword ptr [hmach2a+1], edx - mov dword ptr [hmach2b+1], edx - mov dword ptr [hmach2c+1], edx - mov dword ptr [hmach2d+1], edx - pop edx ;JBF - -CDECLENDSET 3 - ret - -ALIGN 16 -PUBLIC _prosethlinesizes -_prosethlinesizes: -CDECLBEGINSET 3 - - mov dword ptr [prohbuf-4], ecx - neg eax - mov ecx, eax - sub eax, ebx - mov byte ptr [prohshru-1], al ;bl = 32-al-bl - mov eax, -1 - shr eax, cl - mov ecx, ebx - shl eax, cl - mov dword ptr [prohand-4], eax ;((-1>>(-oal))<>(32-xbits) adc al, 88h 1 1/2 - ;bufplc mov cl, byte ptr [edx+88888888h] 1 1/2 - ;paloffs&255 mov bl, byte ptr [ecx+88888888h] 1 1/2 -ALIGN 16 -PUBLIC _hlineasm4 -_hlineasm4: -CDECLBEGINSET 6 - - push ebp - - lea ebp, [eax+1] - - cmp ebp, 8 - jle shorthline - - test edi, 1 - jnz short skipthe1byte - - mov eax, esi -hxsiz1: shr eax, 26 -hysiz1: shld eax, edx, 6 -hoffs1: mov cl, byte ptr [eax+88888888h] -pal1: mov bl, byte ptr [ecx+88888888h] - sub esi, _asm1 - sub edx, _asm2 - mov byte ptr [edi], bl - dec edi - dec ebp - -skipthe1byte: - test edi, 2 - jnz short skipthe2byte - - mov eax, esi -hxsiz2: shr eax, 26 -hysiz2: shld eax, edx, 6 -hoffs2: mov cl, byte ptr [eax+88888888h] -pal2: mov bh, byte ptr [ecx+88888888h] - sub esi, _asm1 - sub edx, _asm2 - - mov eax, esi -hxsiz3: shr eax, 26 -hysiz3: shld eax, edx, 6 -hoffs3: mov cl, byte ptr [eax+88888888h] -pal3: mov bl, byte ptr [ecx+88888888h] - sub esi, _asm1 - sub edx, _asm2 - mov word ptr [edi-1], bx - sub edi, 2 - sub ebp, 2 - -skipthe2byte: - - mov eax, esi -machxbits1: shl esi, 6 ;xbits -machnegxbits1: shr eax, 32-6 ;32-xbits - mov dl, al - - inc edi - - add ebx, ebx - mov eax, edx - jc beginhline64 - - mov eax, _asm1 -machxbits2: rol eax, 6 ;xbits - mov dword ptr [hmach4a+2], eax - mov dword ptr [hmach4b+2], eax - mov dword ptr [hmach4c+2], eax - mov dword ptr [hmach4d+2], eax - mov ebx, eax - mov eax, _asm2 - mov al, bl - mov dword ptr [hmach1a+2], eax - mov dword ptr [hmach1b+2], eax - mov dword ptr [hmach1c+2], eax - mov dword ptr [hmach1d+2], eax - - mov eax, edx - jmp beginhline64 -ALIGN 16 -prebeginhline64: - mov dword ptr [edi], ebx -beginhline64: - -hmach3a: rol eax, 6 -hmach2a: and eax, 00008888h -hmach4a: sub esi, 88888888h -hmach1a: sbb edx, 88888888h - sub edi, 4 -hoffs4: mov cl, byte ptr [eax+88888888h] - mov eax, edx - -hmach3b: rol eax, 6 -hmach2b: and eax, 00008888h -hmach4b: sub esi, 88888888h -hmach1b: sbb edx, 88888888h -pal4: mov bh, byte ptr [ecx+88888888h] -hoffs5: mov cl, byte ptr [eax+88888888h] - mov eax, edx - -hmach3c: rol eax, 6 -pal5: mov bl, byte ptr [ecx+88888888h] -hmach2c: and eax, 00008888h - shl ebx, 16 -hmach4c: sub esi, 88888888h -hmach1c: sbb edx, 88888888h -hoffs6: mov cl, byte ptr [eax+88888888h] - - mov eax, edx - ;( - -hmach3d: rol eax, 6 -hmach2d: and eax, 00008888h -hmach4d: sub esi, 88888888h -hmach1d: sbb edx, 88888888h -pal6: mov bh, byte ptr [ecx+88888888h] -hoffs7: mov cl, byte ptr [eax+88888888h] - mov eax, edx - sub ebp, 4 - nop -pal7: mov bl, byte ptr [ecx+88888888h] - jnc prebeginhline64 -skipthe4byte: - - test ebp, 2 - jz skipdrawthe2 - rol ebx, 16 - mov word ptr [edi+2], bx - sub edi, 2 -skipdrawthe2: - test ebp, 1 - jz skipdrawthe1 - shr ebx, 24 - mov byte ptr [edi+3], bl -skipdrawthe1: - - pop ebp -CDECLENDSET 6 - ret - -shorthline: - test ebp, ebp - jz endshorthline -begshorthline: - mov eax, esi -hxsiz4: shr eax, 26 -hysiz4: shld eax, edx, 6 -hoffs8: mov cl, byte ptr [eax+88888888h] -pal8: mov bl, byte ptr [ecx+88888888h] - sub esi, _asm1 - sub edx, _asm2 - mov byte ptr [edi], bl - dec edi - dec ebp - jnz begshorthline -endshorthline: - pop ebp -CDECLENDSET 6 - ret - - - ;eax: 00000000 00000000 00000000 temp---- - ;ebx: 00000000 00000000 00000000 temp---- - ;ecx: UUUUUUuu uuuuuuuu uuuuuuuu uuuuuuuu - ;edx: VVVVVVvv vvvvvvvv vvvvvvvv vvvvvvvv - ;esi: cnt----- -------- -------- -------- - ;edi: vid----- -------- -------- -------- - ;ebp: paloffs- -------- -------- -------- - ;esp: ???????? ???????? ???????? ???????? -ALIGN 16 -PUBLIC _prohlineasm4 -_prohlineasm4: -CDECLBEGINSET 6 - - push ebp - - lea ebp, [ecx+88888888h] -prohpala: - mov ecx, esi - lea esi, [eax+1] - sub edi, esi - -prohbeg: - mov eax, ecx - shr eax, 20 -prohshru: - mov ebx, edx - shr ebx, 26 -prohshrv: - and eax, 88888888h -prohand: - movzx eax, byte ptr [eax+ebx+88888888h] -prohbuf: - mov al, [eax+ebp] - sub ecx, _asm1 - sub edx, _asm2 - mov [edi+esi], al - dec esi - jnz prohbeg - - pop ebp -CDECLENDSET 6 - ret - - - -ALIGN 16 -PUBLIC _setupvlineasm -_setupvlineasm: -CDECLBEGINSET 1 - ;First 2 lines for VLINEASM1, rest for VLINEASM4 - mov byte ptr [premach3a+2], al - mov byte ptr [mach3a+2], al - - push ecx - mov byte ptr [machvsh1+2], al ;32-shy - mov byte ptr [machvsh3+2], al ;32-shy - mov byte ptr [machvsh5+2], al ;32-shy - mov byte ptr [machvsh6+2], al ;32-shy - mov ah, al - sub ah, 16 - mov byte ptr [machvsh8+2], ah ;16-shy - neg al - mov byte ptr [machvsh7+2], al ;shy - mov byte ptr [machvsh9+2], al ;shy - mov byte ptr [machvsh10+2], al ;shy - mov byte ptr [machvsh11+2], al ;shy - mov byte ptr [machvsh12+2], al ;shy - mov cl, al - mov eax, 1 - shl eax, cl - dec eax - mov dword ptr [machvsh2+2], eax ;(1<>sh) - ;vplc3 = (ebp<<(32-sh))+((edx&65535)<<(16-sh)) -machvsh5: shl esi, 88h ;32-sh - mov eax, edx -machvsh6: shl ebp, 88h ;32-sh - and edx, 0000ffffh -machvsh7: shr eax, 88h ;sh - add esi, eax -machvsh8: shl edx, 88h ;16-sh - add ebp, edx - mov dword ptr _vplce[12], esi - mov dword ptr _vplce[4], ebp - - pop ebp - -CDECLEND 6 - ret - - ;eax: -------temp1------- - ;ebx: -------temp2------- - ;ecx: ylo4 --------- - ;edx: ylo2 --------- - ;esi: yhi1 yhi2 - ;edi: ---videoplc/cnt---- - ;ebp: yhi3 yhi4 - ;esp: -ALIGN 16 -PUBLIC _provlineasm4 -_provlineasm4: -CDECLBEGIN 6 -CDECLPARAM ecx,0,5 -CDECLPARAM edi,1,5 - - push ebp - - mov eax, dword ptr _ylookup[ecx*4] - add eax, edi - mov dword ptr [promachvline4end1+2], eax - inc eax - mov dword ptr [promachvline4end2+2], eax - inc eax - mov dword ptr [promachvline4end3+2], eax - inc eax - mov dword ptr [promachvline4end4+2], eax - sub eax, 3 - sub edi, eax - - mov eax, dword ptr _bufplce[0] - mov ebx, dword ptr _bufplce[4] - mov ecx, dword ptr _bufplce[8] - mov edx, dword ptr _bufplce[12] - mov dword ptr [promachvbuf1+3], ecx - mov dword ptr [promachvbuf2+3], edx - mov dword ptr [promachvbuf3+3], eax - mov dword ptr [promachvbuf4+3], ebx - - mov eax, dword ptr _palookupoffse[0] - mov ebx, dword ptr _palookupoffse[4] - mov ecx, dword ptr _palookupoffse[8] - mov edx, dword ptr _palookupoffse[12] - mov dword ptr [promachvpal1+2], ecx - mov dword ptr [promachvpal2+2], edx - mov dword ptr [promachvpal3+2], eax - mov dword ptr [promachvpal4+2], ebx - - ; ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ - ;edx: ³v3lo ³v1lo ³ - ; ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄ´ - ;esi: ³v2hi v2lo ³ v3hi³ - ; ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄ´ - ;ebp: ³v0hi v0lo ³ v1hi³ - ; ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ - - mov ebp, dword ptr _vince[0] - mov ebx, dword ptr _vince[4] - mov esi, dword ptr _vince[8] - mov eax, dword ptr _vince[12] - and esi, 0fffffe00h - and ebp, 0fffffe00h -promachvsh9: rol eax, 88h ;sh -promachvsh10: rol ebx, 88h ;sh - mov edx, eax - mov ecx, ebx - shr ecx, 16 - and edx, 0ffff0000h - add edx, ecx - and eax, 000001ffh - and ebx, 000001ffh - add esi, eax - add ebp, ebx - ; - mov eax, edx - and eax, 0ffff0000h - mov dword ptr [promachvinc1+2], eax - mov dword ptr [promachvinc2+2], esi - shl edx, 16 - mov dword ptr [promachvinc3+2], edx - mov dword ptr [promachvinc5+2], ebp - - mov ebp, dword ptr _vplce[0] - mov ebx, dword ptr _vplce[4] - mov esi, dword ptr _vplce[8] - mov eax, dword ptr _vplce[12] - and esi, 0fffffe00h - and ebp, 0fffffe00h -promachvsh11: rol eax, 88h ;sh -promachvsh12: rol ebx, 88h ;sh - mov edx, eax - mov ecx, ebx - shr ecx, 16 - and edx, 0ffff0000h - add edx, ecx - and eax, 000001ffh - and ebx, 000001ffh - add esi, eax - add ebp, ebx - - mov eax, esi - mov ecx, edx - shl ecx, 16 - jmp short probeginvlineasm4 -ALIGN 16 - nop - nop - nop -probeginvlineasm4: -promachvsh1: shr eax, 88h ;32-sh - mov ebx, esi -promachvsh2: and ebx, 00000088h ;(1<>sh) - ;vplc3 = (ebp<<(32-sh))+((edx&65535)<<(16-sh)) -promachvsh5: shl esi, 88h ;32-sh - mov eax, edx -promachvsh6: shl ebp, 88h ;32-sh - and edx, 0000ffffh -promachvsh7: shr eax, 88h ;sh - add esi, eax -promachvsh8: shl edx, 88h ;16-sh - add ebp, edx - mov dword ptr _vplce[12], esi - mov dword ptr _vplce[4], ebp - - pop ebp - -CDECLEND 6 - ret - - -ALIGN 16 -PUBLIC _mvlineasm4 -_mvlineasm4: -CDECLBEGIN 6 -CDECLPARAM ecx,0,5 -CDECLPARAM edi,1,5 - - push ebp - - mov eax, dword ptr _bufplce[0] - mov ebx, dword ptr _bufplce[4] - mov dword ptr [machmv1+2], eax - mov dword ptr [machmv4+2], ebx - mov eax, dword ptr _bufplce[8] - mov ebx, dword ptr _bufplce[12] - mov dword ptr [machmv7+2], eax - mov dword ptr [machmv10+2], ebx - - mov eax, dword ptr _palookupoffse[0] - mov ebx, dword ptr _palookupoffse[4] - mov dword ptr [machmv2+2], eax - mov dword ptr [machmv5+2], ebx - mov eax, dword ptr _palookupoffse[8] - mov ebx, dword ptr _palookupoffse[12] - mov dword ptr [machmv8+2], eax - mov dword ptr [machmv11+2], ebx - - mov eax, dword ptr _vince[0] ;vince - mov ebx, dword ptr _vince[4] - xor al, al - xor bl, bl - mov dword ptr [machmv3+2], eax - mov dword ptr [machmv6+2], ebx - mov eax, dword ptr _vince[8] - mov ebx, dword ptr _vince[12] - mov dword ptr [machmv9+2], eax - mov dword ptr [machmv12+2], ebx - - mov ebx, ecx - mov ecx, dword ptr _vplce[0] - mov edx, dword ptr _vplce[4] - mov esi, dword ptr _vplce[8] - mov ebp, dword ptr _vplce[12] - mov cl, bl - inc cl - inc bh - mov byte ptr _asm3[0], bh -fixchain2ma: sub edi, 320 - - jmp short beginmvlineasm4 -ALIGN 16 -beginmvlineasm4: - dec cl - jz endmvlineasm4 -beginmvlineasm42: - mov eax, ebp - mov ebx, esi -machmv16: shr eax, 32 -machmv15: shr ebx, 32 -machmv12: add ebp, 88888888h ;vince[3] -machmv9: add esi, 88888888h ;vince[2] -machmv10: mov al, byte ptr [eax+88888888h] ;bufplce[3] -machmv7: mov bl, byte ptr [ebx+88888888h] ;bufplce[2] - cmp al, 255 - adc dl, dl - cmp bl, 255 - adc dl, dl -machmv8: mov bl, byte ptr [ebx+88888888h] ;palookupoffs[2] -machmv11: mov bh, byte ptr [eax+88888888h] ;palookupoffs[3] - - mov eax, edx -machmv14: shr eax, 32 - shl ebx, 16 -machmv4: mov al, byte ptr [eax+88888888h] ;bufplce[1] - cmp al, 255 - adc dl, dl -machmv6: add edx, 88888888h ;vince[1] -machmv5: mov bh, byte ptr [eax+88888888h] ;palookupoffs[1] - - mov eax, ecx -machmv13: shr eax, 32 -machmv3: add ecx, 88888888h ;vince[0] -machmv1: mov al, byte ptr [eax+88888888h] ;bufplce[0] - cmp al, 255 - adc dl, dl -machmv2: mov bl, byte ptr [eax+88888888h] ;palookupoffs[0] - - shl dl, 4 - xor eax, eax -fixchain2mb: add edi, 320 - mov al, dl - add eax, offset mvcase0 - jmp eax ;16 byte cases - -ALIGN 16 -endmvlineasm4: - dec byte ptr _asm3[0] - jnz beginmvlineasm42 - - mov dword ptr _vplce[0], ecx - mov dword ptr _vplce[4], edx - mov dword ptr _vplce[8], esi - mov dword ptr _vplce[12], ebp - pop ebp -CDECLEND 6 - ret - - ;5,7,8,8,11,13,12,14,11,13,14,14,12,14,15,7 -ALIGN 16 -mvcase0: - jmp beginmvlineasm4 -ALIGN 16 -mvcase1: - mov byte ptr [edi], bl - jmp beginmvlineasm4 -ALIGN 16 -mvcase2: - mov byte ptr [edi+1], bh - jmp beginmvlineasm4 -ALIGN 16 -mvcase3: - mov word ptr [edi], bx - jmp beginmvlineasm4 -ALIGN 16 -mvcase4: - shr ebx, 16 - mov byte ptr [edi+2], bl - jmp beginmvlineasm4 -ALIGN 16 -mvcase5: - mov byte ptr [edi], bl - shr ebx, 16 - mov byte ptr [edi+2], bl - jmp beginmvlineasm4 -ALIGN 16 - mvcase6: - shr ebx, 8 - mov word ptr [edi+1], bx - jmp beginmvlineasm4 -ALIGN 16 -mvcase7: - mov word ptr [edi], bx - shr ebx, 16 - mov byte ptr [edi+2], bl - jmp beginmvlineasm4 -ALIGN 16 -mvcase8: - shr ebx, 16 - mov byte ptr [edi+3], bh - jmp beginmvlineasm4 -ALIGN 16 -mvcase9: - mov byte ptr [edi], bl - shr ebx, 16 - mov byte ptr [edi+3], bh - jmp beginmvlineasm4 -ALIGN 16 -mvcase10: - mov byte ptr [edi+1], bh - shr ebx, 16 - mov byte ptr [edi+3], bh - jmp beginmvlineasm4 -ALIGN 16 -mvcase11: - mov word ptr [edi], bx - shr ebx, 16 - mov byte ptr [edi+3], bh - jmp beginmvlineasm4 -ALIGN 16 -mvcase12: - shr ebx, 16 - mov word ptr [edi+2], bx - jmp beginmvlineasm4 -ALIGN 16 -mvcase13: - mov byte ptr [edi], bl - shr ebx, 16 - mov word ptr [edi+2], bx - jmp beginmvlineasm4 -ALIGN 16 -mvcase14: - mov byte ptr [edi+1], bh - shr ebx, 16 - mov word ptr [edi+2], bx - jmp beginmvlineasm4 -ALIGN 16 -mvcase15: - mov dword ptr [edi], ebx - jmp beginmvlineasm4 - -ALIGN 16 -PUBLIC _setupspritevline -_setupspritevline: -CDECLBEGINSET 6 - - mov dword ptr [spal+2], eax - - mov eax, esi ;xinc's - shl eax, 16 - mov dword ptr [smach1+2], eax - mov dword ptr [smach4+2], eax - mov eax, esi - sar eax, 16 - add eax, ebx ;watch out with ebx - it's passed - mov dword ptr [smach2+2], eax - add eax, edx - mov dword ptr [smach5+2], eax - - mov dword ptr [smach3+2], ecx ;yinc's - -CDECLENDSET 6 - ret - -ALIGN 16 -PUBLIC _spritevline -_spritevline: -CDECLBEGINSET 6 - jmp short _spritevline_start - ;eax = 0, ebx = x, ecx = cnt, edx = y, esi = yplc, edi = p -prestartsvline: -smach1: add ebx, 88888888h ;xincshl16 - mov al, byte ptr [esi] -smach2: adc esi, 88888888h ;xincshr16+yalwaysinc - -startsvline: -spal: mov al, [eax+88888888h] ;palookup - mov byte ptr [edi], al -fixchain1s: add edi, 320 - -_spritevline_start: -smach3: add edx, 88888888h ;dayinc - dec ecx - ja short prestartsvline ;jump if (no carry (add)) and (not zero (dec))! - jz short endsvline -smach4: add ebx, 88888888h ;xincshl16 - mov al, byte ptr [esi] -smach5: adc esi, 88888888h ;xincshr16+yalwaysinc+daydime - jmp short startsvline -endsvline: -CDECLENDSET 6 - ret - -ALIGN 16 -PUBLIC _msetupspritevline -_msetupspritevline: -CDECLBEGINSET 6 - - mov dword ptr [mspal+2], eax - - mov eax, esi ;xinc's - shl eax, 16 - mov dword ptr [msmach1+2], eax - mov dword ptr [msmach4+2], eax - mov eax, esi - sar eax, 16 - add eax, ebx ;watch out with ebx - it's passed - mov dword ptr [msmach2+2], eax - add eax, edx - mov dword ptr [msmach5+2], eax - - mov dword ptr [msmach3+2], ecx ;yinc's - -CDECLENDSET 6 - ret - -ALIGN 16 -PUBLIC _mspritevline -_mspritevline: -CDECLBEGINSET 6 - jmp short _mspritevline_start - ;eax = 0, ebx = x, ecx = cnt, edx = y, esi = yplc, edi = p -mprestartsvline: -msmach1: add ebx, 88888888h ;xincshl16 - mov al, byte ptr [esi] -msmach2: adc esi, 88888888h ;xincshr16+yalwaysinc - -mstartsvline: - cmp al, 255 - je short mskipsvline -mspal: mov al, [eax+88888888h] ;palookup - mov byte ptr [edi], al -mskipsvline: -mfixchain1s: add edi, 320 - -_mspritevline_start: -msmach3: add edx, 88888888h ;dayinc - dec ecx - ja short mprestartsvline ;jump if (no carry (add)) and (not zero (dec))! - jz short mendsvline -msmach4: add ebx, 88888888h ;xincshl16 - mov al, byte ptr [esi] -msmach5: adc esi, 88888888h ;xincshr16+yalwaysinc+daydime - jmp short mstartsvline -mendsvline: -CDECLENDSET 6 - ret - -ALIGN 16 -PUBLIC _tsetupspritevline -_tsetupspritevline: -CDECLBEGINSET 6 - mov dword ptr [tspal+2], eax - - mov eax, esi ;xinc's - shl eax, 16 - mov dword ptr [tsmach1+2], eax - mov dword ptr [tsmach4+2], eax - mov eax, esi - sar eax, 16 - add eax, ebx ;watch out with ebx - it's passed - mov dword ptr [tsmach2+2], eax - add eax, edx - mov dword ptr [tsmach5+2], eax - - mov dword ptr [tsmach3+2], ecx ;yinc's -CDECLENDSET 6 - ret - -ALIGN 16 -PUBLIC _tspritevline -_tspritevline: -CDECLBEGINSET 6 - ;eax = 0, ebx = x, ecx = cnt, edx = y, esi = yplc, edi = p - push ebp - mov ebp, ebx - xor ebx, ebx - jmp tenterspritevline -ALIGN 16 -tprestartsvline: -tsmach1: add ebp, 88888888h ;xincshl16 - mov al, byte ptr [esi] -tsmach2: adc esi, 88888888h ;xincshr16+yalwaysinc - -tstartsvline: - cmp al, 255 - je short tskipsvline -transrev2: - mov bh, byte ptr [edi] -transrev3: -tspal: mov bl, [eax+88888888h] ;palookup -tmach4: mov al, byte ptr [ebx+88888888h] ;_transluc - mov byte ptr [edi], al -tskipsvline: -tfixchain1s: add edi, 320 - -tenterspritevline: -tsmach3: add edx, 88888888h ;dayinc - dec ecx - ja short tprestartsvline ;jump if (no carry (add)) and (not zero (dec))! - jz short tendsvline -tsmach4: add ebp, 88888888h ;xincshl16 - mov al, byte ptr [esi] -tsmach5: adc esi, 88888888h ;xincshr16+yalwaysinc+daydime - jmp short tstartsvline -tendsvline: - pop ebp -CDECLENDSET 6 - ret - -ALIGN 16 -PUBLIC _msethlineshift -_msethlineshift: -CDECLBEGINSET 2 - neg al - mov byte ptr [msh1d+2], al - mov byte ptr [msh2d+3], bl - mov byte ptr [msh3d+2], al - mov byte ptr [msh4d+3], bl - mov byte ptr [msh5d+2], al - mov byte ptr [msh6d+3], bl -CDECLENDSET 2 - ret - -ALIGN 16 -PUBLIC _mhline -_mhline: -CDECLBEGINSET 6 - ;_asm1 = bxinc - ;_asm2 = byinc - ;_asm3 = shadeoffs - ;eax = picoffs - ;ebx = bx - ;ecx = cnt - ;edx = ? - ;esi = by - ;edi = p - - mov dword ptr [mmach1d+2], eax - mov dword ptr [mmach5d+2], eax - mov dword ptr [mmach9d+2], eax - mov eax, _asm3 - mov dword ptr [mmach2d+2], eax - mov dword ptr [mmach2da+2], eax - mov dword ptr [mmach2db+2], eax - mov dword ptr [mmach6d+2], eax - mov dword ptr [mmach10d+2], eax - mov eax, _asm1 - mov dword ptr [mmach3d+2], eax - mov dword ptr [mmach7d+2], eax - mov eax, _asm2 - mov dword ptr [mmach4d+2], eax - mov dword ptr [mmach8d+2], eax - jmp short _mhlineskipmodify_nosetup - -ALIGN 16 -PUBLIC _mhlineskipmodify -_mhlineskipmodify: -CDECLBEGINSET 6 -_mhlineskipmodify_nosetup: - - push ebp - - xor eax, eax - mov ebp, ebx - - test ecx, 00010000h - jnz short mbeghline - -msh1d: shr ebx, 26 -msh2d: shld ebx, esi, 6 - add ebp, _asm1 -mmach9d: mov al, byte ptr [ebx+88888888h] ;picoffs - add esi, _asm2 - cmp al, 255 - je mskip5 - - mmach10d: mov cl, byte ptr [eax+88888888h] ;shadeoffs - mov byte ptr [edi], cl -mskip5: - inc edi - sub ecx, 65536 - jc mendhline - jmp short mbeghline - -ALIGN 16 -mpreprebeghline: ;1st only - mov al, cl -mmach2d: mov al, byte ptr [eax+88888888h] ;shadeoffs - mov byte ptr [edi], al - -mprebeghline: - add edi, 2 - sub ecx, 131072 - jc short mendhline -mbeghline: -mmach3d: lea ebx, [ebp+88888888h] ;bxinc -msh3d: shr ebp, 26 -msh4d: shld ebp, esi, 6 -mmach4d: add esi, 88888888h ;byinc -mmach1d: mov cl, byte ptr [ebp+88888888h] ;picoffs -mmach7d: lea ebp, [ebx+88888888h] ;bxinc - -msh5d: shr ebx, 26 -msh6d: shld ebx, esi, 6 -mmach8d: add esi, 88888888h ;byinc -mmach5d: mov ch, byte ptr [ebx+88888888h] ;picoffs - - cmp cl, 255 - je short mskip1 - cmp ch, 255 - je short mpreprebeghline - - mov al, cl ;BOTH -mmach2da: mov bl, byte ptr [eax+88888888h] ;shadeoffs - mov al, ch -mmach2db: mov bh, byte ptr [eax+88888888h] ;shadeoffs - mov word ptr [edi], bx - add edi, 2 - sub ecx, 131072 - jnc short mbeghline - jmp mendhline -mskip1: ;2nd only - cmp ch, 255 - je short mprebeghline - - mov al, ch -mmach6d: mov al, byte ptr [eax+88888888h] ;shadeoffs - mov byte ptr [edi+1], al - add edi, 2 - sub ecx, 131072 - jnc short mbeghline -mendhline: - - pop ebp -CDECLENDSET 6 - ret - -ALIGN 16 -PUBLIC _tsethlineshift -_tsethlineshift: -CDECLBEGINSET 2 - neg al - mov byte ptr [tsh1d+2], al - mov byte ptr [tsh2d+3], bl - mov byte ptr [tsh3d+2], al - mov byte ptr [tsh4d+3], bl - mov byte ptr [tsh5d+2], al - mov byte ptr [tsh6d+3], bl -CDECLENDSET 2 - ret - -ALIGN 16 -PUBLIC _thline -_thline: -CDECLBEGINSET 6 - ;_asm1 = bxinc - ;_asm2 = byinc - ;_asm3 = shadeoffs - ;eax = picoffs - ;ebx = bx - ;ecx = cnt - ;edx = ? - ;esi = by - ;edi = p - - mov dword ptr [tmach1d+2], eax - mov dword ptr [tmach5d+2], eax - mov dword ptr [tmach9d+2], eax - mov eax, _asm3 - mov dword ptr [tmach2d+2], eax - mov dword ptr [tmach6d+2], eax - mov dword ptr [tmach10d+2], eax - mov eax, _asm1 - mov dword ptr [tmach3d+2], eax - mov dword ptr [tmach7d+2], eax - mov eax, _asm2 - mov dword ptr [tmach4d+2], eax - mov dword ptr [tmach8d+2], eax - jmp short _thlineskipmodify_nosetup - -ALIGN 16 -PUBLIC _thlineskipmodify -_thlineskipmodify: -CDECLBEGINSET 6 -_thlineskipmodify_nosetup: - - push ebp - - xor eax, eax - xor edx, edx - mov ebp, ebx - - test ecx, 00010000h - jnz short tbeghline - -tsh1d: shr ebx, 26 -tsh2d: shld ebx, esi, 6 - add ebp, _asm1 -tmach9d: mov al, byte ptr [ebx+88888888h] ;picoffs - add esi, _asm2 - cmp al, 255 - je tskip5 - -transrev4: -tmach10d: mov dl, byte ptr [eax+88888888h] ;shadeoffs -transrev5: - mov dh, byte ptr [edi] -tmach1: mov al, byte ptr [edx+88888888h] ;_transluc - mov byte ptr [edi], al -tskip5: - inc edi - sub ecx, 65536 - jc tendhline - jmp short tbeghline - -ALIGN 16 -tprebeghline: - add edi, 2 - sub ecx, 131072 - jc short tendhline -tbeghline: -tmach3d: lea ebx, [ebp+88888888h] ;bxinc -tsh3d: shr ebp, 26 -tsh4d: shld ebp, esi, 6 -tmach4d: add esi, 88888888h ;byinc -tmach1d: mov cl, byte ptr [ebp+88888888h] ;picoffs -tmach7d: lea ebp, [ebx+88888888h] ;bxinc - -tsh5d: shr ebx, 26 -tsh6d: shld ebx, esi, 6 -tmach8d: add esi, 88888888h ;byinc -tmach5d: mov ch, byte ptr [ebx+88888888h] ;picoffs - - cmp cx, 0ffffh - je short tprebeghline - - mov bx, word ptr [edi] - - cmp cl, 255 - je short tskip1 - mov al, cl -transrev6: -tmach2d: mov dl, byte ptr [eax+88888888h] ;shadeoffs -transrev7: - mov dh, bl -tmach2: mov al, byte ptr [edx+88888888h] ;_transluc - mov byte ptr [edi], al - - cmp ch, 255 - je short tskip2 -tskip1: - mov al, ch -transrev8: -tmach6d: mov dl, byte ptr [eax+88888888h] ;shadeoffs -transrev9: - mov dh, bh -tmach3: mov al, byte ptr [edx+88888888h] ;_transluc - mov byte ptr [edi+1], al -tskip2: - - add edi, 2 - sub ecx, 131072 - jnc tbeghline -tendhline: - - pop ebp -CDECLENDSET 6 - ret - - - ;eax=shiftval, ebx=palookup1, ecx=palookup2 -ALIGN 16 -PUBLIC _setuptvlineasm2 -_setuptvlineasm2: -CDECLBEGINSET 3 - mov byte ptr [tran2shra+2], al - mov byte ptr [tran2shrb+2], al - mov dword ptr [tran2pala+2], ebx - mov dword ptr [tran2palb+2], ecx - mov dword ptr [tran2palc+2], ebx - mov dword ptr [tran2pald+2], ecx -CDECLENDSET 3 - ret - - ;Pass: eax=vplc2, ebx=vinc1, ecx=bufplc1, edx=bufplc2, esi=vplc1, edi=p - ; _asm1=vinc2, _asm2=pend - ;Return: _asm1=vplc1, _asm2=vplc2 -ALIGN 16 -PUBLIC _tvlineasm2 -_tvlineasm2: -CDECLBEGINSET 6 - - push ebp - - mov ebp, eax - - mov dword ptr [tran2inca+2], ebx - mov eax, _asm1 - mov dword ptr [tran2incb+2], eax - - mov dword ptr [tran2bufa+2], ecx ;bufplc1 - mov dword ptr [tran2bufb+2], edx ;bufplc2 - - mov eax, _asm2 - sub edi, eax - mov dword ptr [tran2edia+3], eax - mov dword ptr [tran2edic+2], eax - inc eax - mov dword ptr [tran2edie+2], eax -fixchaint2a: sub eax, 320 - mov dword ptr [tran2edif+2], eax - dec eax - mov dword ptr [tran2edib+3], eax - mov dword ptr [tran2edid+2], eax - - xor ecx, ecx - xor edx, edx - jmp short begintvline2 - - ;eax 0000000000 temp temp - ;ebx 0000000000 odat2 odat1 - ;ecx 0000000000000000 ndat1 - ;edx 0000000000000000 ndat2 - ;esi vplc1 - ;edi videoplc-------------- - ;ebp vplc2 - -ALIGN 16 - ;LEFT ONLY -skipdraw2: -transrev10: -tran2edic: mov ah, byte ptr [edi+88888888h] ;getpixel -transrev11: -tran2palc: mov al, byte ptr [ecx+88888888h] ;palookup1 -fixchaint2d: add edi, 320 -tran2trac: mov bl, byte ptr [eax+88888888h] ;_transluc -tran2edid: mov byte ptr [edi+88888888h-320], bl ;drawpixel - jnc short begintvline2 - jmp endtvline2 - -skipdraw1: - cmp dl, 255 - jne short skipdraw3 -fixchaint2b: add edi, 320 - jc short endtvline2 - -begintvline2: - mov eax, esi -tran2shra: shr eax, 88h ;globalshift - mov ebx, ebp -tran2shrb: shr ebx, 88h ;globalshift -tran2inca: add esi, 88888888h ;vinc1 -tran2incb: add ebp, 88888888h ;vinc2 -tran2bufa: mov cl, byte ptr [eax+88888888h] ;bufplc1 - cmp cl, 255 -tran2bufb: mov dl, byte ptr [ebx+88888888h] ;bufplc2 - je short skipdraw1 - cmp dl, 255 - je short skipdraw2 - - ;mov ax The transluscent reverse of both! - ;mov bl, ah - ;mov ah - ;mov bh - - ;BOTH -transrev12: -tran2edia: mov bx, word ptr [edi+88888888h] ;getpixels -transrev13: - mov ah, bl -transrev14: -tran2pala: mov al, byte ptr [ecx+88888888h] ;palookup1 -transrev15: -tran2palb: mov bl, byte ptr [edx+88888888h] ;palookup2 -fixchaint2c: add edi, 320 -tran2traa: mov al, byte ptr [eax+88888888h] ;_transluc -tran2trab: mov ah, byte ptr [ebx+88888888h] ;_transluc -tran2edib: mov word ptr [edi+88888888h-320], ax ;drawpixels - jnc short begintvline2 - jmp short endtvline2 - - ;RIGHT ONLY -skipdraw3: -transrev16: -tran2edie: mov ah, byte ptr [edi+88888889h] ;getpixel -transrev17: -tran2pald: mov al, byte ptr [edx+88888888h] ;palookup2 -fixchaint2e: add edi, 320 -tran2trad: mov bl, byte ptr [eax+88888888h] ;_transluc -tran2edif: mov byte ptr [edi+88888889h-320], bl ;drawpixel - jnc short begintvline2 - -endtvline2: - mov _asm1, esi - mov _asm2, ebp - - pop ebp - -CDECLENDSET 6 - ret - - -BITSOFPRECISION equ 3 -BITSOFPRECISIONPOW equ 8 - -;Double-texture mapping with palette lookup -;eax: ylo1------------|----dat|----dat -;ebx: ylo2--------------------|----cnt -;ecx: 000000000000000000000000|---temp -;edx: xhi1-xlo1---------------|---yhi1 -;esi: xhi2-xlo2---------------|---yhi2 -;edi: ------------------------videopos -;ebp: ----------------------------temp - -ALIGN 16 -PUBLIC _setupslopevlin2 -_setupslopevlin2: -CDECLBEGINSET 6 - - mov dword ptr [slop3+2], edx ;ptr - mov dword ptr [slop7+2], edx ;ptr - mov dword ptr [slop4+2], esi ;tptr - mov dword ptr [slop8+2], esi ;tptr - mov byte ptr [slop2+2], ah ;ybits - mov byte ptr [slop6+2], ah ;ybits - mov dword ptr [slop9+2], edi ;pinc - - mov edx, 1 - mov cl, al - add cl, ah - shl edx, cl - dec edx - mov cl, ah - ror edx, cl - - mov dword ptr [slop1+2], edx ;ybits...xbits - mov dword ptr [slop5+2], edx ;ybits...xbits - -CDECLENDSET 6 - ret - -ALIGN 16 -PUBLIC _slopevlin2 -_slopevlin2: -CDECLBEGINSET 6 - - push ebp - xor ecx, ecx - -slopevlin2begin: - mov ebp, edx -slop1: and ebp, 88000088h ;ybits...xbits -slop2: rol ebp, 6 ;ybits - add eax, _asm1 ;xinc1<>(32-xbits)) -slop3: mov cl, byte ptr [ebp+88888888h] ;bufplc - - mov ebp, esi -slop4: mov al, byte ptr [ecx+88888888h] ;paloffs -slop5: and ebp, 88000088h ;ybits...xbits -slop6: rol ebp, 6 ;ybits - add ebx, _asm3 ;xinc2<>(32-xbits)) -slop8: mov ah, byte ptr [ecx+88888888h] ;paloffs - - dec bl - mov word ptr [edi], ax -slop9: lea edi, [edi+88888888h] ;pinc - jnz short slopevlin2begin - - pop ebp - mov eax, edi - -CDECLENDSET 6 - ret - - -ALIGN 16 -PUBLIC _setupslopevlin -_setupslopevlin: -CDECLBEGINSET 3 - - mov dword ptr [slopmach3+3], ebx ;ptr - mov dword ptr [slopmach5+2], ecx ;pinc - neg ecx - mov dword ptr [slopmach6+2], ecx ;-pinc - - mov edx, 1 - mov cl, al - shl edx, cl - dec edx - mov cl, ah - shl edx, cl - mov dword ptr [slopmach7+2], edx - - neg ah - mov byte ptr [slopmach2+2], ah - - sub ah, al - mov byte ptr [slopmach1+2], ah - - fild dword ptr _asm1 - fstp dword ptr _asm2 - -CDECLENDSET 3 - ret - -ALIGN 16 -PUBLIC _slopevlin -_slopevlin: -CDECLBEGINSET 6 - - mov _ebpbak, ebp - mov _espbak, esp - - sub ecx, esp - mov dword ptr [slopmach4+3], ecx - - fild dword ptr _asm3 -slopmach6: lea ebp, [eax+88888888h] - fadd dword ptr _asm2 - - mov _asm1, ebx - shl ebx, 3 - - mov eax, _globalx3 - mov ecx, _globaly3 - imul eax, ebx - imul ecx, ebx - add esi, eax - add edi, ecx - - mov ebx, edx - jmp short bigslopeloop -ALIGN 16 -bigslopeloop: - fst dword ptr _fpuasm - - mov eax, _fpuasm - add eax, eax - sbb edx, edx - mov ecx, eax - shr ecx, 24 - and eax, 00ffe000h - shr eax, 11 - sub cl, 2 - mov eax, dword ptr _reciptable[eax] - shr eax, cl - xor eax, edx - mov edx, _asm1 - mov ecx, _globalx3 - mov _asm1, eax - sub eax, edx - mov edx, _globaly3 - imul ecx, eax - imul eax, edx - - fadd dword ptr _asm2 - - cmp ebx, BITSOFPRECISIONPOW - mov _asm4, ebx - mov cl, bl - jl short slopeskipmin - mov cl, BITSOFPRECISIONPOW -slopeskipmin: - -;eax: yinc............. -;ebx: 0 0 0 ? -;ecx: xinc......... cnt -;edx: ? -;esi: xplc............. -;edi: yplc............. -;ebp: videopos - - mov ebx, esi - mov edx, edi - -beginnerslopeloop: -slopmach1: shr ebx, 20 - add esi, ecx -slopmach2: shr edx, 26 -slopmach7: and ebx, 88888888h - add edi, eax -slopmach5: add ebp, 88888888h ;pinc -slopmach3: mov dl, byte ptr [ebx+edx+88888888h] ;ptr -slopmach4: mov ebx, dword ptr [esp+88888888h] - sub esp, 4 - dec cl - mov al, byte ptr [ebx+edx] ;tptr - mov ebx, esi - mov [ebp], al - mov edx, edi - jnz short beginnerslopeloop - - mov ebx, _asm4 - sub ebx, BITSOFPRECISIONPOW - jg bigslopeloop - - ffree st(0) - - mov esp, _espbak - mov ebp, _ebpbak - -CDECLENDSET 6 - ret - - -ALIGN 16 -PUBLIC _setuprhlineasm4 -_setuprhlineasm4: -CDECLBEGINSET 6 - - mov dword ptr [rmach1a+2], eax - mov dword ptr [rmach1b+2], eax - mov dword ptr [rmach1c+2], eax - mov dword ptr [rmach1d+2], eax - mov dword ptr [rmach1e+2], eax - - mov dword ptr [rmach2a+2], ebx - mov dword ptr [rmach2b+2], ebx - mov dword ptr [rmach2c+2], ebx - mov dword ptr [rmach2d+2], ebx - mov dword ptr [rmach2e+2], ebx - - mov dword ptr [rmach3a+2], ecx - mov dword ptr [rmach3b+2], ecx - mov dword ptr [rmach3c+2], ecx - mov dword ptr [rmach3d+2], ecx - mov dword ptr [rmach3e+2], ecx - - mov dword ptr [rmach4a+2], edx - mov dword ptr [rmach4b+2], edx - mov dword ptr [rmach4c+2], edx - mov dword ptr [rmach4d+2], edx - mov dword ptr [rmach4e+2], edx - - mov dword ptr [rmach5a+2], esi - mov dword ptr [rmach5b+2], esi - mov dword ptr [rmach5c+2], esi - mov dword ptr [rmach5d+2], esi - mov dword ptr [rmach5e+2], esi - -CDECLENDSET 6 - ret - - ;Non power of 2, non masking, with palookup method #1 (6 clock cycles) - ;eax: dat dat dat dat - ;ebx: bufplc - ;ecx: 0 dat - ;edx: xlo - ;esi: ylo - ;edi: videopos/cnt - ;ebp: tempvar - ;esp: -ALIGN 16 -PUBLIC _rhlineasm4 -_rhlineasm4: -CDECLBEGINSET 6 - - push ebp - - cmp eax, 0 - jle endrhline - - lea ebp, [edi-4] - sub ebp, eax - mov dword ptr [rmach6a+2], ebp - add ebp, 3 - mov dword ptr [rmach6b+2], ebp - mov edi, eax - test edi, 3 - jz short begrhline - jmp short startrhline1 - -ALIGN 16 -startrhline1: - mov cl, byte ptr [ebx] ;bufplc -rmach1e: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmach2e: sub esi, 88888888h ;ylo -rmach3e: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmach4e: mov al, byte ptr [ecx+88888888h] ;palookup -rmach5e: and ebp, 88888888h ;tilesizy -rmach6b: mov byte ptr [edi+88888888h], al ;vidcntoffs - sub ebx, ebp - dec edi - test edi, 3 - jnz short startrhline1 - test edi, edi - jz endrhline - -begrhline: - mov cl, byte ptr [ebx] ;bufplc -rmach1a: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmach2a: sub esi, 88888888h ;ylo -rmach3a: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmach5a: and ebp, 88888888h ;tilesizy - sub ebx, ebp - -rmach1b: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmach4a: mov ah, byte ptr [ecx+88888888h] ;palookup - mov cl, byte ptr [ebx] ;bufplc -rmach2b: sub esi, 88888888h ;ylo -rmach3b: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmach5b: and ebp, 88888888h ;tilesizy -rmach4b: mov al, byte ptr [ecx+88888888h] ;palookup - sub ebx, ebp - - shl eax, 16 - - mov cl, byte ptr [ebx] ;bufplc -rmach1c: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmach2c: sub esi, 88888888h ;ylo -rmach3c: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmach5c: and ebp, 88888888h ;tilesizy - sub ebx, ebp - -rmach1d: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmach4c: mov ah, byte ptr [ecx+88888888h] ;palookup - mov cl, byte ptr [ebx] ;bufplc -rmach2d: sub esi, 88888888h ;ylo -rmach3d: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmach5d: and ebp, 88888888h ;tilesizy -rmach4d: mov al, byte ptr [ecx+88888888h] ;palookup - sub ebx, ebp - -rmach6a: mov dword ptr [edi+88888888h], eax ;vidcntoffs - sub edi, 4 - jnz begrhline -endrhline: - pop ebp - -CDECLENDSET 6 - ret - -ALIGN 16 -PUBLIC _setuprmhlineasm4 -_setuprmhlineasm4: -CDECLBEGINSET 6 - mov dword ptr [rmmach1+2], eax - mov dword ptr [rmmach2+2], ebx - mov dword ptr [rmmach3+2], ecx - mov dword ptr [rmmach4+2], edx - mov dword ptr [rmmach5+2], esi -CDECLENDSET 6 - ret - -ALIGN 16 -PUBLIC _rmhlineasm4 -_rmhlineasm4: -CDECLBEGINSET 6 - - push ebp - - cmp eax, 0 - jle short endrmhline - - lea ebp, [edi-1] - sub ebp, eax - mov dword ptr [rmmach6+2], ebp - mov edi, eax - jmp short begrmhline - -ALIGN 16 -begrmhline: - mov cl, byte ptr [ebx] ;bufplc -rmmach1: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmmach2: sub esi, 88888888h ;ylo -rmmach3: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmmach5: and ebp, 88888888h ;tilesizy - cmp cl, 255 - je short rmskip -rmmach4: mov al, byte ptr [ecx+88888888h] ;palookup -rmmach6: mov byte ptr [edi+88888888h], al ;vidcntoffs -rmskip: - sub ebx, ebp - dec edi - jnz short begrmhline -endrmhline: - pop ebp - -CDECLENDSET 6 - ret - -ALIGN 16 -PUBLIC _setupqrhlineasm4 -_setupqrhlineasm4: -CDECLBEGINSET 6 - - mov dword ptr [qrmach2e+2], ebx - mov dword ptr [qrmach3e+2], ecx - xor edi, edi - sub edi, ecx - mov dword ptr [qrmach7a+2], edi - mov dword ptr [qrmach7b+2], edi - - add ebx, ebx - adc ecx, ecx - mov dword ptr [qrmach2a+2], ebx - mov dword ptr [qrmach2b+2], ebx - mov dword ptr [qrmach3a+2], ecx - mov dword ptr [qrmach3b+2], ecx - - mov dword ptr [qrmach4a+2], edx - mov dword ptr [qrmach4b+2], edx - mov dword ptr [qrmach4c+2], edx - mov dword ptr [qrmach4d+2], edx - mov dword ptr [qrmach4e+2], edx - -CDECLENDSET 6 - ret - - ;Non power of 2, non masking, with palookup method (FASTER BUT NO SBB'S) - ;eax: dat dat dat dat - ;ebx: bufplc - ;ecx: 0 dat - ;edx: 0 dat - ;esi: ylo - ;edi: videopos/cnt - ;ebp: ? - ;esp: -ALIGN 16 -PUBLIC _qrhlineasm4 ;4 pixels in 9 cycles! 2.25 cycles/pixel -_qrhlineasm4: -CDECLBEGINSET 6 - - push ebp - - cmp eax, 0 - jle endqrhline - - mov ebp, eax - test ebp, 3 - jz short skipqrhline1 - jmp short startqrhline1 - -ALIGN 16 -startqrhline1: - mov cl, byte ptr [ebx] ;bufplc - dec edi -qrmach2e: sub esi, 88888888h ;ylo - dec ebp -qrmach3e: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -qrmach4e: mov al, byte ptr [ecx+88888888h] ;palookup - mov byte ptr [edi], al ;vidcntoffs - test ebp, 3 - jnz short startqrhline1 - test ebp, ebp - jz short endqrhline - -skipqrhline1: - mov cl, byte ptr [ebx] ;bufplc - jmp short begqrhline -ALIGN 16 -begqrhline: -qrmach7a: mov dl, byte ptr [ebx+88888888h] ;bufplc -qrmach2a: sub esi, 88888888h ;ylo -qrmach3a: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -qrmach4a: mov ah, byte ptr [ecx+88888888h] ;palookup -qrmach4b: mov al, byte ptr [edx+88888888h] ;palookup - sub edi, 4 - shl eax, 16 - mov cl, byte ptr [ebx] ;bufplc -qrmach7b: mov dl, byte ptr [ebx+88888888h] ;bufplc -qrmach2b: sub esi, 88888888h ;ylo -qrmach3b: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -qrmach4c: mov ah, byte ptr [ecx+88888888h] ;palookup -qrmach4d: mov al, byte ptr [edx+88888888h] ;palookup - mov cl, byte ptr [ebx] ;bufplc - mov dword ptr [edi], eax - sub ebp, 4 - jnz short begqrhline - -endqrhline: - pop ebp - -CDECLENDSET 6 - ret - - -PUBLIC _setupdrawslab -_setupdrawslab: -CDECLBEGINSET 2 - - mov dword ptr [voxbpl1+2], eax - mov dword ptr [voxbpl2+2], eax - mov dword ptr [voxbpl3+2], eax - mov dword ptr [voxbpl4+2], eax - mov dword ptr [voxbpl5+2], eax - mov dword ptr [voxbpl6+2], eax - mov dword ptr [voxbpl7+2], eax - mov dword ptr [voxbpl8+2], eax - - mov dword ptr [voxpal1+2], ebx - mov dword ptr [voxpal2+2], ebx - mov dword ptr [voxpal3+2], ebx - mov dword ptr [voxpal4+2], ebx - mov dword ptr [voxpal5+2], ebx - mov dword ptr [voxpal6+2], ebx - mov dword ptr [voxpal7+2], ebx - mov dword ptr [voxpal8+2], ebx - -CDECLENDSET 2 - ret - -ALIGN 16 -PUBLIC _drawslab -_drawslab: -CDECLBEGINSET 6 - - push ebp - cmp eax, 2 - je voxbegdraw2 - ja voxskip2 - xor eax, eax -voxbegdraw1: - mov ebp, ebx - shr ebp, 16 - add ebx, edx - dec ecx - mov al, byte ptr [esi+ebp] -voxpal1: mov al, byte ptr [eax+88888888h] - mov byte ptr [edi], al -voxbpl1: lea edi, [edi+88888888h] - jnz voxbegdraw1 - pop ebp - -CDECLENDSET 6 - ret - -voxbegdraw2: - mov ebp, ebx - shr ebp, 16 - add ebx, edx - xor eax, eax - dec ecx - mov al, byte ptr [esi+ebp] -voxpal2: mov al, byte ptr [eax+88888888h] - mov ah, al - mov word ptr [edi], ax -voxbpl2: lea edi, [edi+88888888h] - jnz voxbegdraw2 - pop ebp - -CDECLENDSET 6 - ret - -voxskip2: - cmp eax, 4 - jne voxskip4 - xor eax, eax -voxbegdraw4: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte ptr [esi+ebp] -voxpal3: mov al, byte ptr [eax+88888888h] - mov ah, al - shl eax, 8 - mov al, ah - shl eax, 8 - mov al, ah - mov dword ptr [edi], eax -voxbpl3: add edi, 88888888h - dec ecx - jnz voxbegdraw4 - pop ebp - -CDECLENDSET 6 - ret - -voxskip4: - add eax, edi - - test edi, 1 - jz voxskipslab1 - cmp edi, eax - je voxskipslab1 - - push eax - push ebx - push ecx - push edi -voxbegslab1: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte ptr [esi+ebp] -voxpal4: mov al, byte ptr [eax+88888888h] - mov byte ptr [edi], al -voxbpl4: add edi, 88888888h - dec ecx - jnz voxbegslab1 - pop edi - pop ecx - pop ebx - pop eax - inc edi - -voxskipslab1: - push eax - test edi, 2 - jz voxskipslab2 - dec eax - cmp edi, eax - jge voxskipslab2 - - push ebx - push ecx - push edi -voxbegslab2: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte ptr [esi+ebp] -voxpal5: mov al, byte ptr [eax+88888888h] - mov ah, al - mov word ptr [edi], ax -voxbpl5: add edi, 88888888h - dec ecx - jnz voxbegslab2 - pop edi - pop ecx - pop ebx - add edi, 2 - -voxskipslab2: - mov eax, [esp] - - sub eax, 3 - cmp edi, eax - jge voxskipslab3 - -voxprebegslab3: - push ebx - push ecx - push edi -voxbegslab3: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte ptr [esi+ebp] -voxpal6: mov al, byte ptr [eax+88888888h] - mov ah, al - shl eax, 8 - mov al, ah - shl eax, 8 - mov al, ah - mov dword ptr [edi], eax -voxbpl6: add edi, 88888888h - dec ecx - jnz voxbegslab3 - pop edi - pop ecx - pop ebx - add edi, 4 - - mov eax, [esp] - - sub eax, 3 - cmp edi, eax - jl voxprebegslab3 - -voxskipslab3: - mov eax, [esp] - - dec eax - cmp edi, eax - jge voxskipslab4 - - push ebx - push ecx - push edi -voxbegslab4: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte ptr [esi+ebp] -voxpal7: mov al, byte ptr [eax+88888888h] - mov ah, al - mov word ptr [edi], ax -voxbpl7: add edi, 88888888h - dec ecx - jnz voxbegslab4 - pop edi - pop ecx - pop ebx - add edi, 2 - -voxskipslab4: - pop eax - - cmp edi, eax - je voxskipslab5 - -voxbegslab5: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte ptr [esi+ebp] -voxpal8: mov al, byte ptr [eax+88888888h] - mov byte ptr [edi], al -voxbpl8: add edi, 88888888h - dec ecx - jnz voxbegslab5 - -voxskipslab5: - pop ebp - -CDECLENDSET 6 - ret - -;modify: loinc -;eax: | dat | dat | dat | dat | -;ebx: | loplc1 | -;ecx: | loplc2 | cnthi | cntlo | -;edx: |--------|--------|--------| hiplc1 | -;esi: |--------|--------|--------| hiplc2 | -;edi: |--------|--------|--------| vidplc | -;ebp: |--------|--------|--------| hiinc | - -PUBLIC _stretchhline -_stretchhline: -CDECLBEGINSET 6 - - push ebp - - mov eax, ebx - shl ebx, 16 - sar eax, 16 - and ecx, 0000ffffh - or ecx, ebx - - add esi, eax - mov eax, edx - mov edx, esi - - mov ebp, eax - shl eax, 16 - sar ebp, 16 - - add ecx, eax - adc esi, ebp - - add eax, eax - adc ebp, ebp - mov dword ptr [loinc1+2], eax - mov dword ptr [loinc2+2], eax - mov dword ptr [loinc3+2], eax - mov dword ptr [loinc4+2], eax - - inc ch - - jmp begloop - -begloop: - mov al, [edx] -loinc1: sub ebx, 88888888h - sbb edx, ebp - mov ah, [esi] -loinc2: sub ecx, 88888888h - sbb esi, ebp - sub edi, 4 - shl eax, 16 -loinc3: sub ebx, 88888888h - mov al, [edx] - sbb edx, ebp - mov ah, [esi] -loinc4: sub ecx, 88888888h - sbb esi, ebp - mov [edi], eax - dec cl - jnz begloop - dec ch - jnz begloop - - pop ebp - -CDECLENDSET 6 - ret - - -PUBLIC _mmxoverlay -_mmxoverlay: - push ebx ;JBF - push ecx ;JBF - push edx ;JBF - - pushfd ;Check if CPUID is available - pop eax - mov ebx, eax - xor eax, 00200000h - push eax - popfd - pushfd - pop eax - cmp eax, ebx - je pentium - xor eax, eax - dw 0a20fh - test eax, eax - jz pentium - mov eax, 1 - dw 0a20fh - and eax, 00000f00h - test edx, 00800000h ;Check if MMX is available - jz nommx - cmp eax, 00000600h ;Check if P6 Family or not - jae pentiumii - jmp pentiummmx -nommx: - cmp eax, 00000600h ;Check if P6 Family or not - jae pentiumpro -pentium: - - pop edx ;JBF - pop ecx ;JBF - pop ebx ;JBF - ret - -;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -;³ PENTIUM II Overlays ³ -;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ -pentiumii: - ;Hline overlay (MMX doens't help) - mov byte ptr [_sethlinesizes], 0e9h - mov dword ptr [_sethlinesizes+1], (offset _prosethlinesizes)-(offset _sethlinesizes)-5 - mov byte ptr [_setpalookupaddress], 0e9h - mov dword ptr [_setpalookupaddress+1], (offset _prosetpalookupaddress)-(offset _setpalookupaddress)-5 - mov byte ptr [_setuphlineasm4], 0c3h ;ret (no code required) - mov byte ptr [_hlineasm4], 0e9h - mov dword ptr [_hlineasm4+1], (offset _prohlineasm4)-(offset _hlineasm4)-5 - - ;Vline overlay - mov byte ptr [_setupvlineasm], 0e9h - mov dword ptr [_setupvlineasm+1], (offset _prosetupvlineasm)-(offset _setupvlineasm)-5 - mov byte ptr [_vlineasm4], 0e9h - mov dword ptr [_vlineasm4+1], (offset _provlineasm4)-(offset _vlineasm4)-5 - - pop edx ;JBF - pop ecx ;JBF - pop ebx ;JBF - ret - -;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -;³ PENTIUM MMX Overlays ³ -;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ -pentiummmx: - pop edx ;JBF - pop ecx ;JBF - pop ebx ;JBF - ret - -;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -;³ PENTIUM PRO Overlays ³ -;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ -pentiumpro: - ;Hline overlay (MMX doens't help) - mov byte ptr [_sethlinesizes], 0e9h - mov dword ptr [_sethlinesizes+1], (offset _prosethlinesizes)-(offset _sethlinesizes)-5 - mov byte ptr [_setpalookupaddress], 0e9h - mov dword ptr [_setpalookupaddress+1], (offset _prosetpalookupaddress)-(offset _setpalookupaddress)-5 - mov byte ptr [_setuphlineasm4], 0c3h ;ret (no code required) - mov byte ptr [_hlineasm4], 0e9h - mov dword ptr [_hlineasm4+1], (offset _prohlineasm4)-(offset _hlineasm4)-5 - - ;Vline overlay - mov byte ptr [_setupvlineasm], 0e9h - mov dword ptr [_setupvlineasm+1], (offset _prosetupvlineasm)-(offset _setupvlineasm)-5 - mov byte ptr [_vlineasm4], 0e9h - mov dword ptr [_vlineasm4+1], (offset _provlineasm4)-(offset _vlineasm4)-5 - - pop edx ;JBF - pop ecx ;JBF - pop ebx ;JBF - ret - -PUBLIC _dep_end -_dep_end: -code ends -END diff --git a/polymer-perf/eduke32/build/src/a.nasm b/polymer-perf/eduke32/build/src/a.nasm deleted file mode 100644 index 7faa3f2e2..000000000 --- a/polymer-perf/eduke32/build/src/a.nasm +++ /dev/null @@ -1,2758 +0,0 @@ -; "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman -; Ken Silverman's official web site: "http://www.advsys.net/ken" -; See the included license file "BUILDLIC.TXT" for license info. -; -; This file has been modified from Ken Silverman's original release -; by Jonathon Fowler (jonof@edgenetwk.com) - -;CPU 586 - -SECTION .text - -%ifdef UNDERSCORES -%define asm1 _asm1 -%define asm2 _asm2 -%define asm3 _asm3 -%define asm4 _asm4 -%define reciptable _reciptable -%define fpuasm _fpuasm -%define globalx3 _globalx3 -%define globaly3 _globaly3 -%define ylookup _ylookup -%define vplce _vplce -%define vince _vince -%define palookupoffse _palookupoffse -%define bufplce _bufplce -%define ebpbak _ebpbak -%define espbak _espbak -%define pow2char _pow2char -%define pow2long _pow2long - -%define sethlinesizes _sethlinesizes -%define prosethlinesizes _prosethlinesizes -%define setvlinebpl _setvlinebpl -%define setpalookupaddress _setpalookupaddress -%define prosetpalookupaddress _prosetpalookupaddress -%define setuphlineasm4 _setuphlineasm4 -%define hlineasm4 _hlineasm4 -%define prohlineasm4 _prohlineasm4 -%define prosetuphlineasm4 _prosetupvlineasm -%define setupmvlineasm _setupmvlineasm -%define setuptvlineasm _setuptvlineasm -%define prevlineasm1 _prevlineasm1 -%define vlineasm1 _vlineasm1 -%define mvlineasm1 _mvlineasm1 -%define fixtransluscence _fixtransluscence -%define settransnormal _settransnormal -%define settransreverse _settransreverse -%define tvlineasm1 _tvlineasm1 -%define vlineasm4 _vlineasm4 -%define provlineasm4 _provlineasm4 -%define setupvlineasm _setupvlineasm -%define mvlineasm4 _mvlineasm4 -%define setupspritevline _setupspritevline -%define spritevline _spritevline -%define msetupspritevline _msetupspritevline -%define mspritevline _mspritevline -%define tsetupspritevline _tsetupspritevline -%define tspritevline _tspritevline -%define msethlineshift _msethlineshift -%define mhline _mhline -%define mhlineskipmodify _mhlineskipmodify -%define tsethlineshift _tsethlineshift -%define thline _thline -%define thlineskipmodify _thlineskipmodify -%define setuptvlineasm2 _setuptvlineasm2 -%define tvlineasm2 _tvlineasm2 -%define setupslopevlin2 _setupslopevlin2 -%define slopevlin2 _slopevlin2 -%define setupslopevlin _setupslopevlin -%define slopevlin _slopevlin -%define setuprhlineasm4 _setuprhlineasm4 -%define rhlineasm4 _rhlineasm4 -%define setuprmhlineasm4 _setuprmhlineasm4 -%define rmhlineasm4 _rmhlineasm4 -%define setupqrhlineasm4 _setupqrhlineasm4 -%define qrhlineasm4 _qrhlineasm4 -%define setupdrawslab _setupdrawslab -%define drawslab _drawslab -%define stretchhline _stretchhline -%define mmxoverlay _mmxoverlay - -%define dep_begin _dep_begin -%define dep_end _dep_end -%endif - -; Some macros to help make cdecl calling easier to manage -%macro CDECLBEGIN 1 -%if %1 >= 2 - push ebx -%endif -%if %1 >= 3 - push ecx -%endif -%if %1 >= 4 - push edx -%endif -%if %1 >= 5 - push esi -%endif -%if %1 >= 6 - push edi -%endif -%endmacro - -%macro CDECLEND 1 -%if %1 >= 6 - pop edi -%endif -%if %1 >= 5 - pop esi -%endif -%if %1 >= 4 - pop edx -%endif -%if %1 >= 3 - pop ecx -%endif -%if %1 >= 2 - pop ebx -%endif -%endmacro - -%macro CDECLPARAM 3 -; mov %1, dword [esp + (%2*4+16)] - mov %1, dword [esp + ((%2+%3)*4+4)] -%endmacro - -%macro CDECLBEGINSET 1 - CDECLBEGIN %1 - -%assign _offsetted %1-1 - -%if %1 >= 1 - CDECLPARAM eax,0,_offsetted -%endif -%if %1 >= 2 - CDECLPARAM ebx,1,_offsetted -%endif -%if %1 >= 3 - CDECLPARAM ecx,2,_offsetted -%endif -%if %1 >= 4 - CDECLPARAM edx,3,_offsetted -%endif -%if %1 >= 5 - CDECLPARAM esi,4,_offsetted -%endif -%if %1 >= 6 - CDECLPARAM edi,5,_offsetted -%endif -%endmacro - -%macro CDECLENDSET 1 - CDECLEND %1 -%endmacro - - - EXTERN asm1 - EXTERN asm2 - EXTERN asm3 - EXTERN asm4 - EXTERN reciptable - EXTERN fpuasm - EXTERN globalx3 - EXTERN globaly3 - EXTERN ylookup - - EXTERN vplce - EXTERN vince - EXTERN palookupoffse - EXTERN bufplce - - EXTERN ebpbak - EXTERN espbak - - EXTERN pow2char - EXTERN pow2long - - GLOBAL sethlinesizes - GLOBAL prosethlinesizes - GLOBAL setvlinebpl - GLOBAL setpalookupaddress - GLOBAL prosetpalookupaddress - GLOBAL setuphlineasm4 - GLOBAL hlineasm4 - GLOBAL prohlineasm4 - GLOBAL prosetupvlineasm - GLOBAL setupmvlineasm - GLOBAL setuptvlineasm - GLOBAL prevlineasm1 - GLOBAL vlineasm1 - GLOBAL mvlineasm1 ;Masked vline - GLOBAL fixtransluscence - GLOBAL settransnormal - GLOBAL settransreverse - GLOBAL tvlineasm1 ;Masked & transluscent vline - GLOBAL vlineasm4 - GLOBAL provlineasm4 - GLOBAL setupvlineasm - GLOBAL mvlineasm4 - GLOBAL setupspritevline - GLOBAL spritevline - GLOBAL msetupspritevline - GLOBAL mspritevline - GLOBAL tsetupspritevline - GLOBAL tspritevline - GLOBAL msethlineshift - GLOBAL mhline - GLOBAL mhlineskipmodify - GLOBAL tsethlineshift - GLOBAL thline - GLOBAL thlineskipmodify - GLOBAL setuptvlineasm2 - GLOBAL tvlineasm2 - GLOBAL setupslopevlin2 - GLOBAL slopevlin2 - GLOBAL setupslopevlin - GLOBAL slopevlin - GLOBAL setuprhlineasm4 - GLOBAL rhlineasm4 - GLOBAL setuprmhlineasm4 - GLOBAL rmhlineasm4 - GLOBAL setupqrhlineasm4 - GLOBAL qrhlineasm4 ;4 pixels in 9 cycles! 2.25 cycles/pixel - GLOBAL setupdrawslab - GLOBAL drawslab - GLOBAL stretchhline - GLOBAL mmxoverlay - - GLOBAL dep_begin - GLOBAL dep_end - -dep_begin: - - ALIGN 16 -sethlinesizes: -CDECLBEGINSET 3 - - mov byte [machxbits1+2], al - mov byte [machxbits2+2], al - mov byte [machxbits3+2], al - neg al - mov byte [hxsiz1+2], al - mov byte [hxsiz2+2], al - mov byte [hxsiz3+2], al - mov byte [hxsiz4+2], al - mov byte [machnegxbits1+2], al - - mov byte [hysiz1+3], bl - mov byte [hysiz2+3], bl - mov byte [hysiz3+3], bl - mov byte [hysiz4+3], bl - mov byte [hmach3a+2], bl - mov byte [hmach3b+2], bl - mov byte [hmach3c+2], bl - mov byte [hmach3d+2], bl - - mov dword [hoffs1+2], ecx - mov dword [hoffs2+2], ecx - mov dword [hoffs3+2], ecx - mov dword [hoffs4+2], ecx - mov dword [hoffs5+2], ecx - mov dword [hoffs6+2], ecx - mov dword [hoffs7+2], ecx - mov dword [hoffs8+2], ecx - - push edx ;JBF - mov edx, -1 - mov cl, al - sub cl, bl - shr edx, cl - mov dword [hmach2a+1], edx - mov dword [hmach2b+1], edx - mov dword [hmach2c+1], edx - mov dword [hmach2d+1], edx - pop edx ;JBF - -CDECLENDSET 3 - ret - - - ALIGN 16 -prosethlinesizes: -CDECLBEGINSET 3 - - mov dword [prohbuf-4], ecx - neg eax - mov ecx, eax - sub eax, ebx - mov byte [prohshru-1], al ;bl = 32-al-bl - mov eax, -1 - shr eax, cl - mov ecx, ebx - shl eax, cl - mov dword [prohand-4], eax ;((-1>>(-oal))<>(32-xbits) adc al, 88h 1 1/2 - ;bufplc mov cl, byte [edx+88888888h] 1 1/2 - ;paloffs&255 mov bl, byte [ecx+88888888h] 1 1/2 - ALIGN 16 -hlineasm4: -CDECLBEGINSET 6 - - push ebp - - lea ebp, [eax+1] - - cmp ebp, 8 - jle near shorthline - - test edi, 1 - jnz short skipthe1byte - - mov eax, esi -hxsiz1: shr eax, 26 -hysiz1: shld eax, edx, 6 -hoffs1: mov cl, byte [eax+88888888h] -pal1: mov bl, byte [ecx+88888888h] - sub esi, dword [asm1] - sub edx, dword [asm2] - mov byte [edi], bl - dec edi - dec ebp - -skipthe1byte: - test edi, 2 - jnz short skipthe2byte - - mov eax, esi -hxsiz2: shr eax, 26 -hysiz2: shld eax, edx, 6 -hoffs2: mov cl, byte [eax+88888888h] -pal2: mov bh, byte [ecx+88888888h] - sub esi, dword [asm1] - sub edx, dword [asm2] - - mov eax, esi -hxsiz3: shr eax, 26 -hysiz3: shld eax, edx, 6 -hoffs3: mov cl, byte [eax+88888888h] -pal3: mov bl, byte [ecx+88888888h] - sub esi, dword [asm1] - sub edx, dword [asm2] - mov word [edi-1], bx - sub edi, 2 - sub ebp, 2 - -skipthe2byte: - - mov eax, esi -machxbits1: shl esi, 6 ;xbits -machnegxbits1: shr eax, 32-6 ;32-xbits - mov dl, al - - inc edi - - add ebx, ebx - mov eax, edx - jc beginhline64 - - mov eax, dword [asm1] -machxbits2: rol eax, 6 ;xbits - mov dword [hmach4a+2], eax - mov dword [hmach4b+2], eax - mov dword [hmach4c+2], eax - mov dword [hmach4d+2], eax - mov ebx, eax - mov eax, dword [asm2] - mov al, bl - mov dword [hmach1a+2], eax - mov dword [hmach1b+2], eax - mov dword [hmach1c+2], eax - mov dword [hmach1d+2], eax - - mov eax, edx - jmp beginhline64 -ALIGN 16 -prebeginhline64: - mov dword [edi], ebx -beginhline64: - -hmach3a: rol eax, 6 -hmach2a: and eax, 00008888h -hmach4a: sub esi, 88888888h -hmach1a: sbb edx, 88888888h - sub edi, 4 -hoffs4: mov cl, byte [eax+88888888h] - mov eax, edx - -hmach3b: rol eax, 6 -hmach2b: and eax, 00008888h -hmach4b: sub esi, 88888888h -hmach1b: sbb edx, 88888888h -pal4: mov bh, byte [ecx+88888888h] -hoffs5: mov cl, byte [eax+88888888h] - mov eax, edx - -hmach3c: rol eax, 6 -pal5: mov bl, byte [ecx+88888888h] -hmach2c: and eax, 00008888h - shl ebx, 16 -hmach4c: sub esi, 88888888h -hmach1c: sbb edx, 88888888h -hoffs6: mov cl, byte [eax+88888888h] - - mov eax, edx - ;( - -hmach3d: rol eax, 6 -hmach2d: and eax, 00008888h -hmach4d: sub esi, 88888888h -hmach1d: sbb edx, 88888888h -pal6: mov bh, byte [ecx+88888888h] -hoffs7: mov cl, byte [eax+88888888h] - mov eax, edx - sub ebp, 4 - nop -pal7: mov bl, byte [ecx+88888888h] - jnc near prebeginhline64 -skipthe4byte: - - test ebp, 2 - jz skipdrawthe2 - rol ebx, 16 - mov word [edi+2], bx - sub edi, 2 -skipdrawthe2: - test ebp, 1 - jz skipdrawthe1 - shr ebx, 24 - mov byte [edi+3], bl -skipdrawthe1: - - pop ebp -CDECLENDSET 6 - ret - -shorthline: - test ebp, ebp - jz endshorthline -begshorthline: - mov eax, esi -hxsiz4: shr eax, 26 -hysiz4: shld eax, edx, 6 -hoffs8: mov cl, byte [eax+88888888h] -pal8: mov bl, byte [ecx+88888888h] - sub esi, dword [asm1] - sub edx, dword [asm2] - mov byte [edi], bl - dec edi - dec ebp - jnz near begshorthline -endshorthline: - pop ebp -CDECLENDSET 6 - ret - - - ;eax: 00000000 00000000 00000000 temp---- - ;ebx: 00000000 00000000 00000000 temp---- - ;ecx: UUUUUUuu uuuuuuuu uuuuuuuu uuuuuuuu - ;edx: VVVVVVvv vvvvvvvv vvvvvvvv vvvvvvvv - ;esi: cnt----- -------- -------- -------- - ;edi: vid----- -------- -------- -------- - ;ebp: paloffs- -------- -------- -------- - ;esp: ???????? ???????? ???????? ???????? - ALIGN 16 -prohlineasm4: -CDECLBEGINSET 6 - - push ebp - - lea ebp, [ecx+88888888h] -prohpala: - mov ecx, esi - lea esi, [eax+1] - sub edi, esi - -prohbeg: - mov eax, ecx - shr eax, 20 -prohshru: - mov ebx, edx - shr ebx, 26 -prohshrv: - and eax, 88888888h -prohand: - movzx eax, byte [eax+ebx+88888888h] -prohbuf: - mov al, [eax+ebp] - sub ecx, dword [asm1] - sub edx, dword [asm2] - mov [edi+esi], al - dec esi - jnz prohbeg - - pop ebp -CDECLENDSET 6 - ret - - - - ALIGN 16 -setupvlineasm: -CDECLBEGINSET 1 - ;First 2 lines for VLINEASM1, rest for VLINEASM4 - mov byte [premach3a+2], al - mov byte [mach3a+2], al - - push ecx - mov byte [machvsh1+2], al ;32-shy - mov byte [machvsh3+2], al ;32-shy - mov byte [machvsh5+2], al ;32-shy - mov byte [machvsh6+2], al ;32-shy - mov ah, al - sub ah, 16 - mov byte [machvsh8+2], ah ;16-shy - neg al - mov byte [machvsh7+2], al ;shy - mov byte [machvsh9+2], al ;shy - mov byte [machvsh10+2], al ;shy - mov byte [machvsh11+2], al ;shy - mov byte [machvsh12+2], al ;shy - mov cl, al - mov eax, 1 - shl eax, cl - dec eax - mov dword [machvsh2+2], eax ;(1<>sh) - ;vplc3 = (ebp<<(32-sh))+((edx&65535)<<(16-sh)) -machvsh5: shl esi, 88h ;32-sh - mov eax, edx -machvsh6: shl ebp, 88h ;32-sh - and edx, 0000ffffh -machvsh7: shr eax, 88h ;sh - add esi, eax -machvsh8: shl edx, 88h ;16-sh - add ebp, edx - mov dword [vplce+12], esi - mov dword [vplce+4], ebp - - pop ebp -CDECLEND 6 - ret - - ;eax: -------temp1------- - ;ebx: -------temp2------- - ;ecx: ylo4 --------- - ;edx: ylo2 --------- - ;esi: yhi1 yhi2 - ;edi: ---videoplc/cnt---- - ;ebp: yhi3 yhi4 - ;esp: - ALIGN 16 -provlineasm4: -CDECLBEGIN 6 -CDECLPARAM ecx,0,5 -CDECLPARAM edi,1,5 - push ebp - - mov eax, dword [ylookup+ecx*4] - add eax, edi - mov dword [promachvline4end1+2], eax - inc eax - mov dword [promachvline4end2+2], eax - inc eax - mov dword [promachvline4end3+2], eax - inc eax - mov dword [promachvline4end4+2], eax - sub eax, 3 - sub edi, eax - - mov eax, dword [bufplce] - mov ebx, dword [bufplce+4] - mov ecx, dword [bufplce+8] - mov edx, dword [bufplce+12] - mov dword [promachvbuf1+3], ecx - mov dword [promachvbuf2+3], edx - mov dword [promachvbuf3+3], eax - mov dword [promachvbuf4+3], ebx - - mov eax, dword [palookupoffse] - mov ebx, dword [palookupoffse+4] - mov ecx, dword [palookupoffse+8] - mov edx, dword [palookupoffse+12] - mov dword [promachvpal1+2], ecx - mov dword [promachvpal2+2], edx - mov dword [promachvpal3+2], eax - mov dword [promachvpal4+2], ebx - - ; ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ - ;edx: ³v3lo ³v1lo ³ - ; ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄ´ - ;esi: ³v2hi v2lo ³ v3hi³ - ; ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄ´ - ;ebp: ³v0hi v0lo ³ v1hi³ - ; ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ - - mov ebp, dword [vince] - mov ebx, dword [vince+4] - mov esi, dword [vince+8] - mov eax, dword [vince+12] - and esi, 0fffffe00h - and ebp, 0fffffe00h -promachvsh9: rol eax, 88h ;sh -promachvsh10: rol ebx, 88h ;sh - mov edx, eax - mov ecx, ebx - shr ecx, 16 - and edx, 0ffff0000h - add edx, ecx - and eax, 000001ffh - and ebx, 000001ffh - add esi, eax - add ebp, ebx - ; - mov eax, edx - and eax, 0ffff0000h - mov dword [promachvinc1+2], eax - mov dword [promachvinc2+2], esi - shl edx, 16 - mov dword [promachvinc3+2], edx - mov dword [promachvinc5+2], ebp - - mov ebp, dword [vplce] - mov ebx, dword [vplce+4] - mov esi, dword [vplce+8] - mov eax, dword [vplce+12] - and esi, 0fffffe00h - and ebp, 0fffffe00h -promachvsh11: rol eax, 88h ;sh -promachvsh12: rol ebx, 88h ;sh - mov edx, eax - mov ecx, ebx - shr ecx, 16 - and edx, 0ffff0000h - add edx, ecx - and eax, 000001ffh - and ebx, 000001ffh - add esi, eax - add ebp, ebx - - mov eax, esi - mov ecx, edx - shl ecx, 16 - jmp short probeginvlineasm4 -ALIGN 16 - nop - nop - nop -probeginvlineasm4: -promachvsh1: shr eax, 88h ;32-sh - mov ebx, esi -promachvsh2: and ebx, 00000088h ;(1<>sh) - ;vplc3 = (ebp<<(32-sh))+((edx&65535)<<(16-sh)) -promachvsh5: shl esi, 88h ;32-sh - mov eax, edx -promachvsh6: shl ebp, 88h ;32-sh - and edx, 0000ffffh -promachvsh7: shr eax, 88h ;sh - add esi, eax -promachvsh8: shl edx, 88h ;16-sh - add ebp, edx - mov dword [vplce+12], esi - mov dword [vplce+4], ebp - - pop ebp -CDECLEND 6 - ret - - - ALIGN 16 -mvlineasm4: -CDECLBEGIN 6 -CDECLPARAM ecx,0,5 -CDECLPARAM edi,1,5 - - push ebp - - mov eax, dword [bufplce] - mov ebx, dword [bufplce+4] - mov dword [machmv1+2], eax - mov dword [machmv4+2], ebx - mov eax, dword [bufplce+8] - mov ebx, dword [bufplce+12] - mov dword [machmv7+2], eax - mov dword [machmv10+2], ebx - - mov eax, dword [palookupoffse] - mov ebx, dword [palookupoffse+4] - mov dword [machmv2+2], eax - mov dword [machmv5+2], ebx - mov eax, dword [palookupoffse+8] - mov ebx, dword [palookupoffse+12] - mov dword [machmv8+2], eax - mov dword [machmv11+2], ebx - - mov eax, dword [vince] - mov ebx, dword [vince+4] - xor al, al - xor bl, bl - mov dword [machmv3+2], eax - mov dword [machmv6+2], ebx - mov eax, dword [vince+8] - mov ebx, dword [vince+12] - mov dword [machmv9+2], eax - mov dword [machmv12+2], ebx - - mov ebx, ecx - mov ecx, dword [vplce] - mov edx, dword [vplce+4] - mov esi, dword [vplce+8] - mov ebp, dword [vplce+12] - mov cl, bl - inc cl - inc bh - mov byte [asm3], bh -fixchain2ma: sub edi, 320 - - jmp short beginmvlineasm4 -ALIGN 16 -beginmvlineasm4: - dec cl - jz near endmvlineasm4 -beginmvlineasm42: - mov eax, ebp - mov ebx, esi -machmv16: shr eax, 32 -machmv15: shr ebx, 32 -machmv12: add ebp, 88888888h ;vince[3] -machmv9: add esi, 88888888h ;vince[2] -machmv10: mov al, byte [eax+88888888h] ;bufplce[3] -machmv7: mov bl, byte [ebx+88888888h] ;bufplce[2] - cmp al, 255 - adc dl, dl - cmp bl, 255 - adc dl, dl -machmv8: mov bl, byte [ebx+88888888h] ;palookupoffs[2] -machmv11: mov bh, byte [eax+88888888h] ;palookupoffs[3] - - mov eax, edx -machmv14: shr eax, 32 - shl ebx, 16 -machmv4: mov al, byte [eax+88888888h] ;bufplce[1] - cmp al, 255 - adc dl, dl -machmv6: add edx, 88888888h ;vince[1] -machmv5: mov bh, byte [eax+88888888h] ;palookupoffs[1] - - mov eax, ecx -machmv13: shr eax, 32 -machmv3: add ecx, 88888888h ;vince[0] -machmv1: mov al, byte [eax+88888888h] ;bufplce[0] - cmp al, 255 - adc dl, dl -machmv2: mov bl, byte [eax+88888888h] ;palookupoffs[0] - - shl dl, 4 - xor eax, eax -fixchain2mb: add edi, 320 - mov al, dl - add eax, mvcase0 - jmp eax ;16 byte cases - -ALIGN 16 -endmvlineasm4: - dec byte [asm3] - jnz near beginmvlineasm42 ;near - - mov dword [vplce], ecx - mov dword [vplce+4], edx - mov dword [vplce+8], esi - mov dword [vplce+12], ebp - pop ebp -CDECLEND 6 - ret - - ;5,7,8,8,11,13,12,14,11,13,14,14,12,14,15,7 -ALIGN 16 -mvcase0: - jmp beginmvlineasm4 -ALIGN 16 -mvcase1: - mov byte [edi], bl - jmp beginmvlineasm4 -ALIGN 16 -mvcase2: - mov byte [edi+1], bh - jmp beginmvlineasm4 -ALIGN 16 -mvcase3: - mov word [edi], bx - jmp beginmvlineasm4 -ALIGN 16 -mvcase4: - shr ebx, 16 - mov byte [edi+2], bl - jmp beginmvlineasm4 -ALIGN 16 -mvcase5: - mov byte [edi], bl - shr ebx, 16 - mov byte [edi+2], bl - jmp beginmvlineasm4 -ALIGN 16 - mvcase6: - shr ebx, 8 - mov word [edi+1], bx - jmp beginmvlineasm4 -ALIGN 16 -mvcase7: - mov word [edi], bx - shr ebx, 16 - mov byte [edi+2], bl - jmp beginmvlineasm4 -ALIGN 16 -mvcase8: - shr ebx, 16 - mov byte [edi+3], bh - jmp beginmvlineasm4 -ALIGN 16 -mvcase9: - mov byte [edi], bl - shr ebx, 16 - mov byte [edi+3], bh - jmp beginmvlineasm4 -ALIGN 16 -mvcase10: - mov byte [edi+1], bh - shr ebx, 16 - mov byte [edi+3], bh - jmp beginmvlineasm4 -ALIGN 16 -mvcase11: - mov word [edi], bx - shr ebx, 16 - mov byte [edi+3], bh - jmp beginmvlineasm4 -ALIGN 16 -mvcase12: - shr ebx, 16 - mov word [edi+2], bx - jmp beginmvlineasm4 -ALIGN 16 -mvcase13: - mov byte [edi], bl - shr ebx, 16 - mov word [edi+2], bx - jmp beginmvlineasm4 -ALIGN 16 -mvcase14: - mov byte [edi+1], bh - shr ebx, 16 - mov word [edi+2], bx - jmp beginmvlineasm4 -ALIGN 16 -mvcase15: - mov dword [edi], ebx - jmp beginmvlineasm4 - - - ALIGN 16 -setupspritevline: -CDECLBEGINSET 6 - - mov dword [spal+2], eax - - mov eax, esi ;xinc's - shl eax, 16 - mov dword [smach1+2], eax - mov dword [smach4+2], eax - mov eax, esi - sar eax, 16 - add eax, ebx ;watch out with ebx - it's passed - mov dword [smach2+2], eax - add eax, edx - mov dword [smach5+2], eax - - mov dword [smach3+2], ecx ;yinc's - -CDECLENDSET 6 - ret - - - ALIGN 16 -spritevline: -CDECLBEGINSET 6 - jmp short spritevline_start - ;eax = 0, ebx = x, ecx = cnt, edx = y, esi = yplc, edi = p -prestartsvline: -smach1: add ebx, 88888888h ;xincshl16 - mov al, byte [esi] -smach2: adc esi, 88888888h ;xincshr16+yalwaysinc - -startsvline: -spal: mov al, [eax+88888888h] ;palookup - mov byte [edi], al -fixchain1s: add edi, 320 - -spritevline_start: -smach3: add edx, 88888888h ;dayinc - dec ecx - ja short prestartsvline ;jump if (no carry (add)) and (not zero (dec))! - jz short endsvline -smach4: add ebx, 88888888h ;xincshl16 - mov al, byte [esi] -smach5: adc esi, 88888888h ;xincshr16+yalwaysinc+daydime - jmp short startsvline -endsvline: -CDECLENDSET 6 - ret - - - ALIGN 16 -msetupspritevline: -CDECLBEGINSET 6 - - mov dword [mspal+2], eax - - mov eax, esi ;xinc's - shl eax, 16 - mov dword [msmach1+2], eax - mov dword [msmach4+2], eax - mov eax, esi - sar eax, 16 - add eax, ebx ;watch out with ebx - it's passed - mov dword [msmach2+2], eax - add eax, edx - mov dword [msmach5+2], eax - - mov dword [msmach3+2], ecx ;yinc's - -CDECLENDSET 6 - ret - - - ALIGN 16 -mspritevline: -CDECLBEGINSET 6 - jmp short mspritevline_start - ;eax = 0, ebx = x, ecx = cnt, edx = y, esi = yplc, edi = p -mprestartsvline: -msmach1: add ebx, 88888888h ;xincshl16 - mov al, byte [esi] -msmach2: adc esi, 88888888h ;xincshr16+yalwaysinc - -mstartsvline: - cmp al, 255 - je short mskipsvline -mspal: mov al, [eax+88888888h] ;palookup - mov byte [edi], al -mskipsvline: -mfixchain1s: add edi, 320 - -mspritevline_start: -msmach3: add edx, 88888888h ;dayinc - dec ecx - ja short mprestartsvline ;jump if (no carry (add)) and (not zero (dec))! - jz short mendsvline -msmach4: add ebx, 88888888h ;xincshl16 - mov al, byte [esi] -msmach5: adc esi, 88888888h ;xincshr16+yalwaysinc+daydime - jmp short mstartsvline -mendsvline: -CDECLENDSET 6 - ret - - - ALIGN 16 -tsetupspritevline: -CDECLBEGINSET 6 - mov dword [tspal+2], eax - - mov eax, esi ;xinc's - shl eax, 16 - mov dword [tsmach1+2], eax - mov dword [tsmach4+2], eax - mov eax, esi - sar eax, 16 - add eax, ebx ;watch out with ebx - it's passed - mov dword [tsmach2+2], eax - add eax, edx - mov dword [tsmach5+2], eax - - mov dword [tsmach3+2], ecx ;yinc's -CDECLENDSET 6 - ret - - - ALIGN 16 -tspritevline: -CDECLBEGINSET 6 - ;eax = 0, ebx = x, ecx = cnt, edx = y, esi = yplc, edi = p - push ebp - mov ebp, ebx - xor ebx, ebx - jmp tenterspritevline -ALIGN 16 -tprestartsvline: -tsmach1: add ebp, 88888888h ;xincshl16 - mov al, byte [esi] -tsmach2: adc esi, 88888888h ;xincshr16+yalwaysinc - -tstartsvline: - cmp al, 255 - je short tskipsvline -transrev2: - mov bh, byte [edi] -transrev3: -tspal: mov bl, [eax+88888888h] ;palookup -tmach4: mov al, byte [ebx+88888888h] ;_transluc - mov byte [edi], al -tskipsvline: -tfixchain1s: add edi, 320 - -tenterspritevline: -tsmach3: add edx, 88888888h ;dayinc - dec ecx - ja short tprestartsvline ;jump if (no carry (add)) and (not zero (dec))! - jz short tendsvline -tsmach4: add ebp, 88888888h ;xincshl16 - mov al, byte [esi] -tsmach5: adc esi, 88888888h ;xincshr16+yalwaysinc+daydime - jmp short tstartsvline -tendsvline: - pop ebp -CDECLENDSET 6 - ret - - - ALIGN 16 -msethlineshift: -CDECLBEGINSET 2 - neg al - mov byte [msh1d+2], al - mov byte [msh2d+3], bl - mov byte [msh3d+2], al - mov byte [msh4d+3], bl - mov byte [msh5d+2], al - mov byte [msh6d+3], bl -CDECLENDSET 2 - ret - - - ALIGN 16 -mhline: -CDECLBEGINSET 6 - ;asm1 = bxinc - ;asm2 = byinc - ;asm3 = shadeoffs - ;eax = picoffs - ;ebx = bx - ;ecx = cnt - ;edx = ? - ;esi = by - ;edi = p - - mov dword [mmach1d+2], eax - mov dword [mmach5d+2], eax - mov dword [mmach9d+2], eax - mov eax, dword [asm3] - mov dword [mmach2d+2], eax - mov dword [mmach2da+2], eax - mov dword [mmach2db+2], eax - mov dword [mmach6d+2], eax - mov dword [mmach10d+2], eax - mov eax, dword [asm1] - mov dword [mmach3d+2], eax - mov dword [mmach7d+2], eax - mov eax, dword [asm2] - mov dword [mmach4d+2], eax - mov dword [mmach8d+2], eax - jmp short mhlineskipmodify_nosetup - - - ALIGN 16 -mhlineskipmodify: -CDECLBEGINSET 6 -mhlineskipmodify_nosetup: - - push ebp - - xor eax, eax - mov ebp, ebx - - test ecx, 00010000h - jnz short mbeghline - -msh1d: shr ebx, 26 -msh2d: shld ebx, esi, 6 - add ebp, dword [asm1] -mmach9d: mov al, byte [ebx+88888888h] ;picoffs - add esi, dword [asm2] - cmp al, 255 - je mskip5 - -mmach10d: mov cl, byte [eax+88888888h] ;shadeoffs - mov byte [edi], cl -mskip5: - inc edi - sub ecx, 65536 - jc near mendhline - jmp short mbeghline - -ALIGN 16 -mpreprebeghline: ;1st only - mov al, cl -mmach2d: mov al, byte [eax+88888888h] ;shadeoffs - mov byte [edi], al - -mprebeghline: - add edi, 2 - sub ecx, 131072 - jc near mendhline -mbeghline: -mmach3d: lea ebx, [ebp+88888888h] ;bxinc -msh3d: shr ebp, 26 -msh4d: shld ebp, esi, 6 -mmach4d: add esi, 88888888h ;byinc -mmach1d: mov cl, byte [ebp+88888888h] ;picoffs -mmach7d: lea ebp, [ebx+88888888h] ;bxinc - -msh5d: shr ebx, 26 -msh6d: shld ebx, esi, 6 -mmach8d: add esi, 88888888h ;byinc -mmach5d: mov ch, byte [ebx+88888888h] ;picoffs - - cmp cl, 255 - je short mskip1 - cmp ch, 255 - je short mpreprebeghline - - mov al, cl ;BOTH -mmach2da: mov bl, byte [eax+88888888h] ;shadeoffs - mov al, ch -mmach2db: mov bh, byte [eax+88888888h] ;shadeoffs - mov word [edi], bx - add edi, 2 - sub ecx, 131072 - jnc short mbeghline - jmp mendhline -mskip1: ;2nd only - cmp ch, 255 - je short mprebeghline - - mov al, ch -mmach6d: mov al, byte [eax+88888888h] ;shadeoffs - mov byte [edi+1], al - add edi, 2 - sub ecx, 131072 - jnc short mbeghline -mendhline: - - pop ebp -CDECLENDSET 6 - ret - - - ALIGN 16 -tsethlineshift: -CDECLBEGINSET 2 - neg al - mov byte [tsh1d+2], al - mov byte [tsh2d+3], bl - mov byte [tsh3d+2], al - mov byte [tsh4d+3], bl - mov byte [tsh5d+2], al - mov byte [tsh6d+3], bl -CDECLENDSET 2 - ret - - - ALIGN 16 -thline: -CDECLBEGINSET 6 - ;asm1 = bxinc - ;asm2 = byinc - ;asm3 = shadeoffs - ;eax = picoffs - ;ebx = bx - ;ecx = cnt - ;edx = ? - ;esi = by - ;edi = p - - mov dword [tmach1d+2], eax - mov dword [tmach5d+2], eax - mov dword [tmach9d+2], eax - mov eax, dword [asm3] - mov dword [tmach2d+2], eax - mov dword [tmach6d+2], eax - mov dword [tmach10d+2], eax - mov eax, dword [asm1] - mov dword [tmach3d+2], eax - mov dword [tmach7d+2], eax - mov eax, dword [asm2] - mov dword [tmach4d+2], eax - mov dword [tmach8d+2], eax - jmp thlineskipmodify_nosetup - - - ALIGN 16 -thlineskipmodify: -CDECLBEGINSET 6 -thlineskipmodify_nosetup: - - push ebp - - xor eax, eax - xor edx, edx - mov ebp, ebx - - test ecx, 00010000h - jnz short tbeghline - -tsh1d: shr ebx, 26 -tsh2d: shld ebx, esi, 6 - add ebp, dword [asm1] -tmach9d: mov al, byte [ebx+88888888h] ;picoffs - add esi, dword [asm2] - cmp al, 255 - je tskip5 - -transrev4: -tmach10d: mov dl, byte [eax+88888888h] ;shadeoffs -transrev5: - mov dh, byte [edi] -tmach1: mov al, byte [edx+88888888h] ;_transluc - mov byte [edi], al -tskip5: - inc edi - sub ecx, 65536 - jc near tendhline - jmp short tbeghline - -ALIGN 16 -tprebeghline: - add edi, 2 - sub ecx, 131072 - jc short tendhline -tbeghline: -tmach3d: lea ebx, [ebp+88888888h] ;bxinc -tsh3d: shr ebp, 26 -tsh4d: shld ebp, esi, 6 -tmach4d: add esi, 88888888h ;byinc -tmach1d: mov cl, byte [ebp+88888888h] ;picoffs -tmach7d: lea ebp, [ebx+88888888h] ;bxinc - -tsh5d: shr ebx, 26 -tsh6d: shld ebx, esi, 6 -tmach8d: add esi, 88888888h ;byinc -tmach5d: mov ch, byte [ebx+88888888h] ;picoffs - - cmp cx, 0ffffh - je short tprebeghline - - mov bx, word [edi] - - cmp cl, 255 - je short tskip1 - mov al, cl -transrev6: -tmach2d: mov dl, byte [eax+88888888h] ;shadeoffs -transrev7: - mov dh, bl -tmach2: mov al, byte [edx+88888888h] ;_transluc - mov byte [edi], al - - cmp ch, 255 - je short tskip2 -tskip1: - mov al, ch -transrev8: -tmach6d: mov dl, byte [eax+88888888h] ;shadeoffs -transrev9: - mov dh, bh -tmach3: mov al, byte [edx+88888888h] ;_transluc - mov byte [edi+1], al -tskip2: - - add edi, 2 - sub ecx, 131072 - jnc tbeghline -tendhline: - - pop ebp -CDECLENDSET 6 - ret - - - ;eax=shiftval, ebx=palookup1, ecx=palookup2 - ALIGN 16 -setuptvlineasm2: -CDECLBEGINSET 3 - mov byte [tran2shra+2], al - mov byte [tran2shrb+2], al - mov dword [tran2pala+2], ebx - mov dword [tran2palb+2], ecx - mov dword [tran2palc+2], ebx - mov dword [tran2pald+2], ecx -CDECLENDSET 3 - ret - - ;Pass: eax=vplc2, ebx=vinc1, ecx=bufplc1, edx=bufplc2, esi=vplc1, edi=p - ; asm1=vinc2, asm2=pend - ;Return: asm1=vplc1, asm2=vplc2 - ALIGN 16 -tvlineasm2: -CDECLBEGINSET 6 - - push ebp - - mov ebp, eax - - mov dword [tran2inca+2], ebx - mov eax, dword [asm1] - mov dword [tran2incb+2], eax - - mov dword [tran2bufa+2], ecx ;bufplc1 - mov dword [tran2bufb+2], edx ;bufplc2 - - mov eax, dword [asm2] - sub edi, eax - mov dword [tran2edia+3], eax - mov dword [tran2edic+2], eax - inc eax - mov dword [tran2edie+2], eax -fixchaint2a: sub eax, 320 - mov dword [tran2edif+2], eax - dec eax - mov dword [tran2edib+3], eax - mov dword [tran2edid+2], eax - - xor ecx, ecx - xor edx, edx - jmp short begintvline2 - - ;eax 0000000000 temp temp - ;ebx 0000000000 odat2 odat1 - ;ecx 0000000000000000 ndat1 - ;edx 0000000000000000 ndat2 - ;esi vplc1 - ;edi videoplc-------------- - ;ebp vplc2 - -ALIGN 16 - ;LEFT ONLY -skipdraw2: -transrev10: -tran2edic: mov ah, byte [edi+88888888h] ;getpixel -transrev11: -tran2palc: mov al, byte [ecx+88888888h] ;palookup1 -fixchaint2d: add edi, 320 -tran2trac: mov bl, byte [eax+88888888h] ;_transluc -tran2edid: mov byte [edi+88888888h-320], bl ;drawpixel - jnc short begintvline2 - jmp endtvline2 - -skipdraw1: - cmp dl, 255 - jne short skipdraw3 -fixchaint2b: add edi, 320 - jc short endtvline2 - -begintvline2: - mov eax, esi -tran2shra: shr eax, 88h ;globalshift - mov ebx, ebp -tran2shrb: shr ebx, 88h ;globalshift -tran2inca: add esi, 88888888h ;vinc1 -tran2incb: add ebp, 88888888h ;vinc2 -tran2bufa: mov cl, byte [eax+88888888h] ;bufplc1 - cmp cl, 255 -tran2bufb: mov dl, byte [ebx+88888888h] ;bufplc2 - je short skipdraw1 - cmp dl, 255 - je short skipdraw2 - - ;mov ax The transluscent reverse of both! - ;mov bl, ah - ;mov ah - ;mov bh - - ;BOTH -transrev12: -tran2edia: mov bx, word [edi+88888888h] ;getpixels -transrev13: - mov ah, bl -transrev14: -tran2pala: mov al, byte [ecx+88888888h] ;palookup1 -transrev15: -tran2palb: mov bl, byte [edx+88888888h] ;palookup2 -fixchaint2c: add edi, 320 -tran2traa: mov al, byte [eax+88888888h] ;_transluc -tran2trab: mov ah, byte [ebx+88888888h] ;_transluc -tran2edib: mov word [edi+88888888h-320], ax ;drawpixels - jnc short begintvline2 - jmp short endtvline2 - - ;RIGHT ONLY -skipdraw3: -transrev16: -tran2edie: mov ah, byte [edi+88888889h] ;getpixel -transrev17: -tran2pald: mov al, byte [edx+88888888h] ;palookup2 -fixchaint2e: add edi, 320 -tran2trad: mov bl, byte [eax+88888888h] ;_transluc -tran2edif: mov byte [edi+88888889h-320], bl ;drawpixel - jnc short begintvline2 - -endtvline2: - mov dword [asm1], esi - mov dword [asm2], ebp - - pop ebp -CDECLENDSET 6 - ret - - -BITSOFPRECISION equ 3 -BITSOFPRECISIONPOW equ 8 - -;Double-texture mapping with palette lookup -;eax: ylo1------------|----dat|----dat -;ebx: ylo2--------------------|----cnt -;ecx: 000000000000000000000000|---temp -;edx: xhi1-xlo1---------------|---yhi1 -;esi: xhi2-xlo2---------------|---yhi2 -;edi: ------------------------videopos -;ebp: ----------------------------temp - - ALIGN 16 -setupslopevlin2: -CDECLBEGINSET 6 - - mov dword [slop3+2], edx ;ptr - mov dword [slop7+2], edx ;ptr - mov dword [slop4+2], esi ;tptr - mov dword [slop8+2], esi ;tptr - mov byte [slop2+2], ah ;ybits - mov byte [slop6+2], ah ;ybits - mov dword [slop9+2], edi ;pinc - - mov edx, 1 - mov cl, al - add cl, ah - shl edx, cl - dec edx - mov cl, ah - ror edx, cl - - mov dword [slop1+2], edx ;ybits...xbits - mov dword [slop5+2], edx ;ybits...xbits - -CDECLENDSET 6 - ret - - ALIGN 16 -slopevlin2: -CDECLBEGINSET 6 - - push ebp - xor ecx, ecx - -slopevlin2begin: - mov ebp, edx -slop1: and ebp, 88000088h ;ybits...xbits -slop2: rol ebp, 6 ;ybits - add eax, dword [asm1] ;xinc1<>(32-xbits)) -slop3: mov cl, byte [ebp+88888888h] ;bufplc - - mov ebp, esi -slop4: mov al, byte [ecx+88888888h] ;paloffs -slop5: and ebp, 88000088h ;ybits...xbits -slop6: rol ebp, 6 ;ybits - add ebx, dword [asm3] ;xinc2<>(32-xbits)) -slop8: mov ah, byte [ecx+88888888h] ;paloffs - - dec bl - mov word [edi], ax -slop9: lea edi, [edi+88888888h] ;pinc - jnz short slopevlin2begin - - pop ebp - mov eax, edi - -CDECLENDSET 6 - ret - - - ALIGN 16 -setupslopevlin: -CDECLBEGINSET 3 - - mov dword [slopmach3+3], ebx ;ptr - mov dword [slopmach5+2], ecx ;pinc - neg ecx - mov dword [slopmach6+2], ecx ;-pinc - - mov edx, 1 - mov cl, al - shl edx, cl - dec edx - mov cl, ah - shl edx, cl - mov dword [slopmach7+2], edx - - neg ah - mov byte [slopmach2+2], ah - - sub ah, al - mov byte [slopmach1+2], ah - - fild dword [asm1] - fstp dword [asm2] - -CDECLENDSET 3 - ret - - - ALIGN 16 -slopevlin: -CDECLBEGINSET 6 - - mov dword [ebpbak], ebp - mov dword [espbak], esp - - sub ecx, esp - mov dword [slopmach4+3], ecx - - fild dword [asm3] -slopmach6: lea ebp, [eax+88888888h] - fadd dword [asm2] - - mov dword [asm1], ebx - shl ebx, 3 - - mov eax, dword [globalx3] - mov ecx, dword [globaly3] - imul eax, ebx - imul ecx, ebx - add esi, eax - add edi, ecx - - mov ebx, edx - jmp short bigslopeloop -ALIGN 16 -bigslopeloop: - fst dword [fpuasm] - - mov eax, dword [fpuasm] - add eax, eax - sbb edx, edx - mov ecx, eax - shr ecx, 24 - and eax, 00ffe000h - shr eax, 11 - sub cl, 2 - mov eax, dword [reciptable+eax] - shr eax, cl - xor eax, edx - mov edx, dword [asm1] - mov ecx, dword [globalx3] - mov dword [asm1], eax - sub eax, edx - mov edx, dword [globaly3] - imul ecx, eax - imul eax, edx - - fadd dword [asm2] - - cmp ebx, BITSOFPRECISIONPOW - mov dword [asm4], ebx - mov cl, bl - jl short slopeskipmin - mov cl, BITSOFPRECISIONPOW -slopeskipmin: - -;eax: yinc............. -;ebx: 0 0 0 ? -;ecx: xinc......... cnt -;edx: ? -;esi: xplc............. -;edi: yplc............. -;ebp: videopos - - mov ebx, esi - mov edx, edi - -beginnerslopeloop: -slopmach1: shr ebx, 20 - add esi, ecx -slopmach2: shr edx, 26 -slopmach7: and ebx, 88888888h - add edi, eax -slopmach5: add ebp, 88888888h ;pinc -slopmach3: mov dl, byte [ebx+edx+88888888h] ;ptr -slopmach4: mov ebx, dword [esp+88888888h] - sub esp, 4 - dec cl - mov al, byte [ebx+edx] ;tptr - mov ebx, esi - mov [ebp], al - mov edx, edi - jnz short beginnerslopeloop - - mov ebx, dword [asm4] - sub ebx, BITSOFPRECISIONPOW - jg near bigslopeloop - - ffree st0 - - mov esp, dword [espbak] - mov ebp, dword [ebpbak] - -CDECLENDSET 6 - ret - - - ALIGN 16 -setuprhlineasm4: -CDECLBEGINSET 6 - - mov dword [rmach1a+2], eax - mov dword [rmach1b+2], eax - mov dword [rmach1c+2], eax - mov dword [rmach1d+2], eax - mov dword [rmach1e+2], eax - - mov dword [rmach2a+2], ebx - mov dword [rmach2b+2], ebx - mov dword [rmach2c+2], ebx - mov dword [rmach2d+2], ebx - mov dword [rmach2e+2], ebx - - mov dword [rmach3a+2], ecx - mov dword [rmach3b+2], ecx - mov dword [rmach3c+2], ecx - mov dword [rmach3d+2], ecx - mov dword [rmach3e+2], ecx - - mov dword [rmach4a+2], edx - mov dword [rmach4b+2], edx - mov dword [rmach4c+2], edx - mov dword [rmach4d+2], edx - mov dword [rmach4e+2], edx - - mov dword [rmach5a+2], esi - mov dword [rmach5b+2], esi - mov dword [rmach5c+2], esi - mov dword [rmach5d+2], esi - mov dword [rmach5e+2], esi - -CDECLENDSET 6 - ret - - ;Non power of 2, non masking, with palookup method #1 (6 clock cycles) - ;eax: dat dat dat dat - ;ebx: bufplc - ;ecx: 0 dat - ;edx: xlo - ;esi: ylo - ;edi: videopos/cnt - ;ebp: tempvar - ;esp: - ALIGN 16 -rhlineasm4: -CDECLBEGINSET 6 - - push ebp - - cmp eax, 0 - jle near endrhline - - lea ebp, [edi-4] - sub ebp, eax - mov dword [rmach6a+2], ebp - add ebp, 3 - mov dword [rmach6b+2], ebp - mov edi, eax - test edi, 3 - jz short begrhline - jmp short startrhline1 - -ALIGN 16 -startrhline1: - mov cl, byte [ebx] ;bufplc -rmach1e: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmach2e: sub esi, 88888888h ;ylo -rmach3e: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmach4e: mov al, byte [ecx+88888888h] ;palookup -rmach5e: and ebp, 88888888h ;tilesizy -rmach6b: mov byte [edi+88888888h], al ;vidcntoffs - sub ebx, ebp - dec edi - test edi, 3 - jnz short startrhline1 - test edi, edi - jz near endrhline - -begrhline: - mov cl, byte [ebx] ;bufplc -rmach1a: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmach2a: sub esi, 88888888h ;ylo -rmach3a: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmach5a: and ebp, 88888888h ;tilesizy - sub ebx, ebp - -rmach1b: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmach4a: mov ah, byte [ecx+88888888h] ;palookup - mov cl, byte [ebx] ;bufplc -rmach2b: sub esi, 88888888h ;ylo -rmach3b: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmach5b: and ebp, 88888888h ;tilesizy -rmach4b: mov al, byte [ecx+88888888h] ;palookup - sub ebx, ebp - - shl eax, 16 - - mov cl, byte [ebx] ;bufplc -rmach1c: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmach2c: sub esi, 88888888h ;ylo -rmach3c: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmach5c: and ebp, 88888888h ;tilesizy - sub ebx, ebp - -rmach1d: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmach4c: mov ah, byte [ecx+88888888h] ;palookup - mov cl, byte [ebx] ;bufplc -rmach2d: sub esi, 88888888h ;ylo -rmach3d: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmach5d: and ebp, 88888888h ;tilesizy -rmach4d: mov al, byte [ecx+88888888h] ;palookup - sub ebx, ebp - -rmach6a: mov dword [edi+88888888h], eax ;vidcntoffs - sub edi, 4 - jnz near begrhline -endrhline: - pop ebp - -CDECLENDSET 6 - ret - - - ALIGN 16 -setuprmhlineasm4: -CDECLBEGINSET 6 - mov dword [rmmach1+2], eax - mov dword [rmmach2+2], ebx - mov dword [rmmach3+2], ecx - mov dword [rmmach4+2], edx - mov dword [rmmach5+2], esi -CDECLENDSET 6 - ret - - - ALIGN 16 -rmhlineasm4: -CDECLBEGINSET 6 - - push ebp - - cmp eax, 0 - jle short endrmhline - - lea ebp, [edi-1] - sub ebp, eax - mov dword [rmmach6+2], ebp - mov edi, eax - jmp short begrmhline - -ALIGN 16 -begrmhline: - mov cl, byte [ebx] ;bufplc -rmmach1: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmmach2: sub esi, 88888888h ;ylo -rmmach3: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmmach5: and ebp, 88888888h ;tilesizy - cmp cl, 255 - je short rmskip -rmmach4: mov al, byte [ecx+88888888h] ;palookup -rmmach6: mov byte [edi+88888888h], al ;vidcntoffs -rmskip: - sub ebx, ebp - dec edi - jnz short begrmhline -endrmhline: - pop ebp - -CDECLENDSET 6 - ret - - - ALIGN 16 -setupqrhlineasm4: -CDECLBEGINSET 6 - - mov dword [qrmach2e+2], ebx - mov dword [qrmach3e+2], ecx - xor edi, edi - sub edi, ecx - mov dword [qrmach7a+2], edi - mov dword [qrmach7b+2], edi - - add ebx, ebx - adc ecx, ecx - mov dword [qrmach2a+2], ebx - mov dword [qrmach2b+2], ebx - mov dword [qrmach3a+2], ecx - mov dword [qrmach3b+2], ecx - - mov dword [qrmach4a+2], edx - mov dword [qrmach4b+2], edx - mov dword [qrmach4c+2], edx - mov dword [qrmach4d+2], edx - mov dword [qrmach4e+2], edx - -CDECLENDSET 6 - ret - - ;Non power of 2, non masking, with palookup method (FASTER BUT NO SBB'S) - ;eax: dat dat dat dat - ;ebx: bufplc - ;ecx: 0 dat - ;edx: 0 dat - ;esi: ylo - ;edi: videopos/cnt - ;ebp: ? - ;esp: - ALIGN 16 -qrhlineasm4: -CDECLBEGINSET 6 - - push ebp - - cmp eax, 0 - jle near endqrhline - - mov ebp, eax - test ebp, 3 - jz short skipqrhline1 - jmp short startqrhline1 - -ALIGN 16 -startqrhline1: - mov cl, byte [ebx] ;bufplc - dec edi -qrmach2e: sub esi, 88888888h ;ylo - dec ebp -qrmach3e: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -qrmach4e: mov al, byte [ecx+88888888h] ;palookup - mov byte [edi], al ;vidcntoffs - test ebp, 3 - jnz short startqrhline1 - test ebp, ebp - jz short endqrhline - -skipqrhline1: - mov cl, byte [ebx] ;bufplc - jmp short begqrhline -ALIGN 16 -begqrhline: -qrmach7a: mov dl, byte [ebx+88888888h] ;bufplc -qrmach2a: sub esi, 88888888h ;ylo -qrmach3a: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -qrmach4a: mov ah, byte [ecx+88888888h] ;palookup -qrmach4b: mov al, byte [edx+88888888h] ;palookup - sub edi, 4 - shl eax, 16 - mov cl, byte [ebx] ;bufplc -qrmach7b: mov dl, byte [ebx+88888888h] ;bufplc -qrmach2b: sub esi, 88888888h ;ylo -qrmach3b: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -qrmach4c: mov ah, byte [ecx+88888888h] ;palookup -qrmach4d: mov al, byte [edx+88888888h] ;palookup - mov cl, byte [ebx] ;bufplc - mov dword [edi], eax - sub ebp, 4 - jnz short begqrhline - -endqrhline: - pop ebp - -CDECLENDSET 6 - ret - - -setupdrawslab: -CDECLBEGINSET 2 - - mov dword [voxbpl1+2], eax - mov dword [voxbpl2+2], eax - mov dword [voxbpl3+2], eax - mov dword [voxbpl4+2], eax - mov dword [voxbpl5+2], eax - mov dword [voxbpl6+2], eax - mov dword [voxbpl7+2], eax - mov dword [voxbpl8+2], eax - - mov dword [voxpal1+2], ebx - mov dword [voxpal2+2], ebx - mov dword [voxpal3+2], ebx - mov dword [voxpal4+2], ebx - mov dword [voxpal5+2], ebx - mov dword [voxpal6+2], ebx - mov dword [voxpal7+2], ebx - mov dword [voxpal8+2], ebx - -CDECLENDSET 2 - ret - - - ALIGN 16 -drawslab: -CDECLBEGINSET 6 - - push ebp - cmp eax, 2 - je near voxbegdraw2 - ja near voxskip2 - xor eax, eax -voxbegdraw1: - mov ebp, ebx - shr ebp, 16 - add ebx, edx - dec ecx - mov al, byte [esi+ebp] -voxpal1: mov al, byte [eax+88888888h] - mov byte [edi], al -voxbpl1: lea edi, [edi+88888888h] - jnz near voxbegdraw1 - pop ebp - -CDECLENDSET 6 - ret - -voxbegdraw2: - mov ebp, ebx - shr ebp, 16 - add ebx, edx - xor eax, eax - dec ecx - mov al, byte [esi+ebp] -voxpal2: mov al, byte [eax+88888888h] - mov ah, al - mov word [edi], ax -voxbpl2: lea edi, [edi+88888888h] - jnz near voxbegdraw2 - pop ebp - -CDECLENDSET 6 - ret - -voxskip2: - cmp eax, 4 - jne near voxskip4 - xor eax, eax -voxbegdraw4: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte [esi+ebp] -voxpal3: mov al, byte [eax+88888888h] - mov ah, al - shl eax, 8 - mov al, ah - shl eax, 8 - mov al, ah - mov dword [edi], eax -voxbpl3: add edi, 88888888h - dec ecx - jnz near voxbegdraw4 - pop ebp - -CDECLENDSET 6 - ret - -voxskip4: - add eax, edi - - test edi, 1 - jz near voxskipslab1 - cmp edi, eax - je near voxskipslab1 - - push eax - push ebx - push ecx - push edi -voxbegslab1: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte [esi+ebp] -voxpal4: mov al, byte [eax+88888888h] - mov byte [edi], al -voxbpl4: add edi, 88888888h - dec ecx - jnz near voxbegslab1 - pop edi - pop ecx - pop ebx - pop eax - inc edi - -voxskipslab1: - push eax - test edi, 2 - jz near voxskipslab2 - dec eax - cmp edi, eax - jge near voxskipslab2 - - push ebx - push ecx - push edi -voxbegslab2: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte [esi+ebp] -voxpal5: mov al, byte [eax+88888888h] - mov ah, al - mov word [edi], ax -voxbpl5: add edi, 88888888h - dec ecx - jnz near voxbegslab2 - pop edi - pop ecx - pop ebx - add edi, 2 - -voxskipslab2: - mov eax, dword [esp] - - sub eax, 3 - cmp edi, eax - jge near voxskipslab3 - -voxprebegslab3: - push ebx - push ecx - push edi -voxbegslab3: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte [esi+ebp] -voxpal6: mov al, byte [eax+88888888h] - mov ah, al - shl eax, 8 - mov al, ah - shl eax, 8 - mov al, ah - mov dword [edi], eax -voxbpl6: add edi, 88888888h - dec ecx - jnz near voxbegslab3 - pop edi - pop ecx - pop ebx - add edi, 4 - - mov eax, dword [esp] - - sub eax, 3 - cmp edi, eax - jl near voxprebegslab3 - -voxskipslab3: - mov eax, dword [esp] - - dec eax - cmp edi, eax - jge near voxskipslab4 - - push ebx - push ecx - push edi -voxbegslab4: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte [esi+ebp] -voxpal7: mov al, byte [eax+88888888h] - mov ah, al - mov word [edi], ax -voxbpl7: add edi, 88888888h - dec ecx - jnz near voxbegslab4 - pop edi - pop ecx - pop ebx - add edi, 2 - -voxskipslab4: - pop eax - - cmp edi, eax - je near voxskipslab5 - -voxbegslab5: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte [esi+ebp] -voxpal8: mov al, byte [eax+88888888h] - mov byte [edi], al -voxbpl8: add edi, 88888888h - dec ecx - jnz near voxbegslab5 - -voxskipslab5: - pop ebp - -CDECLENDSET 6 - ret - -;modify: loinc -;eax: | dat | dat | dat | dat | -;ebx: | loplc1 | -;ecx: | loplc2 | cnthi | cntlo | -;edx: |--------|--------|--------| hiplc1 | -;esi: |--------|--------|--------| hiplc2 | -;edi: |--------|--------|--------| vidplc | -;ebp: |--------|--------|--------| hiinc | - -stretchhline: -CDECLBEGINSET 6 - - push ebp - - mov eax, ebx - shl ebx, 16 - sar eax, 16 - and ecx, 0000ffffh - or ecx, ebx - - add esi, eax - mov eax, edx - mov edx, esi - - mov ebp, eax - shl eax, 16 - sar ebp, 16 - - add ecx, eax - adc esi, ebp - - add eax, eax - adc ebp, ebp - mov dword [loinc1+2], eax - mov dword [loinc2+2], eax - mov dword [loinc3+2], eax - mov dword [loinc4+2], eax - - inc ch - - jmp begloop - -begloop: - mov al, [edx] -loinc1: sub ebx, 88888888h - sbb edx, ebp - mov ah, [esi] -loinc2: sub ecx, 88888888h - sbb esi, ebp - sub edi, 4 - shl eax, 16 -loinc3: sub ebx, 88888888h - mov al, [edx] - sbb edx, ebp - mov ah, [esi] -loinc4: sub ecx, 88888888h - sbb esi, ebp - mov [edi], eax - dec cl - jnz begloop - dec ch - jnz begloop - - pop ebp - -CDECLENDSET 6 - ret - - -mmxoverlay: - push ebx ;JBF - push ecx ;JBF - push edx ;JBF - - pushfd ;Check if CPUID is available - pop eax - mov ebx, eax - xor eax, 00200000h - push eax - popfd - pushfd - pop eax - cmp eax, ebx - je pentium - xor eax, eax - dw 0a20fh - test eax, eax - jz pentium - mov eax, 1 - dw 0a20fh - and eax, 00000f00h - test edx, 00800000h ;Check if MMX is available - jz nommx - cmp eax, 00000600h ;Check if P6 Family or not - jae pentiumii - jmp pentiummmx -nommx: - cmp eax, 00000600h ;Check if P6 Family or not - jae pentiumpro -pentium: - - pop edx ;JBF - pop ecx ;JBF - pop ebx ;JBF - ret - -;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -;³ PENTIUM II Overlays ³ -;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ -pentiumii: - ;Hline overlay (MMX doens't help) - mov byte [sethlinesizes], 0xe9 - mov dword [sethlinesizes+1], (prosethlinesizes-sethlinesizes-5) - mov byte [setpalookupaddress], 0xe9 - mov dword [setpalookupaddress+1], (prosetpalookupaddress-setpalookupaddress-5) - mov byte [setuphlineasm4], 0xc3 ;ret (no code required) - mov byte [hlineasm4], 0xe9 - mov dword [hlineasm4+1], (prohlineasm4-hlineasm4-5) - - ;Vline overlay - mov byte [setupvlineasm], 0xe9 - mov dword [setupvlineasm+1], (prosetupvlineasm-setupvlineasm-5) - mov byte [vlineasm4], 0xe9 - mov dword [vlineasm4+1], (provlineasm4-vlineasm4-5) - - pop edx ;JBF - pop ecx ;JBF - pop ebx ;JBF - ret - -;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -;³ PENTIUM MMX Overlays ³ -;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ -pentiummmx: - pop edx ;JBF - pop ecx ;JBF - pop ebx ;JBF - ret - -;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -;³ PENTIUM PRO Overlays ³ -;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ -pentiumpro: - ;Hline overlay (MMX doens't help) - mov byte [sethlinesizes], 0xe9 - mov dword [sethlinesizes+1], (prosethlinesizes-sethlinesizes-5) - mov byte [setpalookupaddress], 0xe9 - mov dword [setpalookupaddress+1], (prosetpalookupaddress-setpalookupaddress-5) - mov byte [setuphlineasm4], 0xc3 ;ret (no code required) - mov byte [hlineasm4], 0xe9 - mov dword [hlineasm4+1], (prohlineasm4-hlineasm4-5) - - ;Vline overlay - mov byte [setupvlineasm], 0xe9 - mov dword [setupvlineasm+1], (prosetupvlineasm-setupvlineasm-5) - mov byte [vlineasm4], 0xe9 - mov dword [vlineasm4+1], (provlineasm4-vlineasm4-5) - - pop edx ;JBF - pop ecx ;JBF - pop ebx ;JBF - ret - -dep_end: diff --git a/polymer-perf/eduke32/build/src/a.wasm b/polymer-perf/eduke32/build/src/a.wasm deleted file mode 100644 index 504c84c1b..000000000 --- a/polymer-perf/eduke32/build/src/a.wasm +++ /dev/null @@ -1,2425 +0,0 @@ -; "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman -; Ken Silverman's official web site: "http://www.advsys.net/ken" -; See the included license file "BUILDLIC.TXT" for license info. - -.586P -.8087 -;include mmx.inc ;Include this if using < WATCOM 11.0 WASM - -;Warning: IN THIS FILE, ALL SEGMENTS ARE REMOVED. THIS MEANS THAT DS:[] -;MUST BE ADDED FOR ALL SELF-MODIFIES FOR MASM TO WORK. -; -;WASM PROBLEMS: -; 1. Requires all scaled registers (*1,*2,*4,*8) to be last thing on line -; 2. Using 'DATA' is nice for self-mod. code, but WDIS only works with 'CODE' -; -;MASM PROBLEMS: -; 1. Requires DS: to be written out for self-modifying code to work -; 2. Doesn't encode short jumps automatically like WASM -; 3. Stupidly adds wait prefix to ffree's - -EXTRN _asm1 : dword -EXTRN _asm2 : dword -EXTRN _asm3 : dword -EXTRN _asm4 : dword -EXTRN _reciptable : near -EXTRN _fpuasm : dword -EXTRN _globalx3 : dword -EXTRN _globaly3 : dword -EXTRN _ylookup : near - -EXTRN _vplce : near -EXTRN _vince : near -EXTRN _palookupoffse : near -EXTRN _bufplce : near - -EXTRN _ebpbak : dword -EXTRN _espbak : dword - -EXTRN _pow2char : near -EXTRN _pow2long : near - -CODE SEGMENT PUBLIC USE32 'CODE' -ASSUME cs:CODE,ds:CODE - -PUBLIC _dep_begin -_dep_begin: - -ALIGN 16 -PUBLIC sethlinesizes_ -sethlinesizes_: - mov byte ptr [machxbits1+2], al - mov byte ptr [machxbits2+2], al - mov byte ptr [machxbits3+2], al - neg al - mov byte ptr [hxsiz1+2], al - mov byte ptr [hxsiz2+2], al - mov byte ptr [hxsiz3+2], al - mov byte ptr [hxsiz4+2], al - mov byte ptr [machnegxbits1+2], al - - mov byte ptr [hysiz1+3], bl - mov byte ptr [hysiz2+3], bl - mov byte ptr [hysiz3+3], bl - mov byte ptr [hysiz4+3], bl - mov byte ptr [hmach3a+2], bl - mov byte ptr [hmach3b+2], bl - mov byte ptr [hmach3c+2], bl - mov byte ptr [hmach3d+2], bl - - mov dword ptr [hoffs1+2], ecx - mov dword ptr [hoffs2+2], ecx - mov dword ptr [hoffs3+2], ecx - mov dword ptr [hoffs4+2], ecx - mov dword ptr [hoffs5+2], ecx - mov dword ptr [hoffs6+2], ecx - mov dword ptr [hoffs7+2], ecx - mov dword ptr [hoffs8+2], ecx - - mov edx, -1 - mov cl, al - sub cl, bl - shr edx, cl - mov dword ptr [hmach2a+1], edx - mov dword ptr [hmach2b+1], edx - mov dword ptr [hmach2c+1], edx - mov dword ptr [hmach2d+1], edx - - ret - -ALIGN 16 -PUBLIC prosethlinesizes_ -prosethlinesizes_: - mov dword ptr [prohbuf-4], ecx - neg eax - mov ecx, eax - sub eax, ebx - mov byte ptr [prohshru-1], al ;bl = 32-al-bl - mov eax, -1 - shr eax, cl - mov ecx, ebx - shl eax, cl - mov dword ptr [prohand-4], eax ;((-1>>(-oal))<>(32-xbits) adc al, 88h 1 1/2 - ;bufplc mov cl, byte ptr [edx+88888888h] 1 1/2 - ;paloffs&255 mov bl, byte ptr [ecx+88888888h] 1 1/2 -ALIGN 16 -PUBLIC hlineasm4_ -hlineasm4_: - push ebp - - lea ebp, [eax+1] - - cmp ebp, 8 - jle shorthline - - test edi, 1 - jnz short skipthe1byte - - mov eax, esi -hxsiz1: shr eax, 26 -hysiz1: shld eax, edx, 6 -hoffs1: mov cl, byte ptr [eax+88888888h] -pal1: mov bl, byte ptr [ecx+88888888h] - sub esi, _asm1 - sub edx, _asm2 - mov byte ptr [edi], bl - dec edi - dec ebp - -skipthe1byte: - test edi, 2 - jnz short skipthe2byte - - mov eax, esi -hxsiz2: shr eax, 26 -hysiz2: shld eax, edx, 6 -hoffs2: mov cl, byte ptr [eax+88888888h] -pal2: mov bh, byte ptr [ecx+88888888h] - sub esi, _asm1 - sub edx, _asm2 - - mov eax, esi -hxsiz3: shr eax, 26 -hysiz3: shld eax, edx, 6 -hoffs3: mov cl, byte ptr [eax+88888888h] -pal3: mov bl, byte ptr [ecx+88888888h] - sub esi, _asm1 - sub edx, _asm2 - mov word ptr [edi-1], bx - sub edi, 2 - sub ebp, 2 - -skipthe2byte: - - mov eax, esi -machxbits1: shl esi, 6 ;xbits -machnegxbits1: shr eax, 32-6 ;32-xbits - mov dl, al - - inc edi - - add ebx, ebx - mov eax, edx - jc beginhline64 - - mov eax, _asm1 -machxbits2: rol eax, 6 ;xbits - mov dword ptr [hmach4a+2], eax - mov dword ptr [hmach4b+2], eax - mov dword ptr [hmach4c+2], eax - mov dword ptr [hmach4d+2], eax - mov ebx, eax - mov eax, _asm2 - mov al, bl - mov dword ptr [hmach1a+2], eax - mov dword ptr [hmach1b+2], eax - mov dword ptr [hmach1c+2], eax - mov dword ptr [hmach1d+2], eax - - mov eax, edx - jmp beginhline64 -ALIGN 16 -prebeginhline64: - mov dword ptr [edi], ebx -beginhline64: - -hmach3a: rol eax, 6 -hmach2a: and eax, 00008888h -hmach4a: sub esi, 88888888h -hmach1a: sbb edx, 88888888h - sub edi, 4 -hoffs4: mov cl, byte ptr [eax+88888888h] - mov eax, edx - -hmach3b: rol eax, 6 -hmach2b: and eax, 00008888h -hmach4b: sub esi, 88888888h -hmach1b: sbb edx, 88888888h -pal4: mov bh, byte ptr [ecx+88888888h] -hoffs5: mov cl, byte ptr [eax+88888888h] - mov eax, edx - -hmach3c: rol eax, 6 -pal5: mov bl, byte ptr [ecx+88888888h] -hmach2c: and eax, 00008888h - shl ebx, 16 -hmach4c: sub esi, 88888888h -hmach1c: sbb edx, 88888888h -hoffs6: mov cl, byte ptr [eax+88888888h] - - mov eax, edx - ;( - -hmach3d: rol eax, 6 -hmach2d: and eax, 00008888h -hmach4d: sub esi, 88888888h -hmach1d: sbb edx, 88888888h -pal6: mov bh, byte ptr [ecx+88888888h] -hoffs7: mov cl, byte ptr [eax+88888888h] - mov eax, edx - sub ebp, 4 - nop -pal7: mov bl, byte ptr [ecx+88888888h] - jnc prebeginhline64 -skipthe4byte: - - test ebp, 2 - jz skipdrawthe2 - rol ebx, 16 - mov word ptr [edi+2], bx - sub edi, 2 -skipdrawthe2: - test ebp, 1 - jz skipdrawthe1 - shr ebx, 24 - mov byte ptr [edi+3], bl -skipdrawthe1: - - pop ebp - ret - -shorthline: - test ebp, ebp - jz endshorthline -begshorthline: - mov eax, esi -hxsiz4: shr eax, 26 -hysiz4: shld eax, edx, 6 -hoffs8: mov cl, byte ptr [eax+88888888h] -pal8: mov bl, byte ptr [ecx+88888888h] - sub esi, _asm1 - sub edx, _asm2 - mov byte ptr [edi], bl - dec edi - dec ebp - jnz begshorthline -endshorthline: - pop ebp - ret - - - ;eax: 00000000 00000000 00000000 temp---- - ;ebx: 00000000 00000000 00000000 temp---- - ;ecx: UUUUUUuu uuuuuuuu uuuuuuuu uuuuuuuu - ;edx: VVVVVVvv vvvvvvvv vvvvvvvv vvvvvvvv - ;esi: cnt----- -------- -------- -------- - ;edi: vid----- -------- -------- -------- - ;ebp: paloffs- -------- -------- -------- - ;esp: ???????? ???????? ???????? ???????? -ALIGN 16 -PUBLIC prohlineasm4_ -prohlineasm4_: - push ebp - - lea ebp, [ecx+88888888h] -prohpala: - mov ecx, esi - lea esi, [eax+1] - sub edi, esi - -prohbeg: - mov eax, ecx - shr eax, 20 -prohshru: - mov ebx, edx - shr ebx, 26 -prohshrv: - and eax, 88888888h -prohand: - movzx eax, byte ptr [eax+ebx+88888888h] -prohbuf: - mov al, [eax+ebp] - sub ecx, _asm1 - sub edx, _asm2 - mov [edi+esi], al - dec esi - jnz prohbeg - - pop ebp - ret - - - -ALIGN 16 -PUBLIC setupvlineasm_ -setupvlineasm_: - ;First 2 lines for VLINEASM1, rest for VLINEASM4 - mov byte ptr [premach3a+2], al - mov byte ptr [mach3a+2], al - - push ecx - mov byte ptr [machvsh1+2], al ;32-shy - mov byte ptr [machvsh3+2], al ;32-shy - mov byte ptr [machvsh5+2], al ;32-shy - mov byte ptr [machvsh6+2], al ;32-shy - mov ah, al - sub ah, 16 - mov byte ptr [machvsh8+2], ah ;16-shy - neg al - mov byte ptr [machvsh7+2], al ;shy - mov byte ptr [machvsh9+2], al ;shy - mov byte ptr [machvsh10+2], al ;shy - mov byte ptr [machvsh11+2], al ;shy - mov byte ptr [machvsh12+2], al ;shy - mov cl, al - mov eax, 1 - shl eax, cl - dec eax - mov dword ptr [machvsh2+2], eax ;(1<>sh) - ;vplc3 = (ebp<<(32-sh))+((edx&65535)<<(16-sh)) -machvsh5: shl esi, 88h ;32-sh - mov eax, edx -machvsh6: shl ebp, 88h ;32-sh - and edx, 0000ffffh -machvsh7: shr eax, 88h ;sh - add esi, eax -machvsh8: shl edx, 88h ;16-sh - add ebp, edx - mov dword ptr _vplce[12], esi - mov dword ptr _vplce[4], ebp - - pop ebp - ret - - ;eax: -------temp1------- - ;ebx: -------temp2------- - ;ecx: ylo4 --------- - ;edx: ylo2 --------- - ;esi: yhi1 yhi2 - ;edi: ---videoplc/cnt---- - ;ebp: yhi3 yhi4 - ;esp: -ALIGN 16 -PUBLIC provlineasm4_ -provlineasm4_: - push ebp - - mov eax, dword ptr _ylookup[ecx*4] - add eax, edi - mov dword ptr [promachvline4end1+2], eax - inc eax - mov dword ptr [promachvline4end2+2], eax - inc eax - mov dword ptr [promachvline4end3+2], eax - inc eax - mov dword ptr [promachvline4end4+2], eax - sub eax, 3 - sub edi, eax - - mov eax, dword ptr _bufplce[0] - mov ebx, dword ptr _bufplce[4] - mov ecx, dword ptr _bufplce[8] - mov edx, dword ptr _bufplce[12] - mov dword ptr [promachvbuf1+3], ecx - mov dword ptr [promachvbuf2+3], edx - mov dword ptr [promachvbuf3+3], eax - mov dword ptr [promachvbuf4+3], ebx - - mov eax, dword ptr _palookupoffse[0] - mov ebx, dword ptr _palookupoffse[4] - mov ecx, dword ptr _palookupoffse[8] - mov edx, dword ptr _palookupoffse[12] - mov dword ptr [promachvpal1+2], ecx - mov dword ptr [promachvpal2+2], edx - mov dword ptr [promachvpal3+2], eax - mov dword ptr [promachvpal4+2], ebx - - ; ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ - ;edx: ³v3lo ³v1lo ³ - ; ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄ´ - ;esi: ³v2hi v2lo ³ v3hi³ - ; ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄ´ - ;ebp: ³v0hi v0lo ³ v1hi³ - ; ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ - - mov ebp, dword ptr _vince[0] - mov ebx, dword ptr _vince[4] - mov esi, dword ptr _vince[8] - mov eax, dword ptr _vince[12] - and esi, 0fffffe00h - and ebp, 0fffffe00h -promachvsh9: rol eax, 88h ;sh -promachvsh10: rol ebx, 88h ;sh - mov edx, eax - mov ecx, ebx - shr ecx, 16 - and edx, 0ffff0000h - add edx, ecx - and eax, 000001ffh - and ebx, 000001ffh - add esi, eax - add ebp, ebx - ; - mov eax, edx - and eax, 0ffff0000h - mov dword ptr [promachvinc1+2], eax - mov dword ptr [promachvinc2+2], esi - shl edx, 16 - mov dword ptr [promachvinc3+2], edx - mov dword ptr [promachvinc5+2], ebp - - mov ebp, dword ptr _vplce[0] - mov ebx, dword ptr _vplce[4] - mov esi, dword ptr _vplce[8] - mov eax, dword ptr _vplce[12] - and esi, 0fffffe00h - and ebp, 0fffffe00h -promachvsh11: rol eax, 88h ;sh -promachvsh12: rol ebx, 88h ;sh - mov edx, eax - mov ecx, ebx - shr ecx, 16 - and edx, 0ffff0000h - add edx, ecx - and eax, 000001ffh - and ebx, 000001ffh - add esi, eax - add ebp, ebx - - mov eax, esi - mov ecx, edx - shl ecx, 16 - jmp short probeginvlineasm4 -ALIGN 16 - nop - nop - nop -probeginvlineasm4: -promachvsh1: shr eax, 88h ;32-sh - mov ebx, esi -promachvsh2: and ebx, 00000088h ;(1<>sh) - ;vplc3 = (ebp<<(32-sh))+((edx&65535)<<(16-sh)) -promachvsh5: shl esi, 88h ;32-sh - mov eax, edx -promachvsh6: shl ebp, 88h ;32-sh - and edx, 0000ffffh -promachvsh7: shr eax, 88h ;sh - add esi, eax -promachvsh8: shl edx, 88h ;16-sh - add ebp, edx - mov dword ptr _vplce[12], esi - mov dword ptr _vplce[4], ebp - - pop ebp - ret - - -ALIGN 16 -PUBLIC mvlineasm4_ -mvlineasm4_: - push ebp - - mov eax, dword ptr _bufplce[0] - mov ebx, dword ptr _bufplce[4] - mov dword ptr [machmv1+2], eax - mov dword ptr [machmv4+2], ebx - mov eax, dword ptr _bufplce[8] - mov ebx, dword ptr _bufplce[12] - mov dword ptr [machmv7+2], eax - mov dword ptr [machmv10+2], ebx - - mov eax, dword ptr _palookupoffse[0] - mov ebx, dword ptr _palookupoffse[4] - mov dword ptr [machmv2+2], eax - mov dword ptr [machmv5+2], ebx - mov eax, dword ptr _palookupoffse[8] - mov ebx, dword ptr _palookupoffse[12] - mov dword ptr [machmv8+2], eax - mov dword ptr [machmv11+2], ebx - - mov eax, dword ptr _vince[0] ;vince - mov ebx, dword ptr _vince[4] - xor al, al - xor bl, bl - mov dword ptr [machmv3+2], eax - mov dword ptr [machmv6+2], ebx - mov eax, dword ptr _vince[8] - mov ebx, dword ptr _vince[12] - mov dword ptr [machmv9+2], eax - mov dword ptr [machmv12+2], ebx - - mov ebx, ecx - mov ecx, dword ptr _vplce[0] - mov edx, dword ptr _vplce[4] - mov esi, dword ptr _vplce[8] - mov ebp, dword ptr _vplce[12] - mov cl, bl - inc cl - inc bh - mov byte ptr _asm3[0], bh -fixchain2ma: sub edi, 320 - - jmp short beginmvlineasm4 -ALIGN 16 -beginmvlineasm4: - dec cl - jz endmvlineasm4 -beginmvlineasm42: - mov eax, ebp - mov ebx, esi -machmv16: shr eax, 32 -machmv15: shr ebx, 32 -machmv12: add ebp, 88888888h ;vince[3] -machmv9: add esi, 88888888h ;vince[2] -machmv10: mov al, byte ptr [eax+88888888h] ;bufplce[3] -machmv7: mov bl, byte ptr [ebx+88888888h] ;bufplce[2] - cmp al, 255 - adc dl, dl - cmp bl, 255 - adc dl, dl -machmv8: mov bl, byte ptr [ebx+88888888h] ;palookupoffs[2] -machmv11: mov bh, byte ptr [eax+88888888h] ;palookupoffs[3] - - mov eax, edx -machmv14: shr eax, 32 - shl ebx, 16 -machmv4: mov al, byte ptr [eax+88888888h] ;bufplce[1] - cmp al, 255 - adc dl, dl -machmv6: add edx, 88888888h ;vince[1] -machmv5: mov bh, byte ptr [eax+88888888h] ;palookupoffs[1] - - mov eax, ecx -machmv13: shr eax, 32 -machmv3: add ecx, 88888888h ;vince[0] -machmv1: mov al, byte ptr [eax+88888888h] ;bufplce[0] - cmp al, 255 - adc dl, dl -machmv2: mov bl, byte ptr [eax+88888888h] ;palookupoffs[0] - - shl dl, 4 - xor eax, eax -fixchain2mb: add edi, 320 - mov al, dl - add eax, offset mvcase0 - jmp eax ;16 byte cases - -ALIGN 16 -endmvlineasm4: - dec byte ptr _asm3[0] - jnz beginmvlineasm42 - - mov dword ptr _vplce[0], ecx - mov dword ptr _vplce[4], edx - mov dword ptr _vplce[8], esi - mov dword ptr _vplce[12], ebp - pop ebp - ret - - ;5,7,8,8,11,13,12,14,11,13,14,14,12,14,15,7 -ALIGN 16 -mvcase0: - jmp beginmvlineasm4 -ALIGN 16 -mvcase1: - mov byte ptr [edi], bl - jmp beginmvlineasm4 -ALIGN 16 -mvcase2: - mov byte ptr [edi+1], bh - jmp beginmvlineasm4 -ALIGN 16 -mvcase3: - mov word ptr [edi], bx - jmp beginmvlineasm4 -ALIGN 16 -mvcase4: - shr ebx, 16 - mov byte ptr [edi+2], bl - jmp beginmvlineasm4 -ALIGN 16 -mvcase5: - mov byte ptr [edi], bl - shr ebx, 16 - mov byte ptr [edi+2], bl - jmp beginmvlineasm4 -ALIGN 16 - mvcase6: - shr ebx, 8 - mov word ptr [edi+1], bx - jmp beginmvlineasm4 -ALIGN 16 -mvcase7: - mov word ptr [edi], bx - shr ebx, 16 - mov byte ptr [edi+2], bl - jmp beginmvlineasm4 -ALIGN 16 -mvcase8: - shr ebx, 16 - mov byte ptr [edi+3], bh - jmp beginmvlineasm4 -ALIGN 16 -mvcase9: - mov byte ptr [edi], bl - shr ebx, 16 - mov byte ptr [edi+3], bh - jmp beginmvlineasm4 -ALIGN 16 -mvcase10: - mov byte ptr [edi+1], bh - shr ebx, 16 - mov byte ptr [edi+3], bh - jmp beginmvlineasm4 -ALIGN 16 -mvcase11: - mov word ptr [edi], bx - shr ebx, 16 - mov byte ptr [edi+3], bh - jmp beginmvlineasm4 -ALIGN 16 -mvcase12: - shr ebx, 16 - mov word ptr [edi+2], bx - jmp beginmvlineasm4 -ALIGN 16 -mvcase13: - mov byte ptr [edi], bl - shr ebx, 16 - mov word ptr [edi+2], bx - jmp beginmvlineasm4 -ALIGN 16 -mvcase14: - mov byte ptr [edi+1], bh - shr ebx, 16 - mov word ptr [edi+2], bx - jmp beginmvlineasm4 -ALIGN 16 -mvcase15: - mov dword ptr [edi], ebx - jmp beginmvlineasm4 - -ALIGN 16 -PUBLIC setupspritevline_ -setupspritevline_: - mov dword ptr [spal+2], eax - - mov eax, esi ;xinc's - shl eax, 16 - mov dword ptr [smach1+2], eax - mov dword ptr [smach4+2], eax - mov eax, esi - sar eax, 16 - add eax, ebx ;watch out with ebx - it's passed - mov dword ptr [smach2+2], eax - add eax, edx - mov dword ptr [smach5+2], eax - - mov dword ptr [smach3+2], ecx ;yinc's - ret - -ALIGN 16 -PUBLIC spritevline_ - ;eax = 0, ebx = x, ecx = cnt, edx = y, esi = yplc, edi = p -prestartsvline: -smach1: add ebx, 88888888h ;xincshl16 - mov al, byte ptr [esi] -smach2: adc esi, 88888888h ;xincshr16+yalwaysinc - -startsvline: -spal: mov al, [eax+88888888h] ;palookup - mov byte ptr [edi], al -fixchain1s: add edi, 320 - -spritevline_: -smach3: add edx, 88888888h ;dayinc - dec ecx - ja short prestartsvline ;jump if (no carry (add)) and (not zero (dec))! - jz short endsvline -smach4: add ebx, 88888888h ;xincshl16 - mov al, byte ptr [esi] -smach5: adc esi, 88888888h ;xincshr16+yalwaysinc+daydime - jmp short startsvline -endsvline: - ret - -ALIGN 16 -PUBLIC msetupspritevline_ -msetupspritevline_: - mov dword ptr [mspal+2], eax - - mov eax, esi ;xinc's - shl eax, 16 - mov dword ptr [msmach1+2], eax - mov dword ptr [msmach4+2], eax - mov eax, esi - sar eax, 16 - add eax, ebx ;watch out with ebx - it's passed - mov dword ptr [msmach2+2], eax - add eax, edx - mov dword ptr [msmach5+2], eax - - mov dword ptr [msmach3+2], ecx ;yinc's - ret - -ALIGN 16 -PUBLIC mspritevline_ - ;eax = 0, ebx = x, ecx = cnt, edx = y, esi = yplc, edi = p -mprestartsvline: -msmach1: add ebx, 88888888h ;xincshl16 - mov al, byte ptr [esi] -msmach2: adc esi, 88888888h ;xincshr16+yalwaysinc - -mstartsvline: - cmp al, 255 - je short mskipsvline -mspal: mov al, [eax+88888888h] ;palookup - mov byte ptr [edi], al -mskipsvline: -mfixchain1s: add edi, 320 - -mspritevline_: -msmach3: add edx, 88888888h ;dayinc - dec ecx - ja short mprestartsvline ;jump if (no carry (add)) and (not zero (dec))! - jz short mendsvline -msmach4: add ebx, 88888888h ;xincshl16 - mov al, byte ptr [esi] -msmach5: adc esi, 88888888h ;xincshr16+yalwaysinc+daydime - jmp short mstartsvline -mendsvline: - ret - -ALIGN 16 -PUBLIC tsetupspritevline_ -tsetupspritevline_: - mov dword ptr [tspal+2], eax - - mov eax, esi ;xinc's - shl eax, 16 - mov dword ptr [tsmach1+2], eax - mov dword ptr [tsmach4+2], eax - mov eax, esi - sar eax, 16 - add eax, ebx ;watch out with ebx - it's passed - mov dword ptr [tsmach2+2], eax - add eax, edx - mov dword ptr [tsmach5+2], eax - - mov dword ptr [tsmach3+2], ecx ;yinc's - ret - -ALIGN 16 -PUBLIC tspritevline_ -tspritevline_: - ;eax = 0, ebx = x, ecx = cnt, edx = y, esi = yplc, edi = p - push ebp - mov ebp, ebx - xor ebx, ebx - jmp tenterspritevline -ALIGN 16 -tprestartsvline: -tsmach1: add ebp, 88888888h ;xincshl16 - mov al, byte ptr [esi] -tsmach2: adc esi, 88888888h ;xincshr16+yalwaysinc - -tstartsvline: - cmp al, 255 - je short tskipsvline -transrev2: - mov bh, byte ptr [edi] -transrev3: -tspal: mov bl, [eax+88888888h] ;palookup -tmach4: mov al, byte ptr [ebx+88888888h] ;_transluc - mov byte ptr [edi], al -tskipsvline: -tfixchain1s: add edi, 320 - -tenterspritevline: -tsmach3: add edx, 88888888h ;dayinc - dec ecx - ja short tprestartsvline ;jump if (no carry (add)) and (not zero (dec))! - jz short tendsvline -tsmach4: add ebp, 88888888h ;xincshl16 - mov al, byte ptr [esi] -tsmach5: adc esi, 88888888h ;xincshr16+yalwaysinc+daydime - jmp short tstartsvline -tendsvline: - pop ebp - ret - -ALIGN 16 -PUBLIC msethlineshift_ -msethlineshift_: - neg al - mov byte ptr [msh1d+2], al - mov byte ptr [msh2d+3], bl - mov byte ptr [msh3d+2], al - mov byte ptr [msh4d+3], bl - mov byte ptr [msh5d+2], al - mov byte ptr [msh6d+3], bl - ret - -ALIGN 16 -PUBLIC mhline_ -mhline_: - ;_asm1 = bxinc - ;_asm2 = byinc - ;_asm3 = shadeoffs - ;eax = picoffs - ;ebx = bx - ;ecx = cnt - ;edx = ? - ;esi = by - ;edi = p - - mov dword ptr [mmach1d+2], eax - mov dword ptr [mmach5d+2], eax - mov dword ptr [mmach9d+2], eax - mov eax, _asm3 - mov dword ptr [mmach2d+2], eax - mov dword ptr [mmach2da+2], eax - mov dword ptr [mmach2db+2], eax - mov dword ptr [mmach6d+2], eax - mov dword ptr [mmach10d+2], eax - mov eax, _asm1 - mov dword ptr [mmach3d+2], eax - mov dword ptr [mmach7d+2], eax - mov eax, _asm2 - mov dword ptr [mmach4d+2], eax - mov dword ptr [mmach8d+2], eax - jmp short mhlineskipmodify_ - -ALIGN 16 -PUBLIC mhlineskipmodify_ -mhlineskipmodify_: - - push ebp - - xor eax, eax - mov ebp, ebx - - test ecx, 00010000h - jnz short mbeghline - -msh1d: shr ebx, 26 -msh2d: shld ebx, esi, 6 - add ebp, _asm1 -mmach9d: mov al, byte ptr [ebx+88888888h] ;picoffs - add esi, _asm2 - cmp al, 255 - je mskip5 - - mmach10d: mov cl, byte ptr [eax+88888888h] ;shadeoffs - mov byte ptr [edi], cl -mskip5: - inc edi - sub ecx, 65536 - jc mendhline - jmp short mbeghline - -ALIGN 16 -mpreprebeghline: ;1st only - mov al, cl -mmach2d: mov al, byte ptr [eax+88888888h] ;shadeoffs - mov byte ptr [edi], al - -mprebeghline: - add edi, 2 - sub ecx, 131072 - jc short mendhline -mbeghline: -mmach3d: lea ebx, [ebp+88888888h] ;bxinc -msh3d: shr ebp, 26 -msh4d: shld ebp, esi, 6 -mmach4d: add esi, 88888888h ;byinc -mmach1d: mov cl, byte ptr [ebp+88888888h] ;picoffs -mmach7d: lea ebp, [ebx+88888888h] ;bxinc - -msh5d: shr ebx, 26 -msh6d: shld ebx, esi, 6 -mmach8d: add esi, 88888888h ;byinc -mmach5d: mov ch, byte ptr [ebx+88888888h] ;picoffs - - cmp cl, 255 - je short mskip1 - cmp ch, 255 - je short mpreprebeghline - - mov al, cl ;BOTH -mmach2da: mov bl, byte ptr [eax+88888888h] ;shadeoffs - mov al, ch -mmach2db: mov bh, byte ptr [eax+88888888h] ;shadeoffs - mov word ptr [edi], bx - add edi, 2 - sub ecx, 131072 - jnc short mbeghline - jmp mendhline -mskip1: ;2nd only - cmp ch, 255 - je short mprebeghline - - mov al, ch -mmach6d: mov al, byte ptr [eax+88888888h] ;shadeoffs - mov byte ptr [edi+1], al - add edi, 2 - sub ecx, 131072 - jnc short mbeghline -mendhline: - - pop ebp - ret - -ALIGN 16 -PUBLIC tsethlineshift_ -tsethlineshift_: - neg al - mov byte ptr [tsh1d+2], al - mov byte ptr [tsh2d+3], bl - mov byte ptr [tsh3d+2], al - mov byte ptr [tsh4d+3], bl - mov byte ptr [tsh5d+2], al - mov byte ptr [tsh6d+3], bl - ret - -ALIGN 16 -PUBLIC thline_ -thline_: - ;_asm1 = bxinc - ;_asm2 = byinc - ;_asm3 = shadeoffs - ;eax = picoffs - ;ebx = bx - ;ecx = cnt - ;edx = ? - ;esi = by - ;edi = p - - mov dword ptr [tmach1d+2], eax - mov dword ptr [tmach5d+2], eax - mov dword ptr [tmach9d+2], eax - mov eax, _asm3 - mov dword ptr [tmach2d+2], eax - mov dword ptr [tmach6d+2], eax - mov dword ptr [tmach10d+2], eax - mov eax, _asm1 - mov dword ptr [tmach3d+2], eax - mov dword ptr [tmach7d+2], eax - mov eax, _asm2 - mov dword ptr [tmach4d+2], eax - mov dword ptr [tmach8d+2], eax - jmp thlineskipmodify_ - -ALIGN 16 -PUBLIC thlineskipmodify_ -thlineskipmodify_: - - push ebp - - xor eax, eax - xor edx, edx - mov ebp, ebx - - test ecx, 00010000h - jnz short tbeghline - -tsh1d: shr ebx, 26 -tsh2d: shld ebx, esi, 6 - add ebp, _asm1 -tmach9d: mov al, byte ptr [ebx+88888888h] ;picoffs - add esi, _asm2 - cmp al, 255 - je tskip5 - -transrev4: -tmach10d: mov dl, byte ptr [eax+88888888h] ;shadeoffs -transrev5: - mov dh, byte ptr [edi] -tmach1: mov al, byte ptr [edx+88888888h] ;_transluc - mov byte ptr [edi], al -tskip5: - inc edi - sub ecx, 65536 - jc tendhline - jmp short tbeghline - -ALIGN 16 -tprebeghline: - add edi, 2 - sub ecx, 131072 - jc short tendhline -tbeghline: -tmach3d: lea ebx, [ebp+88888888h] ;bxinc -tsh3d: shr ebp, 26 -tsh4d: shld ebp, esi, 6 -tmach4d: add esi, 88888888h ;byinc -tmach1d: mov cl, byte ptr [ebp+88888888h] ;picoffs -tmach7d: lea ebp, [ebx+88888888h] ;bxinc - -tsh5d: shr ebx, 26 -tsh6d: shld ebx, esi, 6 -tmach8d: add esi, 88888888h ;byinc -tmach5d: mov ch, byte ptr [ebx+88888888h] ;picoffs - - cmp cx, 0ffffh - je short tprebeghline - - mov bx, word ptr [edi] - - cmp cl, 255 - je short tskip1 - mov al, cl -transrev6: -tmach2d: mov dl, byte ptr [eax+88888888h] ;shadeoffs -transrev7: - mov dh, bl -tmach2: mov al, byte ptr [edx+88888888h] ;_transluc - mov byte ptr [edi], al - - cmp ch, 255 - je short tskip2 -tskip1: - mov al, ch -transrev8: -tmach6d: mov dl, byte ptr [eax+88888888h] ;shadeoffs -transrev9: - mov dh, bh -tmach3: mov al, byte ptr [edx+88888888h] ;_transluc - mov byte ptr [edi+1], al -tskip2: - - add edi, 2 - sub ecx, 131072 - jnc tbeghline -tendhline: - - pop ebp - ret - - - ;eax=shiftval, ebx=palookup1, ecx=palookup2 -ALIGN 16 -PUBLIC setuptvlineasm2_ -setuptvlineasm2_: - mov byte ptr [tran2shra+2], al - mov byte ptr [tran2shrb+2], al - mov dword ptr [tran2pala+2], ebx - mov dword ptr [tran2palb+2], ecx - mov dword ptr [tran2palc+2], ebx - mov dword ptr [tran2pald+2], ecx - ret - - ;Pass: eax=vplc2, ebx=vinc1, ecx=bufplc1, edx=bufplc2, esi=vplc1, edi=p - ; _asm1=vinc2, _asm2=pend - ;Return: _asm1=vplc1, _asm2=vplc2 -ALIGN 16 -PUBLIC tvlineasm2_ -tvlineasm2_: - push ebp - - mov ebp, eax - - mov dword ptr [tran2inca+2], ebx - mov eax, _asm1 - mov dword ptr [tran2incb+2], eax - - mov dword ptr [tran2bufa+2], ecx ;bufplc1 - mov dword ptr [tran2bufb+2], edx ;bufplc2 - - mov eax, _asm2 - sub edi, eax - mov dword ptr [tran2edia+3], eax - mov dword ptr [tran2edic+2], eax - inc eax - mov dword ptr [tran2edie+2], eax -fixchaint2a: sub eax, 320 - mov dword ptr [tran2edif+2], eax - dec eax - mov dword ptr [tran2edib+3], eax - mov dword ptr [tran2edid+2], eax - - xor ecx, ecx - xor edx, edx - jmp short begintvline2 - - ;eax 0000000000 temp temp - ;ebx 0000000000 odat2 odat1 - ;ecx 0000000000000000 ndat1 - ;edx 0000000000000000 ndat2 - ;esi vplc1 - ;edi videoplc-------------- - ;ebp vplc2 - -ALIGN 16 - ;LEFT ONLY -skipdraw2: -transrev10: -tran2edic: mov ah, byte ptr [edi+88888888h] ;getpixel -transrev11: -tran2palc: mov al, byte ptr [ecx+88888888h] ;palookup1 -fixchaint2d: add edi, 320 -tran2trac: mov bl, byte ptr [eax+88888888h] ;_transluc -tran2edid: mov byte ptr [edi+88888888h-320], bl ;drawpixel - jnc short begintvline2 - jmp endtvline2 - -skipdraw1: - cmp dl, 255 - jne short skipdraw3 -fixchaint2b: add edi, 320 - jc short endtvline2 - -begintvline2: - mov eax, esi -tran2shra: shr eax, 88h ;globalshift - mov ebx, ebp -tran2shrb: shr ebx, 88h ;globalshift -tran2inca: add esi, 88888888h ;vinc1 -tran2incb: add ebp, 88888888h ;vinc2 -tran2bufa: mov cl, byte ptr [eax+88888888h] ;bufplc1 - cmp cl, 255 -tran2bufb: mov dl, byte ptr [ebx+88888888h] ;bufplc2 - je short skipdraw1 - cmp dl, 255 - je short skipdraw2 - - ;mov ax The transluscent reverse of both! - ;mov bl, ah - ;mov ah - ;mov bh - - ;BOTH -transrev12: -tran2edia: mov bx, word ptr [edi+88888888h] ;getpixels -transrev13: - mov ah, bl -transrev14: -tran2pala: mov al, byte ptr [ecx+88888888h] ;palookup1 -transrev15: -tran2palb: mov bl, byte ptr [edx+88888888h] ;palookup2 -fixchaint2c: add edi, 320 -tran2traa: mov al, byte ptr [eax+88888888h] ;_transluc -tran2trab: mov ah, byte ptr [ebx+88888888h] ;_transluc -tran2edib: mov word ptr [edi+88888888h-320], ax ;drawpixels - jnc short begintvline2 - jmp short endtvline2 - - ;RIGHT ONLY -skipdraw3: -transrev16: -tran2edie: mov ah, byte ptr [edi+88888889h] ;getpixel -transrev17: -tran2pald: mov al, byte ptr [edx+88888888h] ;palookup2 -fixchaint2e: add edi, 320 -tran2trad: mov bl, byte ptr [eax+88888888h] ;_transluc -tran2edif: mov byte ptr [edi+88888889h-320], bl ;drawpixel - jnc short begintvline2 - -endtvline2: - mov _asm1, esi - mov _asm2, ebp - - pop ebp - ret - - -BITSOFPRECISION equ 3 -BITSOFPRECISIONPOW equ 8 - -;Double-texture mapping with palette lookup -;eax: ylo1------------|----dat|----dat -;ebx: ylo2--------------------|----cnt -;ecx: 000000000000000000000000|---temp -;edx: xhi1-xlo1---------------|---yhi1 -;esi: xhi2-xlo2---------------|---yhi2 -;edi: ------------------------videopos -;ebp: ----------------------------temp - -ALIGN 16 -PUBLIC setupslopevlin2_ -setupslopevlin2_: - mov dword ptr [slop3+2], edx ;ptr - mov dword ptr [slop7+2], edx ;ptr - mov dword ptr [slop4+2], esi ;tptr - mov dword ptr [slop8+2], esi ;tptr - mov byte ptr [slop2+2], ah ;ybits - mov byte ptr [slop6+2], ah ;ybits - mov dword ptr [slop9+2], edi ;pinc - - mov edx, 1 - mov cl, al - add cl, ah - shl edx, cl - dec edx - mov cl, ah - ror edx, cl - - mov dword ptr [slop1+2], edx ;ybits...xbits - mov dword ptr [slop5+2], edx ;ybits...xbits - - ret - -ALIGN 16 -PUBLIC slopevlin2_ -slopevlin2_: - push ebp - xor ecx, ecx - -slopevlin2begin: - mov ebp, edx -slop1: and ebp, 88000088h ;ybits...xbits -slop2: rol ebp, 6 ;ybits - add eax, _asm1 ;xinc1<>(32-xbits)) -slop3: mov cl, byte ptr [ebp+88888888h] ;bufplc - - mov ebp, esi -slop4: mov al, byte ptr [ecx+88888888h] ;paloffs -slop5: and ebp, 88000088h ;ybits...xbits -slop6: rol ebp, 6 ;ybits - add ebx, _asm3 ;xinc2<>(32-xbits)) -slop8: mov ah, byte ptr [ecx+88888888h] ;paloffs - - dec bl - mov word ptr [edi], ax -slop9: lea edi, [edi+88888888h] ;pinc - jnz short slopevlin2begin - - pop ebp - mov eax, edi - ret - - -ALIGN 16 -PUBLIC setupslopevlin_ -setupslopevlin_: - mov dword ptr [slopmach3+3], ebx ;ptr - mov dword ptr [slopmach5+2], ecx ;pinc - neg ecx - mov dword ptr [slopmach6+2], ecx ;-pinc - - mov edx, 1 - mov cl, al - shl edx, cl - dec edx - mov cl, ah - shl edx, cl - mov dword ptr [slopmach7+2], edx - - neg ah - mov byte ptr [slopmach2+2], ah - - sub ah, al - mov byte ptr [slopmach1+2], ah - - fild dword ptr _asm1 - fstp dword ptr _asm2 - ret - -ALIGN 16 -PUBLIC slopevlin_ -slopevlin_: - mov _ebpbak, ebp - mov _espbak, esp - - sub ecx, esp - mov dword ptr [slopmach4+3], ecx - - fild dword ptr _asm3 -slopmach6: lea ebp, [eax+88888888h] - fadd dword ptr _asm2 - - mov _asm1, ebx - shl ebx, 3 - - mov eax, _globalx3 - mov ecx, _globaly3 - imul eax, ebx - imul ecx, ebx - add esi, eax - add edi, ecx - - mov ebx, edx - jmp short bigslopeloop -ALIGN 16 -bigslopeloop: - fst dword ptr _fpuasm - - mov eax, _fpuasm - add eax, eax - sbb edx, edx - mov ecx, eax - shr ecx, 24 - and eax, 00ffe000h - shr eax, 11 - sub cl, 2 - mov eax, dword ptr _reciptable[eax] - shr eax, cl - xor eax, edx - mov edx, _asm1 - mov ecx, _globalx3 - mov _asm1, eax - sub eax, edx - mov edx, _globaly3 - imul ecx, eax - imul eax, edx - - fadd dword ptr _asm2 - - cmp ebx, BITSOFPRECISIONPOW - mov _asm4, ebx - mov cl, bl - jl short slopeskipmin - mov cl, BITSOFPRECISIONPOW -slopeskipmin: - -;eax: yinc............. -;ebx: 0 0 0 ? -;ecx: xinc......... cnt -;edx: ? -;esi: xplc............. -;edi: yplc............. -;ebp: videopos - - mov ebx, esi - mov edx, edi - -beginnerslopeloop: -slopmach1: shr ebx, 20 - add esi, ecx -slopmach2: shr edx, 26 -slopmach7: and ebx, 88888888h - add edi, eax -slopmach5: add ebp, 88888888h ;pinc -slopmach3: mov dl, byte ptr [ebx+edx+88888888h] ;ptr -slopmach4: mov ebx, dword ptr [esp+88888888h] - sub esp, 4 - dec cl - mov al, byte ptr [ebx+edx] ;tptr - mov ebx, esi - mov [ebp], al - mov edx, edi - jnz short beginnerslopeloop - - mov ebx, _asm4 - sub ebx, BITSOFPRECISIONPOW - jg bigslopeloop - - ffree st(0) - - mov esp, _espbak - mov ebp, _ebpbak - ret - - -ALIGN 16 -PUBLIC setuprhlineasm4_ -setuprhlineasm4_: - mov dword ptr [rmach1a+2], eax - mov dword ptr [rmach1b+2], eax - mov dword ptr [rmach1c+2], eax - mov dword ptr [rmach1d+2], eax - mov dword ptr [rmach1e+2], eax - - mov dword ptr [rmach2a+2], ebx - mov dword ptr [rmach2b+2], ebx - mov dword ptr [rmach2c+2], ebx - mov dword ptr [rmach2d+2], ebx - mov dword ptr [rmach2e+2], ebx - - mov dword ptr [rmach3a+2], ecx - mov dword ptr [rmach3b+2], ecx - mov dword ptr [rmach3c+2], ecx - mov dword ptr [rmach3d+2], ecx - mov dword ptr [rmach3e+2], ecx - - mov dword ptr [rmach4a+2], edx - mov dword ptr [rmach4b+2], edx - mov dword ptr [rmach4c+2], edx - mov dword ptr [rmach4d+2], edx - mov dword ptr [rmach4e+2], edx - - mov dword ptr [rmach5a+2], esi - mov dword ptr [rmach5b+2], esi - mov dword ptr [rmach5c+2], esi - mov dword ptr [rmach5d+2], esi - mov dword ptr [rmach5e+2], esi - ret - - ;Non power of 2, non masking, with palookup method #1 (6 clock cycles) - ;eax: dat dat dat dat - ;ebx: bufplc - ;ecx: 0 dat - ;edx: xlo - ;esi: ylo - ;edi: videopos/cnt - ;ebp: tempvar - ;esp: -ALIGN 16 -PUBLIC rhlineasm4_ -rhlineasm4_: - push ebp - - cmp eax, 0 - jle endrhline - - lea ebp, [edi-4] - sub ebp, eax - mov dword ptr [rmach6a+2], ebp - add ebp, 3 - mov dword ptr [rmach6b+2], ebp - mov edi, eax - test edi, 3 - jz short begrhline - jmp short startrhline1 - -ALIGN 16 -startrhline1: - mov cl, byte ptr [ebx] ;bufplc -rmach1e: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmach2e: sub esi, 88888888h ;ylo -rmach3e: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmach4e: mov al, byte ptr [ecx+88888888h] ;palookup -rmach5e: and ebp, 88888888h ;tilesizy -rmach6b: mov byte ptr [edi+88888888h], al ;vidcntoffs - sub ebx, ebp - dec edi - test edi, 3 - jnz short startrhline1 - test edi, edi - jz endrhline - -begrhline: - mov cl, byte ptr [ebx] ;bufplc -rmach1a: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmach2a: sub esi, 88888888h ;ylo -rmach3a: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmach5a: and ebp, 88888888h ;tilesizy - sub ebx, ebp - -rmach1b: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmach4a: mov ah, byte ptr [ecx+88888888h] ;palookup - mov cl, byte ptr [ebx] ;bufplc -rmach2b: sub esi, 88888888h ;ylo -rmach3b: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmach5b: and ebp, 88888888h ;tilesizy -rmach4b: mov al, byte ptr [ecx+88888888h] ;palookup - sub ebx, ebp - - shl eax, 16 - - mov cl, byte ptr [ebx] ;bufplc -rmach1c: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmach2c: sub esi, 88888888h ;ylo -rmach3c: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmach5c: and ebp, 88888888h ;tilesizy - sub ebx, ebp - -rmach1d: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmach4c: mov ah, byte ptr [ecx+88888888h] ;palookup - mov cl, byte ptr [ebx] ;bufplc -rmach2d: sub esi, 88888888h ;ylo -rmach3d: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmach5d: and ebp, 88888888h ;tilesizy -rmach4d: mov al, byte ptr [ecx+88888888h] ;palookup - sub ebx, ebp - -rmach6a: mov dword ptr [edi+88888888h], eax ;vidcntoffs - sub edi, 4 - jnz begrhline -endrhline: - pop ebp - ret - -ALIGN 16 -PUBLIC setuprmhlineasm4_ -setuprmhlineasm4_: - mov dword ptr [rmmach1+2], eax - mov dword ptr [rmmach2+2], ebx - mov dword ptr [rmmach3+2], ecx - mov dword ptr [rmmach4+2], edx - mov dword ptr [rmmach5+2], esi - ret - -ALIGN 16 -PUBLIC rmhlineasm4_ -rmhlineasm4_: - push ebp - - cmp eax, 0 - jle short endrmhline - - lea ebp, [edi-1] - sub ebp, eax - mov dword ptr [rmmach6+2], ebp - mov edi, eax - jmp short begrmhline - -ALIGN 16 -begrmhline: - mov cl, byte ptr [ebx] ;bufplc -rmmach1: sub edx, 88888888h ;xlo - sbb ebp, ebp -rmmach2: sub esi, 88888888h ;ylo -rmmach3: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -rmmach5: and ebp, 88888888h ;tilesizy - cmp cl, 255 - je short rmskip -rmmach4: mov al, byte ptr [ecx+88888888h] ;palookup -rmmach6: mov byte ptr [edi+88888888h], al ;vidcntoffs -rmskip: - sub ebx, ebp - dec edi - jnz short begrmhline -endrmhline: - pop ebp - ret - -ALIGN 16 -PUBLIC setupqrhlineasm4_ -setupqrhlineasm4_: - mov dword ptr [qrmach2e+2], ebx - mov dword ptr [qrmach3e+2], ecx - xor edi, edi - sub edi, ecx - mov dword ptr [qrmach7a+2], edi - mov dword ptr [qrmach7b+2], edi - - add ebx, ebx - adc ecx, ecx - mov dword ptr [qrmach2a+2], ebx - mov dword ptr [qrmach2b+2], ebx - mov dword ptr [qrmach3a+2], ecx - mov dword ptr [qrmach3b+2], ecx - - mov dword ptr [qrmach4a+2], edx - mov dword ptr [qrmach4b+2], edx - mov dword ptr [qrmach4c+2], edx - mov dword ptr [qrmach4d+2], edx - mov dword ptr [qrmach4e+2], edx - ret - - ;Non power of 2, non masking, with palookup method (FASTER BUT NO SBB'S) - ;eax: dat dat dat dat - ;ebx: bufplc - ;ecx: 0 dat - ;edx: 0 dat - ;esi: ylo - ;edi: videopos/cnt - ;ebp: ? - ;esp: -ALIGN 16 -PUBLIC qrhlineasm4_ ;4 pixels in 9 cycles! 2.25 cycles/pixel -qrhlineasm4_: - push ebp - - cmp eax, 0 - jle endqrhline - - mov ebp, eax - test ebp, 3 - jz short skipqrhline1 - jmp short startqrhline1 - -ALIGN 16 -startqrhline1: - mov cl, byte ptr [ebx] ;bufplc - dec edi -qrmach2e: sub esi, 88888888h ;ylo - dec ebp -qrmach3e: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -qrmach4e: mov al, byte ptr [ecx+88888888h] ;palookup - mov byte ptr [edi], al ;vidcntoffs - test ebp, 3 - jnz short startqrhline1 - test ebp, ebp - jz short endqrhline - -skipqrhline1: - mov cl, byte ptr [ebx] ;bufplc - jmp short begqrhline -ALIGN 16 -begqrhline: -qrmach7a: mov dl, byte ptr [ebx+88888888h] ;bufplc -qrmach2a: sub esi, 88888888h ;ylo -qrmach3a: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -qrmach4a: mov ah, byte ptr [ecx+88888888h] ;palookup -qrmach4b: mov al, byte ptr [edx+88888888h] ;palookup - sub edi, 4 - shl eax, 16 - mov cl, byte ptr [ebx] ;bufplc -qrmach7b: mov dl, byte ptr [ebx+88888888h] ;bufplc -qrmach2b: sub esi, 88888888h ;ylo -qrmach3b: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry -qrmach4c: mov ah, byte ptr [ecx+88888888h] ;palookup -qrmach4d: mov al, byte ptr [edx+88888888h] ;palookup - mov cl, byte ptr [ebx] ;bufplc - mov dword ptr [edi], eax - sub ebp, 4 - jnz short begqrhline - -endqrhline: - pop ebp - ret - - -PUBLIC setupdrawslab_ -setupdrawslab_: - mov dword ptr [voxbpl1+2], eax - mov dword ptr [voxbpl2+2], eax - mov dword ptr [voxbpl3+2], eax - mov dword ptr [voxbpl4+2], eax - mov dword ptr [voxbpl5+2], eax - mov dword ptr [voxbpl6+2], eax - mov dword ptr [voxbpl7+2], eax - mov dword ptr [voxbpl8+2], eax - - mov dword ptr [voxpal1+2], ebx - mov dword ptr [voxpal2+2], ebx - mov dword ptr [voxpal3+2], ebx - mov dword ptr [voxpal4+2], ebx - mov dword ptr [voxpal5+2], ebx - mov dword ptr [voxpal6+2], ebx - mov dword ptr [voxpal7+2], ebx - mov dword ptr [voxpal8+2], ebx - ret - -ALIGN 16 -PUBLIC drawslab_ -drawslab_: - push ebp - cmp eax, 2 - je voxbegdraw2 - ja voxskip2 - xor eax, eax -voxbegdraw1: - mov ebp, ebx - shr ebp, 16 - add ebx, edx - dec ecx - mov al, byte ptr [esi+ebp] -voxpal1: mov al, byte ptr [eax+88888888h] - mov byte ptr [edi], al -voxbpl1: lea edi, [edi+88888888h] - jnz voxbegdraw1 - pop ebp - ret - -voxbegdraw2: - mov ebp, ebx - shr ebp, 16 - add ebx, edx - xor eax, eax - dec ecx - mov al, byte ptr [esi+ebp] -voxpal2: mov al, byte ptr [eax+88888888h] - mov ah, al - mov word ptr [edi], ax -voxbpl2: lea edi, [edi+88888888h] - jnz voxbegdraw2 - pop ebp - ret - -voxskip2: - cmp eax, 4 - jne voxskip4 - xor eax, eax -voxbegdraw4: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte ptr [esi+ebp] -voxpal3: mov al, byte ptr [eax+88888888h] - mov ah, al - shl eax, 8 - mov al, ah - shl eax, 8 - mov al, ah - mov dword ptr [edi], eax -voxbpl3: add edi, 88888888h - dec ecx - jnz voxbegdraw4 - pop ebp - ret - -voxskip4: - add eax, edi - - test edi, 1 - jz voxskipslab1 - cmp edi, eax - je voxskipslab1 - - push eax - push ebx - push ecx - push edi -voxbegslab1: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte ptr [esi+ebp] -voxpal4: mov al, byte ptr [eax+88888888h] - mov byte ptr [edi], al -voxbpl4: add edi, 88888888h - dec ecx - jnz voxbegslab1 - pop edi - pop ecx - pop ebx - pop eax - inc edi - -voxskipslab1: - push eax - test edi, 2 - jz voxskipslab2 - dec eax - cmp edi, eax - jge voxskipslab2 - - push ebx - push ecx - push edi -voxbegslab2: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte ptr [esi+ebp] -voxpal5: mov al, byte ptr [eax+88888888h] - mov ah, al - mov word ptr [edi], ax -voxbpl5: add edi, 88888888h - dec ecx - jnz voxbegslab2 - pop edi - pop ecx - pop ebx - add edi, 2 - -voxskipslab2: - mov eax, [esp] - - sub eax, 3 - cmp edi, eax - jge voxskipslab3 - -voxprebegslab3: - push ebx - push ecx - push edi -voxbegslab3: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte ptr [esi+ebp] -voxpal6: mov al, byte ptr [eax+88888888h] - mov ah, al - shl eax, 8 - mov al, ah - shl eax, 8 - mov al, ah - mov dword ptr [edi], eax -voxbpl6: add edi, 88888888h - dec ecx - jnz voxbegslab3 - pop edi - pop ecx - pop ebx - add edi, 4 - - mov eax, [esp] - - sub eax, 3 - cmp edi, eax - jl voxprebegslab3 - -voxskipslab3: - mov eax, [esp] - - dec eax - cmp edi, eax - jge voxskipslab4 - - push ebx - push ecx - push edi -voxbegslab4: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte ptr [esi+ebp] -voxpal7: mov al, byte ptr [eax+88888888h] - mov ah, al - mov word ptr [edi], ax -voxbpl7: add edi, 88888888h - dec ecx - jnz voxbegslab4 - pop edi - pop ecx - pop ebx - add edi, 2 - -voxskipslab4: - pop eax - - cmp edi, eax - je voxskipslab5 - -voxbegslab5: - mov ebp, ebx - add ebx, edx - shr ebp, 16 - xor eax, eax - mov al, byte ptr [esi+ebp] -voxpal8: mov al, byte ptr [eax+88888888h] - mov byte ptr [edi], al -voxbpl8: add edi, 88888888h - dec ecx - jnz voxbegslab5 - -voxskipslab5: - pop ebp - ret - -;modify: loinc -;eax: | dat | dat | dat | dat | -;ebx: | loplc1 | -;ecx: | loplc2 | cnthi | cntlo | -;edx: |--------|--------|--------| hiplc1 | -;esi: |--------|--------|--------| hiplc2 | -;edi: |--------|--------|--------| vidplc | -;ebp: |--------|--------|--------| hiinc | - -PUBLIC stretchhline_ -stretchhline_: - push ebp - - mov eax, ebx - shl ebx, 16 - sar eax, 16 - and ecx, 0000ffffh - or ecx, ebx - - add esi, eax - mov eax, edx - mov edx, esi - - mov ebp, eax - shl eax, 16 - sar ebp, 16 - - add ecx, eax - adc esi, ebp - - add eax, eax - adc ebp, ebp - mov dword ptr [loinc1+2], eax - mov dword ptr [loinc2+2], eax - mov dword ptr [loinc3+2], eax - mov dword ptr [loinc4+2], eax - - inc ch - - jmp begloop - -begloop: - mov al, [edx] -loinc1: sub ebx, 88888888h - sbb edx, ebp - mov ah, [esi] -loinc2: sub ecx, 88888888h - sbb esi, ebp - sub edi, 4 - shl eax, 16 -loinc3: sub ebx, 88888888h - mov al, [edx] - sbb edx, ebp - mov ah, [esi] -loinc4: sub ecx, 88888888h - sbb esi, ebp - mov [edi], eax - dec cl - jnz begloop - dec ch - jnz begloop - - pop ebp - ret - - -PUBLIC mmxoverlay_ -mmxoverlay_: - pushfd ;Check if CPUID is available - pop eax - mov ebx, eax - xor eax, 00200000h - push eax - popfd - pushfd - pop eax - cmp eax, ebx - je pentium - xor eax, eax - dw 0a20fh - test eax, eax - jz pentium - mov eax, 1 - dw 0a20fh - and eax, 00000f00h - test edx, 00800000h ;Check if MMX is available - jz nommx - cmp eax, 00000600h ;Check if P6 Family or not - jae pentiumii - jmp pentiummmx -nommx: - cmp eax, 00000600h ;Check if P6 Family or not - jae pentiumpro -pentium: - ret - -;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -;³ PENTIUM II Overlays ³ -;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ -pentiumii: - ;Hline overlay (MMX doens't help) - mov byte ptr [sethlinesizes_], 0xe9 - mov dword ptr [sethlinesizes_+1], (offset prosethlinesizes_)-(offset sethlinesizes_)-5 - mov byte ptr [setpalookupaddress_], 0xe9 - mov dword ptr [setpalookupaddress_+1], (offset prosetpalookupaddress_)-(offset setpalookupaddress_)-5 - mov byte ptr [setuphlineasm4_], 0xc3 ;ret (no code required) - mov byte ptr [hlineasm4_], 0xe9 - mov dword ptr [hlineasm4_+1], (offset prohlineasm4_)-(offset hlineasm4_)-5 - - ;Vline overlay - mov byte ptr [setupvlineasm_], 0xe9 - mov dword ptr [setupvlineasm_+1], (offset prosetupvlineasm_)-(offset setupvlineasm_)-5 - mov byte ptr [vlineasm4_], 0xe9 - mov dword ptr [vlineasm4_+1], (offset provlineasm4_)-(offset vlineasm4_)-5 - - ret - -;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -;³ PENTIUM MMX Overlays ³ -;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ -pentiummmx: - ret - -;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -;³ PENTIUM PRO Overlays ³ -;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ -pentiumpro: - ;Hline overlay (MMX doens't help) - mov byte ptr [sethlinesizes_], 0xe9 - mov dword ptr [sethlinesizes_+1], (offset prosethlinesizes_)-(offset sethlinesizes_)-5 - mov byte ptr [setpalookupaddress_], 0xe9 - mov dword ptr [setpalookupaddress_+1], (offset prosetpalookupaddress_)-(offset setpalookupaddress_)-5 - mov byte ptr [setuphlineasm4_], 0xc3 ;ret (no code required) - mov byte ptr [hlineasm4_], 0xe9 - mov dword ptr [hlineasm4_+1], (offset prohlineasm4_)-(offset hlineasm4_)-5 - - ;Vline overlay - mov byte ptr [setupvlineasm_], 0xe9 - mov dword ptr [setupvlineasm_+1], (offset prosetupvlineasm_)-(offset setupvlineasm_)-5 - mov byte ptr [vlineasm4_], 0xe9 - mov dword ptr [vlineasm4_+1], (offset provlineasm4_)-(offset vlineasm4_)-5 - - ret - -PUBLIC _dep_end -_dep_end: -CODE ENDS -END diff --git a/polymer-perf/eduke32/build/src/baselayer.c b/polymer-perf/eduke32/build/src/baselayer.c deleted file mode 100644 index f7c5d30c5..000000000 --- a/polymer-perf/eduke32/build/src/baselayer.c +++ /dev/null @@ -1,365 +0,0 @@ -#include "compat.h" -#include "osd.h" -#include "build.h" -#include "baselayer.h" - -#ifdef RENDERTYPEWIN -#include "winlayer.h" -#endif - -#include "polymost.h" - -// input -char inputdevices=0; -char keystatus[256], keyfifo[KEYFIFOSIZ], keyfifoplc, keyfifoend; -char keyasciififo[KEYFIFOSIZ], keyasciififoplc, keyasciififoend; -char remap[256]; -int32_t remapinit=0; -char key_names[256][24]; -volatile int32_t mousex=0,mousey=0,mouseb=0; -int32_t *joyaxis = NULL, joyb=0, *joyhat = NULL; -char joyisgamepad=0, joynumaxes=0, joynumbuttons=0, joynumhats=0; -int32_t joyaxespresent=0; - -void(*keypresscallback)(int32_t,int32_t) = 0; -void(*mousepresscallback)(int32_t,int32_t) = 0; -void(*joypresscallback)(int32_t,int32_t) = 0; -void (*after_handleevents_hook)(void) = 0; - -extern int16_t brightness; - -// -// set{key|mouse|joy}presscallback() -- sets a callback which gets notified when keys are pressed -// -void setkeypresscallback(void (*callback)(int32_t, int32_t)) { keypresscallback = callback; } -void setmousepresscallback(void (*callback)(int32_t, int32_t)) { mousepresscallback = callback; } -void setjoypresscallback(void (*callback)(int32_t, int32_t)) { joypresscallback = callback; } - -char scantoasc[128] = -{ - 0,0,'1','2','3','4','5','6','7','8','9','0','-','=',0,0, - 'q','w','e','r','t','y','u','i','o','p','[',']',0,0,'a','s', - 'd','f','g','h','j','k','l',';',39,'`',0,92,'z','x','c','v', - 'b','n','m',',','.','/',0,'*',0,32,0,0,0,0,0,0, - 0,0,0,0,0,0,0,'7','8','9','-','4','5','6','+','1', - '2','3','0','.',0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -int32_t defaultres[][2] = -{ - {1920, 1440}, {1920, 1200}, {1920, 1080}, {1600, 1200}, {1600, 900}, {1366, 768}, {1280, 1024}, - {1280, 960}, {1152, 864}, {1024, 768}, {1024, 600}, {800, 600}, {640, 480}, {640, 400}, - {512, 384}, {480, 360}, {400, 300}, {320, 240}, {320, 200}, {0, 0} -}; - - -void SetKey(int32_t key, int32_t state) -{ - keystatus[remap[key]] = state; - - if (state) - { - keyfifo[keyfifoend] = remap[key]; - keyfifo[(keyfifoend+1)&(KEYFIFOSIZ-1)] = state; - keyfifoend = ((keyfifoend+2)&(KEYFIFOSIZ-1)); - } -} - -// -// bgetchar, bflushchars -- character-based input functions -// -char bgetchar(void) -{ - if (keyasciififoplc == keyasciififoend) - return 0; - - { - char c = keyasciififo[keyasciififoplc]; - keyasciififoplc = ((keyasciififoplc+1)&(KEYFIFOSIZ-1)); - return c; - } -} - -void bflushchars(void) -{ - Bmemset(&keyasciififo,0,sizeof(keyasciififo)); - keyasciififoplc = keyasciififoend = 0; -} - -const char *getkeyname(int32_t num) -{ - return ((unsigned)num >= 256) ? NULL : key_names[num]; -} - -#ifdef USE_OPENGL -struct glinfo_t glinfo = -{ - "Unknown", // vendor - "Unknown", // renderer - "0.0.0", // version - "", // extensions - - 1.0, // max anisotropy - 0, // brga texture format - 0, // clamp-to-edge support - 0, // texture compression - 0, // non-power-of-two textures - 0, // multisampling - 0, // nvidia multisampling hint - 0, // ARBfp - 0, // depth textures - 0, // shadow comparison - 0, // Frame Buffer Objects - 0, // rectangle textures - 0, // multitexturing - 0, // env_combine - 0, // Vertex Buffer Objects - 0, // VSync support - 0, // Shader Model 4 support - 0, // Occlusion Queries - 0, // GLSL - 0, // GL info dumped -}; -#endif - -char *Bstrtolower(char *str) -{ - if (!str) return NULL; - - { - int32_t i = 0, len = Bstrlen(str); - - if (len <= 0) return str; - - do - { - *(str+i) = Btolower(*(str+i)); - i++; - } - while (--len); - } - - return str; -} - -int32_t flushlogwindow = 1; - -static void onvideomodechange(int32_t newmode) { UNREFERENCED_PARAMETER(newmode); } -void (*baselayer_onvideomodechange)(int32_t) = onvideomodechange; - -#ifdef USE_OPENGL -static int32_t osdfunc_setrendermode(const osdfuncparm_t *parm) -{ - int32_t m; - char *p; - - const char *modestrs[] = - { - "classic software", "", - "", "polygonal OpenGL", "great justice (Polymer)" - }; - - if (parm->numparms != 1) return OSDCMD_SHOWHELP; - m = Bstrtol(parm->parms[0], &p, 10); - - if (m < 0 || m > 4) return OSDCMD_SHOWHELP; - - setrendermode(m); - OSD_Printf("Rendering method changed to %s\n", modestrs[ getrendermode()]); - - return OSDCMD_OK; -} -#if defined(USE_OPENGL) -#ifdef DEBUGGINGAIDS -static int32_t osdcmd_hicsetpalettetint(const osdfuncparm_t *parm) -{ - int32_t pal, cols[3], eff; - - if (parm->numparms != 5) return OSDCMD_SHOWHELP; - - pal = Batol(parm->parms[0]); - cols[0] = Batol(parm->parms[1]); - cols[1] = Batol(parm->parms[2]); - cols[2] = Batol(parm->parms[3]); - eff = Batol(parm->parms[4]); - - hicsetpalettetint(pal,cols[0],cols[1],cols[2],eff); - - return OSDCMD_OK; -} -#endif - -int32_t osdcmd_glinfo(const osdfuncparm_t *parm) -{ - char *s,*t,*u,i; - - UNREFERENCED_PARAMETER(parm); - - if (bpp == 8) - { - initprintf("glinfo: Not in OpenGL mode.\n"); - return OSDCMD_OK; - } - - initprintf("OpenGL Information:\n" - " Version: %s\n" - " Vendor: %s\n" - " Renderer: %s\n", - glinfo.version, - glinfo.vendor, - glinfo.renderer); - - if (!glinfo.dumped) - return OSDCMD_OK; - - initprintf(" Maximum anisotropy: %.1f%s\n" - " BGRA textures: %s\n" - " Non-power-of-2 textures: %s\n" - " Texure compression: %s\n" - " Clamp-to-edge: %s\n" - " Multisampling: %s\n" - " Nvidia multisample hint: %s\n" - " ARBfp fragment programs: %s\n" - " Depth textures: %s\n" - " Shadow textures: %s\n" - " Frame Buffer Objects: %s\n" - " Rectangle textures: %s\n" - " Multitexturing: %s\n" - " env_combine: %s\n" - " Vertex Buffer Objects: %s\n" - " Shader Model 4: %s\n" - " Occlusion queries: %s\n" - " GLSL: %s\n" - " Extensions:\n", - glinfo.maxanisotropy, glinfo.maxanisotropy>1.0?"":" (no anisotropic filtering)", - glinfo.bgra ? "supported": "not supported", - glinfo.texnpot ? "supported": "not supported", - glinfo.texcompr ? "supported": "not supported", - glinfo.clamptoedge ? "supported": "not supported", - glinfo.multisample ? "supported": "not supported", - glinfo.nvmultisamplehint ? "supported": "not supported", - glinfo.arbfp ? "supported": "not supported", - glinfo.depthtex ? "supported": "not supported", - glinfo.shadow ? "supported": "not supported", - glinfo.fbos ? "supported": "not supported", - glinfo.rect ? "supported": "not supported", - glinfo.multitex ? "supported": "not supported", - glinfo.envcombine ? "supported": "not supported", - glinfo.vbos ? "supported": "not supported", - glinfo.sm4 ? "supported": "not supported", - glinfo.occlusionqueries ? "supported": "not supported", - glinfo.glsl ? "supported": "not supported" - ); - - s = Bstrdup(glinfo.extensions); - if (!s) initprintf("%s", glinfo.extensions); - else - { - i = 0; t = u = s; - while (*t) - { - if (*t == ' ') - { - if (i&1) - { - *t = 0; - initprintf(" %s\n",u); - u = t+1; - } - i++; - } - t++; - } - if (i&1) initprintf(" %s\n",u); - Bfree(s); - } - - return OSDCMD_OK; -} -#endif -#endif - -static int32_t osdcmd_cvar_set_baselayer(const osdfuncparm_t *parm) -{ - int32_t r = osdcmd_cvar_set(parm); - - if (r != OSDCMD_OK) return r; - - /* - if (!Bstrcasecmp(parm->name, "r_scrcaptureformat")) - { - const char *fmts[] = {"TGA", "PCX"}; - if (showval) { OSD_Printf("r_scrcaptureformat is %s\n", fmts[captureformat]); } - else - { - int32_t j; - for (j=0; j<2; j++) - if (!Bstrcasecmp(parm->parms[0], fmts[j])) break; - if (j == 2) return OSDCMD_SHOWHELP; - captureformat = j; - } - return OSDCMD_OK; - } - else */ - - if (!Bstrcasecmp(parm->name, "vid_gamma") || !Bstrcasecmp(parm->name, "vid_brightness") || !Bstrcasecmp(parm->name, "vid_contrast")) - { - setbrightness(GAMMA_CALC,0,0); - - return r; - } - - return r; -} - -int32_t baselayer_init(void) -{ - uint32_t i; - - cvar_t cvars_engine[] = - { - { "r_usenewaspect","r_usenewaspect: enable/disable new screen aspect ratio determination code",(void *) &r_usenewaspect, CVAR_BOOL, 0, 1 }, - { "r_screenaspect","r_screenaspect: if using the new aspect code and in fullscreen, screen aspect ratio in the form XXYY, e.g. 1609 for 16:9",(void *) &r_screenxy, CVAR_UINT, 100, 9999 }, - { "r_novoxmips","r_novoxmips: turn off/on the use of mipmaps when rendering 8-bit voxels",(void *) &novoxmips, CVAR_BOOL, 0, 1 }, - { "r_voxels","r_voxels: enable/disable automatic sprite->voxel rendering",(void *) &usevoxels, CVAR_BOOL, 0, 1 }, - /* { "r_scrcaptureformat","r_scrcaptureformat: sets the output format for screenshots (TGA or PCX)",osdcmd_vars, CVAR_FUNCPTR, 0, 0 },*/ - { "vid_gamma","vid_gamma : adjusts gamma ramp",(void *) &vid_gamma, CVAR_DOUBLE|CVAR_FUNCPTR, 0, 10 }, - { "vid_contrast","vid_contrast : adjusts gamma ramp",(void *) &vid_contrast, CVAR_DOUBLE|CVAR_FUNCPTR, 0, 10 }, - { "vid_brightness","vid_brightness : adjusts gamma ramp",(void *) &vid_brightness, CVAR_DOUBLE|CVAR_FUNCPTR, 0, 10 }, - { "debug1","debug counter",(void *) &debug1, CVAR_FLOAT, -100000, 100000 }, - { "debug2","debug counter",(void *) &debug2, CVAR_FLOAT, -100000, 100000 }, - }; - - for (i=0; i: sets the engine's rendering mode.\n" - "Mode numbers are:\n" - " 0 - Classic Build software\n" -#ifdef USE_OPENGL - " 3 - Polygonal OpenGL\n" - " 4 - Great justice renderer (Polymer)\n" -#endif - , - osdfunc_setrendermode); -#ifdef USE_OPENGL -# ifdef DEBUGGINGAIDS - OSD_RegisterFunction("hicsetpalettetint","hicsetpalettetint: sets palette tinting values",osdcmd_hicsetpalettetint); -# endif - OSD_RegisterFunction("glinfo","glinfo: shows OpenGL information about the current OpenGL mode",osdcmd_glinfo); -#endif - polymost_initosdfuncs(); -#endif - - return 0; -} - diff --git a/polymer-perf/eduke32/build/src/build.c b/polymer-perf/eduke32/build/src/build.c deleted file mode 100644 index 6a7b85376..000000000 --- a/polymer-perf/eduke32/build/src/build.c +++ /dev/null @@ -1,7597 +0,0 @@ -// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman -// Ken Silverman's official web site: "http://www.advsys.net/ken" -// See the included license file "BUILDLIC.TXT" for license info. -// -// This file has been modified from Ken Silverman's original release -// by Jonathon Fowler (jonof@edgenetwk.com) - -#include "build.h" -#include "compat.h" -#include "pragmas.h" -#include "osd.h" -#include "cache1d.h" -#include "editor.h" - -#include "baselayer.h" -#ifdef RENDERTYPEWIN -#include "winlayer.h" -#endif - -#include "m32script.h" - -#define TIMERINTSPERSECOND 120 - -#define updatecrc16(crc,dat) (crc = (((crc<<8)&65535)^crctable[((((uint16_t)crc)>>8)&65535)^dat])) -static int32_t crctable[256]; -static char kensig[64]; - -extern const char *ExtGetVer(void); -extern int32_t ExtInit(void); -extern int32_t ExtPreInit(int32_t argc,const char **argv); -extern void ExtUnInit(void); -extern void ExtPreCheckKeys(void); -extern void ExtAnalyzeSprites(void); -extern void ExtCheckKeys(void); -extern void ExtLoadMap(const char *mapname); -extern void ExtSaveMap(const char *mapname); -extern const char *ExtGetSectorCaption(int16_t sectnum); -extern const char *ExtGetWallCaption(int16_t wallnum); -extern const char *ExtGetSpriteCaption(int16_t spritenum); -extern void ExtShowSectorData(int16_t sectnum); -extern void ExtShowWallData(int16_t wallnum); -extern void ExtShowSpriteData(int16_t spritenum); -extern void ExtEditSectorData(int16_t sectnum); -extern void ExtEditWallData(int16_t wallnum); -extern void ExtEditSpriteData(int16_t spritenum); -extern const char *ExtGetSectorType(int32_t lotag); - -extern char spritecol2d[MAXTILES][2]; - -char noclip=0; - -int32_t vel, svel, angvel; - -// 0 1 2 3 4 5 6 7 -// up, down, left, right, lshift, rctrl, lctrl, space -// 8 9 10 11 12 13 -// a, z, pgdn, pgup, [,], [.] -// 14 15 16 17 18 19 -// kpenter, enter, =, -, tab, ` -uint8_t buildkeys[NUMBUILDKEYS] = -{ - 0xc8,0xd0,0xcb,0xcd,0x2a,0x9d,0x1d,0x39, - 0x1e,0x2c,0xd1,0xc9,0x33,0x34, - 0x9c,0x1c,0xd,0xc,0xf,0x29 -}; - -vec3_t pos; -int32_t horiz = 100; -static int32_t mousexsurp = 0, mouseysurp = 0; -int16_t ang, cursectnum; -int32_t hvel; - -int32_t grponlymode = 0; -extern int32_t editorgridextent; // in engine.c -extern double msens; -int32_t graphicsmode = 0; -extern int32_t xyaspect; -extern int32_t totalclocklock; - -int32_t synctics = 0, lockclock = 0; - -// those ones save the respective 3d video vars while in 2d mode -// so that exiting from mapster32 in 2d mode saves the correct ones -double vid_gamma_3d=-1, vid_contrast_3d=-1, vid_brightness_3d=-1; - -extern char vgacompatible; - -extern char picsiz[MAXTILES]; -extern int32_t startposx, startposy, startposz; -extern int16_t startang, startsectnum; -extern int32_t ydim16, halfxdim16, midydim16; -extern intptr_t frameplace; -int32_t xdim2d = 640, ydim2d = 480, xdimgame = 640, ydimgame = 480, bppgame = 8; -int32_t forcesetup = 1; - -extern int32_t cachesize, artsize; - -static int16_t oldmousebstatus = 0; -char game_executable[BMAX_PATH] = DEFAULT_GAME_LOCAL_EXEC; -int32_t zlock = 0x7fffffff, zmode = 0, whitecol, kensplayerheight = 32; -//int16_t defaultspritecstat = 0; - -int16_t localartfreq[MAXTILES]; -int16_t localartlookup[MAXTILES], localartlookupnum; - -char tempbuf[4096]; - -char names[MAXTILES][25]; -const char *g_namesFileName = "NAMES.H"; - -int16_t asksave = 0; -extern int16_t editstatus, searchit; -extern int32_t searchx, searchy; //search input -extern int16_t searchsector, searchwall, searchstat; //search output -int32_t osearchx, osearchy; //old search input - -extern int16_t pointhighlight, linehighlight, highlightcnt; -int32_t grid = 3, autogrid = 0, gridlock = 1, showtags = 1; -int32_t zoom = 768, gettilezoom = 1; -int32_t lastpm16time = 0; - -int32_t numsprites; -extern int32_t mapversion; - -int16_t highlight[MAXWALLS+MAXSPRITES]; -int16_t highlightsector[MAXSECTORS], highlightsectorcnt = -1; -extern char textfont[128][8]; - -char pskysearch[MAXSECTORS]; - -int32_t temppicnum, tempcstat, templotag, temphitag, tempextra; -uint32_t temppal, tempvis, tempxrepeat, tempyrepeat; -int32_t tempshade, tempxvel, tempyvel, tempzvel; -char somethingintab = 255; - -int32_t mlook = 0,mskip=0; -int32_t revertCTRL=0,scrollamount=3; -int32_t unrealedlook=1, quickmapcycling=1; //PK - -char program_origcwd[BMAX_PATH]; -char *mapster32_fullpath; -char *testplay_addparam = 0; - -static char boardfilename[BMAX_PATH], selectedboardfilename[BMAX_PATH]; - -static CACHE1D_FIND_REC *finddirs=NULL, *findfiles=NULL, *finddirshigh=NULL, *findfileshigh=NULL; -static int32_t numdirs=0, numfiles=0; -static int32_t currentlist=0; - -//static int32_t repeatcountx, repeatcounty; - -static int32_t fillist[640]; - -static int32_t mousx, mousy; -int16_t prefixtiles[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; -uint8_t hlsectorbitmap[MAXSECTORS>>3]; // show2dsector is already taken... - -static uint8_t visited[MAXWALLS>>3]; // used for AlignWalls and trace_loop - -typedef struct -{ - int16_t numsectors, numwalls, numsprites; - sectortype *sector; - walltype *wall; - spritetype *sprite; -} mapinfofull_t; - -static int32_t backup_highlighted_map(mapinfofull_t *mapinfo); -static int32_t restore_highlighted_map(mapinfofull_t *mapinfo); - -/* -static char scantoasc[128] = -{ - 0,0,'1','2','3','4','5','6','7','8','9','0','-','=',0,0, - 'q','w','e','r','t','y','u','i','o','p','[',']',0,0,'a','s', - 'd','f','g','h','j','k','l',';',39,'`',0,92,'z','x','c','v', - 'b','n','m',',','.','/',0,'*',0,32,0,0,0,0,0,0, - 0,0,0,0,0,0,0,'7','8','9','-','4','5','6','+','1', - '2','3','0','.',0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; -static char scantoascwithshift[128] = -{ - 0,0,'!','@','#','$','%','^','&','*','(',')','_','+',0,0, - 'Q','W','E','R','T','Y','U','I','O','P','{','}',0,0,'A','S', - 'D','F','G','H','J','K','L',':',34,'~',0,'|','Z','X','C','V', - 'B','N','M','<','>','?',0,'*',0,32,0,0,0,0,0,0, - 0,0,0,0,0,0,0,'7','8','9','-','4','5','6','+','1', - '2','3','0','.',0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; -*/ - -#define eitherALT (keystatus[0x38]|keystatus[0xb8]) -#define eitherCTRL (keystatus[0x1d]|keystatus[0x9d]) -#define eitherSHIFT (keystatus[0x2a]|keystatus[0x36]) - -#define DOWN_BK(BuildKey) (keystatus[buildkeys[BK_##BuildKey]]) - -int32_t pk_turnaccel=16; -int32_t pk_turndecel=12; -int32_t pk_uedaccel=3; - -int8_t sideview_reversehrot = 0; - -char lastpm16buf[156]; - -//static int32_t checksectorpointer_warn = 0; - -char changechar(char dachar, int32_t dadir, char smooshyalign, char boundcheck); -static int32_t adjustmark(int32_t *xplc, int32_t *yplc, int16_t danumwalls); -static void locktogrid(int32_t *dax, int32_t *day); -static int32_t checkautoinsert(int32_t dax, int32_t day, int16_t danumwalls); -void keytimerstuff(void); -static int32_t clockdir(int16_t wallstart); -static void flipwalls(int16_t numwalls, int16_t newnumwalls); -static void insertpoint(int16_t linehighlight, int32_t dax, int32_t day); -static void deletepoint(int16_t point); -static int32_t deletesector(int16_t sucksect); -void fixrepeats(int16_t i); -static int16_t loopinside(int32_t x, int32_t y, int16_t startwall); -int32_t fillsector(int16_t sectnum, char fillcolor); -static int16_t whitelinescan(int16_t dalinehighlight); -void printcoords16(int32_t posxe, int32_t posye, int16_t ange); -static void copysector(int16_t soursector, int16_t destsector, int16_t deststartwall, char copystat, const int16_t *oldtonewsect); -int32_t drawtilescreen(int32_t pictopleft, int32_t picbox); -void overheadeditor(void); -static int32_t getlinehighlight(int32_t xplc, int32_t yplc, int32_t line); -void fixspritesectors(void); -static int32_t movewalls(int32_t start, int32_t offs); -int32_t loadnames(const char *namesfile); -void updatenumsprites(void); -static void getclosestpointonwall(int32_t x, int32_t y, int32_t dawall, int32_t *nx, int32_t *ny); -static void initcrc(void); -void AutoAlignWalls(int32_t nWall0, int32_t ply); -int32_t gettile(int32_t tilenum); - -static int32_t menuselect(void); -static int32_t menuselect_auto(int32_t); //PK - -static int32_t insert_sprite_common(int32_t sucksect, int32_t dax, int32_t day); -static void correct_ornamented_sprite(int32_t i, int32_t hitw); - -static int32_t getfilenames(const char *path, const char *kind); -static void clearfilenames(void); -void loadmhk(int32_t domessage); -extern int32_t map_revision; -extern int32_t map_undoredo(int32_t dir); -extern void map_undoredo_free(void); - -void clearkeys(void) { Bmemset(keystatus,0,sizeof(keystatus)); } - -static inline void bclamp(int32_t *x, int32_t mi, int32_t ma) -{ - if (*x>ma) *x=ma; - if (*xnumparms) - { - case 1: // bpp switch - tmp = Batol(parm->parms[0]); - if (tmp==8 || tmp==16 || tmp==32) - newbpp = tmp; - break; - case 4: // fs, res, bpp switch - newfullscreen = (Batol(parm->parms[3]) != 0); - case 3: // res & bpp switch - tmp = Batol(parm->parms[2]); - if (tmp==8 || tmp==16 || tmp==32) - newbpp = tmp; - case 2: // res switch - newx = Batol(parm->parms[0]); - newy = Batol(parm->parms[1]); - break; - default: - return OSDCMD_SHOWHELP; - } - - if (qsetmode != 200) - { - qsetmodeany(newx,newy); - xdim2d = xdim; - ydim2d = ydim; - - begindrawing(); //{{{ - - CLEARLINES2D(0, ydim16, 0); - - ydim16 = ydim; -// drawline16(0,ydim-STATUS2DSIZ,xdim-1,ydim-STATUS2DSIZ,editorcolors[1]); - /* drawline16(0,ydim-1,xdim-1,ydim-1,1); - drawline16(0,ydim-STATUS2DSIZ,0,ydim-1,1); - drawline16(xdim-1,ydim-STATUS2DSIZ,xdim-1,ydim-1,1); - drawline16(0,ydim-STATUS2DSIZ+24,xdim-1,ydim-STATUS2DSIZ+24,1); - drawline16(192-24,ydim-STATUS2DSIZ,192-24,ydim-STATUS2DSIZ+24,1); - drawline16(0,ydim-1-20,xdim-1,ydim-1-20,1); - drawline16(256,ydim-1-20,256,ydim-1,1); */ - ydim16 = ydim-STATUS2DSIZ2; - enddrawing(); //}}} - return OSDCMD_OK; - } - - if (setgamemode(newfullscreen,newx,newy,newbpp)) - OSD_Printf("vidmode: Mode change failed!\n"); - - xdimgame = newx; - ydimgame = newy; - bppgame = newbpp; - fullscreen = newfullscreen; - - return OSDCMD_OK; -} -#endif - -extern int32_t startwin_run(void); - -extern char *defsfilename; // set in bstub.c - - -#ifdef M32_SHOWDEBUG -char m32_debugstr[64][128]; -int32_t m32_numdebuglines=0; - -static void M32_drawdebug(void) -{ - int i; - int x=4, y=8; - -#if 0 - { - static char tstr[128]; - Bsprintf(tstr, "searchstat=%d, searchsector=%d, searchwall=%d (%d), asksave=%d", - searchstat, searchsector, searchwall, searchbottomwall, asksave); - printext256(x,y,whitecol,0,tstr,xdimgame>640?0:1); - } -#endif - if (m32_numdebuglines>0) - { - begindrawing(); - for (i=0; i640?0:1); - } - enddrawing(); - } - m32_numdebuglines=0; -} -#endif - -int32_t app_main(int32_t argc, const char **argv) -{ - char quitflag, cmdsetup = 0; - int32_t i, j, k; - - pathsearchmode = 1; // unrestrict findfrompath so that full access to the filesystem can be had - -#ifdef USE_OPENGL - OSD_RegisterFunction("restartvid","restartvid: reinitialize the video mode",osdcmd_restartvid); - OSD_RegisterFunction("vidmode","vidmode : immediately change the video mode",osdcmd_vidmode); -#endif - - wm_setapptitle("Mapster32"); - - editstatus = 1; - newaspect_enable = 1; - - if ((i = ExtPreInit(argc,argv)) < 0) return -1; - -#ifdef RENDERTYPEWIN - backgroundidle = 1; -#endif - - boardfilename[0] = 0; - for (i=1; i k) { k = j; whitecol = i; } - } - - k = clipmapinfo_load("_clipshape0.map"); - if (k>0) - initprintf("There was an error loading the sprite clipping map (status %d).\n", k); - - if (LoadBoard(boardfilename, 1)) - { - initspritelists(); - pos.x = 32768; - pos.y = 32768; - pos.z = 0; - ang = 1536; - numsectors = 0; - numwalls = 0; - cursectnum = -1; - } - - totalclock = 0; - - updatesector(pos.x,pos.y,&cursectnum); - - if (cursectnum == -1) - { - vid_gamma_3d = vid_gamma; - vid_brightness_3d = vid_brightness; - vid_contrast_3d = vid_contrast; - - vid_gamma = vid_contrast = 1.0; - vid_brightness = 0.0; - - setbrightness(0,0,0); - if (setgamemode(fullscreen, xdim2d, ydim2d, 8) < 0) - { - ExtUnInit(); - uninitengine(); - Bprintf("%d * %d not supported in this graphics mode\n",xdim2d,ydim2d); - exit(0); - } - - // executed once per init, but after setgamemode so that OSD has the right width - OSD_Exec("m32_autoexec.cfg"); - - overheadeditor(); - keystatus[buildkeys[BK_MODE2D_3D]] = 0; - - vid_gamma = vid_gamma_3d; - vid_contrast = vid_contrast_3d; - vid_brightness = vid_brightness_3d; - - vid_gamma_3d = vid_contrast_3d = vid_brightness_3d = -1; - - setbrightness(GAMMA_CALC,0,0); - } - else - { - if (setgamemode(fullscreen, xdimgame, ydimgame, bppgame) < 0) - { - ExtUnInit(); - uninitengine(); - Bprintf("%d * %d not supported in this graphics mode\n",xdim,ydim); - exit(0); - } - - // executed once per init, but after setgamemode so that OSD has the right width - OSD_Exec("m32_autoexec.cfg"); - - setbrightness(GAMMA_CALC,0,0); - } - -CANCEL: - quitflag = 0; - while (quitflag == 0) - { - if (handleevents()) - { - if (quitevent) - { - keystatus[1] = 1; - quitevent = 0; - } - } - - OSD_DispatchQueued(); - - ExtPreCheckKeys(); - - nextpage(); - synctics = totalclock-lockclock; - lockclock += synctics; - - drawrooms(pos.x,pos.y,pos.z,ang,horiz,cursectnum); - ExtAnalyzeSprites(); - drawmasks(); - -#ifdef POLYMER - if (rendmode == 4 && searchit == 2) - { - polymer_editorpick(); - drawrooms(pos.x,pos.y,pos.z,ang,horiz,cursectnum); - ExtAnalyzeSprites(); - drawmasks(); - } -#endif - -#ifdef M32_SHOWDEBUG - if (searchstat>=0 && (searchwall<0 || searchsector<0)) - { - Bsprintf(m32_debugstr[m32_numdebuglines++], "inconsistent search variables!"); - searchstat = -1; - } - - M32_drawdebug(); -#endif - ExtCheckKeys(); - - - if (keystatus[1]) - { - keystatus[1] = 0; - - printext256(0,0,whitecol,0,"Are you sure you want to quit?",0); - - showframe(1); - synctics = totalclock-lockclock; - lockclock += synctics; - - while ((keystatus[1]|keystatus[0x1c]|keystatus[0x39]|keystatus[0x31]) == 0) - { - idle_waitevent(); - if (handleevents()) - { - if (quitevent) - { - quitflag = 1; - break; - } - } - - if (keystatus[0x15]||keystatus[0x1c]) // Y or ENTER - { - keystatus[0x15] = 0; - keystatus[0x1c] = 0; - quitflag = 1; break; - } - } - while (keystatus[1]) - { - keystatus[1] = 0; - quitevent = 0; - goto CANCEL; - } - } - } - - if (asksave) - { - i = CheckMapCorruption(4, 0); - - printext256(0,8,whitecol,0,i<4?"Save changes?":"Map is heavily corrupt. Save changes?",0); - showframe(1); - - while ((keystatus[1]|keystatus[0x1c]|keystatus[0x39]|keystatus[0x31]|keystatus[0x2e]) == 0) - { - idle_waitevent(); - if (handleevents()) { if (quitevent) break; } // like saying no - - if (keystatus[0x15] || keystatus[0x1c]) // Y or ENTER - { - keystatus[0x15] = keystatus[0x1c] = 0; - - SaveBoard(NULL, 0); - - break; - } - } - while (keystatus[1]||keystatus[0x2e]) - { - keystatus[1] = keystatus[0x2e] = 0; - quitevent = 0; - goto CANCEL; - } - } - - - clearfilenames(); - ExtUnInit(); - uninitengine(); - - Bprintf("Memory status: %d(%d) bytes\n",cachesize,artsize); - Bprintf("%s\n",kensig); - return(0); -} - -/* -void showmouse(void) -{ - int32_t i; - - for (i=1;i<=4;i++) - { - plotpixel(searchx+i,searchy,whitecol); - plotpixel(searchx-i,searchy,whitecol); - plotpixel(searchx,searchy-i,whitecol); - plotpixel(searchx,searchy+i,whitecol); - } -} -*/ - -static int32_t mhk=0; -void loadmhk(int32_t domessage) -{ - char *p; char levname[BMAX_PATH]; - - if (!mhk) - return; - - Bstrcpy(levname, boardfilename); - p = Bstrrchr(levname,'.'); - if (!p) - Bstrcat(levname,".mhk"); - else - { - p[1]='m'; - p[2]='h'; - p[3]='k'; - p[4]=0; - } - - if (!loadmaphack(levname)) - { - if (domessage) - message("Loaded map hack file '%s'",levname); - else - initprintf("Loaded map hack file '%s'\n",levname); - } - else - { - mhk=2; - if (domessage) - message("No maphack found for map '%s'",boardfilename); - } -} - - -static void move_and_update(int32_t xvect, int32_t yvect, int32_t addshr) -{ - if (noclip) - { - pos.x += xvect>>(14+addshr); - pos.y += yvect>>(14+addshr); - updatesector(pos.x,pos.y, &cursectnum); - } - else - clipmove(&pos,&cursectnum, xvect>>addshr,yvect>>addshr, - 128,4<<8,4<<8, CLIPMASK0); -} - -static void mainloop_move() -{ - int32_t xvect, yvect, doubvel; - - if (angvel != 0) //ang += angvel * constant - { - //ENGINE calculates angvel for you - - //Lt. shift makes turn velocity 50% faster - doubvel = (synctics + DOWN_BK(RUN)*(synctics>>1)); - - ang += ((angvel*doubvel)>>4); - ang &= 2047; - } - if ((vel|svel) != 0) - { - //Lt. shift doubles forward velocity - doubvel = (1+(DOWN_BK(RUN)))*synctics; - - xvect = 0; - yvect = 0; - - if (vel != 0) - { - xvect += (vel*doubvel*(int32_t)sintable[(ang+2560)&2047])>>3; - yvect += (vel*doubvel*(int32_t)sintable[(ang+2048)&2047])>>3; - } - if (svel != 0) - { - xvect += (svel*doubvel*(int32_t)sintable[(ang+2048)&2047])>>3; - yvect += (svel*doubvel*(int32_t)sintable[(ang+1536)&2047])>>3; - } - - move_and_update(xvect, yvect, 0); - } -} - -void editinput(void) -{ - int32_t mousz, bstatus; - int32_t i, j, k, tempint=0; - int32_t goalz, xvect, yvect, hiz, loz; - int32_t dax, day, hihit, lohit, omlook=mlook; - -// 3B 3C 3D 3E 3F 40 41 42 43 44 57 58 46 -// F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 SCROLL - - mousz = 0; - getmousevalues(&mousx,&mousy,&bstatus); - mousx = (mousx<<16) + mousexsurp; - mousy = (mousy<<16) + mouseysurp; - - if (unrealedlook && !mskip) - { - if (mlook==0 && (bstatus&(1|2|4))==2) - mlook = 3; - else if ((bstatus&(1|2|4))==1) - mlook = 3; - } - - { - ldiv_t ld; - if (mlook) - { - ld = ldiv(mousx, (int32_t)((1<<16)/(msens*0.5f))); mousx = ld.quot; mousexsurp = ld.rem; - ld = ldiv(mousy, (int32_t)((1<<16)/(msens*0.25f))); mousy = ld.quot; mouseysurp = ld.rem; - } - else - { - ld = ldiv(mousx, (int32_t)((1<<16)/msens)); mousx = ld.quot; mousexsurp = ld.rem; - ld = ldiv(mousy, (int32_t)((1<<16)/msens)); mousy = ld.quot; mouseysurp = ld.rem; - } - } - - if (mlook == 3) - mlook = omlook; - - // UnrealEd: - // rmb: mouselook - // lbm: x:turn y:fwd/back local x - // lmb&rmb: x:strafe y:up/dn (move in local yz plane) - // mmb: fwd/back in viewing vector - - if (unrealedlook && !mskip) //PK - { - if ((bstatus&(1|2|4))==1) - { - ang += mousx; - xvect = -((mousy*(int32_t)sintable[(ang+2560)&2047])<<(3+pk_uedaccel)); - yvect = -((mousy*(int32_t)sintable[(ang+2048)&2047])<<(3+pk_uedaccel)); - - move_and_update(xvect, yvect, 0); - } - else if (!mlook && (bstatus&(1|2|4))==2) - { - mlook=2; - } - else if ((bstatus&(1|2|4))==(1|2)) - { - zmode = 2; - xvect = -((mousx*(int32_t)sintable[(ang+2048)&2047])<>6)* - ((int32_t)sintable[(tempint+512)&2047])>>6) - <>6)* - ((int32_t)sintable[(tempint+512)&2047])>>6) - <>(10-pk_uedaccel)); - - move_and_update(xvect, yvect, 2); - } - } - - if (mskip) - { - // mskip was set in astub.c to not trigger UEd mouse movements. - // Reset now. - mskip = 0; - } - else - { - if (mlook && (unrealedlook==0 || (bstatus&(1|4))==0)) - { - ang += mousx; - horiz -= mousy; - - /* - if (mousy && !(mousy/4)) - horiz--; - if (mousx && !(mousx/2)) - ang++; - */ - - bclamp(&horiz, -99, 299); - - if (mlook == 1) - { - searchx = xdim>>1; - searchy = ydim>>1; - } - osearchx = searchx-mousx; - osearchy = searchy-mousy; - } - else if (unrealedlook==0 || (bstatus&(1|2|4))==0) - { - osearchx = searchx; - osearchy = searchy; - searchx += mousx; - searchy += mousy; - - bclamp(&searchx, 12, xdim-13); - bclamp(&searchy, 12, ydim-13); - } - } - -// showmouse(); - -// if (keystatus[0x3b] > 0) pos.x--; -// if (keystatus[0x3c] > 0) pos.x++; -// if (keystatus[0x3d] > 0) pos.y--; -// if (keystatus[0x3e] > 0) pos.y++; -// if (keystatus[0x43] > 0) ang--; -// if (keystatus[0x44] > 0) ang++; - - if (keystatus[0x43]) // F9 - { - if (mhk) - { - Bmemset(spriteext, 0, sizeof(spriteext_t) * MAXSPRITES); - Bmemset(spritesmooth, 0, sizeof(spritesmooth_t) * (MAXSPRITES+MAXUNIQHUDID)); - delete_maphack_lights(); - mhk = 0; - message("Maphacks disabled"); - } - else - { - mhk = 1; - loadmhk(1); - } - - keystatus[0x43] = 0; - } - - mainloop_move(); - - getzrange(&pos,cursectnum, &hiz,&hihit, &loz,&lohit, 128,CLIPMASK0); - - if (zmode == 0) - { - goalz = loz-(kensplayerheight<<8); //playerheight pixels above floor - if (goalz < hiz+(16<<8)) //ceiling&floor too close - goalz = (loz+hiz)>>1; - goalz += mousz; - - if (DOWN_BK(MOVEUP)) //A (stand high) - { - goalz -= (16<<8); - if (DOWN_BK(RUN)) - goalz -= (24<<8); - } - if (DOWN_BK(MOVEDOWN)) //Z (stand low) - { - goalz += (12<<8); - if (DOWN_BK(RUN)) - goalz += (12<<8); - } - - if (goalz != pos.z) - { - if (pos.z < goalz) hvel += 64; - if (pos.z > goalz) hvel = ((goalz-pos.z)>>3); - - pos.z += hvel; - if (pos.z > loz-(4<<8)) pos.z = loz-(4<<8), hvel = 0; - if (pos.z < hiz+(4<<8)) pos.z = hiz+(4<<8), hvel = 0; - } - } - else - { - goalz = pos.z; - if (DOWN_BK(MOVEUP)) //A - { - if (eitherCTRL) - { - horiz = max(-100,horiz-((DOWN_BK(RUN)+1)*synctics*2)); - } - else - { - if (zmode != 1) - goalz -= (8<<8); - else - { - zlock += (4<<8); - DOWN_BK(MOVEUP) = 0; - } - } - } - if (DOWN_BK(MOVEDOWN)) //Z (stand low) - { - if (eitherCTRL) - { - horiz = min(300,horiz+((DOWN_BK(RUN)+1)*synctics*2)); - } - else - { - if (zmode != 1) - goalz += (8<<8); - else if (zlock > 0) - { - zlock -= (4<<8); - DOWN_BK(MOVEDOWN) = 0; - } - } - } - - if (!noclip) - bclamp(&goalz, hiz+(4<<8), loz-(4<<8)); - - if (zmode == 1) goalz = loz-zlock; - if (!noclip && (goalz < hiz+(4<<8))) - goalz = ((loz+hiz)>>1); //ceiling&floor too close - if (zmode == 1) pos.z = goalz; - - if (goalz != pos.z) - { - //if (pos.z < goalz) hvel += (32< goalz) hvel -= (32< loz-(4<<8)) pos.z = loz-(4<<8), hvel = 0; - if (pos.z < hiz+(4<<8)) pos.z = hiz+(4<<8), hvel = 0; - } - } - else - hvel = 0; - } - - updatesectorz(pos.x,pos.y,pos.z, &cursectnum); - - searchit = 2; - if (searchstat >= 0) - { - if ((bstatus&(1|2|4)) > 0) - searchit = 0; - - if (keystatus[0x1f]) //S (insert sprite) (3D) - { - hitdata_t hitinfo; - - dax = 16384; - day = divscale14(searchx-(xdim>>1), xdim>>1); - rotatepoint(0,0, dax,day, ang, &dax,&day); - - hitscan((const vec3_t *)&pos,cursectnum, //Start position - dax,day,(scale(searchy,200,ydim)-horiz)*2000, //vector of 3D ang - &hitinfo,CLIPMASK1); - - if (hitinfo.hitsect >= 0) - { - dax = hitinfo.pos.x; - day = hitinfo.pos.y; - if (gridlock && grid > 0) - { - if (searchstat == 0 || searchstat == 4) - hitinfo.pos.z &= 0xfffffc00; - else - locktogrid(&dax, &day); - } - - i = insert_sprite_common(hitinfo.hitsect, dax, day); - - if (i < 0) - message("Couldn't insert sprite."); - else - { - int32_t cz, fz; - - if (somethingintab == 3) - { - sprite[i].picnum = temppicnum; - if (tilesizx[temppicnum] <= 0 || tilesizy[temppicnum] <= 0) - { - j = 0; - for (k=0; k 0 && tilesizy[k] > 0) - { - j = k; - break; - } - sprite[i].picnum = j; - } - - sprite[i].shade = tempshade; - sprite[i].pal = temppal; - sprite[i].xrepeat = max(tempxrepeat, 1); - sprite[i].yrepeat = max(tempyrepeat, 1); - sprite[i].cstat = tempcstat; - } - - getzsofslope(hitinfo.hitsect, hitinfo.pos.x, hitinfo.pos.y, &cz, &fz); - - j = spriteheight(i, NULL)>>1; - sprite[i].z = hitinfo.pos.z; - if ((sprite[i].cstat&48)!=32) - { - if ((sprite[i].cstat&128) == 0) - bclamp(&sprite[i].z, cz+(j<<1), fz); - else - bclamp(&sprite[i].z, cz+j, fz-j); - } - - if (searchstat == 0 || searchstat == 4) - { - sprite[i].cstat &= ~48; - sprite[i].cstat |= (16+64); - - correct_ornamented_sprite(i, hitinfo.hitwall); - } - else - sprite[i].cstat |= (tilesizy[sprite[i].picnum]>=32); - - correct_sprite_yoffset(i); - - updatenumsprites(); - asksave = 1; - - VM_OnEvent(EVENT_INSERTSPRITE3D, i); - } - } - - keystatus[0x1f] = 0; - } - - if (keystatus[0x3f]||keystatus[0x40]) //F5,F6 - { - switch (searchstat) - { - case 1: - case 2: - ExtShowSectorData(searchsector); break; - case 0: - case 4: - ExtShowWallData(searchwall); break; - case 3: - ExtShowSpriteData(searchwall); break; - } - - keystatus[0x3f] = keystatus[0x40] = 0; - } - if (keystatus[0x41]||keystatus[0x42]) //F7,F8 - { - switch (searchstat) - { - case 1: - case 2: - ExtEditSectorData(searchsector); break; - case 0: - case 4: - ExtEditWallData(searchwall); break; - case 3: - ExtEditSpriteData(searchwall); break; - } - - keystatus[0x41] = keystatus[0x42] = 0; - } - - } - - if (keystatus[buildkeys[BK_MODE2D_3D]]) // Enter - { - - vid_gamma_3d = vid_gamma; - vid_contrast_3d = vid_contrast; - vid_brightness_3d = vid_brightness; - - vid_gamma = vid_contrast = 1.0; - vid_brightness = 0.0; - - setbrightness(0,0,0); - - keystatus[buildkeys[BK_MODE2D_3D]] = 0; - overheadeditor(); - keystatus[buildkeys[BK_MODE2D_3D]] = 0; - - vid_gamma = vid_gamma_3d; - vid_contrast = vid_contrast_3d; - vid_brightness = vid_brightness_3d; - - vid_gamma_3d = vid_contrast_3d = vid_brightness_3d = -1; - - setbrightness(GAMMA_CALC,0,0); - } -} - -char changechar(char dachar, int32_t dadir, char smooshyalign, char boundcheck) -{ - if (dadir < 0) - { - if ((dachar > 0) || (boundcheck == 0)) - { - dachar--; - if (smooshyalign > 0) - dachar = (dachar&0xf8); - } - } - else if (dadir > 0) - { - if ((dachar < 255) || (boundcheck == 0)) - { - dachar++; - if (smooshyalign > 0) - { - if (dachar >= 256-8) dachar = 255; - else dachar = ((dachar+7)&0xf8); - } - } - } - return(dachar); -} - - -////////////////////// OVERHEADEDITOR ////////////////////// - -int32_t inside_editor(const vec3_t *pos, int32_t searchx, int32_t searchy, int32_t zoom, - int32_t x, int32_t y, int16_t sectnum) -{ - if (!m32_sideview) - return inside(x, y, sectnum); - - // if in side-view mode, use the screen coords instead - { - int32_t dst = MAXSECTORS+M32_FIXME_SECTORS-1, i, oi; - int32_t srcw=sector[sectnum].wallptr, dstw=MAXWALLS; - int32_t ret; - - if (sector[sectnum].wallnum > M32_FIXME_WALLS) - return -1; - - Bmemcpy(§or[dst], §or[sectnum], sizeof(sectortype)); - sector[dst].wallptr = dstw; - - Bmemcpy(&wall[dstw], &wall[srcw], sector[dst].wallnum*sizeof(walltype)); - for (i=dstw, oi=srcw; ix, wall[i].y-pos->y, zoom); - wall[i].y += getscreenvdisp(getflorzofslope(sectnum,wall[oi].x,wall[oi].y)-pos->z, zoom); - wall[i].x += halfxdim16; - wall[i].y += midydim16; - } - - i = numsectors; - numsectors = dst+1; - ret = inside(searchx, searchy, dst); - numsectors = i; - return ret; - } -} - -static inline void drawline16base(int32_t bx, int32_t by, int32_t x1, int32_t y1, int32_t x2, int32_t y2, char col) -{ - drawline16(bx+x1, by+y1, bx+x2, by+y2, col); -} - -void drawsmallabel(const char *text, char col, char backcol, int32_t dax, int32_t day, int32_t daz) -{ - int32_t x1, y1, x2, y2; - - screencoords(&dax,&day, dax-pos.x,day-pos.y, zoom); - if (m32_sideview) - day += getscreenvdisp(daz-pos.z, zoom); - - x1 = halfxdim16+dax-(Bstrlen(text)<<1); - y1 = midydim16+day-4; - x2 = x1 + (Bstrlen(text)<<2)+2; - y2 = y1 + 7; - - if ((x1 > 3) && (x2 < xdim) && (y1 > 1) && (y2 < ydim16)) - { - printext16(x1,y1, col,backcol, text,1); - drawline16(x1-1,y1-1, x2-3,y1-1, backcol); - drawline16(x1-1,y2+1, x2-3,y2+1, backcol); - - drawline16(x1-2,y1, x1-2,y2, backcol); - drawline16(x2-2,y1, x2-2,y2, backcol); - drawline16(x2-3,y1, x2-3,y2, backcol); - } -} - -// backup highlighted sectors with sprites as mapinfo for later restoration -// return values: -// -1: highlightsectorcnt<=0 -// -2: out of mem -// 0: ok -static int32_t backup_highlighted_map(mapinfofull_t *mapinfo) -{ - int32_t i, j, k, m, tmpnumwalls=0, tmpnumsprites=0; - - if (highlightsectorcnt <= 0) - return -1; - - // count walls & sprites - for (i=0; isector = Bmalloc(highlightsectorcnt * sizeof(sectortype)); - if (!mapinfo->sector) return -2; - mapinfo->wall = Bmalloc(tmpnumwalls * sizeof(walltype)); - if (!mapinfo->wall) { Bfree(mapinfo->sector); return -2; } - if (tmpnumsprites>0) - { - mapinfo->sprite = Bmalloc(tmpnumsprites * sizeof(spritetype)); - if (!mapinfo->sprite) - { - Bfree(mapinfo->sector); - Bfree(mapinfo->wall); - return -2; - } - } - - - // copy everything over - tmpnumwalls = 0; - tmpnumsprites = 0; - for (i=0; isector[i], §or[k], sizeof(sectortype)); - mapinfo->sector[i].wallptr = tmpnumwalls; - - for (j=0; jwall[tmpnumwalls+j], &wall[sector[k].wallptr+j], sizeof(walltype)); - mapinfo->wall[tmpnumwalls+j].point2 += (tmpnumwalls-sector[k].wallptr); - mapinfo->wall[tmpnumwalls+j].nextsector = -1; - mapinfo->wall[tmpnumwalls+j].nextwall = -1; - } - tmpnumwalls += j; - - m = headspritesect[highlightsector[i]]; - while (m != -1) - { - Bmemcpy(&mapinfo->sprite[tmpnumsprites], &sprite[m], sizeof(spritetype)); - mapinfo->sprite[tmpnumsprites].sectnum = i; - m = nextspritesect[m]; - tmpnumsprites++; - } - } - - - mapinfo->numsectors = highlightsectorcnt; - mapinfo->numwalls = tmpnumwalls; - mapinfo->numsprites = tmpnumsprites; - - return 0; -} - -static void mapinfofull_free(mapinfofull_t *mapinfo) -{ - Bfree(mapinfo->sector); - Bfree(mapinfo->wall); - if (mapinfo->numsprites>0) - Bfree(mapinfo->sprite); -} - -// restore map saved with backup_highlighted_map, also -// frees mapinfo's sector, wall, (sprite) in any case. -// return values: -// -1: limits exceeded -// 0: ok -static int32_t restore_highlighted_map(mapinfofull_t *mapinfo) -{ - int32_t i, j, sect, onumsectors=numsectors, newnumsectors, newnumwalls; - - updatenumsprites(); - if (numsectors+mapinfo->numsectors>MAXSECTORS || numwalls+mapinfo->numwalls>MAXWALLS - || numsprites+mapinfo->numsprites>MAXSPRITES) - { - mapinfofull_free(mapinfo); - return -1; - } - - newnumsectors = numsectors + mapinfo->numsectors; - newnumwalls = numwalls + mapinfo->numwalls; - - // copy sectors & walls - Bmemcpy(§or[numsectors], mapinfo->sector, mapinfo->numsectors*sizeof(sectortype)); - Bmemcpy(&wall[numwalls], mapinfo->wall, mapinfo->numwalls*sizeof(walltype)); - - // tweak index members - for (i=numsectors; i>3] |= (1<<(i&7)); - } - for (i=numwalls; inumsprites; i++) - { - sect = onumsectors+mapinfo->sprite[i].sectnum; - j = insertsprite(sect, mapinfo->sprite[i].statnum); - Bmemcpy(&sprite[j], &mapinfo->sprite[i], sizeof(spritetype)); - sprite[j].sectnum = sect; - } - - numwalls = newnumwalls; - updatenumsprites(); - - update_highlightsector(); - - mapinfofull_free(mapinfo); - return 0; -} - - -static int32_t newnumwalls=-1; - -static void ovh_whiteoutgrab() -{ - int32_t i, j, k, startwall, endwall; - - //White out all bordering lines of grab that are - //not highlighted on both sides - for (i=highlightsectorcnt-1; i>=0; i--) - { - startwall = sector[highlightsector[i]].wallptr; - endwall = startwall + sector[highlightsector[i]].wallnum; - for (j=startwall; j= 0) - { -// for (k=highlightsectorcnt-1; k>=0; k--) -// if (highlightsector[k] == wall[j].nextsector) -// break; - k = wall[j].nextsector; - if ((hlsectorbitmap[k>>3]&(1<<(k&7)))==0) -// if (k < 0) - { - NEXTWALL(j).nextwall = -1; - NEXTWALL(j).nextsector = -1; - wall[j].nextwall = -1; - wall[j].nextsector = -1; - } - } - } - } -} - -static void duplicate_selected_sectors() -{ - int32_t i, j, startwall, endwall, newnumsectors, newwalls = 0; - int32_t minx=INT_MAX, maxx=INT_MIN, miny=INT_MAX, maxy=INT_MIN, dx, dy; - - for (i=0; i= 0) - checksectorpointer(wall[j].nextwall,wall[j].nextsector); - checksectorpointer(j, highlightsector[i]); - - minx = min(minx, wall[j].x); - maxx = max(maxx, wall[j].x); - miny = min(miny, wall[j].y); - maxy = max(maxy, wall[j].y); - } - - // Then, highlight the ones just copied. - // These will have all walls whited out. - j = numsectors + i; - hlsectorbitmap[j>>3] |= (1<<(j&7)); - } - - // displace walls of new sectors by a small amount - dx = 512; //((maxx-minx)+255)&~255; - dy = -256; //((maxy-miny)+255)&~255; - if (maxx+dx >= editorgridextent) dx*=-1; - if (minx+dx <= -editorgridextent) dx*=-1; - if (maxy+dy >= editorgridextent) dy*=-1; - if (miny+dy <= -editorgridextent) dy*=-1; - - for (i=numsectors; i=0; j=nextspritesect[j]) - { - sprite[j].x += dx; - sprite[j].y += dy; - } - } - - numsectors = newnumsectors; - numwalls = newnumwalls; - - update_highlightsector(); // must be after numsectors = newnumsectors - - newnumwalls = -1; - newnumsectors = -1; - - updatenumsprites(); - printmessage16("Sectors duplicated and stamped."); - asksave = 1; - } - else - { - printmessage16("Copying sectors would exceed sector or wall limit."); - } -} - -static void duplicate_selected_sprites() -{ - int32_t i, j, k=0; - - for (i=0; i= 0) - sprite[i].ang = (getangle(POINT2(hitw).x-wall[hitw].x, - POINT2(hitw).y-wall[hitw].y)+512)&2047; - - //Make sure sprite's in right sector - if (inside(sprite[i].x, sprite[i].y, sprite[i].sectnum) == 0) - { - j = wall[hitw].point2; - sprite[i].x -= ksgn(wall[j].y-wall[hitw].y); - sprite[i].y += ksgn(wall[j].x-wall[hitw].x); - } -} - -void DoSpriteOrnament(int32_t i) -{ - hitdata_t hitinfo; - - hitscan((const vec3_t *)&sprite[i],sprite[i].sectnum, - sintable[(sprite[i].ang+1536)&2047], - sintable[(sprite[i].ang+1024)&2047], - 0, - &hitinfo,CLIPMASK1); - - sprite[i].x = hitinfo.pos.x; - sprite[i].y = hitinfo.pos.y; - sprite[i].z = hitinfo.pos.z; - changespritesect(i, hitinfo.hitsect); - - correct_ornamented_sprite(i, hitinfo.hitwall); -} - -void update_highlight() -{ - int32_t i; - - highlightcnt = 0; - for (i=0; i>3]&(1<<(i&7))) - highlight[highlightcnt++] = i; - for (i=0; i>3]&(1<<(i&7))) - highlight[highlightcnt++] = i+16384; - } - else - show2dsprite[i>>3] &= ~(1<<(i&7)); - - if (highlightcnt == 0) - highlightcnt = -1; -} - -void update_highlightsector() -{ - int32_t i; - - highlightsectorcnt = 0; - for (i=0; i>3]&(1<<(i&7))) - highlightsector[highlightsectorcnt++] = i; - - if (highlightsectorcnt==0) - highlightsectorcnt = -1; -} - -// hook run after handleevents in side view -static void sideview_filter_keys(void) -{ - uint32_t i; - - for (i=0; i 0) - { - dax /= k; - day /= k; - } - - *cx = dax; - *cy = day; -} - -static int32_t insert_sprite_common(int32_t sucksect, int32_t dax, int32_t day) -{ - int32_t i, j, k; - - i = insertsprite(sucksect,0); - if (i < 0) - return -1; - - sprite[i].x = dax, sprite[i].y = day; - sprite[i].cstat = DEFAULT_SPRITE_CSTAT; - sprite[i].shade = 0; - sprite[i].pal = 0; - sprite[i].xrepeat = 64, sprite[i].yrepeat = 64; - sprite[i].xoffset = 0, sprite[i].yoffset = 0; - sprite[i].ang = 1536; - sprite[i].xvel = 0; sprite[i].yvel = 0; sprite[i].zvel = 0; - sprite[i].owner = -1; - sprite[i].clipdist = 32; - sprite[i].lotag = 0; - sprite[i].hitag = 0; - sprite[i].extra = -1; - - Bmemset(localartfreq, 0, sizeof(localartfreq)); - for (k=0; k localartfreq[j]) - j = k; - - if (localartfreq[j] > 0) - sprite[i].picnum = j; - else - sprite[i].picnum = 0; - - return i; -} - -void correct_sprite_yoffset(int32_t i) -{ - int32_t tileyofs = (int8_t)((picanm[sprite[i].picnum]>>16)&255); - int32_t tileysiz = tilesizy[sprite[i].picnum]; - - if (klabs(tileyofs) >= tileysiz) - { - tileyofs *= -1; - if (tileyofs == 128) - tileyofs = 127; - - sprite[i].yoffset = tileyofs; - } - else - sprite[i].yoffset = 0; -} - -static void fade_screen() -{ - char blackcol=editorcolors[0], greycol=whitecol-25, *cp; - int32_t i; - - begindrawing(); - cp = (char *)frameplace; - for (i=0; i= 0 ? &wall[src] : &nullwall; - - dstwal->cstat = srcwal->cstat; - dstwal->shade = srcwal->shade; - dstwal->yrepeat = srcwal->yrepeat; - fixrepeats(dst); // xrepeat - dstwal->picnum = srcwal->picnum; - dstwal->overpicnum = srcwal->overpicnum; - - dstwal->nextwall = -1; - dstwal->nextsector = -1; - - dstwal->pal = srcwal->pal; - dstwal->xpanning = srcwal->xpanning; - dstwal->ypanning = srcwal->ypanning; - dstwal->lotag = 0; //srcwal->lotag; - dstwal->hitag = 0; //srcwal->hitag; - dstwal->extra = -1; //srcwal->extra; -} - -// helpers for often needed ops: -static int32_t copyloop1(int16_t *danumwalls, int32_t *m) -{ - if (*danumwalls >= MAXWALLS + M32_FIXME_WALLS) - return 1; - - Bmemcpy(&wall[*danumwalls], &wall[*m], sizeof(walltype)); - wall[*danumwalls].point2 = *danumwalls+1; - (*danumwalls)++; - *m = wall[*m].point2; - - return 0; -} - -static void updatesprite1(int16_t i) -{ - setsprite(i, (vec3_t *)&sprite[i]); - - if (sprite[i].sectnum>=0) - { - int32_t tempint, cz, fz; - tempint = spriteheight(i, NULL); - if (sprite[i].cstat&128) - tempint >>= 1; - getzsofslope(sprite[i].sectnum, sprite[i].x, sprite[i].y, &cz, &fz); - sprite[i].z = max(sprite[i].z, cz+tempint); - sprite[i].z = min(sprite[i].z, fz); - } -} - -static int32_t ask_if_sure(const char *query, uint32_t flags); -static int32_t ask_above_or_below(); - -// returns: -// 0: continue -// >0: newnumwalls -// <0: error -static int32_t trace_loop(int32_t j, uint8_t *visitedwall, int16_t *ignore_ret, int16_t *refsect_ret) -{ - int16_t refsect, ignore; - int32_t k, n, refwall; - - if (wall[j].nextwall>=0 || (visitedwall[j>>3]&(1<<(j&7)))) - return 0; - - n=2*MAXWALLS; // simple inf loop check - refwall = j; - k = numwalls; - - ignore = 0; - - if (ignore_ret) - { - refsect = -1; - updatesectorexclude(wall[j].x, wall[j].y, &refsect, hlsectorbitmap); - if (refsect<0) - return -1; - } - - do - { - if (j!=refwall && visitedwall[j>>3]&(1<<(j&7))) - ignore = 1; - visitedwall[j>>3] |= (1<<(j&7)); - - if (ignore_ret) - { - if (inside(wall[j].x, wall[j].y, refsect) != 1) - ignore = 1; - } - - if (!ignore) - { - if (k>=MAXWALLS) - { - message("Wall limits exceeded while tracing outer loop."); - return -2; - } - - Bmemcpy(&wall[k], &wall[j], sizeof(walltype)); - wall[k].point2 = k+1; - wall[k].nextsector = wall[k].nextwall = wall[k].extra = -1; - k++; - } - - j = wall[j].point2; - n--; - - while (wall[j].nextwall>=0 && n>0) - { - j = wall[wall[j].nextwall].point2; -// if (j!=refwall && (visitedwall[j>>3]&(1<<(j&7)))) -// ignore = 1; -// visitedwall[j>>3] |= (1<<(j&7)); - n--; - } - } - while (j!=refwall && n>0); - - if (j!=refwall) - { - message("internal error while tracing outer loop: didn't reach refwall"); - return -3; - } - - if (ignore_ret) - { - *ignore_ret = ignore; - if (refsect_ret) - *refsect_ret = refsect; - } - - return k; -} - -static int32_t backup_drawn_walls(int32_t restore) -{ - static int32_t wallsdrawn = -1; - static walltype *tmpwall; - - // back up - if (restore==0) - { - if (newnumwalls == -1) - { - wallsdrawn = -1; - } - else - { - wallsdrawn = newnumwalls-numwalls; - - tmpwall = Bmalloc(wallsdrawn * sizeof(walltype)); - if (!tmpwall) - { - wallsdrawn = -1; - return 1; - } - - Bmemcpy(tmpwall, &wall[numwalls], wallsdrawn*sizeof(walltype)); - newnumwalls = -1; - } - - return 0; - } - - // restore - if (wallsdrawn != -1) - { - int32_t i; - - Bmemcpy(&wall[numwalls], tmpwall, wallsdrawn*sizeof(walltype)); - newnumwalls = numwalls + wallsdrawn; - for (i=numwalls; i>1) == 0) - { - if (!((vel|angvel|svel) //DOWN_BK(MOVEFORWARD) || DOWN_BK(MOVEBACKWARD) || DOWN_BK(TURNLEFT) || DOWN_BK(TURNRIGHT) - || DOWN_BK(MOVEUP) || DOWN_BK(MOVEDOWN) || keystatus[0x10] || keystatus[0x11] - || keystatus[0x48] || keystatus[0x4b] || keystatus[0x4d] || keystatus[0x50] // keypad keys - || bstatus || OSD_IsMoving())) - { - if (totalclock > waitdelay) - { - uint32_t ms = (highlightsectorcnt>0) ? 75 : 200; - // wait for event, timeout after 200 ms - (last loop time) - idle_waitevent_timeout(ms - min(getticks()-lasttick, ms)); - // have synctics reset to 0 after we've slept to avoid zooming out to the max instantly - resetsynctics = 1; - } - } - else waitdelay = totalclock + 30; // should be 250 ms - - lasttick = getticks(); - - if (handleevents()) - { - if (quitevent) - { - keystatus[1] = 1; - quitevent = 0; - } - } - - if (resetsynctics) - { - resetsynctics = 0; - lockclock = totalclock; - synctics = 0; - } - - OSD_DispatchQueued(); - - if (totalclock < 120*3) - printmessage16("Uses BUILD technology by Ken Silverman."); - else if (totalclock < 120*6) - { - printmessage16("Press F1 for help. This is a test release; always keep backups of your maps."); - // printext16(8L,ydim-STATUS2DSIZ+32L,editorcolors[9],-1,kensig,0); - } - - oldmousebstatus = bstatus; - getmousevalues(&mousx,&mousy,&bstatus); - mousx = (mousx<<16)+mousexsurp; - mousy = (mousy<<16)+mouseysurp; - { - ldiv_t ld; - ld = ldiv(mousx, 1<<16); mousx = ld.quot; mousexsurp = ld.rem; - ld = ldiv(mousy, 1<<16); mousy = ld.quot; mouseysurp = ld.rem; - } - searchx += mousx; - searchy += mousy; - - bclamp(&searchx, 8, xdim-8-1); - bclamp(&searchy, 8, ydim-8-1); - - /* - if (keystatus[0x3b] > 0) pos.x--, keystatus[0x3b] = 0; - if (keystatus[0x3c] > 0) pos.x++, keystatus[0x3c] = 0; - if (keystatus[0x3d] > 0) pos.y--, keystatus[0x3d] = 0; - if (keystatus[0x3e] > 0) pos.y++, keystatus[0x3e] = 0; - if (keystatus[0x43] > 0) ang--, keystatus[0x43] = 0; - if (keystatus[0x44] > 0) ang++, keystatus[0x44] = 0; - */ - - mainloop_move(); - - getpoint(searchx,searchy,&mousxplc,&mousyplc); - linehighlight = getlinehighlight(mousxplc, mousyplc, linehighlight); - - if (newnumwalls >= numwalls) - { - // if we're in the process of drawing a wall, set the end point's coordinates - dax = mousxplc; - day = mousyplc; - adjustmark(&dax,&day,newnumwalls); - wall[newnumwalls].x = dax; - wall[newnumwalls].y = day; - } - - ydim16 = ydim;// - STATUS2DSIZ2; - midydim16 = ydim>>1; - - tempint = numwalls; - numwalls = newnumwalls; - if (numwalls < 0) - numwalls = tempint; - - if ((getticks() - lastdraw) >= 5 || (vel|angvel|svel) || DOWN_BK(MOVEUP) || DOWN_BK(MOVEDOWN) - || mousx || mousy || bstatus || keystatus[0x10] || keystatus[0x11] - || newnumwalls>=0 || OSD_IsMoving()) - { - lastdraw = getticks(); - - clear2dscreen(); - - setup_sideview_sincos(); - - if (graphicsmode && !m32_sideview) - { - Bmemset(show2dsector, 0xff, sizeof(show2dsector)); - setview(0, 0, xdim-1, ydim16-1); - - if (graphicsmode == 2) - totalclocklock = totalclock; - - drawmapview(pos.x, pos.y, zoom, 1536); - } - - draw2dgrid(pos.x,pos.y,pos.z,cursectnum,ang,zoom,grid); - - ExtPreCheckKeys(); - - { - int32_t cx, cy; - - // Draw brown arrow (start) - screencoords(&x2, &y2, startposx-pos.x,startposy-pos.y, zoom); - if (m32_sideview) - y2 += getscreenvdisp(startposz-pos.z, zoom); - - cx = halfxdim16+x2; - cy = midydim16+y2; - if ((cx >= 2 && cx <= xdim-3) && (cy >= 2 && cy <= ydim16-3)) - { - int16_t angofs = m32_sideview ? m32_sideang : 0; - x1 = mulscale11(sintable[(startang+angofs+2560)&2047],zoom) / 768; - y1 = mulscale11(sintable[(startang+angofs+2048)&2047],zoom) / 768; - i = scalescreeny(x1); - j = scalescreeny(y1); - begindrawing(); //{{{ - drawline16base(cx,cy, x1,j, -x1,-j, editorcolors[2]); - drawline16base(cx,cy, x1,j, +y1,-i, editorcolors[2]); - drawline16base(cx,cy, x1,j, -y1,+i, editorcolors[2]); - enddrawing(); //}}} - } - } - - draw2dscreen(&pos,cursectnum,ang,zoom,grid); - - begindrawing(); //{{{ - if (showtags == 1) - { - if (zoom >= 768) - { - for (i=0; i= 0) - { - for (i=newnumwalls; i>=tempint; i--) - wall[i].cstat |= (1<<14); - } - - i = numwalls-1; - if (newnumwalls >= 0) - i = newnumwalls-1; - for (wal=&wall[i]; i>=0; i--,wal--) - { - if (zoom < 768 && !(wal->cstat & (1<<14))) - continue; - - //Get average point of wall - dax = (wal->x+wall[wal->point2].x)>>1; - day = (wal->y+wall[wal->point2].y)>>1; - if ((dax > x3) && (dax < x4) && (day > y3) && (day < y4)) - { - dabuffer = (char *)ExtGetWallCaption(i); - if (dabuffer[0] == 0) - continue; - - drawsmallabel(dabuffer, editorcolors[0], editorcolors[31], - dax, day, getflorzofslope(sectorofwall(i), dax,day)); - } - } - - i = 0; j = numsprites; k=0; - if (zoom >= 768) - while (j > 0 && i < MAXSPRITES && (!m32_sideview || k= 0) - { - int32_t oydim16 = ydim16; - ydim16 = ydim-STATUS2DSIZ2; - for (i=0; i>3]&(1<<(i&7))) - fillsector(i,2); - ydim16 = oydim16; - } - - if (keystatus[0x2a]) // FIXME - { - drawlinepat = 0x00ff00ff; - drawline16(searchx,0, searchx,ydim2d-1, editorcolors[15]); - drawline16(0,searchy, xdim2d-1,searchy, editorcolors[15]); - drawlinepat = 0xffffffff; - - _printmessage16("(%d,%d)",mousxplc,mousyplc); -#if 0 - i = (Bstrlen(tempbuf)<<3)+6; - if ((searchx+i) < (xdim2d-1)) - i = 0; - else i = (searchx+i)-(xdim2d-1); - if ((searchy+16) < (ydim2d-STATUS2DSIZ2-1)) - j = 0; - else j = (searchy+16)-(ydim2d-STATUS2DSIZ2-1); - printext16(searchx+6-i,searchy+6-j,editorcolors[11],-1,tempbuf,0); -#endif - } - drawline16(searchx,0, searchx,8, editorcolors[15]); - drawline16(0,searchy, 8,searchy, editorcolors[15]); - - ////// draw mouse pointer - col = editorcolors[15 - 3*gridlock]; - if (joinsector[0] >= 0) - col = editorcolors[11]; - - if (numcorruptthings>0) - { - static char cbuf[64]; - - if ((pointhighlight&16384)==0) - { - for (i=0; i=MAXCORRUPTTHINGS ? ">=":"", numcorruptthings); - printext16(8,8, editorcolors[13],editorcolors[0],cbuf,0); - } - - if (keystatus[0x36] || keystatus[0xb8]) // RSHIFT || RALT - { - if (keystatus[0x27] || keystatus[0x28]) // ' and ; - { - col = editorcolors[14]; - - drawline16base(searchx+16, searchy-16, -4,0, +4,0, col); - if (keystatus[0x28]) - drawline16base(searchx+16, searchy-16, 0,-4, 0,+4, col); - } - - if (keystatus[0x36] && eitherCTRL) - printext16(searchx+6,searchy-6-8,editorcolors[12],-1,"S",0); - } - - drawline16base(searchx,searchy, +0,-8, +0,-1, col); - drawline16base(searchx,searchy, +1,-8, +1,-1, col); - drawline16base(searchx,searchy, +0,+2, +0,+9, col); - drawline16base(searchx,searchy, +1,+2, +1,+9, col); - drawline16base(searchx,searchy, -8,+0, -1,+0, col); - drawline16base(searchx,searchy, -8,+1, -1,+1, col); - drawline16base(searchx,searchy, +2,+0, +9,+0, col); - drawline16base(searchx,searchy, +2,+1, +9,+1, col); - - ////// Draw the white pixel closest to mouse cursor on linehighlight - if (linehighlight>=0 && !m32_sideview) - { - getclosestpointonwall(mousxplc,mousyplc, linehighlight, &dax,&day); - x2 = mulscale14(dax-pos.x,zoom); - y2 = mulscale14(day-pos.y,zoom); - - drawline16base(halfxdim16+x2,midydim16+y2, 0,0, 0,0, - wall[linehighlight].nextsector >= 0 ? editorcolors[15] : editorcolors[5]); - } - - enddrawing(); //}}} - - OSD_Draw(); - } - - VM_OnEvent(EVENT_PREKEYS2D, -1); - ExtCheckKeys(); // TX 20050101, it makes more sense to have this here so keys can be overwritten with new functions in bstub.c - - // Flip/mirror sector Ed Coolidge - if (keystatus[0x2d] || keystatus[0x15]) // X or Y (2D) - { - int32_t about_x=keystatus[0x2d]; - int32_t doMirror = eitherALT; // mirror walls and wall/floor sprites - - if (highlightsectorcnt > 0) - { - keystatus[0x2d] = keystatus[0x15] = 0; - - get_sectors_center(highlightsector, highlightsectorcnt, &dax, &day); - - if (gridlock && grid > 0) - locktogrid(&dax, &day); - - for (i=0; i>1; - for (w=1; w<=numtoswap; w++) - { - Bmemcpy(&tempwall, &wall[startofloop+w], sizeof(walltype)); - Bmemcpy(&wall[startofloop+w], &wall[endofloop-w+1], sizeof(walltype)); - Bmemcpy(&wall[endofloop-w+1], &tempwall, sizeof(walltype)); - } - - //make point2 point to next wall in loop - for (w=startofloop; w= 0) - { - wall[linehighlight].cstat ^= 1; - wall[linehighlight].cstat &= ~64; - if ((wall[linehighlight].nextwall >= 0) && !eitherSHIFT) - { - NEXTWALL(linehighlight).cstat &= ~(1+64); - NEXTWALL(linehighlight).cstat |= (wall[linehighlight].cstat&1); - } - asksave = 1; - } - keystatus[0x30] = 0; - } - if (keystatus[0x21]) //F (F alone does nothing in 2D right now) - { - keystatus[0x21] = 0; - if (eitherALT) //ALT-F (relative alignmment flip) - { - linehighlight = getlinehighlight(mousxplc, mousyplc, linehighlight); - if (linehighlight >= 0) - { - int32_t secti = sectorofwall(linehighlight); - setfirstwall(secti, linehighlight); - asksave = 1; - printmessage16("This wall now sector %d's first wall (sector[].wallptr)", secti); - } - } - } - - if (keystatus[0x18]) // O (ornament onto wall) (2D) - { - keystatus[0x18] = 0; - if ((pointhighlight&0xc000) == 16384) - { - asksave = 1; - DoSpriteOrnament(pointhighlight&16383); - } - } - - - tsign = 0; - if (keystatus[0x33] || (bstatus&33)==33) // , (2D) - tsign = +1; - if (keystatus[0x34] || (bstatus&17)==17) // . (2D) - tsign = -1; - - if (tsign) - { - if (highlightsectorcnt > 0) - { - int32_t smoothRotation = !eitherSHIFT; - - get_sectors_center(highlightsector, highlightsectorcnt, &dax, &day); - - if (smoothRotation) - { - if (gridlock && grid > 0) - locktogrid(&dax, &day); - } - - for (i=0; i= 16384) - { - i = pointhighlight-16384; - if (eitherSHIFT) - sprite[i].ang = (sprite[i].ang-tsign)&2047; - else - { - sprite[i].ang = (sprite[i].ang-128*tsign)&2047; - keystatus[0x33] = keystatus[0x34] = 0; - } - - mouseb &= ~(16|32); - bstatus &= ~(16|32); - -// clearmidstatbar16(); -// showspritedata((int16_t)pointhighlight-16384); - } - } - } - - if (keystatus[0x46]) //Scroll lock (set starting position) - { - startposx = pos.x; - startposy = pos.y; - startposz = pos.z; - startang = ang; - startsectnum = cursectnum; - keystatus[0x46] = 0; - asksave = 1; - } -#if 1 - if (keystatus[0x3f]) //F5 - { -// keystatus[0x3f] = 0; - - ydim16 = STATUS2DSIZ; - ExtShowSectorData((int16_t)0); - ydim16 = ydim-STATUS2DSIZ2; - } - if (keystatus[0x40]) //F6 - { -// keystatus[0x40] = 0; - - if (pointhighlight >= 16384) - { - i = pointhighlight-16384; - - ydim16 = STATUS2DSIZ; - ExtShowSpriteData((int16_t)i); - ydim16 = ydim-STATUS2DSIZ2; - } - else if (linehighlight >= 0) - { - i = linehighlight; - - ydim16 = STATUS2DSIZ; - ExtShowWallData((int16_t)i); - ydim16 = ydim-STATUS2DSIZ2; - } - else - { - ydim16 = STATUS2DSIZ; - ExtShowWallData((int16_t)0); - ydim16 = ydim-STATUS2DSIZ2; - } - } - if (keystatus[0x41]) //F7 - { - keystatus[0x41] = 0; - - for (i=0; i= 16384) - { - i = pointhighlight-16384; - - ydim16 = STATUS2DSIZ; - ExtEditSpriteData((int16_t)i); - ydim16 = ydim-STATUS2DSIZ2; - } - else if (linehighlight >= 0) - { - i = linehighlight; - - ydim16 = STATUS2DSIZ; - ExtEditWallData((int16_t)i); - ydim16 = ydim-STATUS2DSIZ2; - } - } -#endif - - if (keystatus[0x23]) //H (Hi 16 bits of tag) - { - keystatus[0x23] = 0; - if (eitherCTRL) //Ctrl-H - { - pointhighlight = getpointhighlight(mousxplc, mousyplc, pointhighlight); - linehighlight = getlinehighlight(mousxplc, mousyplc, linehighlight); - - if ((pointhighlight&0xc000) == 16384) - { - sprite[pointhighlight&16383].cstat ^= 256; - asksave = 1; - } - else if (linehighlight >= 0) - { - wall[linehighlight].cstat ^= 64; - if ((wall[linehighlight].nextwall >= 0) && !eitherSHIFT) - { - NEXTWALL(linehighlight).cstat &= ~64; - NEXTWALL(linehighlight).cstat |= (wall[linehighlight].cstat&64); - } - asksave = 1; - } - } - else if (eitherALT) //ALT - { - if (pointhighlight >= 16384) - { - i = pointhighlight-16384; - Bsprintf(buffer, "Sprite (%d) Hi-tag: ", i); - sprite[i].hitag = getnumber16(buffer, sprite[i].hitag, BTAG_MAX, 0); - } - else if (linehighlight >= 0) - { - i = linehighlight; - Bsprintf(buffer, "Wall (%d) Hi-tag: ", i); - wall[i].hitag = getnumber16(buffer, wall[i].hitag, BTAG_MAX, 0); - } - } - else - { - for (i=0; i= 16384) - { - i = pointhighlight-16384; - Bsprintf(buffer, "Sprite (%d) Status list: ", i); - changespritestat(i, getnumber16(buffer, sprite[i].statnum, MAXSTATUS-1, 0)); -// clearmidstatbar16(); -// showspritedata((int16_t)i); - // printmessage16(""); - } - } - else if (highlightsectorcnt > 0 && newnumwalls < 0&&0) - { - ////////// YAX ////////// - static const char *cfs[2] = {"ceiling", "floor"}; - - int32_t cf, thez; - - cf = ask_above_or_below(); - if (cf==-1) - goto end_yax; - - thez = YAX_SECTORFLD(highlightsector[0],z, cf); - for (i=0; i= 0) - { - message("Sector %d's %s is already extended", highlightsector[i], cfs[cf]); - goto end_yax; - } - - if (i==0) - continue; - - if (YAX_SECTORFLD(highlightsector[i],z, cf) != thez) - { - message("All sectors must have the same %s height", cfs[cf]); - goto end_yax; - } - if ((YAX_SECTORFLD(highlightsector[i],stat, cf)&2)!=0) - { - message("Sector %ss must not be sloped", cfs[cf]); - goto end_yax; - } - } - - m = numwalls; - Bmemset(visited, 0, sizeof(visited)); - // construct! - for (i=0; i highlightx2) - swaplong(&highlightx1, &highlightx2); - if (highlighty1 > highlighty2) - swaplong(&highlighty1, &highlighty2); - - // Ctrl+RShift: select all wall-points of highlighted wall's loop: - if (eitherCTRL && highlightx1==highlightx2 && highlighty1==highlighty2) - { - Bmemset(show2dwall, 0, sizeof(show2dwall)); - Bmemset(show2dsprite, 0, sizeof(show2dsprite)); - - if (linehighlight >= 0 && linehighlight < MAXWALLS) - { - i = linehighlight; - do - { - show2dwall[i>>3] |= (1<<(i&7)); - - for (j=0; j>3] |= (1<<(j&7)); - - i = wall[i].point2; - } - while (i != linehighlight); - } - - update_highlight(); - } - else - { - int32_t add=keystatus[0x28], sub=(!add && keystatus[0x27]), setop=(add||sub); - int32_t tx, ty, onlySprites=eitherCTRL; - - if (!setop) - { - Bmemset(show2dwall, 0, sizeof(show2dwall)); - Bmemset(show2dsprite, 0, sizeof(show2dsprite)); - } - - for (i=0; i= highlightx1 && tx <= highlightx2 && - ty >= highlighty1 && ty <= highlighty2) - { - if (!sub) - show2dwall[i>>3] |= (1<<(i&7)); - else if (sub) - show2dwall[i>>3] &= ~(1<<(i&7)); - } - } - - if (m32_sideview && !onlySprites) - { - // also select walls that would be dragged but - // maybe were missed -#if 1 - for (i=0; i>3]&(1<<(i&7))) - { - //N^2...ugh - for (j=0; j>3] |= (1<<(j&7)); - } -#else - for (i=0; i>3]&(1<<(i&7))) - dragpoint(i, wall[i].x, wall[i].y); - for (i=0; i>3] |= (1<<(i&7)); - wall[i].cstat &= ~(1<<14); - } -#endif - } - - for (i=0; i= highlightx1 && tx <= highlightx2 && - ty >= highlighty1 && ty <= highlighty2) - { - if (!sub) - { - if (sprite[i].sectnum >= 0) // don't allow to select sprites in null space - show2dsprite[i>>3] |= (1<<(i&7)); - } - else - show2dsprite[i>>3] &= ~(1<<(i&7)); - } - } - - update_highlight(); - } - } - } - } - - if (highlightcnt < 0) - { - if (keystatus[0xb8]) //Right alt (sector highlighting) - { - if (highlightsectorcnt == 0) - { - if (!eitherCTRL) - { - int32_t xx[] = { highlightx1, highlightx1, searchx, searchx, highlightx1 }; - int32_t yy[] = { highlighty1, searchy, searchy, highlighty1, highlighty1 }; - - highlightx2 = searchx; - highlighty2 = searchy; - ydim16 = ydim-STATUS2DSIZ2; - - plotlines2d(xx, yy, 5, editorcolors[10]); - } - } - else - { - int32_t didmakered = (highlightsectorcnt<0), hadouterpoint=0; - int16_t tmprefsect; - - for (i=0; i= 0) - checksectorpointer(wall[j].nextwall,wall[j].nextsector); - didmakered |= !!checksectorpointer(j, highlightsector[i]); - - if (!didmakered) - { - updatesectorexclude(wall[j].x, wall[j].y, &tmprefsect, hlsectorbitmap); - if (tmprefsect<0) - hadouterpoint = 1; - } - } - } - - if (!didmakered && !hadouterpoint && newnumwalls<0) - { - // fade the screen to have the user's attention - fade_screen(); - - didmakered |= !ask_if_sure("Insert outer loop and make red walls?", 0); - clearkeys(); - } - - if (!didmakered && !hadouterpoint && newnumwalls<0) - { - int16_t ignore, refsect; - int32_t n; - - Bmemset(visited, 0, sizeof(visited)); - - for (i=0; i= begwalltomove) - wall[m].nextwall += n; - } - for (m=refsect+1; m highlightx2) - swaplong(&highlightx1, &highlightx2); - if (highlighty1 > highlighty2) - swaplong(&highlighty1, &highlighty2); - } - - if (!setop) - Bmemset(hlsectorbitmap, 0, sizeof(hlsectorbitmap)); - - for (i=0; i highlightx2) bad = 1; - if (ty < highlighty1 || ty > highlighty2) bad = 1; - if (bad == 1) break; - } - } - - if (bad == 0) - { - if (sub) - { - hlsectorbitmap[i>>3] &= ~(1<<(i&7)); - for (j=sector[i].wallptr; j= 0) - checksectorpointer(wall[j].nextwall,wall[j].nextsector); - checksectorpointer(j, i); - } - } - else - hlsectorbitmap[i>>3] |= (1<<(i&7)); - } - } - - update_highlightsector(); - ovh_whiteoutgrab(); - -// if (highlightsectorcnt>0) -// printmessage16("Total selected sectors: %d", highlightsectorcnt); - } - } - } - - if (((bstatus&1) < (oldmousebstatus&1)) && highlightsectorcnt < 0) //after dragging - { - int32_t runi; - - if (backup_drawn_walls(0)) - goto end_after_dragging; - - j = 1; - if (highlightcnt > 0) - for (i=0; i=0; i--) //delete points - { - if (wall[i].x == POINT2(i).x && wall[i].y == POINT2(i).y - && sector[sectorofwall(i)].wallnum > 3 - && sector[sectorofwall(wall[i].point2)].wallnum > 3) - { - int32_t b = (wall[i].nextwall == -1 || - (sector[sectorofwall(wall[i].nextwall)].wallnum > 3 && - sector[sectorofwall(NEXTWALL(i).point2)].wallnum > 3)); - if (runi==0 && !b) - { - printmessage16("Invalid operation, delete or join sector instead."); - goto end_after_dragging; - } - else if (runi==1 && b) - { - deletepoint(i); - printmessage16("Point deleted."); - asksave = 1; - } - } - } - - for (i=0; i 0) //drag points - { - if (highlightsectorcnt > 0) - { - if ((bstatus&1) > (oldmousebstatus&1)) - { - newnumwalls = -1; - sectorhighlightstat = -1; - -// updatesector(mousxplc,mousyplc,&cursectorhighlight); - cursectorhighlight = -1; - for (i=0; i= 0 && cursectorhighlight < numsectors) - { -// for (i=0; i 0) - locktogrid(&dax, &day); - - sectorhighlightx = dax; - sectorhighlighty = day; -// break; - } - } - } - else if (sectorhighlightstat == 1) - { - dax = mousxplc; - day = mousyplc; - if (gridlock && grid > 0) - locktogrid(&dax, &day); - - dax -= sectorhighlightx; - day -= sectorhighlighty; - sectorhighlightx += dax; - sectorhighlighty += day; - - for (i=0; i=0; j=nextspritesect[j]) - { sprite[j].x += dax; sprite[j].y += day; } - } - - //for(i=0;i= 0) - // checksectorpointer(wall[j].nextwall,wall[j].nextsector); - // checksectorpointer((short)j,highlightsector[i]); - // } - //} - asksave = 1; - } - - } - else //if (highlightsectorcnt <= 0) - { - if ((bstatus&1) > (oldmousebstatus&1)) - pointhighlight = getpointhighlight(mousxplc, mousyplc, pointhighlight); - - if (pointhighlight >= 0 && (!m32_sideview || m32_sideelev>=32)) - { - if (m32_sideview) - { - int32_t dz; - if (pointhighlight>=16384) - dz = sprite[pointhighlight&16383].z - pos.z; - else - dz = getflorzofslope(sectorofwall(pointhighlight), - wall[pointhighlight].x, wall[pointhighlight].y) - pos.z; - getinvdisplacement(&dax,&day, -dz); - dax += mousxplc; - day += mousyplc; - } - else - { - dax = mousxplc; - day = mousyplc; - } - - if (gridlock && grid > 0) - locktogrid(&dax, &day); - - j = 1; - if (highlightcnt > 0) - for (i=0; i= numwalls && - wall[pointhighlight].x==firstx && wall[pointhighlight].y==firsty) - { - printmessage16("Can't drag point where drawing started."); - goto end_point_dragging; - } - - dragpoint(pointhighlight,dax,day); - } - else if ((pointhighlight&0xc000) == 16384) - { - int32_t daspr=pointhighlight&16383, osec=sprite[daspr].sectnum; - vec3_t vec, ovec; - - Bmemcpy(&ovec, (vec3_t *)&sprite[daspr], sizeof(vec3_t)); - vec.x = dax; - vec.y = day; - vec.z = sprite[daspr].z; - if (setsprite(daspr, &vec) == -1 && osec>=0) - Bmemcpy(&sprite[daspr], &ovec, sizeof(vec3_t)); -#if 0 - daz = spriteheight(daspr, NULL); - - for (i=0; i= getceilzofslope(i,dax,day)) - if (sprite[daspr].z-daz <= getflorzofslope(i,dax,day)) - { - sprite[daspr].x = dax; - sprite[daspr].y = day; - if (sprite[daspr].sectnum != i) - changespritesect(daspr,(int16_t)i); - break; - } -#endif - } - } - asksave = 1; - } - } - } - else //if ((bstatus&1) == 0) - { - pointhighlight = getpointhighlight(mousxplc, mousyplc, pointhighlight); - sectorhighlightstat = -1; - } -end_point_dragging: - - if (bstatus&(2|4)) // change arrow position - { - if (eitherCTRL) - { - int16_t cursectornum; - - for (cursectornum=0; cursectornum= 16384) - { - i = pointhighlight-16384; - ExtEditSpriteData((int16_t)i); - } - else if ((linehighlight >= 0) && (bstatus&1 || sectorofwall(linehighlight) == cursectornum)) - ExtEditWallData((int16_t)linehighlight); - else if (cursectornum >= 0) - ExtEditSectorData((int16_t)cursectornum); - } - - bstatus &= ~6; - } - else - { - if (m32_sideview && (bstatus&4)) - { - pos.z += divscale18(searchy-midydim16,zoom); - getpoint(searchx,midydim16, &pos.x, &pos.y); - } - else - { - pos.x = mousxplc; - pos.y = mousyplc; - } - - if (m32_sideview) - { - int32_t opat=drawlinepat; - - y1 = INT_MAX; - - for (i=0; i 0) - updatesectorz(pos.x,pos.y,pos.z,&cursectnum); - - if (circlewall != -1 && (keystatus[0x4a] || ((bstatus&32) && !eitherCTRL))) // -, mousewheel down - { - if (circlepoints > 1) - circlepoints--; - keystatus[0x4a] = 0; - mouseb &= ~32; - bstatus &= ~32; - } - if (circlewall != -1 && (keystatus[0x4e] || ((bstatus&16) && !eitherCTRL))) // +, mousewheel up - { - if (circlepoints < 63) - circlepoints++; - keystatus[0x4e] = 0; - mouseb &= ~16; - bstatus &= ~16; - } - - if (keystatus[0x3d]) // F3 - { - keystatus[0x3d]=0; - if (!m32_sideview && (newnumwalls>=0 || joinsector[0]>=0 || circlewall>=0 || (bstatus&1))) - message("Must not be editing map while switching to side view mode."); - else - { - m32_sideview = !m32_sideview; - printmessage16("Side view %s", m32_sideview?"enabled":"disabled"); - - m32_setkeyfilter(1); - } - } - - if (m32_sideview && (keystatus[0x10] || keystatus[0x11])) - { - if (eitherCTRL) - { - if (m32_sideang&63) - { - m32_sideang += (1-2*keystatus[0x10])*(1-2*sideview_reversehrot)*32; - m32_sideang &= (2047&~63); - } - else - { - m32_sideang += (1-2*keystatus[0x10])*(1-2*sideview_reversehrot)*64; - m32_sideang &= 2047; - } - - keystatus[0x10] = keystatus[0x11] = 0; - } - else - { - m32_sideang += (1-2*keystatus[0x10])*(1-2*sideview_reversehrot)*synctics<<(eitherSHIFT*2); - m32_sideang &= 2047; - } - _printmessage16("Sideview angle: %d", (int32_t)m32_sideang); - } - - if (m32_sideview && (keystatus[0x2a] || (bstatus&(16|32)))) // LShift - { - if ((DOWN_BK(MOVEUP) || (bstatus&16)) && m32_sideelev < 512) - { - m32_sideelev += synctics<<(1+!!(bstatus&16)); - if (m32_sideelev > 512) - m32_sideelev = 512; - _printmessage16("Sideview elevation: %d", m32_sideelev); - } - if ((DOWN_BK(MOVEDOWN) || (bstatus&32)) && m32_sideelev > 0) - { - m32_sideelev -= synctics<<(1+!!(bstatus&32)); - if (m32_sideelev < 0) - m32_sideelev = 0; - _printmessage16("Sideview elevation: %d", m32_sideelev); - } - } - else - { - int32_t didzoom=0; - - if ((DOWN_BK(MOVEUP) || (bstatus&16)) && zoom < 65536) - { - zoom += synctics*(zoom>>4); - if (zoom < 24) zoom += 2; - didzoom = 1; - } - if ((DOWN_BK(MOVEDOWN) || (bstatus&32)) && zoom > 8) - { - zoom -= synctics*(zoom>>4); - didzoom = 1; - } - - if (didzoom) - { - if (eitherALT) - { - searchx = halfxdim16; - searchy = midydim16; - pos.x = mousxplc; - pos.y = mousyplc; - } - zoom = clamp(zoom, 8, 65536); - _printmessage16("Zoom: %d",zoom); - } - } - - if (keystatus[0x22]) // G (grid on/off) - { - keystatus[0x22] = 0; - grid++; - if (grid == 7) grid = 0; - } - if (keystatus[0x26]) // L (grid lock) - { - keystatus[0x26] = 0; - gridlock = !gridlock; - printmessage16("Grid locking %s", gridlock?"on":"off"); - } - - if (keystatus[0x24]) // J (join sectors) - { - keystatus[0x24] = 0; - - if (newnumwalls >= 0) - { - printmessage16("Can't join sectors while editing."); - goto end_join_sectors; - } - - if (joinsector[0] < 0) - { - joinsector[0] = -1; - for (i=0; i= MAXWALLS + M32_FIXME_WALLS) - { - message("Joining sectors failed: not enough space beyond wall[]"); - joinsector[0] = -1; - newnumwalls = -1; - - for (i=0; i0 && ((wall[i].cstat & (1<<14))==0) - && (wall[i].nextsector != joinsector[1-joink])); - - wall[newnumwalls-1].point2 = m; - - if (loopnum==0) - { - printmessage16("internal error while joining sectors: infloop!"); - newnumwalls = -1; - } - } - } - - if (newnumwalls > numwalls) - { - Bmemcpy(§or[numsectors], §or[joinsector[0]], sizeof(sectortype)); - sector[numsectors].wallptr = numwalls; - sector[numsectors].wallnum = newnumwalls-numwalls; - - //fix sprites - for (i=0; i<2; i++) - { - j = headspritesect[joinsector[i]]; - while (j != -1) - { - k = nextspritesect[j]; - changespritesect(j, numsectors); - j = k; - } - } - - numsectors++; - - for (i=numwalls; i= 0) - { - NEXTWALL(i).nextwall = i; - NEXTWALL(i).nextsector = numsectors-1; - } - } - - numwalls = newnumwalls; - newnumwalls = -1; - - for (k=0; k<2; k++) - for (WALLS_OF_SECTOR(joinsector[k], j)) - wall[j].nextwall = wall[j].nextsector = -1; - - deletesector(joinsector[0]); - if (joinsector[0] < joinsector[1]) - joinsector[1]--; - deletesector(joinsector[1]); - - printmessage16("Sectors joined."); - asksave = 1; - } - - joinsector[0] = -1; - } - } -end_join_sectors: - -// PK - for (i=0x02; i<=0x0b; i++) // keys '1' to '0' on the upper row - if (keystatus[i]) - { - prefixarg = prefixtiles[i-2]; - break; - } - - if (eitherALT && keystatus[0x1f]) //ALT-S - { - keystatus[0x1f] = 0; - - if (linehighlight >= 0 && wall[linehighlight].nextwall == -1) - { - newnumwalls = whitelinescan(linehighlight); - if (newnumwalls < numwalls) - { - printmessage16("Can't make a sector out there."); - newnumwalls = -1; - } - else if (newnumwalls > MAXWALLS) - { - printmessage16("Making new sector from inner loop would exceed wall limits."); - newnumwalls = -1; - } - else - { - for (i=numwalls; i= 0) - { - dax = mousxplc; - day = mousyplc; - if (gridlock && grid > 0) - locktogrid(&dax, &day); - - i = insert_sprite_common(sucksect, dax, day); - - if (i < 0) - printmessage16("Couldn't insert sprite."); - else - { - sprite[i].z = getflorzofslope(sucksect,dax,day); -// if (sprite[i].cstat&128) -// sprite[i].z -= spriteheight(i, NULL)>>1; - -// PK - if (prefixarg) - { - sprite[i].picnum = prefixarg; - sprite[i].xrepeat = sprite[i].yrepeat = 48; - prefixarg = 0; - } - else if (somethingintab == 3) - { - sprite[i].picnum = temppicnum; - if (tilesizx[temppicnum] <= 0 || tilesizy[temppicnum] <= 0) - { - j = 0; - for (k=0; k 0 && tilesizy[k] > 0) - { - j = k; - break; - } - sprite[i].picnum = j; - } - sprite[i].shade = tempshade; - sprite[i].pal = temppal; - sprite[i].xrepeat = max(tempxrepeat, 1); - sprite[i].yrepeat = max(tempyrepeat, 1); - sprite[i].cstat = tempcstat; - } - - if (tilesizy[sprite[i].picnum] >= 32) - sprite[i].cstat |= 1; - - correct_sprite_yoffset(i); - - printmessage16("Sprite inserted."); - updatenumsprites(); - asksave = 1; - - VM_OnEvent(EVENT_INSERTSPRITE2D, i); - } - } - } - - if (keystatus[0x2e]) // C (make circle of points) - { - if (highlightsectorcnt >= 0) - duplicate_selected_sectors(); - else if (highlightcnt >= 0) - duplicate_selected_sprites(); - - else if (circlewall >= 0) - { - circlewall = -1; - } - else - { - if (linehighlight >= 0) - circlewall = linehighlight; - } - keystatus[0x2e] = 0; - } - - bad = keystatus[0x39]; //Gotta do this to save lots of 3 spaces! - - if (circlewall >= 0) - { - x1 = wall[circlewall].x; - y1 = wall[circlewall].y; - x2 = POINT2(circlewall).x; - y2 = POINT2(circlewall).y; - x3 = mousxplc; - y3 = mousyplc; - adjustmark(&x3,&y3,newnumwalls); - tempint1 = dmulscale4(x3-x2,x1-x3, y1-y3,y3-y2); - tempint2 = dmulscale4(y1-y2,x1-x3, y1-y3,x2-x1); - - if (tempint2 != 0) - { - int32_t ps = 2, goodtogo; // pointsize - - centerx = ((x1+x2) + scale(y1-y2,tempint1,tempint2))>>1; - centery = ((y1+y2) + scale(x2-x1,tempint1,tempint2))>>1; - - dax = mulscale14(centerx-pos.x,zoom); - day = mulscale14(centery-pos.y,zoom); - drawline16base(halfxdim16+dax,midydim16+day, -2,-2, +2,+2, editorcolors[14]); - drawline16base(halfxdim16+dax,midydim16+day, -2,+2, +2,-2, editorcolors[14]); - - circleang1 = getangle(x1-centerx,y1-centery); - circleang2 = getangle(x2-centerx,y2-centery); - - circleangdir = 1; - k = ((circleang2-circleang1)&2047); - if (mulscale4(x3-x1,y2-y1) < mulscale4(x2-x1,y3-y1)) - { - circleangdir = -1; - k = -((circleang1-circleang2)&2047); - } - - circlerad = ksqrt(dmulscale4(centerx-x1,centerx-x1, centery-y1,centery-y1))<<2; - goodtogo = (numwalls+circlepoints <= MAXWALLS); - - for (i=circlepoints; i>0; i--) - { - j = (circleang1 + scale(i,k,circlepoints+1))&2047; - dax = centerx + mulscale14(sintable[(j+512)&2047],circlerad); - day = centery + mulscale14(sintable[j],circlerad); - - bclamp(&dax, -editorgridextent, editorgridextent); - bclamp(&day, -editorgridextent, editorgridextent); - - if (bad > 0 && goodtogo) - { - insertpoint(circlewall,dax,day); - if (wall[circlewall].nextwall >= 0 && wall[circlewall].nextwall < circlewall) - circlewall++; - } - - dax = mulscale14(dax-pos.x,zoom); - day = mulscale14(day-pos.y,zoom); - drawline16base(halfxdim16+dax,midydim16+day, -ps,-ps, +ps,-ps, editorcolors[14]); - drawline16base(halfxdim16+dax,midydim16+day, +ps,-ps, +ps,+ps, editorcolors[14]); - drawline16base(halfxdim16+dax,midydim16+day, +ps,+ps, -ps,+ps, editorcolors[14]); - drawline16base(halfxdim16+dax,midydim16+day, -ps,+ps, -ps,-ps, editorcolors[14]); -// drawcircle16(halfxdim16+dax, midydim16+day, 3, 14); - } - - if (bad > 0) - { - bad = 0; - keystatus[0x39] = 0; - - if (goodtogo) - { - asksave = 1; - printmessage16("Circle points inserted."); - circlewall = -1; - } - else - printmessage16("Inserting circle points would exceed wall limit."); - } - } - } - - if (bad > 0) //Space bar test - { - keystatus[0x39] = 0; - adjustmark(&mousxplc,&mousyplc,newnumwalls); - - if (checkautoinsert(mousxplc,mousyplc,newnumwalls) == 1) - { - printmessage16("You must insert a point there first."); - bad = 0; - } - } - - if (bad > 0) //Space - { - if (newnumwalls < numwalls) // starting wall drawing - { - if (numwalls >= MAXWALLS-1) - { - // whatever we do, we will need at least two new walls - printmessage16("Can't start sector drawing: wall limit reached."); - goto end_space_handling; - } - - if (numsectors >= MAXSECTORS) - { - printmessage16("Can't start sector drawing: sector limit reached."); - goto end_space_handling; - } - - firstx = mousxplc; - firsty = mousyplc; //Make first point - newnumwalls = numwalls; - suckwall = -1; - split = 0; - - Bmemset(&wall[newnumwalls], 0, sizeof(walltype)); - wall[newnumwalls].extra = -1; - - wall[newnumwalls].x = mousxplc; - wall[newnumwalls].y = mousyplc; - wall[newnumwalls].nextsector = -1; - wall[newnumwalls].nextwall = -1; - - for (i=0; i=MAXWALLS) - { - printmessage16("Inserting another point would exceed wall limit."); - goto end_space_handling; - } - - j = 0; - for (i=numwalls; i>1; - day = (wall[numwalls].y+mousyplc)>>1; - - for (i=0; i=0 && (POINT2(k).x != mousxplc || POINT2(k).y != mousyplc)) - if (wall[lastwall(k)].x != mousxplc || wall[lastwall(k)].y != mousyplc) - { - split = 1; - splitsect = i; - splitstartwall = m; - break; - } - } - } - - //make new point - - //make sure not drawing over old red line - bad = 0; - for (i=0; i= 0) - { - int32_t lastwalx = wall[newnumwalls-1].x; - int32_t lastwaly = wall[newnumwalls-1].y; - - if (wall[i].x == mousxplc && wall[i].y == mousyplc) - if (POINT2(i).x == lastwalx && POINT2(i).y == lastwaly) - bad = 1; - if (wall[i].x == lastwalx && wall[i].y == lastwaly) - if (POINT2(i).x == mousxplc && POINT2(i).y == mousyplc) - bad = 1; - } - } - - if (bad == 0) - { - Bmemset(&wall[newnumwalls], 0, sizeof(walltype)); - wall[newnumwalls].extra = -1; - - wall[newnumwalls].x = mousxplc; - wall[newnumwalls].y = mousyplc; - wall[newnumwalls].nextsector = -1; - wall[newnumwalls].nextwall = -1; - - for (i=0; i= numwalls+3 - && firstx==mousxplc && firsty==mousyplc) - { - wall[newnumwalls-1].point2 = numwalls; - - if (suckwall == -1) //if no connections to other sectors - { - k = -1; - for (i=0; i= suckwall) - wall[i].nextwall += j; - if (wall[i].point2 >= suckwall) - wall[i].point2 += j; - } - - for (i=newnumwalls-1; i>=suckwall; i--) - Bmemcpy(&wall[i+j], &wall[i], sizeof(walltype)); - for (i=0; i MAXWALLS) - { - printmessage16("%s would exceed wall limit.", bad==0 ? - "Splitting sector" : "Joining sector loops"); - newnumwalls--; - break; - } - - ////////// common code for splitting/loop joining ////////// - - newnumwalls--; //first fix up the new walls - for (i=numwalls; inumwalls; j--) - { - Bmemcpy(&wall[danumwalls], &wall[j], sizeof(walltype)); - wall[danumwalls].nextwall = -1; - wall[danumwalls].nextsector = -1; - wall[danumwalls].point2 = danumwalls+1; - danumwalls++; - } - - m = splitstartwall; //copy rest of loop next - - if (doSectorSplit) - { - while (m != splitendwall) - if (copyloop1(&danumwalls, &m)) goto split_not_enough_walls; - wall[danumwalls-1].point2 = secondstartwall; - } - else - { - do - if (copyloop1(&danumwalls, &m)) goto split_not_enough_walls; - while (m != splitstartwall); - wall[danumwalls-1].point2 = numwalls; - } - - //Add other loops for 2nd sector - i = loopnum = loopnumofsector(splitsect,splitstartwall); - - for (j=startwall; j<=endwall; j++) - { - k = loopnumofsector(splitsect, j); - if (k==i) - continue; - - if (doSectorSplit && k==loopnum) - continue; - if (!doSectorSplit && (k == loopnumofsector(splitsect,splitstartwall) || k == loopnumofsector(splitsect,splitendwall))) - continue; - - i = k; - - if (doSectorSplit && (loopinside(wall[j].x,wall[j].y, secondstartwall) != 1)) - continue; - - m = j; k = danumwalls; //copy loop - do - if (copyloop1(&danumwalls, &m)) goto split_not_enough_walls; - while (m != j); - wall[danumwalls-1].point2 = k; - } - - //fix all next pointers on old sector line - for (j=numwalls; j= 0) - { - NEXTWALL(j).nextwall = j; - - if (!doSectorSplit || j < secondstartwall) - NEXTWALL(j).nextsector = numsectors; - else - NEXTWALL(j).nextsector = numsectors+1; - } - } - - if (doSectorSplit) - { - //set all next pointers on split - for (j=numwalls; j= 0) - checksectorpointer(wall[j].nextwall, wall[j].nextsector); - checksectorpointer(j, sectorofwall(j)); - } - - //k now safe to use as temp -#if 0 - if (doSectorSplit) - for (m=numsectors-2; m=0; i--) - sector[i].wallnum = sector[i+1].wallptr-sector[i].wallptr; - sector[numsectors-1].wallnum = numwalls-sector[numsectors-1].wallptr; - - for (i=0; i= 0) - { - checksectorpointer(linehighlight,sectorofwall(linehighlight)); - printmessage16("Highlighted line pointers checked."); - asksave = 1; - } - } - } - - { - static int32_t backspace_last = 0; - - if (keystatus[0x0e]) //Backspace - { - keystatus[0x0e] = 0; - - if (newnumwalls >= numwalls) - { - backspace_last = 1; - - if (newnumwalls == numwalls+1 || keystatus[0x1d]) // LCtrl: delete all newly drawn walls - newnumwalls = -1; - else - newnumwalls--; - } - else if (backspace_last==0) - { - graphicsmode += (1-2*(DOWN_BK(RUN) || keystatus[0x36]))+3; - graphicsmode %= 3; - printmessage16("2D mode textures %s", - (graphicsmode == 2)?"enabled w/ animation":graphicsmode?"enabled":"disabled"); - } - } - else - backspace_last = 0; - } - - if (keystatus[0xd3] && eitherCTRL && numwalls > 0) //sector delete - { - keystatus[0xd3] = 0; - - sucksect = -1; - for (i=0; i= 0) - for (j=0; j=0; j--) - { - deletesector(highlightsector[j]); - for (k=j-1; k>=0; k--) - if (highlightsector[k] >= highlightsector[j]) - highlightsector[k]--; - } - - printmessage16("Highlighted sectors deleted."); - k = 1; - break; - } - - if (k == 0) - { - deletesector(i); - printmessage16("Sector deleted."); - } - - Bmemset(hlsectorbitmap, 0, sizeof(hlsectorbitmap)); - highlightsectorcnt = -1; - - Bmemset(show2dwall, 0, sizeof(show2dwall)); - update_highlight(); - - newnumwalls = -1; - asksave = 1; - - break; - } - } - - if (keystatus[0xd3] && (pointhighlight >= 0)) - { - if ((pointhighlight&0xc000) == 16384) //Sprite Delete - { - deletesprite(pointhighlight&16383); - printmessage16("Sprite deleted."); - updatenumsprites(); - update_highlight(); - asksave = 1; - } - keystatus[0xd3] = 0; - } - - if (keystatus[0xd2] || keystatus[0x17]) //InsertPoint - { - if (highlightsectorcnt >= 0) - duplicate_selected_sectors(); - else if (highlightcnt >= 0) - duplicate_selected_sprites(); - else if (linehighlight >= 0) - { - int32_t onewnumwalls = newnumwalls; - int32_t wallis2sided = (wall[linehighlight].nextwall>=0); - - if (backup_drawn_walls(0)) - { - message("OUT OF MEMORY!"); - } - else if (max(numwalls,onewnumwalls) >= MAXWALLS-wallis2sided) - { - printmessage16("Inserting point would exceed wall limit."); - } - else - { - getclosestpointonwall(mousxplc,mousyplc, linehighlight, &dax,&day); - adjustmark(&dax,&day, newnumwalls); - insertpoint(linehighlight, dax,day); - printmessage16("Point inserted."); - - j = 0; - //Check to see if point was inserted over another point - for (i=numwalls-1; i>=0; i--) //delete points - if (wall[i].x == POINT2(i).x && wall[i].y == POINT2(i).y) - { - deletepoint(i); - j++; - } - for (i=0; i>1); - // day = ((wall[linehighlight].y + POINT2(linehighlight).y)>>1); - // if ((dax != wall[linehighlight].x) || (day != wall[linehighlight].y)) - // if ((dax != POINT2(linehighlight).x) || (day != POINT2(linehighlight).y)) - // { - // insertpoint(linehighlight,dax,day); - // printmessage16("Point inserted at midpoint."); - // } - //} - } - - backup_drawn_walls(1); - - asksave = 1; - } - keystatus[0xd2] = keystatus[0x17] = 0; - } - - /*j = 0; - for(i=22-1;i>=0;i--) updatecrc16(j,kensig[i]); - if ((j&0xffff) != 0xebf) - { - printf("Don't screw with my name.\n"); - exit(0); - }*/ - //printext16(9L,336+9L,4,-1,kensig,0); - //printext16(8L,336+8L,12,-1,kensig,0); - - showframe(1); - synctics = totalclock-lockclock; - lockclock += synctics; - - if (keystatus[buildkeys[BK_MODE2D_3D]]) - { - updatesector(pos.x,pos.y,&cursectnum); - if (cursectnum >= 0) - keystatus[buildkeys[BK_MODE2D_3D]] = 2; - else - printmessage16("Arrow must be inside a sector before entering 3D mode."); - } - -// vvv PK ------------------------------------ (LShift) Ctrl-X: (prev) next map -// this is copied from 'L' (load map), but without copying the highlighted sectors - - if (quickmapcycling && keystatus[0x2d]) //X - { - if (eitherCTRL) //Ctrl - { -nextmap: -// bad = 0; - i = menuselect_auto(keystatus[0x2a] ? 0:1); // Left Shift: prev map - if (i < 0) - { - if (i == -1) - message("No more map files."); - else if (i == -2) - message("No .MAP files found."); - else if (i == -3) - message("Load map first!"); - } - else - { - if (LoadBoard(NULL, 4)) - goto nextmap; - - sectorhighlightstat = -1; - joinsector[0] = -1; - circlewall = -1; - circlepoints = 7; - oposz = pos.z; - } - showframe(1); - keystatus[0x1c] = 0; - - keystatus[0x2d]=keystatus[0x13]=0; - - } - } -// ^^^ PK ------------------------------------ - - if (keystatus[1] && joinsector[0] >= 0) - { - keystatus[1]=0; - joinsector[0]=-1; - printmessage16("No sectors joined."); - } - -CANCEL: - if (keystatus[1]) - { - m32_setkeyfilter(0); - - keystatus[1] = 0; - _printmessage16("(N)ew, (L)oad, (S)ave, save (A)s, (T)est map, (U)ndo, (R)edo, (Q)uit"); - showframe(1); - bflushchars(); - bad = 1; - while (bad == 1) - { - if (handleevents()) - { - if (quitevent) - quitevent = 0; - } - idle(); - - ch = bgetchar(); - - if (keystatus[1]) - { - keystatus[1] = 0; - bad = 0; - // printmessage16(""); - } - else if (ch == 'n' || ch == 'N') //N - { - bad = 0; - - if (!ask_if_sure("Are you sure you want to start a new board? (Y/N)", 0)) - break; - else - { - int32_t bakstat=-1; - mapinfofull_t bakmap; - - if (highlightsectorcnt > 0) - bakstat = backup_highlighted_map(&bakmap); - -// Bmemset(hlsectorbitmap, 0, sizeof(hlsectorbitmap)); -// highlightsectorcnt = -1; - - highlightcnt = -1; - //Clear all highlights - Bmemset(show2dwall, 0, sizeof(show2dwall)); - Bmemset(show2dsprite, 0, sizeof(show2dsprite)); - - for (i=0; i 0) - bakstat = backup_highlighted_map(&bakmap); -// __old_mapcopy_2__ - if (LoadBoard(NULL, 4)) - { - printmessage16("Invalid map format."); - if (bakstat==0) - mapinfofull_free(&bakmap); - } - else - { - sectorhighlightstat = -1; - joinsector[0] = -1; - circlewall = -1; - circlepoints = 7; - oposz = pos.z; - - if (bakstat==0) - { - bakstat = restore_highlighted_map(&bakmap); - if (bakstat == -1) - message("Can't copy highlighted portion of old map: limits exceeded."); - } - } - } - showframe(1); - keystatus[0x1c] = 0; - } - else if (ch == 'a' || ch == 'A') //A - { - int32_t corrupt = CheckMapCorruption(4, 0); - - bad = 0; - - Bstrcpy(selectedboardfilename, boardfilename); - if (Bstrrchr(boardfilename, '/')) - Bstrcpy(boardfilename, Bstrrchr(boardfilename, '/')+1); - - i = 0; - while ((boardfilename[i] != 0) && (i < 64)) - i++; - if (boardfilename[i-4] == '.') - i -= 4; - boardfilename[i] = 0; - - bflushchars(); - while (bad == 0) - { - _printmessage16("%sSave as: ^011%s%s", corrupt>=4?"(map corrupt) ":"", - boardfilename, (totalclock&32)?"_":""); - showframe(1); - - if (handleevents()) - quitevent = 0; - - idle(); - - ch = bgetchar(); - - if (keystatus[1]) bad = 1; - else if (ch == 13) bad = 2; - else if (ch > 0) - { - if (i > 0 && (ch == 8 || ch == 127)) - { - i--; - boardfilename[i] = 0; - } - else if (i < 40 && ch > 32 && ch < 128) - { - boardfilename[i++] = ch; - boardfilename[i] = 0; - } - } - } - - if (bad == 1) - { - Bstrcpy(boardfilename, selectedboardfilename); - keystatus[1] = 0; - printmessage16("Operation cancelled"); - showframe(1); - } - else if (bad == 2) - { - const char *f; - char *slash; - - keystatus[0x1c] = 0; - - boardfilename[i] = '.'; - boardfilename[i+1] = 'm'; - boardfilename[i+2] = 'a'; - boardfilename[i+3] = 'p'; - boardfilename[i+4] = 0; - - slash = Bstrrchr(selectedboardfilename,'/'); - Bstrcpy(slash ? slash+1 : selectedboardfilename, boardfilename); - - _printmessage16("Saving board..."); - showframe(1); - - f = SaveBoard(selectedboardfilename, 0); - - if (f) - printmessage16("Saved board to %s.", f); - else - printmessage16("Saving board failed."); - - Bstrcpy(boardfilename, selectedboardfilename); - } - bad = 0; - } - else if (ch == 's' || ch == 'S') //S - { - const char *f; - - bad = 0; - - if (CheckMapCorruption(4, 0)>=4) - if (!ask_if_sure("Map is corrupt. Are you sure you want to save?", 0)) - break; - - _printmessage16("Saving board..."); - showframe(1); - - f = SaveBoard(NULL, 0); - - if (f) - printmessage16("Saved board to %s.", f); - else - printmessage16("Saving board failed."); - - showframe(1); - } - else if (ch == 't' || ch == 'T') - { - test_map(0); - } - else if (ch == 'u' || ch == 'U') - { - bad = 0; - if (map_undoredo(0)) printmessage16("Nothing to undo!"); - else printmessage16("Revision %d undone",map_revision); - } - else if (ch == 'r' || ch == 'R') - { - bad = 0; - if (map_undoredo(1)) printmessage16("Nothing to redo!"); - else printmessage16("Restored revision %d",map_revision-1); - } - else if (ch == 'q' || ch == 'Q') //Q - { - bad = 0; - - if (ask_if_sure("Are you sure you want to quit?", 0)) - { - //QUIT! - - int32_t corrupt = CheckMapCorruption(4, 0); - - if (ask_if_sure(corrupt<4?"Save changes?":"Map corrupt. Save changes?", 2+(corrupt>=4))) - SaveBoard(NULL, 0); - - while (keystatus[1] || keystatus[0x2e]) - { - keystatus[1] = 0; - keystatus[0x2e] = 0; - quitevent = 0; - printmessage16("Operation cancelled"); - showframe(1); - goto CANCEL; - } - - ExtUnInit(); - clearfilenames(); - uninittimer(); - uninitinput(); - uninitengine(); - exit(0); - } - - // printmessage16(""); - showframe(1); - } - } - - clearkeys(); - - m32_setkeyfilter(1); - } - - VM_OnEvent(EVENT_KEYS2D, -1); - - //nextpage(); - } - - for (i=0; i= 0) - checksectorpointer(wall[j].nextwall, wall[j].nextsector); - checksectorpointer(j, highlightsector[i]); - } - } - - fixspritesectors(); - - if (setgamemode(fullscreen,xdimgame,ydimgame,bppgame) < 0) - { - initprintf("%d * %d not supported in this graphics mode\n",xdim,ydim); - ExtUnInit(); - uninitinput(); - uninittimer(); - uninitsystem(); - clearfilenames(); - exit(1); - } - - setbrightness(GAMMA_CALC,0,0); - - pos.z = oposz; - - searchx = clamp(scale(searchx,xdimgame,xdim2d), 8, xdimgame-8-1); - searchy = clamp(scale(searchy,ydimgame,ydim2d-STATUS2DSIZ), 8, ydimgame-8-1); - - m32_setkeyfilter(0); - - VM_OnEvent(EVENT_ENTER3DMODE, -1); -} - -// flags: -// 1: quit_is_yes -// 2: don't clear keys on return -static int32_t ask_if_sure(const char *query, uint32_t flags) -{ - char ch; - int32_t ret=-1; - - if (!query) - _printmessage16("Are you sure?"); - else - _printmessage16("%s", query); - showframe(1); - bflushchars(); - - while ((keystatus[1]|keystatus[0x2e]) == 0 && ret==-1) - { - if (handleevents()) - { - if (quitevent) - { - if (flags&1) - return 1; - else - quitevent = 0; - } - } - idle(); - - ch = bgetchar(); - - if (ch == 'y' || ch == 'Y') - ret = 1; - else if (ch == 'n' || ch == 'N' || ch == 13 || ch == ' ') - ret = 0; - } - - if ((flags&2)==0) - clearkeys(); - - if (ret >= 0) - return ret; - - return 0; -} - -static int32_t ask_above_or_below() -{ - char ch; - int32_t ret=-1; - - _printmessage16("Extend above (a) or below (z)?"); - - showframe(1); - bflushchars(); - - while ((keystatus[1]|keystatus[0x2e]) == 0 && ret==-1) - { - if (handleevents()) - quitevent = 0; - - idle(); - ch = bgetchar(); - - if (ch == 'a' || ch == 'A') - ret = 0; - else if (ch == 'z' || ch == 'Z') - ret = 1; - } - - clearkeys(); - - return ret; -} - -// flags: 1:no ExSaveMap (backup.map) -const char *SaveBoard(const char *fn, uint32_t flags) -{ - const char *f; - int32_t ret; - - if (!fn) - fn = boardfilename; - - if (pathsearchmode) - f = fn; - else - { - // virtual filesystem mode can't save to directories so drop the file into - // the current directory - f = Bstrrchr(fn, '/'); - if (!f) - f = fn; - else - f++; - } - - fixspritesectors(); //Do this before saving! - updatesector(startposx,startposy,&startsectnum); - ExtPreSaveMap(); - ret = saveboard(f,&startposx,&startposy,&startposz,&startang,&startsectnum); - if ((flags&1)==0) - ExtSaveMap(f); - - if (!ret) - return f; - else - return NULL; -} - -// flags: 1: for running on Mapster32 init -// 4: passed to loadboard flags (no polymer_loadboard); implies no maphack loading -int32_t LoadBoard(const char *filename, uint32_t flags) -{ - int32_t i; - - if (!filename) - filename = selectedboardfilename; - - if (filename != boardfilename) - Bstrcpy(boardfilename, filename); - - if ((flags&1)==0) - { - highlightcnt = -1; - Bmemset(show2dwall, 0, sizeof(show2dwall)); //Clear all highlights - Bmemset(show2dsprite, 0, sizeof(show2dsprite)); - - newnumwalls = -1; - } - -/// sectorhighlightstat = -1; -/// joinsector[0] = -1; -/// circlewall = -1; -/// circlepoints = 7; - - for (i=0; i=0 && wall[closest].nextwall >= 0) - { - //if red line, allow highlighting of both sides - x1 = wall[closest].x; - y1 = wall[closest].y; - x2 = POINT2(closest).x; - y2 = POINT2(closest).y; - if (dmulscale32(xplc-x1,y2-y1,-(x2-x1),yplc-y1) >= 0) - closest = wall[closest].nextwall; - } - - return(closest); -} - -int32_t getpointhighlight(int32_t xplc, int32_t yplc, int32_t point) -{ - int32_t i, j, dst, dist = 512, closest = -1; - int32_t dax,day; - - if (numwalls == 0) - return(-1); - - if (mouseb & 1) - return point; - - if (grid < 1) - dist = 0; - - for (i=0; i= xdim || midydim16+day < 0 || midydim16+day >= ydim) - continue; - - dst = klabs(halfxdim16+dax-searchx) + klabs(midydim16+day-searchy); - } - - if (dst <= dist) - { - // prefer white walls - if (dst=0)-(wall[closest].nextwall>=0) <= 0) - dist = dst, closest = j; - } - } - - if (zoom >= 256) - for (i=0; i= xdim || midydim16+day < 0 || midydim16+day >= ydim) - continue; - - dst = klabs(halfxdim16+dax-searchx) + klabs(midydim16+day-searchy); - } - - // was (dst <= dist), but this way, when duplicating sprites, - // the selected ones are dragged first - if (dst < dist || (dst == dist && (show2dsprite[i>>3]&(1<<(i&7))))) - dist = dst, closest = i+16384; - } - - return(closest); -} - -static void locktogrid(int32_t *dax, int32_t *day) -{ - *dax = ((*dax+(1024>>grid))&(0xffffffff<<(11-grid))); - *day = ((*day+(1024>>grid))&(0xffffffff<<(11-grid))); -} - -static int32_t adjustmark(int32_t *xplc, int32_t *yplc, int16_t danumwalls) -{ - int32_t i, dst, dist, dax, day, pointlockdist; - - if (danumwalls < 0) - danumwalls = numwalls; - - pointlockdist = 0; - if (grid > 0 && gridlock) - pointlockdist = (128>>grid); - - dist = pointlockdist; - dax = *xplc; - day = *yplc; - - for (i=0; i 0) - locktogrid(&dax, &day); - - *xplc = dax; - *yplc = day; - - return(0); -} - -static int32_t checkautoinsert(int32_t dax, int32_t day, int16_t danumwalls) -{ - int32_t i, x1, y1, x2, y2; - - if (danumwalls < 0) - danumwalls = numwalls; - - for (i=0; i= y2 && y1 <= y0) return(0); - if (y1 >= y0 && y1 <= y2) return(1); - - tempint = (x0-x1)*(y2-y1) - (x2-x1)*(y0-y1); - if (tempint < 0) - return(0); - else - return(1); -} - -static void flipwalls(int16_t numwalls, int16_t newnumwalls) -{ - int32_t i, j, nume, tempint; - - nume = newnumwalls-numwalls; - - for (i=numwalls; i>1); i++) - { - j = numwalls+newnumwalls-i-1; - tempint = wall[i].x; wall[i].x = wall[j].x; wall[j].x = tempint; - tempint = wall[i].y; wall[i].y = wall[j].y; wall[j].y = tempint; - } -} - -static void insertpoint(int16_t linehighlight, int32_t dax, int32_t day) -{ - int16_t sucksect; - int32_t i, j, k; - uint32_t templenrepquot; - - j = linehighlight; - sucksect = sectorofwall(j); - templenrepquot = divscale12(wallength(j), wall[j].xrepeat); - templenrepquot = max(1, templenrepquot); - - sector[sucksect].wallnum++; - for (i=sucksect+1; i= 0) - { - k = wall[j].nextwall; - - sucksect = sectorofwall(k); - - sector[sucksect].wallnum++; - for (i=sucksect+1; i= 0) - { - NEXTWALL(j).nextwall = -1; - NEXTWALL(j).nextsector = -1; - } - if (wall[point].nextwall >= 0) - { - NEXTWALL(point).nextwall = -1; - NEXTWALL(point).nextsector = -1; - } - - movewalls(point, -1); - - checksectorpointer(j, sucksect); -} - -static int32_t deletesector(int16_t sucksect) -{ - int32_t i, j, k, nextk, startwall, endwall; - - while (headspritesect[sucksect] >= 0) - deletesprite(headspritesect[sucksect]); - updatenumsprites(); - - startwall = sector[sucksect].wallptr; - endwall = startwall + sector[sucksect].wallnum - 1; - j = sector[sucksect].wallnum; - - for (i=sucksect; i= 0) - { - NEXTWALL(i).nextwall = -1; - NEXTWALL(i).nextsector = -1; - } - - movewalls(startwall, -j); - for (i=0; i= startwall) - wall[i].nextsector--; - - return(0); -} - -void fixspritesectors(void) -{ - int32_t i, j, dax, day, daz; - - for (i=numsectors-1; i>=0; i--) - if (sector[i].wallnum <= 0 || sector[i].wallptr >= numwalls) - deletesector(i); - - for (i=0; i= getceilzofslope(j,dax,day) - && sprite[i].z-daz <= getflorzofslope(j,dax,day)) - { - changespritesect(i, j); - break; - } - } - } -} - -static int32_t movewalls(int32_t start, int32_t offs) -{ - int32_t i; - - if (offs < 0) //Delete - { - for (i=start; i 0) //Insert - { - for (i=numwalls+offs-1; i>=start+offs; i--) - Bmemcpy(&wall[i], &wall[i-offs], sizeof(walltype)); - } - - numwalls += offs; - for (i=0; i= start) wall[i].nextwall += offs; - if (wall[i].point2 >= start) wall[i].point2 += offs; - } - - return(0); -} - -int32_t wallength(int16_t i) -{ - int64_t dax = POINT2(i).x - wall[i].x; - int64_t day = POINT2(i).y - wall[i].y; -#if 1 //def POLYMOST - int64_t hypsq = dax*dax + day*day; - if (hypsq > (int64_t)INT_MAX) - return (int32_t)sqrt((double)hypsq); - else - return ksqrt((int32_t)hypsq); -#else - return ksqrt(dax*dax + day*day); -#endif -} - -void fixrepeats(int16_t i) -{ - int32_t dist = wallength(i); - int32_t day = wall[i].yrepeat; - - wall[i].xrepeat = clamp(mulscale10(dist,day), 1, 255); -} - -void fixxrepeat(int16_t i, uint32_t lenrepquot) // lenrepquot: divscale12(wallength,xrepeat) -{ - if (lenrepquot != 0) - wall[i].xrepeat = clamp(divscale12(wallength(i), lenrepquot), 1, 255); -} - - -int32_t overridepm16y = -1; - -void clearmidstatbar16(void) -{ - int32_t y = overridepm16y<0 ? STATUS2DSIZ : overridepm16y; - - begindrawing(); -// ydim16 = ydim; - - // clearbuf((char *)(frameplace + (bytesperline*(ydim-STATUS2DSIZ+25L))),(bytesperline*(STATUS2DSIZ-1-(25<<1))) >> 2, 0x08080808l); - - CLEARLINES2D(ydim-y+25, STATUS2DSIZ+2-(25<<1), 0); - -// drawline16(0,ydim-STATUS2DSIZ,0,ydim-1,editorcolors[7]); -// drawline16base(xdim,ydim, -1,-STATUS2DSIZ, -1,-1, editorcolors[7]); - - ydim16 = ydim-STATUS2DSIZ2; - enddrawing(); -} - -static void clearministatbar16(void) -{ - int32_t i, col = whitecol - 21; -// static const char *tempbuf = "Mapster32" " " VERSION; - char tempbuf[16]; - - begindrawing(); - - for (i=ydim-STATUS2DSIZ2; i= x || x2 >= x) - { - y1 = wall[i].y; - y2 = POINT2(i).y; - - if (y1 > y2) - { - swaplong(&x1, &x2); - swaplong(&y1, &y2); - } - if (y1 <= y && y2 > y) - if (x1*(y-y2)+x2*(y1-y) <= x*(y1-y2)) - cnt ^= 1; - } - i = wall[i].point2; - } - while (i != startwall); - - return(cnt); -} - -#if 0 -static int32_t numloopsofsector(int16_t sectnum) -{ - int32_t i, numloops, startwall, endwall; - - numloops = 0; - startwall = sector[sectnum].wallptr; - endwall = startwall + sector[sectnum].wallnum; - for (i=startwall; i= '0' && ch <= '9') - { - int64_t nbig; - if (danum >= 0) - { - nbig = ((int64_t)danum*10)+(ch-'0'); - if (nbig <= (int64_t)maxnumber) danum = nbig; - } - else if (sign) // this extra check isn't hurting anything - { - nbig = ((int64_t)danum*10)-(ch-'0'); - if (nbig >= (int64_t)-maxnumber) danum = nbig; - } - } - else if (ch == 8 || ch == 127) // backspace - { - danum /= 10; - } - else if (ch == 13) - { - oldnum = danum; - asksave = 1; - printmessage16("%s", buffer); - break; - } - else if (ch == '-' && sign) // negate - { - danum = -danum; - } - } - clearkeys(); - return(oldnum); -} - -int32_t _getnumber256(const char *namestart, int32_t num, int32_t maxnumber, char sign, void *(func)(int32_t)) -{ - char buffer[80], ch; - int32_t danum, oldnum; - - danum = num; - oldnum = danum; - bflushchars(); - while (keystatus[0x1] == 0) - { - if (handleevents()) - quitevent = 0; - - drawrooms(pos.x,pos.y,pos.z,ang,horiz,cursectnum); - ExtAnalyzeSprites(); - drawmasks(); - -#ifdef POLYMER - if (rendmode == 4 && searchit == 2) - { - polymer_editorpick(); - drawrooms(pos.x,pos.y,pos.z,ang,horiz,cursectnum); - ExtAnalyzeSprites(); - drawmasks(); - } -#endif - - ch = bgetchar(); - - if (keystatus[0x1]) break; - - clearkeys(); - - mouseb = 0; - searchx = osearchx; - searchy = osearchy; - - ExtCheckKeys(); - - Bsprintf(buffer,"%s%d",namestart,danum); - if (totalclock & 32) Bstrcat(buffer,"_ "); - printmessage256(0, 0, buffer); - if (func != NULL) - { - Bsprintf(buffer,"%s",(char *)func((int32_t)danum)); - printmessage256(0, 9, buffer); - } - - showframe(1); - - if (ch >= '0' && ch <= '9') - { - int64_t nbig; - if (danum >= 0) - { - nbig = ((int64_t)danum*10)+(ch-'0'); - if (nbig <= (int64_t)maxnumber) danum = nbig; - } - else if (sign) - { - nbig = ((int64_t)danum*10)-(ch-'0'); - if (nbig >= (int64_t)-maxnumber) danum = nbig; - } - } - else if (ch == 8 || ch == 127) // backspace - { - danum /= 10; - } - else if (ch == 13) - { - oldnum = danum; - asksave = 1; - break; - } - else if (ch == '-' && sign) // negate - { - danum = -danum; - } - } - clearkeys(); - - lockclock = totalclock; //Reset timing - - return(oldnum); -} - -// querystr: e.g. "Name: ", must be !=NULL -// defaultstr: can be NULL -// NO overflow checks are done when copying them! -// maxlen: maximum length of entry string, if ==1, enter single char -const char *getstring_simple(const char *querystr, const char *defaultstr, int32_t maxlen) -{ - static char buf[128]; - int32_t ei=0, qrylen=0; - char ch; - - bflushchars(); - clearkeys(); - - if (maxlen==0) - maxlen = 1000; - - Bmemset(buf, 0, sizeof(buf)); - - qrylen = Bstrlen(querystr); - Bmemcpy(buf, querystr, qrylen); - - ei = qrylen; - - if (defaultstr) - { - int32_t deflen = Bstrlen(defaultstr); - Bmemcpy(&buf[ei], defaultstr, deflen); - ei += deflen; - } - - buf[ei] = 0; - - if (maxlen==1) - { - ei = qrylen; - buf[ei] = '_'; - buf[ei+1] = 0; - } - - while (1) - { - printext256(0, 0, whitecol, 0, buf, 0); - showframe(1); - - if (handleevents()) - quitevent = 0; - - idle_waitevent(); - - ch = bgetchar(); - - if (ch==13) - { - if (maxlen != 1) - buf[ei] = 0; - break; - } - else if (keystatus[1]) - { - clearkeys(); - return defaultstr; - } - - if (maxlen!=1) - { - if (ei>qrylen && (ch==8 || ch==127)) - { - buf[ei] = ' '; - buf[--ei] = '_'; - } - else if ((unsigned)einext) numdirs++; - for (r = findfiles; r; r=r->next) numfiles++; - - finddirshigh = finddirs; - findfileshigh = findfiles; - currentlist = 0; - if (findfileshigh) currentlist = 1; - - return(0); -} - -// vvv PK ------------------------------------ -// copied off menuselect - -static const char *g_oldpath=NULL; -static int32_t menuselect_auto(int32_t direction) // 20080104: jump to next (direction!=0) or prev (direction==0) file -{ - const char *boardbasename; - - if (!g_oldpath) - return -3; // not inited - else - Bmemcpy(selectedboardfilename, g_oldpath, BMAX_PATH); - - if (pathsearchmode) - Bcanonicalisefilename(selectedboardfilename, 1); // clips off the last token and compresses relative path - else - Bcorrectfilename(selectedboardfilename, 1); - - getfilenames(selectedboardfilename, "*.map"); - if (numfiles==0) - return -2; - - boardbasename = Bstrrchr(boardfilename,'/'); // PK - if (!boardbasename) - boardbasename=boardfilename; - else - boardbasename++; - - for (; findfileshigh; findfileshigh=findfileshigh->next) - if (!Bstrcmp(findfileshigh->name,boardbasename)) - break; - - if (!findfileshigh) - findfileshigh=findfiles; - - if (direction) - { - if (findfileshigh->next) - findfileshigh=findfileshigh->next; - else - return -1; - } - else - { - if (findfileshigh->prev) - findfileshigh=findfileshigh->prev; - else - return -1; - } - - Bstrcat(selectedboardfilename, findfileshigh->name); - - return(0); -} -// ^^^ PK ------------------------------------ - -static int32_t menuselect(void) -{ - int32_t listsize; - int32_t i; - char ch, buffer[96], /*PK*/ *boardbasename; - static char oldpath[BMAX_PATH]; - CACHE1D_FIND_REC *dir; - int32_t bakpathsearchmode = pathsearchmode; - - g_oldpath=oldpath; //PK: need it in menuselect_auto - - Bstrcpy(selectedboardfilename, oldpath); - if (pathsearchmode) - Bcanonicalisefilename(selectedboardfilename, 1); // clips off the last token and compresses relative path - else - Bcorrectfilename(selectedboardfilename, 1); - - getfilenames(selectedboardfilename, "*.map"); - - // PK 20080103: start with last selected map - boardbasename = Bstrrchr(boardfilename,'/'); - if (!boardbasename) - boardbasename=boardfilename; - else - boardbasename++; - - for (; findfileshigh; findfileshigh=findfileshigh->next) - if (!Bstrcmp(findfileshigh->name,boardbasename)) - break; - - if (!findfileshigh) - findfileshigh=findfiles; - - _printmessage16("Select map file with arrow keys and enter."); - - ydim16 = ydim-STATUS2DSIZ2; - listsize = (ydim16-32)/9; - - do - { - begindrawing(); //{{{ - - CLEARLINES2D(0, ydim16, 0); - - if (pathsearchmode) - Bstrcpy(buffer,"Local filesystem mode. Ctrl-F: game filesystem"); - else - Bsprintf(buffer,"Game filesystem %smode. Ctrl-F: local filesystem, Ctrl-G: %s", - grponlymode?"GRP-only ":"", grponlymode?"all files":"GRP contents only"); - - printext16(halfxdim16-(8*Bstrlen(buffer)/2), 4, editorcolors[12],editorcolors[0],buffer,0); - - Bsnprintf(buffer,sizeof(buffer)-1,"(%d dirs, %d files) %s",numdirs,numfiles,selectedboardfilename); - buffer[sizeof(buffer)-1] = 0; - - printext16(8,ydim16-8-1,editorcolors[8],editorcolors[0],buffer,0); - - if (finddirshigh) - { - dir = finddirshigh; - for (i=(listsize/2)-1; i>=0; i--) - { - if (!dir->prev) break; - else dir=dir->prev; - } - for (i=0; ((inext) - { - int32_t c = (dir->type == CACHE1D_FIND_DIR ? 2 : 3); //PK - Bmemset(buffer,0,sizeof(buffer)); - Bstrncpy(buffer,dir->name,25); - if (Bstrlen(buffer) == 25) - buffer[21] = buffer[22] = buffer[23] = '.', buffer[24] = 0; - if (dir == finddirshigh) - { - if (currentlist == 0) printext16(8,16+9*i,editorcolors[c|8],editorcolors[0],"->",0); - printext16(32,16+9*i,editorcolors[c|8],editorcolors[0],buffer,0); - } - else - { - printext16(32,16+9*i,editorcolors[c],editorcolors[0],buffer,0); - } - } - } - - if (findfileshigh) - { - dir = findfileshigh; - for (i=(listsize/2)-1; i>=0; i--) - { - if (!dir->prev) break; - else dir=dir->prev; - } - for (i=0; ((inext) - { - if (dir == findfileshigh) - { - if (currentlist == 1) printext16(240,16+9*i,editorcolors[7|8],editorcolors[0],"->",0); - printext16(240+24,16+9*i,editorcolors[7|8],editorcolors[0],dir->name,0); - } - else - { - printext16(240+24,16+9*i,editorcolors[7],editorcolors[0],dir->name,0); - } - } - } - - enddrawing(); //}}} - showframe(1); - - keystatus[0xcb] = 0; - keystatus[0xcd] = 0; - keystatus[0xc8] = 0; - keystatus[0xd0] = 0; - keystatus[0x1c] = 0; //enter - keystatus[0xf] = 0; //tab - keystatus[1] = 0; //esc - ch = 0; //Interesting fakery of ch = getch() - while (ch == 0) - { - if (handleevents()) - if (quitevent) - { - keystatus[1] = 1; - quitevent = 0; - } - - idle(); - - ch = bgetchar(); - - { - // JBF 20040208: seek to first name matching pressed character - CACHE1D_FIND_REC *seeker = currentlist ? findfiles : finddirs; - if (keystatus[0xc7]||keystatus[0xcf]) // home/end - { - while (keystatus[0xcf]?seeker->next:seeker->prev) - seeker = keystatus[0xcf]?seeker->next:seeker->prev; - if (seeker) - { - if (currentlist) findfileshigh = seeker; - else finddirshigh = seeker; - } - ch = keystatus[0xcf]?80:72; - keystatus[0xc7] = keystatus[0xcf] = 0; - } - else if (keystatus[0xc9]|keystatus[0xd1]) // page up/down - { - seeker = currentlist?findfileshigh:finddirshigh; - i = (ydim2d-STATUS2DSIZ2-48)>>5/*3*/; //PK - - while (i>0) - { - if (keystatus[0xd1]?seeker->next:seeker->prev) - seeker = keystatus[0xd1]?seeker->next:seeker->prev; - i--; - } - if (seeker) - { - if (currentlist) findfileshigh = seeker; - else finddirshigh = seeker; - } - ch = keystatus[0xd1]?80:72; - keystatus[0xc9] = keystatus[0xd1] = 0; - } - else - { - char ch2; - if (ch > 0 && ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || - (ch >= '0' && ch <= '9') || (ch=='_'))) - { -#ifdef _WIN32 - if (ch >= 'a') ch -= ('a'-'A'); -#endif - while (seeker) - { - ch2 = seeker->name[0]; -#ifdef _WIN32 - if (ch2 >= 'a' && ch2 <= 'z') ch2 -= ('a'-'A'); -#endif - if (ch2 == ch) break; - seeker = seeker->next; - } - if (seeker) - { - if (currentlist) findfileshigh = seeker; - else finddirshigh = seeker; - continue; - } - } - } - } - if (keystatus[0xcb]) ch = 9; // left arr - if (keystatus[0xcd]) ch = 9; // right arr - if (keystatus[0xc8]) ch = 72; // up arr - if (keystatus[0xd0]) ch = 80; // down arr - } - - if (ch==6) // Ctrl-F - { - currentlist = 0; - pathsearchmode = 1-pathsearchmode; - if (pathsearchmode) - { - Bstrcpy(selectedboardfilename, ""); - Bcanonicalisefilename(selectedboardfilename, 0); - } - else Bstrcpy(selectedboardfilename, "/"); - - getfilenames(selectedboardfilename, "*.map"); - Bstrcpy(oldpath,selectedboardfilename); - } - else if (ch==7) // Ctrl-G - { - if (!pathsearchmode) - { - grponlymode = 1-grponlymode; - getfilenames(selectedboardfilename, "*.map"); - Bstrcpy(oldpath,selectedboardfilename); - } - } - else if (ch == 9) - { - if ((currentlist == 0 && findfiles) || (currentlist == 1 && finddirs)) - currentlist = 1-currentlist; - } - else if (keystatus[0xc8] /*(ch == 75) || (ch == 72)*/) - { - if (currentlist == 0) - { - if (finddirshigh && finddirshigh->prev) - finddirshigh = finddirshigh->prev; - } - else - { - if (findfileshigh && findfileshigh->prev) - findfileshigh = findfileshigh->prev; - } - } - else if (keystatus[0xd0] /*(ch == 77) || (ch == 80)*/) - { - if (currentlist == 0) - { - if (finddirshigh && finddirshigh->next) - finddirshigh = finddirshigh->next; - } - else - { - if (findfileshigh && findfileshigh->next) - findfileshigh = findfileshigh->next; - } - } - else if ((ch == 13) && (currentlist == 0)) - { - if (finddirshigh->type == CACHE1D_FIND_DRIVE) - Bstrcpy(selectedboardfilename, finddirshigh->name); - else - Bstrcat(selectedboardfilename, finddirshigh->name); - - Bstrcat(selectedboardfilename, "/"); - - if (pathsearchmode) - Bcanonicalisefilename(selectedboardfilename, 1); - else - Bcorrectfilename(selectedboardfilename, 1); - - Bstrcpy(oldpath,selectedboardfilename); - //printf("Changing directories to: %s\n", selectedboardfilename); - - getfilenames(selectedboardfilename, "*.map"); - ch = 0; - - begindrawing(); - CLEARLINES2D(0, ydim16, 0); - enddrawing(); - showframe(1); - } - - if (ch == 13 && !findfileshigh) ch = 0; - } - while ((ch != 13) && (ch != 27)); - - if (ch == 13) - { - Bstrcat(selectedboardfilename, findfileshigh->name); - //printf("Selected file: %s\n", selectedboardfilename); - - return(0); - } - - pathsearchmode = bakpathsearchmode; - - return(-1); -} - -static int32_t fillsectorxy[MAXWALLS][2]; - -int32_t fillsector(int16_t sectnum, char fillcolor) -{ - int32_t x1, x2, y1, y2, sy, y; - int32_t lborder, rborder, uborder, dborder, miny, maxy, dax; - int16_t z, zz, startwall, endwall, fillcnt; - - UNREFERENCED_PARAMETER(fillcolor); - - lborder = 0; rborder = xdim; - uborder = 0; dborder = ydim16; - - if (sectnum == -1) - return 0; - - miny = dborder-1; - maxy = uborder; - - startwall = sector[sectnum].wallptr; - endwall = startwall + sector[sectnum].wallnum - 1; - for (z=startwall; z<=endwall; z++) - { - screencoords(&x1,&y1, wall[z].x-pos.x,wall[z].y-pos.y, zoom); - if (m32_sideview) - y1 += getscreenvdisp(getflorzofslope(sectnum,wall[z].x,wall[z].y)-pos.z, zoom); - - x1 += halfxdim16; - y1 += midydim16; - - if (m32_sideview) - { - fillsectorxy[z][0] = x1; - fillsectorxy[z][1] = y1; - } - - miny = min(miny, y1); - maxy = max(maxy, y1); - } - - if (miny < uborder) miny = uborder; - if (maxy >= dborder) maxy = dborder-1; - -//+((totalclock>>2)&3) - for (sy=miny; sy<=maxy; sy+=3) // JBF 20040116: numframes%3 -> (totalclock>>2)&3 - { - y = pos.y + ((sy-midydim16)<<14)/zoom; - - fillist[0] = lborder; fillcnt = 1; - for (z=startwall; z<=endwall; z++) - { - if (m32_sideview) - { - x1 = fillsectorxy[z][0]; - y1 = fillsectorxy[z][1]; - x2 = fillsectorxy[wall[z].point2][0]; - y2 = fillsectorxy[wall[z].point2][1]; - - if (y1 > y2) - { - swaplong(&x1, &x2); - swaplong(&y1, &y2); - } - - if (y1 <= sy && sy < y2) - { - if (fillcnt == sizeof(fillist)/sizeof(fillist[0])) - break; - - x1 += scale(sy-y1, x2-x1, y2-y1); - fillist[fillcnt++] = x1; - } - } - else - { - x1 = wall[z].x; x2 = POINT2(z).x; - y1 = wall[z].y; y2 = POINT2(z).y; - - if (y1 > y2) - { - swaplong(&x1, &x2); - swaplong(&y1, &y2); - } - - if (y1 <= y && y < y2) - //if (x1*(y-y2) + x2*(y1-y) <= 0) - { - dax = x1 + scale(y-y1, x2-x1, y2-y1); - dax = halfxdim16 + (((dax-pos.x)*zoom)>>14); - if (dax >= lborder) - { - if (fillcnt == sizeof(fillist)/sizeof(fillist[0])) - break; - - fillist[fillcnt++] = dax; - } - } - } - } - - if (fillcnt > 0) - { - for (z=1; z rborder) - break; - if (fillist[z+1] > rborder) - fillist[z+1] = rborder; - - drawline16(fillist[z],sy, fillist[z+1],sy, 159 //editorcolors[fillcolor] - -klabs(sintable[((totalclock<<3)&2047)]>>11)); - } - } - } - - return(0); -} - -static int16_t whitelinescan(int16_t dalinehighlight) -{ - int32_t i, j, k; - int16_t sucksect, tnewnumwalls; - - sucksect = sectorofwall(dalinehighlight); - - if (numsectors >= MAXSECTORS) - return MAXWALLS+1; - - Bmemcpy(§or[numsectors], §or[sucksect], sizeof(sectortype)); - sector[numsectors].wallptr = numwalls; - sector[numsectors].wallnum = 0; - - i = dalinehighlight; - tnewnumwalls = numwalls; - do - { - if (tnewnumwalls >= MAXWALLS) - return MAXWALLS+1; - - j = lastwall(i); - if (wall[j].nextwall >= 0) - { - j = wall[j].point2; - for (k=0; k= 1) - { - if (a > 1) - if (buffer[a-2] == '\r') buffer[a-2] = 0; - if (buffer[a-1] == '\n') buffer[a-1] = 0; - } - - p = buffer; - line++; - while (*p == 32) p++; - if (*p == 0) continue; // blank line - - if (*p == '#' && !comment) - { - p++; - while (*p == 32) p++; - if (*p == 0) continue; // null directive - - if (!Bstrncmp(p, "define ", 7)) - { - // #define_... - p += 7; - while (*p == 32) p++; - if (*p == 0) - { - initprintf("Error: Malformed #define at line %d\n", line-1); - continue; - } - - name = p; - while (*p != 32 && *p != 0) p++; - if (*p == 32) - { - *(p++) = 0; - while (*p == 32) p++; - if (*p == 0) // #define_NAME with no number - { - initprintf("Error: No number given for name \"%s\" (line %d)\n", name, line-1); - continue; - } - - number = p; - while (*p != 0) p++; - if (*p != 0) *p = 0; - - // add to list - num = Bstrtol(number, &endptr, 10); - if (*endptr != 0) - { - p = endptr; - goto badline; - } - //printf("Grokked \"%s\" -> \"%d\"\n", name, num); - if (num < 0 || num >= MAXTILES) - { - initprintf("Error: Constant %d for name \"%s\" out of range (line %d)\n", num, name, line-1); - continue; - } - - if (Bstrlen(name) > 24) - initprintf("Warning: Name \"%s\" longer than 24 characters (line %d). Truncating.\n", name, line-1); - - Bstrncpy(names[num], name, 24); - names[num][24] = 0; - - syms++; - - continue; - - } - else // #define_NAME with no number - { - initprintf("Error: No number given for name \"%s\" (line %d)\n", name, line-1); - continue; - } - } - else goto badline; - } - else if (*p == '/') - { - if (*(p+1) == '*') {comment++; continue;} - if (*(p+1) == '/') continue; // comment - } - else if (*p == '*' && p[1] == '/') - { - comment--; continue; - } - else if (comment)continue; -badline: - initprintf("Error: Invalid statement found at character %d on line %d\n", (int32_t)(p-buffer), line-1); - } - initprintf("Read %d lines, loaded %d names.\n", line, syms); - - Bfclose(fp); - return 0; -} - -void printcoords16(int32_t posxe, int32_t posye, int16_t ange) -{ - char snotbuf[80]; - int32_t i, m; - int32_t v8 = (numsectors > MAXSECTORSV7 || numwalls > MAXWALLSV7 || numsprites > MAXSPRITESV7); - - Bsprintf(snotbuf,"x:%d y:%d ang:%d r%d",posxe,posye,ange,map_revision-1); - i = 0; - while ((snotbuf[i] != 0) && (i < 33)) - i++; - while (i < 33) - { - snotbuf[i] = 32; - i++; - } - snotbuf[33] = 0; - - clearministatbar16(); - - printext16(8, ydim-STATUS2DSIZ+128, whitecol, -1, snotbuf,0); - - if (highlightcnt<=0 && highlightsectorcnt<=0) - { - Bsprintf(snotbuf,"%d/%d sect. %d/%d walls %d/%d spri.", - numsectors, v8?MAXSECTORSV8:MAXSECTORSV7, - numwalls, v8?MAXWALLSV8:MAXWALLSV7, - numsprites, v8?MAXSPRITESV8:MAXSPRITESV7); - } - else - { - if (highlightcnt>0) - { - m = 0; - for (i=0; i0) - Bsprintf(snotbuf, "%d sectors selected", highlightsectorcnt); - else - snotbuf[0] = 0; - - v8 = 1; - } - - m = xdim/8 - 264/8; - m = clamp(m, 1, (signed)sizeof(snotbuf)-1); - - i = 0; - while (snotbuf[i] && i < m) - i++; - while (i < m) - { - snotbuf[i] = 32; - i++; - } - snotbuf[m] = 0; - - printext16(264, ydim-STATUS2DSIZ+128, v8?editorcolors[10]:whitecol, -1, snotbuf,0); -} - -void updatenumsprites(void) -{ - int32_t i; - - numsprites = 0; - for (i=0; i= 0) - { - k = wall[newnumwalls].nextsector; - if (oldtonewsect && oldtonewsect[k]>=0) - { - wall[newnumwalls].nextsector = oldtonewsect[k]; - m = 0; - for (i=0; i= 0) - // checksectorpointer(wall[j].nextwall,wall[j].nextsector); - // checksectorpointer((short)j,destsector); - //} - - if (newnumwalls > deststartwall) - { - //duplicate sectors - Bmemcpy(§or[destsector],§or[soursector],sizeof(sectortype)); - sector[destsector].wallptr = deststartwall; - sector[destsector].wallnum = newnumwalls-deststartwall; - - if (copystat == 1) - { - //duplicate sprites - j = headspritesect[soursector]; - while (j >= 0) - { - m = insertsprite(destsector,sprite[j].statnum); - if (m<0) - { - message("Some sprites not duplicated because limit was reached."); - break; - } - - Bmemcpy(&sprite[m],&sprite[j],sizeof(spritetype)); - sprite[m].sectnum = destsector; //Don't let memcpy overwrite sector! - - j = nextspritesect[j]; - } - } - } -} - -#define DOPRINT(Yofs, fmt, ...) \ - Bsprintf(snotbuf, fmt, ## __VA_ARGS__); \ - printext16(8+col*200, ydim/*-(row*96)*/-STATUS2DSIZ+Yofs, color, -1, snotbuf, 0); - -void showsectordata(int16_t sectnum, int16_t small) -{ - sectortype *sec; - char snotbuf[80]; - int32_t col=0; //,row = 0; - int32_t color = small ? whitecol : editorcolors[11]; - - sec = §or[sectnum]; - - if (small) - { - _printmessage16("^10Sector %d %s ^O(F7 to edit)", sectnum, ExtGetSectorCaption(sectnum)); - return; - } - - DOPRINT(32, "^10Sector %d", sectnum); - DOPRINT(48, "Firstwall: %d", sec->wallptr); - DOPRINT(56, "Numberofwalls: %d", sec->wallnum); - DOPRINT(64, "Firstsprite: %d", headspritesect[sectnum]); - DOPRINT(72, "Tags: %d, %d", sec->hitag, sec->lotag); - DOPRINT(80, " (0x%x), (0x%x)", sec->hitag, sec->lotag); - DOPRINT(88, "Extra: %d", sec->extra); - DOPRINT(96, "Visibility: %d", sec->visibility); - DOPRINT(104, "Pixel height: %d", (sec->floorz-sec->ceilingz)>>8); - - col++; - - DOPRINT(32, "^10CEILING:^O"); - DOPRINT(48, "Flags (hex): %x", sec->ceilingstat); - DOPRINT(56, "(X,Y)pan: %d, %d", sec->ceilingxpanning, sec->ceilingypanning); - DOPRINT(64, "Shade byte: %d", sec->ceilingshade); - DOPRINT(72, "Z-coordinate: %d", sec->ceilingz); - DOPRINT(80, "Tile number: %d", sec->ceilingpicnum); - DOPRINT(88, "Ceiling heinum: %d", sec->ceilingheinum); - DOPRINT(96, "Palookup number: %d", sec->ceilingpal); - - col++; - - DOPRINT(32, "^10FLOOR:^O"); - DOPRINT(48, "Flags (hex): %x", sec->floorstat); - DOPRINT(56, "(X,Y)pan: %d, %d", sec->floorxpanning, sec->floorypanning); - DOPRINT(64, "Shade byte: %d", sec->floorshade); - DOPRINT(72, "Z-coordinate: %d", sec->floorz); - DOPRINT(80, "Tile number: %d", sec->floorpicnum); - DOPRINT(88, "Floor heinum: %d", sec->floorheinum); - DOPRINT(96, "Palookup number: %d", sec->floorpal); -} - -void showwalldata(int16_t wallnum, int16_t small) -{ - walltype *wal; - int32_t sec; - char snotbuf[80]; - int32_t col=0; //, row = 0; - int32_t color = small ? whitecol : editorcolors[11]; - - wal = &wall[wallnum]; - - if (small) - { - _printmessage16("^10Wall %d %s ^O(F8 to edit)", wallnum, ExtGetWallCaption(wallnum)); - return; - } - - DOPRINT(32, "^10Wall %d", wallnum); - DOPRINT(48, "X-coordinate: %d", wal->x); - DOPRINT(56, "Y-coordinate: %d", wal->y); - DOPRINT(64, "Point2: %d", wal->point2); - DOPRINT(72, "Sector: ^010%d", sectorofwall(wallnum)); - - DOPRINT(88, "Tags: %d, %d", wal->hitag, wal->lotag); - DOPRINT(96, " (0x%x), (0x%x)", wal->hitag, wal->lotag); - - col++; - - DOPRINT(32, "^10%s^O", (wal->picnum>=0 && wal->picnumpicnum] : "!INVALID!"); - DOPRINT(48, "Flags (hex): %x", wal->cstat); - DOPRINT(56, "Shade: %d", wal->shade); - DOPRINT(64, "Pal: %d", wal->pal); - DOPRINT(72, "(X,Y)repeat: %d, %d", wal->xrepeat, wal->yrepeat); - DOPRINT(80, "(X,Y)pan: %d, %d", wal->xpanning, wal->ypanning); - DOPRINT(88, "Tile number: %d", wal->picnum); - DOPRINT(96, "OverTile number: %d", wal->overpicnum); - - col++; - - DOPRINT(48-(small?16:0), "nextsector: %d", wal->nextsector); - DOPRINT(56-(small?16:0), "nextwall: %d", wal->nextwall); - - DOPRINT(72-(small?16:0), "Extra: %d", wal->extra); - - // TX 20050102 I'm not sure what unit dist<<4 is supposed to be, but dist itself is correct in terms of game coordinates as one would expect - DOPRINT(96-(small?16:0), "Wall length: %d", wallength(wallnum)); - - sec = sectorofwall(wallnum); - DOPRINT(104-(small?16:0), "Pixel height: %d", (sector[sec].floorz-sector[sec].ceilingz)>>8); -} - -void showspritedata(int16_t spritenum, int16_t small) -{ - spritetype *spr; - char snotbuf[80]; - int32_t col=0; //, row = 0; - int32_t color = small ? whitecol : editorcolors[11]; - - spr = &sprite[spritenum]; - - if (small) - { - _printmessage16("^10Sprite %d %s ^O(F8 to edit)",spritenum, ExtGetSpriteCaption(spritenum)); - return; - } - - DOPRINT(32, "^10Sprite %d", spritenum); - DOPRINT(48, "X-coordinate: %d", spr->x); - DOPRINT(56, "Y-coordinate: %d", spr->y); - DOPRINT(64, "Z-coordinate: %d", spr->z); - - DOPRINT(72, "Sectnum: ^010%d", spr->sectnum); - DOPRINT(80, "Statnum: %d", spr->statnum); - - DOPRINT(96, "Tags: %d, %d", spr->hitag, spr->lotag); - DOPRINT(104, " (0x%x), (0x%x)", spr->hitag, spr->lotag); - - col++; - - DOPRINT(32, "^10%s^O", (spr->picnum>=0 && spr->picnumpicnum] : "!INVALID!"); - DOPRINT(48, "Flags (hex): %x", spr->cstat); - DOPRINT(56, "Shade: %d", spr->shade); - DOPRINT(64, "Pal: %d", spr->pal); - DOPRINT(72, "(X,Y)repeat: %d, %d", spr->xrepeat, spr->yrepeat); - DOPRINT(80, "(X,Y)offset: %d, %d", spr->xoffset, spr->yoffset); - DOPRINT(88, "Tile number: %d", spr->picnum); - - col++; - - DOPRINT(48, "Angle (2048 degrees): %d", spr->ang); - DOPRINT(56, "X-Velocity: %d", spr->xvel); - DOPRINT(64, "Y-Velocity: %d", spr->yvel); - DOPRINT(72, "Z-Velocity: %d", spr->zvel); - DOPRINT(80, "Owner: %d", spr->owner); - DOPRINT(88, "Clipdist: %d", spr->clipdist); - DOPRINT(96, "Extra: %d", spr->extra); -} - -#undef DOPRINT - -// gets called once per totalclock increment since last call -void keytimerstuff(void) -{ - if (DOWN_BK(STRAFE) == 0) - { - if (DOWN_BK(TURNLEFT)) angvel = max(angvel-pk_turnaccel, -128); - if (DOWN_BK(TURNRIGHT)) angvel = min(angvel+pk_turnaccel, 127); - } - else - { - if (DOWN_BK(TURNLEFT)) svel = min(svel+16, 255); // svel and vel aren't even chars... - if (DOWN_BK(TURNRIGHT)) svel = max(svel-16, -256); - } - if (DOWN_BK(MOVEFORWARD)) vel = min(vel+16, 255); - if (DOWN_BK(MOVEBACKWARD)) vel = max(vel-16, -256); - /* if (DOWN_BK(STRAFELEFT)) svel = min(svel+8, 127); - if (DOWN_BK(STRAFERIGHT)) svel = max(svel-8, -128); */ - - if (angvel < 0) angvel = min(angvel+pk_turndecel, 0); - if (angvel > 0) angvel = max(angvel-pk_turndecel, 0); - if (svel < 0) svel = min(svel+6, 0); - if (svel > 0) svel = max(svel-6, 0); - if (vel < 0) vel = min(vel+6, 0); - if (vel > 0) vel = max(vel-6, 0); - /* if(mlook) pos.z -= (horiz-101)*(vel/40); */ -} - -#if 0 -int32_t snfillprintf(char *outbuf, size_t bufsiz, int32_t fill, const char *fmt, ...) -{ - char tmpstr[256]; - int32_t nwritten, ofs; - va_list va; - - va_start(va, fmt); - nwritten = Bvsnprintf(tmpstr, bufsiz, fmt, va); - va_end(va); - - ofs = min(nwritten, (signed)bufsiz-1); - Bmemset(outbuf, fill, bufsiz-ofs); - - return ofs; -} -#endif - -void _printmessage16(const char *fmt, ...) -{ - int32_t i, ybase; - char snotbuf[156]; - char tmpstr[160]; - va_list va; - - va_start(va, fmt); - Bvsnprintf(tmpstr, 156, fmt, va); - va_end(va); - - i = 0; - while (tmpstr[i] && i < 146) - { - snotbuf[i] = tmpstr[i]; - i++; - } - snotbuf[i] = 0; - if (lastpm16time == totalclock) - Bstrcpy(lastpm16buf, snotbuf); - - clearministatbar16(); - -// ybase = (overridepm16y >= 0) ? ydim-overridepm16y : ydim-STATUS2DSIZ+128-8; - ybase = ydim-STATUS2DSIZ+128-8; - - printext16(/*(overridepm16y >= 0) ? 200L-24 :*/ 8, ybase+8, whitecol, -1, snotbuf, 0); -} - -void printmessage256(int32_t x, int32_t y, const char *name) -{ - char snotbuf[80]; - int32_t i; - - i = 0; - while (name[i] && i < 62) - { - snotbuf[i] = name[i]; - i++; - } - while (i < 62) - { - snotbuf[i] = 32; - i++; - } - snotbuf[62] = 0; - printext256(x+2,y+2,0,-1,snotbuf,0); - printext256(x,y,whitecol,-1,snotbuf,0); -} - -//Find closest point (*dax, *day) on wall (dawall) to (x, y) -static void getclosestpointonwall(int32_t x, int32_t y, int32_t dawall, int32_t *nx, int32_t *ny) -{ - walltype *wal; - int64_t i, j, dx, dy; - - wal = &wall[dawall]; - dx = wall[wal->point2].x - wal->x; - dy = wall[wal->point2].y - wal->y; - i = dx*(x-wal->x) + dy*(y-wal->y); - if (i <= 0) { *nx = wal->x; *ny = wal->y; return; } - j = dx*dx+dy*dy; - if (i >= j) { *nx = wal->x+dx; *ny = wal->y+dy; return; } - i=((i<<15)/j)<<15; - *nx = wal->x + ((dx*i)>>30); - *ny = wal->y + ((dy*i)>>30); -} - -static void initcrc(void) -{ - int32_t i, j, k, a; - - for (j=0; j<256; j++) //Calculate CRC table - { - k = (j<<8); a = 0; - for (i=7; i>=0; i--) - { - if (((k^a)&0x8000) > 0) - a = ((a<<1)&65535) ^ 0x1021; //0x1021 = genpoly - else - a = ((a<<1)&65535); - k = ((k<<1)&65535); - } - crctable[j] = (a&65535); - } -} - -static int32_t GetWallZPeg(int32_t nWall) -{ - int32_t z=0, nSector, nNextSector; - - nSector = sectorofwall((int16_t)nWall); - nNextSector = wall[nWall].nextsector; - if (nNextSector == -1) - { - //1-sided wall - if (wall[nWall].cstat&4) z = sector[nSector].floorz; - else z = sector[nSector].ceilingz; - } - else - { - //2-sided wall - if (wall[nWall].cstat&4) - z = sector[nSector].ceilingz; - else - { - if (sector[nNextSector].ceilingz > sector[nSector].ceilingz) - z = sector[nNextSector].ceilingz; //top step - if (sector[nNextSector].floorz < sector[nSector].floorz) - z = sector[nNextSector].floorz; //bottom step - } - } - return(z); -} - -static void AlignWalls(int32_t nWall0, int32_t z0, int32_t nWall1, int32_t z1, int32_t nTile) -{ - int32_t n; - - //do the x alignment - wall[nWall1].cstat &= ~0x0108; //Set to non-flip - wall[nWall1].xpanning = (uint8_t)((wall[nWall0].xpanning+(wall[nWall0].xrepeat<<3))%tilesizx[nTile]); - - z1 = GetWallZPeg(nWall1); - - for (n=picsiz[nTile]>>4; (1<>(n+3))); -} - -void AutoAlignWalls(int32_t nWall0, int32_t ply) -{ - int32_t z0, z1, nTile, nWall1, branch, visible, nNextSector, nSector; - - nTile = wall[nWall0].picnum; - branch = 0; - if (ply == 0) - { - //clear visited bits - Bmemset(visited, 0, sizeof(visited)); - visited[nWall0>>3] |= (1<<(nWall0&7)); - } - - z0 = GetWallZPeg(nWall0); - - nWall1 = wall[nWall0].point2; - - //loop through walls at this vertex in CCW order - while (1) - { - //break if this wall would connect us in a loop - if (visited[nWall1>>3]&(1<<(nWall1&7))) - break; - - visited[nWall1>>3] |= (1<<(nWall1&7)); - - //break if reached back of left wall - if (wall[nWall1].nextwall == nWall0) - break; - - if (wall[nWall1].picnum == nTile) - { - z1 = GetWallZPeg(nWall1); - visible = 0; - - nNextSector = wall[nWall1].nextsector; - if (nNextSector < 0) - visible = 1; - else - { - //ignore two sided walls that have no visible face - nSector = NEXTWALL(nWall1).nextsector; - if (getceilzofslope((int16_t)nSector,wall[nWall1].x,wall[nWall1].y) < - getceilzofslope((int16_t)nNextSector,wall[nWall1].x,wall[nWall1].y)) - visible = 1; - - if (getflorzofslope((int16_t)nSector,wall[nWall1].x,wall[nWall1].y) > - getflorzofslope((int16_t)nNextSector,wall[nWall1].x,wall[nWall1].y)) - visible = 1; - } - - if (visible) - { - branch++; - AlignWalls(nWall0,z0,nWall1,z1,nTile); - - //if wall was 1-sided, no need to recurse - if (wall[nWall1].nextwall < 0) - { - nWall0 = nWall1; - z0 = GetWallZPeg(nWall0); - nWall1 = wall[nWall0].point2; - branch = 0; - continue; - } - else - AutoAlignWalls(nWall1,ply+1); - } - } - - if (wall[nWall1].nextwall < 0) break; - nWall1 = NEXTWALL(nWall1).point2; - } -} - -#define PLAYTEST_MAPNAME "autosave_playtest.map" - -void test_map(int32_t mode) -{ - if (!mode) - updatesector(pos.x, pos.y, &cursectnum); - else - updatesector(startposx, startposy, &startsectnum); - - if ((!mode && cursectnum >= 0) || (mode && startsectnum >= 0)) - { - char *param = " -map " PLAYTEST_MAPNAME " -noinstancechecking"; - char *fullparam; - char current_cwd[BMAX_PATH]; - int32_t slen = 0; - BFILE *fp; - - if ((program_origcwd[0] == '\0') || !getcwd(current_cwd, BMAX_PATH)) - current_cwd[0] = '\0'; - else // Before we check if file exists, for the case there's no absolute path. - chdir(program_origcwd); - - fp = fopen(game_executable, "rb"); // File exists? - if (fp != NULL) - fclose(fp); - else - { -#ifdef _WIN32 - fullparam = Bstrrchr(mapster32_fullpath, '\\'); -#else - fullparam = Bstrrchr(mapster32_fullpath, '/'); -#endif - if (fullparam) - { - slen = fullparam-mapster32_fullpath+1; - Bstrncpy(game_executable, mapster32_fullpath, slen); - // game_executable is now expected to not be NULL-terminated! - Bstrcpy(game_executable+slen, DEFAULT_GAME_EXEC); - } - else - Bstrcpy(game_executable, DEFAULT_GAME_LOCAL_EXEC); - } - - if (current_cwd[0] != '\0') // Temporarily changing back, - chdir(current_cwd); // after checking if file exists. - - if (testplay_addparam) - slen = Bstrlen(testplay_addparam); - - // Considering the NULL character, quatation marks - // and a possible extra space not in testplay_addparam, - // the length should be Bstrlen(game_executable)+Bstrlen(param)+(slen+1)+2+1. - - fullparam = Bmalloc(Bstrlen(game_executable)+Bstrlen(param)+slen+4); - Bsprintf(fullparam,"\"%s\"",game_executable); - - if (testplay_addparam) - { - Bstrcat(fullparam, " "); - Bstrcat(fullparam, testplay_addparam); - } - Bstrcat(fullparam, param); - - fixspritesectors(); //Do this before saving! - ExtPreSaveMap(); - if (mode) - saveboard(PLAYTEST_MAPNAME,&startposx,&startposy,&startposz,&startang,&startsectnum); - else - saveboard(PLAYTEST_MAPNAME,&pos.x,&pos.y,&pos.z,&ang,&cursectnum); - - message("Board saved to " PLAYTEST_MAPNAME ". Starting the game..."); - OSD_Printf("...as `%s'\n", fullparam); - - showframe(1); - uninitmouse(); -#ifdef _WIN32 - { - STARTUPINFO si; - PROCESS_INFORMATION pi; - - ZeroMemory(&si,sizeof(si)); - ZeroMemory(&pi,sizeof(pi)); - si.cb = sizeof(si); - - if (!CreateProcess(NULL,fullparam,NULL,NULL,0,0,NULL,NULL,&si,&pi)) - message("Error launching the game!"); - else WaitForSingleObject(pi.hProcess,INFINITE); - } -#else - if (current_cwd[0] != '\0') - { - chdir(program_origcwd); - if (system(fullparam)) - message("Error launching the game!"); - chdir(current_cwd); - } - else system(fullparam); -#endif - printmessage16("Game process exited"); - initmouse(); - clearkeys(); - - Bfree(fullparam); - } - else - printmessage16("Position must be in valid player space to test map!"); -} diff --git a/polymer-perf/eduke32/build/src/cache1d.c b/polymer-perf/eduke32/build/src/cache1d.c deleted file mode 100644 index 5f945026b..000000000 --- a/polymer-perf/eduke32/build/src/cache1d.c +++ /dev/null @@ -1,1420 +0,0 @@ -// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman -// Ken Silverman's official web site: "http://www.advsys.net/ken" -// See the included license file "BUILDLIC.TXT" for license info. -// -// This file has been modified from Ken Silverman's original release -// by Jonathon Fowler (jonof@edgenetwk.com) - -#include "compat.h" -#include "cache1d.h" -#include "pragmas.h" -#include "baselayer.h" - -#ifdef WITHKPLIB -#include "kplib.h" - -//Insert '|' in front of filename -//Doing this tells kzopen to load the file only if inside a .ZIP file -static intptr_t kzipopen(const char *filnam) -{ - uint32_t i; - char newst[BMAX_PATH+8]; - - newst[0] = '|'; - for (i=0; filnam[i] && (i < sizeof(newst)-2); i++) newst[i+1] = filnam[i]; - newst[i+1] = 0; - return(kzopen(newst)); -} - -#endif - - -// This module keeps track of a standard linear cacheing system. -// To use this module, here's all you need to do: -// -// Step 1: Allocate a nice BIG buffer, like from 1MB-4MB and -// Call initcache(int32_t cachestart, int32_t cachesize) where -// -// cachestart = (intptr_t)(pointer to start of BIG buffer) -// cachesize = length of BIG buffer -// -// Step 2: Call allocache(intptr_t *bufptr, int32_t bufsiz, char *lockptr) -// whenever you need to allocate a buffer, where: -// -// *bufptr = pointer to multi-byte pointer to buffer -// Confused? Using this method, cache2d can remove -// previously allocated things from the cache safely by -// setting the multi-byte pointer to 0. -// bufsiz = number of bytes to allocate -// *lockptr = pointer to locking char which tells whether -// the region can be removed or not. If *lockptr = 0 then -// the region is not locked else its locked. -// -// Step 3: If you need to remove everything from the cache, or every -// unlocked item from the cache, you can call uninitcache(); -// Call uninitcache(0) to remove all unlocked items, or -// Call uninitcache(1) to remove everything. -// After calling uninitcache, it is still ok to call allocache -// without first calling initcache. - -#define MAXCACHEOBJECTS 9216 - -static int32_t cachesize = 0; -int32_t cachecount = 0; -char zerochar = 0; -intptr_t cachestart = 0; -int32_t cacnum = 0, agecount = 0; -cactype cac[MAXCACHEOBJECTS]; -static int32_t lockrecip[200]; - -static char toupperlookup[256]; - -static void reportandexit(const char *errormessage); - -extern char pow2char[8]; - - -void initcache(intptr_t dacachestart, int32_t dacachesize) -{ - int32_t i; - - for (i=1; i<200; i++) lockrecip[i] = (1<<28)/(200-i); - - // The following code was relocated here from engine.c, since this - // function is only ever called once (from there), and it seems to - // really belong here: - // - // initcache((FP_OFF(pic)+15)&0xfffffff0,(cachesize-((-FP_OFF(pic))&15))&0xfffffff0); - // - // I'm not sure why it's necessary, but the code is making sure the - // cache starts on a multiple of 16 bytes? -- SA - -//printf("BEFORE: cachestart = %x, cachesize = %d\n", dacachestart, dacachesize); - cachestart = ((uintptr_t)dacachestart+15)&~(uintptr_t)0xf; - cachesize = (dacachesize-(((uintptr_t)(dacachestart))&0xf))&~(uintptr_t)0xf; -//printf("AFTER : cachestart = %x, cachesize = %d\n", cachestart, cachesize); - - cac[0].leng = cachesize; - cac[0].lock = &zerochar; - cacnum = 1; - - initprintf("Initialized %.1fM cache\n", (float)(dacachesize/1024.f/1024.f)); -} - -void allocache(intptr_t *newhandle, int32_t newbytes, char *newlockptr) -{ - int32_t i, /*j,*/ z, zz, bestz=0, daval, bestval, besto=0, o1, o2, sucklen, suckz; - -//printf(" ==> asking for %d bytes, ", newbytes); - // Make all requests a multiple of 16 bytes - newbytes = (newbytes+15)&0xfffffff0; -//printf("allocated %d bytes\n", newbytes); - - if ((unsigned)newbytes > (unsigned)cachesize) - { - Bprintf("Cachesize: %d\n",cachesize); - Bprintf("*Newhandle: 0x%" PRIxPTR ", Newbytes: %d, *Newlock: %d\n",(intptr_t)newhandle,newbytes,*newlockptr); - reportandexit("BUFFER TOO BIG TO FIT IN CACHE!"); - } - - if (*newlockptr == 0) - { - reportandexit("ALLOCACHE CALLED WITH LOCK OF 0!"); - } - - //Find best place - bestval = 0x7fffffff; o1 = cachesize; - for (z=cacnum-1; z>=0; z--) - { - o1 -= cac[z].leng; - o2 = o1+newbytes; if (o2 > cachesize) continue; - - daval = 0; - for (i=o1,zz=z; i= 200) { daval = 0x7fffffff; break; } - daval += mulscale32(cac[zz].leng+65536,lockrecip[*cac[zz].lock]); - if (daval >= bestval) break; - } - if (daval < bestval) - { - bestval = daval; besto = o1; bestz = z; - if (bestval == 0) break; - } - } - - //printf("%d %d %d\n",besto,newbytes,*newlockptr); - - if (bestval == 0x7fffffff) - reportandexit("CACHE SPACE ALL LOCKED UP!"); - - //Suck things out - for (sucklen=-newbytes,suckz=bestz; sucklen<0; sucklen+=cac[suckz++].leng) - if (*cac[suckz].lock) *cac[suckz].hand = 0; - - //Remove all blocks except 1 - suckz -= (bestz+1); cacnum -= suckz; - copybufbyte(&cac[bestz+suckz],&cac[bestz],(cacnum-bestz)*sizeof(cactype)); - cac[bestz].hand = newhandle; *newhandle = cachestart+(intptr_t)besto; - cac[bestz].leng = newbytes; - cac[bestz].lock = newlockptr; - cachecount++; - - //Add new empty block if necessary - if (sucklen <= 0) return; - - bestz++; - if (bestz == cacnum) - { - cacnum++; if (cacnum > MAXCACHEOBJECTS) reportandexit("Too many objects in cache! (cacnum > MAXCACHEOBJECTS)"); - cac[bestz].leng = sucklen; - cac[bestz].lock = &zerochar; - return; - } - - if (*cac[bestz].lock == 0) { cac[bestz].leng += sucklen; return; } - - cacnum++; if (cacnum > MAXCACHEOBJECTS) reportandexit("Too many objects in cache! (cacnum > MAXCACHEOBJECTS)"); - for (z=cacnum-1; z>bestz; z--) cac[z] = cac[z-1]; - cac[bestz].leng = sucklen; - cac[bestz].lock = &zerochar; -} - -void suckcache(intptr_t *suckptr) -{ - int32_t i; - - //Can't exit early, because invalid pointer might be same even though lock = 0 - for (i=0; i 0) && (*cac[i-1].lock == 0)) - { - cac[i-1].leng += cac[i].leng; - cacnum--; copybuf(&cac[i+1],&cac[i],(cacnum-i)*sizeof(cactype)); - } - else if ((i < cacnum-1) && (*cac[i+1].lock == 0)) - { - cac[i+1].leng += cac[i].leng; - cacnum--; copybuf(&cac[i+1],&cac[i],(cacnum-i)*sizeof(cactype)); - } - } - } -} - -void agecache(void) -{ - int32_t cnt = (cacnum>>4); - - if (agecount >= cacnum) agecount = cacnum-1; - if (agecount < 0 || !cnt) return; - - for (; cnt>=0; cnt--) - { - if (cac[agecount].lock && (((*cac[agecount].lock)-2)&255) < 198) - (*cac[agecount].lock)--; - - agecount--; - if (agecount < 0) agecount = cacnum-1; - } -} - -static void reportandexit(const char *errormessage) -{ - int32_t i, j; - - //setvmode(0x3); - j = 0; - for (i=0; i - -typedef struct _searchpath -{ - struct _searchpath *next; - char *path; - size_t pathlen; // to save repeated calls to strlen() -} searchpath_t; -static searchpath_t *searchpathhead = NULL; -static size_t maxsearchpathlen = 0; -int32_t pathsearchmode = 0; - -int32_t addsearchpath(const char *p) -{ - struct stat st; - char *s; - searchpath_t *srch; - - if (Bstat(p, &st) < 0) - { - if (errno == ENOENT) return -2; - return -1; - } - if (!(st.st_mode & BS_IFDIR)) return -1; - - srch = (searchpath_t *)Bmalloc(sizeof(searchpath_t)); - if (!srch) return -1; - - srch->next = searchpathhead; - srch->pathlen = strlen(p)+1; - srch->path = (char *)Bmalloc(srch->pathlen + 1); - if (!srch->path) - { - Bfree(srch); - return -1; - } - strcpy(srch->path, p); - for (s=srch->path; *s; s++) ; s--; if (spath || toupperlookup[*s] != '/') strcat(srch->path, "/"); - - searchpathhead = srch; - if (srch->pathlen > maxsearchpathlen) maxsearchpathlen = srch->pathlen; - - Bcorrectfilename(srch->path,0); - - initprintf("Using %s for game data\n", srch->path); - - return 0; -} - -int32_t findfrompath(const char *fn, char **where) -{ - searchpath_t *sp; - char *pfn, *ffn; - int32_t allocsiz; - - // pathsearchmode == 0: tests current dir and then the dirs of the path stack - // pathsearchmode == 1: tests fn without modification, then like for pathsearchmode == 0 - - if (pathsearchmode) - { - // test unmolested filename first - if (access(fn, F_OK) >= 0) - { - *where = Bstrdup(fn); - return 0; - } - else - { - char *tfn = Bstrtolower(Bstrdup(fn)); - - if (access(tfn, F_OK) >= 0) - { - *where = tfn; - return 0; - } - - Bstrupr(tfn); - - if (access(tfn, F_OK) >= 0) - { - *where = tfn; - return 0; - } - - Bfree(tfn); - } - } - - for (pfn = (char *)fn; toupperlookup[*pfn] == '/'; pfn++); - ffn = Bstrdup(pfn); - if (!ffn) return -1; - Bcorrectfilename(ffn,0); // compress relative paths - - allocsiz = max(maxsearchpathlen, 2); // "./" (aka. curdir) - allocsiz += strlen(ffn); - allocsiz += 1; // a nul - - pfn = (char *)Bmalloc(allocsiz); - if (!pfn) { Bfree(ffn); return -1; } - - strcpy(pfn, "./"); - strcat(pfn, ffn); - if (access(pfn, F_OK) >= 0) - { - *where = pfn; - Bfree(ffn); - return 0; - } - - for (sp = searchpathhead; sp; sp = sp->next) - { - char *tfn = Bstrdup(ffn); - - strcpy(pfn, sp->path); - strcat(pfn, ffn); - //initprintf("Trying %s\n", pfn); - if (access(pfn, F_OK) >= 0) - { - *where = pfn; - Bfree(ffn); - Bfree(tfn); - return 0; - } - - //Check with all lowercase - strcpy(pfn, sp->path); - Bstrtolower(tfn); - strcat(pfn, tfn); - if (access(pfn, F_OK) >= 0) - { - *where = pfn; - Bfree(ffn); - Bfree(tfn); - return 0; - } - - //Check again with uppercase - strcpy(pfn, sp->path); - Bstrupr(tfn); - strcat(pfn, tfn); - if (access(pfn, F_OK) >= 0) - { - *where = pfn; - Bfree(ffn); - Bfree(tfn); - return 0; - } - - Bfree(tfn); - } - Bfree(pfn); Bfree(ffn); - return -1; -} - -int32_t openfrompath(const char *fn, int32_t flags, int32_t mode) -{ - char *pfn; - int32_t h; - - if (findfrompath(fn, &pfn) < 0) return -1; - h = Bopen(pfn, flags, mode); - Bfree(pfn); - - return h; -} - -BFILE *fopenfrompath(const char *fn, const char *mode) -{ - int32_t fh; - BFILE *h; - int32_t bmode = 0, smode = 0; - const char *c; - - for (c=mode; c[0];) - { - if (c[0] == 'r' && c[1] == '+') { bmode = BO_RDWR; smode = BS_IREAD|BS_IWRITE; c+=2; } - else if (c[0] == 'r') { bmode = BO_RDONLY; smode = BS_IREAD; c+=1; } - else if (c[0] == 'w' && c[1] == '+') { bmode = BO_RDWR|BO_CREAT|BO_TRUNC; smode = BS_IREAD|BS_IWRITE; c+=2; } - else if (c[0] == 'w') { bmode = BO_WRONLY|BO_CREAT|BO_TRUNC; smode = BS_IREAD|BS_IWRITE; c+=2; } - else if (c[0] == 'a' && c[1] == '+') { bmode = BO_RDWR|BO_CREAT; smode=BS_IREAD|BS_IWRITE; c+=2; } - else if (c[0] == 'a') { bmode = BO_WRONLY|BO_CREAT; smode=BS_IREAD|BS_IWRITE; c+=1; } - else if (c[0] == 'b') { bmode |= BO_BINARY; c+=1; } - else if (c[1] == 't') { bmode |= BO_TEXT; c+=1; } - else c++; - } - fh = openfrompath(fn,bmode,smode); - if (fh < 0) return NULL; - - h = fdopen(fh,mode); - if (!h) close(fh); - - return h; -} - -static char toupperlookup[256] = -{ - 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, - 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, - 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, - 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, - 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, - 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, - 0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, - 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x7b,0x7c,0x7d,0x7e,0x7f, - 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, - 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, - 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf, - 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf, - 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf, - 0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf, - 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef, - 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff -}; - -int32_t numgroupfiles = 0; -static int32_t gnumfiles[MAXGROUPFILES]; -static int32_t groupfil[MAXGROUPFILES] = {-1,-1,-1,-1,-1,-1,-1,-1}; -static int32_t groupfilpos[MAXGROUPFILES]; -static char *gfilelist[MAXGROUPFILES]; -static int32_t *gfileoffs[MAXGROUPFILES]; - -char filegrp[MAXOPENFILES]; -static int32_t filepos[MAXOPENFILES]; -static intptr_t filehan[MAXOPENFILES] = -{ - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 -}; -#ifdef WITHKPLIB -static char filenamsav[MAXOPENFILES][260]; -static int32_t kzcurhand = -1; -#endif - -int32_t initgroupfile(const char *filename) -{ - char buf[16]; - int32_t i, j, k; -#ifdef WITHKPLIB - char *zfn; -#endif - -#ifdef _WIN32 - // on Windows, translate all backslashes (0x5c) to forward slashes (0x2f) - toupperlookup[0x5c] = 0x2f; -#endif - -#ifdef WITHKPLIB - if (findfrompath(filename, &zfn) < 0) return -1; - - // check to see if the file passed is a ZIP and pass it on to kplib if it is - i = Bopen(zfn,BO_BINARY|BO_RDONLY,BS_IREAD); - if (i < 0) { Bfree(zfn); return -1; } - - Bread(i, buf, 4); - if (buf[0] == 0x50 && buf[1] == 0x4B && buf[2] == 0x03 && buf[3] == 0x04) - { - Bclose(i); - j = kzaddstack(zfn); - Bfree(zfn); - return j; - } - Bfree(zfn); - - if (numgroupfiles >= MAXGROUPFILES) return(-1); - - Blseek(i,0,BSEEK_SET); - groupfil[numgroupfiles] = i; -#else - groupfil[numgroupfiles] = openfrompath(filename,BO_BINARY|BO_RDONLY,BS_IREAD); - if (groupfil[numgroupfiles] != -1) -#endif - { - groupfilpos[numgroupfiles] = 0; - Bread(groupfil[numgroupfiles],buf,16); - if ((buf[0] != 'K') || (buf[1] != 'e') || (buf[2] != 'n') || - (buf[3] != 'S') || (buf[4] != 'i') || (buf[5] != 'l') || - (buf[6] != 'v') || (buf[7] != 'e') || (buf[8] != 'r') || - (buf[9] != 'm') || (buf[10] != 'a') || (buf[11] != 'n')) - { - Bclose(groupfil[numgroupfiles]); - groupfil[numgroupfiles] = -1; - return(-1); - } - gnumfiles[numgroupfiles] = B_LITTLE32(*((int32_t *)&buf[12])); - - if ((gfilelist[numgroupfiles] = (char *)Bmalloc(gnumfiles[numgroupfiles]<<4)) == 0) - { Bprintf("Not enough memory for file grouping system\n"); exit(0); } - if ((gfileoffs[numgroupfiles] = (int32_t *)Bmalloc((gnumfiles[numgroupfiles]+1)<<2)) == 0) - { Bprintf("Not enough memory for file grouping system\n"); exit(0); } - - Bread(groupfil[numgroupfiles],gfilelist[numgroupfiles],gnumfiles[numgroupfiles]<<4); - - j = 0; - for (i=0; i=0; i--) - if (groupfil[i] != -1 && groupfil[i] == grphandle) - { - Bfree(gfilelist[i]); - Bfree(gfileoffs[i]); - Bclose(groupfil[i]); - groupfil[i] = -1; - grpnum = i; - break; - } - - if (grpnum == -1) return; - - // JBF 20040111 - numgroupfiles--; - - // move any group files following this one back - for (i=grpnum+1; i= 254) // external file (255) or ZIPped file (254) - continue; - else if (filegrp[i] == grpnum) // close file in group we closed - filehan[i] = -1; - else if (filegrp[i] > grpnum) // move back a file in a group after the one we closed - filegrp[i]--; - } -} - -void uninitgroupfile(void) -{ - int32_t i; - - for (i=numgroupfiles-1; i>=0; i--) - if (groupfil[i] != -1) - { - Bfree(gfilelist[i]); - Bfree(gfileoffs[i]); - Bclose(groupfil[i]); - groupfil[i] = -1; - } - numgroupfiles = 0; - - // JBF 20040111: "close" any files open in groups - for (i=0; i= 0) - { - filegrp[newhandle] = 255; - filehan[newhandle] = fil; - filepos[newhandle] = 0; - return(newhandle); - } - - for (; toupperlookup[*filename] == '/'; filename++); - -#ifdef WITHKPLIB - if ((kzcurhand != newhandle) && (kztell() >= 0)) - { - if (kzcurhand >= 0) filepos[kzcurhand] = kztell(); - kzclose(); - } - if (searchfirst != 1 && (i = kzipopen(filename)) != 0) - { - kzcurhand = newhandle; - filegrp[newhandle] = 254; - filehan[newhandle] = i; - filepos[newhandle] = 0; - strcpy(filenamsav[newhandle],filename); - return newhandle; - } -#endif - - for (k=numgroupfiles-1; k>=0; k--) - { - if (searchfirst == 1) k = 0; - if (groupfil[k] >= 0) - { - for (i=gnumfiles[k]-1; i>=0; i--) - { - gfileptr = (char *)&gfilelist[k][i<<4]; - - bad = 0; - for (j=0; j<13; j++) - { - if (!filename[j]) break; - if (toupperlookup[filename[j]] != toupperlookup[gfileptr[j]]) - { bad = 1; break; } - } - if (bad) continue; - if (j<13 && gfileptr[j]) continue; // JBF: because e1l1.map might exist before e1l1 - if (j==13 && filename[j]) continue; // JBF: long file name - - filegrp[newhandle] = k; - filehan[newhandle] = i; - filepos[newhandle] = 0; - return(newhandle); - } - } - } - return(-1); -} - -int32_t kread(int32_t handle, void *buffer, int32_t leng) -{ - int32_t i; - int32_t filenum = filehan[handle]; - int32_t groupnum = filegrp[handle]; - - if (groupnum == 255) return(Bread(filenum,buffer,leng)); -#ifdef WITHKPLIB - else if (groupnum == 254) - { - if (kzcurhand != handle) - { - if (kztell() >= 0) { filepos[kzcurhand] = kztell(); kzclose(); } - kzcurhand = handle; - kzipopen(filenamsav[handle]); - kzseek(filepos[handle],SEEK_SET); - } - return(kzread(buffer,leng)); - } -#endif - - if (groupfil[groupnum] != -1) - { - i = gfileoffs[groupnum][filenum]+filepos[handle]; - if (i != groupfilpos[groupnum]) - { - Blseek(groupfil[groupnum],i+((gnumfiles[groupnum]+1)<<4),BSEEK_SET); - groupfilpos[groupnum] = i; - } - leng = min(leng,(gfileoffs[groupnum][filenum+1]-gfileoffs[groupnum][filenum])-filepos[handle]); - leng = Bread(groupfil[groupnum],buffer,leng); - filepos[handle] += leng; - groupfilpos[groupnum] += leng; - return(leng); - } - - return(0); -} - -int32_t klseek(int32_t handle, int32_t offset, int32_t whence) -{ - int32_t i, groupnum; - - groupnum = filegrp[handle]; - - if (groupnum == 255) return(Blseek(filehan[handle],offset,whence)); -#ifdef WITHKPLIB - else if (groupnum == 254) - { - if (kzcurhand != handle) - { - if (kztell() >= 0) { filepos[kzcurhand] = kztell(); kzclose(); } - kzcurhand = handle; - kzipopen(filenamsav[handle]); - kzseek(filepos[handle],SEEK_SET); - } - return(kzseek(offset,whence)); - } -#endif - - if (groupfil[groupnum] != -1) - { - switch (whence) - { - case BSEEK_SET: - filepos[handle] = offset; break; - case BSEEK_END: - i = filehan[handle]; - filepos[handle] = (gfileoffs[groupnum][i+1]-gfileoffs[groupnum][i])+offset; - break; - case BSEEK_CUR: - filepos[handle] += offset; break; - } - return(filepos[handle]); - } - return(-1); -} - -int32_t kfilelength(int32_t handle) -{ - int32_t i, groupnum; - - groupnum = filegrp[handle]; - if (groupnum == 255) - { - // return(filelength(filehan[handle])) - return Bfilelength(filehan[handle]); - } -#ifdef WITHKPLIB - else if (groupnum == 254) - { - if (kzcurhand != handle) - { - if (kztell() >= 0) { filepos[kzcurhand] = kztell(); kzclose(); } - kzcurhand = handle; - kzipopen(filenamsav[handle]); - kzseek(filepos[handle],SEEK_SET); - } - return kzfilelength(); - } -#endif - i = filehan[handle]; - return(gfileoffs[groupnum][i+1]-gfileoffs[groupnum][i]); -} - -int32_t ktell(int32_t handle) -{ - int32_t groupnum = filegrp[handle]; - - if (groupnum == 255) return(Blseek(filehan[handle],0,BSEEK_CUR)); -#ifdef WITHKPLIB - else if (groupnum == 254) - { - if (kzcurhand != handle) - { - if (kztell() >= 0) { filepos[kzcurhand] = kztell(); kzclose(); } - kzcurhand = handle; - kzipopen(filenamsav[handle]); - kzseek(filepos[handle],SEEK_SET); - } - return kztell(); - } -#endif - if (groupfil[groupnum] != -1) - return filepos[handle]; - return(-1); -} - -void kclose(int32_t handle) -{ - if (handle < 0) return; - if (filegrp[handle] == 255) Bclose(filehan[handle]); -#ifdef WITHKPLIB - else if (filegrp[handle] == 254) - { - kzclose(); - kzcurhand = -1; - } -#endif - filehan[handle] = -1; -} - -static int32_t klistaddentry(CACHE1D_FIND_REC **rec, const char *name, int32_t type, int32_t source) -{ - CACHE1D_FIND_REC *r = NULL, *attach = NULL; - - if (*rec) - { - int32_t insensitive, v; - CACHE1D_FIND_REC *last = NULL; - - for (attach = *rec; attach; last = attach, attach = attach->next) - { - if (type == CACHE1D_FIND_DRIVE) continue; // we just want to get to the end for drives -#ifdef _WIN32 - insensitive = 1; -#else - if (source == CACHE1D_SOURCE_GRP || attach->source == CACHE1D_SOURCE_GRP) - insensitive = 1; - else if (source == CACHE1D_SOURCE_ZIP || attach->source == CACHE1D_SOURCE_ZIP) - insensitive = 1; - else - insensitive = 0; -#endif - if (insensitive) v = Bstrcasecmp(name, attach->name); - else v = Bstrcmp(name, attach->name); - - // sorted list - if (v > 0) continue; // item to add is bigger than the current one - // so look for something bigger than us - if (v < 0) // item to add is smaller than the current one - { - attach = NULL; // so wedge it between the current item and the one before - break; - } - - // matched - if (source >= attach->source) return 1; // item to add is of lower priority - r = attach; - break; - } - - // wasn't found in the list, so attach to the end - if (!attach) attach = last; - } - - if (r) - { - r->type = type; - r->source = source; - return 0; - } - - r = (CACHE1D_FIND_REC *)Bmalloc(sizeof(CACHE1D_FIND_REC)+strlen(name)+1); - if (!r) return -1; - r->name = (char *)r + sizeof(CACHE1D_FIND_REC); strcpy(r->name, name); - r->type = type; - r->source = source; - r->usera = r->userb = NULL; - - if (!attach) // we are the first item - { - r->prev = NULL; - r->next = *rec; - if (*rec)(*rec)->prev = r; - *rec = r; - } - else - { - r->prev = attach; - r->next = attach->next; - if (attach->next) attach->next->prev = r; - attach->next = r; - } - - return 0; -} - -void klistfree(CACHE1D_FIND_REC *rec) -{ - CACHE1D_FIND_REC *n; - - while (rec) - { - n = rec->next; - Bfree(rec); - rec = n; - } -} - -CACHE1D_FIND_REC *klistpath(const char *_path, const char *mask, int32_t type) -{ - CACHE1D_FIND_REC *rec = NULL; - char *path; - - // pathsearchmode == 0: enumerates a path in the virtual filesystem - // pathsearchmode == 1: enumerates the system filesystem path passed in - - path = Bstrdup(_path); - if (!path) return NULL; - - // we don't need any leading dots and slashes or trailing slashes either - { - int32_t i,j; - for (i=0; path[i] == '.' || toupperlookup[path[i]] == '/';) i++; - for (j=0; (path[j] = path[i]); j++,i++) ; - while (j>0 && toupperlookup[path[j-1]] == '/') j--; - path[j] = 0; - //initprintf("Cleaned up path = \"%s\"\n",path); - } - - if (*path && (type & CACHE1D_FIND_DIR)) - { - if (klistaddentry(&rec, "..", CACHE1D_FIND_DIR, CACHE1D_SOURCE_CURDIR) < 0) goto failure; - } - - if (!(type & CACHE1D_OPT_NOSTACK)) // current directory and paths in the search stack - { - searchpath_t *search = NULL; - BDIR *dir; - struct Bdirent *dirent; - // Adjusted for the following "autoload" dir fix - NY00123 - const char *d = "./"; - int32_t stackdepth = CACHE1D_SOURCE_CURDIR; - char buf[BMAX_PATH]; - - if (pathsearchmode) d = _path; - - do - { - if (!pathsearchmode) - { - // Fix for "autoload" dir in multi-user environments - NY00123 - strcpy(buf, d); - strcat(buf, path); - if (*path) strcat(buf, "/"); - } - else strcpy(buf, d); - dir = Bopendir(buf); - if (dir) - { - while ((dirent = Breaddir(dir))) - { - if ((dirent->name[0] == '.' && dirent->name[1] == 0) || - (dirent->name[0] == '.' && dirent->name[1] == '.' && dirent->name[2] == 0)) - continue; - if ((type & CACHE1D_FIND_DIR) && !(dirent->mode & BS_IFDIR)) continue; - if ((type & CACHE1D_FIND_FILE) && (dirent->mode & BS_IFDIR)) continue; - if (!Bwildmatch(dirent->name, mask)) continue; - switch (klistaddentry(&rec, dirent->name, - (dirent->mode & BS_IFDIR) ? CACHE1D_FIND_DIR : CACHE1D_FIND_FILE, - stackdepth)) - { - case -1: goto failure; - //case 1: initprintf("%s:%s dropped for lower priority\n", d,dirent->name); break; - //case 0: initprintf("%s:%s accepted\n", d,dirent->name); break; - default: - break; - } - } - Bclosedir(dir); - } - - if (pathsearchmode) break; - - if (!search) - { - search = searchpathhead; - stackdepth = CACHE1D_SOURCE_PATH; - } - else - { - search = search->next; - stackdepth++; - } - if (search) d = search->path; - } - while (search); - } - - if (!pathsearchmode) // next, zip files - { - char buf[BMAX_PATH+4]; - int32_t i, j, ftype; - strcpy(buf,path); - if (*path) strcat(buf,"/"); - strcat(buf,mask); - for (kzfindfilestart(buf); kzfindfile(buf);) - { - if (buf[0] != '|') continue; // local files we don't need - - // scan for the end of the string and shift - // everything left a char in the process - for (i=1; (buf[i-1]=buf[i]); i++) ; i-=2; - - // if there's a slash at the end, this is a directory entry - if (toupperlookup[buf[i]] == '/') { ftype = CACHE1D_FIND_DIR; buf[i] = 0; } - else ftype = CACHE1D_FIND_FILE; - - // skip over the common characters at the beginning of the base path and the zip entry - for (j=0; buf[j] && path[j]; j++) - { - if (toupperlookup[ path[j] ] == toupperlookup[ buf[j] ]) continue; - break; - } - // we've now hopefully skipped the common path component at the beginning. - // if that's true, we should be staring at a null byte in path and either any character in buf - // if j==0, or a slash if j>0 - if ((!path[0] && buf[j]) || (!path[j] && toupperlookup[ buf[j] ] == '/')) - { - if (j>0) j++; - - // yep, so now we shift what follows back to the start of buf and while we do that, - // keep an eye out for any more slashes which would mean this entry has sub-entities - // and is useless to us. - for (i = 0; (buf[i] = buf[j]) && toupperlookup[buf[j]] != '/'; i++,j++) ; - if (toupperlookup[buf[j]] == '/') continue; // damn, try next entry - } - else - { - // if we're here it means we have a situation where: - // path = foo - // buf = foobar... - // or - // path = foobar - // buf = foo... - // which would mean the entry is higher up in the directory tree and is also useless - continue; - } - - if ((type & CACHE1D_FIND_DIR) && ftype != CACHE1D_FIND_DIR) continue; - if ((type & CACHE1D_FIND_FILE) && ftype != CACHE1D_FIND_FILE) continue; - - // the entry is in the clear - switch (klistaddentry(&rec, buf, ftype, CACHE1D_SOURCE_ZIP)) - { - case -1: - goto failure; - //case 1: initprintf(":%s dropped for lower priority\n", buf); break; - //case 0: initprintf(":%s accepted\n", buf); break; - default: - break; - } - } - } - - // then, grp files - if (!pathsearchmode && !*path && (type & CACHE1D_FIND_FILE)) - { - char buf[13]; - int32_t i,j; - buf[12] = 0; - for (i=0; i=0; j--) - { - Bmemcpy(buf,&gfilelist[i][j<<4],12); - if (!Bwildmatch(buf,mask)) continue; - switch (klistaddentry(&rec, buf, CACHE1D_FIND_FILE, CACHE1D_SOURCE_GRP)) - { - case -1: - goto failure; - //case 1: initprintf(":%s dropped for lower priority\n", workspace); break; - //case 0: initprintf(":%s accepted\n", workspace); break; - default: - break; - } - } - } - } - - if (pathsearchmode && (type & CACHE1D_FIND_DRIVE)) - { - char *drives, *drp; - drives = Bgetsystemdrives(); - if (drives) - { - for (drp=drives; *drp; drp+=strlen(drp)+1) - { - if (klistaddentry(&rec, drp, CACHE1D_FIND_DRIVE, CACHE1D_SOURCE_DRIVE) < 0) - { - Bfree(drives); - goto failure; - } - } - Bfree(drives); - } - } - - Bfree(path); - return rec; -failure: - Bfree(path); - klistfree(rec); - return NULL; -} - -//Internal LZW variables -#define LZWSIZE 16384 //Watch out for shorts! -static char *lzwbuf1, *lzwbuf4, *lzwbuf5, lzwbuflock[5]; -static int16_t *lzwbuf2, *lzwbuf3; - -static int32_t lzwcompress(char *lzwinbuf, int32_t uncompleng, char *lzwoutbuf); -static int32_t lzwuncompress(char *lzwinbuf, int32_t compleng, char *lzwoutbuf); - -int32_t kdfread(void *buffer, bsize_t dasizeof, bsize_t count, int32_t fil) -{ - uint32_t i, j, k, kgoal; - int16_t leng; - char *ptr; - - lzwbuflock[0] = lzwbuflock[1] = lzwbuflock[2] = lzwbuflock[3] = lzwbuflock[4] = 200; - if (lzwbuf1 == NULL) allocache((intptr_t *)&lzwbuf1,LZWSIZE+(LZWSIZE>>4),&lzwbuflock[0]); - if (lzwbuf2 == NULL) allocache((intptr_t *)&lzwbuf2,(LZWSIZE+(LZWSIZE>>4))*2,&lzwbuflock[1]); - if (lzwbuf3 == NULL) allocache((intptr_t *)&lzwbuf3,(LZWSIZE+(LZWSIZE>>4))*2,&lzwbuflock[2]); - if (lzwbuf4 == NULL) allocache((intptr_t *)&lzwbuf4,LZWSIZE,&lzwbuflock[3]); - if (lzwbuf5 == NULL) allocache((intptr_t *)&lzwbuf5,LZWSIZE+(LZWSIZE>>4),&lzwbuflock[4]); - - if (dasizeof > LZWSIZE) { count *= dasizeof; dasizeof = 1; } - ptr = (char *)buffer; - - if (kread(fil,&leng,2) != 2) return -1; leng = B_LITTLE16(leng); - if (kread(fil,lzwbuf5,(int32_t)leng) != leng) return -1; - k = 0; kgoal = lzwuncompress(lzwbuf5,(int32_t)leng,lzwbuf4); - - copybufbyte(lzwbuf4,ptr,(int32_t)dasizeof); - k += (int32_t)dasizeof; - - for (i=1; i= kgoal) - { - if (kread(fil,&leng,2) != 2) return -1; leng = B_LITTLE16(leng); - if (kread(fil,lzwbuf5,(int32_t)leng) != leng) return -1; - k = 0; kgoal = lzwuncompress(lzwbuf5,(int32_t)leng,lzwbuf4); - } - for (j=0; j>4),&lzwbuflock[0]); - if (lzwbuf2 == NULL) allocache((intptr_t *)&lzwbuf2,(LZWSIZE+(LZWSIZE>>4))*2,&lzwbuflock[1]); - if (lzwbuf3 == NULL) allocache((intptr_t *)&lzwbuf3,(LZWSIZE+(LZWSIZE>>4))*2,&lzwbuflock[2]); - if (lzwbuf4 == NULL) allocache((intptr_t *)&lzwbuf4,LZWSIZE,&lzwbuflock[3]); - if (lzwbuf5 == NULL) allocache((intptr_t *)&lzwbuf5,LZWSIZE+(LZWSIZE>>4),&lzwbuflock[4]); - - if (dasizeof > LZWSIZE) { count *= dasizeof; dasizeof = 1; } - ptr = (char *)buffer; - - if (Bfread(&leng,2,1,fil) != 1) return -1; leng = B_LITTLE16(leng); - if (Bfread(lzwbuf5,(int32_t)leng,1,fil) != 1) return -1; - k = 0; kgoal = lzwuncompress(lzwbuf5,(int32_t)leng,lzwbuf4); - - copybufbyte(lzwbuf4,ptr,(int32_t)dasizeof); - k += (int32_t)dasizeof; - - for (i=1; i= kgoal) - { - if (Bfread(&leng,2,1,fil) != 1) return -1; leng = B_LITTLE16(leng); - if (Bfread(lzwbuf5,(int32_t)leng,1,fil) != 1) return -1; - k = 0; kgoal = lzwuncompress(lzwbuf5,(int32_t)leng,lzwbuf4); - } - for (j=0; j>4),&lzwbuflock[0]); - if (lzwbuf2 == NULL) allocache((intptr_t *)&lzwbuf2,(LZWSIZE+(LZWSIZE>>4))*2,&lzwbuflock[1]); - if (lzwbuf3 == NULL) allocache((intptr_t *)&lzwbuf3,(LZWSIZE+(LZWSIZE>>4))*2,&lzwbuflock[2]); - if (lzwbuf4 == NULL) allocache((intptr_t *)&lzwbuf4,LZWSIZE,&lzwbuflock[3]); - if (lzwbuf5 == NULL) allocache((intptr_t *)&lzwbuf5,LZWSIZE+(LZWSIZE>>4),&lzwbuflock[4]); - - if (dasizeof > LZWSIZE) { count *= dasizeof; dasizeof = 1; } - ptr = (char *)buffer; - - copybufbyte(ptr,lzwbuf4,(int32_t)dasizeof); - k = dasizeof; - - if (k > LZWSIZE-dasizeof) - { - leng = (int16_t)lzwcompress(lzwbuf4,k,lzwbuf5); k = 0; swleng = B_LITTLE16(leng); - Bwrite(fil,&swleng,2); Bwrite(fil,lzwbuf5,(int32_t)leng); - } - - for (i=1; i LZWSIZE-dasizeof) - { - leng = (int16_t)lzwcompress(lzwbuf4,k,lzwbuf5); k = 0; swleng = B_LITTLE16(leng); - Bwrite(fil,&swleng,2); Bwrite(fil,lzwbuf5,(int32_t)leng); - } - ptr += dasizeof; - } - if (k > 0) - { - leng = (int16_t)lzwcompress(lzwbuf4,k,lzwbuf5); swleng = B_LITTLE16(leng); - Bwrite(fil,&swleng,2); Bwrite(fil,lzwbuf5,(int32_t)leng); - } - lzwbuflock[0] = lzwbuflock[1] = lzwbuflock[2] = lzwbuflock[3] = lzwbuflock[4] = 1; -} - -void dfwrite(void *buffer, bsize_t dasizeof, bsize_t count, BFILE *fil) -{ - uint32_t i, j, k; - int16_t leng, swleng; - char *ptr; - - lzwbuflock[0] = lzwbuflock[1] = lzwbuflock[2] = lzwbuflock[3] = lzwbuflock[4] = 200; - if (lzwbuf1 == NULL) allocache((intptr_t *)&lzwbuf1,LZWSIZE+(LZWSIZE>>4),&lzwbuflock[0]); - if (lzwbuf2 == NULL) allocache((intptr_t *)&lzwbuf2,(LZWSIZE+(LZWSIZE>>4))*2,&lzwbuflock[1]); - if (lzwbuf3 == NULL) allocache((intptr_t *)&lzwbuf3,(LZWSIZE+(LZWSIZE>>4))*2,&lzwbuflock[2]); - if (lzwbuf4 == NULL) allocache((intptr_t *)&lzwbuf4,LZWSIZE,&lzwbuflock[3]); - if (lzwbuf5 == NULL) allocache((intptr_t *)&lzwbuf5,LZWSIZE+(LZWSIZE>>4),&lzwbuflock[4]); - - if (dasizeof > LZWSIZE) { count *= dasizeof; dasizeof = 1; } - ptr = (char *)buffer; - - copybufbyte(ptr,lzwbuf4,(int32_t)dasizeof); - k = dasizeof; - - if (k > LZWSIZE-dasizeof) - { - leng = (int16_t)lzwcompress(lzwbuf4,k,lzwbuf5); k = 0; swleng = B_LITTLE16(leng); - Bfwrite(&swleng,2,1,fil); Bfwrite(lzwbuf5,(int32_t)leng,1,fil); - } - - for (i=1; i LZWSIZE-dasizeof) - { - leng = (int16_t)lzwcompress(lzwbuf4,k,lzwbuf5); k = 0; swleng = B_LITTLE16(leng); - Bfwrite(&swleng,2,1,fil); Bfwrite(lzwbuf5,(int32_t)leng,1,fil); - } - ptr += dasizeof; - } - if (k > 0) - { - leng = (int16_t)lzwcompress(lzwbuf4,k,lzwbuf5); swleng = B_LITTLE16(leng); - Bfwrite(&swleng,2,1,fil); Bfwrite(lzwbuf5,(int32_t)leng,1,fil); - } - lzwbuflock[0] = lzwbuflock[1] = lzwbuflock[2] = lzwbuflock[3] = lzwbuflock[4] = 1; -} - -static int32_t lzwcompress(char *lzwinbuf, int32_t uncompleng, char *lzwoutbuf) -{ - int32_t i, addr, newaddr, addrcnt, zx, *intptr; - int32_t bytecnt1, bitcnt, numbits, oneupnumbits; - int16_t *shortptr; - - for (i=255; i>=0; i--) { lzwbuf1[i] = i; lzwbuf3[i] = (i+1)&255; } - clearbuf(lzwbuf2,256>>1,0xffffffff); - clearbuf(lzwoutbuf,((uncompleng+15)+3)>>2,0L); - - addrcnt = 256; bytecnt1 = 0; bitcnt = (4<<3); - numbits = 8; oneupnumbits = (1<<8); - do - { - addr = lzwinbuf[bytecnt1]; - do - { - bytecnt1++; - if (bytecnt1 == uncompleng) break; - if (lzwbuf2[addr] < 0) {lzwbuf2[addr] = addrcnt; break;} - newaddr = lzwbuf2[addr]; - while (lzwbuf1[newaddr] != lzwinbuf[bytecnt1]) - { - zx = lzwbuf3[newaddr]; - if (zx < 0) {lzwbuf3[newaddr] = addrcnt; break;} - newaddr = zx; - } - if (lzwbuf3[newaddr] == addrcnt) break; - addr = newaddr; - } - while (addr >= 0); - lzwbuf1[addrcnt] = lzwinbuf[bytecnt1]; - lzwbuf2[addrcnt] = -1; - lzwbuf3[addrcnt] = -1; - - intptr = (int32_t *)&lzwoutbuf[bitcnt>>3]; - intptr[0] |= B_LITTLE32(addr<<(bitcnt&7)); - bitcnt += numbits; - if ((addr&((oneupnumbits>>1)-1)) > ((addrcnt-1)&((oneupnumbits>>1)-1))) - bitcnt--; - - addrcnt++; - if (addrcnt > oneupnumbits) { numbits++; oneupnumbits <<= 1; } - } - while ((bytecnt1 < uncompleng) && (bitcnt < (uncompleng<<3))); - - intptr = (int32_t *)&lzwoutbuf[bitcnt>>3]; - intptr[0] |= B_LITTLE32(addr<<(bitcnt&7)); - bitcnt += numbits; - if ((addr&((oneupnumbits>>1)-1)) > ((addrcnt-1)&((oneupnumbits>>1)-1))) - bitcnt--; - - shortptr = (int16_t *)lzwoutbuf; - shortptr[0] = B_LITTLE16((int16_t)uncompleng); - if (((bitcnt+7)>>3) < uncompleng) - { - shortptr[1] = B_LITTLE16((int16_t)addrcnt); - return((bitcnt+7)>>3); - } - shortptr[1] = (int16_t)0; - for (i=0; i>2); - return((int32_t)B_LITTLE16(shortptr[0])); //uncompleng - } - for (i=255; i>=0; i--) { lzwbuf2[i] = i; lzwbuf3[i] = i; } - currstr = 256; bitcnt = (4<<3); outbytecnt = 0; - numbits = 8; oneupnumbits = (1<<8); - do - { - intptr = (int32_t *)&lzwinbuf[bitcnt>>3]; - dat = ((B_LITTLE32(intptr[0])>>(bitcnt&7)) & (oneupnumbits-1)); - bitcnt += numbits; - if ((dat&((oneupnumbits>>1)-1)) > ((currstr-1)&((oneupnumbits>>1)-1))) - { dat &= ((oneupnumbits>>1)-1); bitcnt--; } - - lzwbuf3[currstr] = dat; - - for (leng=0; dat>=256; leng++,dat=lzwbuf3[dat]) - lzwbuf1[leng] = lzwbuf2[dat]; - - lzwoutbuf[outbytecnt++] = dat; - for (i=leng-1; i>=0; i--) lzwoutbuf[outbytecnt++] = lzwbuf1[i]; - - lzwbuf2[currstr-1] = dat; lzwbuf2[currstr] = dat; - currstr++; - if (currstr > oneupnumbits) { numbits++; oneupnumbits <<= 1; } - } - while (currstr < strtot); - return((int32_t)B_LITTLE16(shortptr[0])); //uncompleng -} - -/* - * vim:ts=4:sw=4: - */ diff --git a/polymer-perf/eduke32/build/src/compat.c b/polymer-perf/eduke32/build/src/compat.c deleted file mode 100644 index 427018ca2..000000000 --- a/polymer-perf/eduke32/build/src/compat.c +++ /dev/null @@ -1,846 +0,0 @@ -/* - * Playing-field leveller for Build - * by Jonathon Fowler - * - * A note about this: - * 1. There is some kind of problem somewhere in the functions below because - * compiling with __compat_h_macrodef__ disabled makes stupid things happen. - * 2. The functions below, aside from the ones which aren't trivial, were never - * really intended to be used for anything except tracking anr removing ties - * to the standard C library from games. Using the Bxx versions of functions - * means we can redefine those names to link up with different runtime library - * names. - */ - -#ifdef _WIN32 -#define WIN32_LEAN_AND_MEAN -#define _WIN32_IE 0x0400 -#define _WIN32_WINNT 0x0501 -#include -#include -#include -#endif - -#include -#include -#include -#include -#include -// #include -#include - -#ifdef __APPLE__ -#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_3 -# include -# include -#endif -#endif - -#if defined(_MSC_VER) -# include -#else -# include -#endif - -#include "compat.h" -#include "baselayer.h" - -#ifndef __compat_h_macrodef__ - -int32_t Brand(void) -{ - return rand(); -} - -void *Bmalloc(bsize_t size) -{ -#ifdef NEDMALLOC - return nedmalloc(size); -#else - return malloc(size); -#endif -} - -void Bfree(void *ptr) -{ -#ifdef NEDMALLOC - nedfree(ptr); -#else - free(ptr); -#endif -} - -int32_t Bopen(const char *pathname, int32_t flags, uint32_t mode) -{ - int32_t n=0,o=0; - - if (flags&BO_BINARY) n|=O_BINARY; else n|=O_TEXT; - if ((flags&BO_RDWR)==BO_RDWR) n|=O_RDWR; - else if ((flags&BO_RDWR)==BO_WRONLY) n|=O_WRONLY; - else if ((flags&BO_RDWR)==BO_RDONLY) n|=O_RDONLY; - if (flags&BO_APPEND) n|=O_APPEND; - if (flags&BO_CREAT) n|=O_CREAT; - if (flags&BO_TRUNC) n|=O_TRUNC; - if (mode&BS_IREAD) o|=S_IREAD; - if (mode&BS_IWRITE) o|=S_IWRITE; - if (mode&BS_IEXEC) o|=S_IEXEC; - - return open(pathname,n,o); -} - -int32_t Bclose(int32_t fd) -{ - return close(fd); -} - -bssize_t Bwrite(int32_t fd, const void *buf, bsize_t count) -{ - return write(fd,buf,count); -} - -bssize_t Bread(int32_t fd, void *buf, bsize_t count) -{ - return read(fd,buf,count); -} - -int32_t Blseek(int32_t fildes, int32_t offset, int32_t whence) -{ - switch (whence) - { - case BSEEK_SET: - whence=SEEK_SET; break; - case BSEEK_CUR: - whence=SEEK_CUR; break; - case BSEEK_END: - whence=SEEK_END; break; - } - return lseek(fildes,offset,whence); -} - -BFILE *Bfopen(const char *path, const char *mode) -{ - return (BFILE *)fopen(path,mode); -} - -int32_t Bfclose(BFILE *stream) -{ - return fclose((FILE *)stream); -} - -void Brewind(BFILE *stream) -{ - rewind((FILE *)stream); -} - -int32_t Bfgetc(BFILE *stream) -{ - return fgetc((FILE *)stream); -} - -char *Bfgets(char *s, int32_t size, BFILE *stream) -{ - return fgets(s,size,(FILE *)stream); -} - -int32_t Bfputc(int32_t c, BFILE *stream) -{ - return fputc(c,(FILE *)stream); -} - -int32_t Bfputs(const char *s, BFILE *stream) -{ - return fputs(s,(FILE *)stream); -} - -bsize_t Bfread(void *ptr, bsize_t size, bsize_t nmemb, BFILE *stream) -{ - return fread(ptr,size,nmemb,(FILE *)stream); -} - -bsize_t Bfwrite(const void *ptr, bsize_t size, bsize_t nmemb, BFILE *stream) -{ - return fwrite(ptr,size,nmemb,(FILE *)stream); -} - - -char *Bstrdup(const char *s) -{ -#ifdef NEDMALLOC - return nedstrdup(s); -#else - return strdup(s); -#endif -} - -char *Bstrcpy(char *dest, const char *src) -{ - return strcpy(dest,src); -} - -char *Bstrncpy(char *dest, const char *src, bsize_t n) -{ - return Bstrncpy(dest,src,n); -} - -int32_t Bstrcmp(const char *s1, const char *s2) -{ - return strcmp(s1,s2); -} - -int32_t Bstrncmp(const char *s1, const char *s2, bsize_t n) -{ - return strncmp(s1,s2,n); -} - -int32_t Bstrcasecmp(const char *s1, const char *s2) -{ -#ifdef _MSC_VER - return _stricmp(s1,s2); -#else - return strcasecmp(s1,s2); -#endif -} - -int32_t Bstrncasecmp(const char *s1, const char *s2, bsize_t n) -{ -#ifdef _MSC_VER - return _strnicmp(s1,s2,n); -#else - return strncasecmp(s1,s2,n); -#endif -} - -char *Bstrcat(char *dest, const char *src) -{ - return strcat(dest,src); -} - -char *Bstrncat(char *dest, const char *src, bsize_t n) -{ - return strncat(dest,src,n); -} - -bsize_t Bstrlen(const char *s) -{ - return strlen(s); -} - -char *Bstrchr(const char *s, int32_t c) -{ - return strchr(s,c); -} - -char *Bstrrchr(const char *s, int32_t c) -{ - return strrchr(s,c); -} - -int32_t Batoi(const char *nptr) -{ - return atoi(nptr); -} - -int32_t Batol(const char *nptr) -{ - return atol(nptr); -} - -int32_t int32_t Bstrtol(const char *nptr, char **endptr, int32_t base) -{ - return strtol(nptr,endptr,base); -} - -uint32_t int32_t Bstrtoul(const char *nptr, char **endptr, int32_t base) -{ - return strtoul(nptr,endptr,base); -} - -void *Bmemcpy(void *dest, const void *src, bsize_t n) -{ - return memcpy(dest,src,n); -} - -void *Bmemmove(void *dest, const void *src, bsize_t n) -{ - return memmove(dest,src,n); -} - -void *Bmemchr(const void *s, int32_t c, bsize_t n) -{ - return memchr(s,c,n); -} - -void *Bmemset(void *s, int32_t c, bsize_t n) -{ - return memset(s,c,n); -} - -int32_t Bprintf(const char *format, ...) -{ - va_list ap; - int32_t r; - - va_start(ap,format); -#ifdef _MSC_VER - r = _vprintf(format,ap); -#else - r = vprintf(format,ap); -#endif - va_end(ap); - return r; -} - -int32_t Bsprintf(char *str, const char *format, ...) -{ - va_list ap; - int32_t r; - - va_start(ap,format); -#ifdef _MSC_VER - r = _vsprintf(str,format,ap); -#else - r = vsprintf(str,format,ap); -#endif - va_end(ap); - return r; -} - -int32_t Bsnprintf(char *str, bsize_t size, const char *format, ...) -{ - va_list ap; - int32_t r; - - va_start(ap,format); -#ifdef _MSC_VER - r = _vsnprintf(str,size,format,ap); -#else - r = vsnprintf(str,size,format,ap); -#endif - va_end(ap); - return r; -} - -int32_t Bvsnprintf(char *str, bsize_t size, const char *format, va_list ap) -{ -#ifdef _MSC_VER - return _vsnprintf(str,size,format,ap); -#else - return vsnprintf(str,size,format,ap); -#endif -} - -char *Bgetenv(const char *name) -{ - return getenv(name); -} - -char *Bgetcwd(char *buf, bsize_t size) -{ - return getcwd(buf,size); -} - -#endif // __compat_h_macrodef__ - - -// -// Stuff which must be a function -// - -char *Bgethomedir(void) -{ -#ifdef _WIN32 - FARPROC aSHGetSpecialFolderPathA; - TCHAR appdata[MAX_PATH]; - int32_t loaded = 0; - HMODULE hShell32 = GetModuleHandle("shell32.dll"); - - if (hShell32 == NULL) - { - hShell32 = LoadLibrary("shell32.dll"); - loaded = 1; - } - - if (hShell32 == NULL) - return NULL; - - aSHGetSpecialFolderPathA = GetProcAddress(hShell32, "SHGetSpecialFolderPathA"); - if (aSHGetSpecialFolderPathA != NULL) - if (SUCCEEDED(aSHGetSpecialFolderPathA(NULL, appdata, CSIDL_APPDATA, FALSE))) - { - if (loaded) - FreeLibrary(hShell32); - return Bstrdup(appdata); - } - - if (loaded) - FreeLibrary(hShell32); - return NULL; -#elif defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_3 - FSRef ref; - CFStringRef str; - CFURLRef base; - char *s; - - if (FSFindFolder(kUserDomain, kVolumeRootFolderType, kDontCreateFolder, &ref) < 0) return NULL; - base = CFURLCreateFromFSRef(NULL, &ref); - if (!base) return NULL; - str = CFURLCopyFileSystemPath(base, kCFURLPOSIXPathStyle); - CFRelease(base); - if (!str) return NULL; - s = (char *)CFStringGetCStringPtr(str,CFStringGetSystemEncoding()); - if (s) s = Bstrdup(s); - CFRelease(str); - return s; -#else - char *e = getenv("HOME"); - if (!e) return NULL; - return Bstrdup(e); -#endif -} - -char *Bgetsupportdir(int32_t global) -{ -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3_ - UNREFERENCED_PARAMETER(global); - return Bgethomedir(); -#else - FSRef ref; - CFStringRef str; - CFURLRef base; - char *s; - - if (FSFindFolder(global ? kLocalDomain : kUserDomain, - kApplicationSupportFolderType, - kDontCreateFolder, &ref) < 0) return NULL; - base = CFURLCreateFromFSRef(NULL, &ref); - if (!base) return NULL; - str = CFURLCopyFileSystemPath(base, kCFURLPOSIXPathStyle); - CFRelease(base); - if (!str) return NULL; - s = (char *)CFStringGetCStringPtr(str,CFStringGetSystemEncoding()); - if (s) s = Bstrdup(s); - CFRelease(str); - return s; -#endif -} - -int32_t Bcorrectfilename(char *filename, int32_t removefn) -{ - char *fn; - char *tokarr[64], *first, *next = NULL, *token; - int32_t i, ntok = 0, leadslash = 0, trailslash = 0; - - fn = Bstrdup(filename); - if (!fn) return -1; - - for (first=fn; *first; first++) - { -#ifdef _WIN32 - if (*first == '\\') *first = '/'; -#endif - } - leadslash = (*fn == '/'); - trailslash = (first>fn && first[-1] == '/'); - - first = fn; - do - { - token = Bstrtoken(first, "/", &next, 1); - first = NULL; - if (!token) break; - else if (token[0] == 0) continue; - else if (token[0] == '.' && token[1] == 0) continue; - else if (token[0] == '.' && token[1] == '.' && token[2] == 0) ntok = max(0,ntok-1); - else tokarr[ntok++] = token; - } - while (1); - - if (!trailslash && removefn) { ntok = max(0,ntok-1); trailslash = 1; } - if (ntok == 0 && trailslash && leadslash) trailslash = 0; - - first = filename; - if (leadslash) *(first++) = '/'; - for (i=0; i0) *(first++) = '/'; - for (token=tokarr[i]; *token; token++) - *(first++) = *token; - } - if (trailslash) *(first++) = '/'; - *(first++) = 0; - - Bfree(fn); - return 0; -} - -int32_t Bcanonicalisefilename(char *filename, int32_t removefn) -{ - char cwd[BMAX_PATH], fn[BMAX_PATH], *p; - char *fnp = filename; -#ifdef _WIN32 - int32_t drv = 0; -#endif - -#ifdef _WIN32 - { - if (filename[0] && filename[1] == ':') - { - // filename is prefixed with a drive - drv = toupper(filename[0])-'A' + 1; - fnp += 2; - } - if (!_getdcwd(drv, cwd, sizeof(cwd))) return -1; - for (p=cwd; *p; p++) if (*p == '\\') *p = '/'; - } -#else - if (!getcwd(cwd,sizeof(cwd))) return -1; -#endif - p = strrchr(cwd,'/'); if (!p || p[1]) strcat(cwd, "/"); - - strcpy(fn, fnp); -#ifdef _WIN32 - for (p=fn; *p; p++) if (*p == '\\') *p = '/'; -#endif - - if (fn[0] != '/') - { - // we are dealing with a path relative to the current directory - strcpy(filename, cwd); - strcat(filename, fn); - } - else - { -#ifdef _WIN32 - filename[0] = cwd[0]; - filename[1] = ':'; - filename[2] = 0; -#else - filename[0] = 0; -#endif - strcat(filename, fn); - } - fnp = filename; -#ifdef _WIN32 - fnp += 2; // skip the drive -#endif - UNREFERENCED_PARAMETER(removefn); // change the call below to use removefn instead of 1? - return Bcorrectfilename(fnp,1); -} - -char *Bgetsystemdrives(void) -{ -#ifdef _WIN32 - char *str, *p; - DWORD drv, mask; - int32_t number=0; - - drv = GetLogicalDrives(); - if (drv == 0) return NULL; - - for (mask=1; mask<0x8000000l; mask<<=1) - { - if ((drv&mask) == 0) continue; - number++; - } - - str = p = (char *)Bmalloc(1 + (3*number)); - if (!str) return NULL; - - number = 0; - for (mask=1; mask<0x8000000l; mask<<=1, number++) - { - if ((drv&mask) == 0) continue; - *(p++) = 'A' + number; - *(p++) = ':'; - *(p++) = 0; - } - *(p++) = 0; - - return str; -#else - // Perhaps have Unix OS's put /, /home/user, and /mnt/* in the "drives" list? - return NULL; -#endif -} - - -int32_t Bfilelength(int32_t fd) -{ - struct stat st; - if (fstat(fd, &st) < 0) return -1; - return(int32_t)(st.st_size); -} - - -typedef struct -{ -#ifdef _MSC_VER - int32_t dir; - struct _finddata_t fid; -#else - DIR *dir; -#endif - struct Bdirent info; - int32_t status; - char name[1]; -} BDIR_real; - -BDIR *Bopendir(const char *name) -{ - BDIR_real *dirr; -#ifdef _MSC_VER - char *t,*tt; - t = (char *)Bmalloc(strlen(name)+1+4); - if (!t) return NULL; -#endif - - dirr = (BDIR_real *)Bmalloc(sizeof(BDIR_real) + strlen(name)); - if (!dirr) - { -#ifdef _MSC_VER - Bfree(t); -#endif - return NULL; - } - -#ifdef _MSC_VER - strcpy(t,name); - tt = t+strlen(name)-1; - while (*tt == ' ' && tt>t) tt--; - if (*tt != '/' && *tt != '\\') *(++tt) = '/'; - *(++tt) = '*'; - *(++tt) = '.'; - *(++tt) = '*'; - *(++tt) = 0; - - dirr->dir = _findfirst(t,&dirr->fid); - Bfree(t); - if (dirr->dir == -1) - { - Bfree(dirr); - return NULL; - } -#else - dirr->dir = opendir(name); - if (dirr->dir == NULL) - { - Bfree(dirr); - return NULL; - } -#endif - - dirr->status = 0; - strcpy(dirr->name, name); - - return (BDIR *)dirr; -} - -struct Bdirent *Breaddir(BDIR *dir) -{ - BDIR_real *dirr = (BDIR_real *)dir; - struct dirent *de; - struct stat st; - char *fn; - -#ifdef _MSC_VER - if (dirr->status > 0) - { - if (_findnext(dirr->dir,&dirr->fid) != 0) - { - dirr->status = -1; - return NULL; - } - } - dirr->info.namlen = strlen(dirr->fid.name); - dirr->info.name = dirr->fid.name; - dirr->status++; -#else - de = readdir(dirr->dir); - if (de == NULL) - { - dirr->status = -1; - return NULL; - } - else - { - dirr->status++; - } - //# if defined(__WATCOMC__) || defined(__linux) || defined(__BEOS__) || defined(__QNX__) || defined(SKYOS) - dirr->info.namlen = strlen(de->d_name); - //# else - // dirr->info.namlen = de->d_namlen; - //# endif - dirr->info.name = de->d_name; -#endif - dirr->info.mode = 0; - dirr->info.size = 0; - dirr->info.mtime = 0; - - fn = (char *)Bmalloc(strlen(dirr->name) + 1 + dirr->info.namlen + 1); - if (fn) - { - Bsprintf(fn,"%s/%s",dirr->name,dirr->info.name); - if (!Bstat(fn, &st)) - { - dirr->info.mode = st.st_mode; - dirr->info.size = st.st_size; - dirr->info.mtime = st.st_mtime; - } - Bfree(fn); - } - - return &dirr->info; -} - -int32_t Bclosedir(BDIR *dir) -{ - BDIR_real *dirr = (BDIR_real *)dir; - -#ifdef _MSC_VER - _findclose(dirr->dir); -#else - closedir(dirr->dir); -#endif - Bfree(dirr); - - return 0; -} - - -char *Bstrtoken(char *s, const char *delim, char **ptrptr, int32_t chop) -{ - char *p, *start; - - if (!ptrptr) return NULL; - - if (s) p = s; - else p = *ptrptr; - - if (!p) return NULL; - - while (*p != 0 && strchr(delim, *p)) p++; - if (*p == 0) - { - *ptrptr = NULL; - return NULL; - } - start = p; - while (*p != 0 && !strchr(delim, *p)) p++; - if (*p == 0) *ptrptr = NULL; - else - { - if (chop) *(p++) = 0; - *ptrptr = p; - } - - return start; -} - - -//Brute-force case-insensitive, slash-insensitive, * and ? wildcard matcher -//Given: string i and string j. string j can have wildcards -//Returns: 1:matches, 0:doesn't match -int32_t Bwildmatch(const char *i, const char *j) -{ - const char *k; - char c0, c1; - - if (!*j) return(1); - do - { - if (*j == '*') - { - for (k=i,j++; *k; k++) if (Bwildmatch(k,j)) return(1); - continue; - } - if (!*i) return(0); - if (*j == '?') { i++; j++; continue; } - c0 = *i; if ((c0 >= 'a') && (c0 <= 'z')) c0 -= 32; - c1 = *j; if ((c1 >= 'a') && (c1 <= 'z')) c1 -= 32; -#ifdef _WIN32 - if (c0 == '/') c0 = '\\'; - if (c1 == '/') c1 = '\\'; -#endif - if (c0 != c1) return(0); - i++; j++; - } - while (*j); - return(!*i); -} - -#if !defined(_WIN32) -char *Bstrlwr(char *s) -{ - char *t = s; - if (!s) return s; - while (*t) { *t = Btolower(*t); t++; } - return s; -} - -char *Bstrupr(char *s) -{ - char *t = s; - if (!s) return s; - while (*t) { *t = Btoupper(*t); t++; } - return s; -} -#endif - - -// -// Bgetsysmemsize() -- gets the amount of system memory in the machine -// -uint32_t Bgetsysmemsize(void) -{ -#ifdef _WIN32 - uint32_t siz = UINT_MAX; - HMODULE lib = LoadLibrary("KERNEL32.DLL"); - - if (lib) - { - BOOL (WINAPI *aGlobalMemoryStatusEx)(LPMEMORYSTATUSEX) = - (void *)GetProcAddress(lib, "GlobalMemoryStatusEx"); - - if (aGlobalMemoryStatusEx) - { - //WinNT - MEMORYSTATUSEX memst; - memst.dwLength = sizeof(MEMORYSTATUSEX); - if (aGlobalMemoryStatusEx(&memst)) - siz = (uint32_t)min(UINT_MAX, memst.ullTotalPhys); - } - else - { - // Yeah, there's enough Win9x hatred here that a perfectly good workaround - // has been replaced by an error message. Oh well, we don't support 9x anyway. - initprintf("Bgetsysmemsize(): error determining system memory size!\n"); - } - - FreeLibrary(lib); - } - - return siz; -#elif (defined(_SC_PAGE_SIZE) || defined(_SC_PAGESIZE)) && defined(_SC_PHYS_PAGES) - uint32_t siz = UINT_MAX; - int64_t scpagesiz, scphyspages; - -#ifdef _SC_PAGE_SIZE - scpagesiz = sysconf(_SC_PAGE_SIZE); -#else - scpagesiz = sysconf(_SC_PAGESIZE); -#endif - scphyspages = sysconf(_SC_PHYS_PAGES); - if (scpagesiz >= 0 && scphyspages >= 0) - siz = (uint32_t)min(UINT_MAX, (int64_t)scpagesiz * (int64_t)scphyspages); - - //initprintf("Bgetsysmemsize(): %d pages of %d bytes, %d bytes of system memory\n", - // scphyspages, scpagesiz, siz); - - return siz; -#else - return UINT_MAX; -#endif -} - - - diff --git a/polymer-perf/eduke32/build/src/config.c b/polymer-perf/eduke32/build/src/config.c deleted file mode 100644 index e6cce4e0d..000000000 --- a/polymer-perf/eduke32/build/src/config.c +++ /dev/null @@ -1,556 +0,0 @@ -// Evil and Nasty Configuration File Reader for KenBuild -// by Jonathon Fowler - -#include "compat.h" -#include "build.h" -#include "editor.h" -#include "osd.h" - -#ifdef RENDERTYPEWIN -#include "winlayer.h" -#endif -#include "baselayer.h" - -static int32_t vesares[13][2] = {{320,200},{360,200},{320,240},{360,240},{320,400}, - {360,400},{640,350},{640,400},{640,480},{800,600}, - {1024,768},{1280,1024},{1600,1200} -}; - -static int32_t readconfig(BFILE *fp, const char *key, char *value, uint32_t len) -{ - char buf[1000], *k, *v, *eq; - int32_t x=0; - - if (len < 1) return 0; - - Brewind(fp); - - while (1) - { - if (!Bfgets(buf, 1000, fp)) return 0; - - if (buf[0] == ';') continue; - - eq = Bstrchr(buf, '='); - if (!eq) continue; - - k = buf; - v = eq+1; - - while (*k == ' ' || *k == '\t') k++; - *(eq--) = 0; - while ((*eq == ' ' || *eq == '\t') && eq>=k) *(eq--) = 0; - - if (Bstrcasecmp(k, key)) continue; - - while (*v == ' ' || *k == '\t') v++; - eq = v + Bstrlen(v)-1; - - while ((*eq == ' ' || *eq == '\t' || *eq == '\r' || *eq == '\n') && eq>=v) *(eq--) = 0; - - value[--len] = 0; - do value[x] = v[x]; while (v[x++] != 0 && len-- > 0); - - return x-1; - } -} - -extern int16_t brightness; -extern int32_t vsync; -extern char game_executable[BMAX_PATH]; -extern int32_t fullscreen; -extern char default_buildkeys[NUMBUILDKEYS]; -static char *const keys = default_buildkeys; -extern char remap[256]; -extern int32_t remapinit; -extern double msens; -extern int32_t editorgridextent, grid, autogrid; -static int32_t default_grid=3; -extern int32_t graphicsmode; -extern int32_t AmbienceToggle, MixRate; -extern int32_t ParentalLock; - -/* - * SETUP.DAT - * 0 = video mode (0:chained 1:vesa 2:screen buffered 3/4/5:tseng/paradise/s3 6:red-blue) - * 1 = sound (0:none) - * 2 = music (0:none) - * 3 = input (0:keyboard 1:+mouse) - * 4 = multiplayer (0:single 1-4:com 5-11:ipx) - * 5&0xf0 = com speed - * 5&0x0f = com irq - * 6&0xf0 = chained y-res - * 6&0x0f = chained x-res or vesa mode - * 7&0xf0 = sound samplerate - * 7&0x01 = sound quality - * 7&0x02 = 8/16 bit - * 7&0x04 = mono/stereo - * - * bytes 8 to 26 are key settings: - * 0 = Forward (0xc8) - * 1 = Backward (0xd0) - * 2 = Turn left (0xcb) - * 3 = Turn right (0xcd) - * 4 = Run (0x2a) - * 5 = Strafe (0x9d) - * 6 = Fire (0x1d) - * 7 = Use (0x39) - * 8 = Stand high (0x1e) - * 9 = Stand low (0x2c) - * 10 = Look up (0xd1) - * 11 = Look down (0xc9) - * 12 = Strafe left (0x33) - * 13 = Strafe right (0x34) - * 14 = 2D/3D switch (0x9c) - * 15 = View cycle (0x1c) - * 16 = 2D Zoom in (0xd) - * 17 = 2D Zoom out (0xc) - * 18 = Chat (0xf) - */ - -int32_t loadsetup(const char *fn) -{ - BFILE *fp; -#define VL 1024 - char val[VL]; - int32_t i; - - if ((fp = Bfopen(fn, "rt")) == NULL) return -1; - - if (readconfig(fp, "forcesetup", val, VL) > 0) { if (Batoi(val) != 0) forcesetup = 1; else forcesetup = 0; } - if (readconfig(fp, "fullscreen", val, VL) > 0) { if (Batoi(val) != 0) fullscreen = 1; else fullscreen = 0; } - if (readconfig(fp, "resolution", val, VL) > 0) - { - i = Batoi(val) & 0x0f; - if ((unsigned)i<13) { xdimgame = xdim2d = vesares[i][0]; ydimgame = ydim2d = vesares[i][1]; } - } - if (readconfig(fp, "2dresolution", val, VL) > 0) - { - i = Batoi(val) & 0x0f; - if ((unsigned)i<13) { xdim2d = vesares[i][0]; ydim2d = vesares[i][1]; } - } - if (readconfig(fp, "xdim2d", val, VL) > 0) xdim2d = Batoi(val); - if (readconfig(fp, "ydim2d", val, VL) > 0) ydim2d = Batoi(val); - if (readconfig(fp, "xdim3d", val, VL) > 0) xdimgame = Batoi(val); - if (readconfig(fp, "ydim3d", val, VL) > 0) ydimgame = Batoi(val); -// if (readconfig(fp, "samplerate", val, VL) > 0) option[7] = (Batoi(val) & 0x0f) << 4; -// if (readconfig(fp, "music", val, VL) > 0) { if (Batoi(val) != 0) option[2] = 1; else option[2] = 0; } -// if (readconfig(fp, "mouse", val, VL) > 0) { if (Batoi(val) != 0) option[3] = 1; else option[3] = 0; } - if (readconfig(fp, "bpp", val, VL) > 0) bppgame = Batoi(val); - if (readconfig(fp, "vsync", val, VL) > 0) vsync = Batoi(val)?1:0; - if (readconfig(fp, "editorgridextent", val, VL) > 0) editorgridextent = max(min(262144,Batoi(val)),32768); - if (readconfig(fp, "grid", val, VL) > 0) - { - grid = Batoi(val); - default_grid = grid; - autogrid = (grid==9); - grid = min(max(0, grid), 8); - } -#ifdef POLYMER - if (readconfig(fp, "rendmode", val, VL) > 0) { i = Batoi(val); glrendmode = i; } -#endif - if (readconfig(fp, "vid_gamma", val, VL) > 0) vid_gamma = Bstrtod(val, NULL); - if (readconfig(fp, "vid_brightness", val, VL) > 0) vid_brightness = Bstrtod(val, NULL); - if (readconfig(fp, "vid_contrast", val, VL) > 0) vid_contrast = Bstrtod(val, NULL); -#ifdef RENDERTYPEWIN - if (readconfig(fp, "maxrefreshfreq", val, VL) > 0) maxrefreshfreq = Batoi(val); -#endif -#ifdef USE_OPENGL - if (readconfig(fp, "usemodels", val, VL) > 0) usemodels = Batoi(val)?1:0; - if (readconfig(fp, "usehightile", val, VL) > 0) usehightile = Batoi(val)?1:0; - - glusetexcache = -1; - if (readconfig(fp, "glusetexcache", val, VL) > 0) - { - glusetexcache = clamp(Batoi(val), 0, 2); - } - if (readconfig(fp, "gltexfiltermode", val, VL) > 0) - { - gltexfiltermode = Batoi(val); - } - if (readconfig(fp, "glanisotropy", val, VL) > 0) - { - glanisotropy = Batoi(val); - } - if (readconfig(fp, "r_downsize", val, VL) > 0) - { - r_downsize = Batoi(val); - r_downsize = clamp(r_downsize, 0, 5); - r_downsizevar = r_downsize; - } - if (readconfig(fp, "r_texcompr", val, VL) > 0) - { - glusetexcompr = !!Batoi(val); - } -#endif - - if (readconfig(fp, "gameexecutable", val, VL) > 0) - Bstrcpy(game_executable, val); - -// option[0] = 1; // vesa all the way... -// option[1] = 1; // sound all the way... -// option[4] = 0; // no multiplayer -// option[5] = 0; - -#if 1 - if (readconfig(fp, "keyforward", val, VL) > 0) keys[0] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "keybackward", val, VL) > 0) keys[1] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "keyturnleft", val, VL) > 0) keys[2] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "keyturnright", val, VL) > 0) keys[3] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "keyrun", val, VL) > 0) keys[4] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "keystrafe", val, VL) > 0) keys[5] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "keyfire", val, VL) > 0) keys[6] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "keyuse", val, VL) > 0) keys[7] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "keystandhigh", val, VL) > 0) keys[8] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "keystandlow", val, VL) > 0) keys[9] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "keylookup", val, VL) > 0) keys[10] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "keylookdown", val, VL) > 0) keys[11] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "keystrafeleft", val, VL) > 0) keys[12] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "keystraferight", val, VL) > 0) keys[13] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "key2dmode", val, VL) > 0) keys[14] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "keyviewcycle", val, VL) > 0) keys[15] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "key2dzoomin", val, VL) > 0) keys[16] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "key2dzoomout", val, VL) > 0) keys[17] = Bstrtol(val, NULL, 16); - if (readconfig(fp, "keychat", val, VL) > 0) keys[18] = Bstrtol(val, NULL, 16); -#endif - -#ifdef RENDERTYPEWIN - if (readconfig(fp, "windowpositioning", val, VL) > 0) windowpos = Batoi(val); - windowx = -1; - if (readconfig(fp, "windowposx", val, VL) > 0) windowx = Batoi(val); - windowy = -1; - if (readconfig(fp, "windowposy", val, VL) > 0) windowy = Batoi(val); -#endif - - if (readconfig(fp, "keyconsole", val, VL) > 0) { keys[19] = Bstrtol(val, NULL, 16); OSD_CaptureKey(keys[19]); } - - if (readconfig(fp, "mousesensitivity", val, VL) > 0) msens = Bstrtod(val, NULL); - - if (readconfig(fp, "mousenavigation", val, VL) > 0) unrealedlook = !!Batoi(val); - - if (readconfig(fp, "mousenavigationaccel", val, VL) > 0) pk_uedaccel = Batoi(val); - - if (readconfig(fp, "quickmapcycling", val, VL) > 0) quickmapcycling = !!Batoi(val); - - if (readconfig(fp, "sideview_reversehorizrot", val, VL) > 0) sideview_reversehrot = !!Batoi(val); - if (readconfig(fp, "revertCTRL", val, VL) > 0) revertCTRL = !!Batoi(val); - - if (readconfig(fp, "scrollamount", val, VL) > 0) scrollamount = Batoi(val); - - if (readconfig(fp, "turnaccel", val, VL) > 0) pk_turnaccel = Batoi(val); - - if (readconfig(fp, "turndecel", val, VL) > 0) pk_turndecel = Batoi(val); - -// if (readconfig(fp, "autosave", val, VL) > 0) autosave = Batoi(val)*60; - if (readconfig(fp, "autosavesec", val, VL) > 0) autosave = max(0, Batoi(val)); - if (readconfig(fp, "autocorruptchecksec", val, VL) > 0) autocorruptcheck = max(0, Batoi(val)); - - if (readconfig(fp, "showheightindicators", val, VL) > 0) - showheightindicators = min(max(Batoi(val),0),2); - if (readconfig(fp, "showambiencesounds", val, VL) > 0) - showambiencesounds = min(max(Batoi(val),0),2); - - if (readconfig(fp, "graphicsmode", val, VL) > 0) - graphicsmode = min(max(Batoi(val),0),2); - - if (readconfig(fp, "samplerate", val, VL) > 0) MixRate = min(max(8000, Batoi(val)), 48000); - if (readconfig(fp, "ambiencetoggle", val, VL) > 0) AmbienceToggle = !!Batoi(val); - if (readconfig(fp, "parlock", val, VL) > 0) ParentalLock = !!Batoi(val); - - if (readconfig(fp, "osdtryscript", val, VL) > 0) m32_osd_tryscript = !!Batoi(val); - - for (i=0; i<256; i++) - remap[i]=i; - - remapinit=1; - if (readconfig(fp, "remap", val, VL) > 0) - { - char *p=val; int32_t v1,v2; - while (*p) - { - if (!sscanf(p,"%x",&v1))break; - if ((p=strchr(p,'-'))==0)break; p++; - if (!sscanf(p,"%x",&v2))break; - remap[v1]=v2; - initprintf("Remap %X key to %X\n",v1,v2); - if ((p=strchr(p,','))==0)break; p++; - } - } - - // load m32script history - for (i=0; i>1)) : (j>>1); - crc32table[i] = j; - } -} - -uint32_t crc32once(uint8_t *blk, uint32_t len) -{ - uint32_t crc; - - crc32init(&crc); - crc32block(&crc, blk, len); - return crc32finish(&crc); -} diff --git a/polymer-perf/eduke32/build/src/defs.c b/polymer-perf/eduke32/build/src/defs.c deleted file mode 100644 index daed7423f..000000000 --- a/polymer-perf/eduke32/build/src/defs.c +++ /dev/null @@ -1,1940 +0,0 @@ -/* - * Definitions file parser for Build - * by Jonathon Fowler (jonof@edgenetwork.org) - * Remixed substantially by Ken Silverman - * See the included license file "BUILDLIC.TXT" for license info. - */ - -#include "build.h" -#include "compat.h" -#include "engine_priv.h" -#include "baselayer.h" -#include "scriptfile.h" -#include "cache1d.h" -#include "kplib.h" -#include "quicklz.h" - -enum scripttoken_t -{ - T_EOF = -2, - T_ERROR = -1, - T_INCLUDE = 0, - T_DEFINE, - T_DEFINETEXTURE, - T_DEFINESKYBOX, - T_DEFINETINT, - T_DEFINEMODEL, - T_DEFINEMODELFRAME, - T_DEFINEMODELANIM, - T_DEFINEMODELSKIN, - T_SELECTMODELSKIN, - T_DEFINEVOXEL, - T_DEFINEVOXELTILES, - T_MODEL, - T_FILE, - T_SCALE, - T_SHADE, - T_FRAME, - T_SMOOTHDURATION, - T_ANIM, - T_SKIN, - T_SURF, - T_TILE, - T_TILE0, - T_TILE1, - T_FRAME0, - T_FRAME1, - T_FPS, - T_FLAGS, - T_PAL, - T_BASEPAL, - T_DETAIL, - T_GLOW, - T_SPECULAR, - T_NORMAL, - T_PARAM, - T_HUD, - T_XADD, - T_YADD, - T_ZADD, - T_ANGADD, - T_FOV, - T_FLIPPED, - T_HIDE, - T_NOBOB, - T_NODEPTH, - T_VOXEL, - T_SKYBOX, - T_FRONT,T_RIGHT,T_BACK,T_LEFT,T_TOP,T_BOTTOM, - T_HIGHPALOOKUP, - T_TINT,T_RED,T_GREEN,T_BLUE, - T_TEXTURE,T_ALPHACUT,T_XSCALE,T_YSCALE,T_SPECPOWER,T_SPECFACTOR,T_NOCOMPRESS,T_NODOWNSIZE, - T_UNDEFMODEL,T_UNDEFMODELRANGE,T_UNDEFMODELOF,T_UNDEFTEXTURE,T_UNDEFTEXTURERANGE, - T_ALPHAHACK,T_ALPHAHACKRANGE, - T_SPRITECOL,T_2DCOL, - T_FOGPAL, - T_LOADGRP, - T_DUMMYTILE,T_DUMMYTILERANGE, - T_SETUPTILE,T_SETUPTILERANGE, - T_ANIMTILERANGE, - T_CACHESIZE, - T_IMPORTTILE, - T_MUSIC,T_ID,T_SOUND, - T_TILEFROMTEXTURE, T_XOFFSET, T_YOFFSET -}; - -typedef struct { const char *text; int32_t tokenid; } tokenlist; - -static int32_t getatoken(scriptfile *sf, const tokenlist *tl, int32_t ntokens) -{ - char *tok; - int32_t i; - - if (!sf) return T_ERROR; - tok = scriptfile_gettoken(sf); - if (!tok) return T_EOF; - - for (i=ntokens-1; i>=0; i--) - { - if (!Bstrcasecmp(tok, tl[i].text)) - return tl[i].tokenid; - } - - return T_ERROR; -} - -static int32_t lastmodelid = -1, lastvoxid = -1, modelskin = -1, lastmodelskin = -1, seenframe = 0; -extern int32_t nextvoxid; - -#ifdef USE_OPENGL -extern float alphahackarray[MAXTILES]; -#endif - -static const char *skyfaces[6] = -{ - "front face", "right face", "back face", - "left face", "top face", "bottom face" -}; - -static int32_t defsparser(scriptfile *script) -{ - int32_t tokn; - char *cmdtokptr; - - static const tokenlist basetokens[] = - { - { "include", T_INCLUDE }, - { "#include", T_INCLUDE }, - { "define", T_DEFINE }, - { "#define", T_DEFINE }, - - // deprecated style - { "definetexture", T_DEFINETEXTURE }, - { "defineskybox", T_DEFINESKYBOX }, - { "definetint", T_DEFINETINT }, - { "definemodel", T_DEFINEMODEL }, - { "definemodelframe",T_DEFINEMODELFRAME }, - { "definemodelanim", T_DEFINEMODELANIM }, - { "definemodelskin", T_DEFINEMODELSKIN }, - { "selectmodelskin", T_SELECTMODELSKIN }, - { "definevoxel", T_DEFINEVOXEL }, - { "definevoxeltiles",T_DEFINEVOXELTILES }, - - // new style - { "model", T_MODEL }, - { "voxel", T_VOXEL }, - { "skybox", T_SKYBOX }, - { "highpalookup", T_HIGHPALOOKUP }, - { "tint", T_TINT }, - { "texture", T_TEXTURE }, - { "tile", T_TEXTURE }, - { "music", T_MUSIC }, - { "sound", T_SOUND }, - - // other stuff - { "undefmodel", T_UNDEFMODEL }, - { "undefmodelrange", T_UNDEFMODELRANGE }, - { "undefmodelof", T_UNDEFMODELOF }, - { "undeftexture", T_UNDEFTEXTURE }, - { "undeftexturerange", T_UNDEFTEXTURERANGE }, - { "alphahack", T_ALPHAHACK }, - { "alphahackrange", T_ALPHAHACKRANGE }, - { "spritecol", T_SPRITECOL }, - { "2dcol", T_2DCOL }, - { "fogpal", T_FOGPAL }, - { "loadgrp", T_LOADGRP }, - { "dummytile", T_DUMMYTILE }, - { "dummytilerange", T_DUMMYTILERANGE }, - { "setuptile", T_SETUPTILE }, - { "setuptilerange", T_SETUPTILERANGE }, - { "animtilerange", T_ANIMTILERANGE }, - { "cachesize", T_CACHESIZE }, - { "dummytilefrompic",T_IMPORTTILE }, - { "tilefromtexture", T_TILEFROMTEXTURE }, - }; - - while (1) - { - if (quitevent) return 0; - tokn = getatoken(script,basetokens,sizeof(basetokens)/sizeof(tokenlist)); - cmdtokptr = script->ltextptr; - switch (tokn) - { - case T_ERROR: - initprintf("Error on line %s:%d.\n", script->filename,scriptfile_getlinum(script,cmdtokptr)); - break; - case T_EOF: - return(0); - case T_INCLUDE: - { - char *fn; - if (!scriptfile_getstring(script,&fn)) - { - scriptfile *included; - - included = scriptfile_fromfile(fn); - if (!included) - { - initprintf("Warning: Failed including %s on line %s:%d\n", - fn, script->filename,scriptfile_getlinum(script,cmdtokptr)); - } - else - { - defsparser(included); - scriptfile_close(included); - } - } - break; - } - case T_DEFINE: - { - char *name; - int32_t number; - - if (scriptfile_getstring(script,&name)) break; - if (scriptfile_getsymbol(script,&number)) break; - - if (scriptfile_addsymbolvalue(name,number) < 0) - initprintf("Warning: Symbol %s was NOT redefined to %d on line %s:%d\n", - name,number,script->filename,scriptfile_getlinum(script,cmdtokptr)); - break; - } - - // OLD (DEPRECATED) DEFINITION SYNTAX - case T_DEFINETEXTURE: - { - int32_t tile,pal,fnoo,i; - char *fn, *tfn = NULL; - - if (scriptfile_getsymbol(script,&tile)) break; - if (scriptfile_getsymbol(script,&pal)) break; - if (scriptfile_getnumber(script,&fnoo)) break; //x-center - if (scriptfile_getnumber(script,&fnoo)) break; //y-center - if (scriptfile_getnumber(script,&fnoo)) break; //x-size - if (scriptfile_getnumber(script,&fnoo)) break; //y-size - if (scriptfile_getstring(script,&fn)) break; - - i = pathsearchmode; - pathsearchmode = 1; - if (findfrompath(fn,&tfn) < 0) - { - char buf[BMAX_PATH]; - - Bstrcpy(buf,fn); - kzfindfilestart(buf); - if (!kzfindfile(buf)) - { - initprintf("Error: file '%s' does not exist\n",fn); - pathsearchmode = i; - break; - } - } - else Bfree(tfn); - pathsearchmode = i; - - hicsetsubsttex(tile,pal,fn,-1.0,1.0,1.0,1.0,1.0,0); - } - break; - case T_DEFINESKYBOX: - { - int32_t tile,pal,i,ii; - char *fn[6],happy=1,*tfn = NULL; - - if (scriptfile_getsymbol(script,&tile)) break; - if (scriptfile_getsymbol(script,&pal)) break; - if (scriptfile_getsymbol(script,&i)) break; //future expansion - for (i=0; i<6; i++) - { - if (scriptfile_getstring(script,&fn[i])) break; //grab the 6 faces - ii = pathsearchmode; - pathsearchmode = 1; - if (findfrompath(fn[i],&tfn) < 0) - { - char buf[BMAX_PATH]; - - Bstrcpy(buf,fn[i]); - kzfindfilestart(buf); - if (!kzfindfile(buf)) - { - initprintf("Error: file '%s' does not exist\n",fn[i]); - happy = 0; - } - } - else Bfree(tfn); - pathsearchmode = ii; - } - if (i < 6 || !happy) break; - hicsetskybox(tile,pal,fn); - } - break; - case T_DEFINETINT: - { - int32_t pal, r,g,b,f; - - if (scriptfile_getsymbol(script,&pal)) break; - if (scriptfile_getnumber(script,&r)) break; - if (scriptfile_getnumber(script,&g)) break; - if (scriptfile_getnumber(script,&b)) break; - if (scriptfile_getnumber(script,&f)) break; //effects - hicsetpalettetint(pal,r,g,b,f); - } - break; - case T_ALPHAHACK: - { - int32_t tile; - double alpha; - - if (scriptfile_getsymbol(script,&tile)) break; - if (scriptfile_getdouble(script,&alpha)) break; -#ifdef USE_OPENGL - if ((uint32_t)tile < MAXTILES) alphahackarray[tile] = alpha; -#endif - } - break; - case T_ALPHAHACKRANGE: - { - int32_t tilenume1,tilenume2,i; - double alpha; - - if (scriptfile_getsymbol(script,&tilenume1)) break; - if (scriptfile_getsymbol(script,&tilenume2)) break; - if (scriptfile_getdouble(script,&alpha)) break; - if (tilenume2 < tilenume1) - { - initprintf("Warning: backwards tile range on line %s:%d\n", script->filename, scriptfile_getlinum(script,cmdtokptr)); - i = tilenume2; - tilenume2 = tilenume1; - tilenume1 = i; - } -#ifdef USE_OPENGL - if ((tilenume1 >= 0 && tilenume1 < MAXTILES) && (tilenume2 >= 0 && tilenume2 < MAXTILES)) - { - for (i=tilenume1; i<=tilenume2; i++) - { - if ((uint32_t)i < MAXTILES) - alphahackarray[i] = alpha; - } - } -#endif - } - break; - case T_SPRITECOL: - { - int32_t tile,col,col2; - - if (scriptfile_getsymbol(script,&tile)) break; - if (scriptfile_getnumber(script,&col)) break; - if (scriptfile_getnumber(script,&col2)) break; - if ((uint32_t)tile < MAXTILES) - { - spritecol2d[tile][0] = col; - spritecol2d[tile][1] = col2; - } - } - break; - case T_2DCOL: - { - int32_t col,b,g,r; - - if (scriptfile_getnumber(script,&col)) break; - if (scriptfile_getnumber(script,&r)) break; - if (scriptfile_getnumber(script,&g)) break; - if (scriptfile_getnumber(script,&b)) break; - - if (col < 256) - { - vgapal16[col*4+0] = b; // blue - vgapal16[col*4+1] = g; // green - vgapal16[col*4+2] = r; // red - } - } - break; - case T_FOGPAL: - { - int32_t p,r,g,b,j; - char tempbuf[256]; - - if (scriptfile_getnumber(script,&p)) break; - if (scriptfile_getnumber(script,&r)) break; - if (scriptfile_getnumber(script,&g)) break; - if (scriptfile_getnumber(script,&b)) break; - - for (j = 0; j < 256; j++) - tempbuf[j] = j; - makepalookup(p, tempbuf, r, g, b, 1); - } - break; - case T_LOADGRP: - { - char *bs; - scriptfile_getstring(script,&bs); - } - break; - case T_CACHESIZE: - { - int32_t j; - - if (scriptfile_getnumber(script,&j)) break; - } - break; - case T_SETUPTILE: - { - int32_t tile, tmp; - - if (scriptfile_getsymbol(script,&tile)) break; - if (tile >= MAXTILES)break; - if (scriptfile_getsymbol(script,&h_xsize[tile])) break; - if (scriptfile_getsymbol(script,&h_ysize[tile])) break; - if (scriptfile_getsymbol(script,&tmp)) break; - h_xoffs[tile]=tmp; - if (scriptfile_getsymbol(script,&tmp)) break; - h_yoffs[tile]=tmp; - break; - } - case T_SETUPTILERANGE: - { - int32_t tile1,tile2,xsiz,ysiz,xoffs,yoffs,i; - - if (scriptfile_getnumber(script,&tile1)) break; - if (scriptfile_getnumber(script,&tile2)) break; - if (scriptfile_getnumber(script,&xsiz)) break; - if (scriptfile_getnumber(script,&ysiz)) break; - if (scriptfile_getsymbol(script,&xoffs)) break; - if (scriptfile_getsymbol(script,&yoffs)) break; - if (tile2 < tile1) - { - initprintf("Warning: backwards tile range on line %s:%d\n", script->filename, scriptfile_getlinum(script,cmdtokptr)); - i = tile2; - tile2 = tile1; - tile1 = i; - } - if ((tile1 >= 0 && tile1 < MAXTILES) && (tile2 >= 0 && tile2 < MAXTILES)) - { - for (i=tile1; i<=tile2; i++) - { - if ((uint32_t)i < MAXTILES) - { - h_xsize[i] = xsiz; - h_ysize[i] = ysiz; - h_xoffs[i] = xoffs; - h_yoffs[i] = yoffs; - } - } - } - break; - } - case T_ANIMTILERANGE: - { - int32_t tile1, tile2, spd, type, i; - - if (scriptfile_getsymbol(script,&tile1)) break; - if (tile1 >= MAXTILES)break; - if (scriptfile_getsymbol(script,&tile2)) break; - if (tile2 >= MAXTILES)break; - if (scriptfile_getsymbol(script,&spd)) break; - if (scriptfile_getsymbol(script,&type)) break; - if (tile2 < tile1) - { - initprintf("Warning: backwards tile range on line %s:%d\n", script->filename, scriptfile_getlinum(script,cmdtokptr)); - i = tile2; - tile2 = tile1; - tile1 = i; - } - picanm[tile1]=(picanm[tile1]&0xffffff3f)+(spd<<24)+(type<<6)+tile2-tile1; - break; - } - case T_TILEFROMTEXTURE: - { - char *texturetokptr = script->ltextptr, *textureend, *fn = NULL, *tfn = NULL, *ftd = NULL; - int32_t tile=-1, token, i; - int32_t alphacut = 255; - int32_t xoffset = 0, yoffset = 0, goodtogo=0; - - static const tokenlist tilefromtexturetokens[] = - { - { "file", T_FILE }, - { "name", T_FILE }, - { "alphacut", T_ALPHACUT }, - { "xoffset", T_XOFFSET }, - { "xoff", T_XOFFSET }, - { "yoffset", T_YOFFSET }, - { "yoff", T_YOFFSET }, - }; - - if (scriptfile_getsymbol(script,&tile)) break; - if (scriptfile_getbraces(script,&textureend)) break; - while (script->textptr < textureend) - { - token = getatoken(script,tilefromtexturetokens,sizeof(tilefromtexturetokens)/sizeof(tokenlist)); - switch (token) - { - case T_FILE: - scriptfile_getstring(script,&fn); break; - case T_ALPHACUT: - scriptfile_getsymbol(script,&alphacut); break; - case T_XOFFSET: - scriptfile_getsymbol(script,&xoffset); break; - case T_YOFFSET: - scriptfile_getsymbol(script,&yoffset); break; - default: - break; - } - - if ((unsigned)tile > (unsigned)MAXTILES) break; // message is printed later - if (!fn) - { - initprintf("Error: missing 'file name' for tilefromtexture definition near line %s:%d\n", - script->filename, scriptfile_getlinum(script,texturetokptr)); - break; - } - if (alphacut > 255) alphacut = 255; - if (alphacut < 0) alphacut = 0; - - i = pathsearchmode; - pathsearchmode = 1; - if (findfrompath(fn,&tfn) < 0) - { - char buf[BMAX_PATH]; - - Bstrcpy(buf,fn); - kzfindfilestart(buf); - if (!kzfindfile(buf)) - { - initprintf("Error: file '%s' does not exist\n",fn); - pathsearchmode = i; - break; - } - } - else Bfree(tfn); - pathsearchmode = i; - goodtogo = 1; - } - - if ((unsigned)tile >= (unsigned)MAXTILES) - { - initprintf("Error: missing or invalid 'tile number' for texture definition near line %s:%d\n", - script->filename, scriptfile_getlinum(script,texturetokptr)); - break; - } - - if (goodtogo) - { - int32_t xsiz, ysiz, j; - int32_t *picptr = NULL; - palette_t *col; - - kpzload(fn, (intptr_t *)&picptr, &j, &xsiz, &ysiz); - - // initprintf("got bpl %d xsiz %d ysiz %d\n",bpl,xsiz,ysiz); - - ftd = Bmalloc(xsiz*ysiz); - faketiledata[tile] = Bmalloc(xsiz*ysiz); - - for (i=xsiz-1; i>=0; i--) - { - for (j=ysiz-1; j>=0; j--) - { - col = (palette_t *)&picptr[j*xsiz+i]; - if (col->f < alphacut) { ftd[i*ysiz+j] = 255; continue; } - ftd[i*ysiz+j] = getclosestcol(col->b>>2,col->g>>2,col->r>>2); - } - // initprintf(" %d %d %d %d\n",col->r,col->g,col->b,col->f); - } - - if (xsiz > 0 && ysiz > 0) - { - tilesizx[tile] = xsiz; - tilesizy[tile] = ysiz; - - faketilesiz[tile] = qlz_compress(ftd, faketiledata[tile], xsiz*ysiz, state_compress); - - xoffset = clamp(xoffset, -128, 127); - picanm[tile] = (picanm[tile]&0xffff00ff)+((xoffset&255)<<8); - yoffset = clamp(yoffset, -128, 127); - picanm[tile] = (picanm[tile]&0xff00ffff)+((yoffset&255)<<16); - - j = 15; while ((j > 1) && (pow2long[j] > xsiz)) j--; - picsiz[tile] = ((uint8_t)j); - j = 15; while ((j > 1) && (pow2long[j] > ysiz)) j--; - picsiz[tile] += ((uint8_t)(j<<4)); - } - - Bfree(picptr); - Bfree(ftd); - } - } - break; - case T_IMPORTTILE: - { - int32_t tile, xsiz, ysiz, j, i; - int32_t *picptr = NULL; - int32_t bpl; - char *fn, *ftd = NULL; - palette_t *col; - - if (scriptfile_getsymbol(script,&tile)) break; - if (scriptfile_getstring(script,&fn)) break; - - kpzload(fn, (intptr_t *)&picptr, &bpl, &xsiz, &ysiz); - -// initprintf("got bpl %d xsiz %d ysiz %d\n",bpl,xsiz,ysiz); - - ftd = Bmalloc(xsiz*ysiz); - faketiledata[tile] = Bmalloc(xsiz*ysiz); - - for (i=xsiz-1; i>=0; i--) - { - for (j=ysiz-1; j>=0; j--) - { - col = (palette_t *)&picptr[j*xsiz+i]; - if (col->f != 255) { ftd[i*ysiz+j] = 255; continue; } - ftd[i*ysiz+j] = getclosestcol(col->b>>2,col->g>>2,col->r>>2); - } -// initprintf(" %d %d %d %d\n",col->r,col->g,col->b,col->f); - } - - if (xsiz > 0 && ysiz > 0) - { - tilesizx[tile] = xsiz; - tilesizy[tile] = ysiz; - faketilesiz[tile] = qlz_compress(ftd, faketiledata[tile], xsiz*ysiz, state_compress); - picanm[tile] = 0; - - j = 15; while ((j > 1) && (pow2long[j] > xsiz)) j--; - picsiz[tile] = ((uint8_t)j); - j = 15; while ((j > 1) && (pow2long[j] > ysiz)) j--; - picsiz[tile] += ((uint8_t)(j<<4)); - } - - Bfree(picptr); - Bfree(ftd); - break; - } - case T_DUMMYTILE: - { - int32_t tile, xsiz, ysiz, j; - - if (scriptfile_getsymbol(script,&tile)) break; - if (scriptfile_getsymbol(script,&xsiz)) break; - if (scriptfile_getsymbol(script,&ysiz)) break; - - if (xsiz > 0 && ysiz > 0) - { - tilesizx[tile] = xsiz; - tilesizy[tile] = ysiz; - faketilesiz[tile] = -1; - picanm[tile] = 0; - - j = 15; while ((j > 1) && (pow2long[j] > xsiz)) j--; - picsiz[tile] = ((uint8_t)j); - j = 15; while ((j > 1) && (pow2long[j] > ysiz)) j--; - picsiz[tile] += ((uint8_t)(j<<4)); - } - - break; - } - case T_DUMMYTILERANGE: - { - int32_t tile1,tile2,xsiz,ysiz,i,j; - - if (scriptfile_getnumber(script,&tile1)) break; - if (scriptfile_getnumber(script,&tile2)) break; - if (scriptfile_getnumber(script,&xsiz)) break; - if (scriptfile_getnumber(script,&ysiz)) break; - if (tile2 < tile1) - { - initprintf("Warning: backwards tile range on line %s:%d\n", script->filename, scriptfile_getlinum(script,cmdtokptr)); - i = tile2; - tile2 = tile1; - tile1 = i; - } - if ((tile1 >= 0 && tile1 < MAXTILES) && (tile2 >= 0 && tile2 < MAXTILES)) - { - for (i=tile1; i<=tile2; i++) - { - if ((uint32_t)i < MAXTILES) - { - if (xsiz > 0 && ysiz > 0) - { - tilesizx[i] = xsiz; - tilesizy[i] = ysiz; - faketilesiz[i] = -1; - picanm[i] = 0; - - j = 15; while ((j > 1) && (pow2long[j] > xsiz)) j--; - picsiz[i] = ((uint8_t)j); - j = 15; while ((j > 1) && (pow2long[j] > ysiz)) j--; - picsiz[i] += ((uint8_t)(j<<4)); - } - } - } - } - break; - } - - case T_DEFINEMODEL: - { - char *modelfn; - double scale; - int32_t shadeoffs; - - if (scriptfile_getstring(script,&modelfn)) break; - if (scriptfile_getdouble(script,&scale)) break; - if (scriptfile_getnumber(script,&shadeoffs)) break; - -#ifdef USE_OPENGL - lastmodelid = md_loadmodel(modelfn); - if (lastmodelid < 0) - { - initprintf("Warning: Failed loading MD2/MD3 model \"%s\"\n", modelfn); - break; - } - md_setmisc(lastmodelid,(float)scale, shadeoffs,0.0,0); -#endif - modelskin = lastmodelskin = 0; - seenframe = 0; - } - break; - case T_DEFINEMODELFRAME: - { - char *framename; -#ifdef USE_OPENGL - char happy=1; -#endif - int32_t ftilenume, ltilenume, tilex; - - if (scriptfile_getstring(script,&framename)) break; - if (scriptfile_getnumber(script,&ftilenume)) break; //first tile number - if (scriptfile_getnumber(script,<ilenume)) break; //last tile number (inclusive) - if (ltilenume < ftilenume) - { - initprintf("Warning: backwards tile range on line %s:%d\n", script->filename, scriptfile_getlinum(script,cmdtokptr)); - tilex = ftilenume; - ftilenume = ltilenume; - ltilenume = tilex; - } - - if (lastmodelid < 0) - { - initprintf("Warning: Ignoring frame definition.\n"); - break; - } -#ifdef USE_OPENGL - for (tilex = ftilenume; tilex <= ltilenume && happy; tilex++) - { - switch (md_defineframe(lastmodelid, framename, tilex, max(0,modelskin), 0.0f,0)) - { - case 0: - break; - case -1: - happy = 0; break; // invalid model id!? - case -2: - initprintf("Invalid tile number on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - happy = 0; - break; - case -3: - initprintf("Invalid frame name on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - happy = 0; - break; - } - } -#endif - seenframe = 1; - } - break; - case T_DEFINEMODELANIM: - { - char *startframe, *endframe; - int32_t flags; - double dfps; - - if (scriptfile_getstring(script,&startframe)) break; - if (scriptfile_getstring(script,&endframe)) break; - if (scriptfile_getdouble(script,&dfps)) break; //animation frame rate - if (scriptfile_getnumber(script,&flags)) break; - - if (lastmodelid < 0) - { - initprintf("Warning: Ignoring animation definition.\n"); - break; - } -#ifdef USE_OPENGL - switch (md_defineanimation(lastmodelid, startframe, endframe, (int32_t)(dfps*(65536.0*.001)), flags)) - { - case 0: - break; - case -1: - break; // invalid model id!? - case -2: - initprintf("Invalid starting frame name on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - case -3: - initprintf("Invalid ending frame name on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - case -4: - initprintf("Out of memory on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } -#endif - } - break; - case T_DEFINEMODELSKIN: - { - int32_t palnum; - char *skinfn; - - if (scriptfile_getsymbol(script,&palnum)) break; - if (scriptfile_getstring(script,&skinfn)) break; //skin filename - - // if we see a sequence of definemodelskin, then a sequence of definemodelframe, - // and then a definemodelskin, we need to increment the skin counter. - // - // definemodel "mymodel.md2" 1 1 - // definemodelskin 0 "normal.png" // skin 0 - // definemodelskin 21 "normal21.png" - // definemodelframe "foo" 1000 1002 // these use skin 0 - // definemodelskin 0 "wounded.png" // skin 1 - // definemodelskin 21 "wounded21.png" - // definemodelframe "foo2" 1003 1004 // these use skin 1 - // selectmodelskin 0 // resets to skin 0 - // definemodelframe "foo3" 1005 1006 // these use skin 0 - if (seenframe) { modelskin = ++lastmodelskin; } - seenframe = 0; - -#ifdef USE_OPENGL - switch (md_defineskin(lastmodelid, skinfn, palnum, max(0,modelskin), 0, 0.0f, 1.0f, 1.0f)) - { - case 0: - break; - case -1: - break; // invalid model id!? - case -2: - initprintf("Invalid skin filename on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - case -3: - initprintf("Invalid palette number on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - case -4: - initprintf("Out of memory on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } -#endif - } - break; - case T_SELECTMODELSKIN: - { - if (scriptfile_getsymbol(script,&modelskin)) break; - } - break; - case T_DEFINEVOXEL: - { - char *fn; - - if (scriptfile_getstring(script,&fn)) break; //voxel filename - - if (nextvoxid == MAXVOXELS) - { - initprintf("Maximum number of voxels already defined.\n"); - break; - } - - if (qloadkvx(nextvoxid, fn)) - { - initprintf("Failure loading voxel file \"%s\"\n",fn); - break; - } - - lastvoxid = nextvoxid++; - } - break; - case T_DEFINEVOXELTILES: - { - int32_t ftilenume, ltilenume, tilex; - - if (scriptfile_getnumber(script,&ftilenume)) break; //1st tile # - if (scriptfile_getnumber(script,<ilenume)) break; //last tile # - - if (ltilenume < ftilenume) - { - initprintf("Warning: backwards tile range on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - tilex = ftilenume; - ftilenume = ltilenume; - ltilenume = tilex; - } - if (ltilenume < 0 || ftilenume >= MAXTILES) - { - initprintf("Invalid tile range on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } - - if (lastvoxid < 0) - { - initprintf("Warning: Ignoring voxel tiles definition.\n"); - break; - } - - for (tilex = ftilenume; tilex <= ltilenume; tilex++) - tiletovox[tilex] = lastvoxid; - } - break; - - // NEW (ENCOURAGED) DEFINITION SYNTAX - case T_MODEL: - { - char *modelend, *modelfn; - double scale=1.0, mzadd=0.0; - int32_t shadeoffs=0, pal=0, flags=0; - - static const tokenlist modeltokens[] = - { - { "scale", T_SCALE }, - { "shade", T_SHADE }, - { "zadd", T_ZADD }, - { "frame", T_FRAME }, - { "anim", T_ANIM }, - { "skin", T_SKIN }, - { "detail", T_DETAIL }, - { "glow", T_GLOW }, - { "specular", T_SPECULAR }, - { "normal", T_NORMAL }, - { "hud", T_HUD }, - { "flags", T_FLAGS }, - }; - - modelskin = lastmodelskin = 0; - seenframe = 0; - - if (scriptfile_getstring(script,&modelfn)) break; - if (scriptfile_getbraces(script,&modelend)) break; -#ifdef USE_OPENGL - lastmodelid = md_loadmodel(modelfn); - if (lastmodelid < 0) - { - initprintf("Warning: Failed loading MD2/MD3 model \"%s\"\n", modelfn); - script->textptr = modelend+1; - break; - } -#endif - while (script->textptr < modelend) - { - int32_t token = getatoken(script,modeltokens,sizeof(modeltokens)/sizeof(tokenlist)); - switch (token) - { - //case T_ERROR: initprintf("Error on line %s:%d in model tokens\n", script->filename,script->linenum); break; - case T_SCALE: - scriptfile_getdouble(script,&scale); break; - case T_SHADE: - scriptfile_getnumber(script,&shadeoffs); break; - case T_ZADD: - scriptfile_getdouble(script,&mzadd); break; - case T_FLAGS: - scriptfile_getnumber(script,&flags); break; - case T_FRAME: - { - char *frametokptr = script->ltextptr; - char *frameend, *framename = 0, happy=1; - int32_t ftilenume = -1, ltilenume = -1, tilex = 0; - double smoothduration = 0.1f; - - static const tokenlist modelframetokens[] = - { - { "pal", T_PAL }, - { "frame", T_FRAME }, - { "name", T_FRAME }, - { "tile", T_TILE }, - { "tile0", T_TILE0 }, - { "tile1", T_TILE1 }, - { "smoothduration", T_SMOOTHDURATION }, - }; - - if (scriptfile_getbraces(script,&frameend)) break; - while (script->textptr < frameend) - { - switch (getatoken(script,modelframetokens,sizeof(modelframetokens)/sizeof(tokenlist))) - { - case T_PAL: - scriptfile_getnumber(script,&pal); break; - case T_FRAME: - scriptfile_getstring(script,&framename); break; - case T_TILE: - scriptfile_getsymbol(script,&ftilenume); ltilenume = ftilenume; break; - case T_TILE0: - scriptfile_getsymbol(script,&ftilenume); break; //first tile number - case T_TILE1: - scriptfile_getsymbol(script,<ilenume); break; //last tile number (inclusive) - case T_SMOOTHDURATION: - scriptfile_getdouble(script,&smoothduration); break; - } - } - - if (ftilenume < 0) initprintf("Error: missing 'first tile number' for frame definition near line %s:%d\n", script->filename, scriptfile_getlinum(script,frametokptr)), happy = 0; - if (ltilenume < 0) initprintf("Error: missing 'last tile number' for frame definition near line %s:%d\n", script->filename, scriptfile_getlinum(script,frametokptr)), happy = 0; - if (!happy) break; - - if (ltilenume < ftilenume) - { - initprintf("Warning: backwards tile range on line %s:%d\n", script->filename, scriptfile_getlinum(script,frametokptr)); - tilex = ftilenume; - ftilenume = ltilenume; - ltilenume = tilex; - } - - if (lastmodelid < 0) - { - initprintf("Warning: Ignoring frame definition.\n"); - break; - } -#ifdef USE_OPENGL - for (tilex = ftilenume; tilex <= ltilenume && happy; tilex++) - { - switch (md_defineframe(lastmodelid, framename, tilex, max(0,modelskin), smoothduration,pal)) - { - case 0: - break; - case -1: - happy = 0; break; // invalid model id!? - case -2: - initprintf("Invalid tile number on line %s:%d\n", - script->filename, scriptfile_getlinum(script,frametokptr)); - happy = 0; - break; - case -3: - initprintf("Invalid frame name on line %s:%d\n", - script->filename, scriptfile_getlinum(script,frametokptr)); - happy = 0; - break; - } - } -#endif - seenframe = 1; - } - break; - case T_ANIM: - { - char *animtokptr = script->ltextptr; - char *animend, *startframe = 0, *endframe = 0, happy=1; - int32_t flags = 0; - double dfps = 1.0; - - static const tokenlist modelanimtokens[] = - { - { "frame0", T_FRAME0 }, - { "frame1", T_FRAME1 }, - { "fps", T_FPS }, - { "flags", T_FLAGS }, - }; - - if (scriptfile_getbraces(script,&animend)) break; - while (script->textptr < animend) - { - switch (getatoken(script,modelanimtokens,sizeof(modelanimtokens)/sizeof(tokenlist))) - { - case T_FRAME0: - scriptfile_getstring(script,&startframe); break; - case T_FRAME1: - scriptfile_getstring(script,&endframe); break; - case T_FPS: - scriptfile_getdouble(script,&dfps); break; //animation frame rate - case T_FLAGS: - scriptfile_getsymbol(script,&flags); break; - } - } - - if (!startframe) initprintf("Error: missing 'start frame' for anim definition near line %s:%d\n", script->filename, scriptfile_getlinum(script,animtokptr)), happy = 0; - if (!endframe) initprintf("Error: missing 'end frame' for anim definition near line %s:%d\n", script->filename, scriptfile_getlinum(script,animtokptr)), happy = 0; - if (!happy) break; - - if (lastmodelid < 0) - { - initprintf("Warning: Ignoring animation definition.\n"); - break; - } -#ifdef USE_OPENGL - switch (md_defineanimation(lastmodelid, startframe, endframe, (int32_t)(dfps*(65536.0*.001)), flags)) - { - case 0: - break; - case -1: - break; // invalid model id!? - case -2: - initprintf("Invalid starting frame name on line %s:%d\n", - script->filename, scriptfile_getlinum(script,animtokptr)); - break; - case -3: - initprintf("Invalid ending frame name on line %s:%d\n", - script->filename, scriptfile_getlinum(script,animtokptr)); - break; - case -4: - initprintf("Out of memory on line %s:%d\n", - script->filename, scriptfile_getlinum(script,animtokptr)); - break; - } -#endif - } - break; - case T_SKIN: case T_DETAIL: case T_GLOW: case T_SPECULAR: case T_NORMAL: - { - char *skintokptr = script->ltextptr; - char *skinend, *skinfn = 0; - int32_t palnum = 0, surfnum = 0; - double param = 1.0, specpower = 1.0, specfactor = 1.0; - - static const tokenlist modelskintokens[] = - { - { "pal", T_PAL }, - { "file", T_FILE }, - { "surf", T_SURF }, - { "surface", T_SURF }, - { "intensity", T_PARAM }, - { "scale", T_PARAM }, - { "detailscale", T_PARAM }, - { "specpower", T_SPECPOWER }, { "parallaxscale", T_SPECPOWER }, - { "specfactor", T_SPECFACTOR }, { "parallaxbias", T_SPECFACTOR }, - }; - - if (scriptfile_getbraces(script,&skinend)) break; - while (script->textptr < skinend) - { - switch (getatoken(script,modelskintokens,sizeof(modelskintokens)/sizeof(tokenlist))) - { - case T_PAL: - scriptfile_getsymbol(script,&palnum); break; - case T_PARAM: - scriptfile_getdouble(script,¶m); break; - case T_SPECPOWER: - scriptfile_getdouble(script,&specpower); break; - case T_SPECFACTOR: - scriptfile_getdouble(script,&specfactor); break; - case T_FILE: - scriptfile_getstring(script,&skinfn); break; //skin filename - case T_SURF: - scriptfile_getnumber(script,&surfnum); break; - } - } - - if (!skinfn) - { - initprintf("Error: missing 'skin filename' for skin definition near line %s:%d\n", script->filename, scriptfile_getlinum(script,skintokptr)); - break; - } - - if (seenframe) { modelskin = ++lastmodelskin; } - seenframe = 0; - - switch (token) - { - case T_DETAIL: - palnum = DETAILPAL; - param = 1.0f / param; - break; - case T_GLOW: - palnum = GLOWPAL; - break; - case T_SPECULAR: - palnum = SPECULARPAL; - break; - case T_NORMAL: - palnum = NORMALPAL; - break; - } - -#ifdef USE_OPENGL - switch (md_defineskin(lastmodelid, skinfn, palnum, max(0,modelskin), surfnum, param, specpower, specfactor)) - { - case 0: - break; - case -1: - break; // invalid model id!? - case -2: - initprintf("Invalid skin filename on line %s:%d\n", - script->filename, scriptfile_getlinum(script,skintokptr)); - break; - case -3: - initprintf("Invalid palette number on line %s:%d\n", - script->filename, scriptfile_getlinum(script,skintokptr)); - break; - case -4: - initprintf("Out of memory on line %s:%d\n", - script->filename, scriptfile_getlinum(script,skintokptr)); - break; - } -#endif - } - break; - case T_HUD: - { - char *hudtokptr = script->ltextptr; - char happy=1, *frameend; - int32_t ftilenume = -1, ltilenume = -1, tilex = 0, flags = 0, fov = -1; - double xadd = 0.0, yadd = 0.0, zadd = 0.0, angadd = 0.0; - - static const tokenlist modelhudtokens[] = - { - { "tile", T_TILE }, - { "tile0", T_TILE0 }, - { "tile1", T_TILE1 }, - { "xadd", T_XADD }, - { "yadd", T_YADD }, - { "zadd", T_ZADD }, - { "angadd", T_ANGADD }, - { "fov", T_FOV }, - { "hide", T_HIDE }, - { "nobob", T_NOBOB }, - { "flipped",T_FLIPPED}, - { "nodepth",T_NODEPTH}, - }; - - if (scriptfile_getbraces(script,&frameend)) break; - while (script->textptr < frameend) - { - switch (getatoken(script,modelhudtokens,sizeof(modelhudtokens)/sizeof(tokenlist))) - { - case T_TILE: - scriptfile_getsymbol(script,&ftilenume); ltilenume = ftilenume; break; - case T_TILE0: - scriptfile_getsymbol(script,&ftilenume); break; //first tile number - case T_TILE1: - scriptfile_getsymbol(script,<ilenume); break; //last tile number (inclusive) - case T_XADD: - scriptfile_getdouble(script,&xadd); break; - case T_YADD: - scriptfile_getdouble(script,&yadd); break; - case T_ZADD: - scriptfile_getdouble(script,&zadd); break; - case T_ANGADD: - scriptfile_getdouble(script,&angadd); break; - case T_FOV: - scriptfile_getsymbol(script,&fov); break; - case T_HIDE: - flags |= 1; break; - case T_NOBOB: - flags |= 2; break; - case T_FLIPPED: - flags |= 4; break; - case T_NODEPTH: - flags |= 8; break; - } - } - - if (ftilenume < 0) initprintf("Error: missing 'first tile number' for hud definition near line %s:%d\n", script->filename, scriptfile_getlinum(script,hudtokptr)), happy = 0; - if (ltilenume < 0) initprintf("Error: missing 'last tile number' for hud definition near line %s:%d\n", script->filename, scriptfile_getlinum(script,hudtokptr)), happy = 0; - if (!happy) break; - - if (ltilenume < ftilenume) - { - initprintf("Warning: backwards tile range on line %s:%d\n", script->filename, scriptfile_getlinum(script,hudtokptr)); - tilex = ftilenume; - ftilenume = ltilenume; - ltilenume = tilex; - } - - if (lastmodelid < 0) - { - initprintf("Warning: Ignoring frame definition.\n"); - break; - } -#ifdef USE_OPENGL - for (tilex = ftilenume; tilex <= ltilenume && happy; tilex++) - { - switch (md_definehud(lastmodelid, tilex, xadd, yadd, zadd, angadd, flags, fov)) - { - case 0: - break; - case -1: - happy = 0; break; // invalid model id!? - case -2: - initprintf("Invalid tile number on line %s:%d\n", - script->filename, scriptfile_getlinum(script,hudtokptr)); - happy = 0; - break; - case -3: - initprintf("Invalid frame name on line %s:%d\n", - script->filename, scriptfile_getlinum(script,hudtokptr)); - happy = 0; - break; - } - } -#endif - } - break; - } - } - -#ifdef USE_OPENGL - md_setmisc(lastmodelid,(float)scale,shadeoffs,(float)mzadd,flags); -#endif - - modelskin = lastmodelskin = 0; - seenframe = 0; - - } - break; - case T_VOXEL: - { - char *voxeltokptr = script->ltextptr; - char *fn, *modelend; - int32_t tile0 = MAXTILES, tile1 = -1, tilex = -1; - - static const tokenlist voxeltokens[] = - { - { "tile", T_TILE }, - { "tile0", T_TILE0 }, - { "tile1", T_TILE1 }, - { "scale", T_SCALE }, - }; - - if (scriptfile_getstring(script,&fn)) break; //voxel filename - if (nextvoxid == MAXVOXELS) { initprintf("Maximum number of voxels already defined.\n"); break; } - if (qloadkvx(nextvoxid, fn)) { initprintf("Failure loading voxel file \"%s\"\n",fn); break; } - lastvoxid = nextvoxid++; - - if (scriptfile_getbraces(script,&modelend)) break; - while (script->textptr < modelend) - { - switch (getatoken(script,voxeltokens,sizeof(voxeltokens)/sizeof(tokenlist))) - { - //case T_ERROR: initprintf("Error on line %s:%d in voxel tokens\n", script->filename,linenum); break; - case T_TILE: - scriptfile_getsymbol(script,&tilex); - if ((uint32_t)tilex < MAXTILES) tiletovox[tilex] = lastvoxid; - else initprintf("Invalid tile number on line %s:%d\n",script->filename, scriptfile_getlinum(script,voxeltokptr)); - break; - case T_TILE0: - scriptfile_getsymbol(script,&tile0); break; //1st tile # - case T_TILE1: - scriptfile_getsymbol(script,&tile1); - if (tile0 > tile1) - { - initprintf("Warning: backwards tile range on line %s:%d\n", script->filename, scriptfile_getlinum(script,voxeltokptr)); - tilex = tile0; tile0 = tile1; tile1 = tilex; - } - if ((tile1 < 0) || (tile0 >= MAXTILES)) - { initprintf("Invalid tile range on line %s:%d\n",script->filename, scriptfile_getlinum(script,voxeltokptr)); break; } - for (tilex=tile0; tilex<=tile1; tilex++) tiletovox[tilex] = lastvoxid; - break; //last tile number (inclusive) - case T_SCALE: - { - double scale=1.0; - scriptfile_getdouble(script,&scale); - voxscale[lastvoxid] = (int32_t)(65536*scale); - break; - } - } - } - lastvoxid = -1; - } - break; - case T_SKYBOX: - { - char *skyboxtokptr = script->ltextptr; - char *fn[6] = {0,0,0,0,0,0}, *modelend, happy=1, *tfn = NULL; - int32_t i, tile = -1, pal = 0,ii; - - static const tokenlist skyboxtokens[] = - { - { "tile" ,T_TILE }, - { "pal" ,T_PAL }, - { "ft" ,T_FRONT },{ "front" ,T_FRONT },{ "forward",T_FRONT }, - { "rt" ,T_RIGHT },{ "right" ,T_RIGHT }, - { "bk" ,T_BACK },{ "back" ,T_BACK }, - { "lf" ,T_LEFT },{ "left" ,T_LEFT },{ "lt" ,T_LEFT }, - { "up" ,T_TOP },{ "top" ,T_TOP },{ "ceiling",T_TOP },{ "ceil" ,T_TOP }, - { "dn" ,T_BOTTOM },{ "bottom" ,T_BOTTOM },{ "floor" ,T_BOTTOM },{ "down" ,T_BOTTOM } - }; - - if (scriptfile_getbraces(script,&modelend)) break; - while (script->textptr < modelend) - { - switch (getatoken(script,skyboxtokens,sizeof(skyboxtokens)/sizeof(tokenlist))) - { - //case T_ERROR: initprintf("Error on line %s:%d in skybox tokens\n",script->filename,linenum); break; - case T_TILE: - scriptfile_getsymbol(script,&tile); break; - case T_PAL: - scriptfile_getsymbol(script,&pal); break; - case T_FRONT: - scriptfile_getstring(script,&fn[0]); break; - case T_RIGHT: - scriptfile_getstring(script,&fn[1]); break; - case T_BACK: - scriptfile_getstring(script,&fn[2]); break; - case T_LEFT: - scriptfile_getstring(script,&fn[3]); break; - case T_TOP: - scriptfile_getstring(script,&fn[4]); break; - case T_BOTTOM: - scriptfile_getstring(script,&fn[5]); break; - } - } - - if (tile < 0) initprintf("Error: missing 'tile number' for skybox definition near line %s:%d\n", script->filename, scriptfile_getlinum(script,skyboxtokptr)), happy=0; - for (i=0; i<6; i++) - { - if (!fn[i]) initprintf("Error: missing '%s filename' for skybox definition near line %s:%d\n", skyfaces[i], script->filename, scriptfile_getlinum(script,skyboxtokptr)), happy = 0; - // FIXME? - ii = pathsearchmode; - pathsearchmode = 1; - if (findfrompath(fn[i],&tfn) < 0) - { - char buf[BMAX_PATH]; - - Bstrcpy(buf,fn[i]); - kzfindfilestart(buf); - if (!kzfindfile(buf)) - { - initprintf("Error: file '%s' does not exist\n",fn[i]); - happy = 0; - } - } - else Bfree(tfn); - pathsearchmode = ii; - } - if (!happy) break; - - hicsetskybox(tile,pal,fn); - } - break; - case T_HIGHPALOOKUP: - { - char *highpaltokptr = script->ltextptr; - int32_t basepal=-1, pal=-1, oldpathsearchmode; - char *fn = NULL, *tfn = NULL; - char *highpalend; -#ifdef POLYMER - int32_t fd; - char *highpaldata; -#endif - static const tokenlist highpaltokens[] = - { - { "basepal", T_BASEPAL }, - { "pal", T_PAL }, - { "file", T_FILE } - }; - - if (scriptfile_getbraces(script,&highpalend)) break; - while (script->textptr < highpalend) - { - switch (getatoken(script,highpaltokens,sizeof(highpaltokens)/sizeof(tokenlist))) - { - case T_BASEPAL: - scriptfile_getsymbol(script,&basepal); break; - case T_PAL: - scriptfile_getsymbol(script,&pal); break; - case T_FILE: - scriptfile_getstring(script,&fn); break; - } - } - if ((unsigned)basepal >= ((unsigned)basepalcount)) - { - initprintf("Error: missing or invalid 'base palette number' for highpalookup definition " - "near line %s:%d\n", script->filename, scriptfile_getlinum(script,highpaltokptr)); - break; - } - - if ((unsigned)pal >= ((unsigned)MAXPALOOKUPS - RESERVEDPALS)) - { - initprintf("Error: missing or invalid 'palette number' for highpalookup definition near " - "line %s:%d\n", script->filename, scriptfile_getlinum(script,highpaltokptr)); - break; - } - - if (!fn) - { - initprintf("Error: missing 'file name' for highpalookup definition near line %s:%d\n", - script->filename, scriptfile_getlinum(script,highpaltokptr)); - break; - } - - oldpathsearchmode = pathsearchmode; - pathsearchmode = 1; - if (findfrompath(fn,&tfn) < 0) - { - char buf[BMAX_PATH]; - - Bstrcpy(buf,fn); - kzfindfilestart(buf); - if (!kzfindfile(buf)) - { - initprintf("Error: file '%s' does not exist\n",fn); - pathsearchmode = oldpathsearchmode; - break; - } - } - else Bfree(tfn); - pathsearchmode = oldpathsearchmode; - -#ifdef POLYMER - fd = kopen4load(fn, 0); - - // load the highpalookup and send it to polymer - highpaldata = Bmalloc(PR_HIGHPALOOKUP_DATA_SIZE); - - { - char *filebuf; - int32_t xsiz, ysiz, filesize, i; - - filesize = kfilelength(fd); - - filebuf = Bmalloc(filesize); - if (!filebuf) { kclose(fd); Bfree(highpaldata); break; } - - klseek(fd, 0, SEEK_SET); - if (kread(fd, filebuf, filesize)!=filesize) - { kclose(fd); Bfree(highpaldata); initprintf("Error: didn't read all of '%s'.\n", fn); break; } - - kclose(fd); - kpgetdim(filebuf, filesize, &xsiz, &ysiz); - - if (xsiz != PR_HIGHPALOOKUP_DIM *PR_HIGHPALOOKUP_DIM || ysiz != PR_HIGHPALOOKUP_DIM) - { - initprintf("Error: image dimensions of '%s' must be %dx%d.\n", - fn, PR_HIGHPALOOKUP_DIM*PR_HIGHPALOOKUP_DIM, PR_HIGHPALOOKUP_DIM); - Bfree(filebuf); Bfree(highpaldata); - break; - } - - i = kprender(filebuf, filesize, (intptr_t)highpaldata, xsiz*sizeof(coltype), xsiz, ysiz, 0, 0); - Bfree(filebuf); - if (i) - { Bfree(highpaldata); initprintf("Error: failed rendering '%s'.\n", fn); break; } - } - - polymer_definehighpalookup(basepal, pal, highpaldata); - - Bfree(highpaldata); -#endif - } - break; - case T_TINT: - { - char *tinttokptr = script->ltextptr; - int32_t red=255, green=255, blue=255, pal=-1, flags=0; - char *tintend; - - static const tokenlist tinttokens[] = - { - { "pal", T_PAL }, - { "red", T_RED },{ "r", T_RED }, - { "green", T_GREEN },{ "g", T_GREEN }, - { "blue", T_BLUE },{ "b", T_BLUE }, - { "flags", T_FLAGS } - }; - - if (scriptfile_getbraces(script,&tintend)) break; - while (script->textptr < tintend) - { - switch (getatoken(script,tinttokens,sizeof(tinttokens)/sizeof(tokenlist))) - { - case T_PAL: - scriptfile_getsymbol(script,&pal); break; - case T_RED: - scriptfile_getnumber(script,&red); red = min(255,max(0,red)); break; - case T_GREEN: - scriptfile_getnumber(script,&green); green = min(255,max(0,green)); break; - case T_BLUE: - scriptfile_getnumber(script,&blue); blue = min(255,max(0,blue)); break; - case T_FLAGS: - scriptfile_getsymbol(script,&flags); break; - } - } - - if (pal < 0) - { - initprintf("Error: missing 'palette number' for tint definition near line %s:%d\n", script->filename, scriptfile_getlinum(script,tinttokptr)); - break; - } - - hicsetpalettetint(pal,red,green,blue,flags); - } - break; - case T_TEXTURE: - { - char *texturetokptr = script->ltextptr, *textureend; - int32_t tile=-1, token; - - static const tokenlist texturetokens[] = - { - { "pal", T_PAL }, - { "detail", T_DETAIL }, - { "glow", T_GLOW }, - { "specular",T_SPECULAR }, - { "normal", T_NORMAL }, - }; - - if (scriptfile_getsymbol(script,&tile)) break; - if (scriptfile_getbraces(script,&textureend)) break; - while (script->textptr < textureend) - { - token = getatoken(script,texturetokens,sizeof(texturetokens)/sizeof(tokenlist)); - switch (token) - { - case T_PAL: - { - char *paltokptr = script->ltextptr, *palend; - int32_t pal=-1, i; - char *fn = NULL, *tfn = NULL; - double alphacut = -1.0, xscale = 1.0, yscale = 1.0, specpower = 1.0, specfactor = 1.0; - char flags = 0; - - static const tokenlist texturetokens_pal[] = - { - { "file", T_FILE },{ "name", T_FILE }, - { "alphacut", T_ALPHACUT }, - { "detailscale", T_XSCALE }, { "scale", T_XSCALE }, { "xscale", T_XSCALE }, { "intensity", T_XSCALE }, - { "yscale", T_YSCALE }, - { "specpower", T_SPECPOWER }, { "parallaxscale", T_SPECPOWER }, - { "specfactor", T_SPECFACTOR }, { "parallaxbias", T_SPECFACTOR }, - { "nocompress", T_NOCOMPRESS }, - { "nodownsize", T_NODOWNSIZE }, - }; - - if (scriptfile_getsymbol(script,&pal)) break; - if (scriptfile_getbraces(script,&palend)) break; - while (script->textptr < palend) - { - switch (getatoken(script,texturetokens_pal,sizeof(texturetokens_pal)/sizeof(tokenlist))) - { - case T_FILE: - scriptfile_getstring(script,&fn); break; - case T_ALPHACUT: - scriptfile_getdouble(script,&alphacut); break; - case T_XSCALE: - scriptfile_getdouble(script,&xscale); break; - case T_YSCALE: - scriptfile_getdouble(script,&yscale); break; - case T_SPECPOWER: - scriptfile_getdouble(script,&specpower); break; - case T_SPECFACTOR: - scriptfile_getdouble(script,&specfactor); break; - case T_NOCOMPRESS: - flags |= 1; break; - case T_NODOWNSIZE: - flags |= 16; break; - default: - break; - } - } - - if ((unsigned)tile > (unsigned)MAXTILES) break; // message is printed later - if ((unsigned)pal >= ((unsigned)MAXPALOOKUPS - RESERVEDPALS)) - { - initprintf("Error: missing or invalid 'palette number' for texture definition near " - "line %s:%d\n", script->filename, scriptfile_getlinum(script,paltokptr)); - break; - } - if (!fn) - { - initprintf("Error: missing 'file name' for texture definition near line %s:%d\n", - script->filename, scriptfile_getlinum(script,paltokptr)); - break; - } - - i = pathsearchmode; - pathsearchmode = 1; - if (findfrompath(fn,&tfn) < 0) - { - char buf[BMAX_PATH]; - - Bstrcpy(buf,fn); - kzfindfilestart(buf); - if (!kzfindfile(buf)) - { - initprintf("Error: file '%s' does not exist\n",fn); - pathsearchmode = i; - break; - } - } - else Bfree(tfn); - pathsearchmode = i; - xscale = 1.0f / xscale; - yscale = 1.0f / yscale; - - hicsetsubsttex(tile,pal,fn,alphacut,xscale,yscale, specpower, specfactor,flags); - } - break; - case T_DETAIL: case T_GLOW: case T_SPECULAR: case T_NORMAL: - { - char *detailtokptr = script->ltextptr, *detailend; - int32_t pal = 0, i; - char *fn = NULL, *tfn = NULL; - double xscale = 1.0, yscale = 1.0, specpower = 1.0, specfactor = 1.0; - char flags = 0; - - static const tokenlist texturetokens_pal[] = - { - { "file", T_FILE },{ "name", T_FILE }, - { "alphacut", T_ALPHACUT }, - { "detailscale", T_XSCALE }, { "scale", T_XSCALE }, { "xscale", T_XSCALE }, { "intensity", T_XSCALE }, - { "yscale", T_YSCALE }, - { "specpower", T_SPECPOWER }, { "parallaxscale", T_SPECPOWER }, - { "specfactor", T_SPECFACTOR }, { "parallaxbias", T_SPECFACTOR }, - { "nocompress", T_NOCOMPRESS }, - { "nodownsize", T_NODOWNSIZE }, - }; - - if (scriptfile_getbraces(script,&detailend)) break; - while (script->textptr < detailend) - { - switch (getatoken(script,texturetokens_pal,sizeof(texturetokens_pal)/sizeof(tokenlist))) - { - case T_FILE: - scriptfile_getstring(script,&fn); break; - case T_XSCALE: - scriptfile_getdouble(script,&xscale); break; - case T_YSCALE: - scriptfile_getdouble(script,&yscale); break; - case T_SPECPOWER: - scriptfile_getdouble(script,&specpower); break; - case T_SPECFACTOR: - scriptfile_getdouble(script,&specfactor); break; - case T_NOCOMPRESS: - flags |= 1; break; - case T_NODOWNSIZE: - flags |= 16; break; - default: - break; - } - } - - if ((unsigned)tile > (unsigned)MAXTILES) break; // message is printed later - if (!fn) - { - initprintf("Error: missing 'file name' for texture definition near line %s:%d\n", - script->filename, scriptfile_getlinum(script,detailtokptr)); - break; - } - - i = pathsearchmode; - pathsearchmode = 1; - if (findfrompath(fn,&tfn) < 0) - { - char buf[BMAX_PATH]; - - Bstrcpy(buf,fn); - kzfindfilestart(buf); - if (!kzfindfile(buf)) - { - initprintf("Error: file '%s' does not exist\n",fn); - pathsearchmode = i; - break; - } - } - else Bfree(tfn); - pathsearchmode = i; - - switch (token) - { - case T_DETAIL: - pal = DETAILPAL; - xscale = 1.0f / xscale; - yscale = 1.0f / yscale; - break; - case T_GLOW: - pal = GLOWPAL; - break; - case T_SPECULAR: - pal = SPECULARPAL; - break; - case T_NORMAL: - pal = NORMALPAL; - break; - } - hicsetsubsttex(tile,pal,fn,-1.0f,xscale,yscale, specpower, specfactor,flags); - } - break; - default: - break; - } - } - if ((unsigned)tile >= (unsigned)MAXTILES) - { - initprintf("Error: missing or invalid 'tile number' for texture definition near line %s:%d\n", - script->filename, scriptfile_getlinum(script,texturetokptr)); - break; - } - } - break; - - case T_UNDEFMODEL: - case T_UNDEFMODELRANGE: - { - int32_t r0,r1; - - if (scriptfile_getsymbol(script,&r0)) break; - if (tokn == T_UNDEFMODELRANGE) - { - if (scriptfile_getsymbol(script,&r1)) break; - if (r1 < r0) - { - int32_t t = r1; - r1 = r0; - r0 = t; - initprintf("Warning: backwards tile range on line %s:%d\n", script->filename, scriptfile_getlinum(script,cmdtokptr)); - } - if (r0 < 0 || r1 >= MAXTILES) - { - initprintf("Error: invalid tile range on line %s:%d\n", script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } - } - else - { - r1 = r0; - if ((unsigned)r0 >= (unsigned)MAXTILES) - { - initprintf("Error: invalid tile number on line %s:%d\n", script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } - } -#ifdef USE_OPENGL - for (; r0 <= r1; r0++) md_undefinetile(r0); -#endif - } - break; - - case T_UNDEFMODELOF: - { - int32_t r0; -#ifdef USE_OPENGL - int32_t mid; -#endif - - if (scriptfile_getsymbol(script,&r0)) break; - if ((unsigned)r0 >= (unsigned)MAXTILES) - { - initprintf("Error: invalid tile number on line %s:%d\n", script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } - -#ifdef USE_OPENGL - mid = md_tilehasmodel(r0,0); - if (mid < 0) break; - - md_undefinemodel(mid); -#endif - } - break; - - case T_UNDEFTEXTURE: - case T_UNDEFTEXTURERANGE: - { - int32_t r0,r1,i; - - if (scriptfile_getsymbol(script,&r0)) break; - if (tokn == T_UNDEFTEXTURERANGE) - { - if (scriptfile_getsymbol(script,&r1)) break; - if (r1 < r0) - { - int32_t t = r1; - r1 = r0; - r0 = t; - initprintf("Warning: backwards tile range on line %s:%d\n", script->filename, scriptfile_getlinum(script,cmdtokptr)); - } - if (r0 < 0 || r1 >= MAXTILES) - { - initprintf("Error: invalid tile range on line %s:%d\n", script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } - } - else - { - r1 = r0; - if ((unsigned)r0 >= (unsigned)MAXTILES) - { - initprintf("Error: invalid tile number on line %s:%d\n", script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } - } - - for (; r0 <= r1; r0++) - for (i=MAXPALOOKUPS-1; i>=0; i--) - hicclearsubst(r0,i); - } - break; - - case T_SOUND: - case T_MUSIC: - { - char *dummy, *dummy2; - static const tokenlist sound_musictokens[] = - { - { "id", T_ID }, - { "file", T_FILE }, - }; - - if (scriptfile_getbraces(script,&dummy)) break; - while (script->textptr < dummy) - { - switch (getatoken(script,sound_musictokens,sizeof(sound_musictokens)/sizeof(tokenlist))) - { - case T_ID: - scriptfile_getstring(script,&dummy2); - break; - case T_FILE: - scriptfile_getstring(script,&dummy2); - break; - } - } - } - break; - - default: - initprintf("Unknown token.\n"); break; - } - } - return 0; -} - - -int32_t loaddefinitionsfile(const char *fn) -{ - scriptfile *script; - int32_t f = flushlogwindow; - - script = scriptfile_fromfile(fn); - if (!script) return -1; - - flushlogwindow = 1; - initprintf("Loading '%s'\n",fn); - flushlogwindow = 0; - defsparser(script); - - flushlogwindow = f; - scriptfile_close(script); - scriptfile_clearsymbols(); - - return 0; -} - -// vim:ts=4: diff --git a/polymer-perf/eduke32/build/src/dynamicgtk.c b/polymer-perf/eduke32/build/src/dynamicgtk.c deleted file mode 100644 index c8df161a7..000000000 --- a/polymer-perf/eduke32/build/src/dynamicgtk.c +++ /dev/null @@ -1,182 +0,0 @@ -#include -#include -#include - -#define __dynamicgtkfoo__ -#include "dynamicgtk.h" - -static void *handle = NULL; -struct _dynamicgtksyms dynamicgtksyms; - -#define GETDLSYM(x) { \ - dynamicgtksyms.x = dlsym(handle, (failsym = (const char *)#x)); \ - if (!dynamicgtksyms.x ) { err = 1; break; } \ -} - -int32_t dynamicgtk_init(void) -{ - int32_t err = 0; - const char *failsym = NULL; - - if (handle) return 1; - - handle = dlopen("libgtk-x11-2.0.so.0", RTLD_NOW|RTLD_GLOBAL); - if (!handle) return -1; - - memset(&dynamicgtksyms, 0, sizeof(dynamicgtksyms)); - - do - { - GETDLSYM(g_free) - GETDLSYM(g_object_get_data) - GETDLSYM(g_object_set_data) - GETDLSYM(g_object_set_data_full) - GETDLSYM(g_object_unref) - GETDLSYM(g_signal_connect_data) - GETDLSYM(g_signal_handlers_block_matched) - GETDLSYM(g_signal_handlers_unblock_matched) - GETDLSYM(g_type_check_instance_cast) - GETDLSYM(gdk_pixbuf_from_pixdata) - GETDLSYM(gdk_pixbuf_new_from_data) - GETDLSYM(gtk_accel_group_new) - GETDLSYM(gtk_alignment_new) - GETDLSYM(gtk_box_get_type) - GETDLSYM(gtk_box_pack_start) - GETDLSYM(gtk_button_box_get_type) - GETDLSYM(gtk_button_box_set_layout) - GETDLSYM(gtk_button_new) - GETDLSYM(gtk_cell_layout_get_type) - GETDLSYM(gtk_cell_layout_pack_start) - GETDLSYM(gtk_cell_layout_set_attributes) - GETDLSYM(gtk_cell_renderer_text_new) - GETDLSYM(gtk_check_button_new_with_mnemonic) - GETDLSYM(gtk_combo_box_get_active) - GETDLSYM(gtk_combo_box_get_active_iter) - GETDLSYM(gtk_combo_box_get_active_text) - GETDLSYM(gtk_combo_box_get_model) - GETDLSYM(gtk_combo_box_get_type) - GETDLSYM(gtk_combo_box_new_text) - GETDLSYM(gtk_combo_box_new_with_model) - GETDLSYM(gtk_combo_box_set_active) - GETDLSYM(gtk_combo_box_set_active_iter) - GETDLSYM(gtk_container_add) - GETDLSYM(gtk_container_foreach) - GETDLSYM(gtk_container_get_type) - GETDLSYM(gtk_container_set_border_width) - GETDLSYM(gtk_dialog_get_type) - GETDLSYM(gtk_dialog_run) - GETDLSYM(gtk_hbox_new) - GETDLSYM(gtk_hbutton_box_new) - GETDLSYM(gtk_image_new_from_pixbuf) - GETDLSYM(gtk_image_new_from_stock) - GETDLSYM(gtk_init_check) - GETDLSYM(gtk_label_get_type) - GETDLSYM(gtk_label_new) - GETDLSYM(gtk_label_new_with_mnemonic) - GETDLSYM(gtk_label_set_mnemonic_widget) - GETDLSYM(gtk_list_store_append) - GETDLSYM(gtk_list_store_clear) - GETDLSYM(gtk_list_store_get_type) - GETDLSYM(gtk_list_store_new) - GETDLSYM(gtk_list_store_set) - GETDLSYM(gtk_main) - GETDLSYM(gtk_main_iteration_do) - GETDLSYM(gtk_main_quit) - GETDLSYM(gtk_message_dialog_new) - GETDLSYM(gtk_misc_get_type) - GETDLSYM(gtk_misc_set_alignment) - GETDLSYM(gtk_notebook_get_nth_page) - GETDLSYM(gtk_notebook_get_type) - GETDLSYM(gtk_notebook_new) - GETDLSYM(gtk_notebook_set_current_page) - GETDLSYM(gtk_notebook_set_tab_label) - GETDLSYM(gtk_object_get_type) - GETDLSYM(gtk_scrolled_window_get_type) - GETDLSYM(gtk_scrolled_window_new) - GETDLSYM(gtk_scrolled_window_set_policy) - GETDLSYM(gtk_scrolled_window_set_shadow_type) - GETDLSYM(gtk_table_get_type) - GETDLSYM(gtk_table_new) - GETDLSYM(gtk_table_attach) - GETDLSYM(gtk_text_buffer_backspace) - GETDLSYM(gtk_text_buffer_create_mark) - GETDLSYM(gtk_text_buffer_delete_mark) - GETDLSYM(gtk_text_buffer_get_end_iter) - GETDLSYM(gtk_text_buffer_insert) - // FIXME: should I put a #if !GTK_CHECK_VERSION(2,6,0) - // around these three, or should I not care? - GETDLSYM(gtk_text_iter_backward_cursor_position) - GETDLSYM(gtk_text_iter_equal) - GETDLSYM(gtk_text_buffer_delete_interactive) - // - GETDLSYM(gtk_text_view_get_buffer) - GETDLSYM(gtk_text_view_get_type) - GETDLSYM(gtk_text_view_new) - GETDLSYM(gtk_text_view_scroll_to_mark) - GETDLSYM(gtk_text_view_set_cursor_visible) - GETDLSYM(gtk_text_view_set_editable) - GETDLSYM(gtk_text_view_set_left_margin) - GETDLSYM(gtk_text_view_set_right_margin) - GETDLSYM(gtk_text_view_set_wrap_mode) - GETDLSYM(gtk_toggle_button_get_active) - GETDLSYM(gtk_toggle_button_get_type) - GETDLSYM(gtk_toggle_button_set_active) - GETDLSYM(gtk_tree_model_get) - GETDLSYM(gtk_tree_model_get_iter) - GETDLSYM(gtk_tree_model_get_path) - GETDLSYM(gtk_tree_model_get_type) - GETDLSYM(gtk_tree_path_get_indices) - GETDLSYM(gtk_tree_path_new_from_indices) - GETDLSYM(gtk_tree_selection_get_selected) - GETDLSYM(gtk_tree_selection_select_iter) - GETDLSYM(gtk_tree_selection_set_mode) - GETDLSYM(gtk_tree_sortable_get_type) - GETDLSYM(gtk_tree_sortable_set_sort_column_id) - GETDLSYM(gtk_tree_sortable_set_sort_func) - GETDLSYM(gtk_tree_view_append_column) - GETDLSYM(gtk_tree_view_column_new_with_attributes) - GETDLSYM(gtk_tree_view_column_set_expand) - GETDLSYM(gtk_tree_view_column_set_min_width) - GETDLSYM(gtk_tree_view_get_model) - GETDLSYM(gtk_tree_view_get_selection) - GETDLSYM(gtk_tree_view_get_type) - GETDLSYM(gtk_tree_view_new_with_model) - GETDLSYM(gtk_tree_view_set_enable_search) - GETDLSYM(gtk_tree_view_set_headers_visible) - GETDLSYM(gtk_vbox_new) - GETDLSYM(gtk_widget_add_accelerator) - GETDLSYM(gtk_widget_destroy) - GETDLSYM(gtk_widget_ref) - GETDLSYM(gtk_widget_set_sensitive) - GETDLSYM(gtk_widget_set_size_request) - GETDLSYM(gtk_widget_show_all) - GETDLSYM(gtk_widget_unref) - GETDLSYM(gtk_window_add_accel_group) - GETDLSYM(gtk_window_get_type) - GETDLSYM(gtk_window_new) - GETDLSYM(gtk_window_set_default_icon) - GETDLSYM(gtk_window_set_position) - GETDLSYM(gtk_window_set_resizable) - GETDLSYM(gtk_window_set_title) - GETDLSYM(gtk_window_set_type_hint) - GETDLSYM(gtk_window_set_default) - GETDLSYM(g_utf8_collate) - } - while (0); - - if (err) - { - //printf("Failed fetching symbol %s from GTK lib\n", failsym); - dlclose(handle); - handle = NULL; - return -1; - } - return 0; -} - -void dynamicgtk_uninit(void) -{ - if (handle) dlclose(handle); - handle = NULL; - memset(&dynamicgtksyms, 0, sizeof(dynamicgtksyms)); -} diff --git a/polymer-perf/eduke32/build/src/engine.c b/polymer-perf/eduke32/build/src/engine.c deleted file mode 100644 index d189955b9..000000000 --- a/polymer-perf/eduke32/build/src/engine.c +++ /dev/null @@ -1,13899 +0,0 @@ -// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman -// Ken Silverman's official web site: "http://www.advsys.net/ken" -// See the included license file "BUILDLIC.TXT" for license info. -// -// This file has been modified from Ken Silverman's original release -// by Jonathon Fowler (jonof@edgenetwk.com) - - -#define ENGINE - -#include "compat.h" -#include "build.h" -#include "pragmas.h" -#include "cache1d.h" -#include "a.h" -#include "osd.h" -#include "crc32.h" -#include "quicklz.h" - -#include "baselayer.h" -#include "scriptfile.h" - -#ifdef USE_OPENGL -# ifdef USE_OPENGL -# include "glbuild.h" -# include "mdsprite.h" -# ifdef POLYMER -# include "polymer.h" -# endif -# endif -# include "hightile.h" -# include "polymost.h" -# ifdef _WIN32 -# define WIN32_LEAN_AND_MEAN -# include -# endif -#endif - -#include - -#include "engine_priv.h" - -#define CACHEAGETIME 16 - -float debug1, debug2; - -static void drawpixel_safe(void *s, char a) -{ -#if defined __GNUC__ - if (__builtin_expect((intptr_t)s >= frameplace && (intptr_t)s < frameplace+bytesperline*ydim, 1)) -#else - if ((intptr_t)s >= frameplace && (intptr_t)s < frameplace+bytesperline*ydim) -#endif - drawpixel(s, a); -#ifdef DEBUGGINGAIDS - else - { - static const char *const c = &editorcolors[15]; - drawpixel((intptr_t *)frameplace, *c); - drawpixel((intptr_t *)frameplace+1, *c); - drawpixel((intptr_t *)frameplace+2, *c); - drawpixel((intptr_t *)frameplace+bytesperline, *c); - drawpixel((intptr_t *)frameplace+bytesperline+1, *c); - drawpixel((intptr_t *)frameplace+bytesperline+2, *c); - drawpixel((intptr_t *)frameplace+2*bytesperline, *c); - drawpixel((intptr_t *)frameplace+2*bytesperline+1, *c); - drawpixel((intptr_t *)frameplace+2*bytesperline+2, *c); - } -#endif -} - -void loadvoxel(int32_t voxindex) { voxindex=0; } -int32_t tiletovox[MAXTILES]; -int32_t usevoxels = 1; -#define kloadvoxel loadvoxel - -int32_t novoxmips = 0; -int32_t editorgridextent = 131072; - -//These variables need to be copied into BUILD -#define MAXXSIZ 256 -#define MAXYSIZ 256 -#define MAXZSIZ 255 -#define MAXVOXMIPS 5 -intptr_t voxoff[MAXVOXELS][MAXVOXMIPS]; char voxlock[MAXVOXELS][MAXVOXMIPS]; -int32_t voxscale[MAXVOXELS]; - -static int32_t ggxinc[MAXXSIZ+1], ggyinc[MAXXSIZ+1]; -static int32_t lowrecip[1024], nytooclose, nytoofar; -static uint32_t distrecip[65536]; - -static intptr_t *lookups = NULL; -static char lookupsalloctype = 255; -int32_t dommxoverlay = 1, beforedrawrooms = 1, indrawroomsandmasks = 0; - -static int32_t oxdimen = -1, oviewingrange = -1, oxyaspect = -1; - -// r_usenewaspect is the cvar, newaspect_enable to trigger the new behaviour in the code -int32_t r_usenewaspect = 0, newaspect_enable=0; -uint32_t r_screenxy = 403; // 4:3 aspect ratio - -int32_t curbrightness = 0, gammabrightness = 0; - -double vid_gamma = DEFAULT_GAMMA; -double vid_contrast = DEFAULT_CONTRAST; -double vid_brightness = DEFAULT_BRIGHTNESS; - -//Textured Map variables -static char globalpolytype; -static int16_t *dotp1[MAXYDIM], *dotp2[MAXYDIM]; - -static int8_t tempbuf[MAXWALLS]; - -int32_t ebpbak, espbak; -intptr_t slopalookup[16384]; // was 2048 -#if defined(USE_OPENGL) -palette_t palookupfog[MAXPALOOKUPS]; -#endif - -static char permanentlock = 255; -int32_t artversion, mapversion=7L; // JBF 20040211: default mapversion to 7 -void *pic = NULL; -char picsiz[MAXTILES], tilefilenum[MAXTILES]; -int32_t lastageclock; -int32_t tilefileoffs[MAXTILES]; - -int32_t artsize = 0, cachesize = 0; - -// unlikely to occur, but .art files with less than 256 tiles are certainly possible -// this would be 60 (MAXTILES/256) if we just assumed there were 256 tiles per .art as in Duke -char *artptrs[256]; - -static int16_t radarang2[MAXXDIM]; -static uint16_t sqrtable[4096], shlookup[4096+256]; -char pow2char[8] = {1,2,4,8,16,32,64,128}; -int32_t pow2long[32] = -{ - 1L,2L,4L,8L, - 16L,32L,64L,128L, - 256L,512L,1024L,2048L, - 4096L,8192L,16384L,32768L, - 65536L,131072L,262144L,524288L, - 1048576L,2097152L,4194304L,8388608L, - 16777216L,33554432L,67108864L,134217728L, - 268435456L,536870912L,1073741824L,2147483647L -}; -int32_t reciptable[2048], fpuasm; - -char britable[16][256]; // JBF 20040207: full 8bit precision - -extern char textfont[2048], smalltextfont[2048]; - -static char kensmessage[128]; -const char *engineerrstr = "No error"; - -int32_t showfirstwall=0; -int32_t showheightindicators=2; -int32_t circlewall=-1; - -char cachedebug = 0; - -qlz_state_compress *state_compress = NULL; -qlz_state_decompress *state_decompress = NULL; - -int32_t whitecol; - -#ifdef POLYMER -static int16_t maphacklightcnt=0; -static int16_t maphacklight[PR_MAXLIGHTS]; -#endif - -// forward refs -inline int32_t getscreenvdisp(int32_t bz, int32_t zoome); -void screencoords(int32_t *xres, int32_t *yres, int32_t x, int32_t y, int32_t zoome); - - -////////// YAX ////////// -#define YAX_BUNCHNUM(Sect, Cf) (*(int16_t *)(§or[Sect].ceilingxpanning + 6*Cf)) - -int16_t yax_getbunch(int16_t i, int16_t cf) -{ - if (((*(§or[i].ceilingstat + cf))&YAX_BIT)==0) - return -1; - - return YAX_BUNCHNUM(i, cf); -} - -void yax_setbunch(int16_t i, int16_t cf, int16_t bunchnum) -{ - if (i<0) - { - *(§or[i].ceilingstat + cf) &= ~YAX_BIT; - YAX_BUNCHNUM(i, cf) = 0; - return; - } - - *(§or[i].ceilingstat + cf) |= YAX_BIT; - YAX_BUNCHNUM(i, cf) = bunchnum; -} - - -////////// editor side view ////////// -int32_t m32_sideview = 0; -int32_t m32_sideelev = 256; // elevation in BUILD degrees, 0..512 -int16_t m32_sideang = 200; // azimuth, 0..2047 - -int32_t m32_sidecos, m32_sidesin; -int32_t m32_swcnt; -int16_t *m32_wallsprite; // [MAXSWALLS+MAXSPRITES] -static int32_t *m32_sidedist; // [MAXSWALLS+MAXSPRITES] -static vec3_t m32_viewplane; - - -////// sector-like clipping for sprites ////// -typedef struct -{ - int16_t numsectors, numwalls; - sectortype *sector; - walltype *wall; -} mapinfo_t; - -static void mapinfo_set(mapinfo_t *bak, mapinfo_t *new) -{ - if (bak) - { - bak->numsectors = numsectors; - bak->numwalls = numwalls; - bak->sector = sector; - bak->wall = wall; - } - - if (new) - { - numsectors = new->numsectors; - numwalls = new->numwalls; - sector = new->sector; - wall = new->wall; - } -} - -static mapinfo_t origmapinfo, clipmapinfo; -static int32_t quickloadboard=0; - - -#define CM_MAX 256 // must be a power of 2 - -typedef struct -{ - int16_t qbeg, qend; // indices into sectq - int16_t picnum, next; - int32_t maxdist; -} clipinfo_t; - -static int32_t numclipmaps; -static clipinfo_t clipinfo[CM_MAX]; - -static int32_t numclipsects; // number in sectq[] -static int16_t *sectoidx, *sectq; // [numsectors] -static int16_t pictoidx[MAXTILES]; // maps tile num to clipinfo[] index -static int16_t *tempictoidx; - -static sectortype *loadsector; -static walltype *loadwall, *loadwallinv; -static spritetype *loadsprite; - -// sectoidx bits -#define CM_NONE (CM_MAX<<1) -#define CM_SOME (CM_NONE-1) -#define CM_OUTER (CM_MAX) // sector surrounds clipping sector - -// sprite -> sector tag mappings -#define CM_XREPEAT floorpal -#define CM_YREPEAT floorxpanning -#define CM_XOFFSET ceilingshade -#define CM_YOFFSET floorshade -#define CM_CSTAT hitag -#define CM_ANG extra -#define CM_FLOORZ(Sec) (*(int32_t *)§or[Sec].ceilingxpanning) // ceilingxpanning,ceilingypanning,floorpicnum -#define CM_CEILINGZ(Sec) (*(int32_t *)§or[Sec].visibility) // visibility,filler,lotag - -// backup of original normalized coordinates -#define CM_WALL_X(Wal) (*(int32_t *)&wall[Wal].picnum) -#define CM_WALL_Y(Wal) (*(int32_t *)&wall[Wal].lotag) - -// don't rotate when applying clipping, for models with rotational symmetry -#define CM_NOROT(Spri) (sprite[Spri].cstat&2) -#define CM_NOROTS(Sect) (sector[Sect].CM_CSTAT&2) - - -static void clipmapinfo_init() -{ - int32_t i; - - numclipmaps = 0; - numclipsects = 0; - - if (sectq) { Bfree(sectq); sectq=NULL; } - if (sectoidx) { Bfree(sectoidx); sectoidx=NULL; } - if (tempictoidx) { Bfree(tempictoidx); tempictoidx=NULL; } - - for (i=0; iMAXSECTORS || - ournumwalls+numwalls>MAXWALLS || - ournumsprites+numsprites>MAXSPRITES) - { - initprintf("clip map: warning: exceeded limits when loading %s, aborting.\n", fn); - break; - } - - Bmemcpy(loadsector+ournumsectors, sector, numsectors*sizeof(sectortype)); - Bmemcpy(loadwall+ournumwalls, wall, numwalls*sizeof(walltype)); - Bmemcpy(loadsprite+ournumsprites, sprite, numsprites*sizeof(spritetype)); - for (i=ournumsectors; i=0) - loadwall[i].point2 += ournumwalls; - if (loadwall[i].nextwall>=0) - { - loadwall[i].nextwall += ournumwalls; - loadwall[i].nextsector += ournumsectors; - } - } - for (i=ournumsprites; i=0) - loadsprite[i].sectnum += ournumsectors; - ournumsectors += numsectors; - ournumwalls += numwalls; - ournumsprites += numsprites; - - if (lwcp != loadedwhich) - { - *lwcp++ = ','; - *lwcp++ = ' '; - } - *lwcp++ = fi; - *lwcp = 0; - } - quickloadboard = 0; - - if (ournumsectors==0 || ournumwalls==0 || ournumsprites==0) // nothing loaded - { - clipmapinfo_init(); - return -1; - } - - // shrink - loadsector = Brealloc(loadsector, ournumsectors*sizeof(sectortype)); - loadwall = Brealloc(loadwall, ournumwalls*sizeof(walltype)); - - Bmemcpy(sector, loadsector, ournumsectors*sizeof(sectortype)); - Bmemcpy(wall, loadwall, ournumwalls*sizeof(walltype)); - Bmemcpy(sprite, loadsprite, ournumsprites*sizeof(spritetype)); - numsectors = ournumsectors; - numwalls = ournumwalls; - - // vvvv don't use headsprite[sect,stat]! vvvv - - sectoidx = Bmalloc(numsectors*sizeof(sectoidx[0])); - if (!sectoidx || !sector || !wall) - { - clipmapinfo_init(); - return 1; - } - for (i=0; i=0 && sectoidx[wall[w].nextsector]==CM_OUTER) - { - wall[k].nextwall = wall[k].nextsector = -1; - wall[w].nextwall = wall[w].nextsector = -1; - } - } - } - - { - int16_t ns, outersect; - int32_t pn,scnt, x,y,z, maxdist; - - sectq = Bmalloc(numsectors*sizeof(sectq[0])); - tempictoidx = Bmalloc(MAXTILES*sizeof(tempictoidx[0])); - if (!sectq || !tempictoidx) - { - clipmapinfo_init(); - return 1; - } - for (i=0; i=MAXTILES || k<0 || k>=numsectors || (sectoidx[k]&CM_OUTER)) - continue; - - // chain - if (pictoidx[pn]>=0) - { - if (sectoidx[k]&CM_SOME) - { - for (fi=0; fi<9; fi++) - if (k>=fisec[fi]) - break; - initprintf("clip map %d: error: tried to chain picnum %d (sprite %d) in sector %d which" - " already belongs to picnum %d.\n", fi, pn, i-fispr[fi], k-fisec[fi], - clipinfo[sectoidx[k]].picnum); - clipmapinfo_init(); - return 2; - } - - // new one is front - clipinfo[numclipmaps].next = pictoidx[pn]; - pictoidx[pn] = numclipmaps; - } - else - { - clipinfo[numclipmaps].next = -1; - pictoidx[pn] = numclipmaps; - } - - if (!CM_NOROT(i)) - { - if (sprite[i].ang!=1536 && sprite[i].ang!=512) - { - for (fi=0; fi<9; fi++) - if (i>=fispr[fi]) - break; - initprintf("clip map %d: warning: sprite %d pointing neither northward nor southward. %s will be wrong.\n", - fi, i-fispr[fi], (sprite[i].cstat&48)==32 ? "Scaling and flipping" : "X-flipping"); - } - } - - clipinfo[numclipmaps].picnum = pn; - - // collect sectors - scnt = numclipsects; - sectq[numclipsects++] = k; - sectoidx[k] = numclipmaps; - - clipinfo[numclipmaps].qbeg = scnt; - - outersect = -1; - - do - { - k = sectq[scnt]; - - for (w=sector[k].wallptr; w=0) - { - if (sectoidx[ns]==CM_NONE) - { - sectoidx[ns] = numclipmaps; - sectq[numclipsects++] = ns; - } - else if (sectoidx[ns]&CM_OUTER) - { - if (outersect>=0 && ns!=outersect) - { - for (fi=0; fi<9; fi++) - if (ns>=fisec[fi]) - break; - initprintf("clip map %d: error: encountered more than one outer sector (%d and %d)" - " for sprite %d.\n", fi, outersect-fisec[fi], ns-fisec[fi], i-fispr[fi]); - clipmapinfo_init(); - return 3; - } - - outersect = ns; - sectoidx[outersect] |= numclipmaps; - } - else if (sectoidx[ns]!=numclipmaps) - { - for (fi=0; fi<9; fi++) - if (ns>=fisec[fi]) - break; - initprintf("clip map %d: error: encountered sector %d belonging to index %d" - " while collecting sectors for sprite %d (index %d).\n", - fi, ns-fisec[fi], sectoidx[ns], i-fispr[fi], numclipmaps); - clipmapinfo_init(); - return 4; - } - } - } - } - while (++scnt < numclipsects); - - if (outersect==-1) - { - initprintf("clip map: INTERNAL ERROR: outersect==-1!\n"); - clipmapinfo_init(); - return 5; - } - - sectq[numclipsects++] = outersect; // last is outer - clipinfo[numclipmaps].qend = numclipsects-1; - - // normalize - maxdist = 0; - - for (scnt=clipinfo[numclipmaps].qbeg; scnt<=clipinfo[numclipmaps].qend; scnt++) - { - k = sectq[scnt]; - - x = sprite[i].x; - y = sprite[i].y; - z = sprite[i].z; - - sector[k].floorz -= z; - sector[k].ceilingz -= z; - - if (scnt==clipinfo[numclipmaps].qbeg) - { - // backup sprite tags since we'll discard sprites later - sector[k].CM_XREPEAT = sprite[i].xrepeat; - sector[k].CM_YREPEAT = sprite[i].yrepeat; - sector[k].CM_XOFFSET = sprite[i].xoffset; - sector[k].CM_YOFFSET = sprite[i].yoffset; - sector[k].CM_CSTAT = sprite[i].cstat; - sector[k].CM_ANG = sprite[i].ang; - } - - // backup floor and ceiling z - CM_FLOORZ(k) = sector[k].floorz; - CM_CEILINGZ(k) = sector[k].ceilingz; - - for (w=sector[k].wallptr; w maxdist) - maxdist = klabs(wall[w].x); - if (klabs(wall[w].y) > maxdist) - maxdist = klabs(wall[w].y); - } - else - { - int32_t tmp = ksqrt(wall[w].x*wall[w].x + wall[w].y*wall[w].y); - if (tmp > maxdist) - maxdist = tmp; - } - } - - // aliasing - if (wall[w].lotag>0 || wall[w].hitag>0) - { - int32_t ii; - - if (wall[w].lotag>0 && wall[w].hitag>0) - { - if (wall[w].lotag > wall[w].hitag) - swapshort(&wall[w].lotag, &wall[w].hitag); - - for (ii=wall[w].lotag; ii0) - { - if (wall[w].lotag=0) - pictoidx[i]=tempictoidx[i]; - } - - Bfree(loadsprite); loadsprite=NULL; - Bfree(tempictoidx); tempictoidx=NULL; - - // don't let other code be distracted by the temporary map we constructed - numsectors = 0; - numwalls = 0; - initspritelists(); - - initprintf("Loaded clip map%s %s.\n", lwcp==loadedwhich+1?"":"s", loadedwhich); - - return 0; -} - -////// ////// - - -int32_t checksectorpointer(int16_t i, int16_t sectnum) -{ - int32_t j, k, startwall, endwall, x1, y1, x2, y2, numnewwalls=0; - -#if 0 - if (checksectorpointer_warn && (i<0 || i>=max(numwalls,newnumwalls))) - { - char buf[128]; - Bsprintf(buf, "WARN: checksectorpointer called with i=%d but (new)numwalls=%d", i, max(numwalls,newnumwalls)); - OSD_Printf("%s\n", buf); - printmessage16("%s", buf); - return 0; - } -#endif - - x1 = wall[i].x; - y1 = wall[i].y; - x2 = (wall[wall[i].point2]).x; - y2 = (wall[wall[i].point2]).y; - - if (wall[i].nextwall >= 0) //Check for early exit - { - k = wall[i].nextwall; - if (wall[k].x == x2 && wall[k].y == y2) - if ((wall[wall[k].point2]).x == x1 && (wall[wall[k].point2]).y == y1) - return(0); - } - - wall[i].nextsector = -1; - wall[i].nextwall = -1; - for (j=0; j=0 && wall[k].nextwall != i) - continue; - - if (sectnum != -2) // -2 means dry run - { - wall[i].nextsector = j; - wall[i].nextwall = k; - wall[k].nextsector = sectnum; - wall[k].nextwall = i; - } - numnewwalls++; - } - } - } - return(numnewwalls); -} - - -#if defined(_MSC_VER) && !defined(NOASM) - -// -// Microsoft C Inline Assembly Routines -// - -static inline int32_t nsqrtasm(int32_t a) -{ - _asm - { - push ebx - mov eax, a - test eax, 0xff000000 - mov ebx, eax - jnz short over24 - shr ebx, 12 - mov cx, word ptr shlookup[ebx*2] - jmp short under24 - over24: - shr ebx, 24 - mov cx, word ptr shlookup[ebx*2+8192] - under24: - shr eax, cl - mov cl, ch - mov ax, word ptr sqrtable[eax*2] - shr eax, cl - pop ebx - } -} - -static inline int32_t msqrtasm(int32_t c) -{ - _asm - { - push ebx - mov ecx, c - mov eax, 0x40000000 - mov ebx, 0x20000000 - begit: - cmp ecx, eax - jl skip - sub ecx, eax - lea eax, [eax+ebx*4] - skip: - sub eax, ebx - shr eax, 1 - shr ebx, 2 - jnz begit - cmp ecx, eax - sbb eax, -1 - shr eax, 1 - pop ebx - } -} - -//0x007ff000 is (11<<13), 0x3f800000 is (127<<23) -static inline int32_t krecipasm(int32_t a) -{ - _asm - { - push ebx - mov eax, a - mov fpuasm, eax - fild dword ptr fpuasm - add eax, eax - fstp dword ptr fpuasm - sbb ebx, ebx - mov eax, fpuasm - mov ecx, eax - and eax, 0x007ff000 - shr eax, 10 - sub ecx, 0x3f800000 - shr ecx, 23 - mov eax, dword ptr reciptable[eax] - sar eax, cl - xor eax, ebx - pop ebx - } -} - -static inline int32_t getclipmask(int32_t a, int32_t b, int32_t c, int32_t d) -{ - _asm - { - push ebx - mov eax, a - mov ebx, b - mov ecx, c - mov edx, d - sar eax, 31 - add ebx, ebx - adc eax, eax - add ecx, ecx - adc eax, eax - add edx, edx - adc eax, eax - mov ebx, eax - shl ebx, 4 - or al, 0xf0 - xor eax, ebx - pop ebx - } -} - -static inline int32_t getkensmessagecrc(void *b) -{ - _asm - { - push ebx - mov ebx, b - xor eax, eax - mov ecx, 32 - beg: - mov edx, dword ptr [ebx+ecx*4-4] - ror edx, cl - adc eax, edx - bswap eax - loop short beg - pop ebx - } -} - -#elif defined(__GNUC__) && defined(__i386__) && !defined(NOASM) // _MSC_VER - -// -// GCC "Inline" Assembly Routines -// - -#define nsqrtasm(a) \ - ({ int32_t __r, __a=(a); \ - __asm__ __volatile__ ( \ - "testl $0xff000000, %%eax\n\t" \ - "movl %%eax, %%ebx\n\t" \ - "jnz 0f\n\t" \ - "shrl $12, %%ebx\n\t" \ - "movw "ASMSYM("shlookup")"(,%%ebx,2), %%cx\n\t" \ - "jmp 1f\n\t" \ - "0:\n\t" \ - "shrl $24, %%ebx\n\t" \ - "movw ("ASMSYM("shlookup")"+8192)(,%%ebx,2), %%cx\n\t" \ - "1:\n\t" \ - "shrl %%cl, %%eax\n\t" \ - "movb %%ch, %%cl\n\t" \ - "movw "ASMSYM("sqrtable")"(,%%eax,2), %%ax\n\t" \ - "shrl %%cl, %%eax" \ - : "=a" (__r) : "a" (__a) : "ebx", "ecx", "cc"); \ - __r; }) - -// edx is blown by this code somehow?! -#define msqrtasm(c) \ - ({ int32_t __r, __c=(c); \ - __asm__ __volatile__ ( \ - "movl $0x40000000, %%eax\n\t" \ - "movl $0x20000000, %%ebx\n\t" \ - "0:\n\t" \ - "cmpl %%eax, %%ecx\n\t" \ - "jl 1f\n\t" \ - "subl %%eax, %%ecx\n\t" \ - "leal (%%eax,%%ebx,4), %%eax\n\t" \ - "1:\n\t" \ - "subl %%ebx, %%eax\n\t" \ - "shrl $1, %%eax\n\t" \ - "shrl $2, %%ebx\n\t" \ - "jnz 0b\n\t" \ - "cmpl %%eax, %%ecx\n\t" \ - "sbbl $-1, %%eax\n\t" \ - "shrl $1, %%eax" \ - : "=a" (__r) : "c" (__c) : "edx","ebx", "cc"); \ - __r; }) - -#define krecipasm(a) \ - ({ int32_t __a=(a); \ - __asm__ __volatile__ ( \ - "movl %%eax, ("ASMSYM("fpuasm")"); fildl ("ASMSYM("fpuasm")"); " \ - "addl %%eax, %%eax; fstps ("ASMSYM("fpuasm")"); sbbl %%ebx, %%ebx; " \ - "movl ("ASMSYM("fpuasm")"), %%eax; movl %%eax, %%ecx; " \ - "andl $0x007ff000, %%eax; shrl $10, %%eax; subl $0x3f800000, %%ecx; " \ - "shrl $23, %%ecx; movl "ASMSYM("reciptable")"(%%eax), %%eax; " \ - "sarl %%cl, %%eax; xorl %%ebx, %%eax" \ - : "=a" (__a) : "a" (__a) : "ebx", "ecx", "memory", "cc"); \ - __a; }) - -#define getclipmask(a,b,c,d) \ - ({ int32_t __a=(a), __b=(b), __c=(c), __d=(d); \ - __asm__ __volatile__ ("sarl $31, %%eax; addl %%ebx, %%ebx; adcl %%eax, %%eax; " \ - "addl %%ecx, %%ecx; adcl %%eax, %%eax; addl %%edx, %%edx; " \ - "adcl %%eax, %%eax; movl %%eax, %%ebx; shl $4, %%ebx; " \ - "orb $0xf0, %%al; xorl %%ebx, %%eax" \ - : "=a" (__a), "=b" (__b), "=c" (__c), "=d" (__d) \ - : "a" (__a), "b" (__b), "c" (__c), "d" (__d) : "cc"); \ - __a; }) - - -#define getkensmessagecrc(b) \ - ({ int32_t __a, __b=(b); \ - __asm__ __volatile__ ( \ - "xorl %%eax, %%eax\n\t" \ - "movl $32, %%ecx\n\t" \ - "0:\n\t" \ - "movl -4(%%ebx,%%ecx,4), %%edx\n\t" \ - "rorl %%cl, %%edx\n\t" \ - "adcl %%edx, %%eax\n\t" \ - "bswapl %%eax\n\t" \ - "loop 0b" \ - : "=a" (__a) : "b" (__b) : "ecx", "edx" \ - __a; }) - -#else // __GNUC__ && __i386__ - -static inline uint32_t nsqrtasm(uint32_t a) -{ - // JBF 20030901: This was a damn lot simpler to reverse engineer than - // msqrtasm was. Really, it was just like simplifying an algebra equation. - uint16_t c; - - if (a & 0xff000000) // test eax, 0xff000000 / jnz short over24 - { - c = shlookup[(a >> 24) + 4096]; // mov ebx, eax - // over24: shr ebx, 24 - // mov cx, word ptr shlookup[ebx*2+8192] - } - else - { - c = shlookup[a >> 12]; // mov ebx, eax - // shr ebx, 12 - // mov cx, word ptr shlookup[ebx*2] - // jmp short under24 - } - a >>= c&0xff; // under24: shr eax, cl - a = (a&0xffff0000)|(sqrtable[a]); // mov ax, word ptr sqrtable[eax*2] - a >>= ((c&0xff00) >> 8); // mov cl, ch - // shr eax, cl - return a; -} - -static inline int32_t msqrtasm(uint32_t c) -{ - uint32_t a,b; - - a = 0x40000000l; // mov eax, 0x40000000 - b = 0x20000000l; // mov ebx, 0x20000000 - do // begit: - { - if (c >= a) // cmp ecx, eax / jl skip - { - c -= a; // sub ecx, eax - a += b*4; // lea eax, [eax+ebx*4] - } // skip: - a -= b; // sub eax, ebx - a >>= 1; // shr eax, 1 - b >>= 2; // shr ebx, 2 - } - while (b); // jnz begit - if (c >= a) // cmp ecx, eax - a++; // sbb eax, -1 - a >>= 1; // shr eax, 1 - return a; -} - -static inline int32_t krecipasm(int32_t i) -{ - // Ken did this - float f = (float)i; i = *(int32_t *)&f; - return((reciptable[(i>>12)&2047]>>(((i-0x3f800000)>>23)&31))^(i>>31)); -} - - -static inline int32_t getclipmask(int32_t a, int32_t b, int32_t c, int32_t d) -{ - // Ken did this - d = ((a<0)*8) + ((b<0)*4) + ((c<0)*2) + (d<0); - return(((d<<4)^0xf0)|d); -} - -inline int32_t getkensmessagecrc(int32_t b) -{ - return 0x56c764d4l; - b=b; -} - -#endif - - -int32_t xb1[MAXWALLSB], yb1[MAXWALLSB], xb2[MAXWALLSB], yb2[MAXWALLSB]; -int32_t rx1[MAXWALLSB], ry1[MAXWALLSB], rx2[MAXWALLSB], ry2[MAXWALLSB]; -int16_t p2[MAXWALLSB], thesector[MAXWALLSB]; -int16_t thewall[MAXWALLSB]; - -int16_t bunchfirst[MAXWALLSB], bunchlast[MAXWALLSB]; - -static int16_t smost[MAXYSAVES], smostcnt; -static int16_t smoststart[MAXWALLSB]; -static char smostwalltype[MAXWALLSB]; -static int32_t smostwall[MAXWALLSB], smostwallcnt = -1L; - -int16_t maskwall[MAXWALLSB], maskwallcnt; -static int32_t spritesx[MAXSPRITESONSCREEN]; -static int32_t spritesy[MAXSPRITESONSCREEN+1]; -static int32_t spritesz[MAXSPRITESONSCREEN]; -spritetype *tspriteptr[MAXSPRITESONSCREEN + 1]; - -int16_t umost[MAXXDIM], dmost[MAXXDIM]; -static int16_t bakumost[MAXXDIM], bakdmost[MAXXDIM]; -int16_t uplc[MAXXDIM], dplc[MAXXDIM]; -static int16_t uwall[MAXXDIM], dwall[MAXXDIM]; -static int32_t swplc[MAXXDIM], lplc[MAXXDIM]; -static int32_t swall[MAXXDIM], lwall[MAXXDIM+4]; -int32_t xdimen = -1, xdimenrecip, halfxdimen, xdimenscale, xdimscale; -int32_t wx1, wy1, wx2, wy2, ydimen; -intptr_t /*viewoffset,*/ frameoffset; - -static int32_t nrx1[8], nry1[8], nrx2[8], nry2[8]; // JBF 20031206: Thanks Ken - -static int32_t rxi[8], ryi[8], rzi[8], rxi2[8], ryi2[8], rzi2[8]; -static int32_t xsi[8], ysi[8], horizycent; -static intptr_t *horizlookup=0, *horizlookup2=0; - -int32_t globalposx, globalposy, globalposz, globalhoriz; -int16_t globalang, globalcursectnum; -int32_t globalpal, cosglobalang, singlobalang; -int32_t cosviewingrangeglobalang, sinviewingrangeglobalang; -char *globalpalwritten; -int32_t globaluclip, globaldclip, globvis; -int32_t globalvisibility, globalhisibility, globalpisibility, globalcisibility; -char globparaceilclip, globparaflorclip; - -int32_t xyaspect, viewingrangerecip; - -intptr_t asm1, asm2, asm3, asm4,palookupoffse[4]; -int32_t vplce[4], vince[4], bufplce[4]; -char globalxshift, globalyshift; -int32_t globalxpanning, globalypanning, globalshade; -int16_t globalpicnum, globalshiftval; -int32_t globalzd, globalyscale, globalorientation; -intptr_t globalbufplc; -int32_t globalx1, globaly1, globalx2, globaly2, globalx3, globaly3, globalzx; -int32_t globalx, globaly, globalz; - -int16_t sectorborder[256], sectorbordercnt; -static char tablesloaded = 0; -int32_t pageoffset, ydim16, qsetmode = 0; -int32_t startposx, startposy, startposz; -int16_t startang, startsectnum; -int16_t pointhighlight, linehighlight, highlightcnt; -int32_t lastx[MAXYDIM]; -char *transluc = NULL, paletteloaded = 0; - -int32_t halfxdim16, midydim16; - -#define FASTPALGRIDSIZ 8 -static int32_t rdist[129], gdist[129], bdist[129]; -static char colhere[((FASTPALGRIDSIZ+2)*(FASTPALGRIDSIZ+2)*(FASTPALGRIDSIZ+2))>>3]; -static char colhead[(FASTPALGRIDSIZ+2)*(FASTPALGRIDSIZ+2)*(FASTPALGRIDSIZ+2)]; -static int32_t colnext[256]; -static char coldist[8] = {0,1,2,3,4,3,2,1}; -static int32_t colscan[27]; - -static int16_t clipnum, hitwalls[4]; -const int32_t hitscangoalx = (1<<29)-1, hitscangoaly = (1<<29)-1; -#ifdef USE_OPENGL -int32_t hitallsprites = 0; -#endif - -typedef struct { int32_t x1, y1, x2, y2; } linetype; -static linetype clipit[MAXCLIPNUM]; -static int16_t clipsectorlist[MAXCLIPNUM], clipsectnum, origclipsectorlist[MAXCLIPNUM], origclipsectnum; -static int16_t clipspritelist[MAXCLIPNUM], clipspritenum; // sector-like sprite clipping -static int16_t clipobjectval[MAXCLIPNUM]; - -typedef struct -{ - int32_t sx, sy, z; - int16_t a, picnum; - int8_t dashade; - char dapalnum, dastat, pagesleft; - int32_t cx1, cy1, cx2, cy2; - int32_t uniqid; //JF extension -} permfifotype; -static permfifotype permfifo[MAXPERMS]; -static int32_t permhead = 0, permtail = 0; - -int16_t numscans, numhits, numbunches; -int16_t capturecount = 0; - -char vgapal16[4*256] = -{ - 00,00,00,00, 42,00,00,00, 00,42,00,00, 42,42,00,00, 00,00,42,00, - 42,00,42,00, 00,21,42,00, 42,42,42,00, 21,21,21,00, 63,21,21,00, - 21,63,21,00, 63,63,21,00, 21,21,63,00, 63,21,63,00, 21,63,63,00, - 63,63,63,00 -}; - -int16_t editstatus = 0; -int16_t searchit; -int32_t searchx = -1, searchy; //search input -int16_t searchsector, searchwall, searchstat; //search output - -// if searchstat==0 (wall), searchbottomwall is ==.nextwall if aiming at -// bottom of a wall with swapped walls (.cstat&2), else it's ==searchwall -int16_t searchbottomwall; - -double msens = 1.0; - -static char artfilename[20]; -static int32_t numtilefiles, artfil = -1, artfilnum, artfilplc; - -char inpreparemirror = 0; -static int32_t mirrorsx1, mirrorsy1, mirrorsx2, mirrorsy2; - -static int32_t setviewcnt = 0; // interface layers use this now -static int32_t bakframeplace[4], bakxsiz[4], bakysiz[4]; -static int32_t bakwindowx1[4], bakwindowy1[4]; -static int32_t bakwindowx2[4], bakwindowy2[4]; -#ifdef USE_OPENGL -static int32_t bakrendmode,baktile; -#endif - -int32_t totalclocklock; - -char apptitle[256] = "Build Engine"; - -uint8_t **basepaltableptr; -uint8_t basepalcount; -uint8_t curbasepal; - -palette_t curpalette[256]; // the current palette, unadjusted for brightness or tint -palette_t curpalettefaded[256]; // the current palette, adjusted for brightness and tint (ie. what gets sent to the card) -palette_t palfadergb = { 0,0,0,0 }; -char palfadedelta = 0; - - - -// -// Internal Engine Functions -// -//int32_t cacheresets = 0,cacheinvalidates = 0; - - -// -// getpalookup (internal) -// -static inline int32_t getpalookup(int32_t davis, int32_t dashade) -{ - return(min(max(dashade+(davis>>8),0),numpalookups-1)); -} - - -// -// scansector (internal) -// -static void scansector(int16_t sectnum) -{ - walltype *wal, *wal2; - spritetype *spr; - int32_t xs, ys, x1, y1, x2, y2, xp1, yp1, xp2=0, yp2=0, tempint; - int16_t z, zz, startwall, endwall, numscansbefore, scanfirst, bunchfrst; - int16_t nextsectnum; - - if (sectnum < 0) return; - - if (automapping) show2dsector[sectnum>>3] |= pow2char[sectnum&7]; - - sectorborder[0] = sectnum, sectorbordercnt = 1; - do - { - sectnum = sectorborder[--sectorbordercnt]; - - for (z=headspritesect[sectnum]; z>=0; z=nextspritesect[z]) - { - spr = &sprite[z]; - if ((((spr->cstat&0x8000) == 0) || (showinvisibility)) && - (spr->xrepeat > 0) && (spr->yrepeat > 0) && - (spritesortcnt < MAXSPRITESONSCREEN)) - { - xs = spr->x-globalposx; ys = spr->y-globalposy; - if ((spr->cstat&48) || (xs*cosglobalang+ys*singlobalang > 0)) - { - copybufbyte(spr,&tsprite[spritesortcnt],sizeof(spritetype)); - spriteext[z].tspr = (spritetype *)&tsprite[spritesortcnt]; - tsprite[spritesortcnt++].owner = z; - } - } - } - - gotsector[sectnum>>3] |= pow2char[sectnum&7]; - - bunchfrst = numbunches; - numscansbefore = numscans; - - startwall = sector[sectnum].wallptr; - endwall = startwall + sector[sectnum].wallnum; - scanfirst = numscans; - for (z=startwall,wal=&wall[z]; znextsector; - - wal2 = &wall[wal->point2]; - x1 = wal->x-globalposx; y1 = wal->y-globalposy; - x2 = wal2->x-globalposx; y2 = wal2->y-globalposy; - - if ((nextsectnum >= 0) && ((wal->cstat&32) == 0)) - if ((gotsector[nextsectnum>>3]&pow2char[nextsectnum&7]) == 0) - { - tempint = x1*y2-x2*y1; - if (((unsigned)tempint+262144) < 524288) // BXY_MAX? - if (mulscale5(tempint,tempint) <= (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)) - sectorborder[sectorbordercnt++] = nextsectnum; - } - - if ((z == startwall) || (wall[z-1].point2 != z)) - { - xp1 = dmulscale6(y1,cosglobalang,-x1,singlobalang); - yp1 = dmulscale6(x1,cosviewingrangeglobalang,y1,sinviewingrangeglobalang); - } - else - { - xp1 = xp2; - yp1 = yp2; - } - xp2 = dmulscale6(y2,cosglobalang,-x2,singlobalang); - yp2 = dmulscale6(x2,cosviewingrangeglobalang,y2,sinviewingrangeglobalang); - if ((yp1 < 256) && (yp2 < 256)) goto skipitaddwall; - - //If wall's NOT facing you - if (dmulscale32(xp1,yp2,-xp2,yp1) >= 0) goto skipitaddwall; - - if (xp1 >= -yp1) - { - if ((xp1 > yp1) || (yp1 == 0)) goto skipitaddwall; - xb1[numscans] = halfxdimen + scale(xp1,halfxdimen,yp1); - if (xp1 >= 0) xb1[numscans]++; //Fix for SIGNED divide - if (xb1[numscans] >= xdimen) xb1[numscans] = xdimen-1; - yb1[numscans] = yp1; - } - else - { - if (xp2 < -yp2) goto skipitaddwall; - xb1[numscans] = 0; - tempint = yp1-yp2+xp1-xp2; - if (tempint == 0) goto skipitaddwall; - yb1[numscans] = yp1 + scale(yp2-yp1,xp1+yp1,tempint); - } - if (yb1[numscans] < 256) goto skipitaddwall; - - if (xp2 <= yp2) - { - if ((xp2 < -yp2) || (yp2 == 0)) goto skipitaddwall; - xb2[numscans] = halfxdimen + scale(xp2,halfxdimen,yp2) - 1; - if (xp2 >= 0) xb2[numscans]++; //Fix for SIGNED divide - if (xb2[numscans] >= xdimen) xb2[numscans] = xdimen-1; - yb2[numscans] = yp2; - } - else - { - if (xp1 > yp1) goto skipitaddwall; - xb2[numscans] = xdimen-1; - tempint = xp2-xp1+yp1-yp2; - if (tempint == 0) goto skipitaddwall; - yb2[numscans] = yp1 + scale(yp2-yp1,yp1-xp1,tempint); - } - if ((yb2[numscans] < 256) || (xb1[numscans] > xb2[numscans])) goto skipitaddwall; - - //Made it all the way! - thesector[numscans] = sectnum; thewall[numscans] = z; - rx1[numscans] = xp1; ry1[numscans] = yp1; - rx2[numscans] = xp2; ry2[numscans] = yp2; - p2[numscans] = numscans+1; - numscans++; - skipitaddwall: - - if ((wall[z].point2 < z) && (scanfirst < numscans)) - p2[numscans-1] = scanfirst, scanfirst = numscans; - } - - for (z=numscansbefore; z= xb1[p2[z]])) - bunchfirst[numbunches++] = p2[z], p2[z] = -1; - - for (z=bunchfrst; z=0; zz=p2[zz]); - bunchlast[z] = zz; - } - } - while (sectorbordercnt > 0); -} - - -// -// maskwallscan (internal) -// -static void maskwallscan(int32_t x1, int32_t x2, int16_t *uwal, int16_t *dwal, int32_t *swal, int32_t *lwal) -{ - int32_t x,/* startx,*/ xnice, ynice; - intptr_t startx, p, fpalookup; - int32_t y1ve[4], y2ve[4], /* p,*/ tsizx, tsizy; -#ifndef ENGINE_USING_A_C - char bad; - int32_t i, u4, d4, dax, z; -#endif - - tsizx = tilesizx[globalpicnum]; - tsizy = tilesizy[globalpicnum]; - setgotpic(globalpicnum); - if ((tsizx <= 0) || (tsizy <= 0)) return; - if ((uwal[x1] > ydimen) && (uwal[x2] > ydimen)) return; - if ((dwal[x1] < 0) && (dwal[x2] < 0)) return; - - if (waloff[globalpicnum] == 0) loadtile(globalpicnum); - - startx = x1; - - xnice = (pow2long[picsiz[globalpicnum]&15] == tsizx); - if (xnice) tsizx = (tsizx-1); - ynice = (pow2long[picsiz[globalpicnum]>>4] == tsizy); - if (ynice) tsizy = (picsiz[globalpicnum]>>4); - - if (palookup[globalpal] == NULL) - globalpal = 0; - - fpalookup = FP_OFF(palookup[globalpal]); - - setupmvlineasm(globalshiftval); - -#ifndef ENGINE_USING_A_C - - x = startx; - while ((startumost[x+windowx1] > startdmost[x+windowx1]) && (x <= x2)) x++; - - p = x+frameoffset; - - for (; (x<=x2)&&(p&3); x++,p++) - { - y1ve[0] = max(uwal[x],startumost[x+windowx1]-windowy1); - y2ve[0] = min(dwal[x],startdmost[x+windowx1]-windowy1); - if (y2ve[0] <= y1ve[0]) continue; - - palookupoffse[0] = fpalookup+(getpalookup((int32_t)mulscale16(swal[x],globvis),globalshade)<<8); - - bufplce[0] = lwal[x] + globalxpanning; - if (bufplce[0] >= tsizx) { if (xnice == 0) bufplce[0] %= tsizx; else bufplce[0] &= tsizx; } - if (ynice == 0) bufplce[0] *= tsizy; else bufplce[0] <<= tsizy; - - vince[0] = swal[x]*globalyscale; - vplce[0] = globalzd + vince[0]*(y1ve[0]-globalhoriz+1); - - mvlineasm1(vince[0],palookupoffse[0],y2ve[0]-y1ve[0]-1,vplce[0],bufplce[0]+waloff[globalpicnum],p+ylookup[y1ve[0]]); - } - for (; x<=x2-3; x+=4,p+=4) - { - bad = 0; - for (z=3,dax=x+3; z>=0; z--,dax--) - { - y1ve[z] = max(uwal[dax],startumost[dax+windowx1]-windowy1); - y2ve[z] = min(dwal[dax],startdmost[dax+windowx1]-windowy1)-1; - if (y2ve[z] < y1ve[z]) { bad += pow2char[z]; continue; } - - i = lwal[dax] + globalxpanning; - if (i >= tsizx) { if (xnice == 0) i %= tsizx; else i &= tsizx; } - if (ynice == 0) i *= tsizy; else i <<= tsizy; - bufplce[z] = waloff[globalpicnum]+i; - - vince[z] = swal[dax]*globalyscale; - vplce[z] = globalzd + vince[z]*(y1ve[z]-globalhoriz+1); - } - if (bad == 15) continue; - - palookupoffse[0] = fpalookup+(getpalookup((int32_t)mulscale16(swal[x],globvis),globalshade)<<8); - palookupoffse[3] = fpalookup+(getpalookup((int32_t)mulscale16(swal[x+3],globvis),globalshade)<<8); - - if ((palookupoffse[0] == palookupoffse[3]) && ((bad&0x9) == 0)) - { - palookupoffse[1] = palookupoffse[0]; - palookupoffse[2] = palookupoffse[0]; - } - else - { - palookupoffse[1] = fpalookup+(getpalookup((int32_t)mulscale16(swal[x+1],globvis),globalshade)<<8); - palookupoffse[2] = fpalookup+(getpalookup((int32_t)mulscale16(swal[x+2],globvis),globalshade)<<8); - } - - u4 = max(max(y1ve[0],y1ve[1]),max(y1ve[2],y1ve[3])); - d4 = min(min(y2ve[0],y2ve[1]),min(y2ve[2],y2ve[3])); - - if ((bad > 0) || (u4 >= d4)) - { - if (!(bad&1)) mvlineasm1(vince[0],palookupoffse[0],y2ve[0]-y1ve[0],vplce[0],bufplce[0],ylookup[y1ve[0]]+p+0); - if (!(bad&2)) mvlineasm1(vince[1],palookupoffse[1],y2ve[1]-y1ve[1],vplce[1],bufplce[1],ylookup[y1ve[1]]+p+1); - if (!(bad&4)) mvlineasm1(vince[2],palookupoffse[2],y2ve[2]-y1ve[2],vplce[2],bufplce[2],ylookup[y1ve[2]]+p+2); - if (!(bad&8)) mvlineasm1(vince[3],palookupoffse[3],y2ve[3]-y1ve[3],vplce[3],bufplce[3],ylookup[y1ve[3]]+p+3); - continue; - } - - if (u4 > y1ve[0]) vplce[0] = mvlineasm1(vince[0],palookupoffse[0],u4-y1ve[0]-1,vplce[0],bufplce[0],ylookup[y1ve[0]]+p+0); - if (u4 > y1ve[1]) vplce[1] = mvlineasm1(vince[1],palookupoffse[1],u4-y1ve[1]-1,vplce[1],bufplce[1],ylookup[y1ve[1]]+p+1); - if (u4 > y1ve[2]) vplce[2] = mvlineasm1(vince[2],palookupoffse[2],u4-y1ve[2]-1,vplce[2],bufplce[2],ylookup[y1ve[2]]+p+2); - if (u4 > y1ve[3]) vplce[3] = mvlineasm1(vince[3],palookupoffse[3],u4-y1ve[3]-1,vplce[3],bufplce[3],ylookup[y1ve[3]]+p+3); - - if (d4 >= u4) mvlineasm4(d4-u4+1,ylookup[u4]+p); - - i = p+ylookup[d4+1]; - if (y2ve[0] > d4) mvlineasm1(vince[0],palookupoffse[0],y2ve[0]-d4-1,vplce[0],bufplce[0],i+0); - if (y2ve[1] > d4) mvlineasm1(vince[1],palookupoffse[1],y2ve[1]-d4-1,vplce[1],bufplce[1],i+1); - if (y2ve[2] > d4) mvlineasm1(vince[2],palookupoffse[2],y2ve[2]-d4-1,vplce[2],bufplce[2],i+2); - if (y2ve[3] > d4) mvlineasm1(vince[3],palookupoffse[3],y2ve[3]-d4-1,vplce[3],bufplce[3],i+3); - } - for (; x<=x2; x++,p++) - { - y1ve[0] = max(uwal[x],startumost[x+windowx1]-windowy1); - y2ve[0] = min(dwal[x],startdmost[x+windowx1]-windowy1); - if (y2ve[0] <= y1ve[0]) continue; - - palookupoffse[0] = fpalookup+(getpalookup((int32_t)mulscale16(swal[x],globvis),globalshade)<<8); - - bufplce[0] = lwal[x] + globalxpanning; - if (bufplce[0] >= tsizx) { if (xnice == 0) bufplce[0] %= tsizx; else bufplce[0] &= tsizx; } - if (ynice == 0) bufplce[0] *= tsizy; else bufplce[0] <<= tsizy; - - vince[0] = swal[x]*globalyscale; - vplce[0] = globalzd + vince[0]*(y1ve[0]-globalhoriz+1); - - mvlineasm1(vince[0],palookupoffse[0],y2ve[0]-y1ve[0]-1,vplce[0],bufplce[0]+waloff[globalpicnum],p+ylookup[y1ve[0]]); - } - -#else // ENGINE_USING_A_C - - p = startx+frameoffset; - for (x=startx; x<=x2; x++,p++) - { - y1ve[0] = max(uwal[x],startumost[x+windowx1]-windowy1); - y2ve[0] = min(dwal[x],startdmost[x+windowx1]-windowy1); - if (y2ve[0] <= y1ve[0]) continue; - - palookupoffse[0] = fpalookup+(getpalookup((int32_t)mulscale16(swal[x],globvis),globalshade)<<8); - - bufplce[0] = lwal[x] + globalxpanning; - if (bufplce[0] >= tsizx) { if (xnice == 0) bufplce[0] %= tsizx; else bufplce[0] &= tsizx; } - if (ynice == 0) bufplce[0] *= tsizy; else bufplce[0] <<= tsizy; - - vince[0] = swal[x]*globalyscale; - vplce[0] = globalzd + vince[0]*(y1ve[0]-globalhoriz+1); - - mvlineasm1(vince[0],palookupoffse[0],y2ve[0]-y1ve[0]-1,vplce[0],bufplce[0]+waloff[globalpicnum],p+ylookup[y1ve[0]]); - } - -#endif - - faketimerhandler(); -} - - -// -// wallfront (internal) -// -int32_t wallfront(int32_t l1, int32_t l2) -{ - walltype *wal; - int32_t x11, y11, x21, y21, x12, y12, x22, y22, dx, dy, t1, t2; - - wal = &wall[thewall[l1]]; x11 = wal->x; y11 = wal->y; - wal = &wall[wal->point2]; x21 = wal->x; y21 = wal->y; - wal = &wall[thewall[l2]]; x12 = wal->x; y12 = wal->y; - wal = &wall[wal->point2]; x22 = wal->x; y22 = wal->y; - - dx = x21-x11; dy = y21-y11; - t1 = dmulscale2(x12-x11,dy,-dx,y12-y11); //p1(l2) vs. l1 - t2 = dmulscale2(x22-x11,dy,-dx,y22-y11); //p2(l2) vs. l1 - if (t1 == 0) { t1 = t2; if (t1 == 0) return(-1); } - if (t2 == 0) t2 = t1; - if ((t1^t2) >= 0) - { - t2 = dmulscale2(globalposx-x11,dy,-dx,globalposy-y11); //pos vs. l1 - return((t2^t1) >= 0); - } - - dx = x22-x12; dy = y22-y12; - t1 = dmulscale2(x11-x12,dy,-dx,y11-y12); //p1(l1) vs. l2 - t2 = dmulscale2(x21-x12,dy,-dx,y21-y12); //p2(l1) vs. l2 - if (t1 == 0) { t1 = t2; if (t1 == 0) return(-1); } - if (t2 == 0) t2 = t1; - if ((t1^t2) >= 0) - { - t2 = dmulscale2(globalposx-x12,dy,-dx,globalposy-y12); //pos vs. l2 - return((t2^t1) < 0); - } - return(-2); -} - - -// -// spritewallfront (internal) -// -static inline int32_t spritewallfront(spritetype *s, int32_t w) -{ - walltype *wal; - int32_t x1, y1; - - wal = &wall[w]; x1 = wal->x; y1 = wal->y; - wal = &wall[wal->point2]; - return (dmulscale32(wal->x-x1,s->y-y1,-(s->x-x1),wal->y-y1) >= 0); -} - -// -// spritebehindwall(internal) -// -#if 0 -static int32_t spriteobstructswall(spritetype *s, int32_t w) -{ - walltype *wal; - int32_t x, y; - int32_t x1, y1; - int32_t x2, y2; - double a1, b1, c1; - double a2, b2, c2; - double d1, d2; - - // wall line equation - wal = &wall[w]; x1 = wal->x - globalposx; y1 = wal->y - globalposy; - wal = &wall[wal->point2]; x2 = wal->x - globalposx; y2 = wal->y - globalposy; - if ((x2 - x1) != 0) - a1 = (float)(y2 - y1)/(x2 - x1); - else - a1 = 1e+37; // not infinite, but almost ;) - b1 = -1; - c1 = (y1 - (a1 * x1)); - - // player to sprite line equation - if ((s->x - globalposx) != 0) - a2 = (float)(s->y - globalposy)/(s->x - globalposx); - else - a2 = 1e+37; - b2 = -1; - c2 = 0; - - // intersection point - d1 = (float)(1) / (a1*b2 - a2*b1); - x = ((b1*c2 - b2*c1) * d1); - y = ((a2*c1 - a1*c2) * d1); - - // distance between the sprite and the player - a1 = s->x - globalposx; - b1 = s->y - globalposy; - d1 = (a1 * a1 + b1 * b1); - - // distance between the intersection point and the player - d2 = (x * x + y * y); - - // check if the sprite obstructs the wall - if ((d1 < d2) && (min(x1, x2) <= x) && (x <= max(x1, x2)) && (min(y1, y2) <= y) && (y <= max(y1, y2))) - return (1); - else - return (0); -} -#endif -// -// bunchfront (internal) -// -static inline int32_t bunchfront(int32_t b1, int32_t b2) -{ - int32_t x1b1, x2b1, x1b2, x2b2, b1f, b2f, i; - - b1f = bunchfirst[b1]; x1b1 = xb1[b1f]; x2b2 = xb2[bunchlast[b2]]+1; - if (x1b1 >= x2b2) return(-1); - b2f = bunchfirst[b2]; x1b2 = xb1[b2f]; x2b1 = xb2[bunchlast[b1]]+1; - if (x1b2 >= x2b1) return(-1); - - if (x1b1 >= x1b2) - { - for (i=b2f; xb2[i] xr) return; - r = horizlookup2[yp-globalhoriz+horizycent]; - asm1 = globalx1*r; - asm2 = globaly2*r; - s = ((int32_t)getpalookup((int32_t)mulscale16(r,globvis),globalshade)<<8); - - hlineasm4(xr-xl,0,s,globalx2*r+globalypanning,globaly1*r+globalxpanning, - ylookup[yp]+xr+frameoffset); -} - - -// -// slowhline (internal) -// -static inline void slowhline(int32_t xr, int32_t yp) -{ - int32_t xl, r; - - xl = lastx[yp]; if (xl > xr) return; - r = horizlookup2[yp-globalhoriz+horizycent]; - asm1 = globalx1*r; - asm2 = globaly2*r; - - asm3 = (intptr_t)globalpalwritten + ((intptr_t)getpalookup((int32_t)mulscale16(r,globvis),globalshade)<<8); - if (!(globalorientation&256)) - { - mhline(globalbufplc,globaly1*r+globalxpanning-asm1*(xr-xl),(xr-xl)<<16,0L, - globalx2*r+globalypanning-asm2*(xr-xl),ylookup[yp]+xl+frameoffset); - return; - } - thline(globalbufplc,globaly1*r+globalxpanning-asm1*(xr-xl),(xr-xl)<<16,0L, - globalx2*r+globalypanning-asm2*(xr-xl),ylookup[yp]+xl+frameoffset); -} - - -// -// prepwall (internal) -// -static void prepwall(int32_t z, walltype *wal) -{ - int32_t i, l=0, ol=0, splc, sinc, x, topinc, top, botinc, bot, walxrepeat; - - walxrepeat = (wal->xrepeat<<3); - - //lwall calculation - i = xb1[z]-halfxdimen; - topinc = -(ry1[z]>>2); - botinc = ((ry2[z]-ry1[z])>>8); - top = mulscale5(rx1[z],xdimen)+mulscale2(topinc,i); - bot = mulscale11(rx1[z]-rx2[z],xdimen)+mulscale2(botinc,i); - - splc = mulscale19(ry1[z],xdimscale); - sinc = mulscale16(ry2[z]-ry1[z],xdimscale); - - x = xb1[z]; - if (bot != 0) - { - l = divscale12(top,bot); - swall[x] = mulscale21(l,sinc)+splc; - l *= walxrepeat; - lwall[x] = (l>>18); - } - while (x+4 <= xb2[z]) - { - top += topinc; bot += botinc; - if (bot != 0) - { - ol = l; l = divscale12(top,bot); - swall[x+4] = mulscale21(l,sinc)+splc; - l *= walxrepeat; - lwall[x+4] = (l>>18); - } - i = ((ol+l)>>1); - lwall[x+2] = (i>>18); - lwall[x+1] = ((ol+i)>>19); - lwall[x+3] = ((l+i)>>19); - swall[x+2] = ((swall[x]+swall[x+4])>>1); - swall[x+1] = ((swall[x]+swall[x+2])>>1); - swall[x+3] = ((swall[x+4]+swall[x+2])>>1); - x += 4; - } - if (x+2 <= xb2[z]) - { - top += (topinc>>1); bot += (botinc>>1); - if (bot != 0) - { - ol = l; l = divscale12(top,bot); - swall[x+2] = mulscale21(l,sinc)+splc; - l *= walxrepeat; - lwall[x+2] = (l>>18); - } - lwall[x+1] = ((l+ol)>>19); - swall[x+1] = ((swall[x]+swall[x+2])>>1); - x += 2; - } - if (x+1 <= xb2[z]) - { - bot += (botinc>>2); - if (bot != 0) - { - l = divscale12(top+(topinc>>2),bot); - swall[x+1] = mulscale21(l,sinc)+splc; - lwall[x+1] = mulscale18(l,walxrepeat); - } - } - - if (lwall[xb1[z]] < 0) lwall[xb1[z]] = 0; - if ((lwall[xb2[z]] >= walxrepeat) && (walxrepeat)) lwall[xb2[z]] = walxrepeat-1; - if (wal->cstat&8) - { - walxrepeat--; - for (x=xb1[z]; x<=xb2[z]; x++) lwall[x] = walxrepeat-lwall[x]; - } -} - - -// -// animateoffs (internal) -// -inline int32_t animateoffs(int16_t tilenum, int16_t fakevar) -{ - int32_t i, k, offs; - - UNREFERENCED_PARAMETER(fakevar); - - offs = 0; - i = (totalclocklock>>((picanm[tilenum]>>24)&15)); - if ((picanm[tilenum]&63) > 0) - { - switch (picanm[tilenum]&192) - { - case 64: - k = (i%((picanm[tilenum]&63)<<1)); - if (k < (picanm[tilenum]&63)) - offs = k; - else - offs = (((picanm[tilenum]&63)<<1)-k); - break; - case 128: - offs = (i%((picanm[tilenum]&63)+1)); - break; - case 192: - offs = -(i%((picanm[tilenum]&63)+1)); - } - } - return(offs); -} - - -// -// owallmost (internal) -// -static int32_t owallmost(int16_t *mostbuf, int32_t w, int32_t z) -{ - int32_t bad, inty, xcross, y, yinc; - int32_t s1, s2, s3, s4, ix1, ix2, iy1, iy2, t; - int32_t i; - - z <<= 7; - s1 = mulscale20(globaluclip,yb1[w]); s2 = mulscale20(globaluclip,yb2[w]); - s3 = mulscale20(globaldclip,yb1[w]); s4 = mulscale20(globaldclip,yb2[w]); - bad = (zs3)<<2)+((z>s4)<<3); - - ix1 = xb1[w]; iy1 = yb1[w]; - ix2 = xb2[w]; iy2 = yb2[w]; - - if ((bad&3) == 3) - { - //clearbufbyte(&mostbuf[ix1],(ix2-ix1+1)*sizeof(mostbuf[0]),0L); - for (i=ix1; i<=ix2; i++) mostbuf[i] = 0; - return(bad); - } - - if ((bad&12) == 12) - { - //clearbufbyte(&mostbuf[ix1],(ix2-ix1+1)*sizeof(mostbuf[0]),ydimen+(ydimen<<16)); - for (i=ix1; i<=ix2; i++) mostbuf[i] = ydimen; - return(bad); - } - - if (bad&3) - { - t = divscale30(z-s1,s2-s1); - inty = yb1[w] + mulscale30(yb2[w]-yb1[w],t); - xcross = xb1[w] + scale(mulscale30(yb2[w],t),xb2[w]-xb1[w],inty); - - if ((bad&3) == 2) - { - if (xb1[w] <= xcross) { iy2 = inty; ix2 = xcross; } - //clearbufbyte(&mostbuf[xcross+1],(xb2[w]-xcross)*sizeof(mostbuf[0]),0L); - for (i=xcross+1; i<=xb2[w]; i++) mostbuf[i] = 0; - } - else - { - if (xcross <= xb2[w]) { iy1 = inty; ix1 = xcross; } - //clearbufbyte(&mostbuf[xb1[w]],(xcross-xb1[w]+1)*sizeof(mostbuf[0]),0L); - for (i=xb1[w]; i<=xcross; i++) mostbuf[i] = 0; - } - } - - if (bad&12) - { - t = divscale30(z-s3,s4-s3); - inty = yb1[w] + mulscale30(yb2[w]-yb1[w],t); - xcross = xb1[w] + scale(mulscale30(yb2[w],t),xb2[w]-xb1[w],inty); - - if ((bad&12) == 8) - { - if (xb1[w] <= xcross) { iy2 = inty; ix2 = xcross; } - //clearbufbyte(&mostbuf[xcross+1],(xb2[w]-xcross)*sizeof(mostbuf[0]),ydimen+(ydimen<<16)); - for (i=xcross+1; i<=xb2[w]; i++) mostbuf[i] = ydimen; - } - else - { - if (xcross <= xb2[w]) { iy1 = inty; ix1 = xcross; } - //clearbufbyte(&mostbuf[xb1[w]],(xcross-xb1[w]+1)*sizeof(mostbuf[0]),ydimen+(ydimen<<16)); - for (i=xb1[w]; i<=xcross; i++) mostbuf[i] = ydimen; - } - } - - y = (scale(z,xdimenscale,iy1)<<4); - yinc = ((scale(z,xdimenscale,iy2)<<4)-y) / (ix2-ix1+1); - qinterpolatedown16short((intptr_t)&mostbuf[ix1],ix2-ix1+1,y+(globalhoriz<<16),yinc); - - if (mostbuf[ix1] < 0) mostbuf[ix1] = 0; - if (mostbuf[ix1] > ydimen) mostbuf[ix1] = ydimen; - if (mostbuf[ix2] < 0) mostbuf[ix2] = 0; - if (mostbuf[ix2] > ydimen) mostbuf[ix2] = ydimen; - - return(bad); -} - - -// -// wallmost (internal) -// -static int32_t wallmost(int16_t *mostbuf, int32_t w, int32_t sectnum, char dastat) -{ - int32_t bad, i, j, t, y, z, inty, intz, xcross, yinc, fw; - int32_t x1, y1, z1, x2, y2, z2, xv, yv, dx, dy, dasqr, oz1, oz2; - int32_t s1, s2, s3, s4, ix1, ix2, iy1, iy2; - //char datempbuf[256]; - - if (dastat == 0) - { - z = sector[sectnum].ceilingz-globalposz; - if ((sector[sectnum].ceilingstat&2) == 0) return(owallmost(mostbuf,w,z)); - } - else - { - z = sector[sectnum].floorz-globalposz; - if ((sector[sectnum].floorstat&2) == 0) return(owallmost(mostbuf,w,z)); - } - - i = thewall[w]; - if (i == sector[sectnum].wallptr) return(owallmost(mostbuf,w,z)); - - x1 = wall[i].x; x2 = wall[wall[i].point2].x-x1; - y1 = wall[i].y; y2 = wall[wall[i].point2].y-y1; - - fw = sector[sectnum].wallptr; i = wall[fw].point2; - dx = wall[i].x-wall[fw].x; dy = wall[i].y-wall[fw].y; - dasqr = krecipasm(nsqrtasm(dx*dx+dy*dy)); - - if (xb1[w] == 0) - { xv = cosglobalang+sinviewingrangeglobalang; yv = singlobalang-cosviewingrangeglobalang; } - else - { xv = x1-globalposx; yv = y1-globalposy; } - i = xv*(y1-globalposy)-yv*(x1-globalposx); j = yv*x2-xv*y2; - if (klabs(j) > klabs(i>>3)) i = divscale28(i,j); - if (dastat == 0) - { - t = mulscale15(sector[sectnum].ceilingheinum,dasqr); - z1 = sector[sectnum].ceilingz; - } - else - { - t = mulscale15(sector[sectnum].floorheinum,dasqr); - z1 = sector[sectnum].floorz; - } - z1 = dmulscale24(dx*t,mulscale20(y2,i)+((y1-wall[fw].y)<<8), - -dy*t,mulscale20(x2,i)+((x1-wall[fw].x)<<8))+((z1-globalposz)<<7); - - - if (xb2[w] == xdimen-1) - { xv = cosglobalang-sinviewingrangeglobalang; yv = singlobalang+cosviewingrangeglobalang; } - else - { xv = (x2+x1)-globalposx; yv = (y2+y1)-globalposy; } - i = xv*(y1-globalposy)-yv*(x1-globalposx); j = yv*x2-xv*y2; - if (klabs(j) > klabs(i>>3)) i = divscale28(i,j); - if (dastat == 0) - { - t = mulscale15(sector[sectnum].ceilingheinum,dasqr); - z2 = sector[sectnum].ceilingz; - } - else - { - t = mulscale15(sector[sectnum].floorheinum,dasqr); - z2 = sector[sectnum].floorz; - } - z2 = dmulscale24(dx*t,mulscale20(y2,i)+((y1-wall[fw].y)<<8), - -dy*t,mulscale20(x2,i)+((x1-wall[fw].x)<<8))+((z2-globalposz)<<7); - - - s1 = mulscale20(globaluclip,yb1[w]); s2 = mulscale20(globaluclip,yb2[w]); - s3 = mulscale20(globaldclip,yb1[w]); s4 = mulscale20(globaldclip,yb2[w]); - bad = (z1s3)<<2)+((z2>s4)<<3); - - ix1 = xb1[w]; ix2 = xb2[w]; - iy1 = yb1[w]; iy2 = yb2[w]; - oz1 = z1; oz2 = z2; - - if ((bad&3) == 3) - { - //clearbufbyte(&mostbuf[ix1],(ix2-ix1+1)*sizeof(mostbuf[0]),0L); - for (i=ix1; i<=ix2; i++) mostbuf[i] = 0; - return(bad); - } - - if ((bad&12) == 12) - { - //clearbufbyte(&mostbuf[ix1],(ix2-ix1+1)*sizeof(mostbuf[0]),ydimen+(ydimen<<16)); - for (i=ix1; i<=ix2; i++) mostbuf[i] = ydimen; - return(bad); - } - - if (bad&3) - { - //inty = intz / (globaluclip>>16) - t = divscale30(oz1-s1,s2-s1+oz1-oz2); - inty = yb1[w] + mulscale30(yb2[w]-yb1[w],t); - intz = oz1 + mulscale30(oz2-oz1,t); - xcross = xb1[w] + scale(mulscale30(yb2[w],t),xb2[w]-xb1[w],inty); - - //t = divscale30((x1<<4)-xcross*yb1[w],xcross*(yb2[w]-yb1[w])-((x2-x1)<<4)); - //inty = yb1[w] + mulscale30(yb2[w]-yb1[w],t); - //intz = z1 + mulscale30(z2-z1,t); - - if ((bad&3) == 2) - { - if (xb1[w] <= xcross) { z2 = intz; iy2 = inty; ix2 = xcross; } - //clearbufbyte(&mostbuf[xcross+1],(xb2[w]-xcross)*sizeof(mostbuf[0]),0L); - for (i=xcross+1; i<=xb2[w]; i++) mostbuf[i] = 0; - } - else - { - if (xcross <= xb2[w]) { z1 = intz; iy1 = inty; ix1 = xcross; } - //clearbufbyte(&mostbuf[xb1[w]],(xcross-xb1[w]+1)*sizeof(mostbuf[0]),0L); - for (i=xb1[w]; i<=xcross; i++) mostbuf[i] = 0; - } - } - - if (bad&12) - { - //inty = intz / (globaldclip>>16) - t = divscale30(oz1-s3,s4-s3+oz1-oz2); - inty = yb1[w] + mulscale30(yb2[w]-yb1[w],t); - intz = oz1 + mulscale30(oz2-oz1,t); - xcross = xb1[w] + scale(mulscale30(yb2[w],t),xb2[w]-xb1[w],inty); - - //t = divscale30((x1<<4)-xcross*yb1[w],xcross*(yb2[w]-yb1[w])-((x2-x1)<<4)); - //inty = yb1[w] + mulscale30(yb2[w]-yb1[w],t); - //intz = z1 + mulscale30(z2-z1,t); - - if ((bad&12) == 8) - { - if (xb1[w] <= xcross) { z2 = intz; iy2 = inty; ix2 = xcross; } - //clearbufbyte(&mostbuf[xcross+1],(xb2[w]-xcross)*sizeof(mostbuf[0]),ydimen+(ydimen<<16)); - for (i=xcross+1; i<=xb2[w]; i++) mostbuf[i] = ydimen; - } - else - { - if (xcross <= xb2[w]) { z1 = intz; iy1 = inty; ix1 = xcross; } - //clearbufbyte(&mostbuf[xb1[w]],(xcross-xb1[w]+1)*sizeof(mostbuf[0]),ydimen+(ydimen<<16)); - for (i=xb1[w]; i<=xcross; i++) mostbuf[i] = ydimen; - } - } - - y = (scale(z1,xdimenscale,iy1)<<4); - yinc = ((scale(z2,xdimenscale,iy2)<<4)-y) / (ix2-ix1+1); - qinterpolatedown16short((intptr_t)&mostbuf[ix1],ix2-ix1+1,y+(globalhoriz<<16),yinc); - - if (mostbuf[ix1] < 0) mostbuf[ix1] = 0; - if (mostbuf[ix1] > ydimen) mostbuf[ix1] = ydimen; - if (mostbuf[ix2] < 0) mostbuf[ix2] = 0; - if (mostbuf[ix2] > ydimen) mostbuf[ix2] = ydimen; - - return(bad); -} - - -// -// ceilscan (internal) -// -static void ceilscan(int32_t x1, int32_t x2, int32_t sectnum) -{ - int32_t i, j, ox, oy, x, y1, y2, twall, bwall; - sectortype *sec; - - sec = §or[sectnum]; - if (palookup[sec->ceilingpal] != globalpalwritten) - { - globalpalwritten = palookup[sec->ceilingpal]; - if (!globalpalwritten) globalpalwritten = palookup[globalpal]; // JBF: fixes null-pointer crash - setpalookupaddress(globalpalwritten); - } - - globalzd = sec->ceilingz-globalposz; - if (globalzd > 0) return; - globalpicnum = sec->ceilingpicnum; - if ((unsigned)globalpicnum >= (unsigned)MAXTILES) globalpicnum = 0; - setgotpic(globalpicnum); - if ((tilesizx[globalpicnum] <= 0) || (tilesizy[globalpicnum] <= 0)) return; - if (picanm[globalpicnum]&192) globalpicnum += animateoffs((int16_t)globalpicnum,(int16_t)sectnum); - - if (waloff[globalpicnum] == 0) loadtile(globalpicnum); - globalbufplc = waloff[globalpicnum]; - - globalshade = (int32_t)sec->ceilingshade; - globvis = globalcisibility; - if (sec->visibility != 0) globvis = mulscale4(globvis,(int32_t)((uint8_t)(sec->visibility+16))); - globalorientation = (int32_t)sec->ceilingstat; - - - if ((globalorientation&64) == 0) - { - globalx1 = singlobalang; globalx2 = singlobalang; - globaly1 = cosglobalang; globaly2 = cosglobalang; - globalxpanning = (globalposx<<20); - globalypanning = -(globalposy<<20); - } - else - { - j = sec->wallptr; - ox = wall[wall[j].point2].x - wall[j].x; - oy = wall[wall[j].point2].y - wall[j].y; - i = nsqrtasm(ox*ox+oy*oy); if (i == 0) i = 1024; else i = 1048576/i; - globalx1 = mulscale10(dmulscale10(ox,singlobalang,-oy,cosglobalang),i); - globaly1 = mulscale10(dmulscale10(ox,cosglobalang,oy,singlobalang),i); - globalx2 = -globalx1; - globaly2 = -globaly1; - - ox = ((wall[j].x-globalposx)<<6); oy = ((wall[j].y-globalposy)<<6); - i = dmulscale14(oy,cosglobalang,-ox,singlobalang); - j = dmulscale14(ox,cosglobalang,oy,singlobalang); - ox = i; oy = j; - globalxpanning = globalx1*ox - globaly1*oy; - globalypanning = globaly2*ox + globalx2*oy; - } - globalx2 = mulscale16(globalx2,viewingrangerecip); - globaly1 = mulscale16(globaly1,viewingrangerecip); - globalxshift = (8-(picsiz[globalpicnum]&15)); - globalyshift = (8-(picsiz[globalpicnum]>>4)); - if (globalorientation&8) { globalxshift++; globalyshift++; } - - if ((globalorientation&0x4) > 0) - { - i = globalxpanning; globalxpanning = globalypanning; globalypanning = i; - i = globalx2; globalx2 = -globaly1; globaly1 = -i; - i = globalx1; globalx1 = globaly2; globaly2 = i; - } - if ((globalorientation&0x10) > 0) globalx1 = -globalx1, globaly1 = -globaly1, globalxpanning = -globalxpanning; - if ((globalorientation&0x20) > 0) globalx2 = -globalx2, globaly2 = -globaly2, globalypanning = -globalypanning; - globalx1 <<= globalxshift; globaly1 <<= globalxshift; - globalx2 <<= globalyshift; globaly2 <<= globalyshift; - globalxpanning <<= globalxshift; globalypanning <<= globalyshift; - globalxpanning += (((int32_t)sec->ceilingxpanning)<<24); - globalypanning += (((int32_t)sec->ceilingypanning)<<24); - globaly1 = (-globalx1-globaly1)*halfxdimen; - globalx2 = (globalx2-globaly2)*halfxdimen; - - sethlinesizes(picsiz[globalpicnum]&15,picsiz[globalpicnum]>>4,globalbufplc); - - globalx2 += globaly2*(x1-1); - globaly1 += globalx1*(x1-1); - globalx1 = mulscale16(globalx1,globalzd); - globalx2 = mulscale16(globalx2,globalzd); - globaly1 = mulscale16(globaly1,globalzd); - globaly2 = mulscale16(globaly2,globalzd); - globvis = klabs(mulscale10(globvis,globalzd)); - - if (!(globalorientation&0x180)) - { - y1 = umost[x1]; y2 = y1; - for (x=x1; x<=x2; x++) - { - twall = umost[x]-1; bwall = min(uplc[x],dmost[x]); - if (twall < bwall-1) - { - if (twall >= y2) - { - while (y1 < y2-1) hline(x-1,++y1); - y1 = twall; - } - else - { - while (y1 < twall) hline(x-1,++y1); - while (y1 > twall) lastx[y1--] = x; - } - while (y2 > bwall) hline(x-1,--y2); - while (y2 < bwall) lastx[y2++] = x; - } - else - { - while (y1 < y2-1) hline(x-1,++y1); - if (x == x2) { globalx2 += globaly2; globaly1 += globalx1; break; } - y1 = umost[x+1]; y2 = y1; - } - globalx2 += globaly2; globaly1 += globalx1; - } - while (y1 < y2-1) hline(x2,++y1); - faketimerhandler(); - return; - } - - switch (globalorientation&0x180) - { - case 128: - msethlineshift(picsiz[globalpicnum]&15,picsiz[globalpicnum]>>4); - break; - case 256: - settransnormal(); - tsethlineshift(picsiz[globalpicnum]&15,picsiz[globalpicnum]>>4); - break; - case 384: - settransreverse(); - tsethlineshift(picsiz[globalpicnum]&15,picsiz[globalpicnum]>>4); - break; - } - - y1 = umost[x1]; y2 = y1; - for (x=x1; x<=x2; x++) - { - twall = umost[x]-1; bwall = min(uplc[x],dmost[x]); - if (twall < bwall-1) - { - if (twall >= y2) - { - while (y1 < y2-1) slowhline(x-1,++y1); - y1 = twall; - } - else - { - while (y1 < twall) slowhline(x-1,++y1); - while (y1 > twall) lastx[y1--] = x; - } - while (y2 > bwall) slowhline(x-1,--y2); - while (y2 < bwall) lastx[y2++] = x; - } - else - { - while (y1 < y2-1) slowhline(x-1,++y1); - if (x == x2) { globalx2 += globaly2; globaly1 += globalx1; break; } - y1 = umost[x+1]; y2 = y1; - } - globalx2 += globaly2; globaly1 += globalx1; - } - while (y1 < y2-1) slowhline(x2,++y1); - faketimerhandler(); -} - - -// -// florscan (internal) -// -static void florscan(int32_t x1, int32_t x2, int32_t sectnum) -{ - int32_t i, j, ox, oy, x, y1, y2, twall, bwall; - sectortype *sec; - - sec = §or[sectnum]; - if (palookup[sec->floorpal] != globalpalwritten) - { - globalpalwritten = palookup[sec->floorpal]; - if (!globalpalwritten) globalpalwritten = palookup[globalpal]; // JBF: fixes null-pointer crash - setpalookupaddress(globalpalwritten); - } - - globalzd = globalposz-sec->floorz; - if (globalzd > 0) return; - globalpicnum = sec->floorpicnum; - if ((unsigned)globalpicnum >= (unsigned)MAXTILES) globalpicnum = 0; - setgotpic(globalpicnum); - if ((tilesizx[globalpicnum] <= 0) || (tilesizy[globalpicnum] <= 0)) return; - if (picanm[globalpicnum]&192) globalpicnum += animateoffs((int16_t)globalpicnum,(int16_t)sectnum); - - if (waloff[globalpicnum] == 0) loadtile(globalpicnum); - globalbufplc = waloff[globalpicnum]; - - globalshade = (int32_t)sec->floorshade; - globvis = globalcisibility; - if (sec->visibility != 0) globvis = mulscale4(globvis,(int32_t)((uint8_t)(sec->visibility+16))); - globalorientation = (int32_t)sec->floorstat; - - - if ((globalorientation&64) == 0) - { - globalx1 = singlobalang; globalx2 = singlobalang; - globaly1 = cosglobalang; globaly2 = cosglobalang; - globalxpanning = (globalposx<<20); - globalypanning = -(globalposy<<20); - } - else - { - j = sec->wallptr; - ox = wall[wall[j].point2].x - wall[j].x; - oy = wall[wall[j].point2].y - wall[j].y; - i = nsqrtasm(ox*ox+oy*oy); if (i == 0) i = 1024; else i = 1048576/i; - globalx1 = mulscale10(dmulscale10(ox,singlobalang,-oy,cosglobalang),i); - globaly1 = mulscale10(dmulscale10(ox,cosglobalang,oy,singlobalang),i); - globalx2 = -globalx1; - globaly2 = -globaly1; - - ox = ((wall[j].x-globalposx)<<6); oy = ((wall[j].y-globalposy)<<6); - i = dmulscale14(oy,cosglobalang,-ox,singlobalang); - j = dmulscale14(ox,cosglobalang,oy,singlobalang); - ox = i; oy = j; - globalxpanning = globalx1*ox - globaly1*oy; - globalypanning = globaly2*ox + globalx2*oy; - } - globalx2 = mulscale16(globalx2,viewingrangerecip); - globaly1 = mulscale16(globaly1,viewingrangerecip); - globalxshift = (8-(picsiz[globalpicnum]&15)); - globalyshift = (8-(picsiz[globalpicnum]>>4)); - if (globalorientation&8) { globalxshift++; globalyshift++; } - - if ((globalorientation&0x4) > 0) - { - i = globalxpanning; globalxpanning = globalypanning; globalypanning = i; - i = globalx2; globalx2 = -globaly1; globaly1 = -i; - i = globalx1; globalx1 = globaly2; globaly2 = i; - } - if ((globalorientation&0x10) > 0) globalx1 = -globalx1, globaly1 = -globaly1, globalxpanning = -globalxpanning; - if ((globalorientation&0x20) > 0) globalx2 = -globalx2, globaly2 = -globaly2, globalypanning = -globalypanning; - globalx1 <<= globalxshift; globaly1 <<= globalxshift; - globalx2 <<= globalyshift; globaly2 <<= globalyshift; - globalxpanning <<= globalxshift; globalypanning <<= globalyshift; - globalxpanning += (((int32_t)sec->floorxpanning)<<24); - globalypanning += (((int32_t)sec->floorypanning)<<24); - globaly1 = (-globalx1-globaly1)*halfxdimen; - globalx2 = (globalx2-globaly2)*halfxdimen; - - sethlinesizes(picsiz[globalpicnum]&15,picsiz[globalpicnum]>>4,globalbufplc); - - globalx2 += globaly2*(x1-1); - globaly1 += globalx1*(x1-1); - globalx1 = mulscale16(globalx1,globalzd); - globalx2 = mulscale16(globalx2,globalzd); - globaly1 = mulscale16(globaly1,globalzd); - globaly2 = mulscale16(globaly2,globalzd); - globvis = klabs(mulscale10(globvis,globalzd)); - - if (!(globalorientation&0x180)) - { - y1 = max(dplc[x1],umost[x1]); y2 = y1; - for (x=x1; x<=x2; x++) - { - twall = max(dplc[x],umost[x])-1; bwall = dmost[x]; - if (twall < bwall-1) - { - if (twall >= y2) - { - while (y1 < y2-1) hline(x-1,++y1); - y1 = twall; - } - else - { - while (y1 < twall) hline(x-1,++y1); - while (y1 > twall) lastx[y1--] = x; - } - while (y2 > bwall) hline(x-1,--y2); - while (y2 < bwall) lastx[y2++] = x; - } - else - { - while (y1 < y2-1) hline(x-1,++y1); - if (x == x2) { globalx2 += globaly2; globaly1 += globalx1; break; } - y1 = max(dplc[x+1],umost[x+1]); y2 = y1; - } - globalx2 += globaly2; globaly1 += globalx1; - } - while (y1 < y2-1) hline(x2,++y1); - faketimerhandler(); - return; - } - - switch (globalorientation&0x180) - { - case 128: - msethlineshift(picsiz[globalpicnum]&15,picsiz[globalpicnum]>>4); - break; - case 256: - settransnormal(); - tsethlineshift(picsiz[globalpicnum]&15,picsiz[globalpicnum]>>4); - break; - case 384: - settransreverse(); - tsethlineshift(picsiz[globalpicnum]&15,picsiz[globalpicnum]>>4); - break; - } - - y1 = max(dplc[x1],umost[x1]); y2 = y1; - for (x=x1; x<=x2; x++) - { - twall = max(dplc[x],umost[x])-1; bwall = dmost[x]; - if (twall < bwall-1) - { - if (twall >= y2) - { - while (y1 < y2-1) slowhline(x-1,++y1); - y1 = twall; - } - else - { - while (y1 < twall) slowhline(x-1,++y1); - while (y1 > twall) lastx[y1--] = x; - } - while (y2 > bwall) slowhline(x-1,--y2); - while (y2 < bwall) lastx[y2++] = x; - } - else - { - while (y1 < y2-1) slowhline(x-1,++y1); - if (x == x2) { globalx2 += globaly2; globaly1 += globalx1; break; } - y1 = max(dplc[x+1],umost[x+1]); y2 = y1; - } - globalx2 += globaly2; globaly1 += globalx1; - } - while (y1 < y2-1) slowhline(x2,++y1); - faketimerhandler(); -} - - -// -// wallscan (internal) -// -static void wallscan(int32_t x1, int32_t x2, int16_t *uwal, int16_t *dwal, int32_t *swal, int32_t *lwal) -{ - int32_t x, xnice, ynice; - intptr_t fpalookup; - int32_t y1ve[4], y2ve[4], tsizx, tsizy; -#ifndef ENGINE_USING_A_C - char bad; - int32_t i, u4, d4, z; -#endif - - if (x2 >= xdim) x2 = xdim-1; - - tsizx = tilesizx[globalpicnum]; - tsizy = tilesizy[globalpicnum]; - setgotpic(globalpicnum); - if ((tsizx <= 0) || (tsizy <= 0)) return; - if ((uwal[x1] > ydimen) && (uwal[x2] > ydimen)) return; - if ((dwal[x1] < 0) && (dwal[x2] < 0)) return; - - if (waloff[globalpicnum] == 0) loadtile(globalpicnum); - - xnice = (pow2long[picsiz[globalpicnum]&15] == tsizx); - if (xnice) tsizx--; - ynice = (pow2long[picsiz[globalpicnum]>>4] == tsizy); - if (ynice) tsizy = (picsiz[globalpicnum]>>4); - - fpalookup = FP_OFF(palookup[globalpal]); - - setupvlineasm(globalshiftval); - -#ifndef ENGINE_USING_A_C - - x = x1; - while ((umost[x] > dmost[x]) && (x <= x2)) x++; - - for (; (x<=x2)&&((x+frameoffset)&3); x++) - { - y1ve[0] = max(uwal[x],umost[x]); - y2ve[0] = min(dwal[x],dmost[x]); - if (y2ve[0] <= y1ve[0]) continue; - - palookupoffse[0] = fpalookup+(getpalookup((int32_t)mulscale16(swal[x],globvis),globalshade)<<8); - - bufplce[0] = lwal[x] + globalxpanning; - if (bufplce[0] >= tsizx) { if (xnice == 0) bufplce[0] %= tsizx; else bufplce[0] &= tsizx; } - if (ynice == 0) bufplce[0] *= tsizy; else bufplce[0] <<= tsizy; - - vince[0] = swal[x]*globalyscale; - vplce[0] = globalzd + vince[0]*(y1ve[0]-globalhoriz+1); - - vlineasm1(vince[0],palookupoffse[0],y2ve[0]-y1ve[0]-1,vplce[0],bufplce[0]+waloff[globalpicnum],x+frameoffset+ylookup[y1ve[0]]); - } - for (; x<=x2-3; x+=4) - { - bad = 0; - for (z=3; z>=0; z--) - { - y1ve[z] = max(uwal[x+z],umost[x+z]); - y2ve[z] = min(dwal[x+z],dmost[x+z])-1; - if (y2ve[z] < y1ve[z]) { bad += pow2char[z]; continue; } - - i = lwal[x+z] + globalxpanning; - if (i >= tsizx) { if (xnice == 0) i %= tsizx; else i &= tsizx; } - if (ynice == 0) i *= tsizy; else i <<= tsizy; - bufplce[z] = waloff[globalpicnum]+i; - - vince[z] = swal[x+z]*globalyscale; - vplce[z] = globalzd + vince[z]*(y1ve[z]-globalhoriz+1); - } - if (bad == 15) continue; - - palookupoffse[0] = fpalookup+(getpalookup((int32_t)mulscale16(swal[x],globvis),globalshade)<<8); - palookupoffse[3] = fpalookup+(getpalookup((int32_t)mulscale16(swal[x+3],globvis),globalshade)<<8); - - if ((palookupoffse[0] == palookupoffse[3]) && ((bad&0x9) == 0)) - { - palookupoffse[1] = palookupoffse[0]; - palookupoffse[2] = palookupoffse[0]; - } - else - { - palookupoffse[1] = fpalookup+(getpalookup((int32_t)mulscale16(swal[x+1],globvis),globalshade)<<8); - palookupoffse[2] = fpalookup+(getpalookup((int32_t)mulscale16(swal[x+2],globvis),globalshade)<<8); - } - - u4 = max(max(y1ve[0],y1ve[1]),max(y1ve[2],y1ve[3])); - d4 = min(min(y2ve[0],y2ve[1]),min(y2ve[2],y2ve[3])); - - if ((bad != 0) || (u4 >= d4)) - { - if (!(bad&1)) prevlineasm1(vince[0],palookupoffse[0],y2ve[0]-y1ve[0],vplce[0],bufplce[0],ylookup[y1ve[0]]+x+frameoffset+0); - if (!(bad&2)) prevlineasm1(vince[1],palookupoffse[1],y2ve[1]-y1ve[1],vplce[1],bufplce[1],ylookup[y1ve[1]]+x+frameoffset+1); - if (!(bad&4)) prevlineasm1(vince[2],palookupoffse[2],y2ve[2]-y1ve[2],vplce[2],bufplce[2],ylookup[y1ve[2]]+x+frameoffset+2); - if (!(bad&8)) prevlineasm1(vince[3],palookupoffse[3],y2ve[3]-y1ve[3],vplce[3],bufplce[3],ylookup[y1ve[3]]+x+frameoffset+3); - continue; - } - - if (u4 > y1ve[0]) vplce[0] = prevlineasm1(vince[0],palookupoffse[0],u4-y1ve[0]-1,vplce[0],bufplce[0],ylookup[y1ve[0]]+x+frameoffset+0); - if (u4 > y1ve[1]) vplce[1] = prevlineasm1(vince[1],palookupoffse[1],u4-y1ve[1]-1,vplce[1],bufplce[1],ylookup[y1ve[1]]+x+frameoffset+1); - if (u4 > y1ve[2]) vplce[2] = prevlineasm1(vince[2],palookupoffse[2],u4-y1ve[2]-1,vplce[2],bufplce[2],ylookup[y1ve[2]]+x+frameoffset+2); - if (u4 > y1ve[3]) vplce[3] = prevlineasm1(vince[3],palookupoffse[3],u4-y1ve[3]-1,vplce[3],bufplce[3],ylookup[y1ve[3]]+x+frameoffset+3); - - if (d4 >= u4) vlineasm4(d4-u4+1,ylookup[u4]+x+frameoffset); - - i = x+frameoffset+ylookup[d4+1]; - if (y2ve[0] > d4) prevlineasm1(vince[0],palookupoffse[0],y2ve[0]-d4-1,vplce[0],bufplce[0],i+0); - if (y2ve[1] > d4) prevlineasm1(vince[1],palookupoffse[1],y2ve[1]-d4-1,vplce[1],bufplce[1],i+1); - if (y2ve[2] > d4) prevlineasm1(vince[2],palookupoffse[2],y2ve[2]-d4-1,vplce[2],bufplce[2],i+2); - if (y2ve[3] > d4) prevlineasm1(vince[3],palookupoffse[3],y2ve[3]-d4-1,vplce[3],bufplce[3],i+3); - } - for (; x<=x2; x++) - { - y1ve[0] = max(uwal[x],umost[x]); - y2ve[0] = min(dwal[x],dmost[x]); - if (y2ve[0] <= y1ve[0]) continue; - - palookupoffse[0] = fpalookup+(getpalookup((int32_t)mulscale16(swal[x],globvis),globalshade)<<8); - - bufplce[0] = lwal[x] + globalxpanning; - if (bufplce[0] >= tsizx) { if (xnice == 0) bufplce[0] %= tsizx; else bufplce[0] &= tsizx; } - if (ynice == 0) bufplce[0] *= tsizy; else bufplce[0] <<= tsizy; - - vince[0] = swal[x]*globalyscale; - vplce[0] = globalzd + vince[0]*(y1ve[0]-globalhoriz+1); - - vlineasm1(vince[0],palookupoffse[0],y2ve[0]-y1ve[0]-1,vplce[0],bufplce[0]+waloff[globalpicnum],x+frameoffset+ylookup[y1ve[0]]); - } - -#else // ENGINE_USING_A_C - - for (x=x1; x<=x2; x++) - { - y1ve[0] = max(uwal[x],umost[x]); - y2ve[0] = min(dwal[x],dmost[x]); - if (y2ve[0] <= y1ve[0]) continue; - - palookupoffse[0] = fpalookup+(getpalookup((int32_t)mulscale16(swal[x],globvis),globalshade)<<8); - - bufplce[0] = lwal[x] + globalxpanning; - if (bufplce[0] >= tsizx) { if (xnice == 0) bufplce[0] %= tsizx; else bufplce[0] &= tsizx; } - if (ynice == 0) bufplce[0] *= tsizy; else bufplce[0] <<= tsizy; - - vince[0] = swal[x]*globalyscale; - vplce[0] = globalzd + vince[0]*(y1ve[0]-globalhoriz+1); - - vlineasm1(vince[0],palookupoffse[0],y2ve[0]-y1ve[0]-1,vplce[0],bufplce[0]+waloff[globalpicnum],x+frameoffset+ylookup[y1ve[0]]); - } - -#endif - - faketimerhandler(); -} - - -// -// transmaskvline (internal) -// -static void transmaskvline(int32_t x) -{ - int32_t vplc, vinc, i; - intptr_t palookupoffs; - intptr_t bufplc,p; - int16_t y1v, y2v; - - if ((x < 0) || (x >= xdimen)) return; - - y1v = max(uwall[x],startumost[x+windowx1]-windowy1); - y2v = min(dwall[x],startdmost[x+windowx1]-windowy1); - y2v--; - if (y2v < y1v) return; - - palookupoffs = FP_OFF(palookup[globalpal]) + (getpalookup((int32_t)mulscale16(swall[x],globvis),globalshade)<<8); - - vinc = swall[x]*globalyscale; - vplc = globalzd + vinc*(y1v-globalhoriz+1); - - i = lwall[x]+globalxpanning; - if (i >= tilesizx[globalpicnum]) i %= tilesizx[globalpicnum]; - bufplc = waloff[globalpicnum]+i*tilesizy[globalpicnum]; - - p = ylookup[y1v]+x+frameoffset; - - tvlineasm1(vinc,palookupoffs,y2v-y1v,vplc,bufplc,p); -} - - -// -// transmaskvline2 (internal) -// -#ifndef ENGINE_USING_A_C -static void transmaskvline2(int32_t x) -{ - int32_t i, y1, y2, x2; - int16_t y1ve[2], y2ve[2]; - - if ((x < 0) || (x >= xdimen)) return; - if (x == xdimen-1) { transmaskvline(x); return; } - - x2 = x+1; - - y1ve[0] = max(uwall[x],startumost[x+windowx1]-windowy1); - y2ve[0] = min(dwall[x],startdmost[x+windowx1]-windowy1)-1; - if (y2ve[0] < y1ve[0]) { transmaskvline(x2); return; } - y1ve[1] = max(uwall[x2],startumost[x2+windowx1]-windowy1); - y2ve[1] = min(dwall[x2],startdmost[x2+windowx1]-windowy1)-1; - if (y2ve[1] < y1ve[1]) { transmaskvline(x); return; } - - palookupoffse[0] = FP_OFF(palookup[globalpal]) + (getpalookup((int32_t)mulscale16(swall[x],globvis),globalshade)<<8); - palookupoffse[1] = FP_OFF(palookup[globalpal]) + (getpalookup((int32_t)mulscale16(swall[x2],globvis),globalshade)<<8); - - setuptvlineasm2(globalshiftval,palookupoffse[0],palookupoffse[1]); - - vince[0] = swall[x]*globalyscale; - vince[1] = swall[x2]*globalyscale; - vplce[0] = globalzd + vince[0]*(y1ve[0]-globalhoriz+1); - vplce[1] = globalzd + vince[1]*(y1ve[1]-globalhoriz+1); - - i = lwall[x] + globalxpanning; - if (i >= tilesizx[globalpicnum]) i %= tilesizx[globalpicnum]; - bufplce[0] = waloff[globalpicnum]+i*tilesizy[globalpicnum]; - - i = lwall[x2] + globalxpanning; - if (i >= tilesizx[globalpicnum]) i %= tilesizx[globalpicnum]; - bufplce[1] = waloff[globalpicnum]+i*tilesizy[globalpicnum]; - - y1 = max(y1ve[0],y1ve[1]); - y2 = min(y2ve[0],y2ve[1]); - - i = x+frameoffset; - - if (y1ve[0] != y1ve[1]) - { - if (y1ve[0] < y1) - vplce[0] = tvlineasm1(vince[0],palookupoffse[0],y1-y1ve[0]-1,vplce[0],bufplce[0],ylookup[y1ve[0]]+i); - else - vplce[1] = tvlineasm1(vince[1],palookupoffse[1],y1-y1ve[1]-1,vplce[1],bufplce[1],ylookup[y1ve[1]]+i+1); - } - - if (y2 > y1) - { - asm1 = vince[1]; - asm2 = ylookup[y2]+i+1; - tvlineasm2(vplce[1],vince[0],bufplce[0],bufplce[1],vplce[0],ylookup[y1]+i); - } - else - { - asm1 = vplce[0]; - asm2 = vplce[1]; - } - - if (y2ve[0] > y2ve[1]) - tvlineasm1(vince[0],palookupoffse[0],y2ve[0]-y2-1,asm1,bufplce[0],ylookup[y2+1]+i); - else if (y2ve[0] < y2ve[1]) - tvlineasm1(vince[1],palookupoffse[1],y2ve[1]-y2-1,asm2,bufplce[1],ylookup[y2+1]+i+1); - - faketimerhandler(); -} -#endif - -// -// transmaskwallscan (internal) -// -static inline void transmaskwallscan(int32_t x1, int32_t x2) -{ - int32_t x; - - setgotpic(globalpicnum); - if ((tilesizx[globalpicnum] <= 0) || (tilesizy[globalpicnum] <= 0)) return; - - if (waloff[globalpicnum] == 0) loadtile(globalpicnum); - - setuptvlineasm(globalshiftval); - - x = x1; - while ((startumost[x+windowx1] > startdmost[x+windowx1]) && (x <= x2)) x++; -#ifndef ENGINE_USING_A_C - if ((x <= x2) && (x&1)) transmaskvline(x), x++; - while (x < x2) transmaskvline2(x), x += 2; -#endif - while (x <= x2) transmaskvline(x), x++; - faketimerhandler(); -} - - -// -// ceilspritehline (internal) -// -static inline void ceilspritehline(int32_t x2, int32_t y) -{ - int32_t x1, v, bx, by; - - //x = x1 + (x2-x1)t + (y1-y2)u ~ x = 160v - //y = y1 + (y2-y1)t + (x2-x1)u ~ y = (scrx-160)v - //z = z1 = z2 ~ z = posz + (scry-horiz)v - - x1 = lastx[y]; if (x2 < x1) return; - - v = mulscale20(globalzd,horizlookup[y-globalhoriz+horizycent]); - bx = mulscale14(globalx2*x1+globalx1,v) + globalxpanning; - by = mulscale14(globaly2*x1+globaly1,v) + globalypanning; - asm1 = mulscale14(globalx2,v); - asm2 = mulscale14(globaly2,v); - - asm3 = FP_OFF(palookup[globalpal]) + (getpalookup((int32_t)mulscale28(klabs(v),globvis),globalshade)<<8); - - if ((globalorientation&2) == 0) - mhline(globalbufplc,bx,(x2-x1)<<16,0L,by,ylookup[y]+x1+frameoffset); - else - { - thline(globalbufplc,bx,(x2-x1)<<16,0L,by,ylookup[y]+x1+frameoffset); - } -} - - -// -// ceilspritescan (internal) -// -static inline void ceilspritescan(int32_t x1, int32_t x2) -{ - int32_t x, y1, y2, twall, bwall; - - y1 = uwall[x1]; y2 = y1; - for (x=x1; x<=x2; x++) - { - twall = uwall[x]-1; bwall = dwall[x]; - if (twall < bwall-1) - { - if (twall >= y2) - { - while (y1 < y2-1) ceilspritehline(x-1,++y1); - y1 = twall; - } - else - { - while (y1 < twall) ceilspritehline(x-1,++y1); - while (y1 > twall) lastx[y1--] = x; - } - while (y2 > bwall) ceilspritehline(x-1,--y2); - while (y2 < bwall) lastx[y2++] = x; - } - else - { - while (y1 < y2-1) ceilspritehline(x-1,++y1); - if (x == x2) break; - y1 = uwall[x+1]; y2 = y1; - } - } - while (y1 < y2-1) ceilspritehline(x2,++y1); - faketimerhandler(); -} - - -// -// grouscan (internal) -// -#define BITSOFPRECISION 3 //Don't forget to change this in A.ASM also! -static void grouscan(int32_t dax1, int32_t dax2, int32_t sectnum, char dastat) -{ - int32_t i, l, x, y, dx, dy, wx, wy, y1, y2, daz; - int32_t daslope, dasqr; - int32_t shoffs, shinc, m1, m2; - intptr_t *mptr1, *mptr2, *nptr1, *nptr2,j; - walltype *wal; - sectortype *sec; - - sec = §or[sectnum]; - - if (dastat == 0) - { - if (globalposz <= getceilzofslope(sectnum,globalposx,globalposy)) - return; //Back-face culling - globalorientation = sec->ceilingstat; - globalpicnum = sec->ceilingpicnum; - globalshade = sec->ceilingshade; - globalpal = sec->ceilingpal; - daslope = sec->ceilingheinum; - daz = sec->ceilingz; - } - else - { - if (globalposz >= getflorzofslope(sectnum,globalposx,globalposy)) - return; //Back-face culling - globalorientation = sec->floorstat; - globalpicnum = sec->floorpicnum; - globalshade = sec->floorshade; - globalpal = sec->floorpal; - daslope = sec->floorheinum; - daz = sec->floorz; - } - - if ((picanm[globalpicnum]&192) != 0) globalpicnum += animateoffs(globalpicnum,sectnum); - setgotpic(globalpicnum); - if ((tilesizx[globalpicnum] <= 0) || (tilesizy[globalpicnum] <= 0)) return; - if (waloff[globalpicnum] == 0) loadtile(globalpicnum); - - wal = &wall[sec->wallptr]; - wx = wall[wal->point2].x - wal->x; - wy = wall[wal->point2].y - wal->y; - dasqr = krecipasm(nsqrtasm(wx*wx+wy*wy)); - i = mulscale21(daslope,dasqr); - wx *= i; wy *= i; - - globalx = -mulscale19(singlobalang,xdimenrecip); - globaly = mulscale19(cosglobalang,xdimenrecip); - globalx1 = (globalposx<<8); - globaly1 = -(globalposy<<8); - i = (dax1-halfxdimen)*xdimenrecip; - globalx2 = mulscale16(cosglobalang<<4,viewingrangerecip) - mulscale27(singlobalang,i); - globaly2 = mulscale16(singlobalang<<4,viewingrangerecip) + mulscale27(cosglobalang,i); - globalzd = (xdimscale<<9); - globalzx = -dmulscale17(wx,globaly2,-wy,globalx2) + mulscale10(1-globalhoriz,globalzd); - globalz = -dmulscale25(wx,globaly,-wy,globalx); - - if (globalorientation&64) //Relative alignment - { - dx = mulscale14(wall[wal->point2].x-wal->x,dasqr); - dy = mulscale14(wall[wal->point2].y-wal->y,dasqr); - - i = nsqrtasm(daslope*daslope+16777216); - - x = globalx; y = globaly; - globalx = dmulscale16(x,dx,y,dy); - globaly = mulscale12(dmulscale16(-y,dx,x,dy),i); - - x = ((wal->x-globalposx)<<8); y = ((wal->y-globalposy)<<8); - globalx1 = dmulscale16(-x,dx,-y,dy); - globaly1 = mulscale12(dmulscale16(-y,dx,x,dy),i); - - x = globalx2; y = globaly2; - globalx2 = dmulscale16(x,dx,y,dy); - globaly2 = mulscale12(dmulscale16(-y,dx,x,dy),i); - } - if (globalorientation&0x4) - { - i = globalx; globalx = -globaly; globaly = -i; - i = globalx1; globalx1 = globaly1; globaly1 = i; - i = globalx2; globalx2 = -globaly2; globaly2 = -i; - } - if (globalorientation&0x10) { globalx1 = -globalx1, globalx2 = -globalx2, globalx = -globalx; } - if (globalorientation&0x20) { globaly1 = -globaly1, globaly2 = -globaly2, globaly = -globaly; } - - daz = dmulscale9(wx,globalposy-wal->y,-wy,globalposx-wal->x) + ((daz-globalposz)<<8); - globalx2 = mulscale20(globalx2,daz); globalx = mulscale28(globalx,daz); - globaly2 = mulscale20(globaly2,-daz); globaly = mulscale28(globaly,-daz); - - i = 8-(picsiz[globalpicnum]&15); j = 8-(picsiz[globalpicnum]>>4); - if (globalorientation&8) { i++; j++; } - globalx1 <<= (i+12); globalx2 <<= i; globalx <<= i; - globaly1 <<= (j+12); globaly2 <<= j; globaly <<= j; - - if (dastat == 0) - { - globalx1 += (((int32_t)sec->ceilingxpanning)<<24); - globaly1 += (((int32_t)sec->ceilingypanning)<<24); - } - else - { - globalx1 += (((int32_t)sec->floorxpanning)<<24); - globaly1 += (((int32_t)sec->floorypanning)<<24); - } - - asm1 = -(globalzd>>(16-BITSOFPRECISION)); - - globvis = globalvisibility; - if (sec->visibility != 0) globvis = mulscale4(globvis,(int32_t)((uint8_t)(sec->visibility+16))); - globvis = mulscale13(globvis,daz); - globvis = mulscale16(globvis,xdimscale); - j = FP_OFF(palookup[globalpal]); - - setupslopevlin(((int32_t)(picsiz[globalpicnum]&15))+(((int32_t)(picsiz[globalpicnum]>>4))<<8),waloff[globalpicnum],-ylookup[1]); - - l = (globalzd>>16); - - shinc = mulscale16(globalz,xdimenscale); - if (shinc > 0) shoffs = (4<<15); else shoffs = ((16380-ydimen)<<15); // JBF: was 2044 - if (dastat == 0) y1 = umost[dax1]; else y1 = max(umost[dax1],dplc[dax1]); - m1 = mulscale16(y1,globalzd) + (globalzx>>6); - //Avoid visibility overflow by crossing horizon - if (globalzd > 0) m1 += (globalzd>>16); else m1 -= (globalzd>>16); - m2 = m1+l; - mptr1 = (intptr_t *)&slopalookup[y1+(shoffs>>15)]; mptr2 = mptr1+1; - - for (x=dax1; x<=dax2; x++) - { - if (dastat == 0) { y1 = umost[x]; y2 = min(dmost[x],uplc[x])-1; } - else { y1 = max(umost[x],dplc[x]); y2 = dmost[x]-1; } - if (y1 <= y2) - { - nptr1 = (intptr_t *)&slopalookup[y1+(shoffs>>15)]; - nptr2 = (intptr_t *)&slopalookup[y2+(shoffs>>15)]; - while (nptr1 <= mptr1) - { - *mptr1-- = j + (getpalookup((int32_t)mulscale24(krecipasm(m1),globvis),globalshade)<<8); - m1 -= l; - } - while (nptr2 >= mptr2) - { - *mptr2++ = j + (getpalookup((int32_t)mulscale24(krecipasm(m2),globvis),globalshade)<<8); - m2 += l; - } - - globalx3 = (globalx2>>10); - globaly3 = (globaly2>>10); - asm3 = mulscale16(y2,globalzd) + (globalzx>>6); - slopevlin(ylookup[y2]+x+frameoffset,krecipasm(asm3>>3),(intptr_t)nptr2,y2-y1+1,globalx1,globaly1); - - if ((x&15) == 0) faketimerhandler(); - } - globalx2 += globalx; - globaly2 += globaly; - globalzx += globalz; - shoffs += shinc; - } -} - - -// -// parascan (internal) -// -static void parascan(int32_t dax1, int32_t dax2, int32_t sectnum, char dastat, int32_t bunch) -{ - sectortype *sec; - int32_t j, k, l, m, n, x, z, wallnum, nextsectnum, globalhorizbak; - int16_t *topptr, *botptr; - - UNREFERENCED_PARAMETER(dax1); - UNREFERENCED_PARAMETER(dax2); - - sectnum = thesector[bunchfirst[bunch]]; sec = §or[sectnum]; - - globalhorizbak = globalhoriz; - if (parallaxyscale != 65536) - globalhoriz = mulscale16(globalhoriz-(ydimen>>1),parallaxyscale) + (ydimen>>1); - globvis = globalpisibility; - //globalorientation = 0L; - if (sec->visibility != 0) globvis = mulscale4(globvis,(int32_t)((uint8_t)(sec->visibility+16))); - - if (dastat == 0) - { - globalpal = sec->ceilingpal; - globalpicnum = sec->ceilingpicnum; - globalshade = (int32_t)sec->ceilingshade; - globalxpanning = (int32_t)sec->ceilingxpanning; - globalypanning = (int32_t)sec->ceilingypanning; - topptr = umost; - botptr = uplc; - } - else - { - globalpal = sec->floorpal; - globalpicnum = sec->floorpicnum; - globalshade = (int32_t)sec->floorshade; - globalxpanning = (int32_t)sec->floorxpanning; - globalypanning = (int32_t)sec->floorypanning; - topptr = dplc; - botptr = dmost; - } - - if ((unsigned)globalpicnum >= (unsigned)MAXTILES) globalpicnum = 0; - if (picanm[globalpicnum]&192) globalpicnum += animateoffs(globalpicnum,(int16_t)sectnum); - globalshiftval = (picsiz[globalpicnum]>>4); - if (pow2long[globalshiftval] != tilesizy[globalpicnum]) globalshiftval++; - globalshiftval = 32-globalshiftval; - globalzd = (((tilesizy[globalpicnum]>>1)+parallaxyoffs)<=0; z=p2[z]) - { - wallnum = thewall[z]; nextsectnum = wall[wallnum].nextsector; - - if (nextsectnum >= 0) //else negative array access - { - if (dastat == 0) j = sector[nextsectnum].ceilingstat; - else j = sector[nextsectnum].floorstat; - } - - if ((nextsectnum < 0) || (wall[wallnum].cstat&32) || ((j&1) == 0)) - { - if (x == -1) x = xb1[z]; - - if (parallaxtype == 0) - { - n = mulscale16(xdimenrecip,viewingrange); - for (j=xb1[z]; j<=xb2[z]; j++) - lplc[j] = (((mulscale23(j-halfxdimen,n)+globalang)&2047)>>k); - } - else - { - for (j=xb1[z]; j<=xb2[z]; j++) - lplc[j] = ((((int32_t)radarang2[j]+globalang)&2047)>>k); - } - if (parallaxtype == 2) - { - n = mulscale16(xdimscale,viewingrange); - for (j=xb1[z]; j<=xb2[z]; j++) - swplc[j] = mulscale14(sintable[((int32_t)radarang2[j]+512)&2047],n); - } - else - clearbuf(&swplc[xb1[z]],xb2[z]-xb1[z]+1,mulscale16(xdimscale,viewingrange)); - } - else if (x >= 0) - { - l = globalpicnum; m = (picsiz[globalpicnum]&15); - globalpicnum = l+pskyoff[lplc[x]>>m]; - - if (((lplc[x]^lplc[xb1[z]-1])>>m) == 0) - wallscan(x,xb1[z]-1,topptr,botptr,swplc,lplc); - else - { - j = x; - while (x < xb1[z]) - { - n = l+pskyoff[lplc[x]>>m]; - if (n != globalpicnum) - { - wallscan(j,x-1,topptr,botptr,swplc,lplc); - j = x; - globalpicnum = n; - } - x++; - } - if (j < x) - wallscan(j,x-1,topptr,botptr,swplc,lplc); - } - - globalpicnum = l; - x = -1; - } - } - - if (x >= 0) - { - l = globalpicnum; m = (picsiz[globalpicnum]&15); - globalpicnum = l+pskyoff[lplc[x]>>m]; - - if (((lplc[x]^lplc[xb2[bunchlast[bunch]]])>>m) == 0) - wallscan(x,xb2[bunchlast[bunch]],topptr,botptr,swplc,lplc); - else - { - j = x; - while (x <= xb2[bunchlast[bunch]]) - { - n = l+pskyoff[lplc[x]>>m]; - if (n != globalpicnum) - { - wallscan(j,x-1,topptr,botptr,swplc,lplc); - j = x; - globalpicnum = n; - } - x++; - } - if (j <= x) - wallscan(j,x-1,topptr,botptr,swplc,lplc); - } - globalpicnum = l; - } - globalhoriz = globalhorizbak; -} - - -// -// drawalls (internal) -// -static void drawalls(int32_t bunch) -{ - sectortype *sec, *nextsec; - walltype *wal; - int32_t i, x, x1, x2, cz[5], fz[5]; - int32_t z, wallnum, sectnum, nextsectnum; - int32_t startsmostwallcnt, startsmostcnt, gotswall; - char andwstat1, andwstat2; - - z = bunchfirst[bunch]; - sectnum = thesector[z]; sec = §or[sectnum]; - - andwstat1 = 0xff; andwstat2 = 0xff; - for (; z>=0; z=p2[z]) //uplc/dplc calculation - { - andwstat1 &= wallmost(uplc,z,sectnum,(uint8_t)0); - andwstat2 &= wallmost(dplc,z,sectnum,(uint8_t)1); - } - - if ((andwstat1&3) != 3) //draw ceilings - { - if ((sec->ceilingstat&3) == 2) - grouscan(xb1[bunchfirst[bunch]],xb2[bunchlast[bunch]],sectnum,0); - else if ((sec->ceilingstat&1) == 0) - ceilscan(xb1[bunchfirst[bunch]],xb2[bunchlast[bunch]],sectnum); - else - parascan(xb1[bunchfirst[bunch]],xb2[bunchlast[bunch]],sectnum,0,bunch); - } - if ((andwstat2&12) != 12) //draw floors - { - if ((sec->floorstat&3) == 2) - grouscan(xb1[bunchfirst[bunch]],xb2[bunchlast[bunch]],sectnum,1); - else if ((sec->floorstat&1) == 0) - florscan(xb1[bunchfirst[bunch]],xb2[bunchlast[bunch]],sectnum); - else - parascan(xb1[bunchfirst[bunch]],xb2[bunchlast[bunch]],sectnum,1,bunch); - } - - //DRAW WALLS SECTION! - for (z=bunchfirst[bunch]; z>=0; z=p2[z]) - { - x1 = xb1[z]; x2 = xb2[z]; - if (umost[x2] >= dmost[x2]) - { - for (x=x1; x= x2) - { - smostwall[smostwallcnt] = z; - smostwalltype[smostwallcnt] = 0; - smostwallcnt++; - continue; - } - } - - wallnum = thewall[z]; wal = &wall[wallnum]; - nextsectnum = wal->nextsector; - nextsec = nextsectnum>=0 ? §or[nextsectnum] : NULL; - - gotswall = 0; - - startsmostwallcnt = smostwallcnt; - startsmostcnt = smostcnt; - - if ((searchit == 2) && (searchx >= x1) && (searchx <= x2)) - { - if (searchy <= uplc[searchx]) //ceiling - { - searchsector = sectnum; searchwall = wallnum; - searchstat = 1; searchit = 1; - } - else if (searchy >= dplc[searchx]) //floor - { - searchsector = sectnum; searchwall = wallnum; - searchstat = 2; searchit = 1; - } - } - - if (nextsectnum >= 0) - { - getzsofslope((int16_t)sectnum,wal->x,wal->y,&cz[0],&fz[0]); - getzsofslope((int16_t)sectnum,wall[wal->point2].x,wall[wal->point2].y,&cz[1],&fz[1]); - getzsofslope((int16_t)nextsectnum,wal->x,wal->y,&cz[2],&fz[2]); - getzsofslope((int16_t)nextsectnum,wall[wal->point2].x,wall[wal->point2].y,&cz[3],&fz[3]); - getzsofslope((int16_t)nextsectnum,globalposx,globalposy,&cz[4],&fz[4]); - - if ((wal->cstat&48) == 16) maskwall[maskwallcnt++] = z; - - if (((sec->ceilingstat&1) == 0) || ((nextsec->ceilingstat&1) == 0)) - { - if ((cz[2] <= cz[0]) && (cz[3] <= cz[1])) - { - if (globparaceilclip) - for (x=x1; x<=x2; x++) - if (uplc[x] > umost[x]) - if (umost[x] <= dmost[x]) - { - umost[x] = uplc[x]; - if (umost[x] > dmost[x]) numhits--; - } - } - else - { - wallmost(dwall,z,nextsectnum,(uint8_t)0); - if ((cz[2] > fz[0]) || (cz[3] > fz[1])) - for (i=x1; i<=x2; i++) if (dwall[i] > dplc[i]) dwall[i] = dplc[i]; - - if ((searchit == 2) && (searchx >= x1) && (searchx <= x2)) - if (searchy <= dwall[searchx]) //wall - { - searchsector = sectnum; searchbottomwall = searchwall = wallnum; - searchstat = 0; searchit = 1; - } - - globalorientation = (int32_t)wal->cstat; - globalpicnum = wal->picnum; - if ((unsigned)globalpicnum >= (unsigned)MAXTILES) globalpicnum = 0; - globalxpanning = (int32_t)wal->xpanning; - globalypanning = (int32_t)wal->ypanning; - globalshiftval = (picsiz[globalpicnum]>>4); - if (pow2long[globalshiftval] != tilesizy[globalpicnum]) globalshiftval++; - globalshiftval = 32-globalshiftval; - if (picanm[globalpicnum]&192) globalpicnum += animateoffs(globalpicnum,(int16_t)wallnum+16384); - globalshade = (int32_t)wal->shade; - globvis = globalvisibility; - if (sec->visibility != 0) globvis = mulscale4(globvis,(int32_t)((uint8_t)(sec->visibility+16))); - globalpal = (int32_t)wal->pal; - if (palookup[globalpal] == NULL) globalpal = 0; // JBF: fixes crash - globalyscale = (wal->yrepeat<<(globalshiftval-19)); - if ((globalorientation&4) == 0) - globalzd = (((globalposz-nextsec->ceilingz)*globalyscale)<<8); - else - globalzd = (((globalposz-sec->ceilingz)*globalyscale)<<8); - globalzd += (globalypanning<<24); - if (globalorientation&256) globalyscale = -globalyscale, globalzd = -globalzd; - - if (gotswall == 0) { gotswall = 1; prepwall(z,wal); } - wallscan(x1,x2,uplc,dwall,swall,lwall); - - if ((cz[2] >= cz[0]) && (cz[3] >= cz[1])) - { - for (x=x1; x<=x2; x++) - if (dwall[x] > umost[x]) - if (umost[x] <= dmost[x]) - { - umost[x] = dwall[x]; - if (umost[x] > dmost[x]) numhits--; - } - } - else - { - for (x=x1; x<=x2; x++) - if (umost[x] <= dmost[x]) - { - i = max(uplc[x],dwall[x]); - if (i > umost[x]) - { - umost[x] = i; - if (umost[x] > dmost[x]) numhits--; - } - } - } - } - if ((cz[2] < cz[0]) || (cz[3] < cz[1]) || (globalposz < cz[4])) - { - i = x2-x1+1; - if (smostcnt+i < MAXYSAVES) - { - smoststart[smostwallcnt] = smostcnt; - smostwall[smostwallcnt] = z; - smostwalltype[smostwallcnt] = 1; //1 for umost - smostwallcnt++; - copybufbyte(&umost[x1],&smost[smostcnt],i*sizeof(smost[0])); - smostcnt += i; - } - } - } - if (((sec->floorstat&1) == 0) || ((nextsec->floorstat&1) == 0)) - { - if ((fz[2] >= fz[0]) && (fz[3] >= fz[1])) - { - if (globparaflorclip) - for (x=x1; x<=x2; x++) - if (dplc[x] < dmost[x]) - if (umost[x] <= dmost[x]) - { - dmost[x] = dplc[x]; - if (umost[x] > dmost[x]) numhits--; - } - } - else - { - wallmost(uwall,z,nextsectnum,(uint8_t)1); - if ((fz[2] < cz[0]) || (fz[3] < cz[1])) - for (i=x1; i<=x2; i++) if (uwall[i] < uplc[i]) uwall[i] = uplc[i]; - - if ((searchit == 2) && (searchx >= x1) && (searchx <= x2)) - if (searchy >= uwall[searchx]) //wall - { - searchsector = sectnum; searchbottomwall = searchwall = wallnum; - if ((wal->cstat&2) > 0) searchbottomwall = wal->nextwall; - searchstat = 0; searchit = 1; - } - - if ((wal->cstat&2) > 0) - { - wallnum = wal->nextwall; wal = &wall[wallnum]; - globalorientation = (int32_t)wal->cstat; - globalpicnum = wal->picnum; - if ((unsigned)globalpicnum >= (unsigned)MAXTILES) globalpicnum = 0; - globalxpanning = (int32_t)wal->xpanning; - globalypanning = (int32_t)wal->ypanning; - if (picanm[globalpicnum]&192) globalpicnum += animateoffs(globalpicnum,(int16_t)wallnum+16384); - globalshade = (int32_t)wal->shade; - globalpal = (int32_t)wal->pal; - wallnum = thewall[z]; wal = &wall[wallnum]; - } - else - { - globalorientation = (int32_t)wal->cstat; - globalpicnum = wal->picnum; - if ((unsigned)globalpicnum >= (unsigned)MAXTILES) globalpicnum = 0; - globalxpanning = (int32_t)wal->xpanning; - globalypanning = (int32_t)wal->ypanning; - if (picanm[globalpicnum]&192) globalpicnum += animateoffs(globalpicnum,(int16_t)wallnum+16384); - globalshade = (int32_t)wal->shade; - globalpal = (int32_t)wal->pal; - } - if (palookup[globalpal] == NULL) globalpal = 0; // JBF: fixes crash - globvis = globalvisibility; - if (sec->visibility != 0) globvis = mulscale4(globvis,(int32_t)((uint8_t)(sec->visibility+16))); - globalshiftval = (picsiz[globalpicnum]>>4); - if (pow2long[globalshiftval] != tilesizy[globalpicnum]) globalshiftval++; - globalshiftval = 32-globalshiftval; - globalyscale = (wal->yrepeat<<(globalshiftval-19)); - if ((globalorientation&4) == 0) - globalzd = (((globalposz-nextsec->floorz)*globalyscale)<<8); - else - globalzd = (((globalposz-sec->ceilingz)*globalyscale)<<8); - globalzd += (globalypanning<<24); - if (globalorientation&256) globalyscale = -globalyscale, globalzd = -globalzd; - - if (gotswall == 0) { gotswall = 1; prepwall(z,wal); } - wallscan(x1,x2,uwall,dplc,swall,lwall); - - if ((fz[2] <= fz[0]) && (fz[3] <= fz[1])) - { - for (x=x1; x<=x2; x++) - if (uwall[x] < dmost[x]) - if (umost[x] <= dmost[x]) - { - dmost[x] = uwall[x]; - if (umost[x] > dmost[x]) numhits--; - } - } - else - { - for (x=x1; x<=x2; x++) - if (umost[x] <= dmost[x]) - { - i = min(dplc[x],uwall[x]); - if (i < dmost[x]) - { - dmost[x] = i; - if (umost[x] > dmost[x]) numhits--; - } - } - } - } - if ((fz[2] > fz[0]) || (fz[3] > fz[1]) || (globalposz > fz[4])) - { - i = x2-x1+1; - if (smostcnt+i < MAXYSAVES) - { - smoststart[smostwallcnt] = smostcnt; - smostwall[smostwallcnt] = z; - smostwalltype[smostwallcnt] = 2; //2 for dmost - smostwallcnt++; - copybufbyte(&dmost[x1],&smost[smostcnt],i*sizeof(smost[0])); - smostcnt += i; - } - } - } - if (numhits < 0) return; - if ((!(wal->cstat&32)) && ((gotsector[nextsectnum>>3]&pow2char[nextsectnum&7]) == 0)) - { - if (umost[x2] < dmost[x2]) - scansector(nextsectnum); - else - { - for (x=x1; xcstat&32)) //White/1-way wall - { - globalorientation = (int32_t)wal->cstat; - if (nextsectnum < 0) globalpicnum = wal->picnum; - else globalpicnum = wal->overpicnum; - if ((unsigned)globalpicnum >= (unsigned)MAXTILES) globalpicnum = 0; - globalxpanning = (int32_t)wal->xpanning; - globalypanning = (int32_t)wal->ypanning; - if (picanm[globalpicnum]&192) globalpicnum += animateoffs(globalpicnum,(int16_t)wallnum+16384); - globalshade = (int32_t)wal->shade; - globvis = globalvisibility; - if (sec->visibility != 0) globvis = mulscale4(globvis,(int32_t)((uint8_t)(sec->visibility+16))); - globalpal = (int32_t)wal->pal; - if (palookup[globalpal] == NULL) globalpal = 0; // JBF: fixes crash - globalshiftval = (picsiz[globalpicnum]>>4); - if (pow2long[globalshiftval] != tilesizy[globalpicnum]) globalshiftval++; - globalshiftval = 32-globalshiftval; - globalyscale = (wal->yrepeat<<(globalshiftval-19)); - if (nextsectnum >= 0) - { - if ((globalorientation&4) == 0) globalzd = globalposz-nextsec->ceilingz; - else globalzd = globalposz-sec->ceilingz; - } - else - { - if ((globalorientation&4) == 0) globalzd = globalposz-sec->ceilingz; - else globalzd = globalposz-sec->floorz; - } - globalzd = ((globalzd*globalyscale)<<8) + (globalypanning<<24); - if (globalorientation&256) globalyscale = -globalyscale, globalzd = -globalzd; - - if (gotswall == 0) { gotswall = 1; prepwall(z,wal); } - wallscan(x1,x2,uplc,dplc,swall,lwall); - - for (x=x1; x<=x2; x++) - if (umost[x] <= dmost[x]) - { umost[x] = 1; dmost[x] = 0; numhits--; } - smostwall[smostwallcnt] = z; - smostwalltype[smostwallcnt] = 0; - smostwallcnt++; - - if ((searchit == 2) && (searchx >= x1) && (searchx <= x2)) - { - searchit = 1; searchsector = sectnum; searchbottomwall = searchwall = wallnum; - if (nextsectnum < 0) searchstat = 0; else searchstat = 4; - } - } - } -} - - -// -// drawvox -// -static void drawvox(int32_t dasprx, int32_t daspry, int32_t dasprz, int32_t dasprang, - int32_t daxscale, int32_t dayscale, char daindex, - int8_t dashade, char dapal, int32_t *daumost, int32_t *dadmost) -{ - int32_t i, j, k, x, y, syoff, ggxstart, ggystart, nxoff; - int32_t cosang, sinang, sprcosang, sprsinang, backx, backy, gxinc, gyinc; - int32_t daxsiz, daysiz, dazsiz, daxpivot, daypivot, dazpivot; - int32_t daxscalerecip, dayscalerecip, cnt, gxstart, gystart, odayscale; - int32_t l1, l2, /*slabxoffs,*/ xyvoxoffs, *longptr; - intptr_t slabxoffs; - int32_t lx, rx, nx, ny, x1=0, y1=0, z1, x2=0, y2=0, z2, yplc, yinc=0; - int32_t yoff, xs=0, ys=0, xe, ye, xi=0, yi=0, cbackx, cbacky, dagxinc, dagyinc; - int16_t *shortptr; - char *voxptr, *voxend, *davoxptr, oand, oand16, oand32; - - cosang = sintable[(globalang+512)&2047]; - sinang = sintable[globalang&2047]; - sprcosang = sintable[(dasprang+512)&2047]; - sprsinang = sintable[dasprang&2047]; - - i = klabs(dmulscale6(dasprx-globalposx,cosang,daspry-globalposy,sinang)); - j = (int32_t)(getpalookup((int32_t)mulscale21(globvis,i),(int32_t)dashade)<<8); - setupdrawslab(ylookup[1],FP_OFF(palookup[dapal])+j); - j = 1310720; - j *= min(daxscale,dayscale); j >>= 6; //New hacks (for sized-down voxels) - for (k=0; k= MAXVOXMIPS) i = MAXVOXMIPS-1; - - if (novoxmips) i = 0; - davoxptr = (char *)voxoff[daindex][i]; - if (!davoxptr && i > 0) { davoxptr = (char *)voxoff[daindex][0]; i = 0; } - if (!davoxptr) return; - - if (voxscale[daindex] == 65536) - { daxscale <<= (i+8); dayscale <<= (i+8); } - else - { - daxscale = mulscale8(daxscale<>8); - backy = ((dmulscale10(y,sprcosang,x,-sprsinang)+daypivot)>>8); - cbackx = min(max(backx,0),daxsiz-1); - cbacky = min(max(backy,0),daysiz-1); - - sprcosang = mulscale14(daxscale,sprcosang); - sprsinang = mulscale14(daxscale,sprsinang); - - x = (dasprx-globalposx) - dmulscale18(daxpivot,sprcosang,daypivot,-sprsinang); - y = (daspry-globalposy) - dmulscale18(daypivot,sprcosang,daxpivot,sprsinang); - - cosang = mulscale16(cosang,dayscalerecip); - sinang = mulscale16(sinang,dayscalerecip); - - gxstart = y*cosang - x*sinang; - gystart = x*cosang + y*sinang; - gxinc = dmulscale10(sprsinang,cosang,sprcosang,-sinang); - gyinc = dmulscale10(sprcosang,cosang,sprsinang,sinang); - - x = 0; y = 0; j = max(daxsiz,daysiz); - for (i=0; i<=j; i++) - { - ggxinc[i] = x; x += gxinc; - ggyinc[i] = y; y += gyinc; - } - - if ((klabs(globalposz-dasprz)>>10) >= klabs(odayscale)) return; - syoff = divscale21(globalposz-dasprz,odayscale) + (dazpivot<<7); - yoff = ((klabs(gxinc)+klabs(gyinc))>>1); - longptr = (int32_t *)davoxptr; - xyvoxoffs = ((daxsiz+1)<<2); - - begindrawing(); //{{{ - - for (cnt=0; cnt<8; cnt++) - { - switch (cnt) - { - case 0: - xs = 0; ys = 0; xi = 1; yi = 1; break; - case 1: - xs = daxsiz-1; ys = 0; xi = -1; yi = 1; break; - case 2: - xs = 0; ys = daysiz-1; xi = 1; yi = -1; break; - case 3: - xs = daxsiz-1; ys = daysiz-1; xi = -1; yi = -1; break; - case 4: - xs = 0; ys = cbacky; xi = 1; yi = 2; break; - case 5: - xs = daxsiz-1; ys = cbacky; xi = -1; yi = 2; break; - case 6: - xs = cbackx; ys = 0; xi = 2; yi = 1; break; - case 7: - xs = cbackx; ys = daysiz-1; xi = 2; yi = -1; break; - } - xe = cbackx; ye = cbacky; - if (cnt < 4) - { - if ((xi < 0) && (xe >= xs)) continue; - if ((xi > 0) && (xe <= xs)) continue; - if ((yi < 0) && (ye >= ys)) continue; - if ((yi > 0) && (ye <= ys)) continue; - } - else - { - if ((xi < 0) && (xe > xs)) continue; - if ((xi > 0) && (xe < xs)) continue; - if ((yi < 0) && (ye > ys)) continue; - if ((yi > 0) && (ye < ys)) continue; - xe += xi; ye += yi; - } - - i = ksgn(ys-backy)+ksgn(xs-backx)*3+4; - switch (i) - { - case 6: - case 7: - x1 = 0; y1 = 0; break; - case 8: - case 5: - x1 = gxinc; y1 = gyinc; break; - case 0: - case 3: - x1 = gyinc; y1 = -gxinc; break; - case 2: - case 1: - x1 = gxinc+gyinc; y1 = gyinc-gxinc; break; - } - switch (i) - { - case 2: - case 5: - x2 = 0; y2 = 0; break; - case 0: - case 1: - x2 = gxinc; y2 = gyinc; break; - case 8: - case 7: - x2 = gyinc; y2 = -gxinc; break; - case 6: - case 3: - x2 = gxinc+gyinc; y2 = gyinc-gxinc; break; - } - oand = pow2char[(xs 0) { dagxinc = gxinc; dagyinc = mulscale16(gyinc,viewingrangerecip); } - else { dagxinc = -gxinc; dagyinc = -mulscale16(gyinc,viewingrangerecip); } - - //Fix for non 90 degree viewing ranges - nxoff = mulscale16(x2-x1,viewingrangerecip); - x1 = mulscale16(x1,viewingrangerecip); - - ggxstart = gxstart+ggyinc[ys]; - ggystart = gystart-ggxinc[ys]; - - for (x=xs; x!=xe; x+=xi) - { - slabxoffs = (intptr_t)&davoxptr[B_LITTLE32(longptr[x])]; - shortptr = (int16_t *)&davoxptr[((x*(daysiz+1))<<1)+xyvoxoffs]; - - nx = mulscale16(ggxstart+ggxinc[x],viewingrangerecip)+x1; - ny = ggystart+ggyinc[x]; - for (y=ys; y!=ye; y+=yi,nx+=dagyinc,ny-=dagxinc) - { - if ((ny <= nytooclose) || (ny >= nytoofar)) continue; - voxptr = (char *)(B_LITTLE16(shortptr[y])+slabxoffs); - voxend = (char *)(B_LITTLE16(shortptr[y+1])+slabxoffs); - if (voxptr == voxend) continue; - - lx = mulscale32(nx>>3,distrecip[(ny+y1)>>14])+halfxdimen; - if (lx < 0) lx = 0; - rx = mulscale32((nx+nxoff)>>3,distrecip[(ny+y2)>>14])+halfxdimen; - if (rx > xdimen) rx = xdimen; - if (rx <= lx) continue; - rx -= lx; - - l1 = distrecip[(ny-yoff)>>14]; - l2 = distrecip[(ny+yoff)>>14]; - for (; voxptr= 1024) yinc = divscale16(voxptr[1],z2-z1); - else if (z2 > z1) yinc = (lowrecip[z2-z1]*voxptr[1]>>8); - if (z1 < daumost[lx]) { yplc = yinc*(daumost[lx]-z1); z1 = daumost[lx]; } - else yplc = 0; - } - if (z2 > dadmost[lx]) z2 = dadmost[lx]; - z2 -= z1; if (z2 <= 0) continue; - - drawslab(rx,yplc,z2,yinc,(intptr_t)&voxptr[3],ylookup[z1]+lx+frameoffset); - } - } - } - } - - enddrawing(); //}}} -} - -// -// drawsprite (internal) -// -static void drawsprite(int32_t snum) -{ - spritetype *tspr; - sectortype *sec; - int32_t startum, startdm, sectnum, xb, yp, cstat; - int32_t siz, xsiz, ysiz, xoff, yoff, xspan, yspan; - int32_t x1, y1, x2, y2, lx, rx, dalx2, darx2, i, j, k, x, linum, linuminc; - int32_t yinc, z, z1, z2, xp1, yp1, xp2, yp2; - int32_t xv, yv, top, topinc, bot, botinc, hplc, hinc; - int32_t cosang, sinang, dax, day, lpoint, lmax, rpoint, rmax, dax1, dax2, y; - int32_t npoints, npoints2, zz, t, zsgn, zzsgn, *longptr; - int32_t tilenum, vtilenum = 0, spritenum; - char swapped, daclip; - - //============================================================================= //POLYMOST BEGINS -#ifdef USE_OPENGL - if (rendmode == 3) - { - polymost_drawsprite(snum); -# ifdef USE_OPENGL - bglDisable(GL_POLYGON_OFFSET_FILL); -# endif - return; - } -# ifdef POLYMER - if (rendmode == 4) - { - bglEnable(GL_ALPHA_TEST); - bglEnable(GL_BLEND); - - polymer_drawsprite(snum); - - bglDisable(GL_BLEND); - bglDisable(GL_ALPHA_TEST); - return; - } -# endif -#endif - //============================================================================= //POLYMOST ENDS - - tspr = tspriteptr[snum]; - - xb = spritesx[snum]; - yp = spritesy[snum]; - tilenum = tspr->picnum; - spritenum = tspr->owner; - cstat = tspr->cstat; - - if (tilenum < 0 || tilenum >= MAXSPRITES) return; - - if ((cstat&48)==48) vtilenum = tilenum; // if the game wants voxels, it gets voxels - else if ((cstat&48)!=48 && (usevoxels) && (tiletovox[tilenum] != -1) -#ifdef USE_OPENGL - && (!(spriteext[tspr->owner].flags&SPREXT_NOTMD)) -#endif - ) - { - vtilenum = tiletovox[tilenum]; - cstat |= 48; - } - - if ((cstat&48) != 48) - { - if (picanm[tilenum]&192) tilenum += animateoffs(tilenum,spritenum+32768); - if ((tilesizx[tilenum] <= 0) || (tilesizy[tilenum] <= 0) || (spritenum < 0)) - return; - } - if ((tspr->xrepeat <= 0) || (tspr->yrepeat <= 0)) return; - - sectnum = tspr->sectnum; sec = §or[sectnum]; - globalpal = tspr->pal; - if (palookup[globalpal] == NULL) globalpal = 0; // JBF: fixes null-pointer crash - globalshade = tspr->shade; - if (cstat&2) - { - if (cstat&512) settransreverse(); else settransnormal(); - } - - xoff = (int32_t)((int8_t)((picanm[tilenum]>>8)&255))+((int32_t)tspr->xoffset); - yoff = (int32_t)((int8_t)((picanm[tilenum]>>16)&255))+((int32_t)tspr->yoffset); - - if ((cstat&48) == 0) - { - if (yp <= (4<<8)) return; - - siz = divscale19(xdimenscale,yp); - - xv = mulscale16(((int32_t)tspr->xrepeat)<<16,xyaspect); - - xspan = tilesizx[tilenum]; - yspan = tilesizy[tilenum]; - xsiz = mulscale30(siz,xv*xspan); - ysiz = mulscale14(siz,tspr->yrepeat*yspan); - - if (((tilesizx[tilenum]>>11) >= xsiz) || (yspan >= (ysiz>>1))) - return; //Watch out for divscale overflow - - x1 = xb-(xsiz>>1); - if (xspan&1) x1 += mulscale31(siz,xv); //Odd xspans - i = mulscale30(siz,xv*xoff); - if ((cstat&4) == 0) x1 -= i; else x1 += i; - - y1 = mulscale16(tspr->z-globalposz,siz); - y1 -= mulscale14(siz,tspr->yrepeat*yoff); - y1 += (globalhoriz<<8)-ysiz; - if (cstat&128) - { - y1 += (ysiz>>1); - if (yspan&1) y1 += mulscale15(siz,tspr->yrepeat); //Odd yspans - } - - x2 = x1+xsiz-1; - y2 = y1+ysiz-1; - if ((y1|255) >= (y2|255)) return; - - lx = (x1>>8)+1; if (lx < 0) lx = 0; - rx = (x2>>8); if (rx >= xdimen) rx = xdimen-1; - if (lx > rx) return; - - yinc = divscale32(yspan,ysiz); - - if ((sec->ceilingstat&3) == 0) - startum = globalhoriz+mulscale24(siz,sec->ceilingz-globalposz)-1; - else - startum = 0; - if ((sec->floorstat&3) == 0) - startdm = globalhoriz+mulscale24(siz,sec->floorz-globalposz)+1; - else - startdm = 0x7fffffff; - if ((y1>>8) > startum) startum = (y1>>8); - if ((y2>>8) < startdm) startdm = (y2>>8); - - if (startum < -32768) startum = -32768; - if (startdm > 32767) startdm = 32767; - if (startum >= startdm) return; - - if ((cstat&4) == 0) - { - linuminc = divscale24(xspan,xsiz); - linum = mulscale8((lx<<8)-x1,linuminc); - } - else - { - linuminc = -divscale24(xspan,xsiz); - linum = mulscale8((lx<<8)-x2,linuminc); - } - if ((cstat&8) > 0) - { - yinc = -yinc; - i = y1; y1 = y2; y2 = i; - } - - for (x=lx; x<=rx; x++) - { - uwall[x] = max(startumost[x+windowx1]-windowy1,(int16_t)startum); - dwall[x] = min(startdmost[x+windowx1]-windowy1,(int16_t)startdm); - } - daclip = 0; - for (i=smostwallcnt-1; i>=0; i--) - { - if (smostwalltype[i]&daclip) continue; - j = smostwall[i]; - if ((xb1[j] > rx) || (xb2[j] < lx)) continue; - if ((yp <= yb1[j]) && (yp <= yb2[j])) continue; - if (spritewallfront(tspr,(int32_t)thewall[j]) && ((yp <= yb1[j]) || (yp <= yb2[j]))) continue; - - dalx2 = max(xb1[j],lx); darx2 = min(xb2[j],rx); - - switch (smostwalltype[i]) - { - case 0: - if (dalx2 <= darx2) - { - if ((dalx2 == lx) && (darx2 == rx)) return; - //clearbufbyte(&dwall[dalx2],(darx2-dalx2+1)*sizeof(dwall[0]),0L); - for (k=dalx2; k<=darx2; k++) dwall[k] = 0; - } - break; - case 1: - k = smoststart[i] - xb1[j]; - for (x=dalx2; x<=darx2; x++) - if (smost[k+x] > uwall[x]) uwall[x] = smost[k+x]; - if ((dalx2 == lx) && (darx2 == rx)) daclip |= 1; - break; - case 2: - k = smoststart[i] - xb1[j]; - for (x=dalx2; x<=darx2; x++) - if (smost[k+x] < dwall[x]) dwall[x] = smost[k+x]; - if ((dalx2 == lx) && (darx2 == rx)) daclip |= 2; - break; - } - } - - if (uwall[rx] >= dwall[rx]) - { - for (x=lx; x= 1) && (searchx >= lx) && (searchx <= rx)) - if ((searchy >= uwall[searchx]) && (searchy < dwall[searchx])) - { - searchsector = sectnum; searchwall = spritenum; - searchstat = 3; searchit = 1; - } - - z2 = tspr->z - ((yoff*tspr->yrepeat)<<2); - if (cstat&128) - { - z2 += ((yspan*tspr->yrepeat)<<1); - if (yspan&1) z2 += (tspr->yrepeat<<1); //Odd yspans - } - z1 = z2 - ((yspan*tspr->yrepeat)<<2); - - globalorientation = 0; - globalpicnum = tilenum; - if ((unsigned)globalpicnum >= (unsigned)MAXTILES) globalpicnum = 0; - globalxpanning = 0L; - globalypanning = 0L; - globvis = globalvisibility; - if (sec->visibility != 0) globvis = mulscale4(globvis,(int32_t)((uint8_t)(sec->visibility+16))); - globalshiftval = (picsiz[globalpicnum]>>4); - if (pow2long[globalshiftval] != tilesizy[globalpicnum]) globalshiftval++; - globalshiftval = 32-globalshiftval; - globalyscale = divscale(512,tspr->yrepeat,globalshiftval-19); - globalzd = (((globalposz-z1)*globalyscale)<<8); - if ((cstat&8) > 0) - { - globalyscale = -globalyscale; - globalzd = (((globalposz-z2)*globalyscale)<<8); - } - - qinterpolatedown16((intptr_t)&lwall[lx],rx-lx+1,linum,linuminc); - clearbuf(&swall[lx],rx-lx+1,mulscale19(yp,xdimscale)); - - if ((cstat&2) == 0) - maskwallscan(lx,rx,uwall,dwall,swall,lwall); - else - transmaskwallscan(lx,rx); - } - else if ((cstat&48) == 16) - { - if ((cstat&4) > 0) xoff = -xoff; - if ((cstat&8) > 0) yoff = -yoff; - - xspan = tilesizx[tilenum]; yspan = tilesizy[tilenum]; - xv = tspr->xrepeat*sintable[(tspr->ang+2560+1536)&2047]; - yv = tspr->xrepeat*sintable[(tspr->ang+2048+1536)&2047]; - i = (xspan>>1)+xoff; - x1 = tspr->x-globalposx-mulscale16(xv,i); x2 = x1+mulscale16(xv,xspan); - y1 = tspr->y-globalposy-mulscale16(yv,i); y2 = y1+mulscale16(yv,xspan); - - yp1 = dmulscale6(x1,cosviewingrangeglobalang,y1,sinviewingrangeglobalang); - yp2 = dmulscale6(x2,cosviewingrangeglobalang,y2,sinviewingrangeglobalang); - if ((yp1 <= 0) && (yp2 <= 0)) return; - xp1 = dmulscale6(y1,cosglobalang,-x1,singlobalang); - xp2 = dmulscale6(y2,cosglobalang,-x2,singlobalang); - - x1 += globalposx; y1 += globalposy; - x2 += globalposx; y2 += globalposy; - - swapped = 0; - if (dmulscale32(xp1,yp2,-xp2,yp1) >= 0) //If wall's NOT facing you - { - if ((cstat&64) != 0) return; - i = xp1, xp1 = xp2, xp2 = i; - i = yp1, yp1 = yp2, yp2 = i; - i = x1, x1 = x2, x2 = i; - i = y1, y1 = y2, y2 = i; - swapped = 1; - } - - if (xp1 >= -yp1) - { - if (xp1 > yp1) return; - - if (yp1 == 0) return; - xb1[MAXWALLSB-1] = halfxdimen + scale(xp1,halfxdimen,yp1); - if (xp1 >= 0) xb1[MAXWALLSB-1]++; //Fix for SIGNED divide - if (xb1[MAXWALLSB-1] >= xdimen) xb1[MAXWALLSB-1] = xdimen-1; - yb1[MAXWALLSB-1] = yp1; - } - else - { - if (xp2 < -yp2) return; - xb1[MAXWALLSB-1] = 0; - i = yp1-yp2+xp1-xp2; - if (i == 0) return; - yb1[MAXWALLSB-1] = yp1 + scale(yp2-yp1,xp1+yp1,i); - } - if (xp2 <= yp2) - { - if (xp2 < -yp2) return; - - if (yp2 == 0) return; - xb2[MAXWALLSB-1] = halfxdimen + scale(xp2,halfxdimen,yp2) - 1; - if (xp2 >= 0) xb2[MAXWALLSB-1]++; //Fix for SIGNED divide - if (xb2[MAXWALLSB-1] >= xdimen) xb2[MAXWALLSB-1] = xdimen-1; - yb2[MAXWALLSB-1] = yp2; - } - else - { - if (xp1 > yp1) return; - - xb2[MAXWALLSB-1] = xdimen-1; - i = xp2-xp1+yp1-yp2; - if (i == 0) return; - yb2[MAXWALLSB-1] = yp1 + scale(yp2-yp1,yp1-xp1,i); - } - - if ((yb1[MAXWALLSB-1] < 256) || (yb2[MAXWALLSB-1] < 256) || (xb1[MAXWALLSB-1] > xb2[MAXWALLSB-1])) - return; - - topinc = -mulscale10(yp1,xspan); - top = (((mulscale10(xp1,xdimen) - mulscale9(xb1[MAXWALLSB-1]-halfxdimen,yp1))*xspan)>>3); - botinc = ((yp2-yp1)>>8); - bot = mulscale11(xp1-xp2,xdimen) + mulscale2(xb1[MAXWALLSB-1]-halfxdimen,botinc); - - j = xb2[MAXWALLSB-1]+3; - z = mulscale20(top,krecipasm(bot)); - lwall[xb1[MAXWALLSB-1]] = (z>>8); - for (x=xb1[MAXWALLSB-1]+4; x<=j; x+=4) - { - top += topinc; bot += botinc; - zz = z; z = mulscale20(top,krecipasm(bot)); - lwall[x] = (z>>8); - i = ((z+zz)>>1); - lwall[x-2] = (i>>8); - lwall[x-3] = ((i+zz)>>9); - lwall[x-1] = ((i+z)>>9); - } - - if (lwall[xb1[MAXWALLSB-1]] < 0) lwall[xb1[MAXWALLSB-1]] = 0; - if (lwall[xb2[MAXWALLSB-1]] >= xspan) lwall[xb2[MAXWALLSB-1]] = xspan-1; - - if ((swapped^((cstat&4)>0)) > 0) - { - j = xspan-1; - for (x=xb1[MAXWALLSB-1]; x<=xb2[MAXWALLSB-1]; x++) - lwall[x] = j-lwall[x]; - } - - rx1[MAXWALLSB-1] = xp1; ry1[MAXWALLSB-1] = yp1; - rx2[MAXWALLSB-1] = xp2; ry2[MAXWALLSB-1] = yp2; - - hplc = divscale19(xdimenscale,yb1[MAXWALLSB-1]); - hinc = divscale19(xdimenscale,yb2[MAXWALLSB-1]); - hinc = (hinc-hplc)/(xb2[MAXWALLSB-1]-xb1[MAXWALLSB-1]+1); - - z2 = tspr->z - ((yoff*tspr->yrepeat)<<2); - if (cstat&128) - { - z2 += ((yspan*tspr->yrepeat)<<1); - if (yspan&1) z2 += (tspr->yrepeat<<1); //Odd yspans - } - z1 = z2 - ((yspan*tspr->yrepeat)<<2); - - globalorientation = 0; - globalpicnum = tilenum; - if ((unsigned)globalpicnum >= (unsigned)MAXTILES) globalpicnum = 0; - globalxpanning = 0L; - globalypanning = 0L; - globvis = globalvisibility; - if (sec->visibility != 0) globvis = mulscale4(globvis,(int32_t)((uint8_t)(sec->visibility+16))); - globalshiftval = (picsiz[globalpicnum]>>4); - if (pow2long[globalshiftval] != tilesizy[globalpicnum]) globalshiftval++; - globalshiftval = 32-globalshiftval; - globalyscale = divscale(512,tspr->yrepeat,globalshiftval-19); - globalzd = (((globalposz-z1)*globalyscale)<<8); - if ((cstat&8) > 0) - { - globalyscale = -globalyscale; - globalzd = (((globalposz-z2)*globalyscale)<<8); - } - - if (((sec->ceilingstat&1) == 0) && (z1 < sec->ceilingz)) - z1 = sec->ceilingz; - if (((sec->floorstat&1) == 0) && (z2 > sec->floorz)) - z2 = sec->floorz; - - owallmost(uwall,(int32_t)(MAXWALLSB-1),z1-globalposz); - owallmost(dwall,(int32_t)(MAXWALLSB-1),z2-globalposz); - for (i=xb1[MAXWALLSB-1]; i<=xb2[MAXWALLSB-1]; i++) - { swall[i] = (krecipasm(hplc)<<2); hplc += hinc; } - - for (i=smostwallcnt-1; i>=0; i--) - { - j = smostwall[i]; - - if ((xb1[j] > xb2[MAXWALLSB-1]) || (xb2[j] < xb1[MAXWALLSB-1])) continue; - - dalx2 = xb1[j]; darx2 = xb2[j]; - if (max(yb1[MAXWALLSB-1],yb2[MAXWALLSB-1]) > min(yb1[j],yb2[j])) - { - if (min(yb1[MAXWALLSB-1],yb2[MAXWALLSB-1]) > max(yb1[j],yb2[j])) - { - x = 0x80000000; - } - else - { - x = thewall[j]; xp1 = wall[x].x; yp1 = wall[x].y; - x = wall[x].point2; xp2 = wall[x].x; yp2 = wall[x].y; - - z1 = (xp2-xp1)*(y1-yp1) - (yp2-yp1)*(x1-xp1); - z2 = (xp2-xp1)*(y2-yp1) - (yp2-yp1)*(x2-xp1); - if ((z1^z2) >= 0) - x = (z1+z2); - else - { - z1 = (x2-x1)*(yp1-y1) - (y2-y1)*(xp1-x1); - z2 = (x2-x1)*(yp2-y1) - (y2-y1)*(xp2-x1); - - if ((z1^z2) >= 0) - x = -(z1+z2); - else - { - if ((xp2-xp1)*(tspr->y-yp1) == (tspr->x-xp1)*(yp2-yp1)) - { - if (wall[thewall[j]].nextsector == tspr->sectnum) - x = 0x80000000; - else - x = 0x7fffffff; - } - else - { - //INTERSECTION! - x = (xp1-globalposx) + scale(xp2-xp1,z1,z1-z2); - y = (yp1-globalposy) + scale(yp2-yp1,z1,z1-z2); - - yp1 = dmulscale14(x,cosglobalang,y,singlobalang); - if (yp1 > 0) - { - xp1 = dmulscale14(y,cosglobalang,-x,singlobalang); - - x = halfxdimen + scale(xp1,halfxdimen,yp1); - if (xp1 >= 0) x++; //Fix for SIGNED divide - - if (z1 < 0) - { if (dalx2 < x) dalx2 = x; } - else - { if (darx2 > x) darx2 = x; } - x = 0x80000001; - } - else - x = 0x7fffffff; - } - } - } - } - if (x < 0) - { - if (dalx2 < xb1[MAXWALLSB-1]) dalx2 = xb1[MAXWALLSB-1]; - if (darx2 > xb2[MAXWALLSB-1]) darx2 = xb2[MAXWALLSB-1]; - switch (smostwalltype[i]) - { - case 0: - if (dalx2 <= darx2) - { - if ((dalx2 == xb1[MAXWALLSB-1]) && (darx2 == xb2[MAXWALLSB-1])) return; - //clearbufbyte(&dwall[dalx2],(darx2-dalx2+1)*sizeof(dwall[0]),0L); - for (k=dalx2; k<=darx2; k++) dwall[k] = 0; - } - break; - case 1: - k = smoststart[i] - xb1[j]; - for (x=dalx2; x<=darx2; x++) - if (smost[k+x] > uwall[x]) uwall[x] = smost[k+x]; - break; - case 2: - k = smoststart[i] - xb1[j]; - for (x=dalx2; x<=darx2; x++) - if (smost[k+x] < dwall[x]) dwall[x] = smost[k+x]; - break; - } - } - } - } - - //sprite - if ((searchit >= 1) && (searchx >= xb1[MAXWALLSB-1]) && (searchx <= xb2[MAXWALLSB-1])) - if ((searchy >= uwall[searchx]) && (searchy <= dwall[searchx])) - { - searchsector = sectnum; searchwall = spritenum; - searchstat = 3; searchit = 1; - } - - if ((cstat&2) == 0) - { - maskwallscan(xb1[MAXWALLSB-1],xb2[MAXWALLSB-1],uwall,dwall,swall,lwall); - } - else - { - transmaskwallscan(xb1[MAXWALLSB-1],xb2[MAXWALLSB-1]); - } - } - else if ((cstat&48) == 32) - { - if ((cstat&64) != 0) - if ((globalposz > tspr->z) == ((cstat&8)==0)) - return; - - if ((cstat&4) > 0) xoff = -xoff; - if ((cstat&8) > 0) yoff = -yoff; - xspan = tilesizx[tilenum]; - yspan = tilesizy[tilenum]; - - //Rotate center point - dax = tspr->x-globalposx; - day = tspr->y-globalposy; - rzi[0] = dmulscale10(cosglobalang,dax,singlobalang,day); - rxi[0] = dmulscale10(cosglobalang,day,-singlobalang,dax); - - //Get top-left corner - i = ((tspr->ang+2048-globalang)&2047); - cosang = sintable[(i+512)&2047]; sinang = sintable[i]; - dax = ((xspan>>1)+xoff)*tspr->xrepeat; - day = ((yspan>>1)+yoff)*tspr->yrepeat; - rzi[0] += dmulscale12(sinang,dax,cosang,day); - rxi[0] += dmulscale12(sinang,day,-cosang,dax); - - //Get other 3 corners - dax = xspan*tspr->xrepeat; - day = yspan*tspr->yrepeat; - rzi[1] = rzi[0]-mulscale12(sinang,dax); - rxi[1] = rxi[0]+mulscale12(cosang,dax); - dax = -mulscale12(cosang,day); - day = -mulscale12(sinang,day); - rzi[2] = rzi[1]+dax; rxi[2] = rxi[1]+day; - rzi[3] = rzi[0]+dax; rxi[3] = rxi[0]+day; - - //Put all points on same z - ryi[0] = scale((tspr->z-globalposz),yxaspect,320<<8); - if (ryi[0] == 0) return; - ryi[1] = ryi[2] = ryi[3] = ryi[0]; - - if ((cstat&4) == 0) - { z = 0; z1 = 1; z2 = 3; } - else - { z = 1; z1 = 0; z2 = 2; } - - dax = rzi[z1]-rzi[z]; day = rxi[z1]-rxi[z]; - bot = dmulscale8(dax,dax,day,day); - if (((klabs(dax)>>13) >= bot) || ((klabs(day)>>13) >= bot)) return; - globalx1 = divscale18(dax,bot); - globalx2 = divscale18(day,bot); - - dax = rzi[z2]-rzi[z]; day = rxi[z2]-rxi[z]; - bot = dmulscale8(dax,dax,day,day); - if (((klabs(dax)>>13) >= bot) || ((klabs(day)>>13) >= bot)) return; - globaly1 = divscale18(dax,bot); - globaly2 = divscale18(day,bot); - - //Calculate globals for hline texture mapping function - globalxpanning = (rxi[z]<<12); - globalypanning = (rzi[z]<<12); - globalzd = (ryi[z]<<12); - - rzi[0] = mulscale16(rzi[0],viewingrange); - rzi[1] = mulscale16(rzi[1],viewingrange); - rzi[2] = mulscale16(rzi[2],viewingrange); - rzi[3] = mulscale16(rzi[3],viewingrange); - - if (ryi[0] < 0) //If ceilsprite is above you, reverse order of points - { - i = rxi[1]; rxi[1] = rxi[3]; rxi[3] = i; - i = rzi[1]; rzi[1] = rzi[3]; rzi[3] = i; - } - - - //Clip polygon in 3-space - npoints = 4; - - //Clip edge 1 - npoints2 = 0; - zzsgn = rxi[0]+rzi[0]; - for (z=0; z= 0) - { - rxi2[npoints2] = rxi[z]; ryi2[npoints2] = ryi[z]; rzi2[npoints2] = rzi[z]; - npoints2++; - } - if ((zsgn^zzsgn) < 0) - { - t = divscale30(zsgn,zsgn-zzsgn); - rxi2[npoints2] = rxi[z] + mulscale30(t,rxi[zz]-rxi[z]); - ryi2[npoints2] = ryi[z] + mulscale30(t,ryi[zz]-ryi[z]); - rzi2[npoints2] = rzi[z] + mulscale30(t,rzi[zz]-rzi[z]); - npoints2++; - } - } - if (npoints2 <= 2) return; - - //Clip edge 2 - npoints = 0; - zzsgn = rxi2[0]-rzi2[0]; - for (z=0; z= 0) - { - rxi2[npoints2] = rxi[z]; - ryi2[npoints2] = ryi[z]; - rzi2[npoints2] = rzi[z]; - npoints2++; - } - if ((zsgn^zzsgn) < 0) - { - t = divscale30(zsgn,zsgn-zzsgn); - rxi2[npoints2] = rxi[z] + mulscale30(t,rxi[zz]-rxi[z]); - ryi2[npoints2] = ryi[z] + mulscale30(t,ryi[zz]-ryi[z]); - rzi2[npoints2] = rzi[z] + mulscale30(t,rzi[zz]-rzi[z]); - npoints2++; - } - } - if (npoints2 <= 2) return; - - //Clip edge 4 - npoints = 0; - zzsgn = ryi2[0]*halfxdimen + (rzi2[0]*(globalhoriz-ydimen)); - for (z=0; z (xdimen<<16)) xsi[z] = (xdimen<<16); - if (ysi[z] < ((int32_t)0<<16)) ysi[z] = ((int32_t)0<<16); - if (ysi[z] > ((int32_t)ydimen<<16)) ysi[z] = ((int32_t)ydimen<<16); - if (xsi[z] < lmax) lmax = xsi[z], lpoint = z; - if (xsi[z] > rmax) rmax = xsi[z], rpoint = z; - } - - //Get uwall arrays - for (z=lpoint; z!=rpoint; z=zz) - { - zz = z+1; if (zz == npoints) zz = 0; - - dax1 = ((xsi[z]+65535)>>16); - dax2 = ((xsi[zz]+65535)>>16); - if (dax2 > dax1) - { - yinc = divscale16(ysi[zz]-ysi[z],xsi[zz]-xsi[z]); - y = ysi[z] + mulscale16((dax1<<16)-xsi[z],yinc); - qinterpolatedown16short((intptr_t)(&uwall[dax1]),dax2-dax1,y,yinc); - } - } - - //Get dwall arrays - for (; z!=lpoint; z=zz) - { - zz = z+1; if (zz == npoints) zz = 0; - - dax1 = ((xsi[zz]+65535)>>16); - dax2 = ((xsi[z]+65535)>>16); - if (dax2 > dax1) - { - yinc = divscale16(ysi[zz]-ysi[z],xsi[zz]-xsi[z]); - y = ysi[zz] + mulscale16((dax1<<16)-xsi[zz],yinc); - qinterpolatedown16short((intptr_t)(&dwall[dax1]),dax2-dax1,y,yinc); - } - } - - - lx = ((lmax+65535)>>16); - rx = ((rmax+65535)>>16); - for (x=lx; x<=rx; x++) - { - uwall[x] = max(uwall[x],startumost[x+windowx1]-windowy1); - dwall[x] = min(dwall[x],startdmost[x+windowx1]-windowy1); - } - - //Additional uwall/dwall clipping goes here - for (i=smostwallcnt-1; i>=0; i--) - { - j = smostwall[i]; - if ((xb1[j] > rx) || (xb2[j] < lx)) continue; - if ((yp <= yb1[j]) && (yp <= yb2[j])) continue; - - //if (spritewallfront(tspr,thewall[j]) == 0) - x = thewall[j]; xp1 = wall[x].x; yp1 = wall[x].y; - x = wall[x].point2; xp2 = wall[x].x; yp2 = wall[x].y; - x = (xp2-xp1)*(tspr->y-yp1)-(tspr->x-xp1)*(yp2-yp1); - if ((yp > yb1[j]) && (yp > yb2[j])) x = -1; - if ((x >= 0) && ((x != 0) || (wall[thewall[j]].nextsector != tspr->sectnum))) continue; - - dalx2 = max(xb1[j],lx); darx2 = min(xb2[j],rx); - - switch (smostwalltype[i]) - { - case 0: - if (dalx2 <= darx2) - { - if ((dalx2 == lx) && (darx2 == rx)) return; - //clearbufbyte(&dwall[dalx2],(darx2-dalx2+1)*sizeof(dwall[0]),0L); - for (x=dalx2; x<=darx2; x++) dwall[x] = 0; - } - break; - case 1: - k = smoststart[i] - xb1[j]; - for (x=dalx2; x<=darx2; x++) - if (smost[k+x] > uwall[x]) uwall[x] = smost[k+x]; - break; - case 2: - k = smoststart[i] - xb1[j]; - for (x=dalx2; x<=darx2; x++) - if (smost[k+x] < dwall[x]) dwall[x] = smost[k+x]; - break; - } - } - - //sprite - if ((searchit >= 1) && (searchx >= lx) && (searchx <= rx)) - if ((searchy >= uwall[searchx]) && (searchy <= dwall[searchx])) - { - searchsector = sectnum; searchwall = spritenum; - searchstat = 3; searchit = 1; - } - - globalorientation = cstat; - globalpicnum = tilenum; - if ((unsigned)globalpicnum >= (unsigned)MAXTILES) globalpicnum = 0; - //if (picanm[globalpicnum]&192) globalpicnum += animateoffs((short)globalpicnum,spritenum+32768); - - if (waloff[globalpicnum] == 0) loadtile(globalpicnum); - setgotpic(globalpicnum); - globalbufplc = waloff[globalpicnum]; - - globvis = mulscale16(globalhisibility,viewingrange); - if (sec->visibility != 0) globvis = mulscale4(globvis,(int32_t)((uint8_t)(sec->visibility+16))); - - x = picsiz[globalpicnum]; y = ((x>>4)&15); x &= 15; - if (pow2long[x] != xspan) - { - x++; - globalx1 = mulscale(globalx1,xspan,x); - globalx2 = mulscale(globalx2,xspan,x); - } - - dax = globalxpanning; day = globalypanning; - globalxpanning = -dmulscale6(globalx1,day,globalx2,dax); - globalypanning = -dmulscale6(globaly1,day,globaly2,dax); - - globalx2 = mulscale16(globalx2,viewingrange); - globaly2 = mulscale16(globaly2,viewingrange); - globalzd = mulscale16(globalzd,viewingrangerecip); - - globalx1 = (globalx1-globalx2)*halfxdimen; - globaly1 = (globaly1-globaly2)*halfxdimen; - - if ((cstat&2) == 0) - msethlineshift(x,y); - else - tsethlineshift(x,y); - - //Draw it! - ceilspritescan(lx,rx-1); - } - else if ((cstat&48) == 48) - { - int32_t nxrepeat, nyrepeat; - - lx = 0; rx = xdim-1; - for (x=lx; x<=rx; x++) - { - lwall[x] = (int32_t)startumost[x+windowx1]-windowy1; - swall[x] = (int32_t)startdmost[x+windowx1]-windowy1; - } - for (i=smostwallcnt-1; i>=0; i--) - { - j = smostwall[i]; - if ((xb1[j] > rx) || (xb2[j] < lx)) continue; - if ((yp <= yb1[j]) && (yp <= yb2[j])) continue; - if (spritewallfront(tspr,(int32_t)thewall[j]) && ((yp <= yb1[j]) || (yp <= yb2[j]))) continue; - - dalx2 = max(xb1[j],lx); darx2 = min(xb2[j],rx); - - switch (smostwalltype[i]) - { - case 0: - if (dalx2 <= darx2) - { - if ((dalx2 == lx) && (darx2 == rx)) return; - //clearbufbyte(&swall[dalx2],(darx2-dalx2+1)*sizeof(swall[0]),0L); - for (x=dalx2; x<=darx2; x++) swall[x] = 0; - } - break; - case 1: - k = smoststart[i] - xb1[j]; - for (x=dalx2; x<=darx2; x++) - if (smost[k+x] > lwall[x]) lwall[x] = smost[k+x]; - break; - case 2: - k = smoststart[i] - xb1[j]; - for (x=dalx2; x<=darx2; x++) - if (smost[k+x] < swall[x]) swall[x] = smost[k+x]; - break; - } - } - - if (lwall[rx] >= swall[rx]) - { - for (x=lx; xxrepeat)<<16); - nyrepeat = (((int32_t)tspr->yrepeat)<<16); - } - else - { - nxrepeat = ((int32_t)tspr->xrepeat)*voxscale[vtilenum]; - nyrepeat = ((int32_t)tspr->yrepeat)*voxscale[vtilenum]; - } - - if (!(cstat&128)) tspr->z -= mulscale22(B_LITTLE32(longptr[5]),nyrepeat); - yoff = (int32_t)((int8_t)((picanm[sprite[tspr->owner].picnum]>>16)&255))+((int32_t)tspr->yoffset); - tspr->z -= mulscale14(yoff,nyrepeat); - - globvis = globalvisibility; - if (sec->visibility != 0) globvis = mulscale4(globvis,(int32_t)((uint8_t)(sec->visibility+16))); - - if ((searchit >= 1) && (yp > (4<<8)) && (searchy >= lwall[searchx]) && (searchy < swall[searchx])) - { - siz = divscale19(xdimenscale,yp); - - xv = mulscale16(nxrepeat,xyaspect); - - xspan = ((B_LITTLE32(longptr[0])+B_LITTLE32(longptr[1]))>>1); - yspan = B_LITTLE32(longptr[2]); - xsiz = mulscale30(siz,xv*xspan); - ysiz = mulscale30(siz,nyrepeat*yspan); - - //Watch out for divscale overflow - if (((xspan>>11) < xsiz) && (yspan < (ysiz>>1))) - { - x1 = xb-(xsiz>>1); - if (xspan&1) x1 += mulscale31(siz,xv); //Odd xspans - i = mulscale30(siz,xv*xoff); - if ((cstat&4) == 0) x1 -= i; else x1 += i; - - y1 = mulscale16(tspr->z-globalposz,siz); - //y1 -= mulscale30(siz,nyrepeat*yoff); - y1 += (globalhoriz<<8)-ysiz; - //if (cstat&128) //Already fixed up above - y1 += (ysiz>>1); - - x2 = x1+xsiz-1; - y2 = y1+ysiz-1; - if (((y1|255) < (y2|255)) && (searchx >= (x1>>8)+1) && (searchx <= (x2>>8))) - { - if ((sec->ceilingstat&3) == 0) - startum = globalhoriz+mulscale24(siz,sec->ceilingz-globalposz)-1; - else - startum = 0; - if ((sec->floorstat&3) == 0) - startdm = globalhoriz+mulscale24(siz,sec->floorz-globalposz)+1; - else - startdm = 0x7fffffff; - - //sprite - if ((searchy >= max(startum,(y1>>8))) && (searchy < min(startdm,(y2>>8)))) - { - searchsector = sectnum; searchwall = spritenum; - searchstat = 3; searchit = 1; - } - } - } - } - - i = (int32_t)tspr->ang+1536; -#ifdef USE_OPENGL - i += spriteext[tspr->owner].angoff; -#endif - drawvox(tspr->x,tspr->y,tspr->z,i,(int32_t)tspr->xrepeat,(int32_t)tspr->yrepeat,vtilenum,tspr->shade,tspr->pal,lwall,swall); - } - if (automapping == 1) show2dsprite[spritenum>>3] |= pow2char[spritenum&7]; -} - - -// -// drawmaskwall (internal) -// -static void drawmaskwall(int16_t damaskwallcnt) -{ - int32_t i, j, k, x, z, sectnum, z1, z2, lx, rx; - sectortype *sec, *nsec; - walltype *wal; - - //============================================================================= //POLYMOST BEGINS -#ifdef USE_OPENGL - if (rendmode == 3) { polymost_drawmaskwall(damaskwallcnt); return; } -# ifdef POLYMER - if (rendmode == 4) - { - bglEnable(GL_ALPHA_TEST); - bglEnable(GL_BLEND); - - polymer_drawmaskwall(damaskwallcnt); - - bglDisable(GL_BLEND); - bglDisable(GL_ALPHA_TEST); - - return; - } -#endif -#endif - //============================================================================= //POLYMOST ENDS - - z = maskwall[damaskwallcnt]; - wal = &wall[thewall[z]]; - sectnum = thesector[z]; sec = §or[sectnum]; - nsec = §or[wal->nextsector]; - z1 = max(nsec->ceilingz,sec->ceilingz); - z2 = min(nsec->floorz,sec->floorz); - - wallmost(uwall,z,sectnum,(uint8_t)0); - wallmost(uplc,z,(int32_t)wal->nextsector,(uint8_t)0); - for (x=xb1[z]; x<=xb2[z]; x++) if (uplc[x] > uwall[x]) uwall[x] = uplc[x]; - wallmost(dwall,z,sectnum,(uint8_t)1); - wallmost(dplc,z,(int32_t)wal->nextsector,(uint8_t)1); - for (x=xb1[z]; x<=xb2[z]; x++) if (dplc[x] < dwall[x]) dwall[x] = dplc[x]; - prepwall(z,wal); - - globalorientation = (int32_t)wal->cstat; - globalpicnum = wal->overpicnum; - if ((unsigned)globalpicnum >= (unsigned)MAXTILES) globalpicnum = 0; - globalxpanning = (int32_t)wal->xpanning; - globalypanning = (int32_t)wal->ypanning; - if (picanm[globalpicnum]&192) globalpicnum += animateoffs(globalpicnum,(int16_t)thewall[z]+16384); - globalshade = (int32_t)wal->shade; - globvis = globalvisibility; - if (sec->visibility != 0) globvis = mulscale4(globvis,(int32_t)((uint8_t)(sec->visibility+16))); - globalpal = (int32_t)wal->pal; - globalshiftval = (picsiz[globalpicnum]>>4); - if (pow2long[globalshiftval] != tilesizy[globalpicnum]) globalshiftval++; - globalshiftval = 32-globalshiftval; - globalyscale = (wal->yrepeat<<(globalshiftval-19)); - if ((globalorientation&4) == 0) - globalzd = (((globalposz-z1)*globalyscale)<<8); - else - globalzd = (((globalposz-z2)*globalyscale)<<8); - globalzd += (globalypanning<<24); - if (globalorientation&256) globalyscale = -globalyscale, globalzd = -globalzd; - - for (i=smostwallcnt-1; i>=0; i--) - { - j = smostwall[i]; - if ((xb1[j] > xb2[z]) || (xb2[j] < xb1[z])) continue; - if (wallfront(j,z)) continue; - - lx = max(xb1[j],xb1[z]); rx = min(xb2[j],xb2[z]); - - switch (smostwalltype[i]) - { - case 0: - if (lx <= rx) - { - if ((lx == xb1[z]) && (rx == xb2[z])) return; - //clearbufbyte(&dwall[lx],(rx-lx+1)*sizeof(dwall[0]),0L); - for (x=lx; x<=rx; x++) dwall[x] = 0; - } - break; - case 1: - k = smoststart[i] - xb1[j]; - for (x=lx; x<=rx; x++) - if (smost[k+x] > uwall[x]) uwall[x] = smost[k+x]; - break; - case 2: - k = smoststart[i] - xb1[j]; - for (x=lx; x<=rx; x++) - if (smost[k+x] < dwall[x]) dwall[x] = smost[k+x]; - break; - } - } - - //maskwall - if ((searchit >= 1) && (searchx >= xb1[z]) && (searchx <= xb2[z])) - if ((searchy >= uwall[searchx]) && (searchy <= dwall[searchx])) - { - searchsector = sectnum; searchwall = thewall[z]; - searchstat = 4; searchit = 1; - } - - if ((globalorientation&128) == 0) - maskwallscan(xb1[z],xb2[z],uwall,dwall,swall,lwall); - else - { - if (globalorientation&128) - { - if (globalorientation&512) settransreverse(); else settransnormal(); - } - transmaskwallscan(xb1[z],xb2[z]); - } -} - - -// -// fillpolygon (internal) -// -static void fillpolygon(int32_t npoints) -{ - int32_t z, zz, x1, y1, x2, y2, miny, maxy, y, xinc, cnt; - int32_t ox, oy, bx, by, day1, day2; - int16_t *ptr, *ptr2; - intptr_t p; - -#ifdef USE_OPENGL - if (rendmode >= 3 && qsetmode == 200) { polymost_fillpolygon(npoints); return; } -#endif - - miny = 0x7fffffff; maxy = 0x80000000; - for (z=npoints-1; z>=0; z--) - { y = ry1[z]; miny = min(miny,y); maxy = max(maxy,y); } - miny = (miny>>12); maxy = (maxy>>12); - if (miny < 0) miny = 0; - if (maxy >= ydim) maxy = ydim-1; - ptr = smost; //They're pointers! - watch how you optimize this thing - for (y=miny; y<=maxy; y++) - { - dotp1[y] = ptr; dotp2[y] = ptr+(MAXNODESPERLINE>>1); - ptr += MAXNODESPERLINE; - } - - for (z=npoints-1; z>=0; z--) - { - zz = xb1[z]; - y1 = ry1[z]; day1 = (y1>>12); - y2 = ry1[zz]; day2 = (y2>>12); - if (day1 != day2) - { - x1 = rx1[z]; x2 = rx1[zz]; - xinc = divscale12(x2-x1,y2-y1); - if (day2 > day1) - { - x1 += mulscale12((day1<<12)+4095-y1,xinc); - for (y=day1; y>12); x1 += xinc; } - } - else - { - x2 += mulscale12((day2<<12)+4095-y2,xinc); - for (y=day2; y>12); x2 += xinc; } - } - } - } - - globalx1 = mulscale16(globalx1,xyaspect); - globaly2 = mulscale16(globaly2,xyaspect); - - oy = miny+1-(ydim>>1); - globalposx += oy*globalx1; - globalposy += oy*globaly2; - - setuphlineasm4(asm1,asm2); - - ptr = smost; - for (y=miny; y<=maxy; y++) - { - cnt = dotp1[y]-ptr; ptr2 = ptr+(MAXNODESPERLINE>>1); - for (z=cnt-1; z>=0; z--) - { - day1 = 0; day2 = 0; - for (zz=z; zz>0; zz--) - { - if (ptr[zz] < ptr[day1]) day1 = zz; - if (ptr2[zz] < ptr2[day2]) day2 = zz; - } - x1 = ptr[day1]; ptr[day1] = ptr[z]; - x2 = ptr2[day2]-1; ptr2[day2] = ptr2[z]; - if (x1 > x2) continue; - - if (globalpolytype < 1) - { - //maphline - ox = x2+1-(xdim>>1); - bx = ox*asm1 + globalposx; - by = ox*asm2 - globalposy; - - p = ylookup[y]+x2+frameplace; - hlineasm4(x2-x1,-1L,globalshade<<8,by,bx,p); - } - else - { - //maphline - ox = x1+1-(xdim>>1); - bx = ox*asm1 + globalposx; - by = ox*asm2 - globalposy; - - p = ylookup[y]+x1+frameplace; - if (globalpolytype == 1) - mhline(globalbufplc,bx,(x2-x1)<<16,0L,by,p); - else - { - thline(globalbufplc,bx,(x2-x1)<<16,0L,by,p); - } - } - } - globalposx += globalx1; - globalposy += globaly2; - ptr += MAXNODESPERLINE; - } - faketimerhandler(); -} - - -// -// clippoly (internal) -// -static int32_t clippoly(int32_t npoints, int32_t clipstat) -{ - int32_t z, zz, s1, s2, t, npoints2, start2, z1, z2, z3, z4, splitcnt; - int32_t cx1, cy1, cx2, cy2; - - cx1 = windowx1; - cy1 = windowy1; - cx2 = windowx2+1; - cy2 = windowy2+1; - cx1 <<= 12; cy1 <<= 12; cx2 <<= 12; cy2 <<= 12; - - if (clipstat&0xa) //Need to clip top or left - { - npoints2 = 0; start2 = 0; z = 0; splitcnt = 0; - do - { - s2 = cx1-rx1[z]; - do - { - zz = xb1[z]; xb1[z] = -1; - s1 = s2; s2 = cx1-rx1[zz]; - if (s1 < 0) - { - rx2[npoints2] = rx1[z]; ry2[npoints2] = ry1[z]; - xb2[npoints2] = npoints2+1; npoints2++; - } - if ((s1^s2) < 0) - { - rx2[npoints2] = rx1[z]+scale(rx1[zz]-rx1[z],s1,s1-s2); - ry2[npoints2] = ry1[z]+scale(ry1[zz]-ry1[z],s1,s1-s2); - if (s1 < 0) p2[splitcnt++] = npoints2; - xb2[npoints2] = npoints2+1; - npoints2++; - } - z = zz; - } - while (xb1[z] >= 0); - - if (npoints2 >= start2+3) - xb2[npoints2-1] = start2, start2 = npoints2; - else - npoints2 = start2; - - z = 1; - while ((z < npoints) && (xb1[z] < 0)) z++; - } - while (z < npoints); - if (npoints2 <= 2) return(0); - - for (z=1; z= 0); - - if (npoints >= start2+3) - xb1[npoints-1] = start2, start2 = npoints; - else - npoints = start2; - - z = 1; - while ((z < npoints2) && (xb2[z] < 0)) z++; - } - while (z < npoints2); - if (npoints <= 2) return(0); - - for (z=1; z= 0); - - if (npoints2 >= start2+3) - xb2[npoints2-1] = start2, start2 = npoints2; - else - npoints2 = start2; - - z = 1; - while ((z < npoints) && (xb1[z] < 0)) z++; - } - while (z < npoints); - if (npoints2 <= 2) return(0); - - for (z=1; z= 0); - - if (npoints >= start2+3) - xb1[npoints-1] = start2, start2 = npoints; - else - npoints = start2; - - z = 1; - while ((z < npoints2) && (xb2[z] < 0)) z++; - } - while (z < npoints2); - if (npoints <= 2) return(0); - - for (z=1; z= 3 && qsetmode == 200) { polymost_dorotatesprite(sx,sy,z,a,picnum,dashade,dapalnum,dastat,cx1,cy1,cx2,cy2,uniqid); return; } -#endif - //============================================================================= //POLYMOST ENDS - - if (cx1 < 0) cx1 = 0; - if (cy1 < 0) cy1 = 0; - if (cx2 > xres-1) cx2 = xres-1; - if (cy2 > yres-1) cy2 = yres-1; - - xsiz = tilesizx[picnum]; ysiz = tilesizy[picnum]; - if (dastat&16) { xoff = 0; yoff = 0; } - else - { - xoff = (int32_t)((int8_t)((picanm[picnum]>>8)&255))+(xsiz>>1); - yoff = (int32_t)((int8_t)((picanm[picnum]>>16)&255))+(ysiz>>1); - } - - if (dastat&4) yoff = ysiz-yoff; - - cosang = sintable[(a+512)&2047]; sinang = sintable[a&2047]; - - if ((dastat&2) != 0) //Auto window size scaling - { - if ((dastat&8) == 0) - { - x = xdimenscale; //= scale(xdimen,yxaspect,320); - sx = ((cx1+cx2+2)<<15)+scale(sx-(320<<15),xdimen,320); - sy = ((cy1+cy2+2)<<15)+mulscale16(sy-(200<<15),x); - } - else - { - //If not clipping to startmosts, & auto-scaling on, as a - //hard-coded bonus, scale to full screen instead - x = scale(xdim,yxaspect,320); - sx = (xdim<<15)+32768+scale(sx-(320<<15),xdim,320); - sy = (ydim<<15)+32768+mulscale16(sy-(200<<15),x); - } - z = mulscale16(z,x); - } - - xv = mulscale14(cosang,z); - yv = mulscale14(sinang,z); - if (((dastat&2) != 0) || ((dastat&8) == 0)) //Don't aspect unscaled perms - { - xv2 = mulscale16(xv,xyaspect); - yv2 = mulscale16(yv,xyaspect); - } - else - { - xv2 = xv; - yv2 = yv; - } - - nry1[0] = sy - (yv*xoff + xv*yoff); - nry1[1] = nry1[0] + yv*xsiz; - nry1[3] = nry1[0] + xv*ysiz; - nry1[2] = nry1[1]+nry1[3]-nry1[0]; - i = (cy1<<16); if ((nry1[0]i) && (nry1[1]>i) && (nry1[2]>i) && (nry1[3]>i)) return; - - nrx1[0] = sx - (xv2*xoff - yv2*yoff); - nrx1[1] = nrx1[0] + xv2*xsiz; - nrx1[3] = nrx1[0] - yv2*ysiz; - nrx1[2] = nrx1[1]+nrx1[3]-nrx1[0]; - i = (cx1<<16); if ((nrx1[0]i) && (nrx1[1]>i) && (nrx1[2]>i) && (nrx1[3]>i)) return; - - gx1 = nrx1[0]; gy1 = nry1[0]; //back up these before clipping - - if ((npoints = clippoly4(cx1<<16,cy1<<16,(cx2+1)<<16,(cy2+1)<<16)) < 3) return; - - lx = nrx1[0]; rx = nrx1[0]; - - nextv = 0; - for (v=npoints-1; v>=0; v--) - { - x1 = nrx1[v]; x2 = nrx1[nextv]; - dax1 = (x1>>16); if (x1 < lx) lx = x1; - dax2 = (x2>>16); if (x1 > rx) rx = x1; - if (dax1 != dax2) - { - y1 = nry1[v]; y2 = nry1[nextv]; - yinc = divscale16(y2-y1,x2-x1); - if (dax2 > dax1) - { - yplc = y1 + mulscale16((dax1<<16)+65535-x1,yinc); - qinterpolatedown16short((intptr_t)(&uplc[dax1]),dax2-dax1,yplc,yinc); - } - else - { - yplc = y2 + mulscale16((dax2<<16)+65535-x2,yinc); - qinterpolatedown16short((intptr_t)(&dplc[dax2]),dax1-dax2,yplc,yinc); - } - } - nextv = v; - } - - if (waloff[picnum] == 0) loadtile(picnum); - setgotpic(picnum); - bufplc = waloff[picnum]; - - if (palookup[dapalnum] == NULL) dapalnum = 0; - palookupoffs = FP_OFF(palookup[dapalnum]) + (getpalookup(0L,(int32_t)dashade)<<8); - - i = divscale32(1L,z); - xv = mulscale14(sinang,i); - yv = mulscale14(cosang,i); - if (((dastat&2) != 0) || ((dastat&8) == 0)) //Don't aspect unscaled perms - { - yv2 = mulscale16(-xv,yxaspect); - xv2 = mulscale16(yv,yxaspect); - } - else - { - yv2 = -xv; - xv2 = yv; - } - - x1 = (lx>>16); x2 = (rx>>16); - - oy = 0; - x = (x1<<16)-1-gx1; y = (oy<<16)+65535-gy1; - bx = dmulscale16(x,xv2,y,xv); - by = dmulscale16(x,yv2,y,yv); - if (dastat&4) { yv = -yv; yv2 = -yv2; by = (ysiz<<16)-1-by; } - - /* if (origbuffermode == 0) - { - if (dastat&128) - { - obuffermode = buffermode; - buffermode = 0; - setactivepage(activepage); - } - } - else if (dastat&8) - permanentupdate = 1; */ - -#ifndef ENGINE_USING_A_C - - if ((dastat&1) == 0) - { - if (((a&1023) == 0) && (ysiz <= 256)) //vlineasm4 has 256 high limit! - { - if (dastat&64) setupvlineasm(24L); else setupmvlineasm(24L); - by <<= 8; yv <<= 8; yv2 <<= 8; - - palookupoffse[0] = palookupoffse[1] = palookupoffse[2] = palookupoffse[3] = palookupoffs; - vince[0] = vince[1] = vince[2] = vince[3] = yv; - - for (x=x1; x y1) y1 = startumost[x+xx]; - if (startdmost[x+xx] < y2) y2 = startdmost[x+xx]; - } - if (y2 <= y1) continue; - - by += yv*(y1-oy); oy = y1; - - bufplce[xx] = (bx>>16)*ysiz+bufplc; - vplce[xx] = by; - y1ve[xx] = y1; - y2ve[xx] = y2-1; - bad &= ~pow2char[xx]; - } - - p = x+frameplace; - - u4 = max(max(y1ve[0],y1ve[1]),max(y1ve[2],y1ve[3])); - d4 = min(min(y2ve[0],y2ve[1]),min(y2ve[2],y2ve[3])); - - if (dastat&64) - { - if ((bad != 0) || (u4 >= d4)) - { - if (!(bad&1)) prevlineasm1(vince[0],palookupoffse[0],y2ve[0]-y1ve[0],vplce[0],bufplce[0],ylookup[y1ve[0]]+p+0); - if (!(bad&2)) prevlineasm1(vince[1],palookupoffse[1],y2ve[1]-y1ve[1],vplce[1],bufplce[1],ylookup[y1ve[1]]+p+1); - if (!(bad&4)) prevlineasm1(vince[2],palookupoffse[2],y2ve[2]-y1ve[2],vplce[2],bufplce[2],ylookup[y1ve[2]]+p+2); - if (!(bad&8)) prevlineasm1(vince[3],palookupoffse[3],y2ve[3]-y1ve[3],vplce[3],bufplce[3],ylookup[y1ve[3]]+p+3); - continue; - } - - if (u4 > y1ve[0]) vplce[0] = prevlineasm1(vince[0],palookupoffse[0],u4-y1ve[0]-1,vplce[0],bufplce[0],ylookup[y1ve[0]]+p+0); - if (u4 > y1ve[1]) vplce[1] = prevlineasm1(vince[1],palookupoffse[1],u4-y1ve[1]-1,vplce[1],bufplce[1],ylookup[y1ve[1]]+p+1); - if (u4 > y1ve[2]) vplce[2] = prevlineasm1(vince[2],palookupoffse[2],u4-y1ve[2]-1,vplce[2],bufplce[2],ylookup[y1ve[2]]+p+2); - if (u4 > y1ve[3]) vplce[3] = prevlineasm1(vince[3],palookupoffse[3],u4-y1ve[3]-1,vplce[3],bufplce[3],ylookup[y1ve[3]]+p+3); - - if (d4 >= u4) vlineasm4(d4-u4+1,ylookup[u4]+p); - - i = p+ylookup[d4+1]; - if (y2ve[0] > d4) prevlineasm1(vince[0],palookupoffse[0],y2ve[0]-d4-1,vplce[0],bufplce[0],i+0); - if (y2ve[1] > d4) prevlineasm1(vince[1],palookupoffse[1],y2ve[1]-d4-1,vplce[1],bufplce[1],i+1); - if (y2ve[2] > d4) prevlineasm1(vince[2],palookupoffse[2],y2ve[2]-d4-1,vplce[2],bufplce[2],i+2); - if (y2ve[3] > d4) prevlineasm1(vince[3],palookupoffse[3],y2ve[3]-d4-1,vplce[3],bufplce[3],i+3); - } - else - { - if ((bad != 0) || (u4 >= d4)) - { - if (!(bad&1)) mvlineasm1(vince[0],palookupoffse[0],y2ve[0]-y1ve[0],vplce[0],bufplce[0],ylookup[y1ve[0]]+p+0); - if (!(bad&2)) mvlineasm1(vince[1],palookupoffse[1],y2ve[1]-y1ve[1],vplce[1],bufplce[1],ylookup[y1ve[1]]+p+1); - if (!(bad&4)) mvlineasm1(vince[2],palookupoffse[2],y2ve[2]-y1ve[2],vplce[2],bufplce[2],ylookup[y1ve[2]]+p+2); - if (!(bad&8)) mvlineasm1(vince[3],palookupoffse[3],y2ve[3]-y1ve[3],vplce[3],bufplce[3],ylookup[y1ve[3]]+p+3); - continue; - } - - if (u4 > y1ve[0]) vplce[0] = mvlineasm1(vince[0],palookupoffse[0],u4-y1ve[0]-1,vplce[0],bufplce[0],ylookup[y1ve[0]]+p+0); - if (u4 > y1ve[1]) vplce[1] = mvlineasm1(vince[1],palookupoffse[1],u4-y1ve[1]-1,vplce[1],bufplce[1],ylookup[y1ve[1]]+p+1); - if (u4 > y1ve[2]) vplce[2] = mvlineasm1(vince[2],palookupoffse[2],u4-y1ve[2]-1,vplce[2],bufplce[2],ylookup[y1ve[2]]+p+2); - if (u4 > y1ve[3]) vplce[3] = mvlineasm1(vince[3],palookupoffse[3],u4-y1ve[3]-1,vplce[3],bufplce[3],ylookup[y1ve[3]]+p+3); - - if (d4 >= u4) mvlineasm4(d4-u4+1,ylookup[u4]+p); - - i = p+ylookup[d4+1]; - if (y2ve[0] > d4) mvlineasm1(vince[0],palookupoffse[0],y2ve[0]-d4-1,vplce[0],bufplce[0],i+0); - if (y2ve[1] > d4) mvlineasm1(vince[1],palookupoffse[1],y2ve[1]-d4-1,vplce[1],bufplce[1],i+1); - if (y2ve[2] > d4) mvlineasm1(vince[2],palookupoffse[2],y2ve[2]-d4-1,vplce[2],bufplce[2],i+2); - if (y2ve[3] > d4) mvlineasm1(vince[3],palookupoffse[3],y2ve[3]-d4-1,vplce[3],bufplce[3],i+3); - } - - faketimerhandler(); - } - } - else - { - if (dastat&64) - { - if ((xv2&0x0000ffff) == 0) - { - qlinemode = 1; - setupqrhlineasm4(0L,yv2<<16,(xv2>>16)*ysiz+(yv2>>16),palookupoffs,0L,0L); - } - else - { - qlinemode = 0; - setuprhlineasm4(xv2<<16,yv2<<16,(xv2>>16)*ysiz+(yv2>>16),palookupoffs,ysiz,0L); - } - } - else - setuprmhlineasm4(xv2<<16,yv2<<16,(xv2>>16)*ysiz+(yv2>>16),palookupoffs,ysiz,0L); - - y1 = uplc[x1]; - if (((dastat&8) == 0) && (startumost[x1] > y1)) y1 = startumost[x1]; - y2 = y1; - for (x=x1; x ny1) ny1 = startumost[x]-1; - if (startdmost[x] < ny2) ny2 = startdmost[x]; - } - - if (ny1 < ny2-1) - { - if (ny1 >= y2) - { - while (y1 < y2-1) - { - y1++; if ((y1&31) == 0) faketimerhandler(); - - //x,y1 - bx += xv*(y1-oy); by += yv*(y1-oy); oy = y1; - if (dastat&64) - { - if (qlinemode) qrhlineasm4(x-lastx[y1],(bx>>16)*ysiz+(by>>16)+bufplc,0L,0L ,by<<16,ylookup[y1]+x+frameplace); - else rhlineasm4(x-lastx[y1],(bx>>16)*ysiz+(by>>16)+bufplc,0L,bx<<16,by<<16,ylookup[y1]+x+frameplace); - } - else rmhlineasm4(x-lastx[y1],(bx>>16)*ysiz+(by>>16)+bufplc,0L,bx<<16,by<<16,ylookup[y1]+x+frameplace); - } - y1 = ny1; - } - else - { - while (y1 < ny1) - { - y1++; if ((y1&31) == 0) faketimerhandler(); - - //x,y1 - bx += xv*(y1-oy); by += yv*(y1-oy); oy = y1; - if (dastat&64) - { - if (qlinemode) qrhlineasm4(x-lastx[y1],(bx>>16)*ysiz+(by>>16)+bufplc,0L,0L ,by<<16,ylookup[y1]+x+frameplace); - else rhlineasm4(x-lastx[y1],(bx>>16)*ysiz+(by>>16)+bufplc,0L,bx<<16,by<<16,ylookup[y1]+x+frameplace); - } - else rmhlineasm4(x-lastx[y1],(bx>>16)*ysiz+(by>>16)+bufplc,0L,bx<<16,by<<16,ylookup[y1]+x+frameplace); - } - while (y1 > ny1) lastx[y1--] = x; - } - while (y2 > ny2) - { - y2--; if ((y2&31) == 0) faketimerhandler(); - - //x,y2 - bx += xv*(y2-oy); by += yv*(y2-oy); oy = y2; - if (dastat&64) - { - if (qlinemode) qrhlineasm4(x-lastx[y2],(bx>>16)*ysiz+(by>>16)+bufplc,0L,0L ,by<<16,ylookup[y2]+x+frameplace); - else rhlineasm4(x-lastx[y2],(bx>>16)*ysiz+(by>>16)+bufplc,0L,bx<<16,by<<16,ylookup[y2]+x+frameplace); - } - else rmhlineasm4(x-lastx[y2],(bx>>16)*ysiz+(by>>16)+bufplc,0L,bx<<16,by<<16,ylookup[y2]+x+frameplace); - } - while (y2 < ny2) lastx[y2++] = x; - } - else - { - while (y1 < y2-1) - { - y1++; if ((y1&31) == 0) faketimerhandler(); - - //x,y1 - bx += xv*(y1-oy); by += yv*(y1-oy); oy = y1; - if (dastat&64) - { - if (qlinemode) qrhlineasm4(x-lastx[y1],(bx>>16)*ysiz+(by>>16)+bufplc,0L,0L ,by<<16,ylookup[y1]+x+frameplace); - else rhlineasm4(x-lastx[y1],(bx>>16)*ysiz+(by>>16)+bufplc,0L,bx<<16,by<<16,ylookup[y1]+x+frameplace); - } - else rmhlineasm4(x-lastx[y1],(bx>>16)*ysiz+(by>>16)+bufplc,0L,bx<<16,by<<16,ylookup[y1]+x+frameplace); - } - if (x == x2-1) { bx += xv2; by += yv2; break; } - y1 = uplc[x+1]; - if (((dastat&8) == 0) && (startumost[x+1] > y1)) y1 = startumost[x+1]; - y2 = y1; - } - bx += xv2; by += yv2; - } - while (y1 < y2-1) - { - y1++; if ((y1&31) == 0) faketimerhandler(); - - //x2,y1 - bx += xv*(y1-oy); by += yv*(y1-oy); oy = y1; - if (dastat&64) - { - if (qlinemode) qrhlineasm4(x2-lastx[y1],(bx>>16)*ysiz+(by>>16)+bufplc,0L,0L,by<<16,ylookup[y1]+x2+frameplace); - else rhlineasm4(x2-lastx[y1],(bx>>16)*ysiz+(by>>16)+bufplc,0L,bx<<16,by<<16,ylookup[y1]+x2+frameplace); - } - else rmhlineasm4(x2-lastx[y1],(bx>>16)*ysiz+(by>>16)+bufplc,0L,bx<<16,by<<16,ylookup[y1]+x2+frameplace); - } - } - } - else - { - if ((dastat&1) == 0) - { - if (dastat&64) - setupspritevline(palookupoffs,(xv>>16)*ysiz,xv<<16,ysiz,yv,0L); - else - msetupspritevline(palookupoffs,(xv>>16)*ysiz,xv<<16,ysiz,yv,0L); - } - else - { - tsetupspritevline(palookupoffs,(xv>>16)*ysiz,xv<<16,ysiz,yv,0L); - if (dastat&32) settransreverse(); else settransnormal(); - } - for (x=x1; x y1) y1 = startumost[x]; - if (startdmost[x] < y2) y2 = startdmost[x]; - } - if (y2 <= y1) continue; - - switch (y1-oy) - { - case -1: - bx -= xv; by -= yv; oy = y1; break; - case 0: - break; - case 1: - bx += xv; by += yv; oy = y1; break; - default: - bx += xv*(y1-oy); by += yv*(y1-oy); oy = y1; break; - } - - p = ylookup[y1]+x+frameplace; - - if ((dastat&1) == 0) - { - if (dastat&64) - spritevline(0L,by<<16,y2-y1+1,bx<<16,(bx>>16)*ysiz+(by>>16)+bufplc,p); - else - mspritevline(0L,by<<16,y2-y1+1,bx<<16,(bx>>16)*ysiz+(by>>16)+bufplc,p); - } - else - { - tspritevline(0L,by<<16,y2-y1+1,bx<<16,(bx>>16)*ysiz+(by>>16)+bufplc,p); - } - faketimerhandler(); - } - } - -#else // ENGINE_USING_A_C - - if ((dastat&1) == 0) - { - if (dastat&64) - setupspritevline(palookupoffs,xv,yv,ysiz); - else - msetupspritevline(palookupoffs,xv,yv,ysiz); - } - else - { - tsetupspritevline(palookupoffs,xv,yv,ysiz); - if (dastat&32) settransreverse(); else settransnormal(); - } - for (x=x1; x y1) y1 = startumost[x]; - if (startdmost[x] < y2) y2 = startdmost[x]; - } - if (y2 <= y1) continue; - - switch (y1-oy) - { - case -1: - bx -= xv; by -= yv; oy = y1; break; - case 0: - break; - case 1: - bx += xv; by += yv; oy = y1; break; - default: - bx += xv*(y1-oy); by += yv*(y1-oy); oy = y1; break; - } - - p = ylookup[y1]+x+frameplace; - - if ((dastat&1) == 0) - { - if (dastat&64) - spritevline(bx&65535,by&65535,y2-y1+1,(bx>>16)*ysiz+(by>>16)+bufplc,p); - else - mspritevline(bx&65535,by&65535,y2-y1+1,(bx>>16)*ysiz+(by>>16)+bufplc,p); - } - else - { - tspritevline(bx&65535,by&65535,y2-y1+1,(bx>>16)*ysiz+(by>>16)+bufplc,p); - //transarea += (y2-y1); - } - faketimerhandler(); - } - -#endif - - /* if ((dastat&128) && (origbuffermode == 0)) - { - buffermode = obuffermode; - setactivepage(activepage); - }*/ -} - - -// -// initksqrt (internal) -// -static inline void initksqrt(void) -{ - int32_t i, j, k; - - j = 1; k = 0; - for (i=0; i<4096; i++) - { - if (i >= j) { j <<= 2; k++; } - sqrtable[i] = (uint16_t)(msqrtasm((i<<18)+131072)<<1); - shlookup[i] = (k<<1)+((10-k)<<8); - if (i < 256) shlookup[i+4096] = ((k+6)<<1)+((10-(k+6))<<8); - } -} - - -// -// dosetaspect -// -static void dosetaspect(void) -{ - int32_t i, j, k, x, xinc; - - if (xyaspect != oxyaspect) - { - oxyaspect = xyaspect; - j = xyaspect*320; - horizlookup2[horizycent-1] = divscale26(131072,j); - for (i=ydim*4-1; i>=0; i--) - if (i != (horizycent-1)) - { - horizlookup[i] = divscale28(1,i-(horizycent-1)); - horizlookup2[i] = divscale14(klabs(horizlookup[i]),j); - } - } - if ((xdimen != oxdimen) || (viewingrange != oviewingrange)) - { - oxdimen = xdimen; - oviewingrange = viewingrange; - xinc = mulscale32(viewingrange*320,xdimenrecip); - x = (640<<16)-mulscale1(xinc,xdimen); - for (i=0; i>16); x += xinc; - if (j != 0) j = mulscale16((int32_t)radarang[k+1]-(int32_t)radarang[k],j); - radarang2[i] = (int16_t)(((int32_t)radarang[k]+j)>>6); - } - for (i=1; i<65536; i++) distrecip[i] = divscale20(xdimen,i); - nytooclose = xdimen*2100; - nytoofar = 65536*16384-1048576; - } -} - - -// -// loadtables (internal) -// -static inline void calcbritable(void) -{ - int32_t i,j; - double a,b; - for (i=0; i<16; i++) - { - a = (double)8 / ((double)i+8); - b = (double)255 / pow((double)255,a); - for (j=0; j<256; j++) // JBF 20040207: full 8bit precision - britable[i][j] = (uint8_t)(pow((double)j,a)*b); - } -} - -static int32_t loadtables(void) -{ - int32_t i, fil; - - if (tablesloaded == 0) - { - initksqrt(); - - for (i=0; i<2048; i++) reciptable[i] = divscale30(2048L,i+2048); - - if ((fil = kopen4load("tables.dat",0)) != -1) - { - kread(fil,sintable,2048*2); for (i=2048-1; i>=0; i--) sintable[i] = B_LITTLE16(sintable[i]); - kread(fil,radarang,640*2); for (i=640-1; i>=0; i--) radarang[i] = B_LITTLE16(radarang[i]); - for (i=0; i<640; i++) radarang[1279-i] = -radarang[i]; - //kread(fil,textfont,1024); - //kread(fil,smalltextfont,1024); - //kread(fil,britable,1024); - calcbritable(); - - kclose(fil); - } - else - { - engineerrstr = "Failed to load TABLES.DAT!"; - initprintf("ERROR: %s\n", engineerrstr); - return 1; - } - tablesloaded = 1; - } - - return 0; -} - - -// -// initfastcolorlookup (internal) -// -static void initfastcolorlookup(int32_t rscale, int32_t gscale, int32_t bscale) -{ - int32_t i, j, x, y, z; - char *pal1; - - j = 0; - for (i=64; i>=0; i--) - { - //j = (i-64)*(i-64); - rdist[i] = rdist[128-i] = j*rscale; - gdist[i] = gdist[128-i] = j*gscale; - bdist[i] = bdist[128-i] = j*bscale; - j += 129-(i<<1); - } - - //clearbufbyte(colhere,sizeof(colhere),0L); - //clearbufbyte(colhead,sizeof(colhead),0L); - Bmemset(colhere,0,sizeof(colhere)); - Bmemset(colhead,0,sizeof(colhead)); - - pal1 = (char *)&palette[768-3]; - for (i=255; i>=0; i--,pal1-=3) - { - j = (pal1[0]>>3)*FASTPALGRIDSIZ*FASTPALGRIDSIZ+(pal1[1]>>3)*FASTPALGRIDSIZ+(pal1[2]>>3)+FASTPALGRIDSIZ*FASTPALGRIDSIZ+FASTPALGRIDSIZ+1; - if (colhere[j>>3]&pow2char[j&7]) colnext[i] = colhead[j]; else colnext[i] = -1; - colhead[j] = i; - colhere[j>>3] |= pow2char[j&7]; - } - - i = 0; - for (x=-FASTPALGRIDSIZ*FASTPALGRIDSIZ; x<=FASTPALGRIDSIZ*FASTPALGRIDSIZ; x+=FASTPALGRIDSIZ*FASTPALGRIDSIZ) - for (y=-FASTPALGRIDSIZ; y<=FASTPALGRIDSIZ; y+=FASTPALGRIDSIZ) - for (z=-1; z<=1; z++) - colscan[i++] = x+y+z; - i = colscan[13]; colscan[13] = colscan[26]; colscan[26] = i; -} - - -// -// loadpalette (internal) -// -static void loadpalette(void) -{ - int32_t fil; - - if (paletteloaded != 0) return; - if ((fil = kopen4load("palette.dat",0)) == -1) return; - - kread(fil,palette,768); - kread(fil,&numpalookups,2); numpalookups = B_LITTLE16(numpalookups); - - if ((palookup[0] = (char *)Bmalloc(numpalookups<<8)) == NULL) - allocache((intptr_t *)&palookup[0],numpalookups<<8,&permanentlock); - if ((transluc = (char *)Bmalloc(65536L)) == NULL) - allocache((intptr_t *)&transluc,65536,&permanentlock); - - globalpalwritten = palookup[0]; globalpal = 0; - setpalookupaddress(globalpalwritten); - - fixtransluscence(FP_OFF(transluc)); - - kread(fil,palookup[globalpal],numpalookups<<8); - kread(fil,transluc,65536); - kclose(fil); - - initfastcolorlookup(30L,59L,11L); - - { - int32_t i, j, k = 0; - for (i=0; i<256; i++) - { - j = ((int32_t)palette[i*3])+((int32_t)palette[i*3+1])+((int32_t)palette[i*3+2]); - if (j > k) { k = j; whitecol = i; } - } - } - - paletteloaded = 1; -} - - -// -// getclosestcol -// -int32_t getclosestcol(int32_t r, int32_t g, int32_t b) -{ - int32_t i, j, k, dist, mindist, retcol; - char *pal1; - - j = (r>>3)*FASTPALGRIDSIZ*FASTPALGRIDSIZ+(g>>3)*FASTPALGRIDSIZ+(b>>3)+FASTPALGRIDSIZ*FASTPALGRIDSIZ+FASTPALGRIDSIZ+1; - mindist = min(rdist[coldist[r&7]+64+8],gdist[coldist[g&7]+64+8]); - mindist = min(mindist,bdist[coldist[b&7]+64+8]); - mindist++; - - r = 64-r; g = 64-g; b = 64-b; - - retcol = -1; - for (k=26; k>=0; k--) - { - i = colscan[k]+j; if ((colhere[i>>3]&pow2char[i&7]) == 0) continue; - i = colhead[i]; - do - { - pal1 = (char *)&palette[i*3]; - dist = gdist[pal1[1]+g]; - if (dist < mindist) - { - dist += rdist[pal1[0]+r]; - if (dist < mindist) - { - dist += bdist[pal1[2]+b]; - if (dist < mindist) { mindist = dist; retcol = i; } - } - } - i = colnext[i]; - } - while (i >= 0); - } - if (retcol >= 0) return(retcol); - - mindist = 0x7fffffff; - pal1 = (char *)&palette[768-3]; - for (i=255; i>=0; i--,pal1-=3) - { - dist = gdist[pal1[1]+g]; if (dist >= mindist) continue; - dist += rdist[pal1[0]+r]; if (dist >= mindist) continue; - dist += bdist[pal1[2]+b]; if (dist >= mindist) continue; - mindist = dist; retcol = i; - } - return(retcol); -} - - -// -// insertspritesect (internal) -// -int32_t insertspritesect(int16_t sectnum) -{ - int16_t blanktouse; - - if ((sectnum >= MAXSECTORS) || (headspritesect[MAXSECTORS] == -1)) - return(-1); //list full - - blanktouse = headspritesect[MAXSECTORS]; - - headspritesect[MAXSECTORS] = nextspritesect[blanktouse]; - if (headspritesect[MAXSECTORS] >= 0) - prevspritesect[headspritesect[MAXSECTORS]] = -1; - - prevspritesect[blanktouse] = -1; - nextspritesect[blanktouse] = headspritesect[sectnum]; - if (headspritesect[sectnum] >= 0) - prevspritesect[headspritesect[sectnum]] = blanktouse; - headspritesect[sectnum] = blanktouse; - - sprite[blanktouse].sectnum = sectnum; - - return(blanktouse); -} - - -// -// insertspritestat (internal) -// -int32_t insertspritestat(int16_t statnum) -{ - int16_t blanktouse; - - if ((statnum >= MAXSTATUS) || (headspritestat[MAXSTATUS] == -1)) - return(-1); //list full - - blanktouse = headspritestat[MAXSTATUS]; - - headspritestat[MAXSTATUS] = nextspritestat[blanktouse]; - if (headspritestat[MAXSTATUS] >= 0) - prevspritestat[headspritestat[MAXSTATUS]] = -1; - - prevspritestat[blanktouse] = -1; - nextspritestat[blanktouse] = headspritestat[statnum]; - if (headspritestat[statnum] >= 0) - prevspritestat[headspritestat[statnum]] = blanktouse; - headspritestat[statnum] = blanktouse; - - sprite[blanktouse].statnum = statnum; - - return(blanktouse); -} - - -// -// deletespritesect (internal) -// -int32_t deletespritesect(int16_t deleteme) -{ - if (sprite[deleteme].sectnum == MAXSECTORS) - return(-1); - - if (headspritesect[sprite[deleteme].sectnum] == deleteme) - headspritesect[sprite[deleteme].sectnum] = nextspritesect[deleteme]; - - if (prevspritesect[deleteme] >= 0) nextspritesect[prevspritesect[deleteme]] = nextspritesect[deleteme]; - if (nextspritesect[deleteme] >= 0) prevspritesect[nextspritesect[deleteme]] = prevspritesect[deleteme]; - - if (headspritesect[MAXSECTORS] >= 0) prevspritesect[headspritesect[MAXSECTORS]] = deleteme; - prevspritesect[deleteme] = -1; - nextspritesect[deleteme] = headspritesect[MAXSECTORS]; - headspritesect[MAXSECTORS] = deleteme; - - sprite[deleteme].sectnum = MAXSECTORS; - return(0); -} - - -// -// deletespritestat (internal) -// -int32_t deletespritestat(int16_t deleteme) -{ - if (sprite[deleteme].statnum == MAXSTATUS) - return(-1); - - if (headspritestat[sprite[deleteme].statnum] == deleteme) - headspritestat[sprite[deleteme].statnum] = nextspritestat[deleteme]; - - if (prevspritestat[deleteme] >= 0) nextspritestat[prevspritestat[deleteme]] = nextspritestat[deleteme]; - if (nextspritestat[deleteme] >= 0) prevspritestat[nextspritestat[deleteme]] = prevspritestat[deleteme]; - - if (headspritestat[MAXSTATUS] >= 0) prevspritestat[headspritestat[MAXSTATUS]] = deleteme; - prevspritestat[deleteme] = -1; - nextspritestat[deleteme] = headspritestat[MAXSTATUS]; - headspritestat[MAXSTATUS] = deleteme; - - sprite[deleteme].statnum = MAXSTATUS; - return(0); -} - - -// -// lintersect (internal) -// -static inline int32_t lintersect(int32_t x1, int32_t y1, int32_t z1, int32_t x2, int32_t y2, int32_t z2, int32_t x3, - int32_t y3, int32_t x4, int32_t y4, int32_t *intx, int32_t *inty, int32_t *intz) -{ - //p1 to p2 is a line segment - int32_t x21, y21, x34, y34, x31, y31, bot, topt, topu, t; - - x21 = x2-x1; x34 = x3-x4; - y21 = y2-y1; y34 = y3-y4; - bot = x21*y34 - y21*x34; - if (bot >= 0) - { - if (bot == 0) return(0); - x31 = x3-x1; y31 = y3-y1; - topt = x31*y34 - y31*x34; if ((topt < 0) || (topt >= bot)) return(0); - topu = x21*y31 - y21*x31; if ((topu < 0) || (topu >= bot)) return(0); - } - else - { - x31 = x3-x1; y31 = y3-y1; - topt = x31*y34 - y31*x34; if ((topt > 0) || (topt <= bot)) return(0); - topu = x21*y31 - y21*x31; if ((topu > 0) || (topu <= bot)) return(0); - } - t = divscale24(topt,bot); - *intx = x1 + mulscale24(x21,t); - *inty = y1 + mulscale24(y21,t); - *intz = z1 + mulscale24(z2-z1,t); - return(1); -} - - -int32_t lineintersect(int32_t x1, int32_t y1, int32_t z1, int32_t x2, int32_t y2, int32_t z2, int32_t x3, - int32_t y3, int32_t x4, int32_t y4, int32_t *intx, int32_t *inty, int32_t *intz) -{ - return lintersect(x1, y1, z1, x2, y2, z2, x3, y3, x4, y4, intx, inty, intz); -} - -// -// rintersect (internal) -// -static inline int32_t rintersect(int32_t x1, int32_t y1, int32_t z1, int32_t vx, int32_t vy, int32_t vz, int32_t x3, - int32_t y3, int32_t x4, int32_t y4, int32_t *intx, int32_t *inty, int32_t *intz) -{ - //p1 towards p2 is a ray - int32_t x34, y34, x31, y31, bot, topt, topu, t; - - x34 = x3-x4; y34 = y3-y4; - bot = vx*y34 - vy*x34; - if (bot >= 0) - { - if (bot == 0) return(0); - x31 = x3-x1; y31 = y3-y1; - topt = x31*y34 - y31*x34; if (topt < 0) return(0); - topu = vx*y31 - vy*x31; if ((topu < 0) || (topu >= bot)) return(0); - } - else - { - x31 = x3-x1; y31 = y3-y1; - topt = x31*y34 - y31*x34; if (topt > 0) return(0); - topu = vx*y31 - vy*x31; if ((topu > 0) || (topu <= bot)) return(0); - } - t = divscale16(topt,bot); - *intx = x1 + mulscale16(vx,t); - *inty = y1 + mulscale16(vy,t); - *intz = z1 + mulscale16(vz,t); - return(1); -} - -int32_t rayintersect(int32_t x1, int32_t y1, int32_t z1, int32_t vx, int32_t vy, int32_t vz, int32_t x3, - int32_t y3, int32_t x4, int32_t y4, int32_t *intx, int32_t *inty, int32_t *intz) -{ - return rintersect(x1, y1, z1, vx, vy, vz, x3, y3, x4, y4, intx, inty, intz); -} - -// -// keepaway (internal) -// -static inline void keepaway(int32_t *x, int32_t *y, int32_t w) -{ - int32_t dx, dy, ox, oy, x1, y1; - char first; - - x1 = clipit[w].x1; dx = clipit[w].x2-x1; - y1 = clipit[w].y1; dy = clipit[w].y2-y1; - ox = ksgn(-dy); oy = ksgn(dx); - first = (klabs(dx) <= klabs(dy)); - - while (1) - { - if (dx*(*y-y1) > (*x-x1)*dy) return; - if (first == 0) *x += ox; else *y += oy; - first ^= 1; - } -} - - -// -// raytrace (internal) -// -static inline int32_t raytrace(int32_t x3, int32_t y3, int32_t *x4, int32_t *y4) -{ - int32_t x1, y1, x2, y2, bot, topu, nintx, ninty, cnt, z, hitwall; - int32_t x21, y21, x43, y43; - - hitwall = -1; - for (z=clipnum-1; z>=0; z--) - { - x1 = clipit[z].x1; x2 = clipit[z].x2; x21 = x2-x1; - y1 = clipit[z].y1; y2 = clipit[z].y2; y21 = y2-y1; - - topu = x21*(y3-y1) - (x3-x1)*y21; if (topu <= 0) continue; - if (x21*(*y4-y1) > (*x4-x1)*y21) continue; - x43 = *x4-x3; y43 = *y4-y3; - if (x43*(y1-y3) > (x1-x3)*y43) continue; - if (x43*(y2-y3) <= (x2-x3)*y43) continue; - bot = x43*y21 - x21*y43; if (bot == 0) continue; - - cnt = 256; - do - { - cnt--; if (cnt < 0) { *x4 = x3; *y4 = y3; return(z); } - nintx = x3 + scale(x43,topu,bot); - ninty = y3 + scale(y43,topu,bot); - topu--; - } - while (x21*(ninty-y1) <= (nintx-x1)*y21); - - if (klabs(x3-nintx)+klabs(y3-ninty) < klabs(x3-*x4)+klabs(y3-*y4)) - { *x4 = nintx; *y4 = ninty; hitwall = z; } - } - return(hitwall); -} - - - -// -// Exported Engine Functions -// - -#if !defined _WIN32 && defined DEBUGGINGAIDS -#include -static void sighandler(int32_t sig, const siginfo_t *info, void *ctx) -{ - const char *s; - UNREFERENCED_PARAMETER(ctx); - switch (sig) - { - case SIGFPE: - switch (info->si_code) - { - case FPE_INTDIV: - s = "FPE_INTDIV (integer divide by zero)"; break; - case FPE_INTOVF: - s = "FPE_INTOVF (integer overflow)"; break; - case FPE_FLTDIV: - s = "FPE_FLTDIV (floating-point divide by zero)"; break; - case FPE_FLTOVF: - s = "FPE_FLTOVF (floating-point overflow)"; break; - case FPE_FLTUND: - s = "FPE_FLTUND (floating-point underflow)"; break; - case FPE_FLTRES: - s = "FPE_FLTRES (floating-point inexact result)"; break; - case FPE_FLTINV: - s = "FPE_FLTINV (floating-point invalid operation)"; break; - case FPE_FLTSUB: - s = "FPE_FLTSUB (floating-point subscript out of range)"; break; - default: - s = "?! (unknown)"; break; - } - fprintf(stderr, "Caught SIGFPE at address %p, code %s. Aborting.\n", info->si_addr, s); - break; - default: - break; - } - abort(); -} -#endif - -// -// preinitengine -// -static int32_t preinitcalled = 0; - -// #define DYNALLOC_ARRAYS - -#ifndef DYNALLOC_ARRAYS -static spriteext_t spriteext_s[MAXSPRITES+MAXUNIQHUDID]; -static spritesmooth_t spritesmooth_s[MAXSPRITES+MAXUNIQHUDID]; -static sectortype sector_s[MAXSECTORS + M32_FIXME_SECTORS]; -static walltype wall_s[MAXWALLS + M32_FIXME_WALLS]; -static spritetype sprite_s[MAXSPRITES]; -static spritetype tsprite_s[MAXSPRITESONSCREEN]; -#else -void *blockptr = NULL; -#endif - -int32_t preinitengine(void) -{ - char *e; - if (initsystem()) exit(9); - - makeasmwriteable(); - -#ifdef DYNALLOC_ARRAYS - { - size_t i, size = 0; - - // allocate everything at once... why not? entries can just be added to this table - // to allocate future arrays without further intervention - struct - { - void **ptr; - size_t size; - } - dynarray[] = - { - { (void **) §or, sizeof(sectortype) *MAXSECTORS }, - { (void **) &wall, sizeof(walltype) *MAXWALLS }, // +512: editor quirks. FIXME! - { (void **) &sprite, sizeof(spritetype) *MAXSPRITES }, - { (void **) &tsprite, sizeof(spritetype) *MAXSPRITESONSCREEN }, - { (void **) &spriteext, sizeof(spriteext_t) *(MAXSPRITES+MAXUNIQHUDID) }, - { (void **) &spritesmooth, sizeof(spritesmooth_t) *(MAXSPRITES+MAXUNIQHUDID) }, - { (void **) &state_compress, sizeof(qlz_state_compress) }, - { (void **) &state_decompress, sizeof(qlz_state_decompress) } - }; - - if (editstatus) - { - dynarray[0].size += M32_FIXME_SECTORS*sizeof(sectortype); // join sectors needs a temp. sector - dynarray[1].size += M32_FIXME_WALLS*sizeof(walltype); - Bprintf("FIXME: Allocating additional space beyond wall[] for editor bugs.\n"); - } - - for (i=0; i<(signed)(sizeof(dynarray)/sizeof(dynarray[0])); i++) - size += dynarray[i].size; - - if ((blockptr = Bcalloc(1, size)) == NULL) - return 1; - - size = 0; - - for (i=0; i<(signed)(sizeof(dynarray)/sizeof(dynarray[0])); i++) - { - *dynarray[i].ptr = (int8_t *)blockptr + size; - size += dynarray[i].size; - } - } - -#else - sector = sector_s; - wall = wall_s; - sprite = sprite_s; - tsprite = tsprite_s; - spriteext = spriteext_s; - spritesmooth = spritesmooth_s; - state_compress = (qlz_state_compress *) Bmalloc(sizeof(qlz_state_compress) + sizeof(qlz_state_decompress)); - state_decompress = (qlz_state_decompress *)((int8_t *)(state_compress) + sizeof(qlz_state_compress)); -#endif - - if ((e = Bgetenv("BUILD_NOP6")) != NULL) - if (!Bstrcasecmp(e, "TRUE")) - { - Bprintf("Disabling P6 optimizations.\n"); - dommxoverlay = 0; - } - if (dommxoverlay) mmxoverlay(); - - validmodecnt = 0; - getvalidmodes(); - - initcrc32table(); - - clipmapinfo_init(); - - preinitcalled = 1; - return 0; -} - - -// -// initengine -// -int32_t initengine(void) -{ - int32_t i, j; - -#if !defined _WIN32 && defined DEBUGGINGAIDS - struct sigaction sigact, oldact; - memset(&sigact, 0, sizeof(sigact)); - sigact.sa_sigaction = (void *)sighandler; - sigact.sa_flags = SA_SIGINFO; - sigaction(SIGFPE, &sigact, &oldact); -#endif - - if (!preinitcalled) - { - i = preinitengine(); - if (i) return i; - } - - if (loadtables()) return 1; - - xyaspect = -1; - - pskyoff[0] = 0; pskybits = 0; - - parallaxtype = 2; parallaxyoffs = 0L; parallaxyscale = 65536; - showinvisibility = 0; - - for (i=1; i<1024; i++) lowrecip[i] = ((1<<24)-1)/i; - for (i=0; i>2,65536L); - - paletteloaded = 0; - - searchit = 0; searchstat = -1; - - for (i=0; i>5),0L); - clearbuf(&show2dsprite[0],(int32_t)((MAXSPRITES+3)>>5),0L); - clearbuf(&show2dwall[0],(int32_t)((MAXWALLS+3)>>5),0L); - automapping = 0; - - pointhighlight = -1; - linehighlight = -1; - highlightcnt = 0; - - totalclock = 0; - visibility = 512; - parallaxvisibility = 512; - - captureformat = 0; - - loadpalette(); -#ifdef USE_OPENGL - if (!hicfirstinit) hicinit(); - if (!mdinited) mdinit(); -#endif - - return 0; -} - - -// -// uninitengine -// -void uninitengine(void) -{ - int32_t i; - - //OSD_Printf("cacheresets = %d, cacheinvalidates = %d\n", cacheresets, cacheinvalidates); - -#ifdef USE_OPENGL - polymost_glreset(); - hicinit(); - freeallmodels(); -#ifdef POLYMER - polymer_uninit(); -#endif - /* if (cachefilehandle > -1) - Bclose(cachefilehandle); - if (cacheindexptr != NULL) - Bfclose(cacheindexptr); */ -#endif - - if (artfil != -1) kclose(artfil); - - i=(sizeof(artptrs)/sizeof(intptr_t))-1; - - // this leaves a bunch of invalid pointers in waloff... fixme? - for (; i>=0; i--) - { - if (artptrs[i]) - { - Bfree(artptrs[i]); - artptrs[i] = NULL; - } - } - - if (transluc != NULL) { Bfree(transluc); transluc = NULL; } - if (pic != NULL) { Bfree(pic); pic = NULL; } - if (lookups != NULL) - { - if (lookupsalloctype == 0) Bfree((void *)lookups); - //if (lookupsalloctype == 1) suckcache(lookups); //Cache already gone - lookups = NULL; - } - - for (i=0; i>1); - - globaluclip = (0-globalhoriz)*xdimscale; - globaldclip = (ydimen-globalhoriz)*xdimscale; - - i = mulscale16(xdimenscale,viewingrangerecip); - globalpisibility = mulscale16(parallaxvisibility,i); - globalvisibility = mulscale16(visibility,i); - globalhisibility = mulscale16(globalvisibility,xyaspect); - globalcisibility = mulscale8(globalhisibility,320); - - globalcursectnum = dacursectnum; - totalclocklock = totalclock; - - cosglobalang = sintable[(globalang+512)&2047]; - singlobalang = sintable[globalang&2047]; - cosviewingrangeglobalang = mulscale16(cosglobalang,viewingrange); - sinviewingrangeglobalang = mulscale16(singlobalang,viewingrange); - - if ((xyaspect != oxyaspect) || (xdimen != oxdimen) || (viewingrange != oviewingrange)) - dosetaspect(); - - //clearbufbyte(&gotsector[0],(int32_t)((numsectors+7)>>3),0L); - Bmemset(&gotsector[0],0,(int32_t)((numsectors+7)>>3)); - - shortptr1 = (int16_t *)&startumost[windowx1]; - shortptr2 = (int16_t *)&startdmost[windowx1]; - i = xdimen-1; - do - { - umost[i] = shortptr1[i]-windowy1; - dmost[i] = shortptr2[i]-windowy1; - i--; - } - while (i != 0); - umost[0] = shortptr1[0]-windowy1; - dmost[0] = shortptr2[0]-windowy1; - -#ifdef USE_OPENGL -# ifdef POLYMER - if (rendmode == 4) - { - polymer_glinit(); - polymer_drawrooms(daposx, daposy, daposz, daang, dahoriz, dacursectnum); - bglDisable(GL_CULL_FACE); - gloy1 = 0; - return; - } -# endif - - //============================================================================= //POLYMOST BEGINS - polymost_drawrooms(); - if (rendmode) - return; -#endif - //============================================================================= //POLYMOST ENDS - - begindrawing(); //{{{ - - //frameoffset = frameplace + viewoffset; - frameoffset = frameplace + windowy1*bytesperline + windowx1; - - //if (smostwallcnt < 0) - // if (getkensmessagecrc(FP_OFF(kensmessage)) != 0x56c764d4) - // { /* setvmode(0x3);*/ OSD_Printf("Nice try.\n"); exit(0); } - - numhits = xdimen; numscans = 0; numbunches = 0; - maskwallcnt = 0; smostwallcnt = 0; smostcnt = 0; spritesortcnt = 0; - - if (globalcursectnum >= MAXSECTORS) - globalcursectnum -= MAXSECTORS; - else - { - i = globalcursectnum; - updatesector(globalposx,globalposy,&globalcursectnum); - if (globalcursectnum < 0) globalcursectnum = i; - - // PK 20110123: I'm not sure what the line above is supposed to do, but 'i' - // *can* be negative, so let's just quit here in that case... - if (globalcursectnum<0) - { - enddrawing(); - return; - } - } - - globparaceilclip = 1; - globparaflorclip = 1; - getzsofslope(globalcursectnum,globalposx,globalposy,&cz,&fz); - if (globalposz < cz) globparaceilclip = 0; - if (globalposz > fz) globparaflorclip = 0; - - scansector(globalcursectnum); - - if (inpreparemirror) - { - inpreparemirror = 0; - mirrorsx1 = xdimen-1; mirrorsx2 = 0; - for (i=numscans-1; i>=0; i--) - { - if (wall[thewall[i]].nextsector < 0) continue; - if (xb1[i] < mirrorsx1) mirrorsx1 = xb1[i]; - if (xb2[i] > mirrorsx2) mirrorsx2 = xb2[i]; - } - - for (i=0; i 0) && (numhits > 0)) - { - clearbuf(&tempbuf[0],(int32_t)((numbunches+3)>>2),0L); - tempbuf[0] = 1; - - closest = 0; //Almost works, but not quite :( - for (i=1; i=0; z=p2[z]) - show2dwall[thewall[z]>>3] |= pow2char[thewall[z]&7]; - } - - numbunches--; - bunchfirst[closest] = bunchfirst[numbunches]; - bunchlast[closest] = bunchlast[numbunches]; - } - - enddrawing(); //}}} -} - -// UTILITY TYPES AND FUNCTIONS FOR DRAWMASKS OCCLUSION TREE -// typedef struct s_maskleaf -// { -// int32_t index; -// _point2d p1, p2; -// _equation maskeq, p1eq, p2eq; -// struct s_maskleaf* branch[MAXWALLSB]; -// int32_t drawing; -// } _maskleaf; -// -// _maskleaf maskleaves[MAXWALLSB]; - -// returns equation of a line given two points -static inline _equation equation(float x1, float y1, float x2, float y2) -{ - _equation ret; - - if ((x2 - x1) != 0) - { - ret.a = (float)(y2 - y1)/(float)(x2 - x1); - ret.b = -1; - ret.c = (y1 - (ret.a * x1)); - } - else // vertical - { - ret.a = 1; - ret.b = 0; - ret.c = -x1; - } - - return (ret); -} - -int32_t wallvisible(int32_t x, int32_t y, int16_t wallnum) -{ - // 1 if wall is in front of player 0 otherwise - int32_t a1, a2; - walltype *w1, *w2; - - w1 = &wall[wallnum]; - w2 = &wall[w1->point2]; - - a1 = getangle(w1->x - x, w1->y - y); - a2 = getangle(w2->x - x, w2->y - y); - - //if ((wallnum == 23) || (wallnum == 9)) - // OSD_Printf("Wall %d : %d - sector %d - x %d - y %d.\n", wallnum, (a2 + (2048 - a1)) & 2047, globalcursectnum, globalposx, globalposy); - - if (((a2 + (2048 - a1)) & 2047) <= 1024) - return (1); - return (0); -} -/* -// returns the intersection point between two lines -_point2d intersection(_equation eq1, _equation eq2) -{ - _point2d ret; - float det; - - det = (float)(1) / (eq1.a*eq2.b - eq2.a*eq1.b); - ret.x = ((eq1.b*eq2.c - eq2.b*eq1.c) * det); - ret.y = ((eq2.a*eq1.c - eq1.a*eq2.c) * det); - - return (ret); -} - -// check if a point that's on the line is within the segment boundaries -int32_t pointonmask(_point2d point, _maskleaf* wall) -{ - if ((min(wall->p1.x, wall->p2.x) <= point.x) && (point.x <= max(wall->p1.x, wall->p2.x)) && (min(wall->p1.y, wall->p2.y) <= point.y) && (point.y <= max(wall->p1.y, wall->p2.y))) - return (1); - return (0); -} - -// returns 1 if wall2 is hidden by wall1 -int32_t wallobstructswall(_maskleaf* wall1, _maskleaf* wall2) -{ - _point2d cross; - - cross = intersection(wall2->p1eq, wall1->maskeq); - if (pointonmask(cross, wall1)) - return (1); - - cross = intersection(wall2->p2eq, wall1->maskeq); - if (pointonmask(cross, wall1)) - return (1); - - cross = intersection(wall1->p1eq, wall2->maskeq); - if (pointonmask(cross, wall2)) - return (1); - - cross = intersection(wall1->p2eq, wall2->maskeq); - if (pointonmask(cross, wall2)) - return (1); - - return (0); -} - -// recursive mask drawing function -static inline void drawmaskleaf(_maskleaf* wall) -{ - int32_t i; - - wall->drawing = 1; - i = 0; - while (wall->branch[i] != NULL) - { - if (wall->branch[i]->drawing == 0) - { - //OSD_Printf("Drawing parent of %i : mask %i\n", wall->index, wall->branch[i]->index); - drawmaskleaf(wall->branch[i]); - } - i++; - } - - //OSD_Printf("Drawing mask %i\n", wall->index); - drawmaskwall(wall->index); -} -*/ - -static inline int32_t sameside(_equation *eq, _point2d *p1, _point2d *p2) -{ - float sign1, sign2; - - sign1 = eq->a * p1->x + eq->b * p1->y + eq->c; - sign2 = eq->a * p2->x + eq->b * p2->y + eq->c; - - sign1 = sign1 * sign2; - if (sign1 > 0) - { - //OSD_Printf("SAME SIDE !\n"); - return (1); - } - //OSD_Printf("OPPOSITE SIDE !\n"); - return (0); -} - - -// -// drawmasks -// -void drawmasks(void) -{ - int32_t i, j, k, l, gap, xs, ys, xp, yp, yoff, yspan; - // PLAG: sorting stuff - _equation maskeq, p1eq, p2eq; - _point2d dot, dot2, middle, pos, spr; - -#ifdef POLYMER - if ((rendmode == 4) && 0) - { - polymer_drawmasks(); - return; - } -#endif - - for (i=spritesortcnt-1; i>=0; i--) tspriteptr[i] = &tsprite[i]; - for (i=spritesortcnt-1; i>=0; i--) - { - xs = tspriteptr[i]->x-globalposx; ys = tspriteptr[i]->y-globalposy; - yp = dmulscale6(xs,cosviewingrangeglobalang,ys,sinviewingrangeglobalang); - if (yp > (4<<8)) - { - xp = dmulscale6(ys,cosglobalang,-xs,singlobalang); - if (mulscale24(labs(xp+yp),xdimen) >= yp) goto killsprite; - spritesx[i] = scale(xp+yp,xdimen<<7,yp); - } - else if ((tspriteptr[i]->cstat&48) == 0) - { - killsprite: - spritesortcnt--; //Delete face sprite if on wrong side! - if (i == spritesortcnt) continue; - tspriteptr[i] = tspriteptr[spritesortcnt]; - spritesx[i] = spritesx[spritesortcnt]; - spritesy[i] = spritesy[spritesortcnt]; - continue; - } - spritesy[i] = yp; - } - - { - gap = 1; while (gap < spritesortcnt) gap = (gap<<1)+1; - for (gap>>=1; gap>0; gap>>=1) //Sort sprite list - for (i=0; i=0; l-=gap) - { - if (spritesy[l] <= spritesy[l+gap]) break; - swaplong(&tspriteptr[l],&tspriteptr[l+gap]); - swaplong(&spritesx[l],&spritesx[l+gap]); - swaplong(&spritesy[l],&spritesy[l+gap]); - } - - if (spritesortcnt > 0) - spritesy[spritesortcnt] = (spritesy[spritesortcnt-1]^1); - - ys = spritesy[0]; i = 0; - for (j=1; j<=spritesortcnt; j++) - { - if (spritesy[j] == ys) continue; - ys = spritesy[j]; - if (j > i+1) - { - for (k=i; kz; - if ((tspriteptr[k]->cstat&48) != 32) - { - yoff = (int32_t)((int8_t)((picanm[tspriteptr[k]->picnum]>>16)&255))+((int32_t)tspriteptr[k]->yoffset); - spritesz[k] -= ((yoff*tspriteptr[k]->yrepeat)<<2); - yspan = (tilesizy[tspriteptr[k]->picnum]*tspriteptr[k]->yrepeat<<2); - if (!(tspriteptr[k]->cstat&128)) spritesz[k] -= (yspan>>1); - if (klabs(spritesz[k]-globalposz) < (yspan>>1)) spritesz[k] = globalposz; - } - } - for (k=i+1; kstatnum < tspriteptr[l]->statnum) - { - swaplong(&tspriteptr[k],&tspriteptr[l]); - swaplong(&spritesx[k],&spritesx[l]); - swaplong(&spritesy[k],&spritesy[l]); - } - } - i = j; - } - } - - begindrawing(); //{{{ - - /*for(i=spritesortcnt-1;i>=0;i--) - { - xs = tspriteptr[i].x-globalposx; - ys = tspriteptr[i].y-globalposy; - zs = tspriteptr[i].z-globalposz; - - xp = ys*cosglobalang-xs*singlobalang; - yp = (zs<<1); - zp = xs*cosglobalang+ys*singlobalang; - - xs = scale(xp,halfxdimen<<12,zp)+((halfxdimen+windowx1)<<12); - ys = scale(yp,xdimenscale<<12,zp)+((globalhoriz+windowy1)<<12); - - drawline256(xs-65536,ys-65536,xs+65536,ys+65536,31); - drawline256(xs+65536,ys-65536,xs-65536,ys+65536,31); - }*/ - - { -#ifdef USE_OPENGL - curpolygonoffset = 0; - cullcheckcnt = 0; -#endif - pos.x = (float)globalposx; - pos.y = (float)globalposy; - - while (maskwallcnt) - { - maskwallcnt--; -#if defined(USE_OPENGL) && defined(POLYMER) - if (rendmode == 4) - { - dot.x = (float)wall[maskwall[maskwallcnt]].x; - dot.y = (float)wall[maskwall[maskwallcnt]].y; - dot2.x = (float)wall[wall[maskwall[maskwallcnt]].point2].x; - dot2.y = (float)wall[wall[maskwall[maskwallcnt]].point2].y; - } - else -#endif - { - dot.x = (float)wall[thewall[maskwall[maskwallcnt]]].x; - dot.y = (float)wall[thewall[maskwall[maskwallcnt]]].y; - dot2.x = (float)wall[wall[thewall[maskwall[maskwallcnt]]].point2].x; - dot2.y = (float)wall[wall[thewall[maskwall[maskwallcnt]]].point2].y; - } - - maskeq = equation(dot.x, dot.y, dot2.x, dot2.y); - p1eq = equation(pos.x, pos.y, dot.x, dot.y); - p2eq = equation(pos.x, pos.y, dot2.x, dot2.y); - - middle.x = (dot.x + dot2.x) / 2; - middle.y = (dot.y + dot2.y) / 2; - - i = spritesortcnt; - while (i) - { - i--; - if (tspriteptr[i] != NULL) - { - spr.x = (float)tspriteptr[i]->x; - spr.y = (float)tspriteptr[i]->y; - - if ((sameside(&maskeq, &spr, &pos) == 0) && sameside(&p1eq, &middle, &spr) && sameside(&p2eq, &middle, &spr)) - { - drawsprite(i); - tspriteptr[i] = NULL; - } - } - } - drawmaskwall(maskwallcnt); - } - - while (spritesortcnt) - { - spritesortcnt--; - if (tspriteptr[spritesortcnt] != NULL) - drawsprite(spritesortcnt); - } -#ifdef USE_OPENGL - if (totalclock < lastcullcheck - CULL_DELAY) - lastcullcheck = totalclock; - if (totalclock >= lastcullcheck + CULL_DELAY) - lastcullcheck = (totalclock + CULL_DELAY); -#endif - } - - indrawroomsandmasks = 0; - enddrawing(); //}}} -} - -// -// drawmapview -// -void drawmapview(int32_t dax, int32_t day, int32_t zoome, int16_t ang) -{ - walltype *wal; - sectortype *sec; - spritetype *spr; - int32_t tilenum, xoff, yoff, i, j, k, l, cosang, sinang, xspan, yspan; - int32_t xrepeat, yrepeat, x, y, x1, y1, x2, y2, x3, y3, x4, y4, bakx1, baky1; - int32_t s, w, ox, oy, startwall, cx1, cy1, cx2, cy2; - int32_t bakgxvect, bakgyvect, sortnum, gap, npoints; - int32_t xvect, yvect, xvect2, yvect2, daslope; - int32_t oydim=ydim; - - int32_t oyxaspect=yxaspect, oviewingrange=viewingrange; - - ydim = (int32_t)((double)xdim * 0.625f); - setaspect(65536L,(int32_t)divscale16(ydim*320L,xdim*200L)); - ydim = oydim; - - beforedrawrooms = 0; - - clearbuf(&gotsector[0],(int32_t)((numsectors+31)>>5),0L); - - cx1 = (windowx1<<12); cy1 = (windowy1<<12); - cx2 = ((windowx2+1)<<12)-1; cy2 = ((windowy2+1)<<12)-1; - - zoome <<= 8; - - bakgxvect = divscale28(sintable[(1536-ang)&2047],zoome); - bakgyvect = divscale28(sintable[(2048-ang)&2047],zoome); - xvect = mulscale8(sintable[(2048-ang)&2047],zoome); - yvect = mulscale8(sintable[(1536-ang)&2047],zoome); - xvect2 = mulscale16(xvect,yxaspect); - yvect2 = mulscale16(yvect,yxaspect); - - sortnum = 0; - - begindrawing(); //{{{ - - for (s=0,sec=§or[s]; s>3]&pow2char[s&7]) - { - npoints = 0; i = 0; - startwall = sec->wallptr; -#if 0 - for (w=sec->wallnum,wal=&wall[startwall]; w>0; w--,wal++) - { - ox = wal->x - dax; oy = wal->y - day; - x = dmulscale16(ox,xvect,-oy,yvect) + (xdim<<11); - y = dmulscale16(oy,xvect2,ox,yvect2) + (ydim<<11); - i |= getclipmask(x-cx1,cx2-x,y-cy1,cy2-y); - rx1[npoints] = x; - ry1[npoints] = y; - xb1[npoints] = wal->point2 - startwall; - npoints++; - } -#else - j = startwall; l = 0; - for (w=sec->wallnum,wal=&wall[startwall]; w>0; w--,wal++,j++) - { - k = lastwall(j); - if ((k > j) && (npoints > 0)) { xb1[npoints-1] = l; l = npoints; } //overwrite point2 - //wall[k].x wal->x wall[wal->point2].x - //wall[k].y wal->y wall[wal->point2].y - if (!dmulscale1(wal->x-wall[k].x,wall[wal->point2].y-wal->y,-(wal->y-wall[k].y),wall[wal->point2].x-wal->x)) continue; - ox = wal->x - dax; oy = wal->y - day; - x = dmulscale16(ox,xvect,-oy,yvect) + (xdim<<11); - y = dmulscale16(oy,xvect2,ox,yvect2) + (ydim<<11); - i |= getclipmask(x-cx1,cx2-x,y-cy1,cy2-y); - rx1[npoints] = x; - ry1[npoints] = y; - xb1[npoints] = npoints+1; - npoints++; - } - if (npoints > 0) xb1[npoints-1] = l; //overwrite point2 -#endif - if ((i&0xf0) != 0xf0) continue; - bakx1 = rx1[0]; baky1 = mulscale16(ry1[0]-(ydim<<11),xyaspect)+(ydim<<11); - if (i&0x0f) - { - npoints = clippoly(npoints,i); - if (npoints < 3) continue; - } - - //Collect floor sprites to draw - for (i=headspritesect[s]; i>=0; i=nextspritesect[i]) - if ((sprite[i].cstat&48) == 32) - { - if ((sprite[i].cstat&(64+8)) == (64+8)) continue; - tsprite[sortnum++].owner = i; - } - - gotsector[s>>3] |= pow2char[s&7]; - - globalorientation = (int32_t)sec->floorstat; - if ((globalorientation&1) != 0) continue; - - globalpal = sec->floorpal; - - if (palookup[sec->floorpal] != globalpalwritten) - { - globalpalwritten = palookup[sec->floorpal]; - if (!globalpalwritten) globalpalwritten = palookup[0]; // JBF: fixes null-pointer crash - setpalookupaddress(globalpalwritten); - } - globalpicnum = sec->floorpicnum; - if ((unsigned)globalpicnum >= (unsigned)MAXTILES) globalpicnum = 0; - setgotpic(globalpicnum); - if ((tilesizx[globalpicnum] <= 0) || (tilesizy[globalpicnum] <= 0)) continue; - if ((picanm[globalpicnum]&192) != 0) globalpicnum += animateoffs((int16_t)globalpicnum,s); - if (waloff[globalpicnum] == 0) loadtile(globalpicnum); - globalbufplc = waloff[globalpicnum]; - globalshade = max(min(sec->floorshade,numpalookups-1),0); - globvis = globalhisibility; - if (sec->visibility != 0) globvis = mulscale4(globvis,(int32_t)((uint8_t)(sec->visibility+16))); - globalpolytype = 0; - if ((globalorientation&64) == 0) - { - globalposx = dax; globalx1 = bakgxvect; globaly1 = bakgyvect; - globalposy = day; globalx2 = bakgxvect; globaly2 = bakgyvect; - } - else - { - ox = wall[wall[startwall].point2].x - wall[startwall].x; - oy = wall[wall[startwall].point2].y - wall[startwall].y; - i = nsqrtasm(ox*ox+oy*oy); if (i == 0) continue; - i = 1048576/i; - globalx1 = mulscale10(dmulscale10(ox,bakgxvect,oy,bakgyvect),i); - globaly1 = mulscale10(dmulscale10(ox,bakgyvect,-oy,bakgxvect),i); - ox = (bakx1>>4)-(xdim<<7); oy = (baky1>>4)-(ydim<<7); - globalposx = dmulscale28(-oy,globalx1,-ox,globaly1); - globalposy = dmulscale28(-ox,globalx1,oy,globaly1); - globalx2 = -globalx1; - globaly2 = -globaly1; - - daslope = sector[s].floorheinum; - i = nsqrtasm(daslope*daslope+16777216); - globalposy = mulscale12(globalposy,i); - globalx2 = mulscale12(globalx2,i); - globaly2 = mulscale12(globaly2,i); - } - globalxshift = (8-(picsiz[globalpicnum]&15)); - globalyshift = (8-(picsiz[globalpicnum]>>4)); - if (globalorientation&8) {globalxshift++; globalyshift++; } - - sethlinesizes(picsiz[globalpicnum]&15,picsiz[globalpicnum]>>4,globalbufplc); - - if ((globalorientation&0x4) > 0) - { - i = globalposx; globalposx = -globalposy; globalposy = -i; - i = globalx2; globalx2 = globaly1; globaly1 = i; - i = globalx1; globalx1 = -globaly2; globaly2 = -i; - } - if ((globalorientation&0x10) > 0) globalx1 = -globalx1, globaly1 = -globaly1, globalposx = -globalposx; - if ((globalorientation&0x20) > 0) globalx2 = -globalx2, globaly2 = -globaly2, globalposy = -globalposy; - asm1 = (globaly1<floorxpanning)<<24); - globalposy = (globalposy<<(20+globalyshift))-(((int32_t)sec->floorypanning)<<24); - - fillpolygon(npoints); - } - - //Sort sprite list - gap = 1; while (gap < sortnum) gap = (gap<<1)+1; - for (gap>>=1; gap>0; gap>>=1) - for (i=0; i=0; j-=gap) - { - if (sprite[tsprite[j].owner].z <= sprite[tsprite[j+gap].owner].z) break; - swapshort(&tsprite[j].owner,&tsprite[j+gap].owner); - } - - for (s=sortnum-1; s>=0; s--) - { - spr = &sprite[tsprite[s].owner]; - if ((spr->cstat&48) == 32) - { - npoints = 0; - - tilenum = spr->picnum; - xoff = (int32_t)((int8_t)((picanm[tilenum]>>8)&255))+((int32_t)spr->xoffset); - yoff = (int32_t)((int8_t)((picanm[tilenum]>>16)&255))+((int32_t)spr->yoffset); - if ((spr->cstat&4) > 0) xoff = -xoff; - if ((spr->cstat&8) > 0) yoff = -yoff; - - k = spr->ang; - cosang = sintable[(k+512)&2047]; sinang = sintable[k]; - xspan = tilesizx[tilenum]; xrepeat = spr->xrepeat; - yspan = tilesizy[tilenum]; yrepeat = spr->yrepeat; - - ox = ((xspan>>1)+xoff)*xrepeat; oy = ((yspan>>1)+yoff)*yrepeat; - x1 = spr->x + mulscale(sinang,ox,16) + mulscale(cosang,oy,16); - y1 = spr->y + mulscale(sinang,oy,16) - mulscale(cosang,ox,16); - l = xspan*xrepeat; - x2 = x1 - mulscale(sinang,l,16); - y2 = y1 + mulscale(cosang,l,16); - l = yspan*yrepeat; - k = -mulscale(cosang,l,16); x3 = x2+k; x4 = x1+k; - k = -mulscale(sinang,l,16); y3 = y2+k; y4 = y1+k; - - xb1[0] = 1; xb1[1] = 2; xb1[2] = 3; xb1[3] = 0; - npoints = 4; - - i = 0; - - ox = x1 - dax; oy = y1 - day; - x = dmulscale16(ox,xvect,-oy,yvect) + (xdim<<11); - y = dmulscale16(oy,xvect2,ox,yvect2) + (ydim<<11); - i |= getclipmask(x-cx1,cx2-x,y-cy1,cy2-y); - rx1[0] = x; ry1[0] = y; - - ox = x2 - dax; oy = y2 - day; - x = dmulscale16(ox,xvect,-oy,yvect) + (xdim<<11); - y = dmulscale16(oy,xvect2,ox,yvect2) + (ydim<<11); - i |= getclipmask(x-cx1,cx2-x,y-cy1,cy2-y); - rx1[1] = x; ry1[1] = y; - - ox = x3 - dax; oy = y3 - day; - x = dmulscale16(ox,xvect,-oy,yvect) + (xdim<<11); - y = dmulscale16(oy,xvect2,ox,yvect2) + (ydim<<11); - i |= getclipmask(x-cx1,cx2-x,y-cy1,cy2-y); - rx1[2] = x; ry1[2] = y; - - x = rx1[0]+rx1[2]-rx1[1]; - y = ry1[0]+ry1[2]-ry1[1]; - i |= getclipmask(x-cx1,cx2-x,y-cy1,cy2-y); - rx1[3] = x; ry1[3] = y; - - if ((i&0xf0) != 0xf0) continue; - bakx1 = rx1[0]; baky1 = mulscale16(ry1[0]-(ydim<<11),xyaspect)+(ydim<<11); - if (i&0x0f) - { - npoints = clippoly(npoints,i); - if (npoints < 3) continue; - } - - globalpicnum = spr->picnum; - globalpal = spr->pal; // GL needs this, software doesn't - if ((unsigned)globalpicnum >= (unsigned)MAXTILES) globalpicnum = 0; - setgotpic(globalpicnum); - if ((tilesizx[globalpicnum] <= 0) || (tilesizy[globalpicnum] <= 0)) continue; - if ((picanm[globalpicnum]&192) != 0) globalpicnum += animateoffs((int16_t)globalpicnum,s); - if (waloff[globalpicnum] == 0) loadtile(globalpicnum); - globalbufplc = waloff[globalpicnum]; - if ((sector[spr->sectnum].ceilingstat&1) > 0) - globalshade = ((int32_t)sector[spr->sectnum].ceilingshade); - else - globalshade = ((int32_t)sector[spr->sectnum].floorshade); - globalshade = max(min(globalshade+spr->shade+6,numpalookups-1),0); - asm3 = FP_OFF(palookup[spr->pal]+(globalshade<<8)); - globvis = globalhisibility; - if (sec->visibility != 0) globvis = mulscale4(globvis,(int32_t)((uint8_t)(sec->visibility+16))); - globalpolytype = ((spr->cstat&2)>>1)+1; - - //relative alignment stuff - ox = x2-x1; oy = y2-y1; - i = ox*ox+oy*oy; if (i == 0) continue; i = (65536*16384)/i; - globalx1 = mulscale10(dmulscale10(ox,bakgxvect,oy,bakgyvect),i); - globaly1 = mulscale10(dmulscale10(ox,bakgyvect,-oy,bakgxvect),i); - ox = y1-y4; oy = x4-x1; - i = ox*ox+oy*oy; if (i == 0) continue; i = (65536*16384)/i; - globalx2 = mulscale10(dmulscale10(ox,bakgxvect,oy,bakgyvect),i); - globaly2 = mulscale10(dmulscale10(ox,bakgyvect,-oy,bakgxvect),i); - - ox = picsiz[globalpicnum]; oy = ((ox>>4)&15); ox &= 15; - if (pow2long[ox] != xspan) - { - ox++; - globalx1 = mulscale(globalx1,xspan,ox); - globaly1 = mulscale(globaly1,xspan,ox); - } - - bakx1 = (bakx1>>4)-(xdim<<7); baky1 = (baky1>>4)-(ydim<<7); - globalposx = dmulscale28(-baky1,globalx1,-bakx1,globaly1); - globalposy = dmulscale28(bakx1,globalx2,-baky1,globaly2); - - if ((spr->cstat&2) == 0) - msethlineshift(ox,oy); - else - { - if (spr->cstat&512) settransreverse(); else settransnormal(); - tsethlineshift(ox,oy); - } - - if ((spr->cstat&0x4) > 0) globalx1 = -globalx1, globaly1 = -globaly1, globalposx = -globalposx; - asm1 = (globaly1<<2); globalx1 <<= 2; globalposx <<= (20+2); - asm2 = (globalx2<<2); globaly2 <<= 2; globalposy <<= (20+2); - - globalorientation = ((spr->cstat&2)<<7) | ((spr->cstat&512)>>2); // so polymost can get the translucency. ignored in software mode. - fillpolygon(npoints); - } - } - - enddrawing(); //}}} - if (r_usenewaspect) - setaspect(oviewingrange, oyxaspect); - else - setaspect(65536L,(int32_t)divscale16(ydim*320L,xdim*200L)); -} - - -// -// loadboard -// -// flags: 1, 2: former parameter "fromwhere" -// 4: don't call polymer_loadboard -int32_t loadboard(char *filename, char flags, int32_t *daposx, int32_t *daposy, int32_t *daposz, - int16_t *daang, int16_t *dacursectnum) -{ - int16_t fil, i, numsprites, dq[MAXSPRITES], dnum = 0; -#ifdef POLYMER - char myflags = flags&(~3); -#endif - - flags &= 3; - - i = strlen(filename)-1; - if (filename[i] == 255) { filename[i] = 0; flags = 1; } // JBF 20040119: "compatibility" - if ((fil = kopen4load(filename,flags)) == -1) - { mapversion = 7L; return(-1); } - - kread(fil,&mapversion,4); mapversion = B_LITTLE32(mapversion); - if (mapversion != 7L && mapversion != 8L) { kclose(fil); return(-2); } - - /* - // Enable this for doing map checksum tests - clearbufbyte(&wall, sizeof(wall), 0); - clearbufbyte(§or, sizeof(sector), 0); - clearbufbyte(&sprite, sizeof(sprite), 0); - */ - -#ifdef NEDMALLOC - nedtrimthreadcache(0, 0); -#endif - - initspritelists(); - -#define MYMAXSECTORS (mapversion==7l?MAXSECTORSV7:MAXSECTORSV8) -#define MYMAXWALLS (mapversion==7l?MAXWALLSV7:MAXWALLSV8) -#define MYMAXSPRITES (mapversion==7l?MAXSPRITESV7:MAXSPRITESV8) - - clearbuf(&show2dsector[0],(int32_t)((MAXSECTORS+3)>>5),0L); - clearbuf(&show2dsprite[0],(int32_t)((MAXSPRITES+3)>>5),0L); - clearbuf(&show2dwall[0],(int32_t)((MAXWALLS+3)>>5),0L); - - kread(fil,daposx,4); *daposx = B_LITTLE32(*daposx); - kread(fil,daposy,4); *daposy = B_LITTLE32(*daposy); - kread(fil,daposz,4); *daposz = B_LITTLE32(*daposz); - kread(fil,daang,2); *daang = B_LITTLE16(*daang); - kread(fil,dacursectnum,2); *dacursectnum = B_LITTLE16(*dacursectnum); - - kread(fil,&numsectors,2); numsectors = B_LITTLE16(numsectors); - if (numsectors > MYMAXSECTORS) { kclose(fil); return(-1); } - kread(fil,§or[0],sizeof(sectortype)*numsectors); - for (i=numsectors-1; i>=0; i--) - { - sector[i].wallptr = B_LITTLE16(sector[i].wallptr); - sector[i].wallnum = B_LITTLE16(sector[i].wallnum); - sector[i].ceilingz = B_LITTLE32(sector[i].ceilingz); - sector[i].floorz = B_LITTLE32(sector[i].floorz); - sector[i].ceilingstat = B_LITTLE16(sector[i].ceilingstat); - sector[i].floorstat = B_LITTLE16(sector[i].floorstat); - sector[i].ceilingpicnum = B_LITTLE16(sector[i].ceilingpicnum); - sector[i].ceilingheinum = B_LITTLE16(sector[i].ceilingheinum); - sector[i].floorpicnum = B_LITTLE16(sector[i].floorpicnum); - sector[i].floorheinum = B_LITTLE16(sector[i].floorheinum); - sector[i].lotag = B_LITTLE16(sector[i].lotag); - sector[i].hitag = B_LITTLE16(sector[i].hitag); - sector[i].extra = B_LITTLE16(sector[i].extra); - } - - kread(fil,&numwalls,2); numwalls = B_LITTLE16(numwalls); - if (numwalls > MYMAXWALLS) { kclose(fil); return(-1); } - kread(fil,&wall[0],sizeof(walltype)*numwalls); - for (i=numwalls-1; i>=0; i--) - { - wall[i].x = B_LITTLE32(wall[i].x); - wall[i].y = B_LITTLE32(wall[i].y); - wall[i].point2 = B_LITTLE16(wall[i].point2); - wall[i].nextwall = B_LITTLE16(wall[i].nextwall); - wall[i].nextsector = B_LITTLE16(wall[i].nextsector); - wall[i].cstat = B_LITTLE16(wall[i].cstat); - wall[i].picnum = B_LITTLE16(wall[i].picnum); - wall[i].overpicnum = B_LITTLE16(wall[i].overpicnum); - wall[i].lotag = B_LITTLE16(wall[i].lotag); - wall[i].hitag = B_LITTLE16(wall[i].hitag); - wall[i].extra = B_LITTLE16(wall[i].extra); - } - - kread(fil,&numsprites,2); numsprites = B_LITTLE16(numsprites); - if (numsprites > MYMAXSPRITES) { kclose(fil); return(-1); } - kread(fil,&sprite[0],sizeof(spritetype)*numsprites); - for (i=numsprites-1; i>=0; i--) - { - sprite[i].x = B_LITTLE32(sprite[i].x); - sprite[i].y = B_LITTLE32(sprite[i].y); - sprite[i].z = B_LITTLE32(sprite[i].z); - sprite[i].cstat = B_LITTLE16(sprite[i].cstat); - sprite[i].picnum = B_LITTLE16(sprite[i].picnum); - sprite[i].sectnum = B_LITTLE16(sprite[i].sectnum); - sprite[i].statnum = B_LITTLE16(sprite[i].statnum); - sprite[i].ang = B_LITTLE16(sprite[i].ang); - sprite[i].owner = B_LITTLE16(sprite[i].owner); - sprite[i].xvel = B_LITTLE16(sprite[i].xvel); - sprite[i].yvel = B_LITTLE16(sprite[i].yvel); - sprite[i].zvel = B_LITTLE16(sprite[i].zvel); - sprite[i].lotag = B_LITTLE16(sprite[i].lotag); - sprite[i].hitag = B_LITTLE16(sprite[i].hitag); - sprite[i].extra = B_LITTLE16(sprite[i].extra); - - if (sprite[i].sectnum<0||sprite[i].sectnum>=MYMAXSECTORS) - { - initprintf(OSD_ERROR "Map error: sprite #%d(%d,%d) with illegal sector(%d). Map is corrupt!\n",i,sprite[i].x,sprite[i].y,sprite[i].sectnum); - updatesector(sprite[i].x, sprite[i].y, &sprite[i].sectnum); - } - - if (sprite[i].picnum<0||sprite[i].picnum>=MAXTILES) - { - initprintf(OSD_ERROR "Map error: sprite #%d(%d,%d) with illegal picnum(%d). Map is corrupt!\n",i,sprite[i].x,sprite[i].y,sprite[i].picnum); - dq[dnum++] = i; - sprite[i].picnum = 0; - } - } - - for (i=0; i= 0; ii--) - { - for (jj=32; jj >= 0; jj--) - { - updatesector(sprite[k].x+ii-16, sprite[k].y+jj-16, §); - if (sect != -1) break; - } - if (sect != -1) break; - } - - / * fuck it, the sprite is clearly not legitimately in any sector at this point - so let's queue it up for deletion * / - if (sect == -1) - dq[dnum++] = k; - } - */ - } - - /* - while (dnum--) - { - initprintf(OSD_ERROR "Map error: removing sprite #%d(%d,%d) in null space. Map is corrupt!\n",dq[dnum],sprite[dq[dnum]].x,sprite[dq[dnum]].y); - deletesprite(dq[dnum]); - } - */ - - //Must be after loading sectors, etc! - updatesector(*daposx,*daposy,dacursectnum); - - kclose(fil); - - if (!quickloadboard) - { - Bmemset(spriteext, 0, sizeof(spriteext_t) * MAXSPRITES); - -#ifdef USE_OPENGL - Bmemset(spritesmooth, 0, sizeof(spritesmooth_t) *(MAXSPRITES+MAXUNIQHUDID)); - -// polymost_cachesync(); - -# ifdef POLYMER - if (rendmode == 4) - { - if ((myflags&4)==0) - polymer_loadboard(); - } -#endif -#endif - } - guniqhudid = 0; - - startposx = *daposx; - startposy = *daposy; - startposz = *daposz; - startang = *daang; - startsectnum = *dacursectnum; - - return(0); -} - - -// -// loadboardv5/6 -// -#pragma pack(push,1) -struct sectortypev5 -{ - uint16_t wallptr, wallnum; - int16_t ceilingpicnum, floorpicnum; - int16_t ceilingheinum, floorheinum; - int32_t ceilingz, floorz; - int8_t ceilingshade, floorshade; - char ceilingxpanning, floorxpanning; - char ceilingypanning, floorypanning; - char ceilingstat, floorstat; - char ceilingpal, floorpal; - char visibility; - int16_t lotag, hitag; - int16_t extra; -}; -struct walltypev5 -{ - int32_t x, y; - int16_t point2; - int16_t picnum, overpicnum; - int8_t shade; - int16_t cstat; - char xrepeat, yrepeat, xpanning, ypanning; - int16_t nextsector1, nextwall1; - int16_t nextsector2, nextwall2; - int16_t lotag, hitag; - int16_t extra; -}; -struct spritetypev5 -{ - int32_t x, y, z; - char cstat; - int8_t shade; - char xrepeat, yrepeat; - int16_t picnum, ang, xvel, yvel, zvel, owner; - int16_t sectnum, statnum; - int16_t lotag, hitag; - int16_t extra; -}; -struct sectortypev6 -{ - uint16_t wallptr, wallnum; - int16_t ceilingpicnum, floorpicnum; - int16_t ceilingheinum, floorheinum; - int32_t ceilingz, floorz; - int8_t ceilingshade, floorshade; - char ceilingxpanning, floorxpanning; - char ceilingypanning, floorypanning; - char ceilingstat, floorstat; - char ceilingpal, floorpal; - char visibility; - int16_t lotag, hitag, extra; -}; -struct walltypev6 -{ - int32_t x, y; - int16_t point2, nextsector, nextwall; - int16_t picnum, overpicnum; - int8_t shade; - char pal; - int16_t cstat; - char xrepeat, yrepeat, xpanning, ypanning; - int16_t lotag, hitag, extra; -}; -struct spritetypev6 -{ - int32_t x, y, z; - int16_t cstat; - int8_t shade; - char pal, clipdist; - char xrepeat, yrepeat; - int8_t xoffset, yoffset; - int16_t picnum, ang, xvel, yvel, zvel, owner; - int16_t sectnum, statnum; - int16_t lotag, hitag, extra; -}; -#pragma pack(pop) - -static int16_t sectorofwallv5(int16_t theline) -{ - int16_t i, startwall, endwall, sucksect; - - sucksect = -1; - for (i=0; i= startwall) && (theline <= endwall)) - { - sucksect = i; - break; - } - } - return(sucksect); -} - -static void convertv5sectv6(struct sectortypev5 *from, struct sectortypev6 *to) -{ - to->wallptr = from->wallptr; - to->wallnum = from->wallnum; - to->ceilingpicnum = from->ceilingpicnum; - to->floorpicnum = from->floorpicnum; - to->ceilingheinum = from->ceilingheinum; - to->floorheinum = from->floorheinum; - to->ceilingz = from->ceilingz; - to->floorz = from->floorz; - to->ceilingshade = from->ceilingshade; - to->floorshade = from->floorshade; - to->ceilingxpanning = from->ceilingxpanning; - to->floorxpanning = from->floorxpanning; - to->ceilingypanning = from->ceilingypanning; - to->floorypanning = from->floorypanning; - to->ceilingstat = from->ceilingstat; - to->floorstat = from->floorstat; - to->ceilingpal = from->ceilingpal; - to->floorpal = from->floorpal; - to->visibility = from->visibility; - to->lotag = from->lotag; - to->hitag = from->hitag; - to->extra = from->extra; -} - -static void convertv5wallv6(struct walltypev5 *from, struct walltypev6 *to, int32_t i) -{ - to->x = from->x; - to->y = from->y; - to->point2 = from->point2; - to->nextsector = from->nextsector1; - to->nextwall = from->nextwall1; - to->picnum = from->picnum; - to->overpicnum = from->overpicnum; - to->shade = from->shade; - to->pal = sector[sectorofwallv5((int16_t)i)].floorpal; - to->cstat = from->cstat; - to->xrepeat = from->xrepeat; - to->yrepeat = from->yrepeat; - to->xpanning = from->xpanning; - to->ypanning = from->ypanning; - to->lotag = from->lotag; - to->hitag = from->hitag; - to->extra = from->extra; -} - -static void convertv5sprv6(struct spritetypev5 *from, struct spritetypev6 *to) -{ - int16_t j; - to->x = from->x; - to->y = from->y; - to->z = from->z; - to->cstat = from->cstat; - to->shade = from->shade; - - j = from->sectnum; - if ((sector[j].ceilingstat&1) > 0) - to->pal = sector[j].ceilingpal; - else - to->pal = sector[j].floorpal; - - to->clipdist = 32; - to->xrepeat = from->xrepeat; - to->yrepeat = from->yrepeat; - to->xoffset = 0; - to->yoffset = 0; - to->picnum = from->picnum; - to->ang = from->ang; - to->xvel = from->xvel; - to->yvel = from->yvel; - to->zvel = from->zvel; - to->owner = from->owner; - to->sectnum = from->sectnum; - to->statnum = from->statnum; - to->lotag = from->lotag; - to->hitag = from->hitag; - to->extra = from->extra; -} - -static void convertv6sectv7(struct sectortypev6 *from, sectortype *to) -{ - to->ceilingz = from->ceilingz; - to->floorz = from->floorz; - to->wallptr = from->wallptr; - to->wallnum = from->wallnum; - to->ceilingpicnum = from->ceilingpicnum; - to->ceilingheinum = max(min(((int32_t)from->ceilingheinum)<<5,32767),-32768); - if ((from->ceilingstat&2) == 0) to->ceilingheinum = 0; - to->ceilingshade = from->ceilingshade; - to->ceilingpal = from->ceilingpal; - to->ceilingxpanning = from->ceilingxpanning; - to->ceilingypanning = from->ceilingypanning; - to->floorpicnum = from->floorpicnum; - to->floorheinum = max(min(((int32_t)from->floorheinum)<<5,32767),-32768); - if ((from->floorstat&2) == 0) to->floorheinum = 0; - to->floorshade = from->floorshade; - to->floorpal = from->floorpal; - to->floorxpanning = from->floorxpanning; - to->floorypanning = from->floorypanning; - to->ceilingstat = from->ceilingstat; - to->floorstat = from->floorstat; - to->visibility = from->visibility; - to->filler = 0; - to->lotag = from->lotag; - to->hitag = from->hitag; - to->extra = from->extra; -} - -static void convertv6wallv7(struct walltypev6 *from, walltype *to) -{ - to->x = from->x; - to->y = from->y; - to->point2 = from->point2; - to->nextwall = from->nextwall; - to->nextsector = from->nextsector; - to->cstat = from->cstat; - to->picnum = from->picnum; - to->overpicnum = from->overpicnum; - to->shade = from->shade; - to->pal = from->pal; - to->xrepeat = from->xrepeat; - to->yrepeat = from->yrepeat; - to->xpanning = from->xpanning; - to->ypanning = from->ypanning; - to->lotag = from->lotag; - to->hitag = from->hitag; - to->extra = from->extra; -} - -static void convertv6sprv7(struct spritetypev6 *from, spritetype *to) -{ - to->x = from->x; - to->y = from->y; - to->z = from->z; - to->cstat = from->cstat; - to->picnum = from->picnum; - to->shade = from->shade; - to->pal = from->pal; - to->clipdist = from->clipdist; - to->filler = 0; - to->xrepeat = from->xrepeat; - to->yrepeat = from->yrepeat; - to->xoffset = from->xoffset; - to->yoffset = from->yoffset; - to->sectnum = from->sectnum; - to->statnum = from->statnum; - to->ang = from->ang; - to->owner = from->owner; - to->xvel = from->xvel; - to->yvel = from->yvel; - to->zvel = from->zvel; - to->lotag = from->lotag; - to->hitag = from->hitag; - to->extra = from->extra; -} - -// Powerslave uses v6 -// Witchaven 1 and TekWar and LameDuke use v5 -int32_t loadoldboard(char *filename, char fromwhere, int32_t *daposx, int32_t *daposy, int32_t *daposz, - int16_t *daang, int16_t *dacursectnum) -{ - int16_t fil, i, numsprites; - struct sectortypev5 v5sect; - struct walltypev5 v5wall; - struct spritetypev5 v5spr; - struct sectortypev6 v6sect; - struct walltypev6 v6wall; - struct spritetypev6 v6spr; - - i = strlen(filename)-1; - if (filename[i] == 255) { filename[i] = 0; fromwhere = 1; } // JBF 20040119: "compatibility" - if ((fil = kopen4load(filename,fromwhere)) == -1) - { mapversion = 5L; return(-1); } - - kread(fil,&mapversion,4); mapversion = B_LITTLE32(mapversion); - if (mapversion != 5L && mapversion != 6L) { kclose(fil); return(-2); } - - initspritelists(); - - clearbuf(&show2dsector[0],(int32_t)((MAXSECTORS+3)>>5),0L); - clearbuf(&show2dsprite[0],(int32_t)((MAXSPRITES+3)>>5),0L); - clearbuf(&show2dwall[0],(int32_t)((MAXWALLS+3)>>5),0L); - - kread(fil,daposx,4); *daposx = B_LITTLE32(*daposx); - kread(fil,daposy,4); *daposy = B_LITTLE32(*daposy); - kread(fil,daposz,4); *daposz = B_LITTLE32(*daposz); - kread(fil,daang,2); *daang = B_LITTLE16(*daang); - kread(fil,dacursectnum,2); *dacursectnum = B_LITTLE16(*dacursectnum); - - kread(fil,&numsectors,2); numsectors = B_LITTLE16(numsectors); - if (numsectors > MAXSECTORS) { kclose(fil); return(-1); } - for (i=0; i MAXWALLS) { kclose(fil); return(-1); } - for (i=0; i MAXSPRITES) { kclose(fil); return(-1); } - for (i=0; iltextptr; - - if (!filename && legaltokens[i].tokenid != T_LIGHT) continue; - - switch (legaltokens[i].tokenid) - { - case T_SPRITE: // sprite - if (scriptfile_getnumber(script, &whichsprite)) break; - - if ((unsigned)whichsprite >= (unsigned)MAXSPRITES) - { - // sprite number out of range - initprintf("Sprite number out of range 0-%d on line %s:%d\n", - MAXSPRITES-1,script->filename, scriptfile_getlinum(script,cmdtokptr)); - whichsprite = -1; - break; - } - - break; - case T_ANGOFF: // angoff - { - int32_t ang; - if (scriptfile_getnumber(script, &ang)) break; - - if (whichsprite < 0) - { - // no sprite directive preceeding - initprintf("Ignoring angle offset directive because of absent/invalid sprite number on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } - spriteext[whichsprite].angoff = (int16_t)ang; - } - break; - case T_NOMODEL: // notmd - if (whichsprite < 0) - { - // no sprite directive preceeding - initprintf("Ignoring not-MD2/MD3 directive because of absent/invalid sprite number on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } - spriteext[whichsprite].flags |= SPREXT_NOTMD; - break; - case T_NOANIM: // nomdanim - if (whichsprite < 0) - { - // no sprite directive preceeding - initprintf("Ignoring no-MD2/MD3-anim directive because of absent/invalid sprite number on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } - spriteext[whichsprite].flags |= SPREXT_NOMDANIM; - break; - case T_PITCH: // pitch - { - int32_t pitch; - if (scriptfile_getnumber(script, &pitch)) break; - - if (whichsprite < 0) - { - // no sprite directive preceeding - initprintf("Ignoring pitch directive because of absent/invalid sprite number on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } - spriteext[whichsprite].pitch = (int16_t)pitch; - } - break; - case T_ROLL: // roll - { - int32_t roll; - if (scriptfile_getnumber(script, &roll)) break; - - if (whichsprite < 0) - { - // no sprite directive preceeding - initprintf("Ignoring roll directive because of absent/invalid sprite number on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } - spriteext[whichsprite].roll = (int16_t)roll; - } - break; - case T_MDXOFF: // mdxoff - { - int32_t i; - if (scriptfile_getnumber(script, &i)) break; - - if (whichsprite < 0) - { - // no sprite directive preceeding - initprintf("Ignoring mdxoff directive because of absent/invalid sprite number on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } - spriteext[whichsprite].xoff = i; - } - break; - case T_MDYOFF: // mdyoff - { - int32_t i; - if (scriptfile_getnumber(script, &i)) break; - - if (whichsprite < 0) - { - // no sprite directive preceeding - initprintf("Ignoring mdyoff directive because of absent/invalid sprite number on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } - spriteext[whichsprite].yoff = i; - } - break; - case T_MDZOFF: // mdzoff - { - int32_t i; - if (scriptfile_getnumber(script, &i)) break; - - if (whichsprite < 0) - { - // no sprite directive preceeding - initprintf("Ignoring mdzoff directive because of absent/invalid sprite number on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } - spriteext[whichsprite].zoff = i; - } - break; - case T_AWAY1: // away1 - if (whichsprite < 0) - { - // no sprite directive preceeding - initprintf("Ignoring moving away directive because of absent/invalid sprite number on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } - spriteext[whichsprite].flags |= SPREXT_AWAY1; - break; - case T_AWAY2: // away2 - if (whichsprite < 0) - { - // no sprite directive preceeding - initprintf("Ignoring moving away directive because of absent/invalid sprite number on line %s:%d\n", - script->filename, scriptfile_getlinum(script,cmdtokptr)); - break; - } - spriteext[whichsprite].flags |= SPREXT_AWAY2; - break; -#ifdef POLYMER - case T_LIGHT: // light sector x y z range r g b radius faderadius angle horiz minshade maxshade priority tilenum - { - int32_t value; - int16_t lightid; -#pragma pack(push,1) - _prlight light; -#pragma pack(pop) - scriptfile_getnumber(script, &value); - light.sector = value; - scriptfile_getnumber(script, &value); - light.x = value; - scriptfile_getnumber(script, &value); - light.y = value; - scriptfile_getnumber(script, &value); - light.z = value; - scriptfile_getnumber(script, &value); - light.range = value; - scriptfile_getnumber(script, &value); - light.color[0] = value; - scriptfile_getnumber(script, &value); - light.color[1] = value; - scriptfile_getnumber(script, &value); - light.color[2] = value; - scriptfile_getnumber(script, &value); - light.radius = value; - scriptfile_getnumber(script, &value); - light.faderadius = value; - scriptfile_getnumber(script, &value); - light.angle = value; - scriptfile_getnumber(script, &value); - light.horiz = value; - scriptfile_getnumber(script, &value); - light.minshade = value; - scriptfile_getnumber(script, &value); - light.maxshade = value; - scriptfile_getnumber(script, &value); - light.priority = value; - scriptfile_getnumber(script, &value); - light.tilenum = value; - - if (rendmode == 4) - { - lightid = polymer_addlight(&light); - if (lightid>=0) - maphacklight[maphacklightcnt++] = lightid; - } - - break; - } -#endif // POLYMER - - default: - // unrecognised token - break; - } - } - - scriptfile_close(script); - return 0; -#else - UNREFERENCED_PARAMETER(filename); - return -1; -#endif -} - - -// -// saveboard -// -int32_t saveboard(const char *filename, int32_t *daposx, int32_t *daposy, int32_t *daposz, - int16_t *daang, int16_t *dacursectnum) -{ - int16_t fil, i, j, numsprites, ts; - int32_t tl; - sectortype *tsect = NULL; - walltype *twall = NULL; - spritetype *tspri = NULL; - sectortype *sec; - walltype *wal; - spritetype *spri; - - if ((fil = Bopen(filename,BO_BINARY|BO_TRUNC|BO_CREAT|BO_WRONLY,BS_IREAD|BS_IWRITE)) == -1) - { - initprintf("Couldn't open \"%s\" for writing: %s\n", filename, strerror(errno)); - return(-1); - } - - for (j=0; jMAXSTATUS) - { - initprintf("Map error: sprite #%d(%d,%d) with an illegal statnum(%d)\n",j,sprite[j].x,sprite[j].y,sprite[j].statnum); - changespritestat(j,0); - } - - numsprites = 0; -#if 0 - for (j=0; j MAXSECTORSV7 || numwalls > MAXWALLSV7 || numsprites > MAXSPRITESV7) - mapversion = 8; - else - mapversion = 7; - tl = B_LITTLE32(mapversion); Bwrite(fil,&tl,4); - - tl = B_LITTLE32(*daposx); Bwrite(fil,&tl,4); - tl = B_LITTLE32(*daposy); Bwrite(fil,&tl,4); - tl = B_LITTLE32(*daposz); Bwrite(fil,&tl,4); - ts = B_LITTLE16(*daang); Bwrite(fil,&ts,2); - ts = B_LITTLE16(*dacursectnum); Bwrite(fil,&ts,2); - - ts = B_LITTLE16(numsectors); Bwrite(fil,&ts,2); - - while (1) - { - tsect = (sectortype *)Bmalloc(sizeof(sectortype) * numsectors); - - if (tsect == NULL) - break; - - Bmemcpy(&tsect[0], §or[0], sizeof(sectortype) * numsectors); - - for (i=0; iwallptr = B_LITTLE16(sec->wallptr); - sec->wallnum = B_LITTLE16(sec->wallnum); - sec->ceilingz = B_LITTLE32(sec->ceilingz); - sec->floorz = B_LITTLE32(sec->floorz); - sec->ceilingstat = B_LITTLE16(sec->ceilingstat); - sec->floorstat = B_LITTLE16(sec->floorstat); - sec->ceilingpicnum = B_LITTLE16(sec->ceilingpicnum); - sec->ceilingheinum = B_LITTLE16(sec->ceilingheinum); - sec->floorpicnum = B_LITTLE16(sec->floorpicnum); - sec->floorheinum = B_LITTLE16(sec->floorheinum); - sec->lotag = B_LITTLE16(sec->lotag); - sec->hitag = B_LITTLE16(sec->hitag); - sec->extra = B_LITTLE16(sec->extra); - } - - Bwrite(fil,&tsect[0],sizeof(sectortype) * numsectors); - Bfree(tsect); - - ts = B_LITTLE16(numwalls); - Bwrite(fil,&ts,2); - - twall = (walltype *)Bmalloc(sizeof(walltype) * numwalls); - - if (twall == NULL) - break; - - Bmemcpy(&twall[0], &wall[0], sizeof(walltype) * numwalls); - - for (i=0; ix = B_LITTLE32(wal->x); - wal->y = B_LITTLE32(wal->y); - wal->point2 = B_LITTLE16(wal->point2); - wal->nextwall = B_LITTLE16(wal->nextwall); - wal->nextsector = B_LITTLE16(wal->nextsector); - wal->cstat = B_LITTLE16(wal->cstat); - wal->picnum = B_LITTLE16(wal->picnum); - wal->overpicnum = B_LITTLE16(wal->overpicnum); - wal->lotag = B_LITTLE16(wal->lotag); - wal->hitag = B_LITTLE16(wal->hitag); - wal->extra = B_LITTLE16(wal->extra); - } - - Bwrite(fil,&twall[0],sizeof(walltype) * numwalls); - Bfree(twall); - - ts = B_LITTLE16(numsprites); Bwrite(fil,&ts,2); - - tspri = (spritetype *)Bmalloc(sizeof(spritetype) * numsprites); - - if (tspri == NULL) - break; - - - spri=tspri; - - for (j=0; jx = B_LITTLE32(spri->x); - spri->y = B_LITTLE32(spri->y); - spri->z = B_LITTLE32(spri->z); - spri->cstat = B_LITTLE16(spri->cstat); - spri->picnum = B_LITTLE16(spri->picnum); - spri->sectnum = B_LITTLE16(spri->sectnum); - spri->statnum = B_LITTLE16(spri->statnum); - spri->ang = B_LITTLE16(spri->ang); - spri->owner = B_LITTLE16(spri->owner); - spri->xvel = B_LITTLE16(spri->xvel); - spri->yvel = B_LITTLE16(spri->yvel); - spri->zvel = B_LITTLE16(spri->zvel); - spri->lotag = B_LITTLE16(spri->lotag); - spri->hitag = B_LITTLE16(spri->hitag); - spri->extra = B_LITTLE16(spri->extra); - spri++; - } - } - - Bwrite(fil,&tspri[0],sizeof(spritetype) * numsprites); - Bfree(tspri); - - Bclose(fil); - return(0); - } - - Bclose(fil); - - if (tsect != NULL) - Bfree(tsect); - - if (twall != NULL) - Bfree(twall); - - if (tspri != NULL) - Bfree(tspri); - - return(-1); -} - - -// -// setgamemode -// -// JBF: davidoption now functions as a windowed-mode flag (0 == windowed, 1 == fullscreen) -extern char videomodereset; -int32_t setgamemode(char davidoption, int32_t daxdim, int32_t daydim, int32_t dabpp) -{ - int32_t i, j; - -#ifdef USE_OPENGL - extern char nogl; - - if (nogl) dabpp = 8; -#endif - if ((qsetmode == 200) && (videomodereset == 0) && - (davidoption == fullscreen) && (xdim == daxdim) && (ydim == daydim) && (bpp == dabpp) - /* - #ifdef POLYMER - && glrendmode != 4 - #endif // POLYMER - */ - ) - return(0); - - strcpy(kensmessage,"!!!! BUILD engine&tools programmed by Ken Silverman of E.G. RI. (c) Copyright 1995 Ken Silverman. Summary: BUILD = Ken. !!!!"); - // if (getkensmessagecrc(FP_OFF(kensmessage)) != 0x56c764d4) - // { OSD_Printf("Nice try.\n"); exit(0); } - - //if (checkvideomode(&daxdim, &daydim, dabpp, davidoption)<0) return (-1); - - //bytesperline is set in this function - - j = bpp; - - if (setvideomode(daxdim,daydim,dabpp,davidoption) < 0) return(-1); - - // Workaround possible bugs in the GL driver - makeasmwriteable(); - -#ifdef USE_OPENGL - if (dabpp > 8) rendmode = glrendmode; // GL renderer - else if (dabpp == 8 && j > 8) rendmode = 0; // going from GL to software activates softpolymost -#endif - - xdim = daxdim; ydim = daydim; - - j = ydim*4*sizeof(intptr_t); //Leave room for horizlookup&horizlookup2 - - if (lookups != NULL) - { - if (lookupsalloctype == 0) Bfree((void *)lookups); - if (lookupsalloctype == 1) suckcache(lookups); - lookups = NULL; - } - lookupsalloctype = 0; - if ((lookups = (intptr_t *)Bmalloc(j<<1)) == NULL) - { - allocache((intptr_t *)&lookups,j<<1,&permanentlock); - lookupsalloctype = 1; - } - - horizlookup = lookups; - horizlookup2 = (intptr_t *)((intptr_t)lookups+j); // FIXME_SA - horizycent = ((ydim*4)>>1); - - //Force drawrooms to call dosetaspect & recalculate stuff - oxyaspect = oxdimen = oviewingrange = -1; - - setvlinebpl(bytesperline); - j = 0; - for (i=0; i<=ydim; i++) ylookup[i] = j, j += bytesperline; - - setview(0L,0L,xdim-1,ydim-1); - clearallviews(0L); - setbrightness(curbrightness,0,0); - - if (searchx < 0) { searchx = halfxdimen; searchy = (ydimen>>1); } - -#ifdef USE_OPENGL - if (rendmode >= 3) - { - polymost_glreset(); - polymost_glinit(); - } -# ifdef POLYMER - if (rendmode == 4) - { - if (!polymer_init()) - rendmode = 3; - } -#endif -#endif - qsetmode = 200; - return(0); -} - - -// -// nextpage -// -void nextpage(void) -{ - int32_t i; - permfifotype *per; - - //char snotbuf[32]; - //j = 0; k = 0; - //for(i=0;i<4096;i++) - // if (waloff[i] != 0) - // { - // sprintf(snotbuf,"%d-%d",i,tilesizx[i]*tilesizy[i]); - // printext256((j>>5)*40+32,(j&31)*6,walock[i]>>3,-1,snotbuf,1); - // k += tilesizx[i]*tilesizy[i]; - // j++; - // } - //sprintf(snotbuf,"Total: %d",k); - //printext256((j>>5)*40+32,(j&31)*6,31,-1,snotbuf,1); - - switch (qsetmode) - { - case 200: - begindrawing(); //{{{ - for (i=permtail; i!=permhead; i=((i+1)&(MAXPERMS-1))) - { - per = &permfifo[i]; - if ((per->pagesleft > 0) && (per->pagesleft <= numpages)) - dorotatesprite(per->sx,per->sy,per->z,per->a,per->picnum, - per->dashade,per->dapalnum,per->dastat, - per->cx1,per->cy1,per->cx2,per->cy2,per->uniqid); - } - enddrawing(); //}}} - - OSD_Draw(); - showframe(0); - - begindrawing(); //{{{ - for (i=permtail; i!=permhead; i=((i+1)&(MAXPERMS-1))) - { - per = &permfifo[i]; - if (per->pagesleft >= 130) - dorotatesprite(per->sx,per->sy,per->z,per->a,per->picnum, - per->dashade,per->dapalnum,per->dastat, - per->cx1,per->cy1,per->cx2,per->cy2,per->uniqid); - - if (per->pagesleft&127) per->pagesleft--; - if (((per->pagesleft&127) == 0) && (i == permtail)) - permtail = ((permtail+1)&(MAXPERMS-1)); - } - enddrawing(); //}}} - break; - - case 350: - case 480: - break; - } - faketimerhandler(); - - if ((totalclock >= lastageclock+CACHEAGETIME) || (totalclock < lastageclock)) - { lastageclock = totalclock; agecache(); } - -#ifdef USE_OPENGL - omdtims = mdtims; mdtims = getticks(); - - { - int32_t i; - for (i=0; i>5),0L); - - //cachesize = min((int32_t)((Bgetsysmemsize()/100)*60),max(artsize,askedsize)); - if (Bgetsysmemsize() <= (uint32_t)askedsize) - cachesize = (Bgetsysmemsize()/100)*60; - else - cachesize = askedsize; - - while ((pic = Bmalloc(cachesize)) == NULL) - { - cachesize -= 65536L; - if (cachesize < 65536) return(-1); - } - initcache((intptr_t) pic, cachesize); - - for (i=0; i 1) && (pow2long[j] > tilesizx[i])) j--; - picsiz[i] = ((uint8_t)j); - j = 15; - while ((j > 1) && (pow2long[j] > tilesizy[i])) j--; - picsiz[i] += ((uint8_t)(j<<4)); - } - - artfil = -1; - artfilnum = -1; - artfilplc = 0L; - - return(0); -} - - -// -// loadtile -// -void loadtile(int16_t tilenume) -{ - int32_t i, dasiz; - - if ((unsigned)tilenume >= (unsigned)MAXTILES) return; - if ((dasiz = tilesizx[tilenume]*tilesizy[tilenume]) <= 0) return; - -#ifdef WITHKPLIB - if (artptrs[(i = tilefilenum[tilenume])]) // from zip - { - waloff[tilenume] = (intptr_t)(artptrs[i]) + tilefileoffs[tilenume]; - faketimerhandler(); - // OSD_Printf("loaded tile %d from zip\n", tilenume); - return; - } -#endif - - if (i != artfilnum) - { - if (artfil != -1) kclose(artfil); - artfilnum = i; - artfilplc = 0L; - - artfilename[7] = (i%10)+48; - artfilename[6] = ((i/10)%10)+48; - artfilename[5] = ((i/100)%10)+48; - artfil = kopen4load(artfilename,0); - faketimerhandler(); - } - - if (cachedebug) OSD_Printf("Tile:%d\n",tilenume); - - // dummy tiles for highres replacements and tilefromtexture definitions - if (faketilesiz[tilenume]) - { - if (faketilesiz[tilenume] == -1) - { - walock[tilenume] = 255; // permanent tile - allocache(&waloff[tilenume], dasiz, &walock[tilenume]); - Bmemset((char *)waloff[tilenume],0,dasiz); - } - else if (faketiledata[tilenume] != NULL) - { - walock[tilenume] = 255; - allocache(&waloff[tilenume], dasiz, &walock[tilenume]); - qlz_decompress(faketiledata[tilenume], (char *)waloff[tilenume], state_decompress); - Bfree(faketiledata[tilenume]); - faketiledata[tilenume] = NULL; - } - - faketimerhandler(); - return; - } - - if (waloff[tilenume] == 0) - { - walock[tilenume] = 199; - allocache(&waloff[tilenume],dasiz,&walock[tilenume]); - } - - if (artfilplc != tilefileoffs[tilenume]) - { - klseek(artfil,tilefileoffs[tilenume]-artfilplc,BSEEK_CUR); - faketimerhandler(); - } - - kread(artfil, (char *)waloff[tilenume], dasiz); - faketimerhandler(); - artfilplc = tilefileoffs[tilenume]+dasiz; -} - -// -// allocatepermanenttile -// -int32_t allocatepermanenttile(int16_t tilenume, int32_t xsiz, int32_t ysiz) -{ - int32_t j, dasiz; - - if ((xsiz <= 0) || (ysiz <= 0) || ((unsigned)tilenume >= (unsigned)MAXTILES)) - return(0); - - dasiz = xsiz*ysiz; - - walock[tilenume] = 255; - allocache(&waloff[tilenume],dasiz,&walock[tilenume]); - - tilesizx[tilenume] = xsiz; - tilesizy[tilenume] = ysiz; - picanm[tilenume] = 0; - - j = 15; while ((j > 1) && (pow2long[j] > xsiz)) j--; - picsiz[tilenume] = ((uint8_t)j); - j = 15; while ((j > 1) && (pow2long[j] > ysiz)) j--; - picsiz[tilenume] += ((uint8_t)(j<<4)); - - return(waloff[tilenume]); -} - - -// -// copytilepiece -// -void copytilepiece(int32_t tilenume1, int32_t sx1, int32_t sy1, int32_t xsiz, int32_t ysiz, - int32_t tilenume2, int32_t sx2, int32_t sy2) -{ - char *ptr1, *ptr2, dat; - int32_t xsiz1, ysiz1, xsiz2, ysiz2, i, j, x1, y1, x2, y2; - - xsiz1 = tilesizx[tilenume1]; ysiz1 = tilesizy[tilenume1]; - xsiz2 = tilesizx[tilenume2]; ysiz2 = tilesizy[tilenume2]; - if ((xsiz1 > 0) && (ysiz1 > 0) && (xsiz2 > 0) && (ysiz2 > 0)) - { - if (waloff[tilenume1] == 0) loadtile(tilenume1); - if (waloff[tilenume2] == 0) loadtile(tilenume2); - - x1 = sx1; - for (i=0; i= 0) && (y2 >= 0) && (x2 < xsiz2) && (y2 < ysiz2)) - { - ptr1 = (char *)(waloff[tilenume1] + x1*ysiz1 + y1); - ptr2 = (char *)(waloff[tilenume2] + x2*ysiz2 + y2); - dat = *ptr1; - if (dat != 255) - *ptr2 = *ptr1; - } - - y1++; if (y1 >= ysiz1) y1 = 0; - } - x1++; if (x1 >= xsiz1) x1 = 0; - } - } -} - - -// -// qloadkvx -// -int32_t qloadkvx(int32_t voxindex, const char *filename) -{ - int32_t i, fil, dasiz, lengcnt, lengtot; - char *ptr; - - if ((fil = kopen4load(filename,0)) == -1) return -1; - - lengcnt = 0; - lengtot = kfilelength(fil); - - for (i=0; i= lengtot-768) break; - } - kclose(fil); - -#ifdef USE_OPENGL - if (voxmodels[voxindex]) - { - voxfree(voxmodels[voxindex]); - voxmodels[voxindex] = NULL; - } - voxmodels[voxindex] = voxload(filename); -#endif - return 0; -} - - -// -// clipinsidebox -// -int32_t clipinsidebox(int32_t x, int32_t y, int16_t wallnum, int32_t walldist) -{ - walltype *wal; - int32_t x1, y1, x2, y2, r; - - r = (walldist<<1); - wal = &wall[wallnum]; x1 = wal->x+walldist-x; y1 = wal->y+walldist-y; - wal = &wall[wal->point2]; x2 = wal->x+walldist-x; y2 = wal->y+walldist-y; - - if ((x1 < 0) && (x2 < 0)) return(0); - if ((y1 < 0) && (y2 < 0)) return(0); - if ((x1 >= r) && (x2 >= r)) return(0); - if ((y1 >= r) && (y2 >= r)) return(0); - - x2 -= x1; y2 -= y1; - if (x2*(walldist-y1) >= y2*(walldist-x1)) //Front - { - if (x2 > 0) x2 *= (0-y1); else x2 *= (r-y1); - if (y2 > 0) y2 *= (r-x1); else y2 *= (0-x1); - return(x2 < y2); - } - if (x2 > 0) x2 *= (r-y1); else x2 *= (0-y1); - if (y2 > 0) y2 *= (0-x1); else y2 *= (r-x1); - return((x2 >= y2)<<1); -} - - -// -// clipinsideboxline -// -int32_t clipinsideboxline(int32_t x, int32_t y, int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t walldist) -{ - int32_t r; - - r = (walldist<<1); - - x1 += walldist-x; x2 += walldist-x; - if ((x1 < 0) && (x2 < 0)) return(0); - if ((x1 >= r) && (x2 >= r)) return(0); - - y1 += walldist-y; y2 += walldist-y; - if ((y1 < 0) && (y2 < 0)) return(0); - if ((y1 >= r) && (y2 >= r)) return(0); - - x2 -= x1; y2 -= y1; - if (x2*(walldist-y1) >= y2*(walldist-x1)) //Front - { - if (x2 > 0) x2 *= (0-y1); else x2 *= (r-y1); - if (y2 > 0) y2 *= (r-x1); else y2 *= (0-x1); - return(x2 < y2); - } - if (x2 > 0) x2 *= (r-y1); else x2 *= (0-y1); - if (y2 > 0) y2 *= (0-x1); else y2 *= (r-x1); - return((x2 >= y2)<<1); -} - - -// -// inside -// -int32_t inside(int32_t x, int32_t y, int16_t sectnum) -{ - walltype *wal; - int32_t i, x1, y1, x2, y2; - uint32_t cnt; - - if ((sectnum < 0) || (sectnum >= numsectors)) return(-1); - - cnt = 0; - wal = &wall[sector[sectnum].wallptr]; - i = sector[sectnum].wallnum; - do - { - y1 = wal->y-y; y2 = wall[wal->point2].y-y; - if ((y1^y2) < 0) - { - x1 = wal->x-x; x2 = wall[wal->point2].x-x; - if ((x1^x2) >= 0) cnt ^= x1; else cnt ^= (x1*y2-x2*y1)^y2; - } - wal++; i--; - } - while (i); - return(cnt>>31); -} - - -// -// ksqrt -// -int32_t ksqrt(int32_t num) -{ - return(nsqrtasm(num)); -} - - -// -// krecip -// -int32_t krecip(int32_t num) -{ - return(krecipasm(num)); -} - -int32_t spriteheight(int16_t i, int32_t *basez) -{ - int32_t hei, flooraligned=((sprite[i].cstat&48)==32); - - if (flooraligned) - { - if (basez) - *basez = sprite[i].z; - return 0; - } - - hei = (tilesizy[sprite[i].picnum]*sprite[i].yrepeat)<<2; - if (basez) - { - *basez = sprite[i].z; - if (sprite[i].cstat&128) - *basez -= (hei>>1); - } - return hei; -} - -// -// setsprite -// -int32_t setsprite(int16_t spritenum, const vec3_t *new) -{ - int16_t tempsectnum = sprite[spritenum].sectnum; - - if ((void *)new != (void *)&sprite[spritenum]) - Bmemcpy(&sprite[spritenum], new, sizeof(vec3_t)); - - updatesector(new->x,new->y,&tempsectnum); - - if (tempsectnum < 0) - return(-1); - if (tempsectnum != sprite[spritenum].sectnum) - changespritesect(spritenum,tempsectnum); - - return(0); -} - -int32_t setspritez(int16_t spritenum, const vec3_t *new) -{ - int16_t tempsectnum = sprite[spritenum].sectnum; - - if ((void *)new != (void *)&sprite[spritenum]) - Bmemcpy(&sprite[spritenum], new, sizeof(vec3_t)); - - updatesectorz(new->x,new->y,new->z,&tempsectnum); - - if (tempsectnum < 0) - return(-1); - if (tempsectnum != sprite[spritenum].sectnum) - changespritesect(spritenum,tempsectnum); - - return(0); -} - -// -// changespritesect -// -int32_t changespritesect(int16_t spritenum, int16_t newsectnum) -{ - if ((newsectnum < 0) || (newsectnum > MAXSECTORS)) return(-1); - if (sprite[spritenum].sectnum == newsectnum) return(0); - if (sprite[spritenum].sectnum == MAXSECTORS) return(-1); - if (deletespritesect(spritenum) < 0) return(-1); - insertspritesect(newsectnum); - return(0); -} - - -// -// changespritestat -// -int32_t changespritestat(int16_t spritenum, int16_t newstatnum) -{ - if ((newstatnum < 0) || (newstatnum > MAXSTATUS)) return(-1); - if (sprite[spritenum].statnum == newstatnum) return(0); - if (sprite[spritenum].statnum == MAXSTATUS) return(-1); - if (deletespritestat(spritenum) < 0) return(-1); - insertspritestat(newstatnum); - return(0); -} - - -// -// nextsectorneighborz -// -int32_t nextsectorneighborz(int16_t sectnum, int32_t thez, int16_t topbottom, int16_t direction) -{ - walltype *wal; - int32_t i, testz, nextz; - int16_t sectortouse; - - if (direction == 1) nextz = 0x7fffffff; else nextz = 0x80000000; - - sectortouse = -1; - - wal = &wall[sector[sectnum].wallptr]; - i = sector[sectnum].wallnum; - do - { - if (wal->nextsector >= 0) - { - if (topbottom == 1) - { - testz = sector[wal->nextsector].floorz; - if (direction == 1) - { - if ((testz > thez) && (testz < nextz)) - { - nextz = testz; - sectortouse = wal->nextsector; - } - } - else - { - if ((testz < thez) && (testz > nextz)) - { - nextz = testz; - sectortouse = wal->nextsector; - } - } - } - else - { - testz = sector[wal->nextsector].ceilingz; - if (direction == 1) - { - if ((testz > thez) && (testz < nextz)) - { - nextz = testz; - sectortouse = wal->nextsector; - } - } - else - { - if ((testz < thez) && (testz > nextz)) - { - nextz = testz; - sectortouse = wal->nextsector; - } - } - } - } - wal++; - i--; - } - while (i != 0); - - return(sectortouse); -} - - -// -// cansee -// -int32_t cansee(int32_t x1, int32_t y1, int32_t z1, int16_t sect1, int32_t x2, int32_t y2, int32_t z2, int16_t sect2) -{ - sectortype *sec; - walltype *wal, *wal2; - int32_t i, cnt, nexts, x, y, z, cz, fz, dasectnum, dacnt, danum; - int32_t x21, y21, z21, x31, y31, x34, y34, bot, t; - - if ((x1 == x2) && (y1 == y2)) return(sect1 == sect2); - - x21 = x2-x1; y21 = y2-y1; z21 = z2-z1; - - clipsectorlist[0] = sect1; danum = 1; - for (dacnt=0; dacntwallnum,wal=&wall[sec->wallptr]; cnt>0; cnt--,wal++) - { - wal2 = &wall[wal->point2]; - x31 = wal->x-x1; x34 = wal->x-wal2->x; - y31 = wal->y-y1; y34 = wal->y-wal2->y; - - bot = y21*x34-x21*y34; if (bot <= 0) continue; - t = y21*x31-x21*y31; if ((unsigned)t >= (unsigned)bot) continue; - t = y31*x34-x31*y34; if ((unsigned)t >= (unsigned)bot) continue; - - nexts = wal->nextsector; - if ((nexts < 0) || (wal->cstat&32)) return(0); - - t = divscale24(t,bot); - x = x1 + mulscale24(x21,t); - y = y1 + mulscale24(y21,t); - z = z1 + mulscale24(z21,t); - - getzsofslope((int16_t)dasectnum,x,y,&cz,&fz); - if ((z <= cz) || (z >= fz)) return(0); - getzsofslope((int16_t)nexts,x,y,&cz,&fz); - if ((z <= cz) || (z >= fz)) return(0); - - for (i=danum-1; i>=0; i--) if (clipsectorlist[i] == nexts) break; - if (i < 0) clipsectorlist[danum++] = nexts; - } - } - for (i=danum-1; i>=0; i--) if (clipsectorlist[i] == sect2) return(1); - return(0); -} - -// stat, heinum, z: either ceiling- or floor- -// how: -1: behave like ceiling, 1: behave like floor -static int32_t hitscan_trysector(const vec3_t *sv, const sectortype *sec, hitdata_t *hitinfo, - int32_t vx, int32_t vy, int32_t vz, - int16_t stat, int16_t heinum, int32_t z, int32_t how, const intptr_t *tmp) -{ - int32_t x1 = 0x7fffffff, y1, z1; - int32_t dax, day, i, j; - walltype *wal, *wal2; - - if (stat&2) - { - wal = &wall[sec->wallptr]; wal2 = &wall[wal->point2]; - dax = wal2->x-wal->x; day = wal2->y-wal->y; - i = nsqrtasm(dax*dax+day*day); if (i == 0) return 1; //continue; - i = divscale15(heinum,i); - dax *= i; day *= i; - - j = (vz<<8)-dmulscale15(dax,vy,-day,vx); - if (j != 0) - { - i = ((z - sv->z)<<8)+dmulscale15(dax,sv->y-wal->y,-day,sv->x-wal->x); - if (((i^j) >= 0) && ((klabs(i)>>1) < klabs(j))) - { - i = divscale30(i,j); - x1 = sv->x + mulscale30(vx,i); - y1 = sv->y + mulscale30(vy,i); - z1 = sv->z + mulscale30(vz,i); - } - } - } - else if ((how*vz > 0) && (how*sv->z <= how*z)) - { - z1 = z; i = z1-sv->z; - if ((klabs(i)>>1) < vz*how) - { - i = divscale30(i,vz); - x1 = sv->x + mulscale30(vx,i); - y1 = sv->y + mulscale30(vy,i); - } - } - - if ((x1 != 0x7fffffff) && (klabs(x1-sv->x)+klabs(y1-sv->y) < klabs((hitinfo->pos.x)-sv->x)+klabs((hitinfo->pos.y)-sv->y))) - { - if (tmp==NULL) - { - if (inside(x1,y1,sec-sector) != 0) - { - hitinfo->hitsect = sec-sector; hitinfo->hitwall = -1; hitinfo->hitsprite = -1; - hitinfo->pos.x = x1; hitinfo->pos.y = y1; hitinfo->pos.z = z1; - } - } - else - { - int32_t curidx=(int32_t)tmp[0]; - spritetype *curspr=(spritetype *)tmp[1]; - int32_t thislastsec = tmp[2]; - - if (!thislastsec) - { - if (inside(x1,y1,sec-sector) != 0) - { - hitinfo->hitsect = curspr->sectnum; hitinfo->hitwall = -1; hitinfo->hitsprite = curspr-sprite; - hitinfo->pos.x = x1; hitinfo->pos.y = y1; hitinfo->pos.z = z1; - } - } - else - { - for (i=clipinfo[curidx].qbeg; ihitsect = curspr->sectnum; hitinfo->hitwall = -1; hitinfo->hitsprite = curspr-sprite; - hitinfo->pos.x = x1; hitinfo->pos.y = y1; hitinfo->pos.z = z1; - break; - } - } - } - } - } - - return 0; -} - - -// -// hitscan -// -static int32_t clipsprite_initindex(int32_t curidx, spritetype *curspr, int32_t *clipsectcnt, const vec3_t *vect); - -int32_t hitscan(const vec3_t *sv, int16_t sectnum, int32_t vx, int32_t vy, int32_t vz, - hitdata_t *hitinfo, uint32_t cliptype) -{ - sectortype *sec; - walltype *wal, *wal2; - spritetype *spr; - int32_t z, zz, x1, y1=0, z1=0, x2, y2, x3, y3, x4, y4, intx, inty, intz; - int32_t topt, topu, bot, dist, offx, offy, cstat; - int32_t i, k, l, tilenum, xoff, yoff, dax, day, daz, daz2; - int32_t ang, cosang, sinang, xspan, yspan, xrepeat, yrepeat; - int32_t dawalclipmask, dasprclipmask; - int16_t tempshortcnt, tempshortnum, dasector, startwall, endwall; - int16_t nextsector; - char clipyou; - - spritetype *curspr = NULL; - int32_t clipspritecnt, curidx=-1; - // tmp: { (int32_t)curidx, (spritetype *)curspr, (!=0 if outer sector) } - intptr_t tmp[3], *tmpptr=NULL; - - hitinfo->hitsect = -1; hitinfo->hitwall = -1; hitinfo->hitsprite = -1; - if (sectnum < 0) return(-1); - - hitinfo->pos.x = hitscangoalx; hitinfo->pos.y = hitscangoaly; - - dawalclipmask = (cliptype&65535); - dasprclipmask = (cliptype>>16); - - clipsectorlist[0] = sectnum; - tempshortcnt = 0; tempshortnum = 1; - clipspritecnt = clipspritenum = 0; - do - { - if (tempshortcnt >= tempshortnum) - { - // one bunch of sectors completed, prepare the next - if (!curspr) - mapinfo_set(&origmapinfo, &clipmapinfo); // replace sector and wall with clip map - - curspr = &sprite[clipspritelist[clipspritecnt]]; - - if (curidx < 0) // per-sprite init - curidx = pictoidx[curspr->picnum]; - else - curidx = clipinfo[curidx].next; - - while (curidx>=0 && (curspr->cstat&32) != (sector[sectq[clipinfo[curidx].qbeg]].CM_CSTAT&32)) - curidx = clipinfo[curidx].next; - - if (curidx < 0) - { - clipspritecnt++; - continue; - } - - tmp[0] = (intptr_t)curidx; - tmp[1] = (intptr_t)curspr; - tmpptr = tmp; - - clipsprite_initindex(curidx, curspr, &i, sv); // &i is dummy - tempshortnum = (int16_t)clipsectnum; - tempshortcnt = 0; - } - - dasector = clipsectorlist[tempshortcnt]; sec = §or[dasector]; - - i = 1; - if (curspr) - { - if (dasector == sectq[clipinfo[curidx].qend]) - { - i = -1; - tmp[2] = 1; - } - else tmp[2] = 0; - } - - if (hitscan_trysector(sv, sec, hitinfo, vx,vy,vz, sec->ceilingstat, sec->ceilingheinum, sec->ceilingz, -i, tmpptr)) - continue; - if (hitscan_trysector(sv, sec, hitinfo, vx,vy,vz, sec->floorstat, sec->floorheinum, sec->floorz, i, tmpptr)) - continue; - - startwall = sec->wallptr; endwall = startwall + sec->wallnum; - for (z=startwall,wal=&wall[startwall]; znextsector<0) continue; - - wal2 = &wall[wal->point2]; - x1 = wal->x; y1 = wal->y; x2 = wal2->x; y2 = wal2->y; - - if ((x1-sv->x)*(y2-sv->y) < (x2-sv->x)*(y1-sv->y)) continue; - if (rintersect(sv->x,sv->y,sv->z, vx,vy,vz, x1,y1, x2,y2, &intx,&inty,&intz) == 0) continue; - - if (klabs(intx-sv->x)+klabs(inty-sv->y) >= klabs((hitinfo->pos.x)-sv->x)+klabs((hitinfo->pos.y)-sv->y)) - continue; - - nextsector = wal->nextsector; - if (!curspr) - { - if ((nextsector < 0) || (wal->cstat&dawalclipmask)) - { - hitinfo->hitsect = dasector; hitinfo->hitwall = z; hitinfo->hitsprite = -1; - hitinfo->pos.x = intx; hitinfo->pos.y = inty; hitinfo->pos.z = intz; - continue; - } - getzsofslope(nextsector,intx,inty,&daz,&daz2); - if ((intz <= daz) || (intz >= daz2)) - { - hitinfo->hitsect = dasector; hitinfo->hitwall = z; hitinfo->hitsprite = -1; - hitinfo->pos.x = intx; hitinfo->pos.y = inty; hitinfo->pos.z = intz; - continue; - } - } - else - { - int32_t cz,fz; - - if (wal->cstat&dawalclipmask) - { - hitinfo->hitsect = curspr->sectnum; hitinfo->hitwall = -1; hitinfo->hitsprite = curspr-sprite; - hitinfo->pos.x = intx; hitinfo->pos.y = inty; hitinfo->pos.z = intz; - continue; - } - getzsofslope(nextsector,intx,inty,&daz,&daz2); - getzsofslope(sectq[clipinfo[curidx].qend],intx,inty,&cz,&fz); - // ceil cz daz daz2 fz floor - if ((cz <= intz && intz <= daz) || (daz2 <= intz && intz <= fz)) - { - hitinfo->hitsect = curspr->sectnum; hitinfo->hitwall = -1; hitinfo->hitsprite = curspr-sprite; - hitinfo->pos.x = intx; hitinfo->pos.y = inty; hitinfo->pos.z = intz; - continue; - } - } - - for (zz=tempshortnum-1; zz>=0; zz--) - if (clipsectorlist[zz] == nextsector) break; - if (zz < 0) clipsectorlist[tempshortnum++] = nextsector; - } - - if (curspr) - continue; - - for (z=headspritesect[dasector]; z>=0; z=nextspritesect[z]) - { - spr = &sprite[z]; - cstat = spr->cstat; -#ifdef USE_OPENGL - if (!hitallsprites) -#endif - if ((cstat&dasprclipmask) == 0) continue; - - // try and see whether this sprite's picnum has sector-like clipping data - i = pictoidx[spr->picnum]; - // handle sector-like floor sprites separately - while (i>=0 && (spr->cstat&32) != (clipmapinfo.sector[sectq[clipinfo[i].qbeg]].CM_CSTAT&32)) - i = clipinfo[i].next; - if (i>=0 && clipspritenumx; y1 = spr->y; z1 = spr->z; - switch (cstat&48) - { - case 0: - topt = vx*(x1-sv->x) + vy*(y1-sv->y); if (topt <= 0) continue; - bot = vx*vx + vy*vy; if (bot == 0) continue; - - intz = sv->z+scale(vz,topt,bot); - - i = (tilesizy[spr->picnum]*spr->yrepeat<<2); - if (cstat&128) z1 += (i>>1); - if (picanm[spr->picnum]&0x00ff0000) z1 -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2); - if ((intz > z1) || (intz < z1-i)) continue; - topu = vx*(y1-sv->y) - vy*(x1-sv->x); - - offx = scale(vx,topu,bot); - offy = scale(vy,topu,bot); - dist = offx*offx + offy*offy; - i = tilesizx[spr->picnum]*spr->xrepeat; i *= i; - if (dist > (i>>7)) continue; - intx = sv->x + scale(vx,topt,bot); - inty = sv->y + scale(vy,topt,bot); - - if (klabs(intx-sv->x)+klabs(inty-sv->y) > klabs((hitinfo->pos.x)-sv->x)+klabs((hitinfo->pos.y)-sv->y)) continue; - - hitinfo->hitsect = dasector; hitinfo->hitwall = -1; hitinfo->hitsprite = z; - hitinfo->pos.x = intx; hitinfo->pos.y = inty; hitinfo->pos.z = intz; - break; - case 16: - //These lines get the 2 points of the rotated sprite - //Given: (x1, y1) starts out as the center point - tilenum = spr->picnum; - xoff = (int32_t)((int8_t)((picanm[tilenum]>>8)&255))+((int32_t)spr->xoffset); - if ((cstat&4) > 0) xoff = -xoff; - k = spr->ang; l = spr->xrepeat; - dax = sintable[k&2047]*l; day = sintable[(k+1536)&2047]*l; - l = tilesizx[tilenum]; k = (l>>1)+xoff; - x1 -= mulscale16(dax,k); x2 = x1+mulscale16(dax,l); - y1 -= mulscale16(day,k); y2 = y1+mulscale16(day,l); - - if ((cstat&64) != 0) //back side of 1-way sprite - if ((x1-sv->x)*(y2-sv->y) < (x2-sv->x)*(y1-sv->y)) continue; - - if (rintersect(sv->x,sv->y,sv->z,vx,vy,vz,x1,y1,x2,y2,&intx,&inty,&intz) == 0) continue; - - if (klabs(intx-sv->x)+klabs(inty-sv->y) > klabs((hitinfo->pos.x)-sv->x)+klabs((hitinfo->pos.y)-sv->y)) continue; - - k = ((tilesizy[spr->picnum]*spr->yrepeat)<<2); - if (cstat&128) daz = spr->z+(k>>1); else daz = spr->z; - if (picanm[spr->picnum]&0x00ff0000) daz -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2); - if ((intz < daz) && (intz > daz-k)) - { - hitinfo->hitsect = dasector; hitinfo->hitwall = -1; hitinfo->hitsprite = z; - hitinfo->pos.x = intx; hitinfo->pos.y = inty; hitinfo->pos.z = intz; - } - break; - case 32: - if (vz == 0) continue; - intz = z1; - if (((intz-sv->z)^vz) < 0) continue; - if ((cstat&64) != 0) - if ((sv->z > intz) == ((cstat&8)==0)) continue; - -#if 1 // Abyss crash prevention code ((intz-sv->z)*zx overflowing a 8-bit word) - zz=(int32_t)((intz-sv->z)*vx); - intx = sv->x+scale(zz,1,vz); - zz=(int32_t)((intz-sv->z)*vy); - inty = sv->y+scale(zz,1,vz); -#else - intx = sv->x+scale(intz-sv->z,vx,vz); - inty = sv->y+scale(intz-sv->z,vy,vz); -#endif - - if (klabs(intx-sv->x)+klabs(inty-sv->y) > klabs((hitinfo->pos.x)-sv->x)+klabs((hitinfo->pos.y)-sv->y)) continue; - - tilenum = spr->picnum; - xoff = (int32_t)((int8_t)((picanm[tilenum]>>8)&255))+((int32_t)spr->xoffset); - yoff = (int32_t)((int8_t)((picanm[tilenum]>>16)&255))+((int32_t)spr->yoffset); - if ((cstat&4) > 0) xoff = -xoff; - if ((cstat&8) > 0) yoff = -yoff; - - ang = spr->ang; - cosang = sintable[(ang+512)&2047]; sinang = sintable[ang]; - xspan = tilesizx[tilenum]; xrepeat = spr->xrepeat; - yspan = tilesizy[tilenum]; yrepeat = spr->yrepeat; - - dax = ((xspan>>1)+xoff)*xrepeat; day = ((yspan>>1)+yoff)*yrepeat; - x1 += dmulscale16(sinang,dax,cosang,day)-intx; - y1 += dmulscale16(sinang,day,-cosang,dax)-inty; - l = xspan*xrepeat; - x2 = x1 - mulscale16(sinang,l); - y2 = y1 + mulscale16(cosang,l); - l = yspan*yrepeat; - k = -mulscale16(cosang,l); x3 = x2+k; x4 = x1+k; - k = -mulscale16(sinang,l); y3 = y2+k; y4 = y1+k; - - clipyou = 0; - if ((y1^y2) < 0) - { - if ((x1^x2) < 0) clipyou ^= (x1*y2= 0) clipyou ^= 1; - } - if ((y2^y3) < 0) - { - if ((x2^x3) < 0) clipyou ^= (x2*y3= 0) clipyou ^= 1; - } - if ((y3^y4) < 0) - { - if ((x3^x4) < 0) clipyou ^= (x3*y4= 0) clipyou ^= 1; - } - if ((y4^y1) < 0) - { - if ((x4^x1) < 0) clipyou ^= (x4*y1= 0) clipyou ^= 1; - } - - if (clipyou != 0) - { - hitinfo->hitsect = dasector; hitinfo->hitwall = -1; hitinfo->hitsprite = z; - hitinfo->pos.x = intx; hitinfo->pos.y = inty; hitinfo->pos.z = intz; - } - break; - } - } - } - while (++tempshortcnt < tempshortnum || clipspritecnt < clipspritenum); - - if (curspr) - mapinfo_set(NULL, &origmapinfo); - - return(0); -} - - -// -// neartag -// -int32_t neartag(int32_t xs, int32_t ys, int32_t zs, int16_t sectnum, int16_t ange, int16_t *neartagsector, int16_t *neartagwall, - int16_t *neartagsprite, int32_t *neartaghitdist, int32_t neartagrange, uint8_t tagsearch) -{ - walltype *wal, *wal2; - spritetype *spr; - int32_t i, z, zz, xe, ye, ze, x1, y1, z1, x2, y2, intx, inty, intz; - int32_t topt, topu, bot, dist, offx, offy, vx, vy, vz; - int16_t tempshortcnt, tempshortnum, dasector, startwall, endwall; - int16_t nextsector, good; - - *neartagsector = -1; *neartagwall = -1; *neartagsprite = -1; - *neartaghitdist = 0; - - if (sectnum < 0 || (tagsearch & 3) == 0) return(0); - - vx = mulscale14(sintable[(ange+2560)&2047],neartagrange); xe = xs+vx; - vy = mulscale14(sintable[(ange+2048)&2047],neartagrange); ye = ys+vy; - vz = 0; ze = 0; - - clipsectorlist[0] = sectnum; - tempshortcnt = 0; tempshortnum = 1; - - do - { - dasector = clipsectorlist[tempshortcnt]; - - startwall = sector[dasector].wallptr; - endwall = startwall + sector[dasector].wallnum - 1; - for (z=startwall,wal=&wall[startwall]; z<=endwall; z++,wal++) - { - wal2 = &wall[wal->point2]; - x1 = wal->x; y1 = wal->y; x2 = wal2->x; y2 = wal2->y; - - nextsector = wal->nextsector; - - good = 0; - if (nextsector >= 0) - { - if ((tagsearch&1) && sector[nextsector].lotag) good |= 1; - if ((tagsearch&2) && sector[nextsector].hitag) good |= 1; - } - if ((tagsearch&1) && wal->lotag) good |= 2; - if ((tagsearch&2) && wal->hitag) good |= 2; - - if ((good == 0) && (nextsector < 0)) continue; - if ((x1-xs)*(y2-ys) < (x2-xs)*(y1-ys)) continue; - - if (lintersect(xs,ys,zs,xe,ye,ze,x1,y1,x2,y2,&intx,&inty,&intz) == 1) - { - if (good != 0) - { - if (good&1) *neartagsector = nextsector; - if (good&2) *neartagwall = z; - *neartaghitdist = dmulscale14(intx-xs,sintable[(ange+2560)&2047],inty-ys,sintable[(ange+2048)&2047]); - xe = intx; ye = inty; ze = intz; - } - if (nextsector >= 0) - { - for (zz=tempshortnum-1; zz>=0; zz--) - if (clipsectorlist[zz] == nextsector) break; - if (zz < 0) clipsectorlist[tempshortnum++] = nextsector; - } - } - } - - tempshortcnt++; - - if (tagsearch & 4) continue; // skip sprite search - - for (z=headspritesect[dasector]; z>=0; z=nextspritesect[z]) - { - spr = &sprite[z]; - - good = 0; - if ((tagsearch&1) && spr->lotag) good |= 1; - if ((tagsearch&2) && spr->hitag) good |= 1; - if (good != 0) - { - x1 = spr->x; y1 = spr->y; z1 = spr->z; - - topt = vx*(x1-xs) + vy*(y1-ys); - if (topt > 0) - { - bot = vx*vx + vy*vy; - if (bot != 0) - { - intz = zs+scale(vz,topt,bot); - i = tilesizy[spr->picnum]*spr->yrepeat; - if (spr->cstat&128) z1 += (i<<1); - if (picanm[spr->picnum]&0x00ff0000) z1 -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2); - if ((intz <= z1) && (intz >= z1-(i<<2))) - { - topu = vx*(y1-ys) - vy*(x1-xs); - - offx = scale(vx,topu,bot); - offy = scale(vy,topu,bot); - dist = offx*offx + offy*offy; - i = (tilesizx[spr->picnum]*spr->xrepeat); i *= i; - if (dist <= (i>>7)) - { - intx = xs + scale(vx,topt,bot); - inty = ys + scale(vy,topt,bot); - if (klabs(intx-xs)+klabs(inty-ys) < klabs(xe-xs)+klabs(ye-ys)) - { - *neartagsprite = z; - *neartaghitdist = dmulscale14(intx-xs,sintable[(ange+2560)&2047],inty-ys,sintable[(ange+2048)&2047]); - xe = intx; - ye = inty; - ze = intz; - } - } - } - } - } - } - } - } - while (tempshortcnt < tempshortnum); - return(0); -} - - -// -// dragpoint -// -void dragpoint(int16_t pointhighlight, int32_t dax, int32_t day) -{ - int16_t cnt, tempshort; - int32_t thelastwall; - - wall[pointhighlight].x = dax; - wall[pointhighlight].y = day; - wall[pointhighlight].cstat |= (1<<14); - if (linehighlight >= 0 && linehighlight < MAXWALLS) - wall[linehighlight].cstat |= (1<<14); - wall[lastwall(pointhighlight)].cstat |= (1<<14); - - cnt = MAXWALLS; - tempshort = pointhighlight; //search points CCW - do - { - if (wall[tempshort].nextwall >= 0) - { - tempshort = wall[wall[tempshort].nextwall].point2; - wall[tempshort].x = dax; - wall[tempshort].y = day; - wall[tempshort].cstat |= (1<<14); - } - else - { - tempshort = pointhighlight; //search points CW if not searched all the way around - do - { - thelastwall = lastwall(tempshort); - if (wall[thelastwall].nextwall >= 0) - { - tempshort = wall[thelastwall].nextwall; - wall[tempshort].x = dax; - wall[tempshort].y = day; - wall[tempshort].cstat |= (1<<14); - } - else - { - break; - } - cnt--; - } - while ((tempshort != pointhighlight) && (cnt > 0)); - break; - } - cnt--; - } - while ((tempshort != pointhighlight) && (cnt > 0)); -} - - -// -// lastwall -// -int32_t lastwall(int16_t point) -{ - int32_t i, j, cnt; - - if ((point > 0) && (wall[point-1].point2 == point)) return(point-1); - i = point; - cnt = MAXWALLS; - do - { - j = wall[i].point2; - if (j == point) return(i); - i = j; - cnt--; - } - while (cnt > 0); - return(point); -} - - -////////// CLIPMOVE ////////// - -int32_t clipmoveboxtracenum = 3; - -static int32_t clipsprite_try(const spritetype *spr, int32_t xmin, int32_t ymin, int32_t xmax, int32_t ymax) -{ - int32_t i,k,tempint1,tempint2; - - // try and see whether this sprite's picnum has sector-like clipping data - i = pictoidx[spr->picnum]; - // handle sector-like floor sprites separately - while (i>=0 && (spr->cstat&32) != (clipmapinfo.sector[sectq[clipinfo[i].qbeg]].CM_CSTAT&32)) - i = clipinfo[i].next; - - if (i>=0) - { - int32_t maxcorrection = clipinfo[i].maxdist; - - k = sectq[clipinfo[i].qbeg]; - if ((spr->cstat&48)!=32) // face/wall sprite - { - tempint1 = clipmapinfo.sector[k].CM_XREPEAT; - maxcorrection = (maxcorrection * (int32_t)spr->xrepeat)/tempint1; - } - else // floor sprite - { - tempint1 = clipmapinfo.sector[k].CM_XREPEAT; - tempint2 = clipmapinfo.sector[k].CM_YREPEAT; - maxcorrection = max((maxcorrection * (int32_t)spr->xrepeat)/tempint1, - (maxcorrection * (int32_t)spr->yrepeat)/tempint2); - } - - maxcorrection -= MAXCLIPDIST; - - if (spr->x < xmin - maxcorrection) return 1; - if (spr->y < ymin - maxcorrection) return 1; - if (spr->x > xmax + maxcorrection) return 1; - if (spr->y > ymax + maxcorrection) return 1; - - if (clipspritenum < MAXCLIPNUM) - clipspritelist[clipspritenum++] = spr-sprite; -//initprintf("%d: clip sprite[%d]\n",clipspritenum,j); - return 1; - } - - return 0; -} - -// return: -1 if curspr has x-flip xor y-flip (in the horizontal map plane!), 1 else -static int32_t clipsprite_initindex(int32_t curidx, spritetype *curspr, int32_t *clipsectcnt, const vec3_t *vect) -{ - int32_t j,k,w,tempint1,tempint2,daz = curspr->z; - int32_t scalex,scaley,scalez,flipx,flipy,rotang, dorot; - int32_t startwall, endwall, flipmul=1; - sectortype *sec; - walltype *wal; - - j = sectq[clipinfo[curidx].qbeg]; - tempint1 = sector[j].CM_XREPEAT; - tempint2 = sector[j].CM_YREPEAT; - if ((curspr->cstat&48)!=32) // face/wall sprite - { - scalex = scaley = divscale22(curspr->xrepeat, tempint1); - scalez = divscale22(curspr->yrepeat, tempint2); - - flipx = 1-((curspr->cstat&4)>>1); - flipy = 1; - } - else - { - scalex = divscale22(curspr->xrepeat, tempint1); - scaley = divscale22(curspr->yrepeat, tempint2); - scalez = scalex; - - flipx = 1-((curspr->cstat&4)>>1); - flipy = 1-((curspr->cstat&8)>>2); - } - rotang = (curspr->ang - sector[j].CM_ANG)&2047; - dorot = !CM_NOROTS(j); - if (dorot) - { - flipmul = flipx*flipy; - if (flipmul==-1) - wall = loadwallinv; - } - - if ((curspr->cstat&128) != (sector[j].CM_CSTAT&128)) - daz += (((curspr->cstat&128)>>6)-1)*(((int32_t)tilesizy[curspr->picnum]*(int32_t)curspr->yrepeat)<<1); - - *clipsectcnt = clipsectnum = 0; - // init sectors for this index - for (k=clipinfo[curidx].qbeg; k<=clipinfo[curidx].qend; k++) - { - j = sectq[k]; - sec = §or[j]; - - sec->floorz = daz + mulscale22(scalez, CM_FLOORZ(j)); - sec->ceilingz = daz + mulscale22(scalez, CM_CEILINGZ(j)); -//initprintf("sec %d: f=%d, c=%d\n", j, sec->floorz, sec->ceilingz); - - startwall=sec->wallptr; endwall=startwall+sec->wallnum; - for (w=startwall,wal=&wall[startwall]; wx = mulscale22(scalex, CM_WALL_X(w)); - wal->y = mulscale22(scaley, CM_WALL_Y(w)); - - if (dorot) - { - wal->x *= flipx; - wal->y *= flipy; - rotatepoint(0,0, wal->x,wal->y, rotang, &wal->x,&wal->y); - } - - wal->x += curspr->x; - wal->y += curspr->y; - } - - if (inside(vect->x, vect->y, j)==1) - clipsectorlist[clipsectnum++] = j; - } - - if (clipsectnum==0) - clipsectorlist[clipsectnum++] = sectq[k-1]; - - return flipmul; -} - - -static int32_t clipmove_warned=0; - -static void addclipline(int32_t dax1, int32_t day1, int32_t dax2, int32_t day2, int32_t daoval) -{ - if (clipnum < MAXCLIPNUM) - { - clipit[clipnum].x1 = dax1; clipit[clipnum].y1 = day1; - clipit[clipnum].x2 = dax2; clipit[clipnum].y2 = day2; - clipobjectval[clipnum] = daoval; - clipnum++; - } - else if (!clipmove_warned) - { - initprintf("!!clipnum\n"); - clipmove_warned = 1; - } -} - -// -// clipmove -// -int32_t clipmove(vec3_t *pos, int16_t *sectnum, - int32_t xvect, int32_t yvect, - int32_t walldist, int32_t ceildist, int32_t flordist, uint32_t cliptype) -{ - walltype *wal, *wal2; - spritetype *spr; - sectortype *sec, *sec2; - int32_t i, j, tempint1, tempint2; - int32_t oxvect, oyvect, goalx, goaly, intx, inty, lx, ly, retval; - int32_t k, l, clipsectcnt, startwall, endwall, cstat, dasect; - int32_t x1, y1, x2, y2, cx, cy, rad, xmin, ymin, xmax, ymax, daz, daz2; - int32_t bsz, dax, day, xoff, yoff, xspan, yspan, cosang, sinang, tilenum; - int32_t xrepeat, yrepeat, gx, gy, dx, dy, dasprclipmask, dawalclipmask; - int32_t hitwall, cnt, clipyou; - - spritetype *curspr=NULL; // non-NULL when handling sprite with sector-like clipping - int32_t curidx=-1, clipspritecnt; - - if (((xvect|yvect) == 0) || (*sectnum < 0)) return(0); - retval = 0; - - clipmove_warned = 0; - - oxvect = xvect; - oyvect = yvect; - - goalx = pos->x + (xvect>>14); - goaly = pos->y + (yvect>>14); - - - clipnum = 0; - - cx = (pos->x+goalx)>>1; - cy = (pos->y+goaly)>>1; - //Extra walldist for sprites on sector lines - gx = goalx-(pos->x); gy = goaly-(pos->y); - rad = nsqrtasm(gx*gx + gy*gy) + MAXCLIPDIST+walldist + 8; - xmin = cx-rad; ymin = cy-rad; - xmax = cx+rad; ymax = cy+rad; - - dawalclipmask = (cliptype&65535); //CLIPMASK0 = 0x00010001 - dasprclipmask = (cliptype>>16); //CLIPMASK1 = 0x01000040 - - clipsectorlist[0] = (*sectnum); - clipsectcnt = 0; clipsectnum = 1; - clipspritecnt = 0; clipspritenum = 0; - do - { - if (clipsectcnt>=clipsectnum) - { - // one bunch of sectors completed (either the very first - // one or a sector-like sprite one), prepare the next - -//initprintf("init sprite %d\n", clipspritecnt); - if (!curspr) - { - // init sector-like sprites for clipping - origclipsectnum = clipsectnum; - Bmemcpy(origclipsectorlist, clipsectorlist, clipsectnum*sizeof(clipsectorlist[0])); - - // replace sector and wall with clip map - mapinfo_set(&origmapinfo, &clipmapinfo); - } - - curspr = &sprite[clipspritelist[clipspritecnt]]; - - if (curidx < 0) // per-sprite init - curidx = pictoidx[curspr->picnum]; - else - curidx = clipinfo[curidx].next; - - while (curidx>=0 && (curspr->cstat&32) != (sector[sectq[clipinfo[curidx].qbeg]].CM_CSTAT&32)) - curidx = clipinfo[curidx].next; - - if (curidx < 0) - { - clipspritecnt++; - continue; - } - - clipsprite_initindex(curidx, curspr, &clipsectcnt, pos); - } - - - dasect = clipsectorlist[clipsectcnt++]; -//if (curspr) -// initprintf("sprite %d/%d: sect %d/%d (%d)\n", clipspritecnt,clipspritenum, clipsectcnt,clipsectnum,dasect); - - sec = §or[dasect]; - startwall = sec->wallptr; endwall = startwall + sec->wallnum; - for (j=startwall,wal=&wall[startwall]; jpoint2]; - if ((wal->x < xmin) && (wal2->x < xmin)) continue; - if ((wal->x > xmax) && (wal2->x > xmax)) continue; - if ((wal->y < ymin) && (wal2->y < ymin)) continue; - if ((wal->y > ymax) && (wal2->y > ymax)) continue; - - x1 = wal->x; y1 = wal->y; x2 = wal2->x; y2 = wal2->y; - - dx = x2-x1; dy = y2-y1; - if (dx*((pos->y)-y1) < ((pos->x)-x1)*dy) continue; //If wall's not facing you - - if (dx > 0) dax = dx*(ymin-y1); else dax = dx*(ymax-y1); - if (dy > 0) day = dy*(xmax-x1); else day = dy*(xmin-x1); - if (dax >= day) continue; - - clipyou = 0; - if (curspr) - { - if (wal->nextsector>=0) - { - int32_t basez; - - if (rintersect(pos->x,pos->y,0, gx,gy,0, x1,y1, x2,y2, &dax,&day,&daz) == 0) - dax = pos->x, day = pos->y; - daz = getflorzofslope(dasect, dax,day); - daz2 = getflorzofslope(wal->nextsector, dax,day); - basez = getflorzofslope(sectq[clipinfo[curidx].qend], dax,day); - - sec2 = §or[wal->nextsector]; - if ((sec2->floorstat&1) == 0) -// if (dasect==sectq[clipinfo[curidx].qend] || daz2 < daz-(1<<8)) - if (daz2-(flordist-1) <= pos->z && pos->z <= basez+(flordist-1)) - clipyou = 1; - if (clipyou == 0) - { - daz = getceilzofslope(dasect, dax,day); - daz2 = getceilzofslope(wal->nextsector, dax,day); - basez = getceilzofslope(sectq[clipinfo[curidx].qend], dax,day); - if ((sec2->ceilingstat&1) == 0) -// if (dasect==sectq[clipinfo[curidx].qend] || daz2 > daz+(1<<8)) - if (basez-(ceildist-1) <= pos->z && pos->z <= daz2+(ceildist-1)) - clipyou = 1; - } - } - } - else if ((wal->nextsector < 0) || (wal->cstat&dawalclipmask)) clipyou = 1; - else if (editstatus == 0) - { - if (rintersect(pos->x,pos->y,0,gx,gy,0,x1,y1,x2,y2,&dax,&day,&daz) == 0) - dax = pos->x, day = pos->y; - daz = getflorzofslope(dasect, dax,day); - daz2 = getflorzofslope(wal->nextsector, dax,day); - - sec2 = §or[wal->nextsector]; - if (daz2 < daz-(1<<8)) - if ((sec2->floorstat&1) == 0) - if ((pos->z) >= daz2-(flordist-1)) clipyou = 1; - if (clipyou == 0) - { - daz = getceilzofslope(dasect, dax,day); - daz2 = getceilzofslope(wal->nextsector, dax,day); - if (daz2 > daz+(1<<8)) - if ((sec2->ceilingstat&1) == 0) - if ((pos->z) <= daz2+(ceildist-1)) clipyou = 1; - } - } - - if (clipyou) - { - int16_t objtype; - if (!curspr) - objtype = (int16_t)j+32768; - else - objtype = (int16_t)(curspr-sprite)+49152; - - //Add 2 boxes at endpoints - bsz = walldist; if (gx < 0) bsz = -bsz; - addclipline(x1-bsz,y1-bsz, x1-bsz,y1+bsz, objtype); - addclipline(x2-bsz,y2-bsz, x2-bsz,y2+bsz, objtype); - bsz = walldist; if (gy < 0) bsz = -bsz; - addclipline(x1+bsz,y1-bsz, x1-bsz,y1-bsz, objtype); - addclipline(x2+bsz,y2-bsz, x2-bsz,y2-bsz, objtype); - - dax = walldist; if (dy > 0) dax = -dax; - day = walldist; if (dx < 0) day = -day; - addclipline(x1+dax,y1+day, x2+dax,y2+day, objtype); - } - else if (wal->nextsector>=0) - { - for (i=clipsectnum-1; i>=0; i--) - if (wal->nextsector == clipsectorlist[i]) break; - if (i < 0) clipsectorlist[clipsectnum++] = wal->nextsector; - } - } - - if (curspr) - continue; // next sector of this index - - for (j=headspritesect[dasect]; j>=0; j=nextspritesect[j]) - { - spr = &sprite[j]; - cstat = spr->cstat; - if ((cstat&dasprclipmask) == 0) continue; - - if (clipsprite_try(spr, xmin,ymin, xmax,ymax)) - continue; - - x1 = spr->x; y1 = spr->y; - - switch (cstat&48) - { - case 0: - if ((x1 >= xmin) && (x1 <= xmax) && (y1 >= ymin) && (y1 <= ymax)) - { - k = ((tilesizy[spr->picnum]*spr->yrepeat)<<2); - if (cstat&128) daz = spr->z+(k>>1); else daz = spr->z; - if (picanm[spr->picnum]&0x00ff0000) daz -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2); - if (((pos->z) < daz+ceildist) && ((pos->z) > daz-k-flordist)) - { - bsz = (spr->clipdist<<2)+walldist; if (gx < 0) bsz = -bsz; - addclipline(x1-bsz,y1-bsz,x1-bsz,y1+bsz,(int16_t)j+49152); - bsz = (spr->clipdist<<2)+walldist; if (gy < 0) bsz = -bsz; - addclipline(x1+bsz,y1-bsz,x1-bsz,y1-bsz,(int16_t)j+49152); - } - } - break; - case 16: - k = ((tilesizy[spr->picnum]*spr->yrepeat)<<2); - if (cstat&128) daz = spr->z+(k>>1); else daz = spr->z; - if (picanm[spr->picnum]&0x00ff0000) daz -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2); - daz2 = daz-k; - daz += ceildist; daz2 -= flordist; - if (((pos->z) < daz) && ((pos->z) > daz2)) - { - //These lines get the 2 points of the rotated sprite - //Given: (x1, y1) starts out as the center point - tilenum = spr->picnum; - xoff = (int32_t)((int8_t)((picanm[tilenum]>>8)&255))+((int32_t)spr->xoffset); - if ((cstat&4) > 0) xoff = -xoff; - k = spr->ang; l = spr->xrepeat; - dax = sintable[k&2047]*l; day = sintable[(k+1536)&2047]*l; - l = tilesizx[tilenum]; k = (l>>1)+xoff; - x1 -= mulscale16(dax,k); x2 = x1+mulscale16(dax,l); - y1 -= mulscale16(day,k); y2 = y1+mulscale16(day,l); - if (clipinsideboxline(cx,cy,x1,y1,x2,y2,rad) != 0) - { - dax = mulscale14(sintable[(spr->ang+256+512)&2047],walldist); - day = mulscale14(sintable[(spr->ang+256)&2047],walldist); - - if ((x1-(pos->x))*(y2-(pos->y)) >= (x2-(pos->x))*(y1-(pos->y))) //Front - { - addclipline(x1+dax,y1+day,x2+day,y2-dax,(int16_t)j+49152); - } - else - { - if ((cstat&64) != 0) continue; - addclipline(x2-dax,y2-day,x1-day,y1+dax,(int16_t)j+49152); - } - - //Side blocker - if ((x2-x1)*((pos->x)-x1) + (y2-y1)*((pos->y)-y1) < 0) - { addclipline(x1-day,y1+dax,x1+dax,y1+day,(int16_t)j+49152); } - else if ((x1-x2)*((pos->x)-x2) + (y1-y2)*((pos->y)-y2) < 0) - { addclipline(x2+day,y2-dax,x2-dax,y2-day,(int16_t)j+49152); } - } - } - break; - case 32: - daz = spr->z+ceildist; - daz2 = spr->z-flordist; - if (((pos->z) < daz) && ((pos->z) > daz2)) - { - if ((cstat&64) != 0) - if (((pos->z) > spr->z) == ((cstat&8)==0)) continue; - - tilenum = spr->picnum; - xoff = (int32_t)((int8_t)((picanm[tilenum]>>8)&255))+((int32_t)spr->xoffset); - yoff = (int32_t)((int8_t)((picanm[tilenum]>>16)&255))+((int32_t)spr->yoffset); - if ((cstat&4) > 0) xoff = -xoff; - if ((cstat&8) > 0) yoff = -yoff; - - k = spr->ang; - cosang = sintable[(k+512)&2047]; sinang = sintable[k]; - xspan = tilesizx[tilenum]; xrepeat = spr->xrepeat; - yspan = tilesizy[tilenum]; yrepeat = spr->yrepeat; - - dax = ((xspan>>1)+xoff)*xrepeat; day = ((yspan>>1)+yoff)*yrepeat; - rxi[0] = x1 + dmulscale16(sinang,dax,cosang,day); - ryi[0] = y1 + dmulscale16(sinang,day,-cosang,dax); - l = xspan*xrepeat; - rxi[1] = rxi[0] - mulscale16(sinang,l); - ryi[1] = ryi[0] + mulscale16(cosang,l); - l = yspan*yrepeat; - k = -mulscale16(cosang,l); rxi[2] = rxi[1]+k; rxi[3] = rxi[0]+k; - k = -mulscale16(sinang,l); ryi[2] = ryi[1]+k; ryi[3] = ryi[0]+k; - - dax = mulscale14(sintable[(spr->ang-256+512)&2047],walldist); - day = mulscale14(sintable[(spr->ang-256)&2047],walldist); - - if ((rxi[0]-(pos->x))*(ryi[1]-(pos->y)) < (rxi[1]-(pos->x))*(ryi[0]-(pos->y))) - { - if (clipinsideboxline(cx,cy,rxi[1],ryi[1],rxi[0],ryi[0],rad) != 0) - addclipline(rxi[1]-day,ryi[1]+dax,rxi[0]+dax,ryi[0]+day,(int16_t)j+49152); - } - else if ((rxi[2]-(pos->x))*(ryi[3]-(pos->y)) < (rxi[3]-(pos->x))*(ryi[2]-(pos->y))) - { - if (clipinsideboxline(cx,cy,rxi[3],ryi[3],rxi[2],ryi[2],rad) != 0) - addclipline(rxi[3]+day,ryi[3]-dax,rxi[2]-dax,ryi[2]-day,(int16_t)j+49152); - } - - if ((rxi[1]-(pos->x))*(ryi[2]-(pos->y)) < (rxi[2]-(pos->x))*(ryi[1]-(pos->y))) - { - if (clipinsideboxline(cx,cy,rxi[2],ryi[2],rxi[1],ryi[1],rad) != 0) - addclipline(rxi[2]-dax,ryi[2]-day,rxi[1]-day,ryi[1]+dax,(int16_t)j+49152); - } - else if ((rxi[3]-(pos->x))*(ryi[0]-(pos->y)) < (rxi[0]-(pos->x))*(ryi[3]-(pos->y))) - { - if (clipinsideboxline(cx,cy,rxi[0],ryi[0],rxi[3],ryi[3],rad) != 0) - addclipline(rxi[0]+dax,ryi[0]+day,rxi[3]+day,ryi[3]-dax,(int16_t)j+49152); - } - } - break; - } - } - } - while (clipsectcnt < clipsectnum || clipspritecnt < clipspritenum); - - if (curspr) - { - // restore original map - mapinfo_set(NULL, &origmapinfo); - - clipsectnum = origclipsectnum; - Bmemcpy(clipsectorlist, origclipsectorlist, clipsectnum*sizeof(clipsectorlist[0])); - } - - hitwall = 0; - cnt = clipmoveboxtracenum; - do - { - intx = goalx; inty = goaly; - hitwall = raytrace(pos->x, pos->y, &intx, &inty); - if (hitwall >= 0) - { - lx = clipit[hitwall].x2-clipit[hitwall].x1; - ly = clipit[hitwall].y2-clipit[hitwall].y1; - tempint2 = lx*lx + ly*ly; - if (tempint2 > 0) - { - tempint1 = (goalx-intx)*lx + (goaly-inty)*ly; - - if ((klabs(tempint1)>>11) < tempint2) - i = divscale20(tempint1,tempint2); - else - i = 0; - goalx = mulscale20(lx,i)+intx; - goaly = mulscale20(ly,i)+inty; - } -// else if (tempint2<0) -// Bprintf("!! tempint2<0 !!\n"); - - tempint1 = dmulscale6(lx,oxvect,ly,oyvect); - for (i=cnt+1; i<=clipmoveboxtracenum; i++) - { - j = hitwalls[i]; - tempint2 = dmulscale6(clipit[j].x2-clipit[j].x1,oxvect,clipit[j].y2-clipit[j].y1,oyvect); - if ((tempint1^tempint2) < 0) - { - updatesector(pos->x,pos->y,sectnum); - return(retval); - } - } - - keepaway(&goalx, &goaly, hitwall); - xvect = ((goalx-intx)<<14); - yvect = ((goaly-inty)<<14); - - if (cnt == clipmoveboxtracenum) retval = clipobjectval[hitwall]; - hitwalls[cnt] = hitwall; - } - cnt--; - - pos->x = intx; - pos->y = inty; - } - while (((xvect|yvect) != 0) && (hitwall >= 0) && (cnt > 0)); - - for (j=0; jx,pos->y,clipsectorlist[j]) == 1) - { - *sectnum = clipsectorlist[j]; - return(retval); - } - - *sectnum = -1; tempint1 = 0x7fffffff; - for (j=numsectors-1; j>=0; j--) - if (inside(pos->x,pos->y,j) == 1) - { - if (sector[j].ceilingstat&2) - tempint2 = (getceilzofslope((int16_t)j,pos->x,pos->y)-(pos->z)); - else - tempint2 = (sector[j].ceilingz-(pos->z)); - - if (tempint2 > 0) - { - if (tempint2 < tempint1) - { *sectnum = j; tempint1 = tempint2; } - } - else - { - if (sector[j].floorstat&2) - tempint2 = ((pos->z)-getflorzofslope((int16_t)j,pos->x,pos->y)); - else - tempint2 = ((pos->z)-sector[j].floorz); - - if (tempint2 <= 0) - { - *sectnum = j; - return(retval); - } - if (tempint2 < tempint1) - { *sectnum = j; tempint1 = tempint2; } - } - } - - return(retval); -} - - -// -// pushmove -// -int32_t pushmove(vec3_t *vect, int16_t *sectnum, - int32_t walldist, int32_t ceildist, int32_t flordist, uint32_t cliptype) -{ - sectortype *sec, *sec2; - walltype *wal; - int32_t i, j, k, t, dx, dy, dax, day, daz, daz2, bad, dir; - int32_t dasprclipmask, dawalclipmask; - int16_t startwall, endwall, clipsectcnt; - char bad2; - - if ((*sectnum) < 0) return(-1); - - dawalclipmask = (cliptype&65535); - dasprclipmask = (cliptype>>16); - - k = 32; - dir = 1; - do - { - bad = 0; - - clipsectorlist[0] = *sectnum; - clipsectcnt = 0; clipsectnum = 1; - do - { - /*Push FACE sprites - for(i=headspritesect[clipsectorlist[clipsectcnt]];i>=0;i=nextspritesect[i]) - { - spr = &sprite[i]; - if (((spr->cstat&48) != 0) && ((spr->cstat&48) != 48)) continue; - if ((spr->cstat&dasprclipmask) == 0) continue; - - dax = (vect->x)-spr->x; day = (vect->y)-spr->y; - t = (spr->clipdist<<2)+walldist; - if ((klabs(dax) < t) && (klabs(day) < t)) - { - t = ((tilesizy[spr->picnum]*spr->yrepeat)<<2); - if (spr->cstat&128) daz = spr->z+(t>>1); else daz = spr->z; - if (picanm[spr->picnum]&0x00ff0000) daz -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2); - if (((vect->z) < daz+ceildist) && ((vect->z) > daz-t-flordist)) - { - t = (spr->clipdist<<2)+walldist; - - j = getangle(dax,day); - dx = (sintable[(j+512)&2047]>>11); - dy = (sintable[(j)&2047]>>11); - bad2 = 16; - do - { - vect->x = (vect->x) + dx; vect->y = (vect->y) + dy; - bad2--; if (bad2 == 0) break; - } while ((klabs((vect->x)-spr->x) < t) && (klabs((vect->y)-spr->y) < t)); - bad = -1; - k--; if (k <= 0) return(bad); - updatesector(vect->x,vect->y,sectnum); - } - } - }*/ - - sec = §or[clipsectorlist[clipsectcnt]]; - if (dir > 0) - startwall = sec->wallptr, endwall = startwall + sec->wallnum; - else - endwall = sec->wallptr, startwall = endwall + sec->wallnum; - - for (i=startwall,wal=&wall[startwall]; i!=endwall; i+=dir,wal+=dir) - if (clipinsidebox(vect->x,vect->y,i,walldist-4) == 1) - { - j = 0; - if (wal->nextsector < 0) j = 1; - if (wal->cstat&dawalclipmask) j = 1; - if (j == 0) - { - sec2 = §or[wal->nextsector]; - - - //Find closest point on wall (dax, day) to (vect->x, vect->y) - dax = wall[wal->point2].x-wal->x; - day = wall[wal->point2].y-wal->y; - daz = dax*((vect->x)-wal->x) + day*((vect->y)-wal->y); - if (daz <= 0) - t = 0; - else - { - daz2 = dax*dax+day*day; - if (daz >= daz2) t = (1<<30); else t = divscale30(daz,daz2); - } - dax = wal->x + mulscale30(dax,t); - day = wal->y + mulscale30(day,t); - - - daz = getflorzofslope(clipsectorlist[clipsectcnt],dax,day); - daz2 = getflorzofslope(wal->nextsector,dax,day); - if ((daz2 < daz-(1<<8)) && ((sec2->floorstat&1) == 0)) - if (vect->z >= daz2-(flordist-1)) j = 1; - - daz = getceilzofslope(clipsectorlist[clipsectcnt],dax,day); - daz2 = getceilzofslope(wal->nextsector,dax,day); - if ((daz2 > daz+(1<<8)) && ((sec2->ceilingstat&1) == 0)) - if (vect->z <= daz2+(ceildist-1)) j = 1; - } - if (j != 0) - { - j = getangle(wall[wal->point2].x-wal->x,wall[wal->point2].y-wal->y); - dx = (sintable[(j+1024)&2047]>>11); - dy = (sintable[(j+512)&2047]>>11); - bad2 = 16; - do - { - vect->x = (vect->x) + dx; vect->y = (vect->y) + dy; - bad2--; if (bad2 == 0) break; - } - while (clipinsidebox(vect->x,vect->y,i,walldist-4) != 0); - bad = -1; - k--; if (k <= 0) return(bad); - updatesector(vect->x,vect->y,sectnum); - if (*sectnum < 0) return -1; - } - else - { - for (j=clipsectnum-1; j>=0; j--) - if (wal->nextsector == clipsectorlist[j]) break; - if (j < 0) clipsectorlist[clipsectnum++] = wal->nextsector; - } - } - - clipsectcnt++; - } - while (clipsectcnt < clipsectnum); - dir = -dir; - } - while (bad != 0); - - return(bad); -} - - -// -// updatesector[z] -// -void updatesector(int32_t x, int32_t y, int16_t *sectnum) -{ - walltype *wal; - int32_t i, j; - - if (inside(x,y,*sectnum) == 1) return; - - if ((*sectnum >= 0) && (*sectnum < numsectors)) - { - wal = &wall[sector[*sectnum].wallptr]; - j = sector[*sectnum].wallnum; - do - { - i = wal->nextsector; - if (i >= 0) - if (inside(x,y,(int16_t)i) == 1) - { - *sectnum = i; - return; - } - wal++; - j--; - } - while (j != 0); - } - - for (i=numsectors-1; i>=0; i--) - if (inside(x,y,(int16_t)i) == 1) - { - *sectnum = i; - return; - } - - *sectnum = -1; -} - -void updatesectorexclude(int32_t x, int32_t y, int16_t *sectnum, const uint8_t *excludesectbitmap) -{ - walltype *wal; - int32_t i, j; - - if (!(excludesectbitmap[*sectnum>>3]&(1<<(*sectnum&7))) && inside(x,y,*sectnum) == 1) - return; - - if ((*sectnum >= 0) && (*sectnum < numsectors)) - { - wal = &wall[sector[*sectnum].wallptr]; - j = sector[*sectnum].wallnum; - do - { - i = wal->nextsector; - if (i >= 0) - if (!(excludesectbitmap[i>>3]&(1<<(i&7))) && inside(x,y,(int16_t)i) == 1) - { - *sectnum = i; - return; - } - wal++; - j--; - } - while (j != 0); - } - - for (i=numsectors-1; i>=0; i--) - if (!(excludesectbitmap[i>>3]&(1<<(i&7))) && inside(x,y,(int16_t)i) == 1) - { - *sectnum = i; - return; - } - - *sectnum = -1; -} - -void updatesectorz(int32_t x, int32_t y, int32_t z, int16_t *sectnum) -{ - walltype *wal; - int32_t i, j, cz, fz; - - if ((*sectnum >= 0) && (*sectnum < numsectors)) - { - // this block used to be outside the "if" and caused crashes in Polymost Mapster32 - getzsofslope(*sectnum, x, y, &cz, &fz); - if ((z >= cz) && (z <= fz)) - if (inside(x,y,*sectnum) != 0) return; - - wal = &wall[sector[*sectnum].wallptr]; - j = sector[*sectnum].wallnum; - do - { - i = wal->nextsector; - if (i >= 0) - { - getzsofslope(i, x, y, &cz, &fz); - if ((z >= cz) && (z <= fz)) - if (inside(x,y,(int16_t)i) == 1) - { *sectnum = i; return; } - } - wal++; j--; - } - while (j != 0); - } - - for (i=numsectors-1; i>=0; i--) - { - getzsofslope(i, x, y, &cz, &fz); - if ((z >= cz) && (z <= fz)) - if (inside(x,y,(int16_t)i) == 1) - { *sectnum = i; return; } - } - - *sectnum = -1; -} - - -// -// rotatepoint -// -void rotatepoint(int32_t xpivot, int32_t ypivot, int32_t x, int32_t y, int16_t daang, int32_t *x2, int32_t *y2) -{ - int32_t dacos, dasin; - - dacos = sintable[(daang+2560)&2047]; - dasin = sintable[(daang+2048)&2047]; - x -= xpivot; - y -= ypivot; - *x2 = dmulscale14(x,dacos,-y,dasin) + xpivot; - *y2 = dmulscale14(y,dacos,x,dasin) + ypivot; -} - - -// -// getmousevalues -// - -void getmousevalues(int32_t *mousx, int32_t *mousy, int32_t *bstatus) -{ - readmousexy(mousx,mousy); - readmousebstatus(bstatus); -} - - -#if KRANDDEBUG -# include -# define KRD_MAXCALLS 262144 -# define KRD_DEPTH 8 -static int32_t krd_numcalls=0; -static void *krd_fromwhere[KRD_MAXCALLS][KRD_DEPTH]; -static int32_t krd_enabled=0; - -void krd_enable(int which) // 0: disable, 1: rec, 2: play -{ - krd_enabled = which; - - if (which) - Bmemset(krd_fromwhere, 0, sizeof(krd_fromwhere)); -} - -int32_t krd_print(const char *filename) -{ - FILE *fp; - int32_t i, j; - - if (!krd_enabled) return 1; - krd_enabled = 0; - - fp = fopen(filename, "wb"); - if (!fp) { OSD_Printf("krd_print (2): fopen"); return 1; } - - for (i=0; i=KRD_DEPTH || krd_fromwhere[i][j]==NULL) - { - fprintf(fp, "\n"); - break; - } - fprintf(fp, " [%p]", krd_fromwhere[i][j]); - } - } - - krd_numcalls = 0; - - fclose(fp); - return 0; -} -#endif // KRANDDEBUG - - -// -// krand -// -int32_t krand(void) -{ -// randomseed = (randomseed*27584621)+1; - randomseed = (randomseed * 1664525ul) + 221297ul; - -#if KRANDDEBUG - if (krd_enabled) - if (krd_numcalls < KRD_MAXCALLS) - { - backtrace(krd_fromwhere[krd_numcalls], KRD_DEPTH); - krd_numcalls++; - } -#endif - - return(((uint32_t)randomseed)>>16); -} - - -// -// getzrange -// -void getzrange(const vec3_t *vect, int16_t sectnum, - int32_t *ceilz, int32_t *ceilhit, int32_t *florz, int32_t *florhit, - int32_t walldist, uint32_t cliptype) -{ - sectortype *sec; - walltype *wal, *wal2; - spritetype *spr; - int32_t clipsectcnt, startwall, endwall, tilenum, xoff, yoff, dax, day; - int32_t xmin, ymin, xmax, ymax, i, j, k, l, daz, daz2, dx, dy; - int32_t x1, y1, x2, y2, x3, y3, x4, y4, ang, cosang, sinang; - int32_t xspan, yspan, xrepeat, yrepeat, dasprclipmask, dawalclipmask; - int16_t cstat; - - char clipyou; - - spritetype *curspr=NULL; // non-NULL when handling sprite with sector-like clipping - int32_t curidx=-1, clipspritecnt; - - if (sectnum < 0) - { - *ceilz = 0x80000000; *ceilhit = -1; - *florz = 0x7fffffff; *florhit = -1; - return; - } - - //Extra walldist for sprites on sector lines - i = walldist+MAXCLIPDIST+1; - xmin = vect->x-i; ymin = vect->y-i; - xmax = vect->x+i; ymax = vect->y+i; - - getzsofslope(sectnum,vect->x,vect->y,ceilz,florz); - *ceilhit = sectnum+16384; *florhit = sectnum+16384; - - dawalclipmask = (cliptype&65535); - dasprclipmask = (cliptype>>16); - - clipsectorlist[0] = sectnum; - clipsectcnt = 0; clipsectnum = 1; - clipspritecnt = clipspritenum = 0; - - if (0) - { - beginagain: - // replace sector and wall with clip map - mapinfo_set(&origmapinfo, &clipmapinfo); - clipsectcnt = clipsectnum; // should be a nop, "safety"... - } - - do //Collect sectors inside your square first - { - if (clipsectcnt>=clipsectnum) - { - // one bunch of sectors completed, prepare the next - - curspr = &sprite[clipspritelist[clipspritecnt]]; - - if (curidx < 0) // per-sprite init - curidx = pictoidx[curspr->picnum]; - else - curidx = clipinfo[curidx].next; - - while (curidx>=0 && (curspr->cstat&32) != (sector[sectq[clipinfo[curidx].qbeg]].CM_CSTAT&32)) - curidx = clipinfo[curidx].next; - - if (curidx < 0) - { - clipspritecnt++; - continue; - } - - clipsprite_initindex(curidx, curspr, &clipsectcnt, vect); - - for (i=0; ix,vect->y,&daz,&daz2); - getzsofslope(sectq[clipinfo[curidx].qend],vect->x,vect->y,&cz,&fz); - - if ((sector[k].ceilingstat&1)==0) - { - if (vect->z < cz && cz < *florz) { *florz = cz; *florhit = (curspr-sprite)+49152; } - if (vect->z > daz && daz > *ceilz) { *ceilz = daz; *ceilhit = (curspr-sprite)+49152; } - } - if ((sector[k].floorstat&1)==0) - { - if (vect->z < daz2 && daz2 < *florz) { *florz = daz2; *florhit = (curspr-sprite)+49152; } - if (vect->z > fz && fz > *ceilz) { *ceilz = fz; *ceilhit = (curspr-sprite)+49152; } - } - } - } - - sec = §or[clipsectorlist[clipsectcnt]]; - startwall = sec->wallptr; endwall = startwall + sec->wallnum; - for (j=startwall,wal=&wall[startwall]; jnextsector; - if (k >= 0) - { - wal2 = &wall[wal->point2]; - x1 = wal->x; x2 = wal2->x; - if ((x1 < xmin) && (x2 < xmin)) continue; - if ((x1 > xmax) && (x2 > xmax)) continue; - y1 = wal->y; y2 = wal2->y; - if ((y1 < ymin) && (y2 < ymin)) continue; - if ((y1 > ymax) && (y2 > ymax)) continue; - - dx = x2-x1; dy = y2-y1; - if (dx*(vect->y-y1) < (vect->x-x1)*dy) continue; //back - if (dx > 0) dax = dx*(ymin-y1); else dax = dx*(ymax-y1); - if (dy > 0) day = dy*(xmax-x1); else day = dy*(xmin-x1); - if (dax >= day) continue; - - if (wal->cstat&dawalclipmask) continue; - sec = §or[k]; - - if (curspr) - { - if (k==sectq[clipinfo[curidx].qend]) - continue; - if ((sec->ceilingstat&1) && (sec->floorstat&1)) - continue; - } - else if (editstatus == 0) - { - if (((sec->ceilingstat&1) == 0) && (vect->z <= sec->ceilingz+(3<<8))) continue; - if (((sec->floorstat&1) == 0) && (vect->z >= sec->floorz-(3<<8))) continue; - } - - for (i=clipsectnum-1; i>=0; i--) if (clipsectorlist[i] == k) break; - if (i < 0) clipsectorlist[clipsectnum++] = k; - - if ((x1 < xmin+MAXCLIPDIST) && (x2 < xmin+MAXCLIPDIST)) continue; - if ((x1 > xmax-MAXCLIPDIST) && (x2 > xmax-MAXCLIPDIST)) continue; - if ((y1 < ymin+MAXCLIPDIST) && (y2 < ymin+MAXCLIPDIST)) continue; - if ((y1 > ymax-MAXCLIPDIST) && (y2 > ymax-MAXCLIPDIST)) continue; - if (dx > 0) dax += dx*MAXCLIPDIST; else dax -= dx*MAXCLIPDIST; - if (dy > 0) day -= dy*MAXCLIPDIST; else day += dy*MAXCLIPDIST; - if (dax >= day) continue; - - //It actually got here, through all the continue's!!! - getzsofslope((int16_t)k,vect->x,vect->y,&daz,&daz2); - if (curspr) - { - int32_t fz,cz; - getzsofslope(sectq[clipinfo[curidx].qend],vect->x,vect->y,&cz,&fz); - - if ((sec->ceilingstat&1)==0) - { - if (vect->z < cz && cz < *florz) { *florz = cz; *florhit = (curspr-sprite)+49152; } - if (vect->z > daz && daz > *ceilz) { *ceilz = daz; *ceilhit = (curspr-sprite)+49152; } - } - if ((sec->floorstat&1)==0) - { - if (vect->z < daz2 && daz2 < *florz) { *florz = daz2; *florhit = (curspr-sprite)+49152; } - if (vect->z > fz && fz > *ceilz) { *ceilz = fz; *ceilhit = (curspr-sprite)+49152; } - } - } - else - { - if (daz > *ceilz) { *ceilz = daz; *ceilhit = k+16384; } - if (daz2 < *florz) { *florz = daz2; *florhit = k+16384; } - } - } - } - clipsectcnt++; - } - while (clipsectcnt < clipsectnum || clipspritecnt < clipspritenum); - - if (curspr) - { - mapinfo_set(NULL, &origmapinfo); // restore original map - return; - } - - for (i=0; i=0; j=nextspritesect[j]) - { - spr = &sprite[j]; - cstat = spr->cstat; - if (cstat&dasprclipmask) - { - if (clipsprite_try(spr, xmin,ymin, xmax,ymax)) - continue; - - x1 = spr->x; y1 = spr->y; - - clipyou = 0; - switch (cstat&48) - { - case 0: - k = walldist+(spr->clipdist<<2)+1; - if ((klabs(x1-vect->x) <= k) && (klabs(y1-vect->y) <= k)) - { - daz = spr->z; - k = ((tilesizy[spr->picnum]*spr->yrepeat)<<1); - if (cstat&128) daz += k; - if (picanm[spr->picnum]&0x00ff0000) daz -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2); - daz2 = daz - (k<<1); - clipyou = 1; - } - break; - case 16: - tilenum = spr->picnum; - xoff = (int32_t)((int8_t)((picanm[tilenum]>>8)&255))+((int32_t)spr->xoffset); - if ((cstat&4) > 0) xoff = -xoff; - k = spr->ang; l = spr->xrepeat; - dax = sintable[k&2047]*l; day = sintable[(k+1536)&2047]*l; - l = tilesizx[tilenum]; k = (l>>1)+xoff; - x1 -= mulscale16(dax,k); x2 = x1+mulscale16(dax,l); - y1 -= mulscale16(day,k); y2 = y1+mulscale16(day,l); - if (clipinsideboxline(vect->x,vect->y,x1,y1,x2,y2,walldist+1) != 0) - { - daz = spr->z; k = ((tilesizy[spr->picnum]*spr->yrepeat)<<1); - if (cstat&128) daz += k; - if (picanm[spr->picnum]&0x00ff0000) daz -= ((int32_t)((int8_t)((picanm[spr->picnum]>>16)&255))*spr->yrepeat<<2); - daz2 = daz-(k<<1); - clipyou = 1; - } - break; - case 32: - daz = spr->z; daz2 = daz; - - if ((cstat&64) != 0) - if ((vect->z > daz) == ((cstat&8)==0)) continue; - - tilenum = spr->picnum; - xoff = (int32_t)((int8_t)((picanm[tilenum]>>8)&255))+((int32_t)spr->xoffset); - yoff = (int32_t)((int8_t)((picanm[tilenum]>>16)&255))+((int32_t)spr->yoffset); - if ((cstat&4) > 0) xoff = -xoff; - if ((cstat&8) > 0) yoff = -yoff; - - ang = spr->ang; - cosang = sintable[(ang+512)&2047]; sinang = sintable[ang]; - xspan = tilesizx[tilenum]; xrepeat = spr->xrepeat; - yspan = tilesizy[tilenum]; yrepeat = spr->yrepeat; - - dax = ((xspan>>1)+xoff)*xrepeat; day = ((yspan>>1)+yoff)*yrepeat; - x1 += dmulscale16(sinang,dax,cosang,day)-vect->x; - y1 += dmulscale16(sinang,day,-cosang,dax)-vect->y; - l = xspan*xrepeat; - x2 = x1 - mulscale16(sinang,l); - y2 = y1 + mulscale16(cosang,l); - l = yspan*yrepeat; - k = -mulscale16(cosang,l); x3 = x2+k; x4 = x1+k; - k = -mulscale16(sinang,l); y3 = y2+k; y4 = y1+k; - - dax = mulscale14(sintable[(spr->ang-256+512)&2047],walldist+4); - day = mulscale14(sintable[(spr->ang-256)&2047],walldist+4); - x1 += dax; x2 -= day; x3 -= dax; x4 += day; - y1 += day; y2 += dax; y3 -= day; y4 -= dax; - - if ((y1^y2) < 0) - { - if ((x1^x2) < 0) clipyou ^= (x1*y2= 0) clipyou ^= 1; - } - if ((y2^y3) < 0) - { - if ((x2^x3) < 0) clipyou ^= (x2*y3= 0) clipyou ^= 1; - } - if ((y3^y4) < 0) - { - if ((x3^x4) < 0) clipyou ^= (x3*y4= 0) clipyou ^= 1; - } - if ((y4^y1) < 0) - { - if ((x4^x1) < 0) clipyou ^= (x4*y1= 0) clipyou ^= 1; - } - break; - } - - if (clipyou != 0) - { - if ((vect->z > daz) && (daz > *ceilz)) { *ceilz = daz; *ceilhit = j+49152; } - if ((vect->z < daz2) && (daz2 < *florz)) { *florz = daz2; *florhit = j+49152; } - } - } - } - } - - if (clipspritenum>0) - goto beginagain; -} - -void setaspect_new() -{ - if (r_usenewaspect && newaspect_enable) - { - // the correction factor 100/107 has been found - // out experimentally. squares ftw! - int32_t vr, yx=(65536*4*100)/(3*107); - int32_t y, x; - - if (fullscreen) - { - x=r_screenxy/100; y=r_screenxy%100; - if (y==0 || x==0) { x=4; y=3; } - } - else - { - x = xdim; - y = ydim; - } - - vr = (65536*x*3)/(y*4); - - setaspect(vr, yx); - } - else - setaspect(65536L,(int32_t)divscale16(ydim*320L,xdim*200L)); -} - -// -// setview -// -void setview(int32_t x1, int32_t y1, int32_t x2, int32_t y2) -{ - int32_t i; - - windowx1 = x1; wx1 = (x1<<12); - windowy1 = y1; wy1 = (y1<<12); - windowx2 = x2; wx2 = ((x2+1)<<12); - windowy2 = y2; wy2 = ((y2+1)<<12); - - xdimen = (x2-x1)+1; halfxdimen = (xdimen>>1); - xdimenrecip = divscale32(1L,xdimen); - ydimen = (y2-y1)+1; - - setaspect_new(); - - for (i=0; i cx2) || (cy1 > cy2)) return; - if (z <= 16) return; - if (picanm[picnum]&192) picnum += animateoffs(picnum,(int16_t)0xc000); - if ((tilesizx[picnum] <= 0) || (tilesizy[picnum] <= 0)) return; - - if (((dastat&128) == 0) || (numpages < 2) || (beforedrawrooms != 0)) - { - begindrawing(); //{{{ - dorotatesprite(sx,sy,z,a,picnum,dashade,dapalnum,dastat,cx1,cy1,cx2,cy2,guniqhudid); - enddrawing(); //}}} - } - - if ((dastat&64) && (cx1 <= 0) && (cy1 <= 0) && (cx2 >= xdim-1) && (cy2 >= ydim-1) && - (sx == (160<<16)) && (sy == (100<<16)) && (z == 65536L) && (a == 0) && ((dastat&1) == 0)) - permhead = permtail = 0; - - if ((dastat&128) == 0) return; - if (numpages >= 2) - { - per = &permfifo[permhead]; - per->sx = sx; per->sy = sy; per->z = z; per->a = a; - per->picnum = picnum; - per->dashade = dashade; per->dapalnum = dapalnum; - per->dastat = dastat; - per->pagesleft = numpages+((beforedrawrooms&1)<<7); - per->cx1 = cx1; per->cy1 = cy1; per->cx2 = cx2; per->cy2 = cy2; - per->uniqid = guniqhudid; //JF extension - - //Would be better to optimize out true bounding boxes - if (dastat&64) //If non-masking write, checking for overlapping cases - { - for (i=permtail; i!=permhead; i=((i+1)&(MAXPERMS-1))) - { - per2 = &permfifo[i]; - if ((per2->pagesleft&127) == 0) continue; - if (per2->sx != per->sx) continue; - if (per2->sy != per->sy) continue; - if (per2->z != per->z) continue; - if (per2->a != per->a) continue; - if (tilesizx[per2->picnum] > tilesizx[per->picnum]) continue; - if (tilesizy[per2->picnum] > tilesizy[per->picnum]) continue; - if (per2->cx1 < per->cx1) continue; - if (per2->cy1 < per->cy1) continue; - if (per2->cx2 > per->cx2) continue; - if (per2->cy2 > per->cy2) continue; - per2->pagesleft = 0; - } - if ((per->z == 65536) && (per->a == 0)) - for (i=permtail; i!=permhead; i=((i+1)&(MAXPERMS-1))) - { - per2 = &permfifo[i]; - if ((per2->pagesleft&127) == 0) continue; - if (per2->z != 65536) continue; - if (per2->a != 0) continue; - if (per2->cx1 < per->cx1) continue; - if (per2->cy1 < per->cy1) continue; - if (per2->cx2 > per->cx2) continue; - if (per2->cy2 > per->cy2) continue; - if ((per2->sx>>16) < (per->sx>>16)) continue; - if ((per2->sy>>16) < (per->sy>>16)) continue; - if ((per2->sx>>16)+tilesizx[per2->picnum] > (per->sx>>16)+tilesizx[per->picnum]) continue; - if ((per2->sy>>16)+tilesizy[per2->picnum] > (per->sy>>16)+tilesizy[per->picnum]) continue; - per2->pagesleft = 0; - } - } - - permhead = ((permhead+1)&(MAXPERMS-1)); - } -} - - -// -// makepalookup -// -void makepalookup(int32_t palnum, char *remapbuf, int8_t r, int8_t g, int8_t b, char dastat) -{ - int32_t i, j, palscale; - char *ptr, *ptr2; - - if (paletteloaded == 0) return; - - if (palookup[palnum] == NULL) - { - //Allocate palookup buffer - if ((palookup[palnum] = (char *)Bmalloc(numpalookups<<8)) == NULL) - allocache((intptr_t *)&palookup[palnum],numpalookups<<8,&permanentlock); - } - - if (dastat == 0) return; - if ((r|g|b|63) != 63) return; - - if ((r|g|b) == 0) - { - for (i=0; i<256; i++) - { - ptr = (char *)(FP_OFF(palookup[0])+remapbuf[i]); - ptr2 = (char *)(FP_OFF(palookup[palnum])+i); - for (j=0; j= MAXBASEPALS) - thebasepalcount = MAXBASEPALS - 1; - - basepaltableptr = thebasepaltable; - basepalcount = thebasepalcount; -} - -// -// setbrightness -// -void setbrightness(char dabrightness, uint8_t dapalid, char noapply) -{ - int32_t i, k, j; - uint8_t *dapal; -// uint32_t lastbright = curbrightness; - - if (dapalid >= basepalcount) - dapalid = 0; - - curbasepal = dapalid; - - dapal = basepaltableptr[dapalid]; - - if (!(noapply&4)) - { - curbrightness = min(max((int32_t)dabrightness,0),15); -// if (lastbright != (unsigned)curbrightness) -// vid_gamma = 1.0 + ((float)curbrightness / 10.0); - } - - if (setgamma()) j = curbrightness; else j = 0; - - for (k=i=0; i<256; i++) - { - // save palette without any brightness adjustment - curpalette[i].r = dapal[i*3+0] << 2; - curpalette[i].g = dapal[i*3+1] << 2; - curpalette[i].b = dapal[i*3+2] << 2; - curpalette[i].f = 0; - - // brightness adjust the palette - curpalettefaded[i].b = britable[j][ curpalette[i].b ]; - curpalettefaded[i].g = britable[j][ curpalette[i].g ]; - curpalettefaded[i].r = britable[j][ curpalette[i].r ]; - curpalettefaded[i].f = 0; - } - - if ((noapply&1) == 0) setpalette(0,256); - -#ifdef USE_OPENGL - if (rendmode >= 3) - { - static uint32_t lastpalettesum = 0; - uint32_t newpalettesum = crc32once((uint8_t *)curpalettefaded, sizeof(curpalettefaded)); - - // only reset the textures if the preserve flag (bit 1 of noapply) is clear and - // either (a) the new palette is different to the last, or (b) the brightness - // changed and we couldn't set it using hardware gamma - if (!(noapply&2) && (newpalettesum != lastpalettesum)) - gltexinvalidateall(); - if (!(noapply&8) && (newpalettesum != lastpalettesum)) - gltexinvalidate8(); -#ifdef POLYMER - if ((rendmode == 4) && (newpalettesum != lastpalettesum)) - polymer_texinvalidate(); -#endif - lastpalettesum = newpalettesum; - } -#endif - - palfadergb.r = palfadergb.g = palfadergb.b = 0; - palfadedelta = 0; -} - -static inline palette_t getpal(int32_t col) -{ - if (gammabrightness) return curpalette[col]; - else - { - palette_t p; - p.b = britable[curbrightness][ curpalette[col].b ]; - p.g = britable[curbrightness][ curpalette[col].g ]; - p.r = britable[curbrightness][ curpalette[col].r ]; - return p; - } -} - -// -// setpalettefade -// -void setpalettefade(char r, char g, char b, char offset) -{ - int32_t i; - palette_t p; - - palfadergb.r = min(63,r) << 2; - palfadergb.g = min(63,g) << 2; - palfadergb.b = min(63,b) << 2; - palfadedelta = min(63,offset) << 2; - - for (i=0; i<256; i++) - { - p = getpal(i); - - curpalettefaded[i].b = - p.b + (((palfadergb.b - p.b) * offset) >> 6); - curpalettefaded[i].g = - p.g + (((palfadergb.g - p.g) * offset) >> 6); - curpalettefaded[i].r = - p.r + (((palfadergb.r - p.r) * offset) >> 6); - curpalettefaded[i].f = 0; - } - - setpalette(0,256); -} - - -// -// clearview -// -void clearview(int32_t dacol) -{ - intptr_t p; - int32_t y, dx; - - if (qsetmode != 200) return; - -#ifdef USE_OPENGL - if (rendmode >= 3) - { - palette_t p = getpal(dacol); - - bglClearColor(((float)p.r)/255.0, - ((float)p.g)/255.0, - ((float)p.b)/255.0, - 0); - bglClear(GL_COLOR_BUFFER_BIT); - return; - } -#endif - - begindrawing(); //{{{ - dx = windowx2-windowx1+1; - //dacol += (dacol<<8); dacol += (dacol<<16); - p = frameplace+ylookup[windowy1]+windowx1; - for (y=windowy1; y<=windowy2; y++) - { - //clearbufbyte((void*)p,dx,dacol); - Bmemset((void *)p,dacol,dx); - p += ylookup[1]; - } - enddrawing(); //}}} - - faketimerhandler(); -} - - -// -// clearallviews -// -void clearallviews(int32_t dacol) -{ - if (qsetmode != 200) return; - //dacol += (dacol<<8); dacol += (dacol<<16); - -#ifdef USE_OPENGL - if (rendmode >= 3) - { - palette_t p = getpal(dacol); - - bglViewport(0,0,xdim,ydim); glox1 = -1; - bglClearColor(((float)p.r)/255.0, - ((float)p.g)/255.0, - ((float)p.b)/255.0, - 0); - bglClear(GL_COLOR_BUFFER_BIT); - return; - } -#endif - - begindrawing(); //{{{ - //clearbufbyte((void*)frameplace,imageSize,0L); - Bmemset((void *)frameplace,dacol,imageSize); - enddrawing(); //}}} - //nextpage(); - - faketimerhandler(); -} - - -// -// plotpixel -// -void plotpixel(int32_t x, int32_t y, char col) -{ -#ifdef USE_OPENGL - if (rendmode >= 3 && qsetmode == 200) - { - palette_t p = getpal(col); - - setpolymost2dview(); // JBF 20040205: more efficient setup - -// bglBegin(GL_POINTS); -// bglColor4ub(p.r,p.g,p.b,255); -// bglVertex2i(x,y); -// bglEnd(); - bglRasterPos4i(x, y, 0, 1); - bglDrawPixels(1, 1, GL_RGB, GL_UNSIGNED_BYTE, &p); - bglRasterPos4i(0, 0, 0, 1); - return; - } -#endif - - begindrawing(); //{{{ - drawpixel_safe((void *)(ylookup[y]+x+frameplace),(int32_t)col); - enddrawing(); //}}} -} - -void plotlines2d(const int32_t *xx, const int32_t *yy, int32_t numpoints, char col) -{ - int32_t i; - -#ifdef USE_OPENGL - if (rendmode >= 3 && qsetmode == 200) - { - palette_t p = getpal(col); - - bglBegin(GL_LINE_STRIP); - - bglColor4ub(p.r, p.g, p.b, 1); - - for (i=0; i= 3 && qsetmode == 200) return 0; -#endif - - begindrawing(); //{{{ - r = readpixel((void *)(ylookup[y]+x+frameplace)); - enddrawing(); //}}} - return(r); -} - - -//MUST USE RESTOREFORDRAWROOMS AFTER DRAWING - -// -// setviewtotile -// -void setviewtotile(int16_t tilenume, int32_t xsiz, int32_t ysiz) -{ - int32_t i, j; - - //DRAWROOMS TO TILE BACKUP&SET CODE - tilesizx[tilenume] = xsiz; tilesizy[tilenume] = ysiz; - bakxsiz[setviewcnt] = xsiz; bakysiz[setviewcnt] = ysiz; - bakframeplace[setviewcnt] = frameplace; frameplace = waloff[tilenume]; - bakwindowx1[setviewcnt] = windowx1; bakwindowy1[setviewcnt] = windowy1; - bakwindowx2[setviewcnt] = windowx2; bakwindowy2[setviewcnt] = windowy2; -#ifdef USE_OPENGL - if (setviewcnt == 0) - { - bakrendmode = rendmode; - baktile = tilenume; - } - rendmode = 0;//2; -#endif - copybufbyte(&startumost[windowx1],&bakumost[windowx1],(windowx2-windowx1+1)*sizeof(bakumost[0])); - copybufbyte(&startdmost[windowx1],&bakdmost[windowx1],(windowx2-windowx1+1)*sizeof(bakdmost[0])); - setviewcnt++; - - offscreenrendering = 1; - setview(0,0,ysiz-1,xsiz-1); - setaspect(65536,65536); - j = 0; for (i=0; i<=xsiz; i++) { ylookup[i] = j, j += ysiz; } - setvlinebpl(ysiz); -} - - -// -// setviewback -// -extern char modechange; -void setviewback(void) -{ - int32_t i, j, k; - - if (setviewcnt <= 0) return; - setviewcnt--; - - offscreenrendering = (setviewcnt>0); -#ifdef USE_OPENGL - if (setviewcnt == 0) - { - rendmode = bakrendmode; - invalidatetile(baktile,-1,-1); - } -#endif - - setview(bakwindowx1[setviewcnt],bakwindowy1[setviewcnt], - bakwindowx2[setviewcnt],bakwindowy2[setviewcnt]); - copybufbyte(&bakumost[windowx1],&startumost[windowx1],(windowx2-windowx1+1)*sizeof(startumost[0])); - copybufbyte(&bakdmost[windowx1],&startdmost[windowx1],(windowx2-windowx1+1)*sizeof(startdmost[0])); - frameplace = bakframeplace[setviewcnt]; - if (setviewcnt == 0) - k = bakxsiz[0]; - else - k = max(bakxsiz[setviewcnt-1],bakxsiz[setviewcnt]); - j = 0; for (i=0; i<=k; i++) ylookup[i] = j, j += bytesperline; - setvlinebpl(bytesperline); - modechange=1; -} - - -// -// squarerotatetile -// -void squarerotatetile(int16_t tilenume) -{ - int32_t siz; - - //supports square tiles only for rotation part - if ((siz = tilesizx[tilenume]) == tilesizy[tilenume]) - { - int32_t i = siz-1; - - for (; i>=0; i--) - { - int32_t j=(i>>1)-1; - char *ptr1 = (char *)(waloff[tilenume]+i*(siz+1)), *ptr2 = ptr1; - if (i&1) swapchar(--ptr1, (ptr2 -= siz)); - for (; j>=0; j--) swapchar2((ptr1 -= 2), (ptr2 -= (siz<<1)), siz); - } - } -} - -// -// preparemirror -// -void preparemirror(int32_t dax, int32_t day, int32_t daz, int16_t daang, int32_t dahoriz, int16_t dawall, int16_t dasector, int32_t *tposx, int32_t *tposy, int16_t *tang) -{ - int32_t i, j, x, y, dx, dy; - - UNREFERENCED_PARAMETER(daz); - UNREFERENCED_PARAMETER(dahoriz); - UNREFERENCED_PARAMETER(dasector); - - x = wall[dawall].x; dx = wall[wall[dawall].point2].x-x; - y = wall[dawall].y; dy = wall[wall[dawall].point2].y-y; - j = dx*dx + dy*dy; if (j == 0) return; - i = (((dax-x)*dx + (day-y)*dy)<<1); - *tposx = (x<<1) + scale(dx,i,j) - dax; - *tposy = (y<<1) + scale(dy,i,j) - day; - *tang = (((getangle(dx,dy)<<1)-daang)&2047); - - inpreparemirror = 1; -} - - -// -// completemirror -// -void completemirror(void) -{ - int32_t i, dy; - intptr_t p; - -#ifdef USE_OPENGL - if (rendmode) return; -#endif - - //Can't reverse with uninitialized data - if (inpreparemirror) { inpreparemirror = 0; return; } - if (mirrorsx1 > 0) mirrorsx1--; - if (mirrorsx2 < windowx2-windowx1-1) mirrorsx2++; - if (mirrorsx2 < mirrorsx1) return; - - begindrawing(); - p = frameplace+ylookup[windowy1+mirrorsy1]+windowx1+mirrorsx1; - i = windowx2-windowx1-mirrorsx2-mirrorsx1; mirrorsx2 -= mirrorsx1; - for (dy=mirrorsy2-mirrorsy1-1; dy>=0; dy--) - { - copybufbyte((void *)(p+1),tempbuf,mirrorsx2+1); - tempbuf[mirrorsx2] = tempbuf[mirrorsx2-1]; - copybufreverse(&tempbuf[mirrorsx2],(void *)(p+i),mirrorsx2+1); - p += ylookup[1]; - faketimerhandler(); - } - enddrawing(); -} - - -// -// sectorofwall -// -static int32_t sectorofwall_internal(int16_t theline) -{ - int32_t i, gap; - - gap = (numsectors>>1); i = gap; - while (gap > 1) - { - gap >>= 1; - if (sector[i].wallptr < theline) i += gap; else i -= gap; - } - while (sector[i].wallptr > theline) i--; - while (sector[i].wallptr+sector[i].wallnum <= theline) i++; - return(i); -} - -int32_t sectorofwall(int16_t theline) -{ - int32_t i; - - if ((theline < 0) || (theline >= numwalls)) return(-1); - i = wall[theline].nextwall; if (i >= 0 && i < MAXWALLS) return(wall[i].nextsector); - - return sectorofwall_internal(theline); -} - -int32_t sectorofwall_noquick(int16_t theline) -{ - if ((theline < 0) || (theline >= numwalls)) return(-1); - - return sectorofwall_internal(theline); -} - - -// -// getceilzofslope -// -int32_t getceilzofslope(int16_t sectnum, int32_t dax, int32_t day) -{ - if (!(sector[sectnum].ceilingstat&2)) return(sector[sectnum].ceilingz); - - { - int32_t dx, dy, i, j; - walltype *wal; - - wal = &wall[sector[sectnum].wallptr]; - dx = wall[wal->point2].x-wal->x; dy = wall[wal->point2].y-wal->y; - i = (nsqrtasm(dx*dx+dy*dy)<<5); if (i == 0) return(sector[sectnum].ceilingz); - j = dmulscale3(dx,day-wal->y,-dy,dax-wal->x); - return(sector[sectnum].ceilingz+(scale(sector[sectnum].ceilingheinum,j>>1,i)<<1)); - } -} - - -// -// getflorzofslope -// -int32_t getflorzofslope(int16_t sectnum, int32_t dax, int32_t day) -{ - if (!(sector[sectnum].floorstat&2)) return(sector[sectnum].floorz); - - { - int32_t dx, dy, i, j; - walltype *wal; - - wal = &wall[sector[sectnum].wallptr]; - dx = wall[wal->point2].x-wal->x; dy = wall[wal->point2].y-wal->y; - i = (nsqrtasm(dx*dx+dy*dy)<<5); if (i == 0) return(sector[sectnum].floorz); - j = dmulscale3(dx,day-wal->y,-dy,dax-wal->x); - return(sector[sectnum].floorz+(scale(sector[sectnum].floorheinum,j>>1,i)<<1)); - } -} - - -// -// getzsofslope -// -void getzsofslope(int16_t sectnum, int32_t dax, int32_t day, int32_t *ceilz, int32_t *florz) -{ - int32_t dx, dy, i, j; - walltype *wal, *wal2; - sectortype *sec; - - sec = §or[sectnum]; - *ceilz = sec->ceilingz; *florz = sec->floorz; - if ((sec->ceilingstat|sec->floorstat)&2) - { - wal = &wall[sec->wallptr]; wal2 = &wall[wal->point2]; - dx = wal2->x-wal->x; dy = wal2->y-wal->y; - i = (nsqrtasm(dx*dx+dy*dy)<<5); if (i == 0) return; - j = dmulscale3(dx,day-wal->y,-dy,dax-wal->x); - if (sec->ceilingstat&2) *ceilz = (*ceilz)+(scale(sec->ceilingheinum,j>>1,i)<<1); - if (sec->floorstat&2) *florz = (*florz)+(scale(sec->floorheinum,j>>1,i)<<1); - } -} - - -// -// alignceilslope -// -void alignceilslope(int16_t dasect, int32_t x, int32_t y, int32_t z) -{ - int32_t i, dax, day; - walltype *wal; - - wal = &wall[sector[dasect].wallptr]; - dax = wall[wal->point2].x-wal->x; - day = wall[wal->point2].y-wal->y; - - i = (y-wal->y)*dax - (x-wal->x)*day; if (i == 0) return; - sector[dasect].ceilingheinum = scale((z-sector[dasect].ceilingz)<<8, - nsqrtasm(dax*dax+day*day),i); - - if (sector[dasect].ceilingheinum == 0) sector[dasect].ceilingstat &= ~2; - else sector[dasect].ceilingstat |= 2; -} - - -// -// alignflorslope -// -void alignflorslope(int16_t dasect, int32_t x, int32_t y, int32_t z) -{ - int32_t i, dax, day; - walltype *wal; - - wal = &wall[sector[dasect].wallptr]; - dax = wall[wal->point2].x-wal->x; - day = wall[wal->point2].y-wal->y; - - i = (y-wal->y)*dax - (x-wal->x)*day; if (i == 0) return; - sector[dasect].floorheinum = scale((z-sector[dasect].floorz)<<8, - nsqrtasm(dax*dax+day*day),i); - - if (sector[dasect].floorheinum == 0) sector[dasect].floorstat &= ~2; - else sector[dasect].floorstat |= 2; -} - - -// -// loopnumofsector -// -int32_t loopnumofsector(int16_t sectnum, int16_t wallnum) -{ - int32_t i, numloops, startwall, endwall; - - numloops = 0; - startwall = sector[sectnum].wallptr; - endwall = startwall + sector[sectnum].wallnum; - for (i=startwall; i= startwall+danumwalls)) return; - - tmpwall = Bmalloc(danumwalls * sizeof(walltype)); - if (!tmpwall) - { - initprintf("setfirstwall: OUT OF MEMORY!\n"); - return; - } - - Bmemcpy(tmpwall, &wall[startwall], danumwalls*sizeof(walltype)); -// for (i=0; i 0) - { - j = 0; - while (loopnumofsector(sectnum,j+startwall) != dagoalloop) j++; - for (i=0; i= danumwalls) k -= danumwalls; - Bmemcpy(&wall[startwall+i], &tmpwall[k], sizeof(walltype)); - - wall[startwall+i].point2 += danumwalls-startwall-j; - if (wall[startwall+i].point2 >= danumwalls) - wall[startwall+i].point2 -= danumwalls; - wall[startwall+i].point2 += startwall; - } - newfirstwall += danumwalls-j; - if (newfirstwall >= startwall+danumwalls) newfirstwall -= danumwalls; - } - - for (i=0; i= numwallsofloop) k -= numwallsofloop; - Bmemcpy(&wall[startwall+i], &tmpwall[k], sizeof(walltype)); - - wall[startwall+i].point2 += numwallsofloop-newfirstwall; - if (wall[startwall+i].point2 >= numwallsofloop) - wall[startwall+i].point2 -= numwallsofloop; - wall[startwall+i].point2 += startwall; - } - - for (i=startwall; i= 0) wall[wall[i].nextwall].nextwall = i; - - Bfree(tmpwall); -} - - -// -// drawline256 -// -void drawline256(int32_t x1, int32_t y1, int32_t x2, int32_t y2, char col) -{ - int32_t dx, dy, i, j, inc, plc, daend; - intptr_t p; - - col = palookup[0][col]; - -#ifdef USE_OPENGL - if (rendmode >= 3) - { - palette_t p; - if (gammabrightness) p = curpalette[col]; - else - { - p.r = britable[curbrightness][ curpalette[col].r ]; - p.g = britable[curbrightness][ curpalette[col].g ]; - p.b = britable[curbrightness][ curpalette[col].b ]; - } - - setpolymost2dview(); // JBF 20040205: more efficient setup - - //bglEnable(GL_BLEND); // When using line antialiasing, this is needed - bglBegin(GL_LINES); - bglColor4ub(p.r,p.g,p.b,255); - bglVertex2f((float)x1/4096.0,(float)y1/4096.0); - bglVertex2f((float)x2/4096.0,(float)y2/4096.0); - bglEnd(); - //bglDisable(GL_BLEND); - - return; - } -#endif - - dx = x2-x1; dy = y2-y1; - if (dx >= 0) - { - if ((x1 >= wx2) || (x2 < wx1)) return; - if (x1 < wx1) y1 += scale(wx1-x1,dy,dx), x1 = wx1; - if (x2 > wx2) y2 += scale(wx2-x2,dy,dx), x2 = wx2; - } - else - { - if ((x2 >= wx2) || (x1 < wx1)) return; - if (x2 < wx1) y2 += scale(wx1-x2,dy,dx), x2 = wx1; - if (x1 > wx2) y1 += scale(wx2-x1,dy,dx), x1 = wx2; - } - if (dy >= 0) - { - if ((y1 >= wy2) || (y2 < wy1)) return; - if (y1 < wy1) x1 += scale(wy1-y1,dx,dy), y1 = wy1; - if (y2 > wy2) x2 += scale(wy2-y2,dx,dy), y2 = wy2; - } - else - { - if ((y2 >= wy2) || (y1 < wy1)) return; - if (y2 < wy1) x2 += scale(wy1-y2,dx,dy), y2 = wy1; - if (y1 > wy2) x1 += scale(wy2-y1,dx,dy), y1 = wy2; - } - - if (klabs(dx) >= klabs(dy)) - { - if (dx == 0) return; - if (dx < 0) - { - i = x1; x1 = x2; x2 = i; - i = y1; y1 = y2; y2 = i; - } - - inc = divscale12(dy,dx); - plc = y1+mulscale12((2047-x1)&4095,inc); - i = ((x1+2048)>>12); daend = ((x2+2048)>>12); - - begindrawing(); //{{{ - for (; i>12); - if ((j >= startumost[i]) && (j < startdmost[i])) - drawpixel_safe((void *)(frameplace+ylookup[j]+i),col); - plc += inc; - } - enddrawing(); //}}} - } - else - { - if (dy < 0) - { - i = x1; x1 = x2; x2 = i; - i = y1; y1 = y2; y2 = i; - } - - inc = divscale12(dx,dy); - plc = x1+mulscale12((2047-y1)&4095,inc); - i = ((y1+2048)>>12); daend = ((y2+2048)>>12); - - begindrawing(); //{{{ - p = ylookup[i]+frameplace; - for (; i>12); - if ((i >= startumost[j]) && (i < startdmost[j])) - drawpixel_safe((void *)(j+p),col); - plc += inc; p += ylookup[1]; - } - enddrawing(); //}}} - } -} - -//static void attach_here() {} - -// -// drawline16 -// -// JBF: Had to add extra tests to make sure x-coordinates weren't winding up -'ve -// after clipping or crashes would ensue -uint32_t drawlinepat = 0xffffffff; - -int32_t drawline16(int32_t x1, int32_t y1, int32_t x2, int32_t y2, char col) -{ - int32_t i, dx, dy, pinc, d; - uint32_t patc=0; - intptr_t p; - -//int32_t odx,ody; -//int32_t ox1=x1,oy1=y1, ox2=x2,oy2=y2; - - dx = x2-x1; - dy = y2-y1; - -//odx=dx; -//ody=dy; - - if (dx >= 0) - { - if (x1 >= xres || x2 < 0) - return 0; - if (x1 < 0) - { - if (dy) y1 += scale(0-x1,dy,dx); - x1 = 0; - } - if (x2 >= xres) - { - if (dy) y2 += scale(xres-1-x2,dy,dx); - x2 = xres-1; - } - } - else - { - if (x2 >= xres || x1 < 0) - return 0; - if (x2 < 0) - { - if (dy) y2 += scale(0-x2,dy,dx); - x2 = 0; - } - if (x1 >= xres) - { - if (dy) y1 += scale(xres-1-x1,dy,dx); - x1 = xres-1; - } - } - - if (dy >= 0) - { - if (y1 >= ydim16 || y2 < 0) - return 0; - if (y1 < 0) - { - if (dx) x1 += scale(0-y1,dx,dy); - y1 = 0; - x1 = clamp(x1, 0, xres-1); - } - if (y2 >= ydim16) - { - if (dx) x2 += scale(ydim16-1-y2,dx,dy); - y2 = ydim16-1; - x2 = clamp(x2, 0, xres-1); - } - } - else - { - if (y2 >= ydim16 || y1 < 0) - return 0; - if (y2 < 0) - { - if (dx) x2 += scale(0-y2,dx,dy); - y2 = 0; - x2 = clamp(x2, 0, xres-1); - } - if (y1 >= ydim16) - { - if (dx) x1 += scale(ydim16-1-y1,dx,dy); - y1 = ydim16-1; - x1 = clamp(x1, 0, xres-1); - } - } - -//if (ox1||ox2||oy1||oy2) -// if (x1<0||x1>=xres || y2<0||y2>=yres) -// attach_here(); - - dx = klabs(x2-x1)+1; dy = klabs(y2-y1)+1; - if (dx >= dy) - { - if (x2 < x1) - { - i = x1; x1 = x2; x2 = i; - i = y1; y1 = y2; y2 = i; - } - d = 0; - if (y2 > y1) pinc = bytesperline; else pinc = -bytesperline; - - begindrawing(); //{{{ - p = (y1*bytesperline)+x1+frameplace; - if (dy == 0 && drawlinepat == 0xffffffff) - { - i = ((int32_t)col<<24)|((int32_t)col<<16)|((int32_t)col<<8)|col; - clearbufbyte((void *)p, dx, i); - } - else - for (i=dx; i>0; i--) - { - if (drawlinepat & pow2long[(patc++)&31]) - drawpixel((char *)p, col); - d += dy; - if (d >= dx) { d -= dx; p += pinc; } - p++; - } - enddrawing(); //}}} - - return 1; - } - - if (y2 < y1) - { - i = x1; x1 = x2; x2 = i; - i = y1; y1 = y2; y2 = i; - } - d = 0; - if (x2 > x1) pinc = 1; else pinc = -1; - - begindrawing(); //{{{ - p = (y1*bytesperline)+x1+frameplace; - for (i=dy; i>0; i--) - { - if (drawlinepat & pow2long[(patc++)&31]) - drawpixel((char *)p, col); - d += dx; - if (d >= dy) { d -= dy; p += pinc; } - p += bytesperline; - } - enddrawing(); //}}} - - return 1; -} - -static void drawline16mid(int32_t x1, int32_t y1, int32_t x2, int32_t y2, char col) -{ - drawline16(halfxdim16+x1,midydim16+y1, halfxdim16+x2,midydim16+y2, col); -} - -// eccen: eccentricity of the ellipse, -// 16384: circle -// <16384: shrink in y -// >16384: grow in y -void drawcircle16(int32_t x1, int32_t y1, int32_t r, int32_t eccen, char col) -{ - if (eccen==16384) - { - intptr_t p; - int32_t xp, yp, xpbpl, ypbpl, d, de, dse, patc=0; - - if (r < 0) r = -r; - if (x1+r < 0 || x1-r >= xres) return; - if (y1+r < 0 || y1-r >= ydim16) return; - - /* - * d - * 6 | 7 - * \ | / - * 5 \|/ 8 - * c----+----a - * 4 /|\ 1 - * / | \ - * 3 | 2 - * b - */ - - xp = 0; - yp = r; - d = 1 - r; - de = 2; - dse = 5 - (r << 1); - - begindrawing(); - p = (y1*bytesperline)+x1+frameplace; - - if (drawlinepat & pow2long[(patc++)&31]) - { - if ((uint32_t)y1 < (uint32_t)ydim16 && (uint32_t)(x1+r) < (uint32_t)xres) - drawpixel_safe((char *)(p+r), col); // a - if ((uint32_t)x1 < (uint32_t)xres && (uint32_t)(y1+r) < (uint32_t)ydim16) - drawpixel_safe((char *)(p+(r*bytesperline)), col); // b - if ((uint32_t)y1 < (uint32_t)ydim16 && (uint32_t)(x1-r) < (uint32_t)xres) - drawpixel_safe((char *)(p-r), col); // c - if ((uint32_t)x1 < (uint32_t)xres && (uint32_t)(y1-r) < (uint32_t)ydim16) - drawpixel_safe((char *)(p-(r*bytesperline)), col); // d - } - - do - { - if (d < 0) - { - d += de; - de += 2; - dse += 2; - xp++; - } - else - { - d += dse; - de += 2; - dse += 4; - xp++; - yp--; - } - - ypbpl = yp*bytesperline; - xpbpl = xp*bytesperline; - if (drawlinepat & pow2long[(patc++)&31]) - { - if ((uint32_t)(x1+yp) < (uint32_t)xres && (uint32_t)(y1+xp) < (uint32_t)ydim16) - drawpixel_safe((char *)(p+yp+xpbpl), col); // 1 - if ((uint32_t)(x1+xp) < (uint32_t)xres && (uint32_t)(y1+yp) < (uint32_t)ydim16) - drawpixel_safe((char *)(p+xp+ypbpl), col); // 2 - if ((uint32_t)(x1-xp) < (uint32_t)xres && (uint32_t)(y1+yp) < (uint32_t)ydim16) - drawpixel_safe((char *)(p-xp+ypbpl), col); // 3 - if ((uint32_t)(x1-yp) < (uint32_t)xres && (uint32_t)(y1+xp) < (uint32_t)ydim16) - drawpixel_safe((char *)(p-yp+xpbpl), col); // 4 - if ((uint32_t)(x1-yp) < (uint32_t)xres && (uint32_t)(y1-xp) < (uint32_t)ydim16) - drawpixel_safe((char *)(p-yp-xpbpl), col); // 5 - if ((uint32_t)(x1-xp) < (uint32_t)xres && (uint32_t)(y1-yp) < (uint32_t)ydim16) - drawpixel_safe((char *)(p-xp-ypbpl), col); // 6 - if ((uint32_t)(x1+xp) < (uint32_t)xres && (uint32_t)(y1-yp) < (uint32_t)ydim16) - drawpixel_safe((char *)(p+xp-ypbpl), col); // 7 - if ((uint32_t)(x1+yp) < (uint32_t)xres && (uint32_t)(y1-xp) < (uint32_t)ydim16) - drawpixel_safe((char *)(p+yp-xpbpl), col); // 8 - } - } - while (yp > xp); - enddrawing(); - } - else - { - // JonoF's rough approximation of a circle - int32_t l,spx,spy,lpx,lpy,px,py; - - spx = lpx = x1 + mulscale14(r,sintable[0]); - spy = lpy = y1 + mulscale14(eccen, mulscale14(r,sintable[512])); - - for (l=64; l<2048; l+=64) - { - px = x1 + mulscale14(r,sintable[l]); - py = y1 + mulscale14(eccen, mulscale14(r,sintable[(l+512)&2047])); - - drawline16(lpx,lpy,px,py,col); - - lpx = px; - lpy = py; - } - - drawline16(lpx,lpy,spx,spy,col); - } -} - - -// -// qsetmode640350 -// -void qsetmode640350(void) -{ - if (qsetmode != 350) - { - if (setvideomode(640, 350, 8, fullscreen) < 0) - { - //fprintf(stderr, "Couldn't set 640x350 video mode for some reason.\n"); - return; - } - - xdim = xres; - ydim = yres; - -// setvgapalette(); - - ydim16 = 350; - halfxdim16 = 320; - midydim16 = 146; - - begindrawing(); //{{{ - clearbuf((char *)frameplace, (bytesperline*350L) >> 2, 0); - enddrawing(); //}}} - } - - qsetmode = 350; -} - - -// -// qsetmode640480 -// -void qsetmode640480(void) -{ - if (qsetmode != 480) - { - if (setvideomode(640, 480, 8, fullscreen) < 0) - { - //fprintf(stderr, "Couldn't set 640x480 video mode for some reason.\n"); - return; - } - - xdim = xres; - ydim = yres; - -// setvgapalette(); - - ydim16 = 336; - halfxdim16 = 320; - midydim16 = 200; - - begindrawing(); //{{{ - clearbuf((char *)(frameplace + (336l*bytesperline)), (bytesperline*144L) >> 2, 0x08080808l); - clearbuf((char *)frameplace, (bytesperline*336L) >> 2, 0L); - enddrawing(); //}}} - } - - qsetmode = 480; -} - - -// -// qsetmodeany -// -void qsetmodeany(int32_t daxdim, int32_t daydim) -{ - if (daxdim < 640) daxdim = 640; - if (daydim < 480) daydim = 480; - - if (qsetmode != ((daxdim<<16)|(daydim&0xffff))) - { - if (setvideomode(daxdim, daydim, 8, fullscreen) < 0) - return; - - xdim = xres; - ydim = yres; - -// setvgapalette(); - - ydim16 = yres - STATUS2DSIZ2; - halfxdim16 = xres >> 1; - midydim16 = ydim16 >> 1; // scale(200,yres,480); - - begindrawing(); //{{{ - clearbuf((char *)(frameplace + (ydim16*bytesperline)), (bytesperline*STATUS2DSIZ2) >> 2, 0x08080808l); - clearbuf((char *)frameplace, (ydim16*bytesperline) >> 2, 0L); - enddrawing(); //}}} - } - - qsetmode = ((daxdim<<16)|(daydim&0xffff)); -} - - -// -// clear2dscreen -// -void clear2dscreen(void) -{ - int32_t clearsz; - - begindrawing(); //{{{ - if (qsetmode == 350) clearsz = 350; - else - { - if (ydim16 <= yres-STATUS2DSIZ2) clearsz = yres - STATUS2DSIZ2; - else clearsz = yres; - } - clearbuf((char *)frameplace, (bytesperline*clearsz) >> 2, 0); - enddrawing(); //}}} -} - - -////////// editor side view ////////// - -inline int32_t scalescreeny(int32_t sy) -{ - if (m32_sideview) - return mulscale14(sy, m32_sidesin); - else - return sy; -} - -// return screen coordinates for BUILD coords x and y (relative to current position) -void screencoords(int32_t *xres, int32_t *yres, int32_t x, int32_t y, int32_t zoome) -{ - if (m32_sideview) - rotatepoint(0,0, x,y, m32_sideang, &x,&y); - - *xres = mulscale14(x,zoome); - *yres = scalescreeny(mulscale14(y,zoome)); -} - -#if 0 -void invscreencoords(int32_t *dx, int32_t *dy, int32_t sx, int32_t sy, int32_t zoome) -{ - if (m32_sidesin==0 || zoome==0) { *dx=0; *dy=0; return; } - - sy = divscale14(divscale14(sy, m32_sidesin), zoome); - sx = divscale14(sx, zoome); - - rotatepoint(0,0, sx,sy, -m32_sideang, dx,dy); -} -#endif - -// invscreencoords with sx==0 and sy==getscreenvdisp(dz, zoom) -int32_t getinvdisplacement(int32_t *dx, int32_t *dy, int32_t dz) -{ - if (m32_sidesin==0) - return 1; - - dz = (((int64_t)dz * (int64_t)m32_sidecos)/(int64_t)m32_sidesin)>>4; - rotatepoint(0,0, 0,dz, -m32_sideang, dx,dy); - - return 0; -} - -// return vertical screen coordinate displacement for BUILD z coord -inline int32_t getscreenvdisp(int32_t bz, int32_t zoome) -{ - return mulscale32(bz,zoome*m32_sidecos); -} - -void setup_sideview_sincos() -{ - if (m32_sideview) - { - m32_viewplane.x = 0; - m32_viewplane.y = -512; - - m32_sidesin = sintable[m32_sideelev&2047]; - m32_sidecos = sintable[(m32_sideelev+512)&2047]; - - rotatepoint(0,0, m32_viewplane.x,m32_viewplane.y, -m32_sideang, &m32_viewplane.x,&m32_viewplane.y); - m32_viewplane.x = mulscale14(m32_viewplane.x, m32_sidecos); - m32_viewplane.y = mulscale14(m32_viewplane.y, m32_sidecos); - m32_viewplane.z = m32_sidesin>>5; - } -} - -static void sideview_getdist(int16_t sw, int16_t sect) -{ - vec3_t *p; - vec3_t v; - - if (sw>1; - v.y = (wall[sw].y + wall[wall[sw].point2].y)>>1; - v.z = getflorzofslope(sect, v.x, v.y); - p = &v; - } - else - p = (vec3_t *)&sprite[sw-MAXWALLS]; - - m32_sidedist[sw] = p->x*m32_viewplane.x + p->y*m32_viewplane.y + (p->z>>4)*m32_viewplane.z; -} - -static int sideview_cmppoints(const int16_t *sw1, const int16_t *sw2) -{ - int32_t dist1 = m32_sidedist[*sw1]; - int32_t dist2 = m32_sidedist[*sw2]; - - if (dist2>dist1) - return 1; - else if (dist1>dist2) - return -1; - -// if (*sw1=0) - (wall[*sw1].nextwall>=0); - - return 0; -} - -// -// draw2dgrid -// -void draw2dgrid(int32_t posxe, int32_t posye, int32_t posze, int16_t cursectnum, int16_t ange, int32_t zoome, int16_t gride) -{ - int64_t i, xp1, yp1, xp2=0, yp2, tempy; - - UNREFERENCED_PARAMETER(ange); - - if (gride <= 0) - return; - - begindrawing(); //{{{ - - if (m32_sideview) - { - int32_t sx1,sy1, sx2,sy2, dx=0,dy=0; - int32_t xinc=0, yinc=2048>>gride, yofs; - -// yofs = getscreenvdisp((yinc-posze)&((yinc<<4)-1), zoome); - if (cursectnum<0 || cursectnum>=numsectors) - yofs = getscreenvdisp(-posze, zoome); - else - yofs = getscreenvdisp(getflorzofslope(cursectnum, posxe,posye)-posze, zoome); - - while (scalescreeny(mulscale14(yinc, zoome))==0 && gride>2) - { - gride--; - yinc = 2048>>gride; - } - - xp2 = xp1 = ((posxe+(1024>>gride))&(((int64_t)(-1))<<(11-gride))); - yp2 = yp1 = ((posye+(1024>>gride))&(((int64_t)(-1))<<(11-gride))); - - do - { - if (xinc==0) - { - screencoords(&sx1,&sy1, -editorgridextent-posxe,yp2-posye, zoome); - if (yp2 == yp1) - { - screencoords(&sx2,&sy2, editorgridextent-posxe,yp2-posye, zoome); - dx = sx2-sx1; - dy = sy2-sy1; - } - yp2 += yinc; - } - else // if (yinc==0) - { - screencoords(&sx1,&sy1, xp2-posxe, -editorgridextent-posye, zoome); - if (xp2 == xp1) - { - screencoords(&sx2,&sy2, xp2-posxe, editorgridextent-posye, zoome); - dx = sx2-sx1; - dy = sy2-sy1; - } - xp2 += xinc; - } - - i = drawline16(halfxdim16+sx1,midydim16+sy1+yofs, halfxdim16+sx1+dx,midydim16+sy1+dy+yofs, whitecol-25); - if (i==0 || (xp2<-editorgridextent || xp2>editorgridextent || - yp2<-editorgridextent || yp2>editorgridextent)) - { - xp2 = xp1; - yp2 = yp1; - - i = 1; - - if (yinc>0) - yinc *= -1; - else if (yinc<0) - { - xinc = -yinc; - yinc = 0; - } - else if (xinc>0) - xinc *= -1; - else // if (xinc<0) - i = 0; - } - } - while (i); - } - else - { - // vertical lines - yp1 = midydim16-mulscale14(posye+editorgridextent,zoome); - if (yp1 < 0) yp1 = 0; - - yp2 = midydim16-mulscale14(posye-editorgridextent,zoome); - if (yp2 >= ydim16) yp2 = ydim16-1; - - if ((yp1 < ydim16) && (yp2 >= 0) && (yp2 >= yp1)) - { - xp1 = halfxdim16-mulscale14(posxe+editorgridextent,zoome); - - for (i=-editorgridextent; i<=editorgridextent; i+=(2048>>gride)) - { - xp2 = xp1; - xp1 = halfxdim16-mulscale14(posxe-i,zoome); - - if (xp1 >= xdim) - break; - - if (xp1 >= 0) - { - if (xp1 != xp2) - drawline16(xp1,yp1,xp1,yp2,whitecol-25); - } - } - if (i >= editorgridextent && xp1 < xdim) - xp2 = xp1; - if (xp2 >= 0 && xp2 < xdim) - drawline16(xp2,yp1, xp2,yp2, whitecol-25); - } - - // horizontal lines - xp1 = mulscale14(posxe+editorgridextent,zoome); - xp2 = mulscale14(posxe-editorgridextent,zoome); - tempy = 0x80000000l; - - for (i=-editorgridextent; i<=editorgridextent; i+=(2048>>gride)) - { - yp1 = ((posye-i)*zoome)>>14; - if (yp1 != tempy) - { - if ((yp1 > midydim16-ydim16) && (yp1 <= midydim16)) - { - drawline16mid(-xp1,-yp1, -xp2,-yp1, whitecol-25); - tempy = yp1; - } - } - } - } - - enddrawing(); //}}} -} - - -static void drawscreen_drawwall(int32_t i, int32_t posxe, int32_t posye, int32_t posze, int32_t zoome) -{ - const walltype *wal = &wall[i]; - int32_t sect=0, j, x1, y1, x2, y2, dz = 0, dz2 = 0; - int32_t fz=0,fzn=0; -// intptr_t tempint; - char col; - - int64_t dist,dx,dy; - - if (editstatus == 0) - { - if ((show2dwall[i>>3]&pow2char[i&7]) == 0) return; - j = wal->nextwall; - if ((j >= 0) && (i > j)) - if ((show2dwall[j>>3]&pow2char[j&7]) > 0) return; - } - else - { - j = wal->nextwall; - if (!m32_sideview && (j >= 0) && (i > j)) return; - } - - if (j < 0) - { - col = 15; - if (i == linehighlight) - col = (totalclock & 16) ? 15 : 7; - } - else - { - col = 33; - if ((wal->cstat&1) != 0) - col = 5; - if (wal->nextwall >= 0 && ((wal->cstat^wall[j].cstat)&1)) - col = 2; - if ((i == linehighlight) || ((linehighlight >= 0) && (i == wall[linehighlight].nextwall))) - if (totalclock & 16) - col += (2<<2); - } - - screencoords(&x1,&y1, wal->x-posxe,wal->y-posye, zoome); - screencoords(&x2,&y2, wall[wal->point2].x-posxe,wall[wal->point2].y-posye, zoome); - - dx = wal->x-wall[wal->point2].x; - dy = wal->y-wall[wal->point2].y; - dist = dx*dx+dy*dy; - - if (dist > 0xffffffffll) - { - col=9; - if (i == linehighlight || ((linehighlight >= 0) && (i == wall[linehighlight].nextwall))) - if (totalclock & 16) col -= (2<<2); - } - else if (showfirstwall && searchsector>=0 && (sector[searchsector].wallptr == i || - sector[searchsector].wallptr == wall[i].nextwall)) - { - col = 14; - if (i == linehighlight) if (totalclock & 16) col -= (2<<2); - } - else if (circlewall >= 0 && (i == circlewall || wal->nextwall == circlewall)) - col = 14; - - if (m32_sideview) - { - // draw vertical line to neighboring wall - int32_t fz2; - sect = sectorofwall(i); - - fz = getflorzofslope(sect, wal->x,wal->y); - fz2 = getflorzofslope(sect, wall[wal->point2].x,wall[wal->point2].y); - - dz = getscreenvdisp(fz-posze,zoome); - dz2 = getscreenvdisp(fz2-posze,zoome); - - y1 += dz; - y2 += dz2; - - if (wal->nextwall>=0) - { - fzn = getflorzofslope(wal->nextsector, wal->x,wal->y); -// if (i < wall[j].point2) - drawline16mid(x1,y1, x1,y1+getscreenvdisp(fzn-fz,zoome), editorcolors[col]); - } - } - - if (wal->cstat&64) // if hitscan bit set - { - int32_t one=(klabs(x2-x1) >= klabs(y2-y1)), no=!one; - - drawline16mid(x1+no,y1+one, x2+no,y2+one, editorcolors[col]); - drawline16mid(x1-no,y1-one, x2-no,y2-one, editorcolors[col]); - - col += 8; - } - - drawline16mid(x1,y1, x2,y2, editorcolors[col]); - - if (showheightindicators && !m32_sideview) - { - int32_t dax,day, k=getangle(x1-x2, y1-y2); //+angofs; - - screencoords(&dax,&day, ((wal->x+wall[wal->point2].x)>>1)-posxe,((wal->y+wall[wal->point2].y)>>1)-posye, zoome); - if (m32_sideview) - day += (dz2+dz)>>1; - - if (wal->nextsector >= 0) - { - int32_t ii = sector[sectorofwall(i)].floorz; - int32_t jj = sector[wal->nextsector].floorz; - - if (jj == ii && showheightindicators > 1) - { - int32_t dax3 = mulscale11(sintable[(k+1024)&2047],zoome) / 2560; - int32_t day3 = mulscale11(sintable[(k+512)&2047],zoome) / 2560; - int32_t dax2 = mulscale11(sintable[(k+2048)&2047],zoome) / 2560; - int32_t day2 = mulscale11(sintable[(k+1536)&2047],zoome) / 2560; - - day2 = scalescreeny(day2); - day3 = scalescreeny(day3); - - drawline16mid(dax+dax3,day+day3, dax+dax2,day+day2, editorcolors[col]); - } - else - { - int32_t bb = (jj < ii); - int32_t dax2 = mulscale11(sintable[(k+1024 + 1024*bb)&2047],zoome) / 2560; - int32_t day2 = mulscale11(sintable[(k+512 + 1024*bb)&2047],zoome) / 2560; - - day2 = scalescreeny(day2); - drawline16mid(dax,day, dax+dax2,day+day2, editorcolors[col]); - } - } - else if (showheightindicators > 1) - { - int32_t dax2 = mulscale11(sintable[(k+2048)&2047],zoome) / 2560; - int32_t day2 = mulscale11(sintable[(k+1536)&2047],zoome) / 2560; - - day2 = scalescreeny(day2); - drawline16mid(dax,day, dax+dax2,day+day2, editorcolors[col]); - } - } - - if (zoome >= 256 && editstatus == 1) - if ((halfxdim16+x1 >= 2) && (halfxdim16+x1 <= xdim-3) && - (midydim16+y1 >= 2) && (midydim16+y1 <= ydim16-3)) - { - int32_t pointsize = 2; - - if (i == pointhighlight || ((pointhighlight < MAXWALLS) && (pointhighlight >= 0) && - (wall[i].x == wall[pointhighlight].x) && (wall[i].y == wall[pointhighlight].y))) - { - if (totalclock & 16) - pointsize++; - } - else //if (highlightcnt > 0) - { - if (show2dwall[i>>3]&pow2char[i&7]) - { - if (totalclock & 16) - pointsize++; - } - } - - col = 15; - if (m32_sideview) - { - if (wal->nextwall >= 0) - { - if (fz < fzn) - col = 7; - else if (fz == fzn) - col = 4; - } - } - -// tempint = ((midydim16+y1)*bytesperline)+(halfxdim16+x1)+frameplace; - do - drawcircle16(halfxdim16+x1, midydim16+y1, pointsize--, 16384, editorcolors[col]); - while (pointsize); - } -} - -static void drawscreen_drawsprite(int32_t j, int32_t posxe, int32_t posye, int32_t posze, int32_t zoome) -{ - int32_t x1, y1, x2, y2; - char col; - int16_t hitblocking=(sprite[j].cstat&256), flooraligned=(sprite[j].cstat&32), wallaligned=(sprite[j].cstat&16); - - int16_t angofs = m32_sideview ? m32_sideang : 0; - - if (sprite[j].sectnum<0) - col = 4; // red - else - { - col = 3; - if (spritecol2d[sprite[j].picnum][0]) - col = spritecol2d[sprite[j].picnum][0]; - else if ((sprite[j].cstat&1) > 0) - { - col = 5; - if (spritecol2d[sprite[j].picnum][1]) - col = spritecol2d[sprite[j].picnum][1]; - } - } - - if (editstatus == 1) - { - if ((pointhighlight) >= 16384 && (j+16384 == pointhighlight || - (!m32_sideview && ((sprite[j].x == sprite[pointhighlight-16384].x) && - (sprite[j].y == sprite[pointhighlight-16384].y))))) - { - if (totalclock & 32) col += 8; - } - else // if (highlightcnt > 0) - { - if (show2dsprite[j>>3]&pow2char[j&7]) - if (totalclock & 32) col += 8; - } - } - - screencoords(&x1,&y1, sprite[j].x-posxe,sprite[j].y-posye, zoome); -// tempint = ((midydim16+y1)*bytesperline)+(halfxdim16+x1)+frameplace; - - if (m32_sideview) - y1 += getscreenvdisp(sprite[j].z-posze,zoome); - - if ((halfxdim16+x1 >= 0) && (halfxdim16+x1 < xdim) && - (midydim16+y1 >= 0) && (midydim16+y1 < ydim16)) - { - drawcircle16(halfxdim16+x1, midydim16+y1, 4, 16384, editorcolors[col]); - - x2 = mulscale11(sintable[(sprite[j].ang+angofs+2560)&2047],zoome) / 768; - y2 = mulscale11(sintable[(sprite[j].ang+angofs+2048)&2047],zoome) / 768; - y2 = scalescreeny(y2); - - drawline16mid(x1,y1, x1+x2,y1+y2, editorcolors[col]); - - if (hitblocking) - { - drawline16mid(x1,y1+1, x1+x2,y1+y2+1, editorcolors[col]); - drawline16mid(x1,y1-1, x1+x2,y1+y2-1, editorcolors[col]); - drawline16mid(x1-1,y1, x1+x2-1,y1+y2, editorcolors[col]); - drawline16mid(x1+1,y1, x1+x2+1,y1+y2, editorcolors[col]); - } - - if (flooraligned) - { - int32_t fx = mulscale10(mulscale6(tilesizx[sprite[j].picnum], sprite[j].xrepeat),zoome) >> 1; - int32_t fy = mulscale10(mulscale6(tilesizy[sprite[j].picnum], sprite[j].yrepeat),zoome) >> 1; - int32_t co[4][2], ii, in; - int32_t sinang = sintable[(sprite[j].ang+angofs+1536)&2047]; - int32_t cosang = sintable[(sprite[j].ang+angofs+1024)&2047]; - int32_t r,s; - - co[0][0] = co[3][0] = -fx; - co[0][1] = co[1][1] = -fy; - co[1][0] = co[2][0] = fx; - co[2][1] = co[3][1] = fy; - - for (ii=3; ii>=0; ii--) - { - r = mulscale14(cosang,co[ii][0]) - mulscale14(sinang,co[ii][1]); - s = mulscale14(sinang,co[ii][0]) + mulscale14(cosang,co[ii][1]); - s = scalescreeny(s); - co[ii][0] = r; - co[ii][1] = s; - } - drawlinepat = 0xcfcfcfcf; - for (ii=3; ii>=0; ii--) - { - in = (ii+1)&3; - drawline16mid(x1+co[ii][0], y1-co[ii][1], x1+co[in][0], y1-co[in][1], editorcolors[col]); - if (hitblocking) - { - drawline16mid(x1+co[ii][0], y1-co[ii][1]+1, x1+co[in][0], y1-co[in][1]+1, editorcolors[col]); - drawline16mid(x1+co[ii][0], y1-co[ii][1]-1, x1+co[in][0], y1-co[in][1]-1, editorcolors[col]); - drawline16mid(x1+co[ii][0]+1, y1-co[ii][1], x1+co[in][0]+1, y1-co[in][1], editorcolors[col]); - drawline16mid(x1+co[ii][0]-1, y1-co[ii][1], x1+co[in][0]-1, y1-co[in][1], editorcolors[col]); - } - drawline16mid(x1, y1, x1 + co[in][0], y1 - co[in][1], editorcolors[col]); - } - drawlinepat = 0xffffffff; - } - else if (wallaligned) - { - int32_t fx = mulscale6(tilesizx[sprite[j].picnum], sprite[j].xrepeat); - int32_t one=(((sprite[j].ang+angofs+256)&512) == 0), no=!one; - - x2 = mulscale11(sintable[(sprite[j].ang+angofs+2560)&2047],zoome) / 6144; - y2 = mulscale11(sintable[(sprite[j].ang+angofs+2048)&2047],zoome) / 6144; - y2 = scalescreeny(y2); - - drawline16mid(x1,y1, x1+x2,y1+y2, editorcolors[col]); - if (!(sprite[j].cstat&64)) // not 1-sided - { - drawline16mid(x1,y1, x1-x2,y1-y2, editorcolors[col]); - if (hitblocking) - { - drawline16mid(x1-no,y1-one, x1-x2-no,y1-y2-one, editorcolors[col]); - drawline16mid(x1+no,y1+one, x1-x2+no,y1-y2+one, editorcolors[col]); - } - } - - if (hitblocking) - { - drawline16mid(x1-no,y1-one, x1+x2-no,y1+y2-one, editorcolors[col]); - drawline16mid(x1+no,y1+one, x1+x2+no,y1+y2+one, editorcolors[col]); - } - - - x2 = mulscale13(sintable[(sprite[j].ang+angofs+1024)&2047],zoome) * fx / 4096; - y2 = mulscale13(sintable[(sprite[j].ang+angofs+512)&2047],zoome) * fx / 4096; - y2 = scalescreeny(y2); - - drawline16mid(x1,y1, x1-x2,y1-y2, editorcolors[col]); - drawline16mid(x1,y1, x1+x2,y1+y2, editorcolors[col]); - - if (hitblocking) - { - drawline16mid(x1+1,y1, x1+x2+1,y1+y2, editorcolors[col]); - drawline16mid(x1-1,y1, x1-x2-1,y1-y2, editorcolors[col]); - drawline16mid(x1-1,y1, x1+x2-1,y1+y2, editorcolors[col]); - drawline16mid(x1+1,y1, x1-x2+1,y1-y2, editorcolors[col]); - - drawline16mid(x1,y1-1, x1+x2,y1+y2-1, editorcolors[col]); - drawline16mid(x1,y1+1, x1-x2,y1-y2+1, editorcolors[col]); - drawline16mid(x1,y1+1, x1+x2,y1+y2+1, editorcolors[col]); - drawline16mid(x1,y1-1, x1-x2,y1-y2-1, editorcolors[col]); - } - } - } -} - -// -// draw2dscreen -// -void draw2dscreen(const vec3_t *pos, int16_t cursectnum, int16_t ange, int32_t zoome, int16_t gride) -{ - int32_t i, j, x1, y1; - int16_t angofs = m32_sideview ? m32_sideang : 0; - - int32_t posxe=pos->x, posye=pos->y, posze=pos->z; - - if (qsetmode == 200) return; - - setup_sideview_sincos(); - if (m32_sideview && !m32_wallsprite) - { - m32_wallsprite = Bmalloc((MAXWALLS+MAXSPRITES)*sizeof(int16_t)); - m32_sidedist = Bmalloc((MAXWALLS+MAXSPRITES)*sizeof(m32_sidedist[0])); - if (!m32_wallsprite || !m32_sidedist) - { - if (m32_wallsprite) Bfree(m32_wallsprite); - if (m32_sidedist) { Bfree(m32_sidedist); m32_sidedist=NULL; } - initprintf("out of memory!"); - m32_sideview = 0; - } - } - - begindrawing(); //{{{ - - - if (editstatus == 0) - { -// faketimerhandler(); - clear2dscreen(); - -// faketimerhandler(); - draw2dgrid(posxe,posye,posze,cursectnum,ange,zoome,gride); - } - - faketimerhandler(); - - m32_swcnt = 0; - - if (!m32_sideview) - for (i=numwalls-1; i>=0; i--) - drawscreen_drawwall(i,posxe,posye,posze,zoome); - else - { - for (i=0; i= 256 || editstatus == 0) - for (j=0; j>3]&pow2char[j&7]))) - { - if (!m32_sideview) - drawscreen_drawsprite(j,posxe,posye,posze,zoome); - else - { - m32_wallsprite[m32_swcnt++] = MAXWALLS+j; - sideview_getdist(MAXWALLS+j, -1); - } - } - - faketimerhandler(); - - if (m32_sideview) - { - qsort(m32_wallsprite, m32_swcnt, sizeof(int16_t), (int( *)(const void *, const void *))&sideview_cmppoints); - - for (i=0; i7) - return 0; - } - else if (ypos+7 >= ydim) - { - ymax = ydim-ypos-1; - if (ymax<0) - return 0; - } - - if (fontsize & 2) printext16(xpos+1, ypos+1, 0, -1, name, (fontsize & ~2) | 4); - if (fontsize & 1) { fontptr = smalltextfont; charxsiz = 4; } - else { fontptr = textfont; charxsiz = 8; } - - begindrawing(); //{{{ - for (i=0; name[i]; i++) - { - if (name[i] == '^') - { - i++; - if (name[i] == 'O') // ^O resets formatting - { - if (fontsize & 4) continue; - - col = ocol; - backcol = obackcol; - continue; - } - if (isdigit(name[i])) - { - if (isdigit(name[i+1])) - { - if (isdigit(name[i+2])) - { - Bmemcpy(&smallbuf[0],&name[i],3); - i += 2; - smallbuf[3] = '\0'; - } - else - { - Bmemcpy(&smallbuf[0],&name[i],2); - i++; - smallbuf[2] = '\0'; - } - } - else - { - smallbuf[0] = name[i]; - smallbuf[1] = '\0'; - } - if (!(fontsize & 4)) - col = editorcolors[atol(smallbuf)]; - - if (name[i+1] == ',' && isdigit(name[i+2])) - { - i+=2; - if (isdigit(name[i+1])) - { - if (isdigit(name[i+2])) - { - Bmemcpy(&smallbuf[0],&name[i],3); - i += 2; - smallbuf[3] = '\0'; - } - else - { - Bmemcpy(&smallbuf[0],&name[i],2); - i++; - smallbuf[2] = '\0'; - } - } - else - { - smallbuf[0] = name[i]; - smallbuf[1] = '\0'; - } - - if (!(fontsize & 4)) - backcol = editorcolors[atol(smallbuf)]; - } - continue; - } - } - - if (stx<0) - { - stx += charxsiz; - continue; - } - - letptr = &fontptr[name[i]<<3]; - ptr = (char *)(bytesperline*ypos + (stx-(fontsize&1)) + frameplace); - for (y=ymin; y<=ymax; y++) - { - for (x=0; x= xdim) - break; - if (letptr[y]&pow2char[7-(fontsize&1)-x]) - ptr[x] = (uint8_t)col; - else if (backcol >= 0) - ptr[x] = (uint8_t)backcol; - } - ptr += bytesperline; - } - stx += charxsiz; - if (stx >= xdim) - break; - } - enddrawing(); //}}} - - return stx; -} - - -// -// printext256 -// -void printext256(int32_t xpos, int32_t ypos, int16_t col, int16_t backcol, const char *name, char fontsize) -{ - int32_t stx, i, x, y, charxsiz; - char *fontptr, *letptr, *ptr; - - stx = xpos; - - if (fontsize) { fontptr = smalltextfont; charxsiz = 4; } - else { fontptr = textfont; charxsiz = 8; } - -#ifdef USE_OPENGL - if (!polymost_printext256(xpos,ypos,col,backcol,name,fontsize)) return; - - if (rendmode >= 3 && qsetmode == 200) - { - int32_t xx, yy; - int32_t lc=-1; - palette_t p=getpal(col), b=getpal(backcol); - - setpolymost2dview(); - bglDisable(GL_ALPHA_TEST); - bglDepthMask(GL_FALSE); // disable writing to the z-buffer - - bglBegin(GL_POINTS); - - for (i=0; name[i]; i++) - { - if (name[i] == '^' && isdigit(name[i+1])) - { - char smallbuf[8]; - int32_t bi=0; - - while (isdigit(name[i+1]) && bi<8) - { - smallbuf[bi++]=name[i+1]; - i++; - } - smallbuf[bi++]=0; - if (col) - col = atol(smallbuf); - - p = getpal(col); - - continue; - } - letptr = &fontptr[name[i]<<3]; - xx = stx-fontsize; - yy = ypos+7 + 2; //+1 is hack! - for (y=7; y>=0; y--) - { - for (x=charxsiz-1; x>=0; x--) - { - if (letptr[y]&pow2char[7-fontsize-x]) - { - if (lc!=col) - bglColor4ub(p.r,p.g,p.b,255); - lc = col; - bglVertex2i(xx+x,yy); - } - else if (backcol >= 0) - { - if (lc!=backcol) - bglColor4ub(b.r,b.g,b.b,255); - lc = backcol; - bglVertex2i(xx+x,yy); - } - } - yy--; - } - stx += charxsiz; - } - - bglEnd(); - bglDepthMask(GL_TRUE); // re-enable writing to the z-buffer - - return; - } -#endif - - begindrawing(); //{{{ - for (i=0; name[i]; i++) - { - if (name[i] == '^' && isdigit(name[i+1])) - { - char smallbuf[8]; - int32_t bi=0; - while (isdigit(name[i+1]) && bi<8) - { - smallbuf[bi++]=name[i+1]; - i++; - } - smallbuf[bi++]=0; - if (col)col = atol(smallbuf); - continue; - } - letptr = &fontptr[name[i]<<3]; - ptr = (char *)(ylookup[ypos+7]+(stx-fontsize)+frameplace); - for (y=7; y>=0; y--) - { - for (x=charxsiz-1; x>=0; x--) - { - if (letptr[y]&pow2char[7-fontsize-x]) - ptr[x] = (uint8_t)col; - else if (backcol >= 0) - ptr[x] = (uint8_t)backcol; - } - ptr -= ylookup[1]; - } - stx += charxsiz; - } - enddrawing(); //}}} -} - - -// -// screencapture -// -int32_t screencapture_tga(const char *filename, char inverseit) -{ - int32_t i,j; - char *ptr, head[18] = { 0,1,1,0,0,0,1,24,0,0,0,0,0/*wlo*/,0/*whi*/,0/*hlo*/,0/*hhi*/,8,0 }; - //char palette[4*256]; - char *fn = Bstrdup(filename), *inversebuf; - BFILE *fil; - - do // JBF 2004022: So we don't overwrite existing screenshots - { - if (capturecount > 9999) return -1; - - i = Bstrrchr(fn,'.')-fn-4; - fn[i++] = ((capturecount/1000)%10)+48; - fn[i++] = ((capturecount/100)%10)+48; - fn[i++] = ((capturecount/10)%10)+48; - fn[i++] = (capturecount%10)+48; - i++; - fn[i++] = 't'; - fn[i++] = 'g'; - fn[i++] = 'a'; - - if ((fil = Bfopen(fn,"rb")) == NULL) break; - Bfclose(fil); - capturecount++; - } - while (1); - fil = Bfopen(fn,"wb"); - if (fil == NULL) - { - Bfree(fn); - return -1; - } - -#ifdef USE_OPENGL - if (rendmode >= 3 && qsetmode == 200) - { - head[1] = 0; // no colourmap - head[2] = 2; // uncompressed truecolour - head[3] = 0; // (low) first colourmap index - head[4] = 0; // (high) first colourmap index - head[5] = 0; // (low) number colourmap entries - head[6] = 0; // (high) number colourmap entries - head[7] = 0; // colourmap entry size - head[16] = 24; // 24 bits per pixel - } -#endif - - head[12] = xdim & 0xff; - head[13] = (xdim >> 8) & 0xff; - head[14] = ydim & 0xff; - head[15] = (ydim >> 8) & 0xff; - - Bfwrite(head, 18, 1, fil); - - begindrawing(); //{{{ - ptr = (char *)frameplace; - - // palette first -#ifdef USE_OPENGL - if (rendmode < 3 || (rendmode >= 3 && qsetmode != 200)) - { -#endif - //getpalette(0,256,palette); - for (i=0; i<256; i++) - { - Bfputc(curpalettefaded[i].b, fil); // b - Bfputc(curpalettefaded[i].g, fil); // g - Bfputc(curpalettefaded[i].r, fil); // r - } -#ifdef USE_OPENGL - } -#endif - - // targa renders bottom to top, from left to right - if (inverseit && qsetmode != 200) - { - inversebuf = (char *)Bmalloc(bytesperline); - if (inversebuf) - { - for (i=ydim-1; i>=0; i--) - { - copybuf(ptr+i*bytesperline, inversebuf, xdim >> 2); - for (j=0; j < (bytesperline>>2); j++)((int32_t *)inversebuf)[j] ^= 0x0f0f0f0fL; - Bfwrite(inversebuf, xdim, 1, fil); - } - Bfree(inversebuf); - } - } - else - { -#ifdef USE_OPENGL - if (rendmode >= 3 && qsetmode == 200) - { - char c; - // 24bit - inversebuf = (char *)Bmalloc(xdim*ydim*3); - if (inversebuf) - { - bglReadPixels(0,0,xdim,ydim,GL_RGB,GL_UNSIGNED_BYTE,inversebuf); - j = xdim*ydim*3; - for (i=0; i=0; i--) - Bfwrite(ptr+i*bytesperline, xdim, 1, fil); -#ifdef USE_OPENGL - } -#endif - } - - enddrawing(); //}}} - - Bfclose(fil); - OSD_Printf("Saved screenshot to %s\n", fn); - Bfree(fn); - capturecount++; - return(0); -} - -// PCX is nasty, which is why I've lifted these functions from the PCX spec by ZSoft -static int32_t writepcxbyte(char colour, char count, BFILE *fp) -{ - if (!count) return 0; - if (count == 1 && (colour & 0xc0) != 0xc0) - { - Bfputc(colour, fp); - return 1; - } - else - { - Bfputc(0xc0 | count, fp); - Bfputc(colour, fp); - return 2; - } -} - -static void writepcxline(char *buf, int32_t bytes, int32_t step, BFILE *fp) -{ - char ths, last; - int32_t srcIndex; - char runCount; - - runCount = 1; - last = *buf; - - for (srcIndex=1; srcIndex 9999) return -1; - - i = Bstrrchr(fn,'.')-fn-4; - fn[i++] = ((capturecount/1000)%10)+48; - fn[i++] = ((capturecount/100)%10)+48; - fn[i++] = ((capturecount/10)%10)+48; - fn[i++] = (capturecount%10)+48; - i++; - fn[i++] = 'p'; - fn[i++] = 'c'; - fn[i++] = 'x'; - - if ((fil = Bfopen(fn,"rb")) == NULL) break; - Bfclose(fil); - capturecount++; - } - while (1); - fil = Bfopen(fn,"wb"); - if (fil == NULL) - { - Bfree(fn); - return -1; - } - - memset(head,0,128); - head[0] = 10; - head[1] = 5; - head[2] = 1; - head[3] = 8; - head[12] = 72; head[13] = 0; - head[14] = 72; head[15] = 0; - head[65] = 1; // 8-bit - head[68] = 1; - -#ifdef USE_OPENGL - if (rendmode >= 3 && qsetmode == 200) - { - head[65] = 3; // 24-bit - } -#endif - - head[8] = (xdim-1) & 0xff; - head[9] = ((xdim-1) >> 8) & 0xff; - head[10] = (ydim-1) & 0xff; - head[11] = ((ydim-1) >> 8) & 0xff; - - bpl = xdim + (xdim&1); - - head[66] = bpl & 0xff; - head[67] = (bpl >> 8) & 0xff; - - Bfwrite(head, 128, 1, fil); - - begindrawing(); //{{{ - ptr = (char *)frameplace; - - // targa renders bottom to top, from left to right - if (inverseit && qsetmode != 200) - { - inversebuf = (char *)Bmalloc(bytesperline); - if (inversebuf) - { - for (i=0; i> 2); - for (j=0; j < (bytesperline>>2); j++)((int32_t *)inversebuf)[j] ^= 0x0f0f0f0fL; - writepcxline(inversebuf, xdim, 1, fil); - } - Bfree(inversebuf); - } - } - else - { -#ifdef USE_OPENGL - if (rendmode >= 3 && qsetmode == 200) - { - // 24bit - inversebuf = (char *)Bmalloc(xdim*ydim*3); - if (inversebuf) - { - bglReadPixels(0,0,xdim,ydim,GL_RGB,GL_UNSIGNED_BYTE,inversebuf); - for (i=ydim-1; i>=0; i--) - { - writepcxline(inversebuf+i*xdim*3, xdim, 3, fil); - writepcxline(inversebuf+i*xdim*3+1, xdim, 3, fil); - writepcxline(inversebuf+i*xdim*3+2, xdim, 3, fil); - } - Bfree(inversebuf); - } - } - else - { -#endif - for (i=0; i= 3 && qsetmode != 200)) - { -#endif - //getpalette(0,256,palette); - Bfputc(12,fil); - for (i=0; i<256; i++) - { - Bfputc(curpalettefaded[i].r, fil); // b - Bfputc(curpalettefaded[i].g, fil); // g - Bfputc(curpalettefaded[i].b, fil); // r - } -#ifdef USE_OPENGL - } -#endif - - Bfclose(fil); - OSD_Printf("Saved screenshot to %s\n", fn); - Bfree(fn); - capturecount++; - return(0); -} - -int32_t screencapture(const char *filename, char inverseit) -{ - if (captureformat == 0) return screencapture_tga(filename,inverseit); - else return screencapture_pcx(filename,inverseit); -} - - - -// -// setrendermode -// -int32_t setrendermode(int32_t renderer) -{ - UNREFERENCED_PARAMETER(renderer); -#ifdef USE_OPENGL - if (bpp == 8) renderer = 0; -# ifdef POLYMER - else renderer = min(4,max(3,renderer)); - - if (renderer == 4) - { - int32_t i; - - // potentially deferred MD3 postprocessing - for (i=0; imdnum==3 && ((md3model_t *)models[i])->head.surfs[0].geometry == NULL) - { - static int32_t warned=0; - - if (!warned) - { - OSD_Printf("Post-processing MD3 models for Polymer. This can take a while...\n"); - nextpage(); - warned = 1; - } - - if (!md3postload_polymer((md3model_t *)models[i])) - OSD_Printf("INTERNAL ERROR: mdmodel %d failed postprocessing!\n", i); - - if (((md3model_t *)models[i])->head.surfs[0].geometry == NULL) - OSD_Printf("INTERNAL ERROR: wtf?\n"); - } -// else -// OSD_Printf("mdmodel %d already postprocessed.\n", i); - } - - if (!polymer_init()) - renderer = 3; - } -# else - else renderer = 3; -# endif - - rendmode = renderer; - if (rendmode >= 3) - glrendmode = rendmode; -#endif - - return 0; -} - -// -// setrollangle -// -#ifdef USE_OPENGL -void setrollangle(int32_t rolla) -{ - UNREFERENCED_PARAMETER(rolla); - if (rolla == 0) gtang = 0.0; - else gtang = PI * (double)rolla / 1024.0; -} -#endif - - -// -// invalidatetile -// pal: pass -1 to invalidate all palettes for the tile, or >=0 for a particular palette -// how: pass -1 to invalidate all instances of the tile in texture memory, or a bitfield -// bit 0: opaque or masked (non-translucent) texture, using repeating -// bit 1: ignored -// bit 2: ignored (33% translucence, using repeating) -// bit 3: ignored (67% translucence, using repeating) -// bit 4: opaque or masked (non-translucent) texture, using clamping -// bit 5: ignored -// bit 6: ignored (33% translucence, using clamping) -// bit 7: ignored (67% translucence, using clamping) -// clamping is for sprites, repeating is for walls -// -void invalidatetile(int16_t tilenume, int32_t pal, int32_t how) -{ -#ifdef USE_OPENGL - int32_t numpal, firstpal, np; - int32_t hp; - - if (rendmode < 3) return; - - if (pal < 0) - { - numpal = MAXPALOOKUPS; - firstpal = 0; - } - else - { - numpal = 1; - firstpal = pal % MAXPALOOKUPS; - } - - for (hp = 0; hp < 8; hp+=4) - { - if (!(how & pow2long[hp])) continue; - - for (np = firstpal; np < firstpal+numpal; np++) - { - gltexinvalidate(tilenume, np, hp); - } - } -#endif - UNREFERENCED_PARAMETER(tilenume); - UNREFERENCED_PARAMETER(pal); - UNREFERENCED_PARAMETER(how); -} - - -// -// setpolymost2dview -// Sets OpenGL for 2D drawing -// -void setpolymost2dview(void) -{ -#ifdef USE_OPENGL - if (rendmode < 3) return; - - if (gloy1 != -1) - { - bglViewport(0,0,xres,yres); - bglMatrixMode(GL_PROJECTION); - bglLoadIdentity(); - bglOrtho(0,xres,yres,0,-1,1); - bglMatrixMode(GL_MODELVIEW); - bglLoadIdentity(); - } - - gloy1 = -1; - - bglDisable(GL_DEPTH_TEST); - bglDisable(GL_TEXTURE_2D); - bglDisable(GL_BLEND); -#endif -} - -void hash_init(hashtable_t *t) -{ - hash_free(t); - t->items=Bcalloc(1, t->size * sizeof(hashitem_t)); -} - -void hash_free(hashtable_t *t) -{ - hashitem_t *cur, *tmp; - int32_t i; - int32_t num; - - if (t->items == NULL) - return; -// initprintf("*free, num:%d\n",t->size); - i= t->size-1; - do - { - cur = t->items[i]; - num = 0; - while (cur) - { - tmp = cur; - cur = cur->next; -// initprintf("Free %4d '%s'\n",tmp->key,(tmp->string)?tmp->string:"."); - if (tmp->string) - { - Bfree(tmp->string); - tmp->string = NULL; - } - Bfree(tmp); - num++; - } -// initprintf("#%4d: %3d\t",i,num); - } - while (--i > -1); - Bfree(t->items); - t->items = 0; -} - -// djb3 algorithm -static inline uint32_t hash_getcode(const char *s) -{ - uint32_t h = 5381; - int32_t ch; - - while ((ch = *s++) != '\0') - h = ((h << 5) + h) ^ ch; - - return h; -} - -void hash_add(hashtable_t *t, const char *s, int32_t key, int32_t replace) -{ - hashitem_t *cur, *prev=NULL; - int32_t code; - - if (t->items == NULL) - { - initprintf("hash_replace(): table not initialized!\n"); - return; - } - - code = hash_getcode(s) % t->size; - cur = t->items[code]; - - if (!cur) - { - cur = (hashitem_t *)Bcalloc(1,sizeof(hashitem_t)); - cur->string = Bstrdup(s); - cur->key = key; - cur->next = NULL; - t->items[code] = cur; - return; - } - - do - { - if (Bstrcmp(s,cur->string) == 0) - { - if (replace) cur->key = key; - return; - } - prev = cur; - } - while ((cur = cur->next)); - - cur = (hashitem_t *)Bcalloc(1,sizeof(hashitem_t)); - cur->string = Bstrdup(s); - cur->key = key; - cur->next = NULL; - prev->next = cur; -} - -int32_t hash_find(hashtable_t *t, const char *s) -{ - hashitem_t *cur; - - if (t->items == NULL) - { - initprintf("hash_find(): table not initialized!\n"); - return -1; - } - - if ((cur = t->items[hash_getcode(s) % t->size]) == NULL) return -1; - - do - if (Bstrcmp(s,cur->string) == 0) - return cur->key; - while ((cur = cur->next)); - - return -1; -} - -int32_t hash_findcase(hashtable_t *t, const char *s) -{ - hashitem_t *cur; - - if (t->items == NULL) - { - initprintf("hash_findcase(): table not initialized!\n"); - return -1; - } - - if ((cur=t->items[hash_getcode(s)%t->size]) == NULL) return -1; - - do - if (Bstrcasecmp(s,cur->string) == 0) - return cur->key; - while ((cur=cur->next)); - - return -1; -} - -/* - * vim:ts=8: - */ - diff --git a/polymer-perf/eduke32/build/src/engine_priv.h b/polymer-perf/eduke32/build/src/engine_priv.h deleted file mode 100644 index 579150e5f..000000000 --- a/polymer-perf/eduke32/build/src/engine_priv.h +++ /dev/null @@ -1,120 +0,0 @@ -#ifndef ENGINE_PRIV_H -#define ENGINE_PRIV_H - -#define MAXCLIPNUM 1024 -#define MAXPERMS 512 -#define MAXTILEFILES 256 -#define MAXYSAVES ((MAXXDIM*MAXSPRITES)>>7) -#define MAXNODESPERLINE 42 //Warning: This depends on MAXYSAVES & MAXYDIM! -#define MAXCLIPDIST 1024 - -extern uint8_t **basepaltableptr; -extern uint8_t basepalcount; -extern uint8_t curbasepal; - -extern char pow2char[8]; -extern int32_t pow2int[32]; - -extern int16_t thesector[MAXWALLSB], thewall[MAXWALLSB]; -extern int16_t bunchfirst[MAXWALLSB], bunchlast[MAXWALLSB]; -extern int16_t maskwall[MAXWALLSB], maskwallcnt; -extern spritetype *tspriteptr[MAXSPRITESONSCREEN + 1]; -extern int32_t xdimen, xdimenrecip, halfxdimen, xdimenscale, xdimscale, ydimen; -extern intptr_t frameoffset; -extern int32_t globalposx, globalposy, globalposz, globalhoriz; -extern int16_t globalang, globalcursectnum; -extern int32_t globalpal, cosglobalang, singlobalang; -extern int32_t cosviewingrangeglobalang, sinviewingrangeglobalang; -extern int32_t globalvisibility; -extern int32_t xyaspect; -extern intptr_t asm1, asm2, asm3, asm4; -extern int32_t globalshade; -extern int16_t globalpicnum; -extern int32_t globalx1, globaly2; -extern int32_t globalorientation; - -extern int16_t searchit; -extern int32_t searchx, searchy; -extern int16_t searchsector, searchwall, searchstat; -extern int16_t searchbottomwall; - -extern char inpreparemirror; - -extern int32_t curbrightness, gammabrightness; -extern char britable[16][256]; -extern char picsiz[MAXTILES]; -extern int32_t lastx[MAXYDIM]; -extern char *transluc; -extern int16_t sectorborder[256], sectorbordercnt; -extern int32_t qsetmode; -extern int32_t hitallsprites; - -extern int32_t xb1[MAXWALLSB]; -extern int32_t rx1[MAXWALLSB], ry1[MAXWALLSB]; -extern int16_t p2[MAXWALLSB]; -extern int16_t numscans, numhits, numbunches; - -#ifdef USE_OPENGL -extern palette_t palookupfog[MAXPALOOKUPS]; -#endif - -// int32_t wallmost(int16_t *mostbuf, int32_t w, int32_t sectnum, char dastat); -int32_t wallfront(int32_t l1, int32_t l2); -int32_t animateoffs(int16_t tilenum, int16_t fakevar); - -extern int32_t indrawroomsandmasks; - - -#if defined(_MSC_VER) && !defined(NOASM) - -static inline void setgotpic(int32_t a) -{ - _asm { - push ebx - mov eax, a - mov ebx, eax - cmp byte ptr walock[eax], 200 - jae skipit - mov byte ptr walock[eax], 199 -skipit: - shr eax, 3 - and ebx, 7 - mov dl, byte ptr gotpic[eax] - mov bl, byte ptr pow2char[ebx] - or dl, bl - mov byte ptr gotpic[eax], dl - pop ebx - } -} - -#elif defined(__GNUC__) && defined(__i386__) && !defined(NOASM) // _MSC_VER - -#define setgotpic(a) \ -({ int32_t __a=(a); \ - __asm__ __volatile__ ( \ - "movl %%eax, %%ebx\n\t" \ - "cmpb $200, "ASMSYM("walock")"(%%eax)\n\t" \ - "jae 0f\n\t" \ - "movb $199, "ASMSYM("walock")"(%%eax)\n\t" \ - "0:\n\t" \ - "shrl $3, %%eax\n\t" \ - "andl $7, %%ebx\n\t" \ - "movb "ASMSYM("gotpic")"(%%eax), %%dl\n\t" \ - "movb "ASMSYM("pow2char")"(%%ebx), %%bl\n\t" \ - "orb %%bl, %%dl\n\t" \ - "movb %%dl, "ASMSYM("gotpic")"(%%eax)" \ - : "=a" (__a) : "a" (__a) \ - : "ebx", "edx", "memory", "cc"); \ - __a; }) - -#else // __GNUC__ && __i386__ - -static inline void setgotpic(int32_t tilenume) -{ - if (walock[tilenume] < 200) walock[tilenume] = 199; - gotpic[tilenume>>3] |= pow2char[tilenume&7]; -} - -#endif - -#endif /* ENGINE_PRIV_H */ diff --git a/polymer-perf/eduke32/build/src/glbuild.c b/polymer-perf/eduke32/build/src/glbuild.c deleted file mode 100644 index fd5644f4d..000000000 --- a/polymer-perf/eduke32/build/src/glbuild.c +++ /dev/null @@ -1,1000 +0,0 @@ -#include "compat.h" -#include "glbuild.h" -#include "baselayer.h" -#include -#include -#include - -#if defined USE_OPENGL - -#ifdef RENDERTYPESDL -#include "sdl_inc.h" -#endif - -void (APIENTRY *bglClearColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -void (APIENTRY *bglClear)(GLbitfield mask); -void (APIENTRY *bglColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -void (APIENTRY *bglAlphaFunc)(GLenum func, GLclampf ref); -void (APIENTRY *bglBlendFunc)(GLenum sfactor, GLenum dfactor); -void (APIENTRY *bglCullFace)(GLenum mode); -void (APIENTRY *bglFrontFace)(GLenum mode); -void (APIENTRY *bglPolygonOffset)(GLfloat factor, GLfloat units); -void (APIENTRY *bglPolygonMode)(GLenum face, GLenum mode); -void (APIENTRY *bglEnable)(GLenum cap); -void (APIENTRY *bglDisable)(GLenum cap); -void (APIENTRY *bglGetDoublev)(GLenum pname, GLdouble *params); -void (APIENTRY *bglGetFloatv)(GLenum pname, GLfloat *params); -void (APIENTRY *bglGetIntegerv)(GLenum pname, GLint *params); -void (APIENTRY *bglPushAttrib)(GLbitfield mask); -void (APIENTRY *bglPopAttrib)(void); -GLenum(APIENTRY *bglGetError)(void); -const GLubyte *(APIENTRY *bglGetString)(GLenum name); -void (APIENTRY *bglHint)(GLenum target, GLenum mode); -void (APIENTRY *bglDrawBuffer)(GLenum mode); -void (APIENTRY *bglReadBuffer)(GLenum mode); -void (APIENTRY *bglScissor)(GLint x, GLint y, GLsizei width, GLsizei height); -void (APIENTRY *bglClipPlane)(GLenum plane, const GLdouble *equation); - -// Depth -void (APIENTRY *bglDepthFunc)(GLenum func); -void (APIENTRY *bglDepthMask)(GLboolean flag); -void (APIENTRY *bglDepthRange)(GLclampd near_val, GLclampd far_val); - -// Matrix -void (APIENTRY *bglMatrixMode)(GLenum mode); -void (APIENTRY *bglOrtho)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val); -void (APIENTRY *bglFrustum)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val); -void (APIENTRY *bglViewport)(GLint x, GLint y, GLsizei width, GLsizei height); -void (APIENTRY *bglPushMatrix)(void); -void (APIENTRY *bglPopMatrix)(void); -void (APIENTRY *bglLoadIdentity)(void); -void (APIENTRY *bglLoadMatrixf)(const GLfloat *m); -void (APIENTRY *bglLoadMatrixd)(const GLdouble *m); -void (APIENTRY *bglMultMatrixf)(const GLfloat *m); -void (APIENTRY *bglMultMatrixd)(const GLdouble *m); -void (APIENTRY *bglRotatef)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -void (APIENTRY *bglScalef)(GLfloat x, GLfloat y, GLfloat z); -void (APIENTRY *bglTranslatef)(GLfloat x, GLfloat y, GLfloat z); - -// Drawing -void (APIENTRY *bglBegin)(GLenum mode); -void (APIENTRY *bglEnd)(void); -void (APIENTRY *bglVertex2f)(GLfloat x, GLfloat y); -void (APIENTRY *bglVertex2i)(GLint x, GLint y); -void (APIENTRY *bglVertex3f)(GLfloat x, GLfloat y, GLfloat z); -void (APIENTRY *bglVertex3d)(GLdouble x, GLdouble y, GLdouble z); -void (APIENTRY *bglVertex3fv)(const GLfloat *v); -void (APIENTRY *bglVertex3dv)(const GLdouble *v); -void (APIENTRY *bglColor4f)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -void (APIENTRY *bglColor4ub)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -void (APIENTRY *bglTexCoord2d)(GLdouble s, GLdouble t); -void (APIENTRY *bglTexCoord2f)(GLfloat s, GLfloat t); -void (APIENTRY *bglTexCoord2i)(GLint s, GLint t); -void (APIENTRY *bglNormal3f)(GLfloat x, GLfloat y, GLfloat z); - -// Lighting -void (APIENTRY *bglShadeModel)(GLenum mode); -void (APIENTRY *bglLightfv)(GLenum light, GLenum pname, const GLfloat *params); - -// Raster funcs -void (APIENTRY *bglReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); -void (APIENTRY *bglRasterPos4i)(GLint x, GLint y, GLint z, GLint w); -void (APIENTRY *bglDrawPixels)(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); - -// Texture mapping -void (APIENTRY *bglTexEnvf)(GLenum target, GLenum pname, GLfloat param); -void (APIENTRY *bglGenTextures)(GLsizei n, GLuint *textures); // 1.1 -void (APIENTRY *bglDeleteTextures)(GLsizei n, const GLuint *textures); // 1.1 -void (APIENTRY *bglBindTexture)(GLenum target, GLuint texture); // 1.1 -void (APIENTRY *bglTexImage2D)(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -void (APIENTRY *bglTexImage3D)(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -void (APIENTRY *bglCopyTexImage2D)(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -void (APIENTRY *bglCopyTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -void (APIENTRY *bglTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); // 1.1 -void (APIENTRY *bglTexParameterf)(GLenum target, GLenum pname, GLfloat param); -void (APIENTRY *bglTexParameteri)(GLenum target, GLenum pname, GLint param); -void (APIENTRY *bglGetTexLevelParameteriv)(GLenum target, GLint level, GLenum pname, GLint *params); -void (APIENTRY *bglCompressedTexImage2DARB)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -void (APIENTRY *bglGetCompressedTexImageARB)(GLenum, GLint, GLvoid *); -void (APIENTRY *bglTexGenfv)(GLenum coord, GLenum pname, const GLfloat *params); - -// Fog -void (APIENTRY *bglFogf)(GLenum pname, GLfloat param); -void (APIENTRY *bglFogi)(GLenum pname, GLint param); -void (APIENTRY *bglFogfv)(GLenum pname, const GLfloat *params); - -// Display Lists -void (APIENTRY *bglNewList)(GLuint list, GLenum mode); -void (APIENTRY *bglEndList)(void); -void (APIENTRY *bglCallList)(GLuint list); -void (APIENTRY *bglDeleteLists)(GLuint list, GLsizei range); - -// Vertex Arrays -void (APIENTRY *bglEnableClientState)(GLenum cap); -void (APIENTRY *bglDisableClientState)(GLenum cap); -void (APIENTRY *bglVertexPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -void (APIENTRY *bglNormalPointer)(GLenum type, GLsizei stride, const GLvoid *pointer); -void (APIENTRY *bglTexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -void (APIENTRY *bglDrawArrays)(GLenum mode, GLint first, GLsizei count); -void (APIENTRY *bglDrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); - -// Stencil Buffer -void (APIENTRY *bglClearStencil)(GLint s); -void (APIENTRY *bglStencilOp)(GLenum fail, GLenum zfail, GLenum zpass); -void (APIENTRY *bglStencilFunc)(GLenum func, GLint ref, GLuint mask); - -// GPU Programs -void (APIENTRY *bglGenProgramsARB)(GLsizei, GLuint *); -void (APIENTRY *bglBindProgramARB)(GLenum, GLuint); -void (APIENTRY *bglProgramStringARB)(GLenum, GLenum, GLsizei, const GLvoid *); -void (APIENTRY *bglDeleteProgramsARB)(GLsizei n, const GLuint *programs); - -// Multitexturing -void (APIENTRY *bglActiveTextureARB)(GLenum texture); -void (APIENTRY *bglClientActiveTextureARB)(GLenum texture); -void (APIENTRY *bglMultiTexCoord2dARB)(GLenum target, GLdouble s, GLdouble t); -void (APIENTRY *bglMultiTexCoord2fARB)(GLenum target, GLfloat s, GLfloat t); - -// Frame Buffer Objects -void (APIENTRY *bglGenFramebuffersEXT)(GLsizei n, GLuint *framebuffers); -void (APIENTRY *bglBindFramebufferEXT)(GLenum target, GLuint framebuffer); -void (APIENTRY *bglFramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLenum(APIENTRY *bglCheckFramebufferStatusEXT)(GLenum target); -void (APIENTRY *bglDeleteFramebuffersEXT)(GLsizei n, const GLuint *framebuffers); - -// Vertex Buffer Objects -void (APIENTRY *bglGenBuffersARB)(GLsizei n, GLuint *buffers); -void (APIENTRY *bglBindBufferARB)(GLenum target, GLuint buffer); -void (APIENTRY *bglDeleteBuffersARB)(GLsizei n, const GLuint *buffers); -void (APIENTRY *bglBufferDataARB)(GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); -void (APIENTRY *bglBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); -void *(APIENTRY *bglMapBufferARB)(GLenum target, GLenum access); -GLboolean(APIENTRY *bglUnmapBufferARB)(GLenum target); - -// Occlusion queries -void (APIENTRY *bglGenQueriesARB)(GLsizei n, GLuint *ids); -void (APIENTRY *bglDeleteQueriesARB)(GLsizei n, const GLuint *ids); -GLboolean(APIENTRY *bglIsQueryARB)(GLuint id); -void (APIENTRY *bglBeginQueryARB)(GLenum target, GLuint id); -void (APIENTRY *bglEndQueryARB)(GLenum target); -void (APIENTRY *bglGetQueryivARB)(GLenum target, GLenum pname, GLint *params); -void (APIENTRY *bglGetQueryObjectivARB)(GLuint id, GLenum pname, GLint *params); -void (APIENTRY *bglGetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint *params); - -// Shader Objects -void (APIENTRY *bglDeleteObjectARB)(GLhandleARB); -GLhandleARB(APIENTRY *bglGetHandleARB)(GLenum); -void (APIENTRY *bglDetachObjectARB)(GLhandleARB, GLhandleARB); -GLhandleARB(APIENTRY *bglCreateShaderObjectARB)(GLenum); -void (APIENTRY *bglShaderSourceARB)(GLhandleARB, GLsizei, const GLcharARB* *, const GLint *); -void (APIENTRY *bglCompileShaderARB)(GLhandleARB); -GLhandleARB(APIENTRY *bglCreateProgramObjectARB)(void); -void (APIENTRY *bglAttachObjectARB)(GLhandleARB, GLhandleARB); -void (APIENTRY *bglLinkProgramARB)(GLhandleARB); -void (APIENTRY *bglUseProgramObjectARB)(GLhandleARB); -void (APIENTRY *bglValidateProgramARB)(GLhandleARB); -void (APIENTRY *bglUniform1fARB)(GLint, GLfloat); -void (APIENTRY *bglUniform2fARB)(GLint, GLfloat, GLfloat); -void (APIENTRY *bglUniform3fARB)(GLint, GLfloat, GLfloat, GLfloat); -void (APIENTRY *bglUniform4fARB)(GLint, GLfloat, GLfloat, GLfloat, GLfloat); -void (APIENTRY *bglUniform1iARB)(GLint, GLint); -void (APIENTRY *bglUniform2iARB)(GLint, GLint, GLint); -void (APIENTRY *bglUniform3iARB)(GLint, GLint, GLint, GLint); -void (APIENTRY *bglUniform4iARB)(GLint, GLint, GLint, GLint, GLint); -void (APIENTRY *bglUniform1fvARB)(GLint, GLsizei, const GLfloat *); -void (APIENTRY *bglUniform2fvARB)(GLint, GLsizei, const GLfloat *); -void (APIENTRY *bglUniform3fvARB)(GLint, GLsizei, const GLfloat *); -void (APIENTRY *bglUniform4fvARB)(GLint, GLsizei, const GLfloat *); -void (APIENTRY *bglUniform1ivARB)(GLint, GLsizei, const GLint *); -void (APIENTRY *bglUniform2ivARB)(GLint, GLsizei, const GLint *); -void (APIENTRY *bglUniform3ivARB)(GLint, GLsizei, const GLint *); -void (APIENTRY *bglUniform4ivARB)(GLint, GLsizei, const GLint *); -void (APIENTRY *bglUniformMatrix2fvARB)(GLint, GLsizei, GLboolean, const GLfloat *); -void (APIENTRY *bglUniformMatrix3fvARB)(GLint, GLsizei, GLboolean, const GLfloat *); -void (APIENTRY *bglUniformMatrix4fvARB)(GLint, GLsizei, GLboolean, const GLfloat *); -void (APIENTRY *bglGetObjectParameterfvARB)(GLhandleARB, GLenum, GLfloat *); -void (APIENTRY *bglGetObjectParameterivARB)(GLhandleARB, GLenum, GLint *); -void (APIENTRY *bglGetInfoLogARB)(GLhandleARB, GLsizei, GLsizei *, GLcharARB *); -void (APIENTRY *bglGetAttachedObjectsARB)(GLhandleARB, GLsizei, GLsizei *, GLhandleARB *); -GLint(APIENTRY *bglGetUniformLocationARB)(GLhandleARB, const GLcharARB *); -void (APIENTRY *bglGetActiveUniformARB)(GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *); -void (APIENTRY *bglGetUniformfvARB)(GLhandleARB, GLint, GLfloat *); -void (APIENTRY *bglGetUniformivARB)(GLhandleARB, GLint, GLint *); -void (APIENTRY *bglGetShaderSourceARB)(GLhandleARB, GLsizei, GLsizei *, GLcharARB *); - -// Vertex Shaders -void (APIENTRY *bglVertexAttrib1dARB)(GLuint, GLdouble); -void (APIENTRY *bglVertexAttrib1dvARB)(GLuint, const GLdouble *); -void (APIENTRY *bglVertexAttrib1fARB)(GLuint, GLfloat); -void (APIENTRY *bglVertexAttrib1fvARB)(GLuint, const GLfloat *); -void (APIENTRY *bglVertexAttrib1sARB)(GLuint, GLshort); -void (APIENTRY *bglVertexAttrib1svARB)(GLuint, const GLshort *); -void (APIENTRY *bglVertexAttrib2dARB)(GLuint, GLdouble, GLdouble); -void (APIENTRY *bglVertexAttrib2dvARB)(GLuint, const GLdouble *); -void (APIENTRY *bglVertexAttrib2fARB)(GLuint, GLfloat, GLfloat); -void (APIENTRY *bglVertexAttrib2fvARB)(GLuint, const GLfloat *); -void (APIENTRY *bglVertexAttrib2sARB)(GLuint, GLshort, GLshort); -void (APIENTRY *bglVertexAttrib2svARB)(GLuint, const GLshort *); -void (APIENTRY *bglVertexAttrib3dARB)(GLuint, GLdouble, GLdouble, GLdouble); -void (APIENTRY *bglVertexAttrib3dvARB)(GLuint, const GLdouble *); -void (APIENTRY *bglVertexAttrib3fARB)(GLuint, GLfloat, GLfloat, GLfloat); -void (APIENTRY *bglVertexAttrib3fvARB)(GLuint, const GLfloat *); -void (APIENTRY *bglVertexAttrib3sARB)(GLuint, GLshort, GLshort, GLshort); -void (APIENTRY *bglVertexAttrib3svARB)(GLuint, const GLshort *); -void (APIENTRY *bglVertexAttrib4NbvARB)(GLuint, const GLbyte *); -void (APIENTRY *bglVertexAttrib4NivARB)(GLuint, const GLint *); -void (APIENTRY *bglVertexAttrib4NsvARB)(GLuint, const GLshort *); -void (APIENTRY *bglVertexAttrib4NubARB)(GLuint, GLubyte, GLubyte, GLubyte, GLubyte); -void (APIENTRY *bglVertexAttrib4NubvARB)(GLuint, const GLubyte *); -void (APIENTRY *bglVertexAttrib4NuivARB)(GLuint, const GLuint *); -void (APIENTRY *bglVertexAttrib4NusvARB)(GLuint, const GLushort *); -void (APIENTRY *bglVertexAttrib4bvARB)(GLuint, const GLbyte *); -void (APIENTRY *bglVertexAttrib4dARB)(GLuint, GLdouble, GLdouble, GLdouble, GLdouble); -void (APIENTRY *bglVertexAttrib4dvARB)(GLuint, const GLdouble *); -void (APIENTRY *bglVertexAttrib4fARB)(GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -void (APIENTRY *bglVertexAttrib4fvARB)(GLuint, const GLfloat *); -void (APIENTRY *bglVertexAttrib4ivARB)(GLuint, const GLint *); -void (APIENTRY *bglVertexAttrib4sARB)(GLuint, GLshort, GLshort, GLshort, GLshort); -void (APIENTRY *bglVertexAttrib4svARB)(GLuint, const GLshort *); -void (APIENTRY *bglVertexAttrib4ubvARB)(GLuint, const GLubyte *); -void (APIENTRY *bglVertexAttrib4uivARB)(GLuint, const GLuint *); -void (APIENTRY *bglVertexAttrib4usvARB)(GLuint, const GLushort *); -void (APIENTRY *bglVertexAttribPointerARB)(GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *); -void (APIENTRY *bglEnableVertexAttribArrayARB)(GLuint); -void (APIENTRY *bglDisableVertexAttribArrayARB)(GLuint); -void (APIENTRY *bglGetVertexAttribdvARB)(GLuint, GLenum, GLdouble *); -void (APIENTRY *bglGetVertexAttribfvARB)(GLuint, GLenum, GLfloat *); -void (APIENTRY *bglGetVertexAttribivARB)(GLuint, GLenum, GLint *); -void (APIENTRY *bglGetVertexAttribPointervARB)(GLuint, GLenum, GLvoid* *); -void (APIENTRY *bglBindAttribLocationARB)(GLhandleARB, GLuint, const GLcharARB *); -void (APIENTRY *bglGetActiveAttribARB)(GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *); -GLint(APIENTRY *bglGetAttribLocationARB)(GLhandleARB, const GLcharARB *); - -// GLU -void (APIENTRY *bgluTessBeginContour)(GLUtesselator *tess); -void (APIENTRY *bgluTessBeginPolygon)(GLUtesselator *tess, GLvoid *data); -void (APIENTRY *bgluTessCallback)(GLUtesselator *tess, GLenum which, void (PR_CALLBACK CallBackFunc)()); -void (APIENTRY *bgluTessEndContour)(GLUtesselator *tess); -void (APIENTRY *bgluTessEndPolygon)(GLUtesselator *tess); -void (APIENTRY *bgluTessNormal)(GLUtesselator *tess, GLdouble valueX, GLdouble valueY, GLdouble valueZ); -void (APIENTRY *bgluTessProperty)(GLUtesselator *tess, GLenum which, GLdouble data); -void (APIENTRY *bgluTessVertex)(GLUtesselator *tess, GLdouble *location, GLvoid *data); -GLUtesselator *(APIENTRY *bgluNewTess)(void); - -void (APIENTRY *bgluPerspective)(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar); - -const GLubyte *(APIENTRY *bgluErrorString)(GLenum error); - -GLint(APIENTRY *bgluProject)(GLdouble objX, GLdouble objY, GLdouble objZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble *winX, GLdouble *winY, GLdouble *winZ); -GLint(APIENTRY *bgluUnProject)(GLdouble winX, GLdouble winY, GLdouble winZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble *objX, GLdouble *objY, GLdouble *objZ); - - -#ifdef RENDERTYPEWIN -// Windows -HGLRC(WINAPI *bwglCreateContext)(HDC); -BOOL (WINAPI *bwglDeleteContext)(HGLRC); -PROC(WINAPI *bwglGetProcAddress)(LPCSTR); -BOOL (WINAPI *bwglMakeCurrent)(HDC,HGLRC); - -BOOL (WINAPI *bwglSwapBuffers)(HDC); -int32_t (WINAPI *bwglChoosePixelFormat)(HDC,CONST PIXELFORMATDESCRIPTOR *); -int32_t (WINAPI *bwglDescribePixelFormat)(HDC,int32_t,UINT,LPPIXELFORMATDESCRIPTOR); -int32_t (WINAPI *bwglGetPixelFormat)(HDC); -BOOL (WINAPI *bwglSetPixelFormat)(HDC,int32_t,const PIXELFORMATDESCRIPTOR *); -BOOL (WINAPI *bwglSwapIntervalEXT)(int32_t); - -static HANDLE hGLDLL, hGLUDLL; -#else -#include - -static void *gluhandle = NULL; -#endif - -char *gldriver = NULL, *glulibrary = NULL; - -static void *getproc_(const char *s, int32_t *err, int32_t fatal, int32_t extension) -{ - void *t; -#if defined RENDERTYPESDL - UNREFERENCED_PARAMETER(extension); - t = (void *)SDL_GL_GetProcAddress(s); -#elif defined _WIN32 - if (extension) t = (void *)bwglGetProcAddress(s); - else t = (void *)GetProcAddress(hGLDLL,s); -#else -#error Need a dynamic loader for this platform... -#endif - if (!t && fatal) - { - initprintf("Failed to find %s in %s\n", s, gldriver); - *err = 1; - } - return t; -} -#define GETPROC(s) getproc_(s,&err,1,0) -#define GETPROCSOFT(s) getproc_(s,&err,0,0) -#define GETPROCEXT(s) getproc_(s,&err,1,1) -#define GETPROCEXTSOFT(s) getproc_(s,&err,0,1) - -int32_t loadgldriver(const char *driver) -{ - int32_t err=0; - -#ifdef RENDERTYPEWIN - if (hGLDLL) return 0; -#endif - - if (!driver) - { -#ifdef _WIN32 - driver = "opengl32.dll"; -#elif defined __APPLE__ - driver = "/System/Library/Frameworks/OpenGL.framework/OpenGL"; -#else - driver = "libGL.so.1"; -#endif - } - -#if defined RENDERTYPESDL - if (SDL_GL_LoadLibrary(driver)) goto fail; -#elif defined _WIN32 - hGLDLL = LoadLibrary(driver); - if (!hGLDLL) goto fail; -#endif - gldriver = Bstrdup(driver); - -#ifdef RENDERTYPEWIN - bwglCreateContext = GETPROC("wglCreateContext"); - bwglDeleteContext = GETPROC("wglDeleteContext"); - bwglGetProcAddress = GETPROC("wglGetProcAddress"); - bwglMakeCurrent = GETPROC("wglMakeCurrent"); - - bwglSwapBuffers = GETPROC("wglSwapBuffers"); - bwglChoosePixelFormat = GETPROC("wglChoosePixelFormat"); - bwglDescribePixelFormat = GETPROC("wglDescribePixelFormat"); - bwglGetPixelFormat = GETPROC("wglGetPixelFormat"); - bwglSetPixelFormat = GETPROC("wglSetPixelFormat"); -#endif - - bglClearColor = GETPROC("glClearColor"); - bglClear = GETPROC("glClear"); - bglColorMask = GETPROC("glColorMask"); - bglAlphaFunc = GETPROC("glAlphaFunc"); - bglBlendFunc = GETPROC("glBlendFunc"); - bglCullFace = GETPROC("glCullFace"); - bglFrontFace = GETPROC("glFrontFace"); - bglPolygonOffset = GETPROC("glPolygonOffset"); - bglPolygonMode = GETPROC("glPolygonMode"); - bglEnable = GETPROC("glEnable"); - bglDisable = GETPROC("glDisable"); - bglGetDoublev = GETPROC("glGetDoublev"); - bglGetFloatv = GETPROC("glGetFloatv"); - bglGetIntegerv = GETPROC("glGetIntegerv"); - bglPushAttrib = GETPROC("glPushAttrib"); - bglPopAttrib = GETPROC("glPopAttrib"); - bglGetError = GETPROC("glGetError"); - bglGetString = GETPROC("glGetString"); - bglHint = GETPROC("glHint"); - bglDrawBuffer = GETPROC("glDrawBuffer"); - bglReadBuffer = GETPROC("glDrawBuffer"); - bglScissor = GETPROC("glScissor"); - bglClipPlane = GETPROC("glClipPlane"); - - // Depth - bglDepthFunc = GETPROC("glDepthFunc"); - bglDepthMask = GETPROC("glDepthMask"); - bglDepthRange = GETPROC("glDepthRange"); - - // Matrix - bglMatrixMode = GETPROC("glMatrixMode"); - bglOrtho = GETPROC("glOrtho"); - bglFrustum = GETPROC("glFrustum"); - bglViewport = GETPROC("glViewport"); - bglPushMatrix = GETPROC("glPushMatrix"); - bglPopMatrix = GETPROC("glPopMatrix"); - bglLoadIdentity = GETPROC("glLoadIdentity"); - bglLoadMatrixf = GETPROC("glLoadMatrixf"); - bglLoadMatrixd = GETPROC("glLoadMatrixd"); - bglMultMatrixf = GETPROC("glMultMatrixf"); - bglMultMatrixd = GETPROC("glMultMatrixd"); - bglRotatef = GETPROC("glRotatef"); - bglScalef = GETPROC("glScalef"); - bglTranslatef = GETPROC("glTranslatef"); - - // Drawing - bglBegin = GETPROC("glBegin"); - bglEnd = GETPROC("glEnd"); - bglVertex2f = GETPROC("glVertex2f"); - bglVertex2i = GETPROC("glVertex2i"); - bglVertex3f = GETPROC("glVertex3f"); - bglVertex3d = GETPROC("glVertex3d"); - bglVertex3fv = GETPROC("glVertex3fv"); - bglVertex3dv = GETPROC("glVertex3dv"); - bglColor4f = GETPROC("glColor4f"); - bglColor4ub = GETPROC("glColor4ub"); - bglTexCoord2d = GETPROC("glTexCoord2d"); - bglTexCoord2f = GETPROC("glTexCoord2f"); - bglTexCoord2i = GETPROC("glTexCoord2i"); - bglNormal3f = GETPROC("glNormal3f"); - - // Lighting - bglShadeModel = GETPROC("glShadeModel"); - bglLightfv = GETPROC("glLightfv"); - - // Raster funcs - bglReadPixels = GETPROC("glReadPixels"); - bglRasterPos4i = GETPROC("glRasterPos4i"); - bglDrawPixels = GETPROC("glDrawPixels"); - - // Texture mapping - bglTexEnvf = GETPROC("glTexEnvf"); - bglGenTextures = GETPROC("glGenTextures"); - bglDeleteTextures = GETPROC("glDeleteTextures"); - bglBindTexture = GETPROC("glBindTexture"); - bglTexImage2D = GETPROC("glTexImage2D"); - bglCopyTexImage2D = GETPROC("glCopyTexImage2D"); - bglCopyTexSubImage2D= GETPROC("glCopyTexSubImage2D"); - bglTexSubImage2D = GETPROC("glTexSubImage2D"); - bglTexParameterf = GETPROC("glTexParameterf"); - bglTexParameteri = GETPROC("glTexParameteri"); - bglGetTexLevelParameteriv = GETPROC("glGetTexLevelParameteriv"); - bglTexGenfv = GETPROC("glTexGenfv"); - - // Fog - bglFogf = GETPROC("glFogf"); - bglFogi = GETPROC("glFogi"); - bglFogfv = GETPROC("glFogfv"); - - // Display Lists - bglNewList = GETPROC("glNewList"); - bglEndList = GETPROC("glEndList"); - bglCallList = GETPROC("glCallList"); - bglDeleteLists = GETPROC("glDeleteLists"); - - // Vertex Arrays - bglEnableClientState = GETPROC("glEnableClientState"); - bglDisableClientState = GETPROC("glDisableClientState"); - bglVertexPointer = GETPROC("glVertexPointer"); - bglNormalPointer = GETPROC("glNormalPointer"); - bglTexCoordPointer = GETPROC("glTexCoordPointer"); - bglDrawArrays = GETPROC("glDrawArrays"); - bglDrawElements = GETPROC("glDrawElements"); - - // Stencil Buffer - bglClearStencil = GETPROC("glClearStencil"); - bglStencilOp = GETPROC("glStencilOp"); - bglStencilFunc = GETPROC("glStencilFunc"); - - loadglextensions(); - loadglulibrary(getenv("BUILD_GLULIB")); - - if (err) unloadgldriver(); - return err; - -fail: - initprintf("Failed loading \"%s\"\n",driver); - return -1; -} - -int32_t loadglextensions(void) -{ - int32_t err = 0; -#ifdef RENDERTYPEWIN - if (!hGLDLL) return 0; -#endif - - bglTexImage3D = GETPROCEXTSOFT("glTexImage3D"); - bglCompressedTexImage2DARB = GETPROCEXTSOFT("glCompressedTexImage2DARB"); - bglGetCompressedTexImageARB = GETPROCEXTSOFT("glGetCompressedTexImageARB"); - - // GPU Programs - bglGenProgramsARB = GETPROCEXTSOFT("glGenProgramsARB"); - bglBindProgramARB = GETPROCEXTSOFT("glBindProgramARB"); - bglProgramStringARB = GETPROCEXTSOFT("glProgramStringARB"); - bglDeleteProgramsARB= GETPROCEXTSOFT("glDeleteProgramsARB"); - - // Multitexturing - bglActiveTextureARB = GETPROCEXTSOFT("glActiveTextureARB"); - bglClientActiveTextureARB = GETPROCEXTSOFT("glClientActiveTextureARB"); - bglMultiTexCoord2dARB = GETPROCEXTSOFT("glMultiTexCoord2dARB"); - bglMultiTexCoord2fARB = GETPROCEXTSOFT("glMultiTexCoord2fARB"); - - // Frame Buffer Objects - bglGenFramebuffersEXT = GETPROCEXTSOFT("glGenFramebuffersEXT"); - bglBindFramebufferEXT = GETPROCEXTSOFT("glBindFramebufferEXT"); - bglFramebufferTexture2DEXT = GETPROCEXTSOFT("glFramebufferTexture2DEXT"); - bglCheckFramebufferStatusEXT = GETPROCEXTSOFT("glCheckFramebufferStatusEXT"); - bglDeleteFramebuffersEXT = GETPROCEXTSOFT("glDeleteFramebuffersEXT"); - - // Vertex Buffer Objects - bglGenBuffersARB = GETPROCEXTSOFT("glGenBuffersARB"); - bglBindBufferARB = GETPROCEXTSOFT("glBindBufferARB"); - bglDeleteBuffersARB = GETPROCEXTSOFT("glDeleteBuffersARB"); - bglBufferDataARB = GETPROCEXTSOFT("glBufferDataARB"); - bglBufferSubDataARB = GETPROCEXTSOFT("glBufferSubDataARB"); - bglMapBufferARB = GETPROCEXTSOFT("glMapBufferARB"); - bglUnmapBufferARB = GETPROCEXTSOFT("glUnmapBufferARB"); - - // Occlusion queries - bglGenQueriesARB = GETPROCEXTSOFT("glGenQueriesARB"); - bglDeleteQueriesARB = GETPROCEXTSOFT("glDeleteQueriesARB"); - bglIsQueryARB = GETPROCEXTSOFT("glIsQueryARB"); - bglBeginQueryARB = GETPROCEXTSOFT("glBeginQueryARB"); - bglEndQueryARB = GETPROCEXTSOFT("glEndQueryARB"); - bglGetQueryivARB = GETPROCEXTSOFT("glGetQueryivARB"); - bglGetQueryObjectivARB = GETPROCEXTSOFT("glGetQueryObjectivARB"); - bglGetQueryObjectuivARB = GETPROCEXTSOFT("glGetQueryObjectuivARB"); - - // Shader Objects - bglDeleteObjectARB = GETPROCEXTSOFT("glDeleteObjectARB"); - bglGetHandleARB = GETPROCEXTSOFT("glGetHandleARB"); - bglDetachObjectARB = GETPROCEXTSOFT("glDetachObjectARB"); - bglCreateShaderObjectARB = GETPROCEXTSOFT("glCreateShaderObjectARB"); - bglShaderSourceARB = GETPROCEXTSOFT("glShaderSourceARB"); - bglCompileShaderARB = GETPROCEXTSOFT("glCompileShaderARB"); - bglCreateProgramObjectARB = GETPROCEXTSOFT("glCreateProgramObjectARB"); - bglAttachObjectARB = GETPROCEXTSOFT("glAttachObjectARB"); - bglLinkProgramARB = GETPROCEXTSOFT("glLinkProgramARB"); - bglUseProgramObjectARB = GETPROCEXTSOFT("glUseProgramObjectARB"); - bglValidateProgramARB = GETPROCEXTSOFT("glValidateProgramARB"); - bglUniform1fARB = GETPROCEXTSOFT("glUniform1fARB"); - bglUniform2fARB = GETPROCEXTSOFT("glUniform2fARB"); - bglUniform3fARB = GETPROCEXTSOFT("glUniform3fARB"); - bglUniform4fARB = GETPROCEXTSOFT("glUniform4fARB"); - bglUniform1iARB = GETPROCEXTSOFT("glUniform1iARB"); - bglUniform2iARB = GETPROCEXTSOFT("glUniform2iARB"); - bglUniform3iARB = GETPROCEXTSOFT("glUniform3iARB"); - bglUniform4iARB = GETPROCEXTSOFT("glUniform4iARB"); - bglUniform1fvARB = GETPROCEXTSOFT("glUniform1fvARB"); - bglUniform2fvARB = GETPROCEXTSOFT("glUniform2fvARB"); - bglUniform3fvARB = GETPROCEXTSOFT("glUniform3fvARB"); - bglUniform4fvARB = GETPROCEXTSOFT("glUniform4fvARB"); - bglUniform1ivARB = GETPROCEXTSOFT("glUniform1ivARB"); - bglUniform2ivARB = GETPROCEXTSOFT("glUniform2ivARB"); - bglUniform3ivARB = GETPROCEXTSOFT("glUniform3ivARB"); - bglUniform4ivARB = GETPROCEXTSOFT("glUniform4ivARB"); - bglUniformMatrix2fvARB = GETPROCEXTSOFT("glUniformMatrix2fvARB"); - bglUniformMatrix3fvARB = GETPROCEXTSOFT("glUniformMatrix3fvARB"); - bglUniformMatrix4fvARB = GETPROCEXTSOFT("glUniformMatrix4fvARB"); - bglGetObjectParameterfvARB = GETPROCEXTSOFT("glGetObjectParameterfvARB"); - bglGetObjectParameterivARB = GETPROCEXTSOFT("glGetObjectParameterivARB"); - bglGetInfoLogARB = GETPROCEXTSOFT("glGetInfoLogARB"); - bglGetAttachedObjectsARB = GETPROCEXTSOFT("glGetAttachedObjectsARB"); - bglGetUniformLocationARB = GETPROCEXTSOFT("glGetUniformLocationARB"); - bglGetActiveUniformARB = GETPROCEXTSOFT("glGetActiveUniformARB"); - bglGetUniformfvARB = GETPROCEXTSOFT("glGetUniformfvARB"); - bglGetUniformivARB = GETPROCEXTSOFT("glGetUniformivARB"); - bglGetShaderSourceARB = GETPROCEXTSOFT("glGetShaderSourceARB"); - - // Vertex Shaders - bglVertexAttrib1dARB = GETPROCEXTSOFT("glVertexAttrib1dARB"); - bglVertexAttrib1dvARB = GETPROCEXTSOFT("glVertexAttrib1dvARB"); - bglVertexAttrib1fARB = GETPROCEXTSOFT("glVertexAttrib1fARB"); - bglVertexAttrib1fvARB = GETPROCEXTSOFT("glVertexAttrib1fvARB"); - bglVertexAttrib1sARB = GETPROCEXTSOFT("glVertexAttrib1sARB"); - bglVertexAttrib1svARB = GETPROCEXTSOFT("glVertexAttrib1svARB"); - bglVertexAttrib2dARB = GETPROCEXTSOFT("glVertexAttrib2dARB"); - bglVertexAttrib2dvARB = GETPROCEXTSOFT("glVertexAttrib2dvARB"); - bglVertexAttrib2fARB = GETPROCEXTSOFT("glVertexAttrib2fARB"); - bglVertexAttrib2fvARB = GETPROCEXTSOFT("glVertexAttrib2fvARB"); - bglVertexAttrib2sARB = GETPROCEXTSOFT("glVertexAttrib2sARB"); - bglVertexAttrib2svARB = GETPROCEXTSOFT("glVertexAttrib2svARB"); - bglVertexAttrib3dARB = GETPROCEXTSOFT("glVertexAttrib3dARB"); - bglVertexAttrib3dvARB = GETPROCEXTSOFT("glVertexAttrib3dvARB"); - bglVertexAttrib3fARB = GETPROCEXTSOFT("glVertexAttrib3fARB"); - bglVertexAttrib3fvARB = GETPROCEXTSOFT("glVertexAttrib3fvARB"); - bglVertexAttrib3sARB = GETPROCEXTSOFT("glVertexAttrib3sARB"); - bglVertexAttrib3svARB = GETPROCEXTSOFT("glVertexAttrib3svARB"); - bglVertexAttrib4NbvARB = GETPROCEXTSOFT("glVertexAttrib4NbvARB"); - bglVertexAttrib4NivARB = GETPROCEXTSOFT("glVertexAttrib4NivARB"); - bglVertexAttrib4NsvARB = GETPROCEXTSOFT("glVertexAttrib4NsvARB"); - bglVertexAttrib4NubARB = GETPROCEXTSOFT("glVertexAttrib4NubARB"); - bglVertexAttrib4NubvARB = GETPROCEXTSOFT("glVertexAttrib4NubvARB"); - bglVertexAttrib4NuivARB = GETPROCEXTSOFT("glVertexAttrib4NuivARB"); - bglVertexAttrib4NusvARB = GETPROCEXTSOFT("glVertexAttrib4NusvARB"); - bglVertexAttrib4bvARB = GETPROCEXTSOFT("glVertexAttrib4bvARB"); - bglVertexAttrib4dARB = GETPROCEXTSOFT("glVertexAttrib4dARB"); - bglVertexAttrib4dvARB = GETPROCEXTSOFT("glVertexAttrib4dvARB"); - bglVertexAttrib4fARB = GETPROCEXTSOFT("glVertexAttrib4fARB"); - bglVertexAttrib4fvARB = GETPROCEXTSOFT("glVertexAttrib4fvARB"); - bglVertexAttrib4ivARB = GETPROCEXTSOFT("glVertexAttrib4ivARB"); - bglVertexAttrib4sARB = GETPROCEXTSOFT("glVertexAttrib4sARB"); - bglVertexAttrib4svARB = GETPROCEXTSOFT("glVertexAttrib4svARB"); - bglVertexAttrib4ubvARB = GETPROCEXTSOFT("glVertexAttrib4ubvARB"); - bglVertexAttrib4uivARB = GETPROCEXTSOFT("glVertexAttrib4uivARB"); - bglVertexAttrib4usvARB = GETPROCEXTSOFT("glVertexAttrib4usvARB"); - bglVertexAttribPointerARB = GETPROCEXTSOFT("glVertexAttribPointerARB"); - bglEnableVertexAttribArrayARB = GETPROCEXTSOFT("glEnableVertexAttribArrayARB"); - bglDisableVertexAttribArrayARB = GETPROCEXTSOFT("glDisableVertexAttribArrayARB"); - bglGetVertexAttribdvARB = GETPROCEXTSOFT("glGetVertexAttribdvARB"); - bglGetVertexAttribfvARB = GETPROCEXTSOFT("glGetVertexAttribfvARB"); - bglGetVertexAttribivARB = GETPROCEXTSOFT("glGetVertexAttribivARB"); - bglGetVertexAttribPointervARB = GETPROCEXTSOFT("glGetVertexAttribPointervARB"); - bglBindAttribLocationARB = GETPROCEXTSOFT("glBindAttribLocationARB"); - bglGetActiveAttribARB = GETPROCEXTSOFT("glGetActiveAttribARB"); - bglGetAttribLocationARB = GETPROCEXTSOFT("glGetAttribLocationARB"); - -#ifdef RENDERTYPEWIN - bwglSwapIntervalEXT = GETPROCEXTSOFT("wglSwapIntervalEXT"); -#endif - return err; -} - -int32_t unloadgldriver(void) -{ - unloadglulibrary(); - -#ifdef RENDERTYPEWIN - if (!hGLDLL) return 0; -#endif - - Bfree(gldriver); - gldriver = NULL; - -#ifdef RENDERTYPEWIN - FreeLibrary(hGLDLL); - hGLDLL = NULL; -#endif - - bglClearColor = NULL; - bglClear = NULL; - bglColorMask = NULL; - bglAlphaFunc = NULL; - bglBlendFunc = NULL; - bglCullFace = NULL; - bglFrontFace = NULL; - bglPolygonOffset = NULL; - bglPolygonMode = NULL; - bglEnable = NULL; - bglDisable = NULL; - bglGetDoublev = NULL; - bglGetFloatv = NULL; - bglGetIntegerv = NULL; - bglPushAttrib = NULL; - bglPopAttrib = NULL; - bglGetError = NULL; - bglGetString = NULL; - bglHint = NULL; - bglDrawBuffer = NULL; - bglReadBuffer = NULL; - bglScissor = NULL; - bglClipPlane = NULL; - - // Depth - bglDepthFunc = NULL; - bglDepthMask = NULL; - bglDepthRange = NULL; - - // Matrix - bglMatrixMode = NULL; - bglOrtho = NULL; - bglFrustum = NULL; - bglViewport = NULL; - bglPushMatrix = NULL; - bglPopMatrix = NULL; - bglLoadIdentity = NULL; - bglLoadMatrixf = NULL; - bglLoadMatrixd = NULL; - bglMultMatrixf = NULL; - bglMultMatrixd = NULL; - bglRotatef = NULL; - bglScalef = NULL; - bglTranslatef = NULL; - - // Drawing - bglBegin = NULL; - bglEnd = NULL; - bglVertex2f = NULL; - bglVertex2i = NULL; - bglVertex3f = NULL; - bglVertex3d = NULL; - bglVertex3fv = NULL; - bglColor4f = NULL; - bglColor4ub = NULL; - bglTexCoord2d = NULL; - bglTexCoord2f = NULL; - bglTexCoord2i = NULL; - bglNormal3f = NULL; - - // Lighting - bglShadeModel = NULL; - bglLightfv = NULL; - - // Raster funcs - bglReadPixels = NULL; - bglRasterPos4i = NULL; - bglDrawPixels = NULL; - - // Texture mapping - bglTexEnvf = NULL; - bglGenTextures = NULL; - bglDeleteTextures = NULL; - bglBindTexture = NULL; - bglTexImage2D = NULL; - bglTexImage3D = NULL; - bglCopyTexImage2D = NULL; - bglCopyTexSubImage2D= NULL; - bglTexSubImage2D = NULL; - bglTexParameterf = NULL; - bglTexParameteri = NULL; - bglGetTexLevelParameteriv = NULL; - bglCompressedTexImage2DARB = NULL; - bglGetCompressedTexImageARB = NULL; - - // Fog - bglFogf = NULL; - bglFogi = NULL; - bglFogfv = NULL; - - // Display Lists - bglNewList = NULL; - bglEndList = NULL; - bglCallList = NULL; - bglDeleteLists = NULL; - - // Vertex Arrays - bglEnableClientState = NULL; - bglDisableClientState = NULL; - bglVertexPointer = NULL; - bglNormalPointer = NULL; - bglTexCoordPointer = NULL; - bglDrawElements = NULL; - - // Stencil Buffer - bglClearStencil = NULL; - bglStencilOp = NULL; - bglStencilFunc = NULL; - - // GPU Programs - bglGenProgramsARB = NULL; - bglBindProgramARB = NULL; - bglProgramStringARB = NULL; - bglDeleteProgramsARB= NULL; - - // Multitexturing - bglActiveTextureARB = NULL; - bglClientActiveTextureARB = NULL; - bglMultiTexCoord2dARB = NULL; - bglMultiTexCoord2fARB = NULL; - - // Frame Buffer Objects - bglGenFramebuffersEXT = NULL; - bglBindFramebufferEXT = NULL; - bglFramebufferTexture2DEXT = NULL; - bglCheckFramebufferStatusEXT = NULL; - bglDeleteFramebuffersEXT = NULL; - - // Vertex Buffer Objects - bglGenBuffersARB = NULL; - bglBindBufferARB = NULL; - bglDeleteBuffersARB = NULL; - bglBufferDataARB = NULL; - bglBufferSubDataARB = NULL; - bglMapBufferARB = NULL; - bglUnmapBufferARB = NULL; - - // Occlusion queries - bglGenQueriesARB = NULL; - bglDeleteQueriesARB = NULL; - bglIsQueryARB = NULL; - bglBeginQueryARB = NULL; - bglEndQueryARB = NULL; - bglGetQueryivARB = NULL; - bglGetQueryObjectivARB = NULL; - bglGetQueryObjectuivARB = NULL; - - // Shader Objects - bglDeleteObjectARB = NULL; - bglGetHandleARB = NULL; - bglDetachObjectARB = NULL; - bglCreateShaderObjectARB = NULL; - bglShaderSourceARB = NULL; - bglCompileShaderARB = NULL; - bglCreateProgramObjectARB = NULL; - bglAttachObjectARB = NULL; - bglLinkProgramARB = NULL; - bglUseProgramObjectARB = NULL; - bglValidateProgramARB = NULL; - bglUniform1fARB = NULL; - bglUniform2fARB = NULL; - bglUniform3fARB = NULL; - bglUniform4fARB = NULL; - bglUniform1iARB = NULL; - bglUniform2iARB = NULL; - bglUniform3iARB = NULL; - bglUniform4iARB = NULL; - bglUniform1fvARB = NULL; - bglUniform2fvARB = NULL; - bglUniform3fvARB = NULL; - bglUniform4fvARB = NULL; - bglUniform1ivARB = NULL; - bglUniform2ivARB = NULL; - bglUniform3ivARB = NULL; - bglUniform4ivARB = NULL; - bglUniformMatrix2fvARB = NULL; - bglUniformMatrix3fvARB = NULL; - bglUniformMatrix4fvARB = NULL; - bglGetObjectParameterfvARB = NULL; - bglGetObjectParameterivARB = NULL; - bglGetInfoLogARB = NULL; - bglGetAttachedObjectsARB = NULL; - bglGetUniformLocationARB = NULL; - bglGetActiveUniformARB = NULL; - bglGetUniformfvARB = NULL; - bglGetUniformivARB = NULL; - bglGetShaderSourceARB = NULL; - - // Vertex Shaders - bglVertexAttrib1dARB = NULL; - bglVertexAttrib1dvARB = NULL; - bglVertexAttrib1fARB = NULL; - bglVertexAttrib1fvARB = NULL; - bglVertexAttrib1sARB = NULL; - bglVertexAttrib1svARB = NULL; - bglVertexAttrib2dARB = NULL; - bglVertexAttrib2dvARB = NULL; - bglVertexAttrib2fARB = NULL; - bglVertexAttrib2fvARB = NULL; - bglVertexAttrib2sARB = NULL; - bglVertexAttrib2svARB = NULL; - bglVertexAttrib3dARB = NULL; - bglVertexAttrib3dvARB = NULL; - bglVertexAttrib3fARB = NULL; - bglVertexAttrib3fvARB = NULL; - bglVertexAttrib3sARB = NULL; - bglVertexAttrib3svARB = NULL; - bglVertexAttrib4NbvARB = NULL; - bglVertexAttrib4NivARB = NULL; - bglVertexAttrib4NsvARB = NULL; - bglVertexAttrib4NubARB = NULL; - bglVertexAttrib4NubvARB = NULL; - bglVertexAttrib4NuivARB = NULL; - bglVertexAttrib4NusvARB = NULL; - bglVertexAttrib4bvARB = NULL; - bglVertexAttrib4dARB = NULL; - bglVertexAttrib4dvARB = NULL; - bglVertexAttrib4fARB = NULL; - bglVertexAttrib4fvARB = NULL; - bglVertexAttrib4ivARB = NULL; - bglVertexAttrib4sARB = NULL; - bglVertexAttrib4svARB = NULL; - bglVertexAttrib4ubvARB = NULL; - bglVertexAttrib4uivARB = NULL; - bglVertexAttrib4usvARB = NULL; - bglVertexAttribPointerARB = NULL; - bglEnableVertexAttribArrayARB = NULL; - bglDisableVertexAttribArrayARB = NULL; - bglGetVertexAttribdvARB = NULL; - bglGetVertexAttribfvARB = NULL; - bglGetVertexAttribivARB = NULL; - bglGetVertexAttribPointervARB = NULL; - bglBindAttribLocationARB = NULL; - bglGetActiveAttribARB = NULL; - bglGetAttribLocationARB = NULL; - -#ifdef RENDERTYPEWIN - bwglCreateContext = NULL; - bwglDeleteContext = NULL; - bwglGetProcAddress = NULL; - bwglMakeCurrent = NULL; - - bwglSwapBuffers = NULL; - bwglChoosePixelFormat = NULL; - bwglDescribePixelFormat = NULL; - bwglGetPixelFormat = NULL; - bwglSetPixelFormat = NULL; - bwglSwapIntervalEXT = NULL; -#endif - - return 0; -} - -static void *glugetproc_(const char *s, int32_t *err, int32_t fatal) -{ - void *t; -#if defined _WIN32 - t = (void *)GetProcAddress(hGLUDLL,s); -#else - t = (void *)dlsym(gluhandle,s); -#endif - if (!t && fatal) - { - initprintf("Failed to find %s in %s\n", s, glulibrary); - *err = 1; - } - return t; -} -#define GLUGETPROC(s) glugetproc_(s,&err,1) -#define GLUGETPROCSOFT(s) glugetproc_(s,&err,0) - -int32_t loadglulibrary(const char *driver) -{ - int32_t err=0; - -#ifdef RENDERTYPEWIN - if (hGLUDLL) return 0; -#endif - - if (!driver) - { -#ifdef _WIN32 - driver = "glu32.dll"; -#elif defined __APPLE__ - driver = "/System/Library/Frameworks/OpenGL.framework/OpenGL"; // FIXME: like I know anything about Apple. Hah. -#else - driver = "libGLU.so.1"; -#endif - } - -#if defined _WIN32 - hGLUDLL = LoadLibrary(driver); - if (!hGLUDLL) goto fail; -#else - gluhandle = dlopen(driver, RTLD_NOW|RTLD_GLOBAL); - if (!gluhandle) goto fail; -#endif - glulibrary = Bstrdup(driver); - - bgluTessBeginContour = GLUGETPROC("gluTessBeginContour"); - bgluTessBeginPolygon = GLUGETPROC("gluTessBeginPolygon"); - bgluTessCallback = GLUGETPROC("gluTessCallback"); - bgluTessEndContour = GLUGETPROC("gluTessEndContour"); - bgluTessEndPolygon = GLUGETPROC("gluTessEndPolygon"); - bgluTessNormal = GLUGETPROC("gluTessNormal"); - bgluTessProperty = GLUGETPROC("gluTessProperty"); - bgluTessVertex = GLUGETPROC("gluTessVertex"); - bgluNewTess = GLUGETPROC("gluNewTess"); - - bgluPerspective = GLUGETPROC("gluPerspective"); - - bgluErrorString = GLUGETPROC("gluErrorString"); - - bgluProject = GLUGETPROC("gluProject"); - bgluUnProject = GLUGETPROC("gluUnProject"); - - if (err) unloadglulibrary(); - return err; - -fail: - initprintf("Failed loading \"%s\"\n",driver); - return -1; -} - -int32_t unloadglulibrary(void) -{ -#ifdef RENDERTYPEWIN - if (!hGLUDLL) return 0; -#endif - - Bfree(glulibrary); - glulibrary = NULL; - -#ifdef RENDERTYPEWIN - FreeLibrary(hGLUDLL); - hGLUDLL = NULL; -#else - if (gluhandle) dlclose(gluhandle); - gluhandle = NULL; -#endif - - bgluTessBeginContour = NULL; - bgluTessBeginPolygon = NULL; - bgluTessCallback = NULL; - bgluTessEndContour = NULL; - bgluTessEndPolygon = NULL; - bgluTessNormal = NULL; - bgluTessProperty = NULL; - bgluTessVertex = NULL; - bgluNewTess = NULL; - - bgluPerspective = NULL; - - bgluErrorString = NULL; - - bgluProject = NULL; - bgluUnProject = NULL; - - return 0; -} -#endif - diff --git a/polymer-perf/eduke32/build/src/gtkbits.c b/polymer-perf/eduke32/build/src/gtkbits.c deleted file mode 100644 index c43b20387..000000000 --- a/polymer-perf/eduke32/build/src/gtkbits.c +++ /dev/null @@ -1,89 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "dynamicgtk.h" - -#include "baselayer.h" -#include "build.h" - -int32_t gtkenabled = 0; - -static GdkPixbuf *appicon = NULL; - -int32_t gtkbuild_msgbox(char *name, char *msg) -{ - GtkWidget *dialog; - - if (!gtkenabled) return -1; - - dialog = gtk_message_dialog_new(NULL, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_INFO, - GTK_BUTTONS_OK, - "%s", msg); - gtk_window_set_title(GTK_WINDOW(dialog), name); - gtk_dialog_run(GTK_DIALOG(dialog)); - gtk_widget_destroy(dialog); - - return 1; -} - -int32_t gtkbuild_ynbox(char *name, char *msg) -{ - int32_t r; - GtkWidget *dialog; - - if (!gtkenabled) return -1; - - dialog = gtk_message_dialog_new(NULL, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_INFO, - GTK_BUTTONS_YES_NO, - "%s", msg); - gtk_window_set_title(GTK_WINDOW(dialog), name); - r = gtk_dialog_run(GTK_DIALOG(dialog)); - gtk_widget_destroy(dialog); - - if (r == GTK_RESPONSE_YES) return 1; - return 0; -} - -#ifdef RENDERTYPESDL -#include "sdlayer.h" -extern struct sdlappicon sdlappicon; -#endif -void gtkbuild_init(int32_t *argc, char ***argv) -{ -#ifndef LINKED_GTK - gtkenabled = dynamicgtk_init(); - if (gtkenabled < 0) - { - gtkenabled = 0; - return; - } -#endif - gtkenabled = gtk_init_check(argc, argv); - if (!gtkenabled) return; -#ifdef RENDERTYPESDL - appicon = gdk_pixbuf_new_from_data((const guchar *)sdlappicon.pixels, - GDK_COLORSPACE_RGB, TRUE, 8, sdlappicon.width, sdlappicon.height, - sdlappicon.width*4, NULL, NULL); -#endif - if (appicon) gtk_window_set_default_icon(appicon); -} - -void gtkbuild_exit(int32_t r) -{ - UNREFERENCED_PARAMETER(r); - if (gtkenabled) - { - if (appicon) g_object_unref((gpointer)appicon); - } -#ifndef LINKED_GTK - dynamicgtk_uninit(); -#endif -} diff --git a/polymer-perf/eduke32/build/src/hightile.c b/polymer-perf/eduke32/build/src/hightile.c deleted file mode 100644 index c05b268a6..000000000 --- a/polymer-perf/eduke32/build/src/hightile.c +++ /dev/null @@ -1,305 +0,0 @@ -/* - * High-colour textures support for Polymost - * by Jonathon Fowler - * See the included license file "BUILDLIC.TXT" for license info. - */ - -#ifdef USE_OPENGL - -#include "build.h" -#include "compat.h" -#include "kplib.h" -#include "hightile.h" -#include "baselayer.h" - - -palette_t hictinting[MAXPALOOKUPS]; - -hicreplctyp *hicreplc[MAXTILES]; -char hicfirstinit = 0; - -// -// find the index into hicreplc[] which contains the replacement tile particulars -// -hicreplctyp *hicfindsubst(int32_t picnum, int32_t palnum, int32_t skybox) -{ - if (!hicfirstinit || (uint32_t)picnum >= (uint32_t)MAXTILES) return NULL; - - do - { - if (skybox) - { - hicreplctyp *hr = hicreplc[picnum]; - for (; hr; hr = hr->next) - if (hr->palnum == palnum && hr->skybox && !hr->skybox->ignore) - return hr; - } - else - { - hicreplctyp *hr = hicreplc[picnum]; - for (; hr; hr = hr->next) - if (hr->palnum == palnum && !hr->ignore) - return hr; - } - - if (!palnum || palnum >= (MAXPALOOKUPS - RESERVEDPALS)) break; - palnum = 0; - } - while (1); - - return NULL; // no replacement found -} - - -// -// hicinit() -// Initialize the high-colour stuff to default. -// -void hicinit(void) -{ - int32_t i,j; - hicreplctyp *hr, *next; - - for (i=0; i=0; i--) - { - for (hr=hicreplc[i]; hr;) - { - next = hr->next; - - if (hr->skybox) - { - for (j=5; j>=0; j--) - { - if (hr->skybox->face[j]) - { - Bfree(hr->skybox->face[j]); - } - } - Bfree(hr->skybox); - } - if (hr->filename) Bfree(hr->filename); - Bfree(hr); - - hr = next; - } - } - memset(hicreplc,0,sizeof(hicreplc)); - - hicfirstinit = 1; -} - - -// -// hicsetpalettetint(pal,r,g,b,effect) -// The tinting values represent a mechanism for emulating the effect of global sector -// palette shifts on true-colour textures and only true-colour textures. -// effect bitset: 1 = greyscale, 2 = invert -// -void hicsetpalettetint(int32_t palnum, char r, char g, char b, char effect) -{ - if ((uint32_t)palnum >= (uint32_t)MAXPALOOKUPS) return; - if (!hicfirstinit) hicinit(); - - hictinting[palnum].r = r; - hictinting[palnum].g = g; - hictinting[palnum].b = b; - hictinting[palnum].f = effect & HICEFFECTMASK; -} - - -// -// hicsetsubsttex(picnum,pal,filen,alphacut) -// Specifies a replacement graphic file for an ART tile. -// -int32_t hicsetsubsttex(int32_t picnum, int32_t palnum, const char *filen, float alphacut, float xscale, float yscale, float specpower, float specfactor, char flags) -{ - hicreplctyp *hr, *hrn; - - if ((uint32_t)picnum >= (uint32_t)MAXTILES) return -1; - if ((uint32_t)palnum >= (uint32_t)MAXPALOOKUPS) return -1; - if (!hicfirstinit) hicinit(); - - for (hr = hicreplc[picnum]; hr; hr = hr->next) - { - if (hr->palnum == palnum) - break; - } - - if (!hr) - { - // no replacement yet defined - hrn = (hicreplctyp *)Bcalloc(1,sizeof(hicreplctyp)); - if (!hrn) return -1; - hrn->palnum = palnum; - } - else hrn = hr; - - // store into hicreplc the details for this replacement - if (hrn->filename) Bfree(hrn->filename); - - hrn->filename = Bstrdup(filen); - if (!hrn->filename) - { - if (hrn->skybox) return -1; // don't free the base structure if there's a skybox defined - if (hr == NULL) Bfree(hrn); // not yet a link in the chain - return -1; - } - hrn->ignore = 0; - hrn->alphacut = min(alphacut,1.0); - hrn->xscale = xscale; - hrn->yscale = yscale; - hrn->specpower = specpower; - hrn->specfactor = specfactor; - hrn->flags = flags; - if (hr == NULL) - { - hrn->next = hicreplc[picnum]; - hicreplc[picnum] = hrn; - } - - if (tilesizx[picnum]<=0 || tilesizy[picnum]<=0) - { - static int32_t first=1; - initprintf("Warning: defined hightile replacement for empty tile %d.", picnum); - if (first) - { - initprintf(" Maybe some tilesXXX.art are not loaded?"); - first = 0; - } - initprintf("\n"); - } - - //printf("Replacement [%d,%d]: %s\n", picnum, palnum, hicreplc[i]->filename); - - return 0; -} - - -// -// hicsetskybox(picnum,pal,faces[6]) -// Specifies a graphic files making up a skybox. -// -int32_t hicsetskybox(int32_t picnum, int32_t palnum, char *faces[6]) -{ - hicreplctyp *hr, *hrn; - int32_t j; - - if ((uint32_t)picnum >= (uint32_t)MAXTILES) return -1; - if ((uint32_t)palnum >= (uint32_t)MAXPALOOKUPS) return -1; - for (j=5; j>=0; j--) if (!faces[j]) return -1; - if (!hicfirstinit) hicinit(); - - for (hr = hicreplc[picnum]; hr; hr = hr->next) - { - if (hr->palnum == palnum) - break; - } - - if (!hr) - { - // no replacement yet defined - hrn = (hicreplctyp *)Bcalloc(1,sizeof(hicreplctyp)); - if (!hrn) return -1; - - hrn->palnum = palnum; - } - else hrn = hr; - - if (!hrn->skybox) - { - hrn->skybox = (struct hicskybox_t *)Bcalloc(1,sizeof(struct hicskybox_t)); - if (!hrn->skybox) - { - if (hr == NULL) Bfree(hrn); // not yet a link in the chain - return -1; - } - } - else - { - for (j=5; j>=0; j--) - { - if (hrn->skybox->face[j]) - Bfree(hrn->skybox->face[j]); - } - } - - // store each face's filename - for (j=0; j<6; j++) - { - hrn->skybox->face[j] = Bstrdup(faces[j]); - if (!hrn->skybox->face[j]) - { - for (--j; j>=0; --j) // free any previous faces - Bfree(hrn->skybox->face[j]); - Bfree(hrn->skybox); - hrn->skybox = NULL; - if (hr == NULL) Bfree(hrn); - return -1; - } - } - hrn->skybox->ignore = 0; - if (hr == NULL) - { - hrn->next = hicreplc[picnum]; - hicreplc[picnum] = hrn; - } - - return 0; -} - - -// -// hicclearsubst(picnum,pal) -// Clears a replacement for an ART tile, including skybox faces. -// -int32_t hicclearsubst(int32_t picnum, int32_t palnum) -{ - hicreplctyp *hr, *hrn = NULL; - - if ((uint32_t)picnum >= (uint32_t)MAXTILES) return -1; - if ((uint32_t)palnum >= (uint32_t)MAXPALOOKUPS) return -1; - if (!hicfirstinit) return 0; - - for (hr = hicreplc[picnum]; hr; hrn = hr, hr = hr->next) - { - if (hr->palnum == palnum) - break; - } - - if (!hr) return 0; - - if (hr->filename) Bfree(hr->filename); - if (hr->skybox) - { - int32_t i; - for (i=5; i>=0; i--) - if (hr->skybox->face[i]) - Bfree(hr->skybox->face[i]); - Bfree(hr->skybox); - } - - if (hrn) hrn->next = hr->next; - else hicreplc[picnum] = hr->next; - Bfree(hr); - - return 0; -} - -#else /* POLYMOST */ - -#include "inttypes.h" - -void hicsetpalettetint(int32_t palnum, char r, char g, char b, char effect) { } -int32_t hicsetsubsttex(int32_t picnum, int32_t palnum, const char *filen, float alphacut) { return 0; } -int32_t hicsetskybox(int32_t picnum, int32_t palnum, char *faces[6]) { return 0; } -int32_t hicclearsubst(int32_t picnum, int32_t palnum) { return 0; } - -#endif - diff --git a/polymer-perf/eduke32/build/src/kplib.c b/polymer-perf/eduke32/build/src/kplib.c deleted file mode 100644 index fc9b44125..000000000 --- a/polymer-perf/eduke32/build/src/kplib.c +++ /dev/null @@ -1,3300 +0,0 @@ -/************************************************************************************************** -KPLIB.C: Ken's Picture LIBrary written by Ken Silverman -Copyright (c) 1998-2008 Ken Silverman -Ken Silverman's official web site: http://advsys.net/ken - -Features of KPLIB.C: - * Routines for decoding JPG/PNG/GIF/PCX/TGA/BMP/DDS/CEL. - See kpgetdim(), kprender(), and optional helper function: kpzload(). - * Routines for reading files out of ZIP/GRP files. All ZIP/GRP functions start with "kz". - * Multi-platform support: Dos/Windows/Linux/Mac/etc.. - * Compact code, all in a single source file. Yeah, bad design on my part... but makes life - easier for everyone else - you simply add a single C file to your project, throw a few - externs in there, add the function calls, and you're done! - -Brief history: -1998?: Wrote KPEG, a JPEG viewer for DOS -2000: Wrote KPNG, a PNG viewer for DOS -2001: Combined KPEG & KPNG, ported to Visual C, and made it into a library called KPLIB.C -2002: Added support for TGA,GIF,CEL,ZIP -2003: Added support for BMP -05/18/2004: Added support for 8&24 bit PCX -12/09/2005: Added support for progressive JPEG -01/05/2006: Added support for DDS -07/28/2007: Added support for GRP (Build Engine archive) - -I offer this code to the community for free use - all I ask is that my name be included in the -credits. - --Ken S. -**************************************************************************************************/ - -#include "compat.h" - -#include -#include -#include -#include -#include -#include - -#if defined(__POWERPC__) -#define BIGENDIAN 1 -#endif - -#ifdef BIGENDIAN -static uint32_t LSWAPIB(uint32_t a) { return(((a>>8)&0xff00)+((a&0xff00)<<8)+(a<<24)+(a>>24)); } -static uint16_t SSWAPIB(uint16_t a) { return((a>>8)+(a<<8)); } -#define LSWAPIL(a) (a) -#define SSWAPIL(a) (a) -#else -#define LSWAPIB(a) (a) -#define SSWAPIB(a) (a) -static uint32_t LSWAPIL(uint32_t a) { return(((a>>8)&0xff00)+((a&0xff00)<<8)+(a<<24)+(a>>24)); } -static uint16_t SSWAPIL(uint16_t a) { return((a>>8)+(a<<8)); } -#endif - -#if !defined(_WIN32) -#include -#include -typedef long long __int64; -static __inline int32_t _lrotl(int32_t i, int sh) -{ return((i>>(-sh))|(i< -#endif - -#if defined(_WIN32) -#define WIN32_LEAN_AND_MEAN -#include -#endif - -#ifndef O_BINARY -#define O_BINARY 0 -#endif -#if !defined(max) -#define max(a,b) (((a) > (b)) ? (a) : (b)) -#endif -#if !defined(min) -#define min(a,b) (((a) < (b)) ? (a) : (b)) -#endif - -#if defined(__GNUC__) -#define _inline inline -#endif - -//use GCC-specific extension to force symbol name to be something in particular to override underscoring. -#if defined(__GNUC__) && defined(__i386__) && !defined(NOASM) -#define ASMNAME(x) asm(x) -#else -#define ASMNAME(x) -#endif - -static intptr_t frameplace; -static int32_t bytesperline, xres, yres, globxoffs, globyoffs; - -static const int32_t pow2mask[32] = -{ - 0x00000000,0x00000001,0x00000003,0x00000007, - 0x0000000f,0x0000001f,0x0000003f,0x0000007f, - 0x000000ff,0x000001ff,0x000003ff,0x000007ff, - 0x00000fff,0x00001fff,0x00003fff,0x00007fff, - 0x0000ffff,0x0001ffff,0x0003ffff,0x0007ffff, - 0x000fffff,0x001fffff,0x003fffff,0x007fffff, - 0x00ffffff,0x01ffffff,0x03ffffff,0x07ffffff, - 0x0fffffff,0x1fffffff,0x3fffffff,0x7fffffff, -}; -static const int32_t pow2long[32] = -{ - 0x00000001,0x00000002,0x00000004,0x00000008, - 0x00000010,0x00000020,0x00000040,0x00000080, - 0x00000100,0x00000200,0x00000400,0x00000800, - 0x00001000,0x00002000,0x00004000,0x00008000, - 0x00010000,0x00020000,0x00040000,0x00080000, - 0x00100000,0x00200000,0x00400000,0x00800000, - 0x01000000,0x02000000,0x04000000,0x08000000, - 0x10000000,0x20000000,0x40000000,0x80000000, -}; - -//Hack for peekbits,getbits,suckbits (to prevent lots of duplicate code) -// 0: PNG: do 12-byte chunk_header removal hack -// !=0: ZIP: use 64K buffer (olinbuf) -static int32_t zipfilmode; -typedef struct -{ - FILE *fil; //0:no file open, !=0:open file (either stand-alone or zip) - int32_t comptyp; //0:raw data (can be ZIP or stand-alone), 8:PKZIP LZ77 *flate - int32_t seek0; //0:stand-alone file, !=0: start of zip compressed stream data - int32_t compleng;//Global variable for compression FIFO - int32_t comptell;//Global variable for compression FIFO - int32_t leng; //Uncompressed file size (bytes) - int32_t pos; //Current uncompressed relative file position (0<=pos<=leng) - int32_t endpos; //Temp global variable for kzread - int32_t jmpplc; //Store place where decompression paused - int32_t i; //For stand-alone/ZIP comptyp#0, this is like "uncomptell" - //For ZIP comptyp#8&btype==0 "<64K store", this saves i state - int32_t bfinal; //LZ77 decompression state (for later calls) -} kzfilestate; -static kzfilestate kzfs; - -//Initialized tables (can't be in union) -//jpg: png: -// crmul 16384 abstab10 4096 -// cbmul 16384 hxbit 472 -// dct 4608 pow2mask 128* -// colclip 4096 -// colclipup8 4096 -// colclipup16 4096 -// unzig 256 -// pow2mask 128* -// dcflagor 64 - -int32_t palcol[256] ASMNAME("palcol"), paleng, bakcol, numhufblocks, zlibcompflags; -int8_t coltype, filtype, bitdepth; - -//============================ KPNGILIB begins =============================== - -//07/31/2000: KPNG.C first ported to C from READPNG.BAS -//10/11/2000: KPNG.C split into 2 files: KPNG.C and PNGINLIB.C -//11/24/2000: Finished adding support for coltypes 4&6 -//03/31/2001: Added support for Adam7-type interlaced images -//Currently, there is no support for: -// * 16-bit color depth -// * Some useless ancillary chunks, like: gAMA(gamma) & pHYs(aspect ratio) - -//.PNG specific variables: -static int32_t bakr = 0x80, bakg = 0x80, bakb = 0x80; //this used to be public... -static int32_t gslidew = 0, gslider = 0, xm, xmn[4], xr0, xr1, xplc, yplc; -static intptr_t nfplace; -static int32_t clen[320], cclen[19], bitpos, filt, xsiz, ysiz; -static int32_t xsizbpl, ixsiz, ixoff, iyoff, ixstp, iystp, intlac, nbpl, trnsrgb ASMNAME("trnsrgb"); -static int32_t ccind[19] = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15}; -static int32_t hxbit[59][2], ibuf0[288], nbuf0[32], ibuf1[32], nbuf1[32]; -static const uint8_t *filptr; -static uint8_t slidebuf[32768], opixbuf0[4], opixbuf1[4]; -static uint8_t pnginited = 0, olinbuf[131072] ASMNAME("olinbuf"); //WARNING:max xres is: 131072/bpp-1 -static int32_t gotcmov = -2, abstab10[1024] ASMNAME("abstab10"); - -//Variables to speed up dynamic Huffman decoding: -#define LOGQHUFSIZ0 9 -#define LOGQHUFSIZ1 6 -static int32_t qhufval0[1<>8) + ((a&0xff00)<<8) + (a<<24) + (a>>24)); -} - -static inline int32_t bitrev(int32_t b, int32_t c) -{ - int32_t i, j; - for (i=1,j=0,c=(1< 0x80000000) - { - cpuid(0x80000001,cpb); - i |= (cpb[3]&(1<<31)); - if (!((cpid[1]^0x68747541)|(cpid[3]^0x69746e65)|(cpid[2]^0x444d4163))) //AuthenticAMD - i |= (cpb[3]&((1<<22)|(1<<30))); - } - if (i&(1<<25)) i |= (1<<22); //SSE implies MMX+ support - return(i); -} - -static uint8_t fakebuf[8], *nfilptr; -static int32_t nbitpos; -static void suckbitsnextblock() -{ - int32_t n; - - if (!zipfilmode) - { - if (!nfilptr) - { - //|===|===|crc|lng|typ|===|===| - // \ fakebuf: / - // |===|===| - //----x O---x O-------- - nbitpos = LSWAPIL(*(int32_t *)&filptr[8]); - nfilptr = (uint8_t *)&filptr[nbitpos+12]; - *(int32_t *)&fakebuf[0] = *(int32_t *)&filptr[0]; //Copy last dword of IDAT chunk - if (*(int32_t *)&filptr[12] == LSWAPIB(0x54414449)) //Copy 1st dword of next IDAT chunk - *(int32_t *)&fakebuf[4] = *(int32_t *)&filptr[16]; - filptr = &fakebuf[4]; bitpos -= 32; - } - else - { - filptr = nfilptr; nfilptr = 0; - bitpos -= ((nbitpos-4)<<3); - } - //if (n_from_suckbits < 4) will it crash? - } - else - { - //NOTE: should only read bytes inside compsize, not 64K!!! :/ - *(int32_t *)&olinbuf[0] = *(int32_t *)&olinbuf[sizeof(olinbuf)-4]; - n = min((unsigned)(kzfs.compleng-kzfs.comptell),sizeof(olinbuf)-4); - fread(&olinbuf[4],n,1,kzfs.fil); - kzfs.comptell += n; - bitpos -= ((sizeof(olinbuf)-4)<<3); - } -} - -static _inline int32_t peekbits(int32_t n) { return((LSWAPIB(*(int32_t *)&filptr[bitpos>>3])>>(bitpos&7))&pow2mask[n]); } -static _inline void suckbits(int32_t n) { bitpos += n; if (bitpos >= 0) suckbitsnextblock(); } -static _inline int32_t getbits(int32_t n) { int32_t i = peekbits(n); suckbits(n); return(i); } - -static int32_t hufgetsym(int32_t *hitab, int32_t *hbmax) -{ - int32_t v, n; - - v = n = 0; - do { v = (v<<1)+getbits(1)+hbmax[n]-hbmax[n+1]; n++; } - while (v >= 0); - return(hitab[hbmax[n]+v]); -} - -//This did not result in a speed-up on P4-3.6Ghz (02/22/2005) -//static int32_t hufgetsym_skipb (int32_t *hitab, int32_t *hbmax, int32_t n, int32_t addit) -//{ -// int32_t v; -// -// v = bitrev(getbits(n),n)+addit; -// do { v = (v<<1)+getbits(1)+hbmax[n]-hbmax[n+1]; n++; } while (v >= 0); -// return(hitab[hbmax[n]+v]); -//} - -static void qhufgencode(int32_t *hitab, int32_t *hbmax, int32_t *qhval, uint8_t *qhbit, int32_t numbits) -{ - int32_t i, j, k, n, r; - - //r is the bit reverse of i. Ex: if: i = 1011100111, r = 1110011101 - i = r = 0; - for (n=1; n<=numbits; n++) - for (k=hbmax[n-1]; k>n)&1) + hbmax[n]-hbmax[n+1]; - // - //n = numbits; - //k = hbmax[n]-r; - // - //j = peekbits(LOGQHUFSIZ); i = qhufval[j]; j = qhufbit[j]; - // - //i = j = 0; - //do - //{ - // i = (i<<1)+getbits(1)+nbuf0[j]-nbuf0[j+1]; j++; - //} while (i >= 0); - //i = ibuf0[nbuf0[j]+i]; - //qhval[r] = k; - - qhbit[r] = 0; //n-32; - } - - // //hufgetsym_skipb related code: - //for(k=n=0;n=0; i--) tbuf[inbuf[i]]++; - tbuf[0] = hbmax[0] = 0; //Hack to remove symbols of length 0? - for (i=0; i<31; i++) hbmax[i+1] = hbmax[i]+tbuf[i]; - for (i=0; i>i)&15); - iyoff = ((0x00402010>>i)&15); - if (((ixoff >= xsiz) || (iyoff >= ysiz)) && (intlac >= 2)) { i = -1; intlac--; } - } - while (i < 0); - j = ((0x33221100>>i)&15); ixstp = (1<>i)&15); iystp = (1<>3) = 2 - //j=3,ixoff=4 2 ((12+(1<<3)-1 - 4)>>3) = 1 - //j=2,ixoff=2 3 4 5 ((12+(1<<2)-1 - 2)>>2) = 3 - //j=1,ixoff=1 6 7 8 9 a b ((12+(1<<1)-1 - 1)>>1) = 6 - ixsiz = ((xsiz+ixstp-1-ixoff)>>j); //It's confusing! See the above example. - nbpl = (bytesperline<>(coltype<<2))&15)*ixsiz; - switch (bitdepth) - { - case 1: xsizbpl = ((xsizbpl+7)>>3); break; - case 2: xsizbpl = ((xsizbpl+3)>>2); break; - case 4: xsizbpl = ((xsizbpl+1)>>1); break; - } - - Bmemset(olinbuf,0,(xsizbpl+1)*sizeof(olinbuf[0])); - *(int32_t *)&opixbuf0[0] = *(int32_t *)&opixbuf1[0] = 0; - xplc = xsizbpl; yplc = globyoffs+iyoff; xm = 0; filt = -1; - - i = globxoffs+ixoff; i = (((-(i>=0))|(ixstp-1))&i); - k = (((-(yplc>=0))|(iystp-1))&yplc); - nfplace = k*bytesperline + (i<<2) + frameplace; - - //Precalculate x-clipping to screen borders (speeds up putbuf) - //Equation: (0 <= xr <= ixsiz) && (0 <= xr*ixstp+globxoffs+ixoff <= xres) - xr0 = max((-globxoffs-ixoff+(1<>j,0); - xr1 = min((xres-globxoffs-ixoff+(1<>j,ixsiz); - xr0 = ixsiz-xr0; - xr1 = ixsiz-xr1; - - if (coltype == 4) { xr0 = xr0*2; xr1 = xr1*2; } - else if (coltype == 2) { xr0 = xr0*3-2; xr1 = xr1*3-2; } - else if (coltype == 6) { xr0 = xr0*4-2; xr1 = xr1*4-2; } - else - { - switch (bitdepth) - { - case 1: xr0 += ((-ixsiz)&7)+7; - xr1 += ((-ixsiz)&7)+7; break; - case 2: xr0 = ((xr0+((-ixsiz)&3)+3)<<1); - xr1 = ((xr1+((-ixsiz)&3)+3)<<1); break; - case 4: xr0 = ((xr0+((-ixsiz)&1)+1)<<2); - xr1 = ((xr1+((-ixsiz)&1)+1)<<2); break; - } - } - ixstp <<= 2; - return(0); -} - -static int32_t Paeth(int32_t a, int32_t b, int32_t c) -{ - int32_t pa, pb, pc; - - pa = b-c; pb = a-c; pc = labs(pa+pb); pa = labs(pa); pb = labs(pb); - if ((pa <= pb) && (pa <= pc)) return(a); - if (pb <= pc) return(b); else return(c); -} - -#if defined(_MSC_VER) && !defined(NOASM) - -static _inline int32_t Paeth686(int32_t a, int32_t b, int32_t c) -{ - _asm - { - push ebx - push esi - push edi - mov eax, a - mov ebx, b - mov ecx, c - mov edx, ecx - sub edx, eax - sub edx, ebx - lea edx, abstab10[edx*4+2048] - mov esi, [ebx*4+edx] - mov edi, [ecx*4+edx] - cmp edi, esi - cmovge edi, esi - cmovge ecx, ebx - cmp edi, [eax*4+edx] - cmovl eax, ecx - pop edi - pop esi - pop ebx - } -} - -static _inline void rgbhlineasm(int32_t c, int32_t d, int32_t t, int32_t b) -{ - _asm - { - push ebx - push edi - - mov ecx, c - mov edx, d - mov edi, t - mov ebx, b - sub ecx, edx - jle short endit - add edx, offset olinbuf - cmp dword ptr trnsrgb, 0 - jz short begit2 - begit: - mov eax, dword ptr [ecx+edx] - or eax, 0xff000000 - cmp eax, dword ptr trnsrgb - jne short skipit - and eax, 0xffffff - skipit: - sub ecx, 3 - mov [edi], eax - lea edi, [edi+ebx] - jnz short begit - jmp short endit - begit2: - mov eax, dword ptr [ecx+edx] - or eax, 0xff000000 - sub ecx, 3 - mov [edi], eax - lea edi, [edi+ebx] - jnz short begit2 - endit: - pop edi - pop ebx - } -} - -static _inline void pal8hlineasm(int32_t c, int32_t d, int32_t t, int32_t b) -{ - _asm - { - mov ecx, c - mov edx, d - sub ecx, edx - jle short endit - - push ebx - push edi - mov edi, t - mov ebx, b - add edx, offset olinbuf - begit:movzx eax, byte ptr [ecx+edx] - mov eax, dword ptr palcol[eax*4] - sub ecx, 1 - mov [edi], eax - lea edi, [edi+ebx] - jnz short begit - pop edi - pop ebx - endit: - } -} - -#elif defined(__GNUC__) && defined(__i386__) && !defined(NOASM) - -static inline int32_t Paeth686(int32_t a, int32_t b, int32_t c) -{ - __asm__ __volatile__( - "movl %%ecx, %%edx \n" - "subl %%eax, %%edx \n" - "subl %%ebx, %%edx \n" - "leal (abstab10+2048)(,%%edx,4), %%edx \n" - "movl (%%edx,%%ebx,4), %%esi \n" - "movl (%%edx,%%ecx,4), %%edi \n" - "cmpl %%esi, %%edi \n" - "cmovgel %%esi, %%edi \n" - "cmovgel %%ebx, %%ecx \n" - "cmpl (%%edx,%%eax,4), %%edi \n" - "cmovgel %%eax, %%ecx \n" - : "+c"(c) : "a"(a), "b"(b) : "edx","esi","edi","memory","cc" - ); - return c; -} - -//Note: "cmove eax,?" may be faster than "jne ?:and eax,?" but who cares -static inline void rgbhlineasm(int32_t c, int32_t d, int32_t t, int32_t b) -{ - __asm__ __volatile__( - "subl %%edx, %%ecx \n" - "jle 3f \n" - "addl $olinbuf, %%edx \n" - "cmpl $0, trnsrgb(,1) \n" - "jz 2f \n" - "0: movl (%%ecx,%%edx,1), %%eax \n" - "orl $0xff000000, %%eax \n" - "cmpl trnsrgb(,1), %%eax \n" - "jne 1f \n" - "andl $0xffffff, %%eax \n" - "1: subl $3, %%ecx \n" - "movl %%eax, (%%edi) \n" - "leal (%%edi,%%ebx,1), %%edi \n" - "jnz 0b \n" - "jmp 3f \n" - "2: movl (%%ecx,%%edx,1), %%eax \n" - "orl $0xff000000, %%eax \n" - "subl $3, %%ecx \n" - "movl %%eax, (%%edi) \n" - "leal (%%edi,%%ebx,1), %%edi \n" - "jnz 2b \n" - "3: \n" - : "+c"(c), "+d"(d), "+D"(t) : "b"(b) : "eax","memory","cc" - ); -} - -static inline void pal8hlineasm(int32_t c, int32_t d, int32_t t, int32_t b) -{ - __asm__ __volatile__( - "subl %%edx, %%ecx \n" - "jle 1f \n" - "addl $olinbuf, %%edx \n" - "0: movzbl (%%ecx,%%edx,1), %%eax \n" - "movl palcol(,%%eax,4), %%eax \n" - "subl $1, %%ecx \n" - "movl %%eax, (%%edi) \n" - "leal (%%edi,%%ebx,1), %%edi \n" - "jnz 0b \n" - "1: \n" - : "+c"(c), "+d"(d), "+D"(t) : "b"(b) : "eax","memory","cc" - ); -} - -#else - -static inline int32_t Paeth686(int32_t a, int32_t b, int32_t c) -{ - return(Paeth(a,b,c)); -} - -static inline void rgbhlineasm(int32_t x, int32_t xr1, intptr_t p, int32_t ixstp) -{ - int32_t i; - if (!trnsrgb) - { - for (; x>xr1; p+=ixstp,x-=3) *(int32_t *)p = (*(int32_t *)&olinbuf[x])|LSWAPIB(0xff000000); - return; - } - for (; x>xr1; p+=ixstp,x-=3) - { - i = (*(int32_t *)&olinbuf[x])|LSWAPIB(0xff000000); - if (i == trnsrgb) i &= LSWAPIB(0xffffff); - *(int32_t *)p = i; - } -} - -static inline void pal8hlineasm(int32_t x, int32_t xr1, intptr_t p, int32_t ixstp) -{ - for (; x>xr1; p+=ixstp,x--) *(int32_t *)p = palcol[olinbuf[x]]; -} - -#endif - -//Autodetect filter -// /f0: 0000000... -// /f1: 1111111... -// /f2: 2222222... -// /f3: 1333333... -// /f3: 3333333... -// /f4: 4444444... -// /f5: 0142321... -static int32_t filter1st, filterest; -static void putbuf(const uint8_t *buf, int32_t leng) -{ - int32_t i, x; - intptr_t p; - - if (filt < 0) - { - if (leng <= 0) return; - filt = buf[0]; - if (filter1st < 0) filter1st = filt; else filterest |= (1< leng) x = leng; - switch (filt) - { - case 0: - while (i < x) { olinbuf[xplc] = buf[i]; xplc--; i++; } - break; - case 1: - while (i < x) - { - olinbuf[xplc] = (uint8_t)(opixbuf1[xm] += buf[i]); - xm = xmn[xm]; xplc--; i++; - } - break; - case 2: - while (i < x) { olinbuf[xplc] += (uint8_t)buf[i]; xplc--; i++; } - break; - case 3: - while (i < x) - { - opixbuf1[xm] = olinbuf[xplc] = (uint8_t)(((opixbuf1[xm]+olinbuf[xplc])>>1)+buf[i]); - xm = xmn[xm]; xplc--; i++; - } - break; - case 4: - while (i < x) - { - opixbuf1[xm] = (uint8_t)(Paeth(opixbuf1[xm],olinbuf[xplc],opixbuf0[xm])+buf[i]); - opixbuf0[xm] = olinbuf[xplc]; - olinbuf[xplc] = opixbuf1[xm]; - xm = xmn[xm]; xplc--; i++; - } - break; - case 5: //Special hack for Paeth686 (Doesn't have to be case 5) - while (i < x) - { - opixbuf1[xm] = (uint8_t)(Paeth686(opixbuf1[xm],olinbuf[xplc],opixbuf0[xm])+buf[i]); - opixbuf0[xm] = olinbuf[xplc]; - olinbuf[xplc] = opixbuf1[xm]; - xm = xmn[xm]; xplc--; i++; - } - break; - } - - if (xplc > 0) return; - - //Draw line! - if ((uint32_t)yplc < (uint32_t)yres) - { - x = xr0; p = nfplace; - switch (coltype) - { - case 2: rgbhlineasm(x,xr1,p,ixstp); break; - case 4: - for (; x>xr1; p+=ixstp,x-=2) - *(int32_t *)p = (palcol[olinbuf[x]]&LSWAPIB(0xffffff))|LSWAPIL((int32_t)olinbuf[x-1]); - break; - case 6: - for (; x>xr1; p+=ixstp,x-=4) - { - *(char *)(p) = olinbuf[x ]; //B - *(char *)(p+1) = olinbuf[x+1]; //G - *(char *)(p+2) = olinbuf[x+2]; //R - *(char *)(p+3) = olinbuf[x-1]; //A - } - break; - default: - switch (bitdepth) - { - case 1: for (; x>xr1; p+=ixstp,x--) *(int32_t *)p = palcol[olinbuf[x>>3]>>(x&7)]; break; - case 2: for (; x>xr1; p+=ixstp,x-=2) *(int32_t *)p = palcol[olinbuf[x>>3]>>(x&6)]; break; - case 4: for (; x>xr1; p+=ixstp,x-=4) *(int32_t *)p = palcol[olinbuf[x>>3]>>(x&4)]; break; - case 8: pal8hlineasm(x,xr1,p,ixstp); break; //for(;x>xr1;p+=ixstp,x-- ) *(int32_t *)p = palcol[olinbuf[x]]; break; - } - break; - } - nfplace += nbpl; - } - - *(int32_t *)&opixbuf0[0] = *(int32_t *)&opixbuf1[0] = 0; - xplc = xsizbpl; yplc += iystp; - if ((intlac) && (yplc >= globyoffs+ysiz)) { intlac--; initpass(); } - if (i < leng) - { - filt = buf[i++]; - if (filter1st < 0) filter1st = filt; else filterest |= (1<= 2)); - } - j = 3; k = 0; - for (i=257; i<285; i++) - { - hxbit[i+30-257][1] = j; j += (1<= 264)); - } - hxbit[285+30-257][1] = 258; hxbit[285+30-257][0] = 0; - - k = getcputype(); - if (k&(1<<15)) - { - gotcmov = 4; - for (i=0; i<512; i++) abstab10[512+i] = abstab10[512-i] = i; - } -} - -static int32_t kpngrend(const char *kfilebuf, int32_t kfilength, - intptr_t daframeplace, int32_t dabytesperline, int32_t daxres, int32_t dayres, - int32_t daglobxoffs, int32_t daglobyoffs) -{ - int32_t i, j, k, bfinal, btype, hlit, hdist, leng; - int32_t slidew, slider; - //int32_t qhuf0v, qhuf1v; - - UNREFERENCED_PARAMETER(kfilength); - - if (!pnginited) { pnginited = 1; initpngtables(); } - - if ((*(int32_t *)&kfilebuf[0] != LSWAPIB(0x474e5089)) || (*(int32_t *)&kfilebuf[4] != LSWAPIB(0x0a1a0a0d))) - return(-1); //"Invalid PNG file signature" - filptr = (uint8_t *)&kfilebuf[8]; - - trnsrgb = 0; filter1st = -1; filterest = 0; - - while (1) - { - leng = LSWAPIL(*(int32_t *)&filptr[0]); i = *(int32_t *)&filptr[4]; - filptr = &filptr[8]; - - if (i == LSWAPIB(0x52444849)) //IHDR (must be first) - { - xsiz = LSWAPIL(*(int32_t *)&filptr[0]); if (xsiz <= 0) return(-1); - ysiz = LSWAPIL(*(int32_t *)&filptr[4]); if (ysiz <= 0) return(-1); - bitdepth = filptr[8]; if (!((1<= 2) return(-1); //"Unsupported interlace type" - intlac = filptr[12]*7; //0=no interlace/1=Adam7 interlace - - //Save code by making grayscale look like a palette color scheme - if ((!coltype) || (coltype == 4)) - { - j = 0xff000000; k = (255 / ((1<=0; i--) palcol[i] = LSWAPIB((LSWAPIL(*(int32_t *)&filptr[i*3])>>8)|0xff000000); - } - else if (i == LSWAPIB(0x44474b62)) //bKGD (must be after PLTE and before IDAT) - { - switch (coltype) - { - case 0: case 4: - bakcol = (((int32_t)filptr[0]<<8)+(int32_t)filptr[1])*255/((1<>16)&255); - bakg = ((bakcol>>8)&255); - bakb = (bakcol&255); - bakcol = LSWAPIB(bakcol); - } - else if (i == LSWAPIB(0x534e5274)) //tRNS (must be after PLTE and before IDAT) - { - switch (coltype) - { - case 0: - if (bitdepth <= 8) - palcol[(int32_t)filptr[1]] &= LSWAPIB(0xffffff); - //else {} // /c0 /d16 not yet supported - break; - case 2: - if (bitdepth == 8) - { trnsrgb = LSWAPIB((((int32_t)filptr[1])<<16)+(((int32_t)filptr[3])<<8)+((int32_t)filptr[5])+0xff000000); } - //else {} //WARNING: PNG docs say: MUST compare all 48 bits :( - break; - case 3: - for (i=min(leng,paleng)-1; i>=0; i--) - palcol[i] &= LSWAPIB((((int32_t)filptr[i])<<24)|0xffffff); - break; - default:; - } - } - else if (i == LSWAPIB(0x54414449)) { break; } //IDAT - - filptr = &filptr[leng+4]; //crc = LSWAPIL(*(int32_t *)&filptr[-4]); - } - - //Initialize this for the getbits() function - zipfilmode = 0; - filptr = &filptr[leng-4]; bitpos = -((leng-4)<<3); nfilptr = 0; - //if (leng < 4) will it crash? - - frameplace = daframeplace; - bytesperline = dabytesperline; - xres = daxres; - yres = dayres; - globxoffs = daglobxoffs; - globyoffs = daglobyoffs; - - switch (coltype) - { - case 4: xmn[0] = 1; xmn[1] = 0; break; - case 2: xmn[0] = 1; xmn[1] = 2; xmn[2] = 0; break; - case 6: xmn[0] = 1; xmn[1] = 2; xmn[2] = 3; xmn[3] = 0; break; - default: xmn[0] = 0; break; - } - switch (bitdepth) - { - case 1: for (i=2; i<256; i++) palcol[i] = palcol[i&1]; break; - case 2: for (i=4; i<256; i++) palcol[i] = palcol[i&3]; break; - case 4: for (i=16; i<256; i++) palcol[i] = palcol[i&15]; break; - } - - //coltype: bitdepth: format: - // 0 1,2,4,8,16 I - // 2 8,16 RGB - // 3 1,2,4,8 P - // 4 8,16 IA - // 6 8,16 RGBA - xsizbpl = ((0x04021301>>(coltype<<2))&15)*xsiz; - switch (bitdepth) - { - case 1: xsizbpl = ((xsizbpl+7)>>3); break; - case 2: xsizbpl = ((xsizbpl+3)>>2); break; - case 4: xsizbpl = ((xsizbpl+1)>>1); break; - } - //Tests to see if xsiz > allocated space in olinbuf - //Note: xsizbpl gets re-written inside initpass() - if ((xsizbpl+1)*sizeof(olinbuf[0]) > sizeof(olinbuf)) return(-1); - - initpass(); - - slidew = 0; slider = 16384; - zlibcompflags = getbits(16); //Actually 2 fields: 8:compmethflags, 8:addflagscheck - do - { - bfinal = getbits(1); btype = getbits(2); - if (btype == 0) - { - //Raw (uncompressed) - suckbits((-bitpos)&7); //Synchronize to start of next byte - i = getbits(16); if ((getbits(16)^i) != 0xffff) return(-1); - for (; i; i--) - { - if (slidew >= slider) - { - putbuf(&slidebuf[(slider-16384)&32767],16384); slider += 16384; - if ((yplc >= yres) && (intlac < 2)) goto kpngrend_goodret; - } - slidebuf[(slidew++)&32767] = (uint8_t)getbits(8); - } - continue; - } - if (btype == 3) continue; - - if (btype == 1) //Fixed Huffman - { - hlit = 288; hdist = 32; i = 0; - for (; i<144; i++) clen[i] = 8; //Fixed bit sizes (literals) - for (; i<256; i++) clen[i] = 9; //Fixed bit sizes (literals) - for (; i<280; i++) clen[i] = 7; //Fixed bit sizes (EOI,lengths) - for (; i<288; i++) clen[i] = 8; //Fixed bit sizes (lengths) - for (; i<320; i++) clen[i] = 5; //Fixed bit sizes (distances) - } - else //Dynamic Huffman - { - numhufblocks++; - hlit = getbits(5)+257; hdist = getbits(5)+1; j = getbits(4)+4; - for (i=0; i= slider) - { - putbuf(&slidebuf[(slider-16384)&32767],16384); slider += 16384; - if ((yplc >= yres) && (intlac < 2)) goto kpngrend_goodret; - } - - k = peekbits(LOGQHUFSIZ0); - if (qhufbit0[k]) { i = qhufval0[k]; suckbits((int32_t)qhufbit0[k]); } - else i = hufgetsym(ibuf0,nbuf0); - //else i = hufgetsym_skipb(ibuf0,nbuf0,LOGQHUFSIZ0,qhuf0v); //hufgetsym_skipb related code - - if (i < 256) { slidebuf[(slidew++)&32767] = (uint8_t)i; continue; } - if (i == 256) break; - i = getbits(hxbit[i+30-257][0]) + hxbit[i+30-257][1]; - - k = peekbits(LOGQHUFSIZ1); - if (qhufbit1[k]) { j = qhufval1[k]; suckbits((int32_t)qhufbit1[k]); } - else j = hufgetsym(ibuf1,nbuf1); - //else j = hufgetsym_skipb(ibuf1,nbuf1,LOGQHUFSIZ1,qhuf1v); //hufgetsym_skipb related code - - j = getbits(hxbit[j][0]) + hxbit[j][1]; - i += slidew; do { slidebuf[slidew&32767] = slidebuf[(slidew-j)&32767]; slidew++; } - while (slidew < i); - } - } - while (!bfinal); - - slider -= 16384; - if (!((slider^slidew)&32768)) - putbuf(&slidebuf[slider&32767],slidew-slider); - else - { - putbuf(&slidebuf[slider&32767],(-slider)&32767); - putbuf(slidebuf,slidew&32767); - } - - kpngrend_goodret:; - if (!(filterest&~(1<>24)); -} - -static inline int32_t mulshr32(int32_t a, int32_t b) -{ - return((int32_t)((((__int64)a)*((__int64)b))>>32)); -} - -#endif - -static int32_t cosqr16[8] = //cosqr16[i] = ((cos(PI*i/16)*sqrt(2))<<24); -{23726566,23270667,21920489,19727919,16777216,13181774,9079764,4628823}; -static int32_t crmul[4096], cbmul[4096]; - -static void initkpeg() -{ - int32_t i, x, y; - - x = 0; //Back & forth diagonal pattern (aligning bytes for best compression) - for (i=0; i<16; i+=2) - { - for (y=8-1; y>=0; y--) - if ((unsigned)(i-y) < (unsigned)8) unzig[x++] = (y<<3)+i-y; - for (y=0; y<8; y++) - if ((unsigned)(i+1-y) < (unsigned)8) unzig[x++] = (y<<3)+i+1-y; - } - for (i=64-1; i>=0; i--) zigit[unzig[i]] = i; - for (i=64-1; i>=0; i--) dcflagor[i] = (uint8_t)(1<<(unzig[i]>>3)); - - for (i=0; i<128; i++) colclip[i] = i+128; - for (i=128; i<512; i++) colclip[i] = 255; - for (i=512; i<896; i++) colclip[i] = 0; - for (i=896; i<1024; i++) colclip[i] = i-896; - for (i=0; i<1024; i++) - { - colclipup8[i] = (colclip[i]<<8); - colclipup16[i] = (colclip[i]<<16)+0xff000000; //Hack: set alphas to 255 - } -#if defined(BIGENDIAN) - for (i=0; i<1024; i++) - { - colclip[i] = bswap(colclip[i]); - colclipup8[i] = bswap(colclipup8[i]); - colclipup16[i] = bswap(colclipup16[i]); - } -#endif - - for (i=0; i<2048; i++) - { - crmul[(i<<1)+0] = (i-1024)*1470104; //1.402*1048576 - crmul[(i<<1)+1] = (i-1024)*-748830; //-0.71414*1048576 - cbmul[(i<<1)+0] = (i-1024)*-360857; //-0.34414*1048576 - cbmul[(i<<1)+1] = (i-1024)*1858077; //1.772*1048576 - } - - Bmemset((void *)&dct[10][0],0,64*2*sizeof(dct[0][0])); -} - -static void huffgetval(int32_t index, int32_t curbits, int32_t num, int32_t *daval, int32_t *dabits) -{ - int32_t b, v, pow2, *hmax; - - hmax = &hufmaxatbit[index][0]; - pow2 = pow2long[curbits-1]; - if (num&pow2) v = 1; else v = 0; - for (b=1; b<=16; b++) - { - if (v < hmax[b]) - { - *dabits = b; - *daval = huftable[index][hufvalatbit[index][b]+v]; - return; - } - pow2 >>= 1; v <<= 1; - if (num&pow2) v++; - } - *dabits = 16; *daval = 0; -} - -static void invdct8x8(int32_t *dc, uint8_t dcflag) -{ -#define SQRT2 23726566 //(sqrt(2))<<24 -#define C182 31000253 //(cos(PI/8)*2)<<24 -#define C18S22 43840978 //(cos(PI/8)*sqrt(2)*2)<<24 -#define C38S22 18159528 //(cos(PI*3/8)*sqrt(2)*2)<<24 - int32_t *edc, t0, t1, t2, t3, t4, t5, t6, t7; - - edc = dc+64; - do - { - if (dcflag&1) //pow2char[z]) - { - t3 = dc[2] + dc[6]; - t2 = (mulshr32(dc[2]-dc[6],SQRT2<<6)<<2) - t3; - t4 = dc[0] + dc[4]; t5 = dc[0] - dc[4]; - t0 = t4+t3; t3 = t4-t3; t1 = t5+t2; t2 = t5-t2; - t4 = (mulshr32(dc[5]-dc[3]+dc[1]-dc[7],C182<<6)<<2); - t7 = dc[1] + dc[7] + dc[5] + dc[3]; - t6 = (mulshr32(dc[3]-dc[5],C18S22<<5)<<3) + t4 - t7; - t5 = (mulshr32(dc[1]+dc[7]-dc[5]-dc[3],SQRT2<<6)<<2) - t6; - t4 = (mulshr32(dc[1]-dc[7],C38S22<<6)<<2) - t4 + t5; - dc[0] = t0+t7; dc[7] = t0-t7; dc[1] = t1+t6; dc[6] = t1-t6; - dc[2] = t2+t5; dc[5] = t2-t5; dc[4] = t3+t4; dc[3] = t3-t4; - } - dc += 8; dcflag >>= 1; - } - while (dc < edc); - dc -= 32; edc -= 24; - do - { - t3 = dc[2*8-32] + dc[6*8-32]; - t2 = (mulshr32(dc[2*8-32]-dc[6*8-32],SQRT2<<6)<<2) - t3; - t4 = dc[0*8-32] + dc[4*8-32]; t5 = dc[0*8-32] - dc[4*8-32]; - t0 = t4+t3; t3 = t4-t3; t1 = t5+t2; t2 = t5-t2; - t4 = (mulshr32(dc[5*8-32]-dc[3*8-32]+dc[1*8-32]-dc[7*8-32],C182<<6)<<2); - t7 = dc[1*8-32] + dc[7*8-32] + dc[5*8-32] + dc[3*8-32]; - t6 = (mulshr32(dc[3*8-32]-dc[5*8-32],C18S22<<5)<<3) + t4 - t7; - t5 = (mulshr32(dc[1*8-32]+dc[7*8-32]-dc[5*8-32]-dc[3*8-32],SQRT2<<6)<<2) - t6; - t4 = (mulshr32(dc[1*8-32]-dc[7*8-32],C38S22<<6)<<2) - t4 + t5; - dc[0*8-32] = t0+t7; dc[7*8-32] = t0-t7; dc[1*8-32] = t1+t6; dc[6*8-32] = t1-t6; - dc[2*8-32] = t2+t5; dc[5*8-32] = t2-t5; dc[4*8-32] = t3+t4; dc[3*8-32] = t3-t4; - dc++; - } - while (dc < edc); -} - -static void yrbrend(int32_t x, int32_t y, int32_t *ldct) -{ - int32_t i, j, ox, oy, xx, yy, xxx, yyy, xxxend, yyyend, yv, cr = 0, cb = 0, *odc, *dc, *dc2; - intptr_t p, pp; - - odc = ldct; dc2 = &ldct[10<<6]; - for (yy=0; yy<(lcompvsamp[0]<<3); yy+=8) - { - oy = y+yy+globyoffs; if ((unsigned)oy >= (unsigned)clipydim) { odc += (lcomphsamp[0]<<6); continue; } - pp = oy*bytesperline + ((x+globxoffs)<<2) + frameplace; - for (xx=0; xx<(lcomphsamp[0]<<3); xx+=8,odc+=64) - { - ox = x+xx+globxoffs; if ((unsigned)ox >= (unsigned)clipxdim) continue; - p = pp+(xx<<2); - dc = odc; - if (lnumcomponents > 1) dc2 = &ldct[(lcomphvsamp0<<6)+((yy>>lcompvsampshift0)<<3)+(xx>>lcomphsampshift0)]; - xxxend = min(clipxdim-ox,8); - yyyend = min(clipydim-oy,8); - if ((lcomphsamp[0] == 1) && (xxxend == 8)) - { - for (yyy=0; yyy>(20-1))&~1; - cb = (dc2[xxx ]>>(20-1))&~1; - ((int32_t *)p)[xxx] = colclipup16[(unsigned)(yv+crmul[cr+2048])>>22]+ - colclipup8[(unsigned)(yv+crmul[cr+2049]+cbmul[cb+2048])>>22]+ - colclip[(unsigned)(yv+cbmul[cb+2049])>>22]; - } - p += bytesperline; - dc += 8; - if (!((yyy+1)&(lcompvsamp[0]-1))) dc2 += 8; - } - } - else if ((lcomphsamp[0] == 2) && (xxxend == 8)) - { - for (yyy=0; yyy>1)+64]>>(20-1))&~1; - cb = (dc2[(xxx>>1)]>>(20-1))&~1; - i = crmul[cr+2049]+cbmul[cb+2048]; - cr = crmul[cr+2048]; - cb = cbmul[cb+2049]; - ((int32_t *)p)[xxx] = colclipup16[(unsigned)(yv+cr)>>22]+ - colclipup8[(unsigned)(yv+ i)>>22]+ - colclip[(unsigned)(yv+cb)>>22]; - yv = dc[xxx+1]; - ((int32_t *)p)[xxx+1] = colclipup16[(unsigned)(yv+cr)>>22]+ - colclipup8[(unsigned)(yv+ i)>>22]+ - colclip[(unsigned)(yv+cb)>>22]; - } - p += bytesperline; - dc += 8; - if (!((yyy+1)&(lcompvsamp[0]-1))) dc2 += 8; - } - } - else - { - for (yyy=0; yyy>(20-1))&~1; - cb = (dc2[i ]>>(20-1))&~1; - i++; - } - ((int32_t *)p)[xxx] = colclipup16[(unsigned)(yv+crmul[cr+2048])>>22]+ - colclipup8[(unsigned)(yv+crmul[cr+2049]+cbmul[cb+2048])>>22]+ - colclip[(unsigned)(yv+cbmul[cb+2049])>>22]; - } - p += bytesperline; - dc += 8; - if (!((yyy+1)&(lcompvsamp[0]-1))) dc2 += 8; - } - } - } - } -} -void (*kplib_yrbrend_func)(int32_t,int32_t,int32_t *) = yrbrend; - -static int32_t kpegrend(const char *kfilebuf, int32_t kfilength, - intptr_t daframeplace, int32_t dabytesperline, int32_t daxres, int32_t dayres, - int32_t daglobxoffs, int32_t daglobyoffs) -{ - int32_t i, j, v, leng, xdim = 0, ydim = 0, index, prec, restartcnt, restartinterval; - int32_t x, y, z, xx, yy, zz, *dc = NULL, num, curbits, c, daval, dabits, *hqval, *hqbits, hqcnt, *quanptr = NULL; - int32_t passcnt = 0, ghsampmax = 0, gvsampmax = 0, glhsampmax = 0, glvsampmax = 0, glhstep, glvstep; - int32_t eobrun, Ss, Se, Ah, Al, Alut[2], dctx[12], dcty[12], ldctx[12], ldcty[12], lshx[4], lshy[4]; - int16_t *dctbuf = 0, *dctptr[12], *ldctptr[12], *dcs = NULL; - uint8_t ch, marker, dcflag; - const uint8_t *kfileptr; - - if (!kpeginited) { kpeginited = 1; initkpeg(); } - - kfileptr = (uint8_t *)kfilebuf; - - if (*(uint16_t *)kfileptr == SSWAPIB(0xd8ff)) kfileptr += 2; - else return(-1); //"%s is not a JPEG file\n",filename - - restartinterval = 0; - for (i=0; i<4; i++) lastdc[i] = 0; - for (i=0; i<8; i++) hufcnt[i] = 0; - - coltype = 0; bitdepth = 8; //For PNGOUT - do - { - ch = *kfileptr++; if (ch != 255) continue; - do { marker = *kfileptr++; } - while (marker == 255); - if (marker != 0xd9) //Don't read past end of buffer - { - leng = ((intptr_t)kfileptr[0]<<8)+(intptr_t)kfileptr[1]-2; - kfileptr += 2; - } - //printf("fileoffs=%08x, marker=%02x,leng=%d",((int32_t)kfileptr)-((int32_t)kfilebuf)-2,marker,leng); - switch (marker) - { - case 0xc0: case 0xc1: case 0xc2: - //processit! - kfileptr++; //numbits = *kfileptr++; - - ydim = SSWAPIL(*(uint16_t *)&kfileptr[0]); - xdim = SSWAPIL(*(uint16_t *)&kfileptr[2]); - //printf("%s: %ld / %ld = %ld\n",filename,xdim*ydim*3,kfilength,(xdim*ydim*3)/kfilength); - - frameplace = daframeplace; - bytesperline = dabytesperline; - xres = daxres; - yres = dayres; - globxoffs = daglobxoffs; - globyoffs = daglobyoffs; - - gnumcomponents = kfileptr[4]; - kfileptr += 5; - ghsampmax = gvsampmax = glhsampmax = glvsampmax = 0; - for (z=0; z>4); - gcompvsamp[z] = (kfileptr[1]&15); - gcompquantab[z] = kfileptr[2]; - for (i=0; i<8; i++) if (gcomphsamp[z] == pow2long[i]) { gcomphsampshift[z] = i; break; } - for (i=0; i<8; i++) if (gcompvsamp[z] == pow2long[i]) { gcompvsampshift[z] = i; break; } - if (gcomphsamp[z] > ghsampmax) { ghsampmax = gcomphsamp[z]; glhsampmax = gcomphsampshift[z]; } - if (gcompvsamp[z] > gvsampmax) { gvsampmax = gcompvsamp[z]; glvsampmax = gcompvsampshift[z]; } - kfileptr += 3; - } - - break; - case 0xc4: //Huffman table - do - { - ch = *kfileptr++; leng--; - if (ch >= 16) { index = ch-12; } - else { index = ch; } - Bmemcpy((void *)&hufnumatbit[index][1],(void *)kfileptr,16); kfileptr += 16; - leng -= 16; - - v = 0; hufcnt[index] = 0; - hufquickcnt[index] = 0; - for (i=1; i<=16; i++) - { - hufmaxatbit[index][i] = v+hufnumatbit[index][i]; - hufvalatbit[index][i] = hufcnt[index]-v; - Bmemcpy((void *)&huftable[index][hufcnt[index]],(void *)kfileptr,(int32_t)hufnumatbit[index][i]); - if (i <= 10) - for (c=0; c0; j--) - { - hufquickval[index][hufquickcnt[index]] = huftable[index][hufcnt[index]+c]; - hufquickbits[index][hufquickcnt[index]] = i; - hufquickcnt[index]++; - } - kfileptr += hufnumatbit[index][i]; - leng -= hufnumatbit[index][i]; - hufcnt[index] += hufnumatbit[index][i]; - v = ((v+hufnumatbit[index][i])<<1); - } - - } - while (leng > 0); - break; - case 0xdb: - do - { - ch = *kfileptr++; leng--; - index = (ch&15); - prec = (ch>>4); - for (z=0; z<64; z++) - { - v = (int32_t)(*kfileptr++); - if (prec) v = (v<<8)+((int32_t)(*kfileptr++)); - v <<= 19; - if (unzig[z]&7) v = mulshr24(v,cosqr16[unzig[z]&7 ]); - if (unzig[z]>>3) v = mulshr24(v,cosqr16[unzig[z]>>3]); - quantab[index][unzig[z]] = v; - } - leng -= 64; - if (prec) leng -= 64; - } - while (leng > 0); - break; - case 0xdd: - restartinterval = SSWAPIL(*(uint16_t *)&kfileptr[0]); - kfileptr += leng; - break; - case 0xda: - if ((xdim <= 0) || (ydim <= 0)) { if (dctbuf) Bfree(dctbuf); return(-1); } - - lnumcomponents = (int32_t)(*kfileptr++); if (!lnumcomponents) { if (dctbuf) Bfree(dctbuf); return(-1); } - if (lnumcomponents > 1) coltype = 2; - for (z=0; z>4); - lcompac[z] = (kfileptr[1]&15); - kfileptr += 2; - } - - Ss = kfileptr[0]; - Se = kfileptr[1]; - Ah = (kfileptr[2]>>4); - Al = (kfileptr[2]&15); - kfileptr += 3; - //printf("passcnt=%d, Ss=%d, Se=%d, Ah=%d, Al=%d\n",passcnt,Ss,Se,Ah,Al); - - if ((!passcnt) && ((Ss) || (Se != 63) || (Ah) || (Al))) - { - for (z=zz=0; z>(glhsampmax+3)) << gcomphsampshift[z]; - dcty[z] = ((ydim+(gvsampmax<<3)-1)>>(glvsampmax+3)) << gcompvsampshift[z]; - zz += dctx[z]*dcty[z]; - } - z = zz*64*sizeof(int16_t); - dctbuf = (int16_t *)Bmalloc(z); if (!dctbuf) return(-1); - Bmemset(dctbuf,0,z); - for (z=zz=0; z>glhstep); lcomphsamp[0] = min(lcomphsamp[0],glhstep); glhstep <<= 3; - glvstep = (gvsampmax>>glvstep); lcompvsamp[0] = min(lcompvsamp[0],glvstep); glvstep <<= 3; - lcomphvsamp0 = lcomphsamp[0]*lcompvsamp[0]; - - clipxdim = min(xdim+globxoffs,xres); - clipydim = min(ydim+globyoffs,yres); - - if ((max(globxoffs,0) >= xres) || (min(globxoffs+xdim,xres) <= 0) || - (max(globyoffs,0) >= yres) || (min(globyoffs+ydim,yres) <= 0)) - { if (dctbuf) Bfree(dctbuf); return(0); } - - Alut[0] = (1<= kfilength) goto kpegrend_break2; //rest of file is missing! - - if (!dctbuf) dc = dct[0]; - for (c=0; c>lshy[c])*ldctx[c] + ((x+xx)>>lshx[c]))<<6]; - - //Get DC - if (!Ss) - { - while (curbits < 16) //Getbits - { - ch = *kfileptr++; if (ch == 255) kfileptr++; - num = (num<<8)+((int32_t)ch); curbits += 8; - } - - if (!Ah) - { - i = ((num>>(curbits-10))&1023); - if (i < hufquickcnt[lcompdc[c]]) - { daval = hufquickval[lcompdc[c]][i]; curbits -= hufquickbits[lcompdc[c]][i]; } - else { huffgetval(lcompdc[c],curbits,num,&daval,&dabits); curbits -= dabits; } - - if (daval) - { - while (curbits < daval) //Getbits - { - ch = *kfileptr++; if (ch == 255) kfileptr++; - num = (num<<8)+((int32_t)ch); curbits += 8; - } - - curbits -= daval; v = ((unsigned)num >> curbits) & pow2mask[daval]; - if (v <= pow2mask[daval-1]) v -= pow2mask[daval]; - lastdc[c] += v; - } - if (!dctbuf) dc[0] = lastdc[c]; else dcs[0] = (int16_t)(lastdc[c]<>(curbits-10))&1023); - if (i < hqcnt) - { daval = hqval[i]; curbits -= hqbits[i]; } - else { huffgetval(lcompac[c]+4,curbits,num,&daval,&dabits); curbits -= dabits; } - - zz = (daval>>4); daval &= 15; - if (daval) - { - if (Ah) - { - if (curbits < 8) //Getbits - { - ch = *kfileptr++; if (ch == 255) kfileptr++; - num = (num<<8)+((long)ch); curbits += 8; - } - if (num&(pow2long[--curbits])) daval = Alut[0]; else daval = Alut[1]; - } - } - else if (zz < 15) - { - eobrun = pow2long[zz]; - if (zz) - { - while (curbits < zz) //Getbits - { - ch = *kfileptr++; if (ch == 255) kfileptr++; - num = (num<<8)+((int32_t)ch); curbits += 8; - } - curbits -= zz; eobrun += ((unsigned)num >> curbits) & pow2mask[zz]; - } - if (!Ah) eobrun--; - break; - } - if (Ah) - { - do - { - if (dcs[z]) - { - if (curbits < 8) //Getbits - { - ch = *kfileptr++; if (ch == 255) kfileptr++; - num = (num<<8)+((int32_t)ch); curbits += 8; - } - if (num&(pow2long[--curbits])) dcs[z] += (int16_t)Alut[dcs[z] < 0]; - } - else if (--zz < 0) break; - z++; - } - while (z <= Se); - if (daval) dcs[z] = (int16_t)daval; - } - else - { - z += zz; if (z > Se) break; - - while (curbits < daval) //Getbits - { - ch = *kfileptr++; if (ch == 255) kfileptr++; - num = (num<<8)+((int32_t)ch); curbits += 8; - } - curbits -= daval; v = ((unsigned)num >> curbits) & pow2mask[daval]; - if (v <= pow2mask[daval-1]) v -= pow2mask[daval]; - dcflag |= dcflagor[z]; - if (!dctbuf) dc[unzig[z]] = v; else dcs[z] = (int16_t)(v< 0)) - { - eobrun--; - for (; z<=Se; z++) - { - if (!dcs[z]) continue; - if (curbits < 8) //Getbits - { - ch = *kfileptr++; if (ch == 255) kfileptr++; - num = (num<<8)+((int32_t)ch); curbits += 8; - } - if (num&(pow2long[--curbits])) dcs[z] += ((int16_t)Alut[dcs[z] < 0]); - } - } - - if (!dctbuf) - { - for (z=64-1; z>=0; z--) dc[z] *= quanptr[z]; - invdct8x8(dc,dcflag); dc += 64; - } - } - } - - if (!dctbuf) kplib_yrbrend_func(x,y,&dct[0][0]); - - restartcnt--; - if (!restartcnt) - { - kfileptr += 1-(curbits>>3); curbits = 0; - if ((kfileptr[-2] != 255) || (kfileptr[-1] != marker)) kfileptr--; - marker++; if (marker >= 0xd8) marker = 0xd0; - restartcnt = restartinterval; - for (i=0; i<4; i++) lastdc[i] = 0; - eobrun = 0; - } - } - kpegrend_break2:; - if (!dctbuf) return(0); - passcnt++; kfileptr -= ((curbits>>3)+1); break; - case 0xd9: break; - default: kfileptr += leng; break; - } - } - while (kfileptr-(uint8_t *)kfilebuf < kfilength); - - if (!dctbuf) return(0); - - lnumcomponents = gnumcomponents; - for (i=0; i>lshy[c])*dctx[c] + ((x+xx)>>lshx[c]))<<6]; - quanptr = &quantab[gcompquantab[c]][0]; - for (z=0; z<64; z++) dc[z] = ((int32_t)dcs[zigit[z]])*quanptr[z]; - invdct8x8(dc,0xff); - } - kplib_yrbrend_func(x,y,&dct[0][0]); - } - - Bfree(dctbuf); return(0); -} - -//============================== KPEGILIB ends ============================== -//================================ GIF begins ================================ - -static uint8_t suffix[4100], filbuffer[768], tempstack[4096]; -static int32_t prefix[4100]; - -static int32_t kgifrend(const char *kfilebuf, int32_t kfilelength, - intptr_t daframeplace, int32_t dabytesperline, int32_t daxres, int32_t dayres, - int32_t daglobxoffs, int32_t daglobyoffs) -{ - int32_t i, x, y, xsiz, ysiz, yinc, xend, xspan, yspan, currstr, numbitgoal; - int32_t lzcols, dat, blocklen, bitcnt, xoff, transcol, backcol, *lptr; - intptr_t yoff; - char numbits, startnumbits, chunkind, ilacefirst; - const uint8_t *ptr, *cptr = NULL; - - UNREFERENCED_PARAMETER(kfilelength); - - coltype = 3; bitdepth = 8; //For PNGOUT - - if ((kfilebuf[0] != 'G') || (kfilebuf[1] != 'I') || (kfilebuf[2] != 'F')) return(-1); - paleng = (1<<((kfilebuf[10]&7)+1)); - ptr = (uint8_t *)&kfilebuf[13]; - if (kfilebuf[10]&128) { cptr = ptr; ptr += paleng*3; } - transcol = -1; - while ((chunkind = *ptr++) == '!') - { - //! 0xf9 leng flags ? ? transcol - if (ptr[0] == 0xf9) { if (ptr[2]&1) transcol = (int32_t)(((uint8_t)ptr[5])); } - ptr++; - do { i = *ptr++; ptr += i; } - while (i); - } - if (chunkind != ',') return(-1); - - xoff = SSWAPIB(*(uint16_t *)&ptr[0]); - yoff = SSWAPIB(*(uint16_t *)&ptr[2]); - xspan = SSWAPIB(*(uint16_t *)&ptr[4]); - yspan = SSWAPIB(*(uint16_t *)&ptr[6]); ptr += 9; - if (ptr[-1]&64) { yinc = 8; ilacefirst = 1; } - else { yinc = 1; ilacefirst = 0; } - if (ptr[-1]&128) - { - paleng = (1<<((ptr[-1]&7)+1)); - cptr = ptr; ptr += paleng*3; - } - - for (i=0; i= 0) palcol[transcol] &= LSWAPIB(~0xff000000); - - //Handle GIF files with different logical&image sizes or non-0 offsets (added 05/15/2004) - xsiz = SSWAPIB(*(uint16_t *)&kfilebuf[6]); - ysiz = SSWAPIB(*(uint16_t *)&kfilebuf[8]); - if ((xoff != 0) || (yoff != 0) || (xsiz != xspan) || (ysiz != yspan)) - { - int32_t xx[4], yy[4]; - if (kfilebuf[10]&128) backcol = palcol[(uint8_t)kfilebuf[11]]; else backcol = 0; - - //Fill border to backcol - xx[0] = max(daglobxoffs , 0); yy[0] = max(daglobyoffs , 0); - xx[1] = min(daglobxoffs+xoff ,daxres); yy[1] = min(daglobyoffs+yoff ,dayres); - xx[2] = max(daglobxoffs+xoff+xspan, 0); yy[2] = min(daglobyoffs+yoff+yspan,dayres); - xx[3] = min(daglobxoffs+xsiz ,daxres); yy[3] = min(daglobyoffs+ysiz ,dayres); - - lptr = (int32_t *)(yy[0]*dabytesperline+daframeplace); - for (y=yy[0]; y=0; i--) { suffix[i] = (uint8_t)(prefix[i] = i); } - currstr = lzcols+2; numbits = startnumbits; numbitgoal = (lzcols<<1); - blocklen = *ptr++; - Bmemcpy(filbuffer,ptr,blocklen); ptr += blocklen; - bitcnt = 0; - while (1) - { - dat = (LSWAPIB(*(int32_t *)&filbuffer[bitcnt>>3])>>(bitcnt&7)) & (numbitgoal-1); - bitcnt += numbits; - if ((bitcnt>>3) > blocklen-3) - { - *(int16_t *)filbuffer = *(int16_t *)&filbuffer[bitcnt>>3]; - i = blocklen-(bitcnt>>3); - blocklen = (int32_t)*ptr++; - Bmemcpy(&filbuffer[i],ptr,blocklen); ptr += blocklen; - bitcnt &= 7; blocklen += i; - } - if (dat == lzcols) - { - currstr = lzcols+2; numbits = startnumbits; numbitgoal = (lzcols<<1); - continue; - } - if ((currstr == numbitgoal) && (numbits < 12)) - { numbits++; numbitgoal <<= 1; } - - prefix[currstr] = dat; - for (i=0; dat>=lzcols; dat=prefix[dat]) tempstack[i++] = suffix[dat]; - tempstack[i] = (uint8_t)prefix[dat]; - suffix[currstr-1] = suffix[currstr] = (uint8_t)dat; - - for (; i>=0; i--) - { - if ((uint32_t)x < (uint32_t)daxres) - *(int32_t *)(yoff+(x<<2)) = palcol[(int32_t)tempstack[i]]; - x++; - if (x == xend) - { - y += yinc; - if (y >= yspan) - switch (yinc) - { - case 8: if (!ilacefirst) { y = daglobyoffs+2; yinc = 4; break; } - ilacefirst = 0; y = daglobyoffs+4; yinc = 8; break; - case 4: y = daglobyoffs+1; yinc = 2; break; - case 2: case 1: return(0); - } - if ((uint32_t)y < (uint32_t)dayres) - { yoff = y*dabytesperline+daframeplace; x = daglobxoffs; xend = xspan; } - else - { x = daglobxoffs+0x80000000; xend = xspan+0x80000000; } - } - } - currstr++; - } -} - -//=============================== GIF ends ================================== -//============================== CEL begins ================================= - -// //old .CEL format: -//int16_t id = 0x9119, xdim, ydim, xoff, yoff, id = 0x0008; -//int32_t imagebytes, filler[4]; -//char pal6bit[256][3], image[ydim][xdim]; -static int32_t kcelrend(const char *buf, int32_t fleng, - intptr_t daframeplace, int32_t dabytesperline, int32_t daxres, int32_t dayres, - int32_t daglobxoffs, int32_t daglobyoffs) -{ - int32_t i, x, y, x0, x1, y0, y1, xsiz, ysiz; - const char *cptr; - - UNREFERENCED_PARAMETER(fleng); - UNREFERENCED_PARAMETER(daglobxoffs); - - coltype = 3; bitdepth = 8; paleng = 256; //For PNGOUT - - xsiz = (int32_t)SSWAPIB(*(uint16_t *)&buf[2]); if (xsiz <= 0) return(-1); - ysiz = (int32_t)SSWAPIB(*(uint16_t *)&buf[4]); if (ysiz <= 0) return(-1); - - cptr = &buf[32]; - for (i=0; i<256; i++) - { - palcol[i] = (((int32_t)cptr[0])<<18) + - (((int32_t)cptr[1])<<10) + - (((int32_t)cptr[2])<< 2) + LSWAPIB(0xff000000); - cptr += 3; - } - - x0 = daglobyoffs; x1 = xsiz+daglobyoffs; - y0 = daglobyoffs; y1 = ysiz+daglobyoffs; - for (y=y0; y= 12) || (!((1< 32)) return(-1); - if (header[17]&0xc0) return(-1); - - fptr = (uint8_t *)&header[header[0]+18]; - xsiz = (int32_t)SSWAPIB(*(uint16_t *)&header[12]); if (xsiz <= 0) return(-1); - ysiz = (int32_t)SSWAPIB(*(uint16_t *)&header[14]); if (ysiz <= 0) return(-1); - colbyte = ((((int32_t)header[16])+7)>>3); - - if (header[1] == 1) - { - pixbyte = ((((int32_t)header[7])+7)>>3); - cptr = &fptr[-SSWAPIB(*(uint16_t *)&header[3])*pixbyte]; - fptr += SSWAPIB(*(uint16_t *)&header[5])*pixbyte; - } - else pixbyte = colbyte; - - switch (pixbyte) //For PNGOUT - { - case 1: coltype = 0; bitdepth = 8; palcol[0] = LSWAPIB(0xff000000); - for (i=1; i<256; i++) palcol[i] = palcol[i-1]+LSWAPIB(0x10101); break; - case 2: case 3: coltype = 2; break; - case 4: coltype = 6; break; - } - - if (!(header[17]&16)) { x0 = 0; x1 = xsiz; xi = 1; } - else { x0 = xsiz-1; x1 = -1; xi =-1; } - if (header[17]&32) { y0 = 0; y1 = ysiz; yi = 1; pi = dabytesperline; } - else { y0 = ysiz-1; y1 = -1; yi =-1; pi =-dabytesperline; } - x0 += daglobxoffs; y0 += daglobyoffs; - x1 += daglobxoffs; y1 += daglobyoffs; - if (header[2] < 8) rlestat = -2; else rlestat = -1; - - p = y0*dabytesperline+daframeplace; - for (y=y0; y!=y1; y+=yi,p+=pi) - for (x=x0; x!=x1; x+=xi) - { - if (rlestat < 128) - { - if ((rlestat&127) == 127) { rlestat = (int32_t)fptr[0]; fptr++; } - if (header[1] == 1) - { - if (colbyte == 1) i = fptr[0]; - else i = (int32_t)SSWAPIB(*(uint16_t *)&fptr[0]); - nptr = &cptr[i*pixbyte]; - } - else nptr = fptr; - - switch (pixbyte) - { - case 1: i = palcol[(int32_t)nptr[0]]; break; - case 2: i = (int32_t)SSWAPIB(*(uint16_t *)&nptr[0]); - i = LSWAPIB(((i&0x7c00)<<9) + ((i&0x03e0)<<6) + ((i&0x001f)<<3) + 0xff000000); - break; - case 3: i = (*(int32_t *)&nptr[0]) | LSWAPIB(0xff000000); break; - case 4: i = (*(int32_t *)&nptr[0]); break; - } - fptr += colbyte; - } - if (rlestat >= 0) rlestat--; - - if (((uint32_t)x < (uint32_t)daxres) && ((uint32_t)y < (uint32_t)dayres)) - *(int32_t *)(x*4+p) = i; - } - return(0); -} - -//============================== TARGA ends ================================= -//============================== BMP begins ================================= -//TODO: handle BI_RLE8 and BI_RLE4 (compression types 1&2 respectively) -// ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -// ³ 0(2): "BM" ³ -// ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿³ 10(4): rastoff³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -// ³headsiz=12 (OS/2 1.x)³³ 14(4): headsiz³ ³ All new formats: ³ -//ÚÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÁÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÁÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -//³ 18(2): xsiz ³ 18(4): xsiz ³ -//³ 20(2): ysiz ³ 22(4): ysiz ³ -//³ 22(2): planes (always 1) ³ 26(2): planes (always 1) ³ -//³ 24(2): cdim (1,4,8,24) ³ 28(2): cdim (1,4,8,16,24,32) ³ -//³ if (cdim < 16) ³ 30(4): compression (0,1,2,3!?,4) ³ -//³ 26(rastoff-14-headsiz): pal(bgr) ³ 34(4): (bitmap data size+3)&3 ³ -//³ ³ 46(4): N colors (0=2^cdim) ³ -//³ ³ if (cdim < 16) ³ -//³ ³ 14+headsiz(rastoff-14-headsiz): pal(bgr0) ³ -//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ -// ³ rastoff(?): bitmap data ³ -// ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ -static int32_t kbmprend(const char *buf, int32_t fleng, - intptr_t daframeplace, int32_t dabytesperline, int32_t daxres, int32_t dayres, - int32_t daglobxoffs, int32_t daglobyoffs) -{ - int32_t i, j, x, y, x0, x1, y0, y1, rastoff, headsiz, xsiz, ysiz, cdim, comp, cptrinc, *lptr; - const char *cptr; - - UNREFERENCED_PARAMETER(fleng); - - headsiz = *(int32_t *)&buf[14]; - if (headsiz == LSWAPIB(12)) //OS/2 1.x (old format) - { - if (*(int16_t *)(&buf[22]) != SSWAPIB(1)) return(-1); - xsiz = (int32_t)SSWAPIB(*(uint16_t *)&buf[18]); - ysiz = (int32_t)SSWAPIB(*(uint16_t *)&buf[20]); - cdim = (int32_t)SSWAPIB(*(uint16_t *)&buf[24]); - comp = 0; - } - else //All newer formats... - { - if (*(int16_t *)(&buf[26]) != SSWAPIB(1)) return(-1); - xsiz = LSWAPIB(*(int32_t *)&buf[18]); - ysiz = LSWAPIB(*(int32_t *)&buf[22]); - cdim = (int32_t)SSWAPIB(*(uint16_t *)&buf[28]); - comp = LSWAPIB(*(int32_t *)&buf[30]); - } - if ((xsiz <= 0) || (!ysiz)) return(-1); - //cdim must be: (1,4,8,16,24,32) - if (((uint32_t)(cdim-1) >= (uint32_t)32) || (!((1<>1); - } - for (palcol[i+3]=0; palcol[i+3]<32; palcol[i+3]++) - { - if (!(j&1)) break; - j = (((uint32_t)j)>>1); - } - } - } - palcol[0] = 24-(palcol[0]+palcol[3]); - palcol[1] = 16-(palcol[1]+palcol[4]); - palcol[2] = 8-(palcol[2]+palcol[5]); - palcol[3] = ((-1<<(24-palcol[3]))&0x00ff0000); - palcol[4] = ((-1<<(16-palcol[4]))&0x0000ff00); - palcol[5] = ((-1<<(8-palcol[5]))&0x000000ff); - } - - cptrinc = (((xsiz*cdim+31)>>3)&~3); cptr = &buf[rastoff]; - if (ysiz < 0) { ysiz = -ysiz; } - else { cptr = &cptr[(ysiz-1)*cptrinc]; cptrinc = -cptrinc; } - - x0 = daglobxoffs; x1 = xsiz+daglobxoffs; - y0 = daglobyoffs; y1 = ysiz+daglobyoffs; - if ((x0 >= daxres) || (x1 <= 0) || (y0 >= dayres) || (y1 <= 0)) return(0); - if (x0 < 0) x0 = 0; - if (x1 > daxres) x1 = daxres; - for (y=y0; y= (uint32_t)dayres) continue; - lptr = (int32_t *)(y*dabytesperline-(daglobyoffs<<2)+daframeplace); - switch (cdim) - { - case 1: for (x=x0; x>3]>>((x&7)^7))&1)]; break; - case 4: for (x=x0; x>1]>>(((x&1)^1)<<2))&15)]; break; - case 8: for (x=x0; x xsiz) { daxres = min(daxres,x1); x1 += bpl-xsiz; } - - j = nplanes-1; daxres <<= 2; x0 <<= 2; x1 <<= 2; x <<= 2; x += j; - if (nplanes == 1) //8-bit PCX - { - do - { - c = *cptr++; if (c < 192) i = 1; else { i = (c&63); c = *cptr++; } - j = palcol[(int32_t)c]; - for (; i; i--) - { - if ((uint32_t)y < (uint32_t)dayres) - if ((uint32_t)x < (uint32_t)daxres) *(int32_t *)(x+p) = j; - x += 4; if (x >= x1) { x = x0; y++; p += dabytesperline; } - } - } - while (y < y1); - } - else if (nplanes == 3) //24-bit PCX - { - do - { - c = *cptr++; if (c < 192) i = 1; else { i = (c&63); c = *cptr++; } - for (; i; i--) - { - if ((uint32_t)y < (uint32_t)dayres) - if ((uint32_t)x < (uint32_t)daxres) *(char *)(x+p) = c; - x += 4; if (x >= x1) { j--; if (j < 0) { j = 3-1; y++; p += dabytesperline; } x = x0+j; } - } - } - while (y < y1); - } - - return(0); -} - -//=============================== PCX ends ================================== -//============================== DDS begins ================================= - -//Note:currently supports: DXT1,DXT2,DXT3,DXT4,DXT5,A8R8G8B8 -static int32_t kddsrend(const char *buf, int32_t leng, - intptr_t frameptr, int32_t bpl, int32_t xdim, int32_t ydim, int32_t xoff, int32_t yoff) -{ - int32_t x, y, z = 0, xx, yy, xsiz, ysiz, dxt, al[2], ai, k, v, c0, c1, stride; - intptr_t j; - uint32_t lut[256], r[4], g[4], b[4], a[8], rr, gg, bb; - uint8_t *uptr, *wptr; - - UNREFERENCED_PARAMETER(leng); - - xsiz = LSWAPIB(*(int32_t *)&buf[16]); - ysiz = LSWAPIB(*(int32_t *)&buf[12]); - if ((*(int32_t *)&buf[80])&LSWAPIB(64)) //Uncompressed supports only A8R8G8B8 for now - { - if ((*(int32_t *)&buf[88]) != LSWAPIB(32)) return(-1); - if ((*(int32_t *)&buf[92]) != LSWAPIB(0x00ff0000)) return(-1); - if ((*(int32_t *)&buf[96]) != LSWAPIB(0x0000ff00)) return(-1); - if ((*(int32_t *)&buf[100]) != LSWAPIB(0x000000ff)) return(-1); - if ((*(uint32_t *)&buf[104]) != LSWAPIB(0xff000000)) return(-1); - buf += 128; - - j = yoff*bpl + (xoff<<2) + frameptr; xx = (xsiz<<2); - if (xoff < 0) { j -= (xoff<<2); buf -= (xoff<<2); xsiz += xoff; } - xsiz = (min(xsiz,xdim-xoff)<<2); ysiz = min(ysiz,ydim); - for (y=0; y= (uint32_t)ydim) continue; - Bmemcpy((void *)j,(void *)buf,xsiz); - } - return(0); - } - if (!((*(int32_t *)&buf[80])&LSWAPIB(4))) return(-1); //FOURCC invalid - dxt = buf[87]-'0'; - if ((buf[84] != 'D') || (buf[85] != 'X') || (buf[86] != 'T') || (dxt < 1) || (dxt > 5)) return(-1); - buf += 128; - - if (!(dxt&1)) - { - for (z=256-1; z>0; z--) lut[z] = (255<<16)/z; - lut[0] = (1<<16); - } - if (dxt == 1) stride = (xsiz<<1); else stride = (xsiz<<2); - - for (y=0; y>8)&0xf8); g[0] = ((c0>>3)&0xfc); b[0] = ((c0<<3)&0xfc); a[0] = 255; - c1 = SSWAPIB(*(uint16_t *)&uptr[2]); - r[1] = ((c1>>8)&0xf8); g[1] = ((c1>>3)&0xfc); b[1] = ((c1<<3)&0xfc); a[1] = 255; - if ((c0 > c1) || (dxt != 1)) - { - r[2] = (((r[0]*2 + r[1] + 1)*(65536/3))>>16); - g[2] = (((g[0]*2 + g[1] + 1)*(65536/3))>>16); - b[2] = (((b[0]*2 + b[1] + 1)*(65536/3))>>16); a[2] = 255; - r[3] = (((r[0] + r[1]*2 + 1)*(65536/3))>>16); - g[3] = (((g[0] + g[1]*2 + 1)*(65536/3))>>16); - b[3] = (((b[0] + b[1]*2 + 1)*(65536/3))>>16); a[3] = 255; - } - else - { - r[2] = (r[0] + r[1])>>1; - g[2] = (g[0] + g[1])>>1; - b[2] = (b[0] + b[1])>>1; a[2] = 255; - r[3] = g[3] = b[3] = a[3] = 0; //Transparent - } - v = LSWAPIB(*(int32_t *)&uptr[4]); - if (dxt >= 4) - { - a[0] = uptr[-8]; a[1] = uptr[-7]; k = a[1]-a[0]; - if (k < 0) - { - z = a[0]*6 + a[1] + 3; - for (j=2; j<8; j++) { a[j] = ((z*(65536/7))>>16); z += k; } - } - else - { - z = a[0]*4 + a[1] + 2; - for (j=2; j<6; j++) { a[j] = ((z*(65536/5))>>16); z += k; } - a[6] = 0; a[7] = 255; - } - al[0] = LSWAPIB(*(int32_t *)&uptr[-6]); - al[1] = LSWAPIB(*(int32_t *)&uptr[-3]); - } - wptr = (uint8_t *)((y+yoff)*bpl + ((x+xoff)<<2) + frameptr); - ai = 0; - for (yy=0; yy<4; yy++,wptr+=bpl) - { - if ((uint32_t)(y+yy+yoff) >= (uint32_t)ydim) { ai += 4; continue; } - for (xx=0; xx<4; xx++,ai++) - { - if ((uint32_t)(x+xx+xoff) >= (uint32_t)xdim) continue; - - j = ((v>>(ai<<1))&3); - switch (dxt) - { - case 1: z = a[j]; break; - case 2: case 3: z = ((uptr[(ai>>1)-8] >> ((xx&1)<<2))&15)*17; break; - case 4: case 5: z = a[(al[yy>>1] >> ((ai&7)*3))&7]; break; - } - rr = r[j]; gg = g[j]; bb = b[j]; - if (!(dxt&1)) - { - bb = min((bb*lut[z])>>16,255); - gg = min((gg*lut[z])>>16,255); - rr = min((rr*lut[z])>>16,255); - } - wptr[(xx<<2)+0] = (uint8_t)bb; - wptr[(xx<<2)+1] = (uint8_t)gg; - wptr[(xx<<2)+2] = (uint8_t)rr; - wptr[(xx<<2)+3] = (uint8_t)z; - } - } - } - return(0); -} - -//=============================== DDS ends ================================== -//=================== External picture interface begins ====================== - -void kpgetdim(const char *buf, int32_t leng, int32_t *xsiz, int32_t *ysiz) -{ - int32_t *lptr; - const uint8_t *cptr; - uint8_t *ubuf = (uint8_t *)buf; - - (*xsiz) = (*ysiz) = 0; if (leng < 16) return; - if ((ubuf[0] == 0x89) && (ubuf[1] == 0x50)) //.PNG - { - lptr = (int32_t *)buf; - if ((lptr[0] != LSWAPIB(0x474e5089)) || (lptr[1] != LSWAPIB(0x0a1a0a0d))) return; - lptr = &lptr[2]; - while (((uintptr_t)lptr-(uintptr_t)buf) < (uintptr_t)(leng-16)) - { - if (lptr[1] == LSWAPIB(0x52444849)) //IHDR - {(*xsiz) = LSWAPIL(lptr[2]); (*ysiz) = LSWAPIL(lptr[3]); break; } - lptr = (int32_t *)((intptr_t)lptr + LSWAPIL(lptr[0]) + 12); - } - } - else if ((ubuf[0] == 0xff) && (ubuf[1] == 0xd8)) //.JPG - { - cptr = (uint8_t *)&buf[2]; - while (((uintptr_t)cptr-(uintptr_t)buf) < (uintptr_t)(leng-8)) - { - if ((cptr[0] != 0xff) || (cptr[1] == 0xff)) { cptr++; continue; } - if ((uint32_t)(cptr[1]-0xc0) < 3) - { - (*ysiz) = SSWAPIL(*(uint16_t *)&cptr[5]); - (*xsiz) = SSWAPIL(*(uint16_t *)&cptr[7]); - break; - } - cptr = &cptr[SSWAPIL(*(uint16_t *)&cptr[2])+2]; - } - } - else if ((ubuf[0] == 'G') && (ubuf[1] == 'I') && (ubuf[2] == 'F')) //.GIF - { - (*xsiz) = (int32_t)SSWAPIB(*(uint16_t *)&buf[6]); - (*ysiz) = (int32_t)SSWAPIB(*(uint16_t *)&buf[8]); - } - else if ((ubuf[0] == 0x19) && (ubuf[1] == 0x91) && (ubuf[10] == 8) && (ubuf[11] == 0)) //old .CEL/.PIC - { - (*xsiz) = (int32_t)SSWAPIB(*(uint16_t *)&buf[2]); - (*ysiz) = (int32_t)SSWAPIB(*(uint16_t *)&buf[4]); - } - else if ((ubuf[0] == 'B') && (ubuf[1] == 'M')) //.BMP - { - if (*(int32_t *)(&buf[14]) == LSWAPIB(12)) //OS/2 1.x (old format) - { - if (*(int16_t *)(&buf[22]) != SSWAPIB(1)) return; - (*xsiz) = (int32_t)SSWAPIB(*(uint16_t *)&buf[18]); - (*ysiz) = (int32_t)SSWAPIB(*(uint16_t *)&buf[20]); - } - else //All newer formats... - { - if (*(int16_t *)(&buf[26]) != SSWAPIB(1)) return; - (*xsiz) = LSWAPIB(*(int32_t *)&buf[18]); - (*ysiz) = LSWAPIB(*(int32_t *)&buf[22]); - } - } - else if (*(int32_t *)ubuf == LSWAPIB(0x0801050a)) //.PCX - { - (*xsiz) = SSWAPIB(*(int16_t *)&buf[ 8])-SSWAPIB(*(int16_t *)&buf[4])+1; - (*ysiz) = SSWAPIB(*(int16_t *)&buf[10])-SSWAPIB(*(int16_t *)&buf[6])+1; - } - else if ((*(int32_t *)ubuf == LSWAPIB(0x20534444)) && (*(int32_t *)&ubuf[4] == LSWAPIB(124))) //.DDS - { - (*xsiz) = LSWAPIB(*(int32_t *)&buf[16]); - (*ysiz) = LSWAPIB(*(int32_t *)&buf[12]); - } - else - { - //Unreliable .TGA identification - this MUST be final case! - if ((leng >= 19) && (!(ubuf[1]&0xfe))) - if ((ubuf[2] < 12) && ((1<= 19) && (!(ubuf[1]&0xfe))) - if ((ubuf[2] < 12) && ((1<= 'a') && (c0 <= 'z')) c0 -= 32; - c1 = *j; if ((c1 >= 'a') && (c1 <= 'z')) c1 -= 32; - if (c0 == '/') c0 = '\\'; - if (c1 == '/') c1 = '\\'; - if (c0 != c1) return(0); - i++; j++; - } - while (*j); - return(!*i); -} - -//Same as: stricmp(st0,st1) except: '/' == '\' -static int32_t filnamcmp(const char *st0, const char *st1) -{ - int32_t i; - char ch0, ch1; - - for (i=0; st0[i]; i++) - { - ch0 = st0[i]; if ((ch0 >= 'a') && (ch0 <= 'z')) ch0 -= 32; - ch1 = st1[i]; if ((ch1 >= 'a') && (ch1 <= 'z')) ch1 -= 32; - if (ch0 == '/') ch0 = '\\'; - if (ch1 == '/') ch1 = '\\'; - if (ch0 != ch1) return(-1); - } - if (!st1[i]) return(0); - return(-1); -} - -//===================== ZIP decompression code begins ======================== - -//format: (used by kzaddstack/kzopen to cache file name&start info) -//[char zipnam[?]\0] -//[next hashindex/-1][next index/-1][zipnam index][fileoffs][fileleng][iscomp][char filnam[?]\0] -//[next hashindex/-1][next index/-1][zipnam index][fileoffs][fileleng][iscomp][char filnam[?]\0] -//... -//[char zipnam[?]\0] -//[next hashindex/-1][next index/-1][zipnam index][fileoffs][fileleng][iscomp][char filnam[?]\0] -//[next hashindex/-1][next index/-1][zipnam index][fileoffs][fileleng][iscomp][char filnam[?]\0] -//... -#define KZHASHINITSIZE 8192 -static char *kzhashbuf = 0; -static int32_t kzhashead[256], kzhashpos, kzlastfnam, kzhashsiz, kzdirnamhead = -1; - -static int32_t kzcheckhashsiz(int32_t siz) -{ - int32_t i; - - if (!kzhashbuf) //Initialize hash table on first call - { - Bmemset(kzhashead,-1,sizeof(kzhashead)); - kzhashbuf = (char *)Bmalloc(KZHASHINITSIZE); if (!kzhashbuf) return(0); - kzhashpos = 0; kzlastfnam = -1; kzhashsiz = KZHASHINITSIZE; kzdirnamhead = -1; - } - if (kzhashpos+siz > kzhashsiz) //Make sure string fits in kzhashbuf - { - i = kzhashsiz; do { i <<= 1; } - while (kzhashpos+siz > i); - kzhashbuf = (char *)Brealloc(kzhashbuf,i); if (!kzhashbuf) return(0); - kzhashsiz = i; - } - return(1); -} - -static int32_t kzcalchash(const char *st) -{ - int32_t i, hashind; - char ch; - - for (i=0,hashind=0; st[i]; i++) - { - ch = st[i]; - if ((ch >= 'a') && (ch <= 'z')) ch -= 32; - if (ch == '/') ch = '\\'; - hashind = (ch - hashind*3); - } - return(hashind%(sizeof(kzhashead)/sizeof(kzhashead[0]))); -} - -static int32_t kzcheckhash(const char *filnam, char **zipnam, int32_t *fileoffs, int32_t *fileleng, char *iscomp) -{ - int32_t i; - - if (!kzhashbuf) return(0); - if (filnam[0] == '|') filnam++; - for (i=kzhashead[kzcalchash(filnam)]; i>=0; i=(*(int32_t *)&kzhashbuf[i])) - if (!filnamcmp(filnam,&kzhashbuf[i+21])) - { - (*zipnam) = &kzhashbuf[*(int32_t *)&kzhashbuf[i+8]]; - (*fileoffs) = *(int32_t *)&kzhashbuf[i+12]; - (*fileleng) = *(int32_t *)&kzhashbuf[i+16]; - (*iscomp) = *(int32_t *)&kzhashbuf[i+20]; - return(1); - } - return(0); -} - -void kzuninit() -{ - if (kzhashbuf) { Bfree(kzhashbuf); kzhashbuf = 0; } - kzhashpos = kzhashsiz = 0; kzdirnamhead = -1; -} - -//If file found, loads internal directory from ZIP/GRP into Bmemory (hash) to allow faster access later -//If file not found, assumes it's a directory and adds it to an internal list -int32_t kzaddstack(const char *filnam) -{ - FILE *fil; - int32_t i, j, k, leng, hashind, zipnamoffs, numfiles; - char tempbuf[260+46]; - - fil = fopen(filnam,"rb"); - if (!fil) //if file not found, assume it's a directory - { - //Add directory name to internal list (using kzhashbuf for convenience of dynamic allocation) - i = strlen(filnam)+5; if (!kzcheckhashsiz(i)) return(-1); - *(int32_t *)&kzhashbuf[kzhashpos] = kzdirnamhead; kzdirnamhead = kzhashpos; - strcpy(&kzhashbuf[kzhashpos+4],filnam); - kzhashpos += i; - - return(-1); - } - - //Write ZIP/GRP filename to hash - i = strlen(filnam)+1; if (!kzcheckhashsiz(i)) { fclose(fil); return(-1); } - strcpy(&kzhashbuf[kzhashpos],filnam); - zipnamoffs = kzhashpos; kzhashpos += i; - - fread(&i,4,1,fil); - if (i == LSWAPIB(0x04034b50)) //'PK\3\4' is ZIP file id - { - fseek(fil,-22,SEEK_END); - fread(tempbuf,22,1,fil); - if (*(int32_t *)&tempbuf[0] == LSWAPIB(0x06054b50)) //Fast way of finding dir info - { - numfiles = SSWAPIB(*(int16_t *)&tempbuf[10]); - fseek(fil,LSWAPIB(*(int32_t *)&tempbuf[16]),SEEK_SET); - } - else //Slow way of finding dir info (used when ZIP has junk at end) - { - fseek(fil,0,SEEK_SET); numfiles = 0; - while (1) - { - if (!fread(&j,4,1,fil)) { numfiles = -1; break; } - if (j == LSWAPIB(0x02014b50)) break; //Found central file header :) - if (j != LSWAPIB(0x04034b50)) { numfiles = -1; break; } - fread(tempbuf,26,1,fil); - fseek(fil,LSWAPIB(*(int32_t *)&tempbuf[14]) + SSWAPIB(*(int16_t *)&tempbuf[24]) + SSWAPIB(*(int16_t *)&tempbuf[22]),SEEK_CUR); - numfiles++; - } - if (numfiles < 0) { fclose(fil); return(-1); } - fseek(fil,-4,SEEK_CUR); - } - for (i=0; i 2GB-32K bytes - gslidew = 0x7fffffff; //Force reload at beginning - - return((intptr_t)kzfs.fil); - default: fclose(kzfs.fil); kzfs.fil = 0; return(0); - } - } - } - - //Finally, check mounted dirs - for (i=kzdirnamhead; i>=0; i=*(int32_t *)&kzhashbuf[i]) - { - strcpy(tempbuf,&kzhashbuf[i+4]); - j = strlen(tempbuf); - if (strlen(filnam)+1+j >= sizeof(tempbuf)) continue; //don't allow int32_t filenames to buffer overrun - if ((j) && (tempbuf[j-1] != '/') && (tempbuf[j-1] != '\\') && (filnam[0] != '/') && (filnam[0] != '\\')) -#if defined(_WIN32) - strcat(tempbuf,"\\"); -#else - strcat(tempbuf,"/"); -#endif - strcat(tempbuf,filnam); - kzfs.fil = fopen(tempbuf,"rb"); - if (kzfs.fil) - { - kzfs.comptyp = 0; - kzfs.seek0 = 0; - kzfs.leng = filelength(_fileno(kzfs.fil)); - kzfs.pos = 0; - kzfs.i = 0; - return((intptr_t)kzfs.fil); - } - } - - return(0); -} - -// -------------------------------------------------------------------------- - -#if defined(_WIN32) -static HANDLE hfind = INVALID_HANDLE_VALUE; -static WIN32_FIND_DATA findata; -#else -#define MAX_PATH 260 -static DIR *hfind = NULL; -static struct dirent *findata = NULL; -#endif - -//File find state variables. Example sequence (read top->bot, left->right): -// srchstat srchzoff srchdoff -// 0,1,2,3 -// 500,200,-1 -// 4 300 -// 0,1,2,3,4 100 -// 0,1,2,3,4 -1 -static int32_t srchstat = -1, srchzoff = 0, srchdoff = -1, wildstpathleng; -static char wildst[MAX_PATH] = "", newildst[MAX_PATH] = ""; - -void kzfindfilestart(const char *st) -{ -#if defined(_WIN32) - if (hfind != INVALID_HANDLE_VALUE) - { FindClose(hfind); hfind = INVALID_HANDLE_VALUE; } -#else - if (hfind) { closedir(hfind); hfind = NULL; } -#endif - strcpy(wildst,st); strcpy(newildst,st); - srchstat = 0; srchzoff = kzlastfnam; srchdoff = kzdirnamhead; -} - -int32_t kzfindfile(char *filnam) -{ - int32_t i; - - kzfindfile_beg:; - filnam[0] = 0; - if (srchstat == 0) - { - if (!newildst[0]) { srchstat = -1; return(0); } - do - { - srchstat = 1; - - //Extract directory from wildcard string for pre-pending - wildstpathleng = 0; - for (i=0; newildst[i]; i++) - if ((newildst[i] == '/') || (newildst[i] == '\\')) - wildstpathleng = i+1; - - Bmemcpy(filnam,newildst,wildstpathleng); - -#if defined(_WIN32) - hfind = FindFirstFile(newildst,&findata); - if (hfind == INVALID_HANDLE_VALUE) - { if (!kzhashbuf) return(0); srchstat = 2; continue; } - if (findata.dwFileAttributes&FILE_ATTRIBUTE_HIDDEN) continue; - i = wildstpathleng; - if (findata.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) - if ((findata.cFileName[0] == '.') && (!findata.cFileName[1])) continue; - strcpy(&filnam[i],findata.cFileName); - if (findata.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) strcat(&filnam[i],"\\"); -#else - if (!hfind) - { - char *s = "."; - if (wildstpathleng > 0) - { - filnam[wildstpathleng] = 0; - s = filnam; - } - hfind = opendir(s); - if (!hfind) { if (!kzhashbuf) return 0; srchstat = 2; continue; } - } - break; // process srchstat == 1 -#endif - return(1); - } - while (0); - } - if (srchstat == 1) - { - while (1) - { - Bmemcpy(filnam,newildst,wildstpathleng); -#if defined(_WIN32) - if (!FindNextFile(hfind,&findata)) - { FindClose(hfind); hfind = INVALID_HANDLE_VALUE; if (!kzhashbuf) return(0); srchstat = 2; break; } - if (findata.dwFileAttributes&FILE_ATTRIBUTE_HIDDEN) continue; - i = wildstpathleng; - if (findata.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) - if ((findata.cFileName[0] == '.') && (!findata.cFileName[1])) continue; - strcpy(&filnam[i],findata.cFileName); - if (findata.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) strcat(&filnam[i],"\\"); -#else - if ((findata = readdir(hfind)) == NULL) - { closedir(hfind); hfind = NULL; if (!kzhashbuf) return 0; srchstat = 2; break; } - i = wildstpathleng; - if (findata->d_type == DT_DIR) - { if (findata->d_name[0] == '.' && !findata->d_name[1]) continue; } //skip . - else if ((findata->d_type == DT_REG) || (findata->d_type == DT_LNK)) - { if (findata->d_name[0] == '.') continue; } //skip hidden (dot) files - else continue; //skip devices and fifos and such - if (!wildmatch(findata->d_name,&newildst[wildstpathleng])) continue; - strcpy(&filnam[i],findata->d_name); - if (findata->d_type == DT_DIR) strcat(&filnam[i],"/"); -#endif - return(1); - } - } - while (srchstat == 2) - { - if (srchzoff < 0) { srchstat = 3; break; } - if (wildmatch(&kzhashbuf[srchzoff+21],newildst)) - { - //strcpy(filnam,&kzhashbuf[srchzoff+21]); - filnam[0] = '|'; strcpy(&filnam[1],&kzhashbuf[srchzoff+21]); - srchzoff = *(int32_t *)&kzhashbuf[srchzoff+4]; - return(1); - } - srchzoff = *(int32_t *)&kzhashbuf[srchzoff+4]; - } - while (srchstat == 3) - { - if (srchdoff < 0) { srchstat = -1; break; } - strcpy(newildst,&kzhashbuf[srchdoff+4]); - i = strlen(newildst); - if ((i) && (newildst[i-1] != '/') && (newildst[i-1] != '\\') && (filnam[0] != '/') && (filnam[0] != '\\')) -#if defined(_WIN32) - strcat(newildst,"\\"); -#else - strcat(newildst,"/"); -#endif - strcat(newildst,wildst); - srchdoff = *(int32_t *)&kzhashbuf[srchdoff]; - srchstat = 0; goto kzfindfile_beg; - } - - return(0); -} - -//File searching code (supports inside ZIP files!) How to use this code: -// char filnam[MAX_PATH]; -// kzfindfilestart("vxl/*.vxl"); -// while (kzfindfile(filnam)) puts(filnam); -//NOTES: -// * Directory names end with '\' or '/' (depending on system) -// * Files inside zip begin with '|' - -// -------------------------------------------------------------------------- - -static char *gzbufptr; -static void putbuf4zip(const uint8_t *buf, int32_t uncomp0, int32_t uncomp1) -{ - int32_t i0, i1; - // uncomp0 ... uncomp1 - // &gzbufptr[kzfs.pos] ... &gzbufptr[kzfs.endpos]; - i0 = max(uncomp0,kzfs.pos); - i1 = min(uncomp1,kzfs.endpos); - if (i0 < i1) Bmemcpy(&gzbufptr[i0],&buf[i0-uncomp0],i1-i0); -} - -//returns number of bytes copied -int32_t kzread(void *buffer, int32_t leng) -{ - int32_t i, j, k, bfinal, btype, hlit, hdist; - - if ((!kzfs.fil) || (leng <= 0)) return(0); - - if (kzfs.comptyp == 0) - { - if (kzfs.pos != kzfs.i) //Seek only when position changes - fseek(kzfs.fil,kzfs.seek0+kzfs.pos,SEEK_SET); - i = min(kzfs.leng-kzfs.pos,leng); - fread(buffer,i,1,kzfs.fil); - kzfs.i += i; //kzfs.i is a local copy of ftell(kzfs.fil); - } - else if (kzfs.comptyp == 8) - { - zipfilmode = 1; - - //Initialize for putbuf4zip - gzbufptr = (char *)buffer; gzbufptr = &gzbufptr[-kzfs.pos]; - kzfs.endpos = min(kzfs.pos+leng,kzfs.leng); - if (kzfs.endpos == kzfs.pos) return(0); //Guard against reading 0 length - - if (kzfs.pos < gslidew-32768) // Must go back to start :( - { - if (kzfs.comptell) fseek(kzfs.fil,kzfs.seek0,SEEK_SET); - - gslidew = 0; gslider = 16384; - kzfs.jmpplc = 0; - - //Initialize for suckbits/peekbits/getbits - kzfs.comptell = min((unsigned)kzfs.compleng,sizeof(olinbuf)); - fread(&olinbuf[0],kzfs.comptell,1,kzfs.fil); - //Make it re-load when there are < 32 bits left in FIFO - bitpos = -(((int32_t)sizeof(olinbuf)-4)<<3); - //Identity: filptr + (bitpos>>3) = &olinbuf[0] - filptr = &olinbuf[-(bitpos>>3)]; - } - else - { - i = max(gslidew-32768,0); j = gslider-16384; - - //HACK: Don't unzip anything until you have to... - // (keeps file pointer as low as possible) - if (kzfs.endpos <= gslidew) j = kzfs.endpos; - - //write uncompoffs on slidebuf from: i to j - if (!((i^j)&32768)) - putbuf4zip(&slidebuf[i&32767],i,j); - else - { - putbuf4zip(&slidebuf[i&32767],i,j&~32767); - putbuf4zip(slidebuf,j&~32767,j); - } - - //HACK: Don't unzip anything until you have to... - // (keeps file pointer as low as possible) - if (kzfs.endpos <= gslidew) goto retkzread; - } - - switch (kzfs.jmpplc) - { - case 0: goto kzreadplc0; - case 1: goto kzreadplc1; - case 2: goto kzreadplc2; - case 3: goto kzreadplc3; - } - kzreadplc0:; - do - { - bfinal = getbits(1); btype = getbits(2); - -#if 0 - //Display Huffman block offsets&lengths of input file - for debugging only! - { - static int32_t ouncomppos = 0, ocomppos = 0; - if (kzfs.comptell == sizeof(olinbuf)) i = 0; - else if (kzfs.comptell < kzfs.compleng) i = kzfs.comptell-(sizeof(olinbuf)-4); - else i = kzfs.comptell-(kzfs.comptell%(sizeof(olinbuf)-4)); - i += ((int32_t)&filptr[bitpos>>3])-((int32_t)(&olinbuf[0])); - i = (i<<3)+(bitpos&7)-3; - if (gslidew) printf(" ULng:0x%08x CLng:0x%08x.%x",gslidew-ouncomppos,(i-ocomppos)>>3,((i-ocomppos)&7)<<1); - printf("\ntype:%d, Uoff:0x%08x Coff:0x%08x.%x",btype,gslidew,i>>3,(i&7)<<1); - if (bfinal) - { - printf(" ULng:0x%08x CLng:0x%08x.%x",kzfs.leng-gslidew,((kzfs.compleng<<3)-i)>>3,(((kzfs.compleng<<3)-i)&7)<<1); - printf("\n Uoff:0x%08x Coff:0x%08x.0",kzfs.leng,kzfs.compleng); - ouncomppos = ocomppos = 0; - } - else { ouncomppos = gslidew; ocomppos = i; } - } -#endif - - if (btype == 0) - { - //Raw (uncompressed) - suckbits((-bitpos)&7); //Synchronize to start of next byte - i = getbits(16); if ((getbits(16)^i) != 0xffff) return(-1); - for (; i; i--) - { - if (gslidew >= gslider) - { - putbuf4zip(&slidebuf[(gslider-16384)&32767],gslider-16384,gslider); gslider += 16384; - if (gslider-16384 >= kzfs.endpos) - { - kzfs.jmpplc = 1; kzfs.i = i; kzfs.bfinal = bfinal; - goto retkzread; - kzreadplc1:; i = kzfs.i; bfinal = kzfs.bfinal; - } - } - slidebuf[(gslidew++)&32767] = (uint8_t)getbits(8); - } - continue; - } - if (btype == 3) continue; - - if (btype == 1) //Fixed Huffman - { - hlit = 288; hdist = 32; i = 0; - for (; i<144; i++) clen[i] = 8; //Fixed bit sizes (literals) - for (; i<256; i++) clen[i] = 9; //Fixed bit sizes (literals) - for (; i<280; i++) clen[i] = 7; //Fixed bit sizes (EOI,lengths) - for (; i<288; i++) clen[i] = 8; //Fixed bit sizes (lengths) - for (; i<320; i++) clen[i] = 5; //Fixed bit sizes (distances) - } - else //Dynamic Huffman - { - hlit = getbits(5)+257; hdist = getbits(5)+1; j = getbits(4)+4; - for (i=0; i= gslider) - { - putbuf4zip(&slidebuf[(gslider-16384)&32767],gslider-16384,gslider); gslider += 16384; - if (gslider-16384 >= kzfs.endpos) - { - kzfs.jmpplc = 2; kzfs.bfinal = bfinal; goto retkzread; - kzreadplc2:; bfinal = kzfs.bfinal; - } - } - - k = peekbits(LOGQHUFSIZ0); - if (qhufbit0[k]) { i = qhufval0[k]; suckbits((int32_t)qhufbit0[k]); } - else i = hufgetsym(ibuf0,nbuf0); - - if (i < 256) { slidebuf[(gslidew++)&32767] = (uint8_t)i; continue; } - if (i == 256) break; - i = getbits(hxbit[i+30-257][0]) + hxbit[i+30-257][1]; - - k = peekbits(LOGQHUFSIZ1); - if (qhufbit1[k]) { j = qhufval1[k]; suckbits((int32_t)qhufbit1[k]); } - else j = hufgetsym(ibuf1,nbuf1); - - j = getbits(hxbit[j][0]) + hxbit[j][1]; - for (; i; i--,gslidew++) slidebuf[gslidew&32767] = slidebuf[(gslidew-j)&32767]; - } - } - while (!bfinal); - - gslider -= 16384; - if (!((gslider^gslidew)&32768)) - putbuf4zip(&slidebuf[gslider&32767],gslider,gslidew); - else - { - putbuf4zip(&slidebuf[gslider&32767],gslider,gslidew&~32767); - putbuf4zip(slidebuf,gslidew&~32767,gslidew); - } - kzreadplc3:; kzfs.jmpplc = 3; - } - - retkzread:; - i = kzfs.pos; - kzfs.pos += leng; if (kzfs.pos > kzfs.leng) kzfs.pos = kzfs.leng; - return(kzfs.pos-i); -} - -int32_t kzfilelength() -{ - if (!kzfs.fil) return(0); - return(kzfs.leng); -} - -//WARNING: kzseek(<-32768,SEEK_CUR); or: -// kzseek(0,SEEK_END); can make next kzread very slow!!! -int32_t kzseek(int32_t offset, int32_t whence) -{ - if (!kzfs.fil) return(-1); - switch (whence) - { - case SEEK_CUR: kzfs.pos += offset; break; - case SEEK_END: kzfs.pos = kzfs.leng+offset; break; -case SEEK_SET: default: kzfs.pos = offset; - } - if (kzfs.pos < 0) kzfs.pos = 0; - if (kzfs.pos > kzfs.leng) kzfs.pos = kzfs.leng; - return(kzfs.pos); -} - -int32_t kztell() -{ - if (!kzfs.fil) return(-1); - return(kzfs.pos); -} - -int32_t kzgetc() -{ - char ch; - if (!kzread(&ch,1)) return(-1); - return((int32_t)ch); -} - -int32_t kzeof() -{ - if (!kzfs.fil) return(-1); - return(kzfs.pos >= kzfs.leng); -} - -void kzclose() -{ - if (kzfs.fil) { fclose(kzfs.fil); kzfs.fil = 0; } -} - -//====================== ZIP decompression code ends ========================= -//===================== HANDY PICTURE function begins ======================== -#include "cache1d.h" - -void kpzload(const char *filnam, intptr_t *pic, int32_t *bpl, int32_t *xsiz, int32_t *ysiz) -{ - char *buf; - int32_t leng; - int32_t handle = kopen4load((char *)filnam, 0); - - (*pic) = 0; - if (handle < 0) return; - leng = kfilelength(handle); - buf = (char *)Bmalloc(leng); if (!buf) return; - kread(handle,buf,leng); - kclose(handle); - - kpgetdim(buf,leng,xsiz,ysiz); - (*bpl) = ((*xsiz)<<2); - (*pic) = (intptr_t)Bmalloc((*ysiz)*(*bpl)); if (!(*pic)) { Bfree(buf); return; } - if (kprender(buf,leng,*pic,*bpl,*xsiz,*ysiz,0,0) < 0) { Bfree(buf); Bfree((void *)*pic); (*pic) = 0; return; } - Bfree(buf); -} -//====================== HANDY PICTURE function ends ========================= diff --git a/polymer-perf/eduke32/build/src/lzwnew.c b/polymer-perf/eduke32/build/src/lzwnew.c deleted file mode 100644 index 89a9053e1..000000000 --- a/polymer-perf/eduke32/build/src/lzwnew.c +++ /dev/null @@ -1,122 +0,0 @@ -//-------------------------------------------------------------------------------------------------- -#include "compat.h" -#if defined(__POWERPC__) -static uint32_t LSWAPIB(uint32_t a) { return(((a>>8)&0xff00)+((a&0xff00)<<8)+(a<<24)+(a>>24)); } -static uint16_t SSWAPIB(uint16_t a) { return((a>>8)+(a<<8)); } -#else -#define LSWAPIB(a) (a) -#define SSWAPIB(a) (a) -#endif - -#define USENEW 1 -int32_t lzwcompress(char *ucompbuf, int32_t ucompleng, char *compbuf) -{ - int32_t i, j, numnodes, *lptr, bitcnt, nbits, oneupnbits, hmask, *child; - int32_t *sibly; -#if USENEW - int32_t *sibry; -#endif - char *nodev, *cptr, *eptr; - - nodev = (char *)Bmalloc((ucompleng+256)*sizeof(uint8_t)); if (!nodev) return(0); - child = (int32_t *)Bmalloc((ucompleng+256)*sizeof(int32_t)); if (!child) { Bfree(nodev); return(0); } - sibly = (int32_t *)Bmalloc((ucompleng+256)*sizeof(int32_t)); if (!sibly) { Bfree(child); Bfree(nodev); return(0); } -#if USENEW - sibry = (int32_t *)Bmalloc((ucompleng+256)*sizeof(int32_t)); if (!sibry) { Bfree(sibly); Bfree(child); Bfree(nodev); return(0); } -#endif - - for (i=255; i>=0; i--) { nodev[i] = i; child[i] = -1; } - memset(compbuf,0,ucompleng+15); - - cptr = ucompbuf; eptr = &ucompbuf[ucompleng]; - - numnodes = 256; bitcnt = (4<<3); nbits = 8; oneupnbits = (1<<8); hmask = ((oneupnbits>>1)-1); - do - { - for (i=cptr[0]; i>=0; i=j) - { - cptr++; if (cptr >= eptr) goto lzwcompbreak2b; - j = child[i]; if (j < 0) { child[i] = numnodes; break; } -#if USENEW - //This is about 2x faster when ucompbuf is more random, 5% slower when very compressible - while (cptr[0] != nodev[j]) - { - if (cptr[0] < nodev[j]) - { if (sibly[j] < 0) { sibly[j] = numnodes; goto lzwcompbreak2a; } j = sibly[j]; } - else { if (sibry[j] < 0) { sibry[j] = numnodes; goto lzwcompbreak2a; } j = sibry[j]; } - } -#else - for (; nodev[j]!=cptr[0]; j=sibly[j]) - if (sibly[j] < 0) { sibly[j] = numnodes; goto lzwcompbreak2a; } -#endif - } -lzwcompbreak2a: - nodev[numnodes] = cptr[0]; -lzwcompbreak2b: - child[numnodes] = sibly[numnodes] = -1; -#if USENEW - sibry[numnodes] = -1; -#endif - - lptr = (int32_t *)&compbuf[bitcnt>>3]; lptr[0] |= LSWAPIB(i<<(bitcnt&7)); - bitcnt += nbits; if ((i&hmask) > ((numnodes-1)&hmask)) bitcnt--; - - numnodes++; if (numnodes > oneupnbits) { nbits++; oneupnbits <<= 1; hmask = ((oneupnbits>>1)-1); } - } - while ((cptr < eptr) && (bitcnt < (ucompleng<<3))); - -#if USENEW - Bfree(sibry); -#endif - Bfree(sibly); - Bfree(child); Bfree(nodev); - - lptr = (int32_t *)compbuf; - if (((bitcnt+7)>>3) < ucompleng) { lptr[0] = LSWAPIB(numnodes); return((bitcnt+7)>>3); } - Bmemcpy(compbuf,ucompbuf,ucompleng); return(ucompleng); -} - -int32_t lzwuncompress(char *compbuf, int32_t compleng, char *ucompbuf, int32_t ucompleng) -{ - int32_t i, dat, leng, bitcnt, *lptr, numnodes, totnodes, nbits, oneupnbits, hmask, *prefix; - char ch, *ucptr, *suffix; - int32_t ucomp = (int32_t)ucompbuf; - - if (compleng >= ucompleng) { Bmemcpy(ucompbuf,compbuf,ucompleng); return ucompleng; } - - totnodes = LSWAPIB(((int32_t *)compbuf)[0]); if (totnodes <= 0 || totnodes >= ucompleng+256) return 0; - - prefix = (int32_t *)Bmalloc(totnodes*sizeof(int32_t)); if (!prefix) return 0; - suffix = (char *)Bmalloc(totnodes*sizeof(uint8_t)); if (!suffix) { Bfree(prefix); return 0; } - - numnodes = 256; bitcnt = (4<<3); nbits = 8; oneupnbits = (1<<8); hmask = ((oneupnbits>>1)-1); - do - { - lptr = (int32_t *)&compbuf[bitcnt>>3]; dat = ((LSWAPIB(lptr[0])>>(bitcnt&7))&(oneupnbits-1)); - bitcnt += nbits; if ((dat&hmask) > ((numnodes-1)&hmask)) { dat &= hmask; bitcnt--; } - - prefix[numnodes] = dat; - - ucompbuf++; - for (leng=0; dat>=256; dat=prefix[dat]) - { - if ((int32_t)ucompbuf+leng-ucomp > ucompleng) goto bail; - ucompbuf[leng++] = suffix[dat]; - } - - ucptr = &ucompbuf[leng-1]; - for (i=(leng>>1)-1; i>=0; i--) { ch = ucompbuf[i]; ucompbuf[i] = ucptr[-i]; ucptr[-i] = ch; } - ucompbuf[-1] = dat; ucompbuf += leng; - - suffix[numnodes-1] = suffix[numnodes] = dat; - - numnodes++; if (numnodes > oneupnbits) { nbits++; oneupnbits <<= 1; hmask = ((oneupnbits>>1)-1); } - } - while (numnodes < totnodes); - -bail: - Bfree(suffix); Bfree(prefix); - - return (int32_t)ucompbuf-ucomp; -} -//-------------------------------------------------------------------------------------------------- diff --git a/polymer-perf/eduke32/build/src/md4.c b/polymer-perf/eduke32/build/src/md4.c deleted file mode 100644 index 8ef1920ed..000000000 --- a/polymer-perf/eduke32/build/src/md4.c +++ /dev/null @@ -1,275 +0,0 @@ -/* MD4C.C - RSA Data Security, Inc., MD4 message-digest algorithm - Modified from original version published in RFC1320 by - Jonathon Fowler (jonof@edgenetwork.org) - */ - -/* Copyright (C) 1990-2, RSA Data Security, Inc. All rights reserved. - - License to copy and use this software is granted provided that it - is identified as the "RSA Data Security, Inc. MD4 Message-Digest - Algorithm" in all material mentioning or referencing this software - or this function. - - License is also granted to make and use derivative works provided - that such works are identified as "derived from the RSA Data - Security, Inc. MD4 Message-Digest Algorithm" in all material - mentioning or referencing the derived work. - - RSA Data Security, Inc. makes no representations concerning either - the merchantability of this software or the suitability of this - software for any particular purpose. It is provided "as is" - without express or implied warranty of any kind. - - These notices must be retained in any copies of any part of this - documentation and/or software. - */ - -typedef unsigned char *POINTER; -typedef unsigned short UINT2; -typedef unsigned int UINT4; - -#include "md4.h" -#include "compat.h" - -/* Constants for MD4Transform routine. - */ -#define S11 3 -#define S12 7 -#define S13 11 -#define S14 19 -#define S21 3 -#define S22 5 -#define S23 9 -#define S24 13 -#define S31 3 -#define S32 9 -#define S33 11 -#define S34 15 - -static void MD4Transform(UINT4 [4], unsigned char [64]); -static void Encode(unsigned char *, UINT4 *, unsigned int); -static void Decode(UINT4 *, unsigned char *, unsigned int); -#define MD4_memcpy Bmemcpy -#define MD4_memset memset - -static unsigned char PADDING[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* F, G and H are basic MD4 functions. - */ -#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) -#define G(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) - -/* ROTATE_LEFT rotates x left n bits. - */ -#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) - -/* FF, GG and HH are transformations for rounds 1, 2 and 3 */ -/* Rotation is separate from addition to prevent recomputation */ -#define FF(a, b, c, d, x, s) { \ - (a) += F ((b), (c), (d)) + (x); \ - (a) = ROTATE_LEFT ((a), (s)); \ - } -#define GG(a, b, c, d, x, s) { \ - (a) += G ((b), (c), (d)) + (x) + (UINT4)0x5a827999; \ - (a) = ROTATE_LEFT ((a), (s)); \ - } -#define HH(a, b, c, d, x, s) { \ - (a) += H ((b), (c), (d)) + (x) + (UINT4)0x6ed9eba1; \ - (a) = ROTATE_LEFT ((a), (s)); \ - } - -void md4once(unsigned char *block, unsigned int len, unsigned char digest[16]) -{ - MD4_CTX ctx; - - md4init(&ctx); - md4block(&ctx, block, len); - md4finish(digest, &ctx); -} - -/* MD4 initialization. Begins an MD4 operation, writing a new context. - */ -void md4init(MD4_CTX *context) -{ - context->count[0] = context->count[1] = 0; - - /* Load magic initialization constants. - */ - context->state[0] = 0x67452301; - context->state[1] = 0xefcdab89; - context->state[2] = 0x98badcfe; - context->state[3] = 0x10325476; -} - -/* MD4 block update operation. Continues an MD4 message-digest - operation, processing another message block, and updating the - context. - */ -void md4block(MD4_CTX *context, unsigned char *input, unsigned int inputLen) -{ - unsigned int i, index, partLen; - - /* Compute number of bytes mod 64 */ - index = (unsigned int)((context->count[0] >> 3) & 0x3F); - /* Update number of bits */ - if ((context->count[0] += ((UINT4)inputLen << 3)) - < ((UINT4)inputLen << 3)) - context->count[1]++; - context->count[1] += ((UINT4)inputLen >> 29); - - partLen = 64 - index; - - /* Transform as many times as possible. - */ - if (inputLen >= partLen) - { - MD4_memcpy - ((POINTER)&context->buffer[index], (POINTER)input, partLen); - MD4Transform(context->state, context->buffer); - - for (i = partLen; i + 63 < inputLen; i += 64) - MD4Transform(context->state, &input[i]); - - index = 0; - } - else - i = 0; - - /* Buffer remaining input */ - MD4_memcpy - ((POINTER)&context->buffer[index], (POINTER)&input[i], - inputLen-i); -} - -/* MD4 finalization. Ends an MD4 message-digest operation, writing the - the message digest and zeroizing the context. - */ -void md4finish(unsigned char digest[16], MD4_CTX *context) -{ - unsigned char bits[8]; - unsigned int index, padLen; - - /* Save number of bits */ - Encode(bits, context->count, 8); - - /* Pad out to 56 mod 64. - */ - index = (unsigned int)((context->count[0] >> 3) & 0x3f); - padLen = (index < 56) ? (56 - index) : (120 - index); - md4block(context, PADDING, padLen); - - /* Append length (before padding) */ - md4block(context, bits, 8); - /* Store state in digest */ - Encode(digest, context->state, 16); - - /* Zeroize sensitive information. - */ - MD4_memset((POINTER)context, 0, sizeof(*context)); -} - -/* MD4 basic transformation. Transforms state based on block. - */ -static void MD4Transform(UINT4 state[4], unsigned char block[64]) -{ - UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; - - Decode(x, block, 64); - - /* Round 1 */ - FF(a, b, c, d, x[ 0], S11); /* 1 */ - FF(d, a, b, c, x[ 1], S12); /* 2 */ - FF(c, d, a, b, x[ 2], S13); /* 3 */ - FF(b, c, d, a, x[ 3], S14); /* 4 */ - FF(a, b, c, d, x[ 4], S11); /* 5 */ - FF(d, a, b, c, x[ 5], S12); /* 6 */ - FF(c, d, a, b, x[ 6], S13); /* 7 */ - FF(b, c, d, a, x[ 7], S14); /* 8 */ - FF(a, b, c, d, x[ 8], S11); /* 9 */ - FF(d, a, b, c, x[ 9], S12); /* 10 */ - FF(c, d, a, b, x[10], S13); /* 11 */ - FF(b, c, d, a, x[11], S14); /* 12 */ - FF(a, b, c, d, x[12], S11); /* 13 */ - FF(d, a, b, c, x[13], S12); /* 14 */ - FF(c, d, a, b, x[14], S13); /* 15 */ - FF(b, c, d, a, x[15], S14); /* 16 */ - - /* Round 2 */ - GG(a, b, c, d, x[ 0], S21); /* 17 */ - GG(d, a, b, c, x[ 4], S22); /* 18 */ - GG(c, d, a, b, x[ 8], S23); /* 19 */ - GG(b, c, d, a, x[12], S24); /* 20 */ - GG(a, b, c, d, x[ 1], S21); /* 21 */ - GG(d, a, b, c, x[ 5], S22); /* 22 */ - GG(c, d, a, b, x[ 9], S23); /* 23 */ - GG(b, c, d, a, x[13], S24); /* 24 */ - GG(a, b, c, d, x[ 2], S21); /* 25 */ - GG(d, a, b, c, x[ 6], S22); /* 26 */ - GG(c, d, a, b, x[10], S23); /* 27 */ - GG(b, c, d, a, x[14], S24); /* 28 */ - GG(a, b, c, d, x[ 3], S21); /* 29 */ - GG(d, a, b, c, x[ 7], S22); /* 30 */ - GG(c, d, a, b, x[11], S23); /* 31 */ - GG(b, c, d, a, x[15], S24); /* 32 */ - - /* Round 3 */ - HH(a, b, c, d, x[ 0], S31); /* 33 */ - HH(d, a, b, c, x[ 8], S32); /* 34 */ - HH(c, d, a, b, x[ 4], S33); /* 35 */ - HH(b, c, d, a, x[12], S34); /* 36 */ - HH(a, b, c, d, x[ 2], S31); /* 37 */ - HH(d, a, b, c, x[10], S32); /* 38 */ - HH(c, d, a, b, x[ 6], S33); /* 39 */ - HH(b, c, d, a, x[14], S34); /* 40 */ - HH(a, b, c, d, x[ 1], S31); /* 41 */ - HH(d, a, b, c, x[ 9], S32); /* 42 */ - HH(c, d, a, b, x[ 5], S33); /* 43 */ - HH(b, c, d, a, x[13], S34); /* 44 */ - HH(a, b, c, d, x[ 3], S31); /* 45 */ - HH(d, a, b, c, x[11], S32); /* 46 */ - HH(c, d, a, b, x[ 7], S33); /* 47 */ - HH(b, c, d, a, x[15], S34); /* 48 */ - - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - - /* Zeroize sensitive information. - */ - MD4_memset((POINTER)x, 0, sizeof(x)); -} - -/* Encodes input (UINT4) into output (unsigned char). Assumes len is - a multiple of 4. - */ -static void Encode(unsigned char *output, UINT4 *input, unsigned int len) -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) - { - output[j] = (unsigned char)(input[i] & 0xff); - output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); - output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); - output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); - } -} - -/* Decodes input (unsigned char) into output (UINT4). Assumes len is - a multiple of 4. - */ -static void Decode(UINT4 *output, unsigned char *input, unsigned int len) -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) - output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) | - (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24); -} diff --git a/polymer-perf/eduke32/build/src/mdsprite.c b/polymer-perf/eduke32/build/src/mdsprite.c deleted file mode 100644 index d5835cb43..000000000 --- a/polymer-perf/eduke32/build/src/mdsprite.c +++ /dev/null @@ -1,3319 +0,0 @@ -//------------------------------------- MD2/MD3 LIBRARY BEGINS ------------------------------------- - -#ifdef USE_OPENGL - -#include "compat.h" -#include "build.h" -#include "glbuild.h" -#include "pragmas.h" -#include "baselayer.h" -#include "engine_priv.h" -#include "hightile.h" -#include "polymost.h" -#include "mdsprite.h" -#include "cache1d.h" -#include "kplib.h" -#include "md4.h" - -#include - -voxmodel_t *voxmodels[MAXVOXELS]; -int32_t curextra=MAXTILES; -// nedpool *model_data_pool; -// #define MODEL_POOL_SIZE 20971520 -#define model_data_pool (nedpool *) 0 // take it out of the system pool - -#define MIN_CACHETIME_PRINT 5 - -static void QuitOnFatalError(const char *msg) -{ - if (msg) - initprintf("%s\n", msg); - uninitengine(); - exit(1); -} - - -int32_t addtileP(int32_t model,int32_t tile,int32_t pallet) -{ - UNREFERENCED_PARAMETER(model); - if (curextra==MAXTILES+EXTRATILES-2)return curextra; - if (tile2model[tile].modelid==-1) {tile2model[tile].pal=pallet; return tile;} - if (tile2model[tile].pal==pallet)return tile; - while (tile2model[tile].next!=-1) - { - tile=tile2model[tile].next; - if (tile2model[tile].pal==pallet)return tile; - } - tile2model[tile].next=curextra; - tile2model[curextra].pal=pallet; - return curextra++; -} -int32_t Ptile2tile(int32_t tile,int32_t pallet) -{ - int32_t t=tile; -// if(tile>=1550&&tile<=1589){initprintf("(%d, %d)\n",tile,pallet);pallet=0;} - while ((tile=tile2model[tile].next)!=-1) - if (tile2model[tile].pal==pallet) - return tile; - return t; -} - -int32_t mdinited=0; -int32_t mdpause=0; - -#define MODELALLOCGROUP 256 -int32_t nummodelsalloced = 0, nextmodelid = 0; - -static int32_t maxmodelverts = 0, allocmodelverts = 0; -static int32_t maxmodeltris = 0, allocmodeltris = 0; -static point3d *vertlist = NULL; //temp array to store interpolated vertices for drawing - -static int32_t allocvbos = 0, curvbo = 0; -static GLuint *vertvbos = NULL; -static GLuint *indexvbos = NULL; - -mdmodel_t *mdload(const char *); -int32_t mddraw(spritetype *); -void mdfree(mdmodel_t *); -int32_t globalnoeffect=0; - -extern int32_t timerticspersec; - -void freevbos() -{ - int32_t i; - - for (i=0; imdnum == 3) - { - md3model_t *m = (md3model_t *)models[i]; - if (m->vbos) - { - // OSD_Printf("freeing model %d vbo\n",i); - bglDeleteBuffersARB(m->head.numsurfs, m->vbos); - Bfree(m->vbos); - m->vbos = NULL; - } - } - - if (allocvbos) - { - bglDeleteBuffersARB(allocvbos, indexvbos); - bglDeleteBuffersARB(allocvbos, vertvbos); - allocvbos = 0; - } -} - -void freeallmodels() -{ - int32_t i; - - if (models) - { - for (i=0; imdnum == 1) - { - voxmodel_t *v = (voxmodel_t *)m; - for (j=0; jtexid[j]) bglDeleteTextures(1,(GLuint *)&v->texid[j]); - v->texid[j] = 0; - } - } - else if (m->mdnum == 2 || m->mdnum == 3) - { - md2model_t *m2 = (md2model_t *)m; - mdskinmap_t *sk; - for (j=0; jnumskins*(HICEFFECTMASK+1); j++) - { - if (m2->texid[j]) bglDeleteTextures(1,(GLuint *)&m2->texid[j]); - m2->texid[j] = 0; - } - - for (sk=m2->skinmap; sk; sk=sk->next) - for (j=0; j<(HICEFFECTMASK+1); j++) - { - if (sk->texid[j]) bglDeleteTextures(1,(GLuint *)&sk->texid[j]); - sk->texid[j] = 0; - } - } - } - - for (i=0; itexid[j]) bglDeleteTextures(1,(GLuint *)&v->texid[j]); - v->texid[j] = 0; - } - } -} - -void mdinit() -{ - memset(hudmem,0,sizeof(hudmem)); - freeallmodels(); -// if (!model_data_pool) -// model_data_pool = nedcreatepool(MODEL_POOL_SIZE, 0); - mdinited = 1; -} - -int32_t md_loadmodel(const char *fn) -{ - mdmodel_t *vm, **ml; - - if (!mdinited) mdinit(); - - if (nextmodelid >= nummodelsalloced) - { - ml = (mdmodel_t **)Brealloc(models,(nummodelsalloced+MODELALLOCGROUP)*sizeof(void *)); if (!ml) return(-1); - models = ml; nummodelsalloced += MODELALLOCGROUP; - } - - vm = mdload(fn); if (!vm) return(-1); - models[nextmodelid++] = vm; - return(nextmodelid-1); -} - -int32_t md_setmisc(int32_t modelid, float scale, int32_t shadeoff, float zadd, int32_t flags) -{ - mdmodel_t *m; - - if (!mdinited) mdinit(); - - if ((uint32_t)modelid >= (uint32_t)nextmodelid) return -1; - m = models[modelid]; - m->bscale = scale; - m->shadeoff = shadeoff; - m->zadd = zadd; - m->flags = flags; - - return 0; -} - -/* -int32_t md_tilehasmodel(int32_t tilenume,int32_t pal) -{ - if (!mdinited) return -1; - return tile2model[Ptile2tile(tilenume,pal)].modelid; -} -*/ - -static int32_t framename2index(mdmodel_t *vm, const char *nam) -{ - int32_t i = 0; - - switch (vm->mdnum) - { - case 2: - { - md2model_t *m = (md2model_t *)vm; - md2frame_t *fr; - for (i=0; inumframes; i++) - { - fr = (md2frame_t *)&m->frames[i*m->framebytes]; - if (!Bstrcmp(fr->name, nam)) break; - } - } - break; - case 3: - { - md3model_t *m = (md3model_t *)vm; - for (i=0; inumframes; i++) - if (!Bstrcmp(m->head.frames[i].nam,nam)) break; - } - break; - } - return(i); -} - -int32_t md_defineframe(int32_t modelid, const char *framename, int32_t tilenume, int32_t skinnum, float smoothduration, int32_t pal) -{ - md2model_t *m; - int32_t i; - - if (!mdinited) mdinit(); - - if ((uint32_t)modelid >= (uint32_t)nextmodelid) return(-1); - if ((uint32_t)tilenume >= (uint32_t)MAXTILES) return(-2); - if (!framename) return(-3); - - tilenume=addtileP(modelid,tilenume,pal); - m = (md2model_t *)models[modelid]; - if (m->mdnum == 1) - { - tile2model[tilenume].modelid = modelid; - tile2model[tilenume].framenum = tile2model[tilenume].skinnum = 0; - return 0; - } - - i = framename2index((mdmodel_t *)m,framename); - if (i == m->numframes) return(-3); // frame name invalid - - tile2model[tilenume].modelid = modelid; - tile2model[tilenume].framenum = i; - tile2model[tilenume].skinnum = skinnum; - tile2model[tilenume].smoothduration = smoothduration; - - return 0; -} - -int32_t md_defineanimation(int32_t modelid, const char *framestart, const char *frameend, int32_t fpssc, int32_t flags) -{ - md2model_t *m; - mdanim_t ma, *map; - int32_t i; - - if (!mdinited) mdinit(); - - if ((uint32_t)modelid >= (uint32_t)nextmodelid) return(-1); - - memset(&ma, 0, sizeof(ma)); - m = (md2model_t *)models[modelid]; - if (m->mdnum < 2) return 0; - - //find index of start frame - i = framename2index((mdmodel_t *)m,framestart); - if (i == m->numframes) return -2; - ma.startframe = i; - - //find index of finish frame which must trail start frame - i = framename2index((mdmodel_t *)m,frameend); - if (i == m->numframes) return -3; - ma.endframe = i; - - ma.fpssc = fpssc; - ma.flags = flags; - - map = (mdanim_t *)Bcalloc(1,sizeof(mdanim_t)); - if (!map) return(-4); - Bmemcpy(map, &ma, sizeof(ma)); - - map->next = m->animations; - m->animations = map; - - return(0); -} - -int32_t md_defineskin(int32_t modelid, const char *skinfn, int32_t palnum, int32_t skinnum, int32_t surfnum, float param, float specpower, float specfactor) -{ - mdskinmap_t *sk, *skl; - md2model_t *m; - - if (!mdinited) mdinit(); - - if ((uint32_t)modelid >= (uint32_t)nextmodelid) return -1; - if (!skinfn) return -2; - if ((unsigned)palnum >= (unsigned)MAXPALOOKUPS) return -3; - - m = (md2model_t *)models[modelid]; - if (m->mdnum < 2) return 0; - if (m->mdnum == 2) surfnum = 0; - - skl = NULL; - for (sk = m->skinmap; sk; skl = sk, sk = sk->next) - if (sk->palette == (uint8_t)palnum && skinnum == sk->skinnum && surfnum == sk->surfnum) break; - if (!sk) - { - sk = (mdskinmap_t *)Bcalloc(1,sizeof(mdskinmap_t)); - if (!sk) return -4; - - if (!skl) m->skinmap = sk; - else skl->next = sk; - } - else if (sk->fn) Bfree(sk->fn); - - sk->palette = (uint8_t)palnum; - sk->skinnum = skinnum; - sk->surfnum = surfnum; - sk->param = param; - sk->specpower = specpower; - sk->specfactor = specfactor; - sk->fn = (char *)Bmalloc(strlen(skinfn)+1); - if (!sk->fn) return(-4); - strcpy(sk->fn, skinfn); - - return 0; -} - -int32_t md_definehud(int32_t modelid, int32_t tilex, double xadd, double yadd, double zadd, double angadd, int32_t flags, int32_t fov) -{ - if (!mdinited) mdinit(); - - if ((uint32_t)modelid >= (uint32_t)nextmodelid) return -1; - if ((uint32_t)tilex >= (uint32_t)MAXTILES) return -2; - - hudmem[(flags>>2)&1][tilex].xadd = xadd; - hudmem[(flags>>2)&1][tilex].yadd = yadd; - hudmem[(flags>>2)&1][tilex].zadd = zadd; - hudmem[(flags>>2)&1][tilex].angadd = ((int16_t)angadd)|2048; - hudmem[(flags>>2)&1][tilex].flags = (int16_t)flags; - hudmem[(flags>>2)&1][tilex].fov = (int16_t)fov; - - return 0; -} - -int32_t md_undefinetile(int32_t tile) -{ - if (!mdinited) return 0; - if ((unsigned)tile >= (unsigned)MAXTILES) return -1; - - tile2model[tile].modelid = -1; - tile2model[tile].next=-1; - return 0; -} - -int32_t md_undefinemodel(int32_t modelid) -{ - int32_t i; - if (!mdinited) return 0; - if ((uint32_t)modelid >= (uint32_t)nextmodelid) return -1; - - for (i=MAXTILES+EXTRATILES-1; i>=0; i--) - if (tile2model[i].modelid == modelid) - tile2model[i].modelid = -1; - - if (models) - { - mdfree(models[modelid]); - models[modelid] = NULL; - } - - return 0; -} - -md2model_t *modelhead; -mdskinmap_t *skhead; - -static int32_t daskinloader(int32_t filh, intptr_t *fptr, int32_t *bpl, int32_t *sizx, int32_t *sizy, int32_t *osizx, int32_t *osizy, char *hasalpha, int32_t pal, char effect) -{ - int32_t picfillen, j,y,x; - char *picfil,*cptr,al=255; - coltype *pic; - int32_t xsiz, ysiz, tsizx, tsizy; - int32_t r, g, b; - - picfillen = kfilelength(filh); - picfil = (char *)Bmalloc(picfillen+1); if (!picfil) { return -1; } - kread(filh, picfil, picfillen); - - // tsizx/y = replacement texture's natural size - // xsiz/y = 2^x size of replacement - - kpgetdim(picfil,picfillen,&tsizx,&tsizy); - if (tsizx == 0 || tsizy == 0) { Bfree(picfil); return -1; } - - if (!glinfo.texnpot) - { - for (xsiz=1; xsiz=0; j--) - { - swapchar(&pic[j].r, &pic[j].b); - } - } - - *sizx = xsiz; - *sizy = ysiz; - *bpl = xsiz; - *fptr = (intptr_t)pic; - *hasalpha = (al != 255); - - return 0; -} - -// JONOF'S COMPRESSED TEXTURE CACHE STUFF --------------------------------------------------- -int32_t mdloadskin_trytexcache(char *fn, int32_t len, int32_t pal, char effect, texcacheheader *head) -{ - int32_t fp, err=0; - char cachefn[BMAX_PATH], *cp; - uint8_t mdsum[16]; - - if (!glinfo.texcompr || !glusetexcompr || !glusetexcache || !cacheindexptr || cachefilehandle < 0) return -1; - if (!bglCompressedTexImage2DARB || !bglGetCompressedTexImageARB) - { - // lacking the necessary extensions to do this - OSD_Printf("Warning: the GL driver lacks necessary functions to use caching\n"); - glusetexcache = 0; - return -1; - } - - md4once((uint8_t *)fn, strlen(fn), mdsum); -// for (cp = cachefn, fp = 0; (*cp = TEXCACHEFILE[fp]); cp++,fp++); -// *(cp++) = '/'; - cp = cachefn; - for (fp = 0; fp < 16; phex(mdsum[fp++], cp), cp+=2); - Bsprintf(cp, "-%x-%x%x", len, pal, effect); - -// fil = kopen4load(cachefn, 0); -// if (fil < 0) return -1; - - { - int32_t offset = 0; - int32_t len = 0; - int32_t i; - /* - texcacheindex *cacheindexptr = &firstcacheindex; - - do - { - // initprintf("checking %s against %s\n",cachefn,cacheindexptr->name); - if (!Bstrcmp(cachefn,cacheindexptr->name)) - { - offset = cacheindexptr->offset; - len = cacheindexptr->len; - // initprintf("got a match for %s offset %d\n",cachefn,offset); - break; - } - cacheindexptr = cacheindexptr->next; - } - while (cacheindexptr->next); - */ - i = hash_find(&h_texcache,cachefn); - if (i != -1) - { - texcacheindex *cacheindexptr = cacheptrs[i]; - len = cacheindexptr->len; - offset = cacheindexptr->offset; - // initprintf("got a match for %s offset %d\n",cachefn,offset); - } - if (len == 0) return -1; // didn't find it - cachepos = offset; - } - -// initprintf("Loading cached skin: %s\n", cachefn); - - if (memcachedata && memcachesize >= (signed)(cachepos + sizeof(texcacheheader))) - { - // initprintf("using memcache!\n"); - Bmemcpy(head, memcachedata + cachepos, sizeof(texcacheheader)); - cachepos += sizeof(texcacheheader); - } - else - { - Blseek(cachefilehandle, cachepos, BSEEK_SET); - if (Bread(cachefilehandle, head, sizeof(texcacheheader)) < (int32_t)sizeof(texcacheheader)) - { - cachepos += sizeof(texcacheheader); - err = 1; - goto failure; - } - cachepos += sizeof(texcacheheader); - } - - if (memcmp(head->magic, TEXCACHEMAGIC, 4)) { err=2; goto failure; } - - head->xdim = B_LITTLE32(head->xdim); - head->ydim = B_LITTLE32(head->ydim); - head->flags = B_LITTLE32(head->flags); - head->quality = B_LITTLE32(head->quality); - - if (head->quality != r_downsize) { err=3; goto failure; } - if ((head->flags & 4) && glusetexcache != 2) { err=4; goto failure; } - if (!(head->flags & 4) && glusetexcache == 2) { err=5; goto failure; } - if (gltexmaxsize && (head->xdim > (1<ydim > (1<flags & 1)) { err=7; goto failure; } - - return cachefilehandle; -failure: -// kclose(fil); - initprintf("skin cache miss: %d\n", err); - return -1; -} - -static int32_t mdloadskin_cached(int32_t fil, texcacheheader *head, int32_t *doalloc, GLuint *glpic, int32_t *xsiz, int32_t *ysiz, int32_t pal) -{ - int32_t level, r; - texcachepicture pict; - void *pic = NULL, *packbuf = NULL; - void *midbuf = NULL; - int32_t alloclen=0; - - UNREFERENCED_PARAMETER(pal); - - if (*doalloc&1) - { - bglGenTextures(1,glpic); //# of textures (make OpenGL allocate structure) - *doalloc |= 2; // prevents bglGenTextures being called again if we fail in here - } - bglBindTexture(GL_TEXTURE_2D,*glpic); - - bglGetError(); - - // load the mipmaps - for (level = 0; level==0 || (pict.xdim > 1 || pict.ydim > 1); level++) - { - Blseek(fil, cachepos, BSEEK_SET); - r = Bread(fil, &pict, sizeof(texcachepicture)); - cachepos += sizeof(texcachepicture); - if (r < (int32_t)sizeof(texcachepicture)) goto failure; - - pict.size = B_LITTLE32(pict.size); - pict.format = B_LITTLE32(pict.format); - pict.xdim = B_LITTLE32(pict.xdim); - pict.ydim = B_LITTLE32(pict.ydim); - pict.border = B_LITTLE32(pict.border); - pict.depth = B_LITTLE32(pict.depth); - - if (level == 0) { *xsiz = pict.xdim; *ysiz = pict.ydim; } - - if (alloclen < pict.size) - { - void *picc = Brealloc(pic, pict.size); - if (!picc) goto failure; else pic = picc; - alloclen = pict.size; - - picc = Brealloc(packbuf, alloclen+16); - if (!picc) goto failure; else packbuf = picc; - - picc = Brealloc(midbuf, pict.size); - if (!picc) goto failure; else midbuf = picc; - } - - if (dedxtfilter(fil, &pict, pic, midbuf, packbuf, (head->flags&4)==4)) goto failure; - - bglCompressedTexImage2DARB(GL_TEXTURE_2D,level,pict.format,pict.xdim,pict.ydim,pict.border, - pict.size,pic); - if (bglGetError() != GL_NO_ERROR) goto failure; - } - - if (midbuf) Bfree(midbuf); - if (pic) Bfree(pic); - if (packbuf) Bfree(packbuf); - return 0; -failure: - if (midbuf) Bfree(midbuf); - if (pic) Bfree(pic); - if (packbuf) Bfree(packbuf); - return -1; -} -// --------------------------------------------------- JONOF'S COMPRESSED TEXTURE CACHE STUFF - -//Note: even though it says md2model, it works for both md2model&md3model -int32_t mdloadskin(md2model_t *m, int32_t number, int32_t pal, int32_t surf) -{ - int32_t i,j, bpl, xsiz=0, ysiz=0, osizx, osizy, texfmt = GL_RGBA, intexfmt = GL_RGBA; - intptr_t fptr=0; - char *skinfile, hasalpha, fn[BMAX_PATH]; - GLuint *texidx = NULL; - mdskinmap_t *sk, *skzero = NULL; - int32_t doalloc = 1, filh; - int32_t cachefil = -1, picfillen; - texcacheheader cachead; - - int32_t startticks, willprint=0; - - modelhead=m; // for palmaps - - if (m->mdnum == 2) surf = 0; - - if ((unsigned)pal >= (unsigned)MAXPALOOKUPS) return 0; - i = -1; - for (sk = m->skinmap; sk; sk = sk->next) - { - if ((int32_t)sk->palette == pal && sk->skinnum == number && sk->surfnum == surf) - { - skinfile = sk->fn; - texidx = &sk->texid[(globalnoeffect)?0:(hictinting[pal].f&HICEFFECTMASK)]; - strncpy(fn,skinfile,BMAX_PATH); - //OSD_Printf("Using exact match skin (pal=%d,skinnum=%d,surfnum=%d) %s\n",pal,number,surf,skinfile); - break; - } - //If no match, give highest priority to number, then pal.. (Parkar's request, 02/27/2005) - else if (((int32_t)sk->palette == 0) && (sk->skinnum == number) && (sk->surfnum == surf) && (i < 5)) { i = 5; skzero = sk; } - else if (((int32_t)sk->palette == pal) && (sk->skinnum == 0) && (sk->surfnum == surf) && (i < 4)) { i = 4; skzero = sk; } - else if (((int32_t)sk->palette == 0) && (sk->skinnum == 0) && (sk->surfnum == surf) && (i < 3)) { i = 3; skzero = sk; } - else if (((int32_t)sk->palette == 0) && (sk->skinnum == number) && (i < 2)) { i = 2; skzero = sk; } - else if (((int32_t)sk->palette == pal) && (sk->skinnum == 0) && (i < 1)) { i = 1; skzero = sk; } - else if (((int32_t)sk->palette == 0) && (sk->skinnum == 0) && (i < 0)) { i = 0; skzero = sk; } - } - if (!sk) - { - if (pal >= (MAXPALOOKUPS - RESERVEDPALS)) - return (0); - if (skzero) - { - skinfile = skzero->fn; - texidx = &skzero->texid[(globalnoeffect)?0:(hictinting[pal].f&HICEFFECTMASK)]; - strncpy(fn,skinfile,BMAX_PATH); - //OSD_Printf("Using def skin 0,0 as fallback, pal=%d\n", pal); - } - else - { - if ((unsigned)number >= (unsigned)m->numskins) number = 0; - skinfile = m->skinfn + number*64; - texidx = &m->texid[ number * (HICEFFECTMASK+1) + (globalnoeffect)?0:(hictinting[pal].f&HICEFFECTMASK)]; - strncpy(fn,m->basepath,BMAX_PATH); - if ((Bstrlen(fn) + Bstrlen(skinfile)) < BMAX_PATH) - strcat(fn,skinfile); - //OSD_Printf("Using MD2/MD3 skin (%d) %s, pal=%d\n",number,skinfile,pal); - } - } - skhead=sk; // for palmaps - if (!skinfile[0]) return 0; - - if (*texidx) return *texidx; - - // possibly fetch an already loaded multitexture :_) - if (pal >= (MAXPALOOKUPS - RESERVEDPALS)) - for (i=0; iskinmap; skzero; skzero = skzero->next) - if (!Bstrcasecmp(skzero->fn, sk->fn) && skzero->texid[(globalnoeffect)?0:(hictinting[pal].f&HICEFFECTMASK)]) - { - sk->texid[(globalnoeffect)?0:(hictinting[pal].f&HICEFFECTMASK)] = skzero->texid[(globalnoeffect)?0:(hictinting[pal].f&HICEFFECTMASK)]; - return sk->texid[(globalnoeffect)?0:(hictinting[pal].f&HICEFFECTMASK)]; - } - - *texidx = 0; - - if ((filh = kopen4load(fn, 0)) < 0) - { - OSD_Printf("Skin %s not found.\n",fn); - skinfile[0] = 0; - return 0; - } - - picfillen = kfilelength(filh); - kclose(filh); // FIXME: shouldn't have to do this. bug in cache1d.c - - startticks = getticks(); - - cachefil = mdloadskin_trytexcache(fn, picfillen, pal<<8, (globalnoeffect)?0:(hictinting[pal].f&HICEFFECTMASK), &cachead); - if (cachefil >= 0 && !mdloadskin_cached(cachefil, &cachead, &doalloc, texidx, &xsiz, &ysiz, pal)) - { - osizx = cachead.xdim; - osizy = cachead.ydim; - hasalpha = (cachead.flags & 2) ? 1 : 0; - if (pal < (MAXPALOOKUPS - RESERVEDPALS))m->usesalpha = hasalpha; -// kclose(cachefil); - //kclose(filh); // FIXME: uncomment when cache1d.c is fixed - // cachefil >= 0, so it won't be rewritten - } - else - { - int32_t ret; - -// if (cachefil >= 0) kclose(cachefil); - cachefil = -1; // the compressed version will be saved to disk - - if ((filh = kopen4load(fn, 0)) < 0) return -1; - ret=daskinloader(filh,&fptr,&bpl,&xsiz,&ysiz,&osizx,&osizy,&hasalpha,pal,(globalnoeffect)?0:(hictinting[pal].f&HICEFFECTMASK)); - if (ret) - { - kclose(filh); - OSD_Printf("Failed loading skin file \"%s\": error %d\n", fn, ret); - if (ret==-1) - QuitOnFatalError("OUT OF MEMORY in daskinloader!"); - - skinfile[0] = 0; - return(0); - } - else kclose(filh); - - willprint = 1; - - if (pal < (MAXPALOOKUPS - RESERVEDPALS)) m->usesalpha = hasalpha; - if ((doalloc&3)==1) bglGenTextures(1,(GLuint *)texidx); - bglBindTexture(GL_TEXTURE_2D,*texidx); - - //gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGBA,xsiz,ysiz,GL_BGRA_EXT,GL_UNSIGNED_BYTE,(char *)fptr); - if (glinfo.texcompr && glusetexcompr) intexfmt = hasalpha ? GL_COMPRESSED_RGBA_ARB : GL_COMPRESSED_RGB_ARB; - else if (!hasalpha) intexfmt = GL_RGB; - if (glinfo.bgra) texfmt = GL_BGRA; - uploadtexture((doalloc&1), xsiz, ysiz, intexfmt, texfmt, (coltype *)fptr, xsiz, ysiz, 0|8192); - Bfree((void *)fptr); - } - - if (!m->skinloaded) - { - if (xsiz != osizx || ysiz != osizy) - { - float fx, fy; - fx = ((float)osizx)/((float)xsiz); - fy = ((float)osizy)/((float)ysiz); - if (m->mdnum == 2) - { - int32_t *lptr; - for (lptr=m->glcmds; (i=*lptr++);) - for (i=labs(i); i>0; i--,lptr+=3) - { - ((float *)lptr)[0] *= fx; - ((float *)lptr)[1] *= fy; - } - } - else if (m->mdnum == 3) - { - md3model_t *m3 = (md3model_t *)m; - md3surf_t *s; - int32_t surfi; - for (surfi=0; surfihead.numsurfs; surfi++) - { - s = &m3->head.surfs[surfi]; - for (i=s->numverts-1; i>=0; i--) - { - s->uv[i].u *= fx; - s->uv[i].v *= fy; - } - } - } - } - m->skinloaded = 1+number; - } - - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,glfiltermodes[gltexfiltermode].mag); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,glfiltermodes[gltexfiltermode].min); - if (glinfo.maxanisotropy > 1.0) - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_ANISOTROPY_EXT,glanisotropy); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); - - if (glinfo.texcompr && glusetexcompr && glusetexcache) - if (cachefil < 0) - { - // save off the compressed version - cachead.quality = r_downsize; - cachead.xdim = osizx>>cachead.quality; - cachead.ydim = osizy>>cachead.quality; - - i = 0; - for (j=0; j<31; j++) - { - if (xsiz == pow2long[j]) { i |= 1; } - if (ysiz == pow2long[j]) { i |= 2; } - } - cachead.flags = (i!=3) | (hasalpha ? 2 : 0); -/// OSD_Printf("Caching \"%s\"\n",fn); - writexcache(fn, picfillen, pal<<8, (globalnoeffect)?0:(hictinting[pal].f&HICEFFECTMASK), &cachead); - - if (willprint) - { - int32_t etime = getticks()-startticks; - if (etime>=MIN_CACHETIME_PRINT) - OSD_Printf("Load skin: p%d-e%d \"%s\"... cached... %d ms\n", pal, (globalnoeffect)?0:(hictinting[pal].f&HICEFFECTMASK), fn, etime); - willprint = 0; - } - else - OSD_Printf("Cached skin \"%s\"\n", fn); - } - - if (willprint) - { - int32_t etime = getticks()-startticks; - if (etime>=MIN_CACHETIME_PRINT) - OSD_Printf("Load skin: p%d-e%d \"%s\"... %d ms\n", pal, (globalnoeffect)?0:(hictinting[pal].f&HICEFFECTMASK), fn, etime); - } - - return(*texidx); -} - -//Note: even though it says md2model, it works for both md2model&md3model -void updateanimation(md2model_t *m, spritetype *tspr) -{ - mdanim_t *anim; - int32_t i, j, k; - int32_t fps; - char lpal = (tspr->owner >= MAXSPRITES) ? tspr->pal : sprite[tspr->owner].pal; - - if (m->numframes < 2) - { - m->interpol = 0; - return; - } - - m->cframe = m->nframe = tile2model[Ptile2tile(tspr->picnum,lpal)].framenum; - - for (anim = m->animations; - anim && anim->startframe != m->cframe; - anim = anim->next) ; - if (!anim) - { - if (r_animsmoothing && (tile2model[Ptile2tile(tspr->picnum,lpal)].smoothduration != 0) && (spritesmooth[tspr->owner].mdoldframe != m->cframe)) - { - if (spritesmooth[tspr->owner].mdsmooth == 0) - { - spriteext[tspr->owner].mdanimtims = mdtims; - m->interpol = 0; - spritesmooth[tspr->owner].mdsmooth = 1; - spritesmooth[tspr->owner].mdcurframe = m->cframe; - } - if (r_animsmoothing && (tile2model[Ptile2tile(tspr->picnum,lpal)].smoothduration != 0) && (spritesmooth[tspr->owner].mdcurframe != m->cframe)) - { - spriteext[tspr->owner].mdanimtims = mdtims; - m->interpol = 0; - spritesmooth[tspr->owner].mdsmooth = 1; - spritesmooth[tspr->owner].mdoldframe = spritesmooth[tspr->owner].mdcurframe; - spritesmooth[tspr->owner].mdcurframe = m->cframe; - } - } - else if (r_animsmoothing && (tile2model[Ptile2tile(tspr->picnum,lpal)].smoothduration != 0) && (spritesmooth[tspr->owner].mdcurframe != m->cframe)) - { - spriteext[tspr->owner].mdanimtims = mdtims; - m->interpol = 0; - spritesmooth[tspr->owner].mdsmooth = 1; - spritesmooth[tspr->owner].mdoldframe = spritesmooth[tspr->owner].mdcurframe; - spritesmooth[tspr->owner].mdcurframe = m->cframe; - } - else - { - m->interpol = 0; - return; - } - } - - if (anim && (((int32_t)spriteext[tspr->owner].mdanimcur) != anim->startframe)) - { - //if (spriteext[tspr->owner].flags & SPREXT_NOMDANIM) OSD_Printf("SPREXT_NOMDANIM\n"); - //OSD_Printf("smooth launched ! oldanim %i new anim %i\n", spriteext[tspr->owner].mdanimcur, anim->startframe); - spriteext[tspr->owner].mdanimcur = (int16_t)anim->startframe; - spriteext[tspr->owner].mdanimtims = mdtims; - m->interpol = 0; - if (!r_animsmoothing || (tile2model[Ptile2tile(tspr->picnum,lpal)].smoothduration == 0)) - { - m->cframe = m->nframe = anim->startframe; - return; - } - m->nframe = anim->startframe; - m->cframe = spritesmooth[tspr->owner].mdoldframe; - spritesmooth[tspr->owner].mdsmooth = 1; - return; - } - - if (spritesmooth[tspr->owner].mdsmooth) - ftol((1.0f / (float)(tile2model[Ptile2tile(tspr->picnum,lpal)].smoothduration)) * 66.f, &fps); - else - fps = anim->fpssc; - - i = (mdtims-spriteext[tspr->owner].mdanimtims)*((fps*timerticspersec)/120); - - if (spritesmooth[tspr->owner].mdsmooth) - j = 65536; - else - j = ((anim->endframe+1-anim->startframe)<<16); - //Just in case you play the game for a VERY int32_t time... - if (i < 0) { i = 0; spriteext[tspr->owner].mdanimtims = mdtims; } - //compare with j*2 instead of j to ensure i stays > j-65536 for MDANIM_ONESHOT - if ((anim) && (i >= j+j) && (fps) && !mdpause) //Keep mdanimtims close to mdtims to avoid the use of MOD - spriteext[tspr->owner].mdanimtims += j/((fps*timerticspersec)/120); - - k = i; - - if (anim && (anim->flags&MDANIM_ONESHOT)) - { if (i > j-65536) i = j-65536; } - else { if (i >= j) { i -= j; if (i >= j) i %= j; } } - - if (r_animsmoothing && spritesmooth[tspr->owner].mdsmooth) - { - m->nframe = (anim) ? anim->startframe : spritesmooth[tspr->owner].mdcurframe; - m->cframe = spritesmooth[tspr->owner].mdoldframe; - //OSD_Printf("smoothing... cframe %i nframe %i\n", m->cframe, m->nframe); - if (k > 65535) - { - spriteext[tspr->owner].mdanimtims = mdtims; - m->interpol = 0; - spritesmooth[tspr->owner].mdsmooth = 0; - m->cframe = m->nframe = (anim) ? anim->startframe : spritesmooth[tspr->owner].mdcurframe; - spritesmooth[tspr->owner].mdoldframe = m->cframe; - //OSD_Printf("smooth stopped !\n"); - return; - } - } - else - { - m->cframe = (i>>16)+anim->startframe; - m->nframe = m->cframe+1; if (m->nframe > anim->endframe) m->nframe = anim->startframe; - spritesmooth[tspr->owner].mdoldframe = m->cframe; - //OSD_Printf("not smoothing... cframe %i nframe %i\n", m->cframe, m->nframe); - } - m->interpol = ((float)(i&65535))/65536.f; - //OSD_Printf("interpol %f\n", m->interpol); -} - -// VBO generation and allocation -static void mdloadvbos(md3model_t *m) -{ - int32_t i; - - m->vbos = Bmalloc(m->head.numsurfs * sizeof(GLuint)); - bglGenBuffersARB(m->head.numsurfs, m->vbos); - - i = 0; - while (i < m->head.numsurfs) - { - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, m->vbos[i]); - bglBufferDataARB(GL_ARRAY_BUFFER_ARB, m->head.surfs[i].numverts * sizeof(md3uv_t), m->head.surfs[i].uv, GL_STATIC_DRAW_ARB); - i++; - } - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); -} - -//--------------------------------------- MD2 LIBRARY BEGINS --------------------------------------- -static md2model_t *md2load(int32_t fil, const char *filnam) -{ - md2model_t *m; - md3model_t *m3; - md3surf_t *s; - md2frame_t *f; - md2head_t head; - char st[BMAX_PATH]; - int32_t i, j, k; - - m = (md2model_t *)Bcalloc(1,sizeof(md2model_t)); if (!m) return(0); - m->mdnum = 2; m->scale = .01f; - - kread(fil,(char *)&head,sizeof(md2head_t)); - head.id = B_LITTLE32(head.id); head.vers = B_LITTLE32(head.vers); - head.skinxsiz = B_LITTLE32(head.skinxsiz); head.skinysiz = B_LITTLE32(head.skinysiz); - head.framebytes = B_LITTLE32(head.framebytes); head.numskins = B_LITTLE32(head.numskins); - head.numverts = B_LITTLE32(head.numverts); head.numuv = B_LITTLE32(head.numuv); - head.numtris = B_LITTLE32(head.numtris); head.numglcmds = B_LITTLE32(head.numglcmds); - head.numframes = B_LITTLE32(head.numframes); head.ofsskins = B_LITTLE32(head.ofsskins); - head.ofsuv = B_LITTLE32(head.ofsuv); head.ofstris = B_LITTLE32(head.ofstris); - head.ofsframes = B_LITTLE32(head.ofsframes); head.ofsglcmds = B_LITTLE32(head.ofsglcmds); - head.ofseof = B_LITTLE32(head.ofseof); - - if ((head.id != 0x32504449) || (head.vers != 8)) { Bfree(m); return(0); } //"IDP2" - - m->numskins = head.numskins; - m->numframes = head.numframes; - m->numverts = head.numverts; - m->numglcmds = head.numglcmds; - m->framebytes = head.framebytes; - - m->frames = (char *)Bmalloc(m->numframes*m->framebytes); if (!m->frames) { Bfree(m); return(0); } - m->glcmds = (int32_t *)Bmalloc(m->numglcmds*sizeof(int32_t)); if (!m->glcmds) { Bfree(m->frames); Bfree(m); return(0); } - m->tris = (md2tri_t *)Bmalloc(head.numtris*sizeof(md2tri_t)); if (!m->tris) { Bfree(m->glcmds); Bfree(m->frames); Bfree(m); return(0); } - m->uv = (md2uv_t *)Bmalloc(head.numuv*sizeof(md2uv_t)); if (!m->uv) { Bfree(m->tris); Bfree(m->glcmds); Bfree(m->frames); Bfree(m); return(0); } - - klseek(fil,head.ofsframes,SEEK_SET); - if (kread(fil,(char *)m->frames,m->numframes*m->framebytes) != m->numframes*m->framebytes) - { Bfree(m->uv); Bfree(m->tris); Bfree(m->glcmds); Bfree(m->frames); Bfree(m); return(0); } - - klseek(fil,head.ofsglcmds,SEEK_SET); - if (kread(fil,(char *)m->glcmds,m->numglcmds*sizeof(int32_t)) != (int32_t)(m->numglcmds*sizeof(int32_t))) - { Bfree(m->uv); Bfree(m->tris); Bfree(m->glcmds); Bfree(m->frames); Bfree(m); return(0); } - - klseek(fil,head.ofstris,SEEK_SET); - if (kread(fil,(char *)m->tris,head.numtris*sizeof(md2tri_t)) != (int32_t)(head.numtris*sizeof(md2tri_t))) - { Bfree(m->uv); Bfree(m->tris); Bfree(m->glcmds); Bfree(m->frames); Bfree(m); return(0); } - - klseek(fil,head.ofsuv,SEEK_SET); - if (kread(fil,(char *)m->uv,head.numuv*sizeof(md2uv_t)) != (int32_t)(head.numuv*sizeof(md2uv_t))) - { Bfree(m->uv); Bfree(m->tris); Bfree(m->glcmds); Bfree(m->frames); Bfree(m); return(0); } - -#if B_BIG_ENDIAN != 0 - { - char *f = (char *)m->frames; - int32_t *l,j; - md2frame_t *fr; - - for (i = m->numframes-1; i>=0; i--) - { - fr = (md2frame_t *)f; - l = (int32_t *)&fr->mul; - for (j=5; j>=0; j--) l[j] = B_LITTLE32(l[j]); - f += m->framebytes; - } - - for (i = m->numglcmds-1; i>=0; i--) - { - m->glcmds[i] = B_LITTLE32(m->glcmds[i]); - } - for (i = head.numtris-1; i>=0; i--) - { - m->tris[i].v[0] = B_LITTLE16(m->tris[i].v[0]); - m->tris[i].v[1] = B_LITTLE16(m->tris[i].v[1]); - m->tris[i].v[2] = B_LITTLE16(m->tris[i].v[2]); - m->tris[i].u[0] = B_LITTLE16(m->tris[i].u[0]); - m->tris[i].u[1] = B_LITTLE16(m->tris[i].u[1]); - m->tris[i].u[2] = B_LITTLE16(m->tris[i].u[2]); - } - for (i = head.numuv-1; i>=0; i--) - { - m->uv[i].u = B_LITTLE16(m->uv[i].u); - m->uv[i].v = B_LITTLE16(m->uv[i].v); - } - } -#endif - - strcpy(st,filnam); - for (i=strlen(st)-1; i>0; i--) - if ((st[i] == '/') || (st[i] == '\\')) { i++; break; } - if (i<0) i=0; - st[i] = 0; - m->basepath = (char *)Bmalloc(i+1); if (!m->basepath) { Bfree(m->uv); Bfree(m->tris); Bfree(m->glcmds); Bfree(m->frames); Bfree(m); return(0); } - strcpy(m->basepath, st); - - m->skinfn = (char *)Bmalloc(m->numskins*64); if (!m->skinfn) { Bfree(m->basepath); Bfree(m->uv); Bfree(m->tris); Bfree(m->glcmds); Bfree(m->frames); Bfree(m); return(0); } - klseek(fil,head.ofsskins,SEEK_SET); - if (kread(fil,m->skinfn,64*m->numskins) != 64*m->numskins) - { Bfree(m->glcmds); Bfree(m->frames); Bfree(m); return(0); } - - m->texid = (GLuint *)Bcalloc(m->numskins, sizeof(GLuint) * (HICEFFECTMASK+1)); - if (!m->texid) { Bfree(m->skinfn); Bfree(m->basepath); Bfree(m->uv); Bfree(m->tris); Bfree(m->glcmds); Bfree(m->frames); Bfree(m); return(0); } - - maxmodelverts = max(maxmodelverts, m->numverts); - maxmodeltris = max(maxmodeltris, head.numtris); - - //return(m); - - // the MD2 is now loaded internally - let's begin the MD3 conversion process - //OSD_Printf("Beginning md3 conversion.\n"); - m3 = (md3model_t *)Bcalloc(1, sizeof(md3model_t)); if (!m3) { Bfree(m->skinfn); Bfree(m->basepath); Bfree(m->uv); Bfree(m->tris); Bfree(m->glcmds); Bfree(m->frames); Bfree(m); return(0); } - m3->mdnum = 3; m3->texid = 0; m3->scale = m->scale; - m3->head.id = 0x33504449; m3->head.vers = 15; - // this changes the conversion code to do real MD2->MD3 conversion - // it breaks HRP MD2 oozfilter, change the flags to 1337 to revert - // to the old, working code - m3->head.flags = 0; - m3->head.numframes = m->numframes; - m3->head.numtags = 0; m3->head.numsurfs = 1; - m3->head.numskins = 0; - - m3->numskins = m3->head.numskins; - m3->numframes = m3->head.numframes; - - m3->head.frames = (md3frame_t *)Bcalloc(m3->head.numframes, sizeof(md3frame_t)); if (!m3->head.frames) { Bfree(m3); Bfree(m->skinfn); Bfree(m->basepath); Bfree(m->uv); Bfree(m->tris); Bfree(m->glcmds); Bfree(m->frames); Bfree(m); return(0); } - m3->muladdframes = (point3d *)Bcalloc(m->numframes * 2, sizeof(point3d)); - - f = (md2frame_t *)(m->frames); - - // frames converting - i = 0; - while (i < m->numframes) - { - f = (md2frame_t *)&m->frames[i*m->framebytes]; - strcpy(m3->head.frames[i].nam, f->name); - //OSD_Printf("Copied frame %s.\n", m3->head.frames[i].nam); - m3->muladdframes[i*2] = f->mul; - m3->muladdframes[i*2+1] = f->add; - i++; - } - - m3->head.tags = NULL; - - m3->head.surfs = (md3surf_t *)Bcalloc(1, sizeof(md3surf_t)); if (!m3->head.surfs) { Bfree(m3->head.frames); Bfree(m3); Bfree(m->skinfn); Bfree(m->basepath); Bfree(m->uv); Bfree(m->tris); Bfree(m->glcmds); Bfree(m->frames); Bfree(m); return(0); } - s = m3->head.surfs; - - // model converting - s->id = 0x33504449; s->flags = 0; - s->numframes = m->numframes; s->numshaders = 0; - s->numtris = head.numtris; - s->numverts = head.numtris * 3; // oh man talk about memory effectiveness :(((( - // MD2 is actually more accurate than MD3 in term of uv-mapping, because each triangle has a triangle counterpart on the UV-map. - // In MD3, each vertex unique UV coordinates, meaning that you have to duplicate vertices if you need non-seamless UV-mapping. - - maxmodelverts = max(maxmodelverts, s->numverts); - - strcpy(s->nam, "Dummy surface from MD2"); - - s->shaders = NULL; - - s->tris = (md3tri_t *)Bcalloc(head.numtris, sizeof(md3tri_t)); if (!s->tris) { Bfree(s); Bfree(m3->head.frames); Bfree(m3); Bfree(m->skinfn); Bfree(m->basepath); Bfree(m->uv); Bfree(m->tris); Bfree(m->glcmds); Bfree(m->frames); Bfree(m); return(0); } - s->uv = (md3uv_t *)Bcalloc(s->numverts, sizeof(md3uv_t)); if (!s->uv) { Bfree(s->tris); Bfree(s); Bfree(m3->head.frames); Bfree(m3); Bfree(m->skinfn); Bfree(m->basepath); Bfree(m->uv); Bfree(m->tris); Bfree(m->glcmds); Bfree(m->frames); Bfree(m); return(0); } - s->xyzn = (md3xyzn_t *)Bcalloc(s->numverts * m->numframes, sizeof(md3xyzn_t)); if (!s->xyzn) { Bfree(s->uv); Bfree(s->tris); Bfree(s); Bfree(m3->head.frames); Bfree(m3); Bfree(m->skinfn); Bfree(m->basepath); Bfree(m->uv); Bfree(m->tris); Bfree(m->glcmds); Bfree(m->frames); Bfree(m); return(0); } - - //memoryusage += (s->numverts * m->numframes * sizeof(md3xyzn_t)); - //OSD_Printf("Current model geometry memory usage : %i.\n", memoryusage); - - //OSD_Printf("Number of frames : %i\n", m->numframes); - //OSD_Printf("Number of triangles : %i\n", head.numtris); - //OSD_Printf("Number of vertices : %i\n", s->numverts); - - // triangle converting - i = 0; - while (i < head.numtris) - { - j = 0; - //OSD_Printf("Triangle : %i\n", i); - while (j < 3) - { - // triangle vertex indexes - s->tris[i].i[j] = i*3 + j; - - // uv coords - s->uv[i*3+j].u = (float)(m->uv[m->tris[i].u[j]].u) / (float)(head.skinxsiz); - s->uv[i*3+j].v = (float)(m->uv[m->tris[i].u[j]].v) / (float)(head.skinysiz); - - // vertices for each frame - k = 0; - while (k < m->numframes) - { - f = (md2frame_t *)&m->frames[k*m->framebytes]; - if (m3->head.flags == 1337) - { - s->xyzn[(k*s->numverts) + (i*3) + j].x = f->verts[m->tris[i].v[j]].v[0]; - s->xyzn[(k*s->numverts) + (i*3) + j].y = f->verts[m->tris[i].v[j]].v[1]; - s->xyzn[(k*s->numverts) + (i*3) + j].z = f->verts[m->tris[i].v[j]].v[2]; - } - else - { - s->xyzn[(k*s->numverts) + (i*3) + j].x = (int16_t)(((f->verts[m->tris[i].v[j]].v[0] * f->mul.x) + f->add.x) * 64.f); - s->xyzn[(k*s->numverts) + (i*3) + j].y = (int16_t)(((f->verts[m->tris[i].v[j]].v[1] * f->mul.y) + f->add.y) * 64.f); - s->xyzn[(k*s->numverts) + (i*3) + j].z = (int16_t)(((f->verts[m->tris[i].v[j]].v[2] * f->mul.z) + f->add.z) * 64.f); - } - - k++; - } - j++; - } - //OSD_Printf("End triangle.\n"); - i++; - } - //OSD_Printf("Finished md3 conversion.\n"); - - { - mdskinmap_t *sk; - - sk = (mdskinmap_t *)Bcalloc(1,sizeof(mdskinmap_t)); - sk->palette = 0; - sk->skinnum = 0; - sk->surfnum = 0; - - if (m->numskins > 0) - { - sk->fn = (char *)Bmalloc(strlen(m->basepath)+strlen(m->skinfn)+1); - strcpy(sk->fn, m->basepath); - strcat(sk->fn, m->skinfn); - } - m3->skinmap = sk; - } - - m3->indexes = Bmalloc(sizeof(uint16_t) * s->numtris); - m3->vindexes = Bmalloc(sizeof(uint16_t) * s->numtris * 3); - m3->maxdepths = Bmalloc(sizeof(float) * s->numtris); - - if (!m3->indexes || !m3->vindexes || !m3->maxdepths) - QuitOnFatalError("OUT OF MEMORY in md2load!"); - - m3->vbos = NULL; - - // die MD2 ! DIE ! - Bfree(m->texid); Bfree(m->skinfn); Bfree(m->basepath); Bfree(m->uv); Bfree(m->tris); Bfree(m->glcmds); Bfree(m->frames); Bfree(m); - - return((md2model_t *)m3); -} -//---------------------------------------- MD2 LIBRARY ENDS ---------------------------------------- - -// DICHOTOMIC RECURSIVE SORTING - USED BY MD3DRAW - MAY PUT IT IN ITS OWN SOURCE FILE LATER -int32_t partition(uint16_t *indexes, float *depths, int32_t f, int32_t l) -{ - int32_t up,down; - float tempf; - uint16_t tempus; - float piv = depths[f]; - uint16_t piv2 = indexes[f]; - up = f; - down = l; - do - { - while ((depths[up] <= piv) && (up < l)) - up++; - while ((depths[down] > piv) && (down > f)) - down--; - if (up < down) - { - tempf = depths[up]; - depths[up] = depths[down]; - depths[down] = tempf; - tempus = indexes[up]; - indexes[up] = indexes[down]; - indexes[down] = tempus; - } - } - while (down > up); - depths[f] = depths[down]; - depths[down] = piv; - indexes[f] = indexes[down]; - indexes[down] = piv2; - return down; -} - -void quicksort(uint16_t *indexes, float *depths, int32_t first, int32_t last) -{ - int32_t pivIndex = 0; - if (first < last) - { - pivIndex = partition(indexes,depths,first, last); - quicksort(indexes,depths,first,(pivIndex-1)); - quicksort(indexes,depths,(pivIndex+1),last); - } -} -// END OF QUICKSORT LIB - -//--------------------------------------- MD3 LIBRARY BEGINS --------------------------------------- - -static md3model_t *md3load(int32_t fil) -{ - int32_t i, surfi, ofsurf, offs[4], leng[4]; - int32_t maxtrispersurf; - md3model_t *m; - md3surf_t *s; - - m = (md3model_t *)Bcalloc(1,sizeof(md3model_t)); if (!m) return(0); - m->mdnum = 3; m->texid = 0; m->scale = .01f; - - m->muladdframes = NULL; - - kread(fil,&m->head,SIZEOF_MD3HEAD_T); - m->head.id = B_LITTLE32(m->head.id); m->head.vers = B_LITTLE32(m->head.vers); - m->head.flags = B_LITTLE32(m->head.flags); m->head.numframes = B_LITTLE32(m->head.numframes); - m->head.numtags = B_LITTLE32(m->head.numtags); m->head.numsurfs = B_LITTLE32(m->head.numsurfs); - m->head.numskins = B_LITTLE32(m->head.numskins); m->head.ofsframes = B_LITTLE32(m->head.ofsframes); - m->head.ofstags = B_LITTLE32(m->head.ofstags); m->head.ofssurfs = B_LITTLE32(m->head.ofssurfs); - m->head.eof = B_LITTLE32(m->head.eof); - - if ((m->head.id != 0x33504449) && (m->head.vers != 15)) { Bfree(m); return(0); } //"IDP3" - - m->numskins = m->head.numskins; //<- dead code? - m->numframes = m->head.numframes; - - ofsurf = m->head.ofssurfs; - - klseek(fil,m->head.ofsframes,SEEK_SET); i = m->head.numframes*sizeof(md3frame_t); - m->head.frames = (md3frame_t *)Bmalloc(i); if (!m->head.frames) { Bfree(m); return(0); } - kread(fil,m->head.frames,i); - - if (m->head.numtags == 0) m->head.tags = NULL; - else - { - klseek(fil,m->head.ofstags,SEEK_SET); i = m->head.numtags*sizeof(md3tag_t); - m->head.tags = (md3tag_t *)Bmalloc(i); if (!m->head.tags) { Bfree(m->head.frames); Bfree(m); return(0); } - kread(fil,m->head.tags,i); - } - - klseek(fil,m->head.ofssurfs,SEEK_SET); i = m->head.numsurfs*sizeof(md3surf_t); - m->head.surfs = (md3surf_t *)Bmalloc(i); if (!m->head.surfs) { if (m->head.tags) Bfree(m->head.tags); Bfree(m->head.frames); Bfree(m); return(0); } - m->head.surfs[0].geometry = NULL; // for deferred polymer model postprocessing (else: crashes) - -#if B_BIG_ENDIAN != 0 - { - int32_t *l; - - for (i = m->head.numframes-1; i>=0; i--) - { - l = (int32_t *)&m->head.frames[i].min; - for (j=3+3+3+1-1; j>=0; j--) l[j] = B_LITTLE32(l[j]); - } - - for (i = m->head.numtags-1; i>=0; i--) - { - l = (int32_t *)&m->head.tags[i].p; - for (j=3+3+3+3-1; j>=0; j--) l[j] = B_LITTLE32(l[j]); - } - } -#endif - - maxtrispersurf = 0; - - for (surfi=0; surfihead.numsurfs; surfi++) - { - s = &m->head.surfs[surfi]; - klseek(fil,ofsurf,SEEK_SET); kread(fil,s,SIZEOF_MD3SURF_T); - -#if B_BIG_ENDIAN != 0 - { - int32_t *l; - s->id = B_LITTLE32(s->id); - l = (int32_t *)&s->flags; - for (j=1+1+1+1+1+1+1+1+1+1-1; j>=0; j--) l[j] = B_LITTLE32(l[j]); - } -#endif - - offs[0] = ofsurf+s->ofstris; leng[0] = s->numtris*sizeof(md3tri_t); - offs[1] = ofsurf+s->ofsshaders; leng[1] = s->numshaders*sizeof(md3shader_t); - offs[2] = ofsurf+s->ofsuv; leng[2] = s->numverts*sizeof(md3uv_t); - offs[3] = ofsurf+s->ofsxyzn; leng[3] = s->numframes*s->numverts*sizeof(md3xyzn_t); - //memoryusage += (s->numverts * s->numframes * sizeof(md3xyzn_t)); - //OSD_Printf("Current model geometry memory usage : %i.\n", memoryusage); - - - s->tris = (md3tri_t *)Bmalloc(leng[0]+leng[1]+leng[2]+leng[3]); - if (!s->tris) - { - for (surfi--; surfi>=0; surfi--) Bfree(m->head.surfs[surfi].tris); - if (m->head.tags) Bfree(m->head.tags); Bfree(m->head.frames); Bfree(m); return(0); - } - s->shaders = (md3shader_t *)(((intptr_t)s->tris)+leng[0]); - s->uv = (md3uv_t *)(((intptr_t)s->shaders)+leng[1]); - s->xyzn = (md3xyzn_t *)(((intptr_t)s->uv)+leng[2]); - - klseek(fil,offs[0],SEEK_SET); kread(fil,s->tris ,leng[0]); - klseek(fil,offs[1],SEEK_SET); kread(fil,s->shaders,leng[1]); - klseek(fil,offs[2],SEEK_SET); kread(fil,s->uv ,leng[2]); - klseek(fil,offs[3],SEEK_SET); kread(fil,s->xyzn ,leng[3]); - -#if B_BIG_ENDIAN != 0 - { - int32_t *l; - - for (i=s->numtris-1; i>=0; i--) - { - for (j=2; j>=0; j--) s->tris[i].i[j] = B_LITTLE32(s->tris[i].i[j]); - } - for (i=s->numshaders-1; i>=0; i--) - { - s->shaders[i].i = B_LITTLE32(s->shaders[i].i); - } - for (i=s->numverts-1; i>=0; i--) - { - l = (int32_t *)&s->uv[i].u; - l[0] = B_LITTLE32(l[0]); - l[1] = B_LITTLE32(l[1]); - } - for (i=s->numframes*s->numverts-1; i>=0; i--) - { - s->xyzn[i].x = (int16_t)B_LITTLE16((uint16_t)s->xyzn[i].x); - s->xyzn[i].y = (int16_t)B_LITTLE16((uint16_t)s->xyzn[i].y); - s->xyzn[i].z = (int16_t)B_LITTLE16((uint16_t)s->xyzn[i].z); - } - } -#endif - maxmodelverts = max(maxmodelverts, s->numverts); - maxmodeltris = max(maxmodeltris, s->numtris); - maxtrispersurf = max(maxtrispersurf, s->numtris); - ofsurf += s->ofsend; - } - -#if 0 - { - char *buf, st[BMAX_PATH+2], bst[BMAX_PATH+2]; - int32_t j, bsc; - - strcpy(st,filnam); - for (i=0,j=0; st[i]; i++) if ((st[i] == '/') || (st[i] == '\\')) j = i+1; - st[j] = '*'; st[j+1] = 0; - kzfindfilestart(st); bsc = -1; - while (kzfindfile(st)) - { - if (st[0] == '\\') continue; - - for (i=0,j=0; st[i]; i++) if (st[i] == '.') j = i+1; - if ((!stricmp(&st[j],"JPG")) || (!stricmp(&st[j],"PNG")) || (!stricmp(&st[j],"GIF")) || - (!stricmp(&st[j],"PCX")) || (!stricmp(&st[j],"TGA")) || (!stricmp(&st[j],"BMP")) || - (!stricmp(&st[j],"CEL"))) - { - for (i=0; st[i]; i++) if (st[i] != filnam[i]) break; - if (i > bsc) { bsc = i; strcpy(bst,st); } - } - } - if (!mdloadskin(&m->texid,&m->usesalpha,bst)) ;//bad! - } -#endif - - m->indexes = Bmalloc(sizeof(uint16_t) * maxtrispersurf); - m->vindexes = Bmalloc(sizeof(uint16_t) * maxtrispersurf * 3); - m->maxdepths = Bmalloc(sizeof(float) * maxtrispersurf); - - if (!m->indexes || !m->vindexes || !m->maxdepths) - QuitOnFatalError("OUT OF MEMORY in md3load!"); - - m->vbos = NULL; - - return(m); -} - -static inline void invertmatrix(float *m, float *out) -{ - float det; - - det = m[0] * (m[4]*m[8] - m[5] * m[7]); - det -= m[1] * (m[3]*m[8] - m[5] * m[6]); - det += m[2] * (m[3]*m[7] - m[4] * m[6]); - - det = 1.0f / det; - - out[0] = det * (m[4] * m[8] - m[5] * m[7]); - out[3] = det * (m[5] * m[6] - m[3] * m[8]); - out[6] = det * (m[3] * m[7] - m[1] * m[6]); - - out[1] = det * (m[2] * m[7] - m[1] * m[8]); - out[4] = det * (m[0] * m[8] - m[2] * m[6]); - out[7] = det * (m[1] * m[6] - m[0] * m[7]); - - out[2] = det * (m[1] * m[5] - m[2] * m[4]); - out[5] = det * (m[2] * m[3] - m[0] * m[5]); - out[8] = det * (m[0] * m[4] - m[1] * m[3]); -} - -static inline void normalize(float *vec) -{ - double norm; - - norm = vec[0] * vec[0] + vec[1] * vec[1] + vec[2] * vec[2]; - - norm = sqrt(norm); - norm = 1.0 / norm; - vec[0] *= norm; - vec[1] *= norm; - vec[2] *= norm; -} - -static void md3postload_common(md3model_t *m) -{ - int framei, surfi, verti; - md3frame_t *frame; - md3xyzn_t *frameverts; - float dist, vec1[5]; - - // apparently we can't trust loaded models bounding box/sphere information, - // so let's compute it ourselves - - framei = 0; - - while (framei < m->head.numframes) - { - frame = &m->head.frames[framei]; - - frame->min.x = 0.0f; - frame->min.y = 0.0f; - frame->min.z = 0.0f; - - frame->max.x = 0.0f; - frame->max.y = 0.0f; - frame->max.z = 0.0f; - - frame->r = 0.0f; - - surfi = 0; - while (surfi < m->head.numsurfs) - { - frameverts = &m->head.surfs[surfi].xyzn[framei * m->head.surfs[surfi].numverts]; - - verti = 0; - while (verti < m->head.surfs[surfi].numverts) - { - if (!verti && !surfi) - { - frame->min.x = frameverts[verti].x; - frame->min.y = frameverts[verti].y; - frame->min.z = frameverts[verti].z; - - frame->max.x = frameverts[verti].x; - frame->max.y = frameverts[verti].y; - frame->max.z = frameverts[verti].z; - } - else - { - if (frame->min.x > frameverts[verti].x) - frame->min.x = frameverts[verti].x; - if (frame->max.x < frameverts[verti].x) - frame->max.x = frameverts[verti].x; - - if (frame->min.y > frameverts[verti].y) - frame->min.y = frameverts[verti].y; - if (frame->max.y < frameverts[verti].y) - frame->max.y = frameverts[verti].y; - - if (frame->min.z > frameverts[verti].z) - frame->min.z = frameverts[verti].z; - if (frame->max.z < frameverts[verti].z) - frame->max.z = frameverts[verti].z; - } - - verti++; - } - surfi++; - } - - frame->cen.x = (frame->min.x + frame->max.x) / 2.0f; - frame->cen.y = (frame->min.y + frame->max.y) / 2.0f; - frame->cen.z = (frame->min.z + frame->max.z) / 2.0f; - - surfi = 0; - while (surfi < m->head.numsurfs) - { - frameverts = &m->head.surfs[surfi].xyzn[framei * m->head.surfs[surfi].numverts]; - - verti = 0; - while (verti < m->head.surfs[surfi].numverts) - { - vec1[0] = frameverts[verti].x - frame->cen.x; - vec1[1] = frameverts[verti].y - frame->cen.y; - vec1[2] = frameverts[verti].z - frame->cen.z; - - dist = vec1[0] * vec1[0] + vec1[1] * vec1[1] + vec1[2] * vec1[2]; - - if (dist > frame->r) - frame->r = dist; - - verti++; - } - surfi++; - } - - frame->r = sqrt(frame->r); - - framei++; - } -} - -#ifdef POLYMER -// pre-check success of conversion since it must not fail later. -// keep in sync with md3postload_polymer! -static int md3postload_polymer_check(md3model_t *m) -{ - int surfi, trii; - md3surf_t *s; - - surfi = 0; - while (surfi < m->head.numsurfs) - { - s = &m->head.surfs[surfi]; - - trii = 0; - while (trii < s->numtris) - { - // let the vertices know they're being referenced by a triangle - if (s->tris[trii].i[0] >= s->numverts || s->tris[trii].i[0] < 0 || - s->tris[trii].i[1] >= s->numverts || s->tris[trii].i[1] < 0 || - s->tris[trii].i[2] >= s->numverts || s->tris[trii].i[2] < 0) - { - // corrupt model - OSD_Printf("Triangle index out of bounds!\n"); - return 0; - } - - trii++; - } - - surfi++; - } - - return 1; -} -#endif - -int md3postload_polymer(md3model_t *m) -{ -#ifdef POLYMER - int framei, surfi, verti, trii, i; - md3surf_t *s; - int *numtris; - float lat, lng, vec1[5], vec2[5], mat[9], r; - - // let's also repack the geometry to more usable formats - - surfi = 0; - while (surfi < m->head.numsurfs) - { - s = &m->head.surfs[surfi]; - - s->geometry = Bcalloc(m->head.numframes * s->numverts * sizeof(float), 15); - - numtris = Bcalloc(s->numverts, sizeof(int)); - - if (!s->geometry || !numtris) - QuitOnFatalError("OUT OF MEMORY in md3postload_polymer!"); - - verti = 0; - while (verti < (m->head.numframes * s->numverts)) - { - s->geometry[(verti * 15) + 0] = s->xyzn[verti].x; - s->geometry[(verti * 15) + 1] = s->xyzn[verti].y; - s->geometry[(verti * 15) + 2] = s->xyzn[verti].z; - - // normal extraction from packed spherical coordinates - // FIXME: swapping lat and lng because of npherno's compiler - lat = s->xyzn[verti].nlng * (2 * PI) / 255.0f; - lng = s->xyzn[verti].nlat * (2 * PI) / 255.0f; - - s->geometry[(verti * 15) + 3] = cos(lat) * sin(lng); - s->geometry[(verti * 15) + 4] = sin(lat) * sin(lng); - s->geometry[(verti * 15) + 5] = cos(lng); - - verti++; - } - - trii = 0; - while (trii < s->numtris) - { - // let the vertices know they're being referenced by a triangle - if (s->tris[trii].i[0] >= s->numverts || s->tris[trii].i[0] < 0 || - s->tris[trii].i[1] >= s->numverts || s->tris[trii].i[1] < 0 || - s->tris[trii].i[2] >= s->numverts || s->tris[trii].i[2] < 0) - { - // corrupt model - Bfree(numtris); - OSD_Printf("Triangle index out of bounds!\n"); - return 0; - } - numtris[s->tris[trii].i[0]]++; - numtris[s->tris[trii].i[1]]++; - numtris[s->tris[trii].i[2]]++; - - framei = 0; - while (framei < m->head.numframes) - { - vec1[0] = s->geometry[(framei * s->numverts * 15) + (s->tris[trii].i[1] * 15) + 0] - - s->geometry[(framei * s->numverts * 15) + (s->tris[trii].i[0] * 15) + 0]; - vec1[1] = s->geometry[(framei * s->numverts * 15) + (s->tris[trii].i[1] * 15) + 1] - - s->geometry[(framei * s->numverts * 15) + (s->tris[trii].i[0] * 15) + 1]; - vec1[2] = s->geometry[(framei * s->numverts * 15) + (s->tris[trii].i[1] * 15) + 2] - - s->geometry[(framei * s->numverts * 15) + (s->tris[trii].i[0] * 15) + 2]; - vec1[3] = s->uv[s->tris[trii].i[1]].u - s->uv[s->tris[trii].i[0]].u; - vec1[4] = s->uv[s->tris[trii].i[1]].v - s->uv[s->tris[trii].i[0]].v; - - vec2[0] = s->geometry[(framei * s->numverts * 15) + (s->tris[trii].i[2] * 15) + 0] - - s->geometry[(framei * s->numverts * 15) + (s->tris[trii].i[1] * 15) + 0]; - vec2[1] = s->geometry[(framei * s->numverts * 15) + (s->tris[trii].i[2] * 15) + 1] - - s->geometry[(framei * s->numverts * 15) + (s->tris[trii].i[1] * 15) + 1]; - vec2[2] = s->geometry[(framei * s->numverts * 15) + (s->tris[trii].i[2] * 15) + 2] - - s->geometry[(framei * s->numverts * 15) + (s->tris[trii].i[1] * 15) + 2]; - vec2[3] = s->uv[s->tris[trii].i[2]].u - s->uv[s->tris[trii].i[1]].u; - vec2[4] = s->uv[s->tris[trii].i[2]].v - s->uv[s->tris[trii].i[1]].v; - - r = 1.0 / (vec1[3] * vec2[4] - vec2[3] * vec1[4]); - - // tangent - mat[0] = (vec2[4] * vec1[0] - vec1[4] * vec2[0]) * r; - mat[1] = (vec2[4] * vec1[1] - vec1[4] * vec2[1]) * r; - mat[2] = (vec2[4] * vec1[2] - vec1[4] * vec2[2]) * r; - - normalize(&mat[0]); - - // bitangent - mat[3] = (vec1[3] * vec2[0] - vec2[3] * vec1[0]) * r; - mat[4] = (vec1[3] * vec2[1] - vec2[3] * vec1[1]) * r; - mat[5] = (vec1[3] * vec2[2] - vec2[3] * vec1[2]) * r; - - normalize(&mat[3]); - - // T and B are shared for the three vertices in that triangle - i = 0; - while (i < 6) - { - s->geometry[(framei * s->numverts * 15) + (s->tris[trii].i[0] * 15) + 6 + i] += mat[i]; - s->geometry[(framei * s->numverts * 15) + (s->tris[trii].i[1] * 15) + 6 + i] += mat[i]; - s->geometry[(framei * s->numverts * 15) + (s->tris[trii].i[2] * 15) + 6 + i] += mat[i]; - i++; - } - - framei++; - } - - trii++; - } - - // now that we accumulated the TBNs, average and invert them for each vertex - verti = 0; - while (verti < (m->head.numframes * s->numverts)) - { - i = 6; - while (i < 12) - { - s->geometry[(verti * 15) + i] /= numtris[verti % s->numverts]; - i++; - } - // copy N over - s->geometry[(verti * 15) + 12] = s->geometry[(verti * 15) + 3]; - s->geometry[(verti * 15) + 13] = s->geometry[(verti * 15) + 4]; - s->geometry[(verti * 15) + 14] = s->geometry[(verti * 15) + 5]; - - invertmatrix(&s->geometry[(verti * 15) + 6], mat); - memcpy(&s->geometry[(verti * 15) + 6], mat, sizeof(float) * 9); - - verti++; - } - - Bfree(numtris); - - surfi++; - } - -#else - UNREFERENCED_PARAMETER(m); -#endif - - return 1; -} - - -static int32_t md3draw(md3model_t *m, spritetype *tspr) -{ - point3d fp, fp1, fp2, m0, m1, a0; - md3xyzn_t *v0, *v1; - int32_t i, j, k, l, surfi; - float f, g, k0, k1, k2, k3, k4, k5, k6, k7, mat[16]; - md3surf_t *s; - GLfloat pc[4]; - int32_t texunits = GL_TEXTURE0_ARB; - mdskinmap_t *sk; - //PLAG : sorting stuff - void *vbotemp; - point3d *vertexhandle = NULL; - uint16_t *indexhandle; - char lpal = (tspr->owner >= MAXSPRITES) ? tspr->pal : sprite[tspr->owner].pal; - - if (r_vbos && (m->vbos == NULL)) - mdloadvbos(m); - - // if ((tspr->cstat&48) == 32) return 0; - - updateanimation((md2model_t *)m,tspr); - - //create current&next frame's vertex list from whole list - - f = m->interpol; g = 1-f; - - if (m->interpol < 0 || m->interpol > 1 || - m->cframe < 0 || m->cframe >= m->numframes || - m->nframe < 0 || m->nframe >= m->numframes) - { - OSD_Printf("Model frame out of bounds!\n"); - if (m->interpol < 0) - m->interpol = 0; - if (m->interpol > 1) - m->interpol = 1; - if (m->cframe < 0) - m->cframe = 0; - if (m->cframe >= m->numframes) - m->cframe = m->numframes - 1; - if (m->nframe < 0) - m->nframe = 0; - if (m->nframe >= m->numframes) - m->nframe = m->numframes - 1; - } - - if (m->head.flags == 1337) - { - // md2 - m0.x = m->scale * g; m1.x = m->scale *f; - m0.y = m->scale * g; m1.y = m->scale *f; - m0.z = m->scale * g; m1.z = m->scale *f; - a0.x = a0.y = 0; a0.z = ((globalorientation&8)?-m->zadd:m->zadd)*m->scale; - } - else - { - m0.x = (1.0/64.0) * m->scale * g; m1.x = (1.0/64.0) * m->scale *f; - m0.y = (1.0/64.0) * m->scale * g; m1.y = (1.0/64.0) * m->scale *f; - m0.z = (1.0/64.0) * m->scale * g; m1.z = (1.0/64.0) * m->scale *f; - a0.x = a0.y = 0; a0.z = ((globalorientation&8)?-m->zadd:m->zadd)*m->scale; - } - - - // Parkar: Moved up to be able to use k0 for the y-flipping code - k0 = (float)tspr->z; - if ((globalorientation&128) && !((globalorientation&48)==32)) k0 += (float)((tilesizy[tspr->picnum]*tspr->yrepeat)<<1); - - // Parkar: Changed to use the same method as centeroriented sprites - if (globalorientation&8) //y-flipping - { - m0.z = -m0.z; m1.z = -m1.z; a0.z = -a0.z; - k0 -= (float)((tilesizy[tspr->picnum]*tspr->yrepeat)<<2); - } - if (globalorientation&4) { m0.y = -m0.y; m1.y = -m1.y; a0.y = -a0.y; } //x-flipping - - f = ((float)tspr->xrepeat)/64*m->bscale; - m0.x *= f; m1.x *= f; a0.x *= f; f = -f; // 20040610: backwards models aren't cool - m0.y *= f; m1.y *= f; a0.y *= f; - f = ((float)tspr->yrepeat)/64*m->bscale; - m0.z *= f; m1.z *= f; a0.z *= f; - - // floor aligned - k1 = (float)tspr->y; - if ((globalorientation&48)==32) - { - m0.z = -m0.z; m1.z = -m1.z; a0.z = -a0.z; - m0.y = -m0.y; m1.y = -m1.y; a0.y = -a0.y; - f = a0.x; a0.x = a0.z; a0.z = f; - k1 += (float)((tilesizy[tspr->picnum]*tspr->yrepeat)>>3); - } - - f = (65536.0*512.0)/((float)xdimen*viewingrange); - g = 32.0/((float)xdimen*gxyaspect); - m0.y *= f; m1.y *= f; a0.y = (((float)(tspr->x-globalposx))/ 1024.0 + a0.y)*f; - m0.x *=-f; m1.x *=-f; a0.x = (((float)(k1 -globalposy))/ -1024.0 + a0.x)*-f; - m0.z *= g; m1.z *= g; a0.z = (((float)(k0 -globalposz))/-16384.0 + a0.z)*g; - - k0 = ((float)(tspr->x-globalposx))*f/1024.0; - k1 = ((float)(tspr->y-globalposy))*f/1024.0; - f = gcosang2*gshang; - g = gsinang2*gshang; - k4 = (float)sintable[(tspr->ang+spriteext[tspr->owner].angoff+1024)&2047] / 16384.0; - k5 = (float)sintable[(tspr->ang+spriteext[tspr->owner].angoff+ 512)&2047] / 16384.0; - k2 = k0*(1-k4)+k1*k5; - k3 = k1*(1-k4)-k0*k5; - k6 = f*gstang - gsinang*gctang; k7 = g*gstang + gcosang*gctang; - mat[0] = k4*k6 + k5*k7; mat[4] = gchang*gstang; mat[ 8] = k4*k7 - k5*k6; mat[12] = k2*k6 + k3*k7; - k6 = f*gctang + gsinang*gstang; k7 = g*gctang - gcosang*gstang; - mat[1] = k4*k6 + k5*k7; mat[5] = gchang*gctang; mat[ 9] = k4*k7 - k5*k6; mat[13] = k2*k6 + k3*k7; - k6 = gcosang2*gchang; k7 = gsinang2*gchang; - mat[2] = k4*k6 + k5*k7; mat[6] =-gshang; mat[10] = k4*k7 - k5*k6; mat[14] = k2*k6 + k3*k7; - - mat[12] += a0.y*mat[0] + a0.z*mat[4] + a0.x*mat[ 8]; - mat[13] += a0.y*mat[1] + a0.z*mat[5] + a0.x*mat[ 9]; - mat[14] += a0.y*mat[2] + a0.z*mat[6] + a0.x*mat[10]; - - // floor aligned - if ((globalorientation&48)==32) - { - f = mat[4]; mat[4] = mat[8]*16.0; mat[8] = -f*(1.0/16.0); - f = mat[5]; mat[5] = mat[9]*16.0; mat[9] = -f*(1.0/16.0); - f = mat[6]; mat[6] = mat[10]*16.0; mat[10] = -f*(1.0/16.0); - } - - //Mirrors - if (grhalfxdown10x < 0) { mat[0] = -mat[0]; mat[4] = -mat[4]; mat[8] = -mat[8]; mat[12] = -mat[12]; } - - //------------ - //bit 10 is an ugly hack in game.c\animatesprites telling MD2SPRITE - //to use Z-buffer hacks to hide overdraw problems with the shadows - if (tspr->cstat&1024) - { - bglDepthFunc(GL_LESS); //NEVER,LESS,(,L)EQUAL,GREATER,(NOT,G)EQUAL,ALWAYS - bglDepthRange(0.0,0.9999); - } - bglPushAttrib(GL_POLYGON_BIT); - if ((grhalfxdown10x >= 0) ^((globalorientation&8) != 0) ^((globalorientation&4) != 0)) bglFrontFace(GL_CW); else bglFrontFace(GL_CCW); - bglEnable(GL_CULL_FACE); - bglCullFace(GL_BACK); - - bglEnable(GL_TEXTURE_2D); - - pc[0] = pc[1] = pc[2] = ((float)(numpalookups-min(max((globalshade * shadescale)+m->shadeoff,0),numpalookups)))/((float)numpalookups); - if (!(hictinting[globalpal].f&4)) - { - if (!(m->flags&1) || (!(tspr->owner >= MAXSPRITES) && sector[sprite[tspr->owner].sectnum].floorpal!=0)) - { - pc[0] *= (float)hictinting[globalpal].r / 255.0; - pc[1] *= (float)hictinting[globalpal].g / 255.0; - pc[2] *= (float)hictinting[globalpal].b / 255.0; - if (hictinting[MAXPALOOKUPS-1].r != 255 || hictinting[MAXPALOOKUPS-1].g != 255 || hictinting[MAXPALOOKUPS-1].b != 255) - { - pc[0] *= (float)hictinting[MAXPALOOKUPS-1].r / 255.0f; - pc[1] *= (float)hictinting[MAXPALOOKUPS-1].g / 255.0f; - pc[2] *= (float)hictinting[MAXPALOOKUPS-1].b / 255.0f; - } - } - else globalnoeffect=1; - } - - if (tspr->cstat&2) { if (!(tspr->cstat&512)) pc[3] = 0.66f; else pc[3] = 0.33f; } - else pc[3] = 1.0; - if (m->usesalpha) //Sprites with alpha in texture - { - // bglEnable(GL_BLEND);// bglBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); - // bglEnable(GL_ALPHA_TEST); bglAlphaFunc(GL_GREATER,0.32); - // float al = 0.32; - // PLAG : default cutoff removed - float al = 0.0; - if (alphahackarray[globalpicnum] != 0) - al=alphahackarray[globalpicnum]; - bglEnable(GL_BLEND); - bglEnable(GL_ALPHA_TEST); - bglAlphaFunc(GL_GREATER,al); - } - else - { - if (tspr->cstat&2) bglEnable(GL_BLEND); //else bglDisable(GL_BLEND); - } - bglColor4f(pc[0],pc[1],pc[2],pc[3]); - //if (m->head.flags == 1337) - // bglColor4f(0.0f, 0.0f, 1.0f, 1.0f); - //------------ - - // PLAG: Cleaner model rotation code - if (spriteext[tspr->owner].pitch || spriteext[tspr->owner].roll || m->head.flags == 1337) - { - if (spriteext[tspr->owner].xoff) - a0.x = (float)(spriteext[tspr->owner].xoff / (2560 * (m0.x+m1.x))); - else - a0.x = 0; - if (spriteext[tspr->owner].yoff) - a0.y = (float)(spriteext[tspr->owner].yoff / (2560 * (m0.x+m1.x))); - else - a0.y = 0; - if ((spriteext[tspr->owner].zoff) && !(tspr->cstat&1024)) - a0.z = (float)(spriteext[tspr->owner].zoff / (655360 * (m0.z+m1.z))); - else - a0.z = 0; - k0 = (float)sintable[(spriteext[tspr->owner].pitch+512)&2047] / 16384.0; - k1 = (float)sintable[spriteext[tspr->owner].pitch&2047] / 16384.0; - k2 = (float)sintable[(spriteext[tspr->owner].roll+512)&2047] / 16384.0; - k3 = (float)sintable[spriteext[tspr->owner].roll&2047] / 16384.0; - } - for (surfi=0; surfihead.numsurfs; surfi++) - { - s = &m->head.surfs[surfi]; - v0 = &s->xyzn[m->cframe*s->numverts]; - v1 = &s->xyzn[m->nframe*s->numverts]; - - if (r_vertexarrays && r_vbos) - { - if (++curvbo >= r_vbocount) - curvbo = 0; - - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, vertvbos[curvbo]); - vbotemp = bglMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); - vertexhandle = (point3d *)vbotemp; - } - - for (i=s->numverts-1; i>=0; i--) - { - if (spriteext[tspr->owner].pitch || spriteext[tspr->owner].roll || m->head.flags == 1337) - { - fp.z = ((m->head.flags == 1337) ? (v0[i].x * m->muladdframes[m->cframe*2].x) + m->muladdframes[m->cframe*2+1].x : v0[i].x) + a0.x; - fp.x = ((m->head.flags == 1337) ? (v0[i].y * m->muladdframes[m->cframe*2].y) + m->muladdframes[m->cframe*2+1].y : v0[i].y) + a0.y; - fp.y = ((m->head.flags == 1337) ? (v0[i].z * m->muladdframes[m->cframe*2].z) + m->muladdframes[m->cframe*2+1].z : v0[i].z) + a0.z; - fp1.x = fp.x*k2 + fp.y*k3; - fp1.y = fp.x*k0*(-k3) + fp.y*k0*k2 + fp.z*(-k1); - fp1.z = fp.x*k1*(-k3) + fp.y*k1*k2 + fp.z*k0; - fp.z = ((m->head.flags == 1337) ? (v1[i].x * m->muladdframes[m->nframe*2].x) + m->muladdframes[m->nframe*2+1].x : v1[i].x) + a0.x; - fp.x = ((m->head.flags == 1337) ? (v1[i].y * m->muladdframes[m->nframe*2].y) + m->muladdframes[m->nframe*2+1].y : v1[i].y) + a0.y; - fp.y = ((m->head.flags == 1337) ? (v1[i].z * m->muladdframes[m->nframe*2].z) + m->muladdframes[m->nframe*2+1].z : v1[i].z) + a0.z; - fp2.x = fp.x*k2 + fp.y*k3; - fp2.y = fp.x*k0*(-k3) + fp.y*k0*k2 + fp.z*(-k1); - fp2.z = fp.x*k1*(-k3) + fp.y*k1*k2 + fp.z*k0; - fp.z = (fp1.z - a0.x)*m0.x + (fp2.z - a0.x)*m1.x; - fp.x = (fp1.x - a0.y)*m0.y + (fp2.x - a0.y)*m1.y; - fp.y = (fp1.y - a0.z)*m0.z + (fp2.y - a0.z)*m1.z; - } - else - { - fp.z = v0[i].x*m0.x + v1[i].x*m1.x; - fp.y = v0[i].z*m0.z + v1[i].z*m1.z; - fp.x = v0[i].y*m0.y + v1[i].y*m1.y; - } - if (r_vertexarrays && r_vbos) - { - vertexhandle[i].x = fp.x; - vertexhandle[i].y = fp.y; - vertexhandle[i].z = fp.z; - } - vertlist[i].x = fp.x; - vertlist[i].y = fp.y; - vertlist[i].z = fp.z; - } - - if (r_vertexarrays && r_vbos) - { - bglUnmapBufferARB(GL_ARRAY_BUFFER_ARB); - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); - } - - bglMatrixMode(GL_MODELVIEW); //Let OpenGL (and perhaps hardware :) handle the matrix rotation - mat[3] = mat[7] = mat[11] = 0.f; mat[15] = 1.f; bglLoadMatrixf(mat); - // PLAG: End - - i = mdloadskin((md2model_t *)m,tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum,globalpal,surfi); if (!i) continue; - //i = mdloadskin((md2model *)m,tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum,surfi); //hack for testing multiple surfaces per MD3 - bglBindTexture(GL_TEXTURE_2D, i); - - if (r_detailmapping && !(tspr->cstat&1024)) - i = mdloadskin((md2model_t *)m,tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum,DETAILPAL,surfi); - else - i = 0; - - if (i) - { - bglActiveTextureARB(++texunits); - - bglEnable(GL_TEXTURE_2D); - bglBindTexture(GL_TEXTURE_2D, i); - - bglTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - bglTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); - - bglTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB); - bglTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - - bglTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE); - bglTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); - - bglTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - bglTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS_ARB); - bglTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); - - bglTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 2.0f); - - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); - - for (sk = m->skinmap; sk; sk = sk->next) - if ((int32_t)sk->palette == DETAILPAL && sk->skinnum == tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum && sk->surfnum == surfi) - f = sk->param; - - bglMatrixMode(GL_TEXTURE); - bglLoadIdentity(); - bglScalef(f, f, 1.0f); - bglMatrixMode(GL_MODELVIEW); - } - - if (r_glowmapping && !(tspr->cstat&1024)) - i = mdloadskin((md2model_t *)m,tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum,GLOWPAL,surfi); - else - i = 0; - - if (i) - { - bglActiveTextureARB(++texunits); - - bglEnable(GL_TEXTURE_2D); - bglBindTexture(GL_TEXTURE_2D, i); - - bglTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - bglTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB); - - bglTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB); - bglTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - - bglTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE); - bglTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); - - bglTexEnvf(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_TEXTURE); - bglTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_ONE_MINUS_SRC_ALPHA); - - bglTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - bglTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS_ARB); - bglTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); - - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); - } - - if (r_vertexarrays && r_vbos) - { - bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, indexvbos[curvbo]); - vbotemp = bglMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); - indexhandle = (uint16_t *)vbotemp; - } - else - indexhandle = m->vindexes; - - //PLAG: delayed polygon-level sorted rendering - if (m->usesalpha && !(tspr->cstat & 1024)) - { - for (i=s->numtris-1; i>=0; i--) - { - // Matrix multiplication - ugly but clear - fp.x = (vertlist[s->tris[i].i[0]].x * mat[0]) + (vertlist[s->tris[i].i[0]].y * mat[4]) + (vertlist[s->tris[i].i[0]].z * mat[8]) + mat[12]; - fp.y = (vertlist[s->tris[i].i[0]].x * mat[1]) + (vertlist[s->tris[i].i[0]].y * mat[5]) + (vertlist[s->tris[i].i[0]].z * mat[9]) + mat[13]; - fp.z = (vertlist[s->tris[i].i[0]].x * mat[2]) + (vertlist[s->tris[i].i[0]].y * mat[6]) + (vertlist[s->tris[i].i[0]].z * mat[10]) + mat[14]; - - fp1.x = (vertlist[s->tris[i].i[1]].x * mat[0]) + (vertlist[s->tris[i].i[1]].y * mat[4]) + (vertlist[s->tris[i].i[1]].z * mat[8]) + mat[12]; - fp1.y = (vertlist[s->tris[i].i[1]].x * mat[1]) + (vertlist[s->tris[i].i[1]].y * mat[5]) + (vertlist[s->tris[i].i[1]].z * mat[9]) + mat[13]; - fp1.z = (vertlist[s->tris[i].i[1]].x * mat[2]) + (vertlist[s->tris[i].i[1]].y * mat[6]) + (vertlist[s->tris[i].i[1]].z * mat[10]) + mat[14]; - - fp2.x = (vertlist[s->tris[i].i[2]].x * mat[0]) + (vertlist[s->tris[i].i[2]].y * mat[4]) + (vertlist[s->tris[i].i[2]].z * mat[8]) + mat[12]; - fp2.y = (vertlist[s->tris[i].i[2]].x * mat[1]) + (vertlist[s->tris[i].i[2]].y * mat[5]) + (vertlist[s->tris[i].i[2]].z * mat[9]) + mat[13]; - fp2.z = (vertlist[s->tris[i].i[2]].x * mat[2]) + (vertlist[s->tris[i].i[2]].y * mat[6]) + (vertlist[s->tris[i].i[2]].z * mat[10]) + mat[14]; - - f = (fp.x * fp.x) + (fp.y * fp.y) + (fp.z * fp.z); - - g = (fp1.x * fp1.x) + (fp1.y * fp1.y) + (fp1.z * fp1.z); - if (f > g) - f = g; - g = (fp2.x * fp2.x) + (fp2.y * fp2.y) + (fp2.z * fp2.z); - if (f > g) - f = g; - - m->maxdepths[i] = f; - m->indexes[i] = i; - } - - // dichotomic recursive sorting - about 100x less iterations than bubblesort - quicksort(m->indexes, m->maxdepths, 0, s->numtris - 1); - - if (r_vertexarrays) - { - k = 0; - for (i=s->numtris-1; i>=0; i--) - for (j=0; j<3; j++) - indexhandle[k++] = s->tris[m->indexes[i]].i[j]; - } - else - { - bglBegin(GL_TRIANGLES); - for (i=s->numtris-1; i>=0; i--) - for (j=0; j<3; j++) - { - k = s->tris[m->indexes[i]].i[j]; - if (texunits > GL_TEXTURE0_ARB) - { - l = GL_TEXTURE0_ARB; - while (l <= texunits) - bglMultiTexCoord2fARB(l++, s->uv[k].u,s->uv[k].v); - } - else - bglTexCoord2f(s->uv[k].u,s->uv[k].v); - bglVertex3fv((float *)&vertlist[k]); - } - bglEnd(); - } - } - else - { - if (r_vertexarrays) - { - k = 0; - for (i=s->numtris-1; i>=0; i--) - for (j=0; j<3; j++) - indexhandle[k++] = s->tris[i].i[j]; - } - else - { - bglBegin(GL_TRIANGLES); - for (i=s->numtris-1; i>=0; i--) - for (j=0; j<3; j++) - { - k = s->tris[i].i[j]; - if (texunits > GL_TEXTURE0_ARB) - { - l = GL_TEXTURE0_ARB; - while (l <= texunits) - bglMultiTexCoord2fARB(l++, s->uv[k].u,s->uv[k].v); - } - else - bglTexCoord2f(s->uv[k].u,s->uv[k].v); - bglVertex3fv((float *)&vertlist[k]); - } - bglEnd(); - } - } - - if (r_vertexarrays && r_vbos) - { - bglUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB); - bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); - } - - if (r_vertexarrays) - { - if (r_vbos) - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, m->vbos[surfi]); - l = GL_TEXTURE0_ARB; - while (l <= texunits) - { - bglClientActiveTextureARB(l++); - bglEnableClientState(GL_TEXTURE_COORD_ARRAY); - if (r_vbos) - bglTexCoordPointer(2, GL_FLOAT, 0, 0); - else - bglTexCoordPointer(2, GL_FLOAT, 0, &(s->uv[0].u)); - } - - if (r_vbos) - { - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, vertvbos[curvbo]); - bglVertexPointer(3, GL_FLOAT, 0, 0); - } - else - bglVertexPointer(3, GL_FLOAT, 0, &(vertlist[0].x)); - - if (r_vbos) - { - bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, indexvbos[curvbo]); - bglDrawElements(GL_TRIANGLES, s->numtris * 3, GL_UNSIGNED_SHORT, 0); - } - else - bglDrawElements(GL_TRIANGLES, s->numtris * 3, GL_UNSIGNED_SHORT, m->vindexes); - - if (r_vbos) - { - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); - bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); - } - } - - while (texunits > GL_TEXTURE0_ARB) - { - bglMatrixMode(GL_TEXTURE); - bglLoadIdentity(); - bglMatrixMode(GL_MODELVIEW); - bglTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 1.0f); - bglDisable(GL_TEXTURE_2D); - if (r_vertexarrays) - { - bglDisableClientState(GL_TEXTURE_COORD_ARRAY); - bglClientActiveTextureARB(texunits - 1); - } - bglActiveTextureARB(--texunits); - } - } - //------------ - - if (m->usesalpha) bglDisable(GL_ALPHA_TEST); - bglDisable(GL_CULL_FACE); - bglPopAttrib(); - if (tspr->cstat&1024) - { - bglDepthFunc(GL_LESS); //NEVER,LESS,(,L)EQUAL,GREATER,(NOT,G)EQUAL,ALWAYS - bglDepthRange(0.0,0.99999); - } - bglLoadIdentity(); - - globalnoeffect=0; - return 1; -} - -static void md3free(md3model_t *m) -{ - mdanim_t *anim, *nanim = NULL; - mdskinmap_t *sk, *nsk = NULL; - md3surf_t *s; - int32_t surfi; - - if (!m) return; - - for (anim=m->animations; anim; anim=nanim) - { - nanim = anim->next; - Bfree(anim); - } - for (sk=m->skinmap; sk; sk=nsk) - { - nsk = sk->next; - Bfree(sk->fn); - Bfree(sk); - } - - if (m->head.surfs) - { - for (surfi=m->head.numsurfs-1; surfi>=0; surfi--) - { - s = &m->head.surfs[surfi]; - if (s->tris) Bfree(s->tris); - if (m->head.flags == 1337) - { - if (s->shaders) Bfree(s->shaders); - if (s->uv) Bfree(s->uv); - if (s->xyzn) Bfree(s->xyzn); - if (s->geometry) Bfree(s->geometry); - } - } - Bfree(m->head.surfs); - } - if (m->head.tags) Bfree(m->head.tags); - if (m->head.frames) Bfree(m->head.frames); - - if (m->texid) Bfree(m->texid); - - if (m->muladdframes) Bfree(m->muladdframes); - - if (m->indexes) Bfree(m->indexes); - if (m->vindexes) Bfree(m->vindexes); - if (m->maxdepths) Bfree(m->maxdepths); - - if (m->vbos) - { - bglDeleteBuffersARB(m->head.numsurfs, m->vbos); - Bfree(m->vbos); - m->vbos = NULL; - } - - Bfree(m); -} - -//---------------------------------------- MD3 LIBRARY ENDS ---------------------------------------- -//--------------------------------------- VOX LIBRARY BEGINS --------------------------------------- - -//For loading/conversion only -static int32_t xsiz, ysiz, zsiz, yzsiz, *vbit = 0; //vbit: 1 bit per voxel: 0=air,1=solid -static float xpiv, ypiv, zpiv; //Might want to use more complex/unique names! -static int32_t *vcolhashead = 0, vcolhashsizm1; -typedef struct { int32_t p, c, n; } voxcol_t; -static voxcol_t *vcol = 0; int32_t vnum = 0, vmax = 0; -typedef struct { int16_t x, y; } spoint2d; -static spoint2d *shp; -static int32_t *shcntmal, *shcnt = 0, shcntp; -static int32_t mytexo5, *zbit, gmaxx, gmaxy, garea, pow2m1[33]; -static voxmodel_t *gvox; - -//pitch must equal xsiz*4 -uint32_t gloadtex(int32_t *picbuf, int32_t xsiz, int32_t ysiz, int32_t is8bit, int32_t dapal) -{ - uint32_t rtexid; - coltype *pic, *pic2; - char *cptr; - int32_t i; - - pic = (coltype *)picbuf; //Correct for GL's RGB order; also apply gamma here.. - pic2 = (coltype *)Bmalloc(xsiz*ysiz*sizeof(int32_t)); if (!pic2) return((unsigned)-1); - cptr = (char *)&britable[gammabrightness ? 0 : curbrightness][0]; - if (!is8bit) - { - for (i=xsiz*ysiz-1; i>=0; i--) - { - pic2[i].b = cptr[pic[i].r]; - pic2[i].g = cptr[pic[i].g]; - pic2[i].r = cptr[pic[i].b]; - pic2[i].a = 255; - } - } - else - { - if (palookup[dapal] == NULL) dapal = 0; - for (i=xsiz*ysiz-1; i>=0; i--) - { - pic2[i].b = cptr[palette[(int32_t)palookup[dapal][pic[i].a]*3+2]*4]; - pic2[i].g = cptr[palette[(int32_t)palookup[dapal][pic[i].a]*3+1]*4]; - pic2[i].r = cptr[palette[(int32_t)palookup[dapal][pic[i].a]*3+0]*4]; - pic2[i].a = 255; - } - } - - bglGenTextures(1,(GLuint *)&rtexid); - bglBindTexture(GL_TEXTURE_2D,rtexid); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); - bglTexImage2D(GL_TEXTURE_2D,0,4,xsiz,ysiz,0,GL_RGBA,GL_UNSIGNED_BYTE,(char *)pic2); - Bfree(pic2); - return(rtexid); -} - -static int32_t getvox(int32_t x, int32_t y, int32_t z) -{ - z += x*yzsiz + y*zsiz; - for (x=vcolhashead[(z*214013)&vcolhashsizm1]; x>=0; x=vcol[x].n) - if (vcol[x].p == z) return(vcol[x].c); - return(0x808080); -} - -static void putvox(int32_t x, int32_t y, int32_t z, int32_t col) -{ - if (vnum >= vmax) { vmax = max(vmax<<1,4096); vcol = (voxcol_t *)Brealloc(vcol,vmax*sizeof(voxcol_t)); } - - z += x*yzsiz + y*zsiz; - vcol[vnum].p = z; z = ((z*214013)&vcolhashsizm1); - vcol[vnum].c = col; - vcol[vnum].n = vcolhashead[z]; vcolhashead[z] = vnum++; -} - -//Set all bits in vbit from (x,y,z0) to (x,y,z1-1) to 0's -#if 0 -static void setzrange0(int32_t *lptr, int32_t z0, int32_t z1) -{ - int32_t z, ze; - if (!((z0^z1)&~31)) { lptr[z0>>5] &= ((~(-1<>5); ze = (z1>>5); - lptr[z] &=~(-1<>5] |= ((~(-1<>5); ze = (z1>>5); - lptr[z] |= (-1<mytexx + x0; - for (dy=0; dy; dy--,i+=gvox->mytexx) - for (x=0; x>5]&(1<>5); dx += x0-1; c = (dx>>5) - (x0>>5); - m = ~pow2m1[x0&31]; m1 = pow2m1[(dx&31)+1]; - if (!c) { for (m&=m1; dy; dy--,i+=mytexo5) if (zbit[i]&m) return(0); } - else - { - for (; dy; dy--,i+=mytexo5) - { - if (zbit[i]&m) return(0); - for (x=1; xmytexx + x0; - for (y=0; ymytexx) - for (x=0; x>5] |= (1<>5); dx += x0-1; c = (dx>>5) - (x0>>5); - m = ~pow2m1[x0&31]; m1 = pow2m1[(dx&31)+1]; - if (!c) { for (m&=m1; dy; dy--,i+=mytexo5) zbit[i] |= m; } - else - { - for (; dy; dy--,i+=mytexo5) - { - zbit[i] |= m; - for (x=1; x gmaxx) gmaxx = x; - if (y > gmaxy) gmaxy = y; - garea += (x+(VOXBORDWIDTH<<1))*(y+(VOXBORDWIDTH<<1)); - gvox->qcnt++; -} - -static void addquad(int32_t x0, int32_t y0, int32_t z0, int32_t x1, int32_t y1, int32_t z1, int32_t x2, int32_t y2, int32_t z2, int32_t face) -{ - int32_t i, j, x, y, z, xx, yy, nx = 0, ny = 0, nz = 0, *lptr; - voxrect_t *qptr; - - x = labs(x2-x0); y = labs(y2-y0); z = labs(z2-z0); - if (!x) { x = y; y = z; i = 0; } - else if (!y) { y = z; i = 1; } - else i = 2; - if (x < y) { z = x; x = y; y = z; i += 3; } - z = shcnt[y*shcntp+x]++; - lptr = &gvox->mytex[(shp[z].y+VOXBORDWIDTH)*gvox->mytexx+(shp[z].x+VOXBORDWIDTH)]; - switch (face) - { - case 0: - ny = y1; x2 = x0; x0 = x1; x1 = x2; break; - case 1: - ny = y0; y0++; y1++; y2++; break; - case 2: - nz = z1; y0 = y2; y2 = y1; y1 = y0; z0++; z1++; z2++; break; - case 3: - nz = z0; break; - case 4: - nx = x1; y2 = y0; y0 = y1; y1 = y2; x0++; x1++; x2++; break; - case 5: - nx = x0; break; - } - for (yy=0; yymytexx) - for (xx=0; xxmytex[(shp[z].y+yy)*gvox->mytexx+shp[z].x]; - lptr[xx] = lptr[VOXBORDWIDTH]; lptr[xx+x+VOXBORDWIDTH] = lptr[x-1+VOXBORDWIDTH]; - } - //Extend borders vertically - for (yy=0; yymytex[(shp[z].y+yy)*gvox->mytexx+shp[z].x], - &gvox->mytex[(shp[z].y+VOXBORDWIDTH)*gvox->mytexx+shp[z].x], - (x+(VOXBORDWIDTH<<1))<<2); - Bmemcpy(&gvox->mytex[(shp[z].y+y+yy+VOXBORDWIDTH)*gvox->mytexx+shp[z].x], - &gvox->mytex[(shp[z].y+y-1+VOXBORDWIDTH)*gvox->mytexx+shp[z].x], - (x+(VOXBORDWIDTH<<1))<<2); - } - - qptr = &gvox->quad[gvox->qcnt]; - qptr->v[0].x = x0; qptr->v[0].y = y0; qptr->v[0].z = z0; - qptr->v[1].x = x1; qptr->v[1].y = y1; qptr->v[1].z = z1; - qptr->v[2].x = x2; qptr->v[2].y = y2; qptr->v[2].z = z2; - for (j=0; j<3; j++) { qptr->v[j].u = shp[z].x+VOXBORDWIDTH; qptr->v[j].v = shp[z].y+VOXBORDWIDTH; } - if (i < 3) qptr->v[1].u += x; else qptr->v[1].v += y; - qptr->v[2].u += x; qptr->v[2].v += y; - - qptr->v[3].u = qptr->v[0].u - qptr->v[1].u + qptr->v[2].u; - qptr->v[3].v = qptr->v[0].v - qptr->v[1].v + qptr->v[2].v; - qptr->v[3].x = qptr->v[0].x - qptr->v[1].x + qptr->v[2].x; - qptr->v[3].y = qptr->v[0].y - qptr->v[1].y + qptr->v[2].y; - qptr->v[3].z = qptr->v[0].z - qptr->v[1].z + qptr->v[2].z; - if (gvox->qfacind[face] < 0) gvox->qfacind[face] = gvox->qcnt; - gvox->qcnt++; - -} - -static int32_t isolid(int32_t x, int32_t y, int32_t z) -{ - if ((uint32_t)x >= (uint32_t)xsiz) return(0); - if ((uint32_t)y >= (uint32_t)ysiz) return(0); - if ((uint32_t)z >= (uint32_t)zsiz) return(0); - z += x*yzsiz + y*zsiz; return(vbit[z>>5]&(1<qfacind[i] = -1; - - i = ((max(ysiz,zsiz)+1)<<2); - bx0 = (int32_t *)Bmalloc(i<<1); if (!bx0) { Bfree(gvox); return(0); } - by0 = (int32_t *)(((intptr_t)bx0)+i); - - for (cnt=0; cnt<2; cnt++) - { - if (!cnt) daquad = cntquad; - else daquad = addquad; - gvox->qcnt = 0; - - memset(by0,-1,(max(ysiz,zsiz)+1)<<2); v = 0; - - for (i=-1; i<=1; i+=2) - for (y=0; y= 0) && ((by0[z] != oz) || (v >= ov))) - { daquad(bx0[z],y,by0[z],x,y,by0[z],x,y,z,i>=0); by0[z] = -1; } - if (v > ov) oz = z; else if ((v < ov) && (by0[z] != oz)) { bx0[z] = x; by0[z] = oz; } - } - - for (i=-1; i<=1; i+=2) - for (z=0; z= 0) && ((by0[y] != oz) || (v >= ov))) - { daquad(bx0[y],by0[y],z,x,by0[y],z,x,y,z,(i>=0)+2); by0[y] = -1; } - if (v > ov) oz = y; else if ((v < ov) && (by0[y] != oz)) { bx0[y] = x; by0[y] = oz; } - } - - for (i=-1; i<=1; i+=2) - for (x=0; x= 0) && ((by0[z] != oz) || (v >= ov))) - { daquad(x,bx0[z],by0[z],x,y,by0[z],x,y,z,(i>=0)+4); by0[z] = -1; } - if (v > ov) oz = z; else if ((v < ov) && (by0[z] != oz)) { bx0[z] = y; by0[z] = oz; } - } - - if (!cnt) - { - shp = (spoint2d *)Bmalloc(gvox->qcnt*sizeof(spoint2d)); - if (!shp) { Bfree(bx0); Bfree(gvox); return(0); } - - sc = 0; - for (y=gmaxy; y; y--) - for (x=gmaxx; x>=y; x--) - { - i = shcnt[y*shcntp+x]; shcnt[y*shcntp+x] = sc; //shcnt changes from counter to head index - for (; i>0; i--) { shp[sc].x = x; shp[sc].y = y; sc++; } - } - - for (gvox->mytexx=32; gvox->mytexx<(gmaxx+(VOXBORDWIDTH<<1)); gvox->mytexx<<=1); - for (gvox->mytexy=32; gvox->mytexy<(gmaxy+(VOXBORDWIDTH<<1)); gvox->mytexy<<=1); - while (gvox->mytexx*gvox->mytexy*8 < garea*9) //This should be sufficient to fit most skins... - { -skindidntfit: - ; - if (gvox->mytexx <= gvox->mytexy) gvox->mytexx <<= 1; else gvox->mytexy <<= 1; - } - mytexo5 = (gvox->mytexx>>5); - - i = (((gvox->mytexx*gvox->mytexy+31)>>5)<<2); - zbit = (int32_t *)Bmalloc(i); if (!zbit) { Bfree(bx0); Bfree(gvox); Bfree(shp); return(0); } - memset(zbit,0,i); - - v = gvox->mytexx*gvox->mytexy; - for (z=0; zmytexx,255)-dx))>>15); - y0 = (((rand()&32767)*(min(gvox->mytexy,255)-dy))>>15); -#else - x0 = (((rand()&32767)*(gvox->mytexx+1-dx))>>15); - y0 = (((rand()&32767)*(gvox->mytexy+1-dy))>>15); -#endif - i--; - if (i < 0) //Time-out! Very slow if this happens... but at least it still works :P - { - Bfree(zbit); - - //Re-generate shp[].x/y (box sizes) from shcnt (now head indices) for next pass :/ - j = 0; - for (y=gmaxy; y; y--) - for (x=gmaxx; x>=y; x--) - { - i = shcnt[y*shcntp+x]; - for (; jquad = (voxrect_t *)Bmalloc(gvox->qcnt*sizeof(voxrect_t)); - if (!gvox->quad) { Bfree(zbit); Bfree(shp); Bfree(bx0); Bfree(gvox); return(0); } - - gvox->mytex = (int32_t *)Bmalloc(gvox->mytexx*gvox->mytexy*sizeof(int32_t)); - if (!gvox->mytex) { Bfree(gvox->quad); Bfree(zbit); Bfree(shp); Bfree(bx0); Bfree(gvox); return(0); } - } - } - Bfree(shp); Bfree(zbit); Bfree(bx0); - return(gvox); -} - -static int32_t loadvox(const char *filnam) -{ - int32_t i, j, k, x, y, z, pal[256], fil; - char c[3], *tbuf; - - fil = kopen4load((char *)filnam,0); if (fil < 0) return(-1); - kread(fil,&xsiz,4); xsiz = B_LITTLE32(xsiz); - kread(fil,&ysiz,4); ysiz = B_LITTLE32(ysiz); - kread(fil,&zsiz,4); zsiz = B_LITTLE32(zsiz); - xpiv = ((float)xsiz)*.5; - ypiv = ((float)ysiz)*.5; - zpiv = ((float)zsiz)*.5; - - klseek(fil,-768,SEEK_END); - for (i=0; i<256; i++) - { kread(fil,c,3); pal[i] = (((int32_t)c[0])<<18)+(((int32_t)c[1])<<10)+(((int32_t)c[2])<<2)+(i<<24); } - pal[255] = -1; - - vcolhashsizm1 = 8192-1; - vcolhashead = (int32_t *)Bmalloc((vcolhashsizm1+1)*sizeof(int32_t)); if (!vcolhashead) { kclose(fil); return(-1); } - memset(vcolhashead,-1,(vcolhashsizm1+1)*sizeof(int32_t)); - - yzsiz = ysiz*zsiz; i = ((xsiz*yzsiz+31)>>3); - vbit = (int32_t *)Bmalloc(i); if (!vbit) { kclose(fil); return(-1); } - memset(vbit,0,i); - - tbuf = (char *)Bmalloc(zsiz*sizeof(uint8_t)); if (!tbuf) { kclose(fil); return(-1); } - - klseek(fil,12,SEEK_SET); - for (x=0; x=0; z--) - { if (tbuf[z] != 255) { i = j+z; vbit[i>>5] |= (1<>5]&(1<>5]&(1<>5]&(1<>5]&(1<>5]&(1<>5]&(1<=0; i--) xyoffs[i] = B_LITTLE16(xyoffs[i]); - - klseek(fil,-768,SEEK_END); - for (i=0; i<256; i++) - { kread(fil,c,3); pal[i] = B_LITTLE32((((int32_t)c[0])<<18)+(((int32_t)c[1])<<10)+(((int32_t)c[2])<<2)+(i<<24)); } - - yzsiz = ysiz*zsiz; i = ((xsiz*yzsiz+31)>>3); - vbit = (int32_t *)Bmalloc(i); if (!vbit) { Bfree(xyoffs); kclose(fil); return(-1); } - memset(vbit,0,i); - - for (vcolhashsizm1=4096; vcolhashsizm1<(mip1leng>>1); vcolhashsizm1<<=1); vcolhashsizm1--; //approx to numvoxs! - vcolhashead = (int32_t *)Bmalloc((vcolhashsizm1+1)*sizeof(int32_t)); if (!vcolhashead) { Bfree(xyoffs); kclose(fil); return(-1); } - memset(vcolhashead,-1,(vcolhashsizm1+1)*sizeof(int32_t)); - - klseek(fil,28+((xsiz+1)<<2)+((ysizp1*xsiz)<<1),SEEK_SET); - - i = kfilelength(fil)-ktell(fil); - tbuf = (char *)Bmalloc(i); if (!tbuf) { Bfree(xyoffs); kclose(fil); return(-1); } - kread(fil,tbuf,i); kclose(fil); - - cptr = tbuf; - for (x=0; x=0; i--) ylen[i] = B_LITTLE16(ylen[i]); - klseek(fil,32,SEEK_SET); - - yzsiz = ysiz*zsiz; i = ((xsiz*yzsiz+31)>>3); - vbit = (int32_t *)Bmalloc(i); if (!vbit) { Bfree(ylen); kclose(fil); return(-1); } - memset(vbit,0,i); - - for (vcolhashsizm1=4096; vcolhashsizm10; i--) - { - kread(fil,c,8); //b,g,r,a,z_lo,z_hi,vis,dir - z0 = B_LITTLE16(*(uint16_t *)&c[4]); - if (!(c[6]&16)) setzrange1(vbit,j+z1,j+z0); - vbit[(j+z0)>>5] |= (1<>3); - vbit = (int32_t *)Bmalloc(i); if (!vbit) { kclose(fil); return(-1); } - memset(vbit,-1,i); - - vcolhashsizm1 = 1048576-1; - vcolhashead = (int32_t *)Bmalloc((vcolhashsizm1+1)*sizeof(int32_t)); if (!vcolhashead) { kclose(fil); return(-1); } - memset(vcolhashead,-1,(vcolhashsizm1+1)*sizeof(int32_t)); - - //Allocate huge buffer and load rest of file into it... - i = kfilelength(fil)-ktell(fil); - vbuf = (char *)Bmalloc(i); if (!vbuf) { kclose(fil); return(-1); } - kread(fil,vbuf,i); - kclose(fil); - - v = vbuf; - for (y=0; ymytex) Bfree(m->mytex); - if (m->quad) Bfree(m->quad); - if (m->texid) Bfree(m->texid); - Bfree(m); -} - -voxmodel_t *voxload(const char *filnam) -{ - int32_t i, is8bit, ret; - voxmodel_t *vm; - - i = strlen(filnam)-4; if (i < 0) return(0); - if (!Bstrcasecmp(&filnam[i],".vox")) { ret = loadvox(filnam); is8bit = 1; } - else if (!Bstrcasecmp(&filnam[i],".kvx")) { ret = loadkvx(filnam); is8bit = 1; } - else if (!Bstrcasecmp(&filnam[i],".kv6")) { ret = loadkv6(filnam); is8bit = 0; } - //else if (!Bstrcasecmp(&filnam[i],".vxl")) { ret = loadvxl(filnam); is8bit = 0; } - else return(0); - if (ret >= 0) vm = vox2poly(); else vm = 0; - if (vm) - { - vm->mdnum = 1; //VOXel model id - vm->scale = vm->bscale = 1.0; - vm->xsiz = xsiz; vm->ysiz = ysiz; vm->zsiz = zsiz; - vm->xpiv = xpiv; vm->ypiv = ypiv; vm->zpiv = zpiv; - vm->is8bit = is8bit; - - vm->texid = (uint32_t *)Bcalloc(MAXPALOOKUPS,sizeof(uint32_t)); - if (!vm->texid) { voxfree(vm); vm = 0; } - } - if (shcntmal) { Bfree(shcntmal); shcntmal = 0; } - if (vbit) { Bfree(vbit); vbit = 0; } - if (vcol) { Bfree(vcol); vcol = 0; vnum = 0; vmax = 0; } - if (vcolhashead) { Bfree(vcolhashead); vcolhashead = 0; } - return(vm); -} - -//Draw voxel model as perfect cubes -int32_t voxdraw(voxmodel_t *m, spritetype *tspr) -{ - point3d fp, m0, a0; - int32_t i, j, fi, xx, yy, zz; - float ru, rv, phack[2], clut[6] = {1,1,1,1,1,1}; //1.02,1.02,0.94,1.06,0.98,0.98}; - float f, g, k0, k1, k2, k3, k4, k5, k6, k7, mat[16], omat[16], pc[4]; - vert_t *vptr; - - if ((intptr_t)m == (intptr_t)(-1)) // hackhackhack - return 0; - if ((tspr->cstat&48)==32) return 0; - - //updateanimation((md2model *)m,tspr); - - m0.x = m->scale; - m0.y = m->scale; - m0.z = m->scale; - a0.x = a0.y = 0; a0.z = ((globalorientation&8)?-m->zadd:m->zadd)*m->scale; - - //if (globalorientation&8) //y-flipping - //{ - // m0.z = -m0.z; a0.z = -a0.z; - // //Add height of 1st frame (use same frame to prevent animation bounce) - // a0.z += m->zsiz*m->scale; - //} - //if (globalorientation&4) { m0.y = -m0.y; a0.y = -a0.y; } //x-flipping - - f = ((float)tspr->xrepeat)*(256.0/320.0)/64.0*m->bscale; - m0.x *= f; a0.x *= f; f = -f; - m0.y *= f; a0.y *= f; - f = ((float)tspr->yrepeat)/64.0*m->bscale; - m0.z *= f; a0.z *= f; - - k0 = (float)tspr->z; - if (globalorientation&128) k0 += (float)((tilesizy[tspr->picnum]*tspr->yrepeat)<<1); - - f = (65536.0*512.0)/((float)xdimen*viewingrange); - g = 32.0/((float)xdimen*gxyaspect); - m0.y *= f; a0.y = (((float)(tspr->x-globalposx))/ 1024.0 + a0.y)*f; - m0.x *=-f; a0.x = (((float)(tspr->y-globalposy))/ -1024.0 + a0.x)*-f; - m0.z *= g; a0.z = (((float)(k0 -globalposz))/-16384.0 + a0.z)*g; - - k0 = ((float)(tspr->x-globalposx))*f/1024.0; - k1 = ((float)(tspr->y-globalposy))*f/1024.0; - f = gcosang2*gshang; - g = gsinang2*gshang; - k4 = (float)sintable[(tspr->ang+spriteext[tspr->owner].angoff+1024)&2047] / 16384.0; - k5 = (float)sintable[(tspr->ang+spriteext[tspr->owner].angoff+ 512)&2047] / 16384.0; - k2 = k0*(1-k4)+k1*k5; - k3 = k1*(1-k4)-k0*k5; - k6 = f*gstang - gsinang*gctang; k7 = g*gstang + gcosang*gctang; - mat[0] = k4*k6 + k5*k7; mat[4] = gchang*gstang; mat[ 8] = k4*k7 - k5*k6; mat[12] = k2*k6 + k3*k7; - k6 = f*gctang + gsinang*gstang; k7 = g*gctang - gcosang*gstang; - mat[1] = k4*k6 + k5*k7; mat[5] = gchang*gctang; mat[ 9] = k4*k7 - k5*k6; mat[13] = k2*k6 + k3*k7; - k6 = gcosang2*gchang; k7 = gsinang2*gchang; - mat[2] = k4*k6 + k5*k7; mat[6] =-gshang; mat[10] = k4*k7 - k5*k6; mat[14] = k2*k6 + k3*k7; - - mat[12] += a0.y*mat[0] + a0.z*mat[4] + a0.x*mat[ 8]; - mat[13] += a0.y*mat[1] + a0.z*mat[5] + a0.x*mat[ 9]; - mat[14] += a0.y*mat[2] + a0.z*mat[6] + a0.x*mat[10]; - - //Mirrors - if (grhalfxdown10x < 0) { mat[0] = -mat[0]; mat[4] = -mat[4]; mat[8] = -mat[8]; mat[12] = -mat[12]; } - - //------------ - //bit 10 is an ugly hack in game.c\animatesprites telling MD2SPRITE - //to use Z-buffer hacks to hide overdraw problems with the shadows - if (tspr->cstat&1024) - { - bglDepthFunc(GL_LESS); //NEVER,LESS,(,L)EQUAL,GREATER,(NOT,G)EQUAL,ALWAYS - bglDepthRange(0.0,0.9999); - } - bglPushAttrib(GL_POLYGON_BIT); - if ((grhalfxdown10x >= 0) /*^ ((globalorientation&8) != 0) ^ ((globalorientation&4) != 0)*/) bglFrontFace(GL_CW); else bglFrontFace(GL_CCW); - bglEnable(GL_CULL_FACE); - bglCullFace(GL_BACK); - - bglEnable(GL_TEXTURE_2D); - - pc[0] = pc[1] = pc[2] = ((float)(numpalookups-min(max((globalshade * shadescale)+m->shadeoff,0),numpalookups)))/((float)numpalookups); - pc[0] *= (float)hictinting[globalpal].r / 255.0; - pc[1] *= (float)hictinting[globalpal].g / 255.0; - pc[2] *= (float)hictinting[globalpal].b / 255.0; - if (tspr->cstat&2) { if (!(tspr->cstat&512)) pc[3] = 0.66f; else pc[3] = 0.33f; } - else pc[3] = 1.0; - if (tspr->cstat&2) bglEnable(GL_BLEND); //else bglDisable(GL_BLEND); - //------------ - - //transform to Build coords - Bmemcpy(omat,mat,sizeof(omat)); - f = 1.f/64.f; - g = m0.x*f; mat[0] *= g; mat[1] *= g; mat[2] *= g; - g = m0.y*f; mat[4] = omat[8]*g; mat[5] = omat[9]*g; mat[6] = omat[10]*g; - g =-m0.z*f; mat[8] = omat[4]*g; mat[9] = omat[5]*g; mat[10] = omat[6]*g; - mat[12] -= (m->xpiv*mat[0] + m->ypiv*mat[4] + (m->zpiv+m->zsiz*.5)*mat[ 8]); - mat[13] -= (m->xpiv*mat[1] + m->ypiv*mat[5] + (m->zpiv+m->zsiz*.5)*mat[ 9]); - mat[14] -= (m->xpiv*mat[2] + m->ypiv*mat[6] + (m->zpiv+m->zsiz*.5)*mat[10]); - bglMatrixMode(GL_MODELVIEW); //Let OpenGL (and perhaps hardware :) handle the matrix rotation - mat[3] = mat[7] = mat[11] = 0.f; mat[15] = 1.f; - - bglLoadMatrixf(mat); - - ru = 1.f/((float)m->mytexx); - rv = 1.f/((float)m->mytexy); -#if (VOXBORDWIDTH == 0) - uhack[0] = ru*.125; uhack[1] = -uhack[0]; - vhack[0] = rv*.125; vhack[1] = -vhack[0]; -#endif - phack[0] = 0; phack[1] = 1.f/256.f; - - if (!m->texid[globalpal]) m->texid[globalpal] = gloadtex(m->mytex,m->mytexx,m->mytexy,m->is8bit,globalpal); - else bglBindTexture(GL_TEXTURE_2D,m->texid[globalpal]); - bglBegin(GL_QUADS); - for (i=0,fi=0; iqcnt; i++) - { - if (i == m->qfacind[fi]) { f = clut[fi++]; bglColor4f(pc[0]*f,pc[1]*f,pc[2]*f,pc[3]*f); } - vptr = &m->quad[i].v[0]; - - xx = vptr[0].x+vptr[2].x; - yy = vptr[0].y+vptr[2].y; - zz = vptr[0].z+vptr[2].z; - - for (j=0; j<4; j++) - { -#if (VOXBORDWIDTH == 0) - bglTexCoord2f(((float)vptr[j].u)*ru+uhack[vptr[j].u!=vptr[0].u], - ((float)vptr[j].v)*rv+vhack[vptr[j].v!=vptr[0].v]); -#else - bglTexCoord2f(((float)vptr[j].u)*ru,((float)vptr[j].v)*rv); -#endif - fp.x = ((float)vptr[j].x) - phack[xx>vptr[j].x*2] + phack[xxvptr[j].y*2] + phack[yyvptr[j].z*2] + phack[zzcstat&1024) - { - bglDepthFunc(GL_LESS); //NEVER,LESS,(,L)EQUAL,GREATER,(NOT,G)EQUAL,ALWAYS - bglDepthRange(0.0,0.99999); - } - bglLoadIdentity(); - return 1; -} - -//---------------------------------------- VOX LIBRARY ENDS ---------------------------------------- -//--------------------------------------- MD LIBRARY BEGINS --------------------------------------- - -mdmodel_t *mdload(const char *filnam) -{ - mdmodel_t *vm; - int32_t fil; - int32_t i; - - vm = (mdmodel_t *)voxload(filnam); if (vm) return(vm); - - fil = kopen4load((char *)filnam,0); if (fil < 0) return(0); - kread(fil,&i,4); klseek(fil,0,SEEK_SET); - - switch (B_LITTLE32(i)) - { - case 0x32504449: -// initprintf("Warning: model '%s' is version IDP2; wanted version IDP3\n",filnam); - vm = (mdmodel_t *)md2load(fil,filnam); - break; //IDP2 - case 0x33504449: - vm = (mdmodel_t *)md3load(fil); - break; //IDP3 - default: - vm = (mdmodel_t *)0; break; - } - kclose(fil); - - if (vm) - { - md3postload_common((md3model_t *)vm); -#ifdef POLYMER -// implies defined(POLYMOST) && defined(USE_OPENGL)? - if (glrendmode==4) - i = md3postload_polymer((md3model_t *)vm); - else - i = md3postload_polymer_check((md3model_t *)vm); - - if (!i) - { - mdfree(vm); - vm = (mdmodel_t *)0; - } -#endif - } - - return(vm); -} - -int32_t mddraw(spritetype *tspr) -{ - mdmodel_t *vm; - int32_t i; - - if (r_vbos && (r_vbocount > allocvbos)) - { - indexvbos = Brealloc(indexvbos, sizeof(GLuint) * r_vbocount); - vertvbos = Brealloc(vertvbos, sizeof(GLuint) * r_vbocount); - - bglGenBuffersARB(r_vbocount - allocvbos, &(indexvbos[allocvbos])); - bglGenBuffersARB(r_vbocount - allocvbos, &(vertvbos[allocvbos])); - - i = allocvbos; - while (i < r_vbocount) - { - bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, indexvbos[i]); - bglBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, maxmodeltris * 3 * sizeof(uint16_t), NULL, GL_STREAM_DRAW_ARB); - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, vertvbos[i]); - bglBufferDataARB(GL_ARRAY_BUFFER_ARB, maxmodelverts * sizeof(point3d), NULL, GL_STREAM_DRAW_ARB); - i++; - } - - bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB,0); - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); - - allocvbos = r_vbocount; - } - - if (maxmodelverts > allocmodelverts) - { - point3d *vl = (point3d *)Brealloc(vertlist,sizeof(point3d)*maxmodelverts); - if (!vl) { OSD_Printf("ERROR: Not enough memory to allocate %d vertices!\n",maxmodelverts); return 0; } - vertlist = vl; - allocmodelverts = maxmodelverts; - } - - vm = models[tile2model[Ptile2tile(tspr->picnum,(tspr->owner >= MAXSPRITES) ? tspr->pal : sprite[tspr->owner].pal)].modelid]; - if (vm->mdnum == 1) { return voxdraw((voxmodel_t *)vm,tspr); } - if (vm->mdnum == 3) { return md3draw((md3model_t *)vm,tspr); } - return 0; -} - -void mdfree(mdmodel_t *vm) -{ - if (vm->mdnum == 1) { voxfree((voxmodel_t *)vm); return; } - if (vm->mdnum == 2 || vm->mdnum == 3) { md3free((md3model_t *)vm); return; } -} - -#endif - -//---------------------------------------- MD LIBRARY ENDS ---------------------------------------- diff --git a/polymer-perf/eduke32/build/src/misc/buildres.rc b/polymer-perf/eduke32/build/src/misc/buildres.rc deleted file mode 100644 index 2caec07e1..000000000 --- a/polymer-perf/eduke32/build/src/misc/buildres.rc +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include -#include "startwin.editor.h" - -RSRC_ICON ICON "rsrc/build_icon.ico" -RSRC_BMP BITMAP "rsrc/build.bmp" - -WIN_STARTWIN DIALOGEX DISCARDABLE 20, 40, 260, 200 -STYLE DS_MODALFRAME | DS_CENTER | DS_SETFONT | DS_FIXEDSYS | WS_OVERLAPPED | WS_CAPTION | WS_VISIBLE | WS_SYSMENU -CAPTION "Startup" -FONT 8, "MS Shell Dlg" -BEGIN - CONTROL "", WIN_STARTWIN_BITMAP, "STATIC", SS_BITMAP | WS_CHILD | WS_VISIBLE, 0, 0, 32, 32 - CONTROL "", WIN_STARTWIN_TABCTL, WC_TABCONTROL, WS_CLIPSIBLINGS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 5, 5, 250, 170 - CONTROL "&Start", WIN_STARTWIN_START, "BUTTON", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 154, 180, 48, 14 - CONTROL "&Cancel", WIN_STARTWIN_CANCEL, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 207, 180, 48, 14 - - CONTROL "", WIN_STARTWIN_MESSAGES, "EDIT", ES_MULTILINE | ES_READONLY | WS_CHILD | WS_VSCROLL, 0, 0, 32, 32 -END - -WIN_STARTWINPAGE_CONFIG DIALOGEX DISCARDABLE 20, 40, 279, 168 -STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD -CAPTION "Dialog" -FONT 8, "MS Shell Dlg" -BEGIN - CONTROL "&2D Video mode:", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 5, 8, 50, 8 - CONTROL "", IDC2DVMODE, "COMBOBOX", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 60, 6, 80, 56 - CONTROL "&Fullscreen", IDCFULLSCREEN, "BUTTON", BS_CHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 148, 8, 49, 10 - CONTROL "&3D Video mode:", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 5, 24, 50, 8 - CONTROL "", IDC3DVMODE, "COMBOBOX", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 60, 22, 80, 56 - CONTROL "&Always show configuration on start", IDCALWAYSSHOW, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 118, 116, 140, 8 -END - diff --git a/polymer-perf/eduke32/build/src/misc/enumdisplay.c b/polymer-perf/eduke32/build/src/misc/enumdisplay.c deleted file mode 100644 index 313839b9f..000000000 --- a/polymer-perf/eduke32/build/src/misc/enumdisplay.c +++ /dev/null @@ -1,156 +0,0 @@ -#include -#define WIN32_LEAN_AND_MEAN -#include -#include - -#define DEFAULT_OUTPUT_FILE "enumdisplay.txt" -char *outputfile = DEFAULT_OUTPUT_FILE; - -HMODULE hDDrawDLL = NULL; -LPDIRECTDRAW lpDD = NULL; -FILE *output = NULL; - -void usage(void) -{ - printf( - "enumdisplay by Jonathon Fowler (jonof@edgenetwork.org)\n" - "Options:\n" - " -h, -?, --help This message\n" - " -o Use different output file (default: " - DEFAULT_OUTPUT_FILE ", use - for stdout)\n" - ); -} - -void dumpdevmode(DEVMODE *devmode) -{ - fprintf(output, "\tdmFields has"); - if (devmode->dmFields & DM_PELSWIDTH) fprintf(output, " DM_PELSWIDTH"); - if (devmode->dmFields & DM_PELSHEIGHT) fprintf(output, " DM_PELSHEIGHT"); - if (devmode->dmFields & DM_BITSPERPEL) fprintf(output, " DM_BITSPERPEL"); - fprintf(output, "\n\tdmPelsWidth = %d\n", devmode->dmPelsWidth); - fprintf(output, "\tdmPelsHeight = %d\n", devmode->dmPelsHeight); - fprintf(output, "\tdmBitsPerPel = %d\n", devmode->dmBitsPerPel); -} - -HRESULT WINAPI ddenum(DDSURFACEDESC *ddsd, VOID *udata) -{ - fprintf(output, "\tdwFlags has"); - if (ddsd->dwFlags & DDSD_WIDTH) fprintf(output, " DDSD_WIDTH"); - if (ddsd->dwFlags & DDSD_HEIGHT) fprintf(output, " DDSD_HEIGHT"); - if (ddsd->dwFlags & DDSD_PIXELFORMAT) fprintf(output, " DDSD_PIXELFORMAT"); - fprintf(output, "\n\tdwWidth = %d\n", ddsd->dwWidth); - fprintf(output, "\tdwHeight = %d\n", ddsd->dwHeight); - fprintf(output, "\tddpfPixelFormat.dwFlags has"); - if (ddsd->ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED1) fprintf(output, " DDPF_PALETTEINDEXED1"); - if (ddsd->ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED2) fprintf(output, " DDPF_PALETTEINDEXED2"); - if (ddsd->ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED4) fprintf(output, " DDPF_PALETTEINDEXED4"); - if (ddsd->ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) fprintf(output, " DDPF_PALETTEINDEXED8"); - if (ddsd->ddpfPixelFormat.dwFlags & DDPF_RGB) fprintf(output, " DDPF_RGB"); - fprintf(output, "\n\tddpfPixelFormat.dwRGBBitCount = %d\n", ddsd->ddpfPixelFormat.dwRGBBitCount); - fprintf(output, "\n"); - - return(DDENUMRET_OK); -} - -int InitDirectDraw(void) -{ - HRESULT result; - HRESULT (WINAPI *aDirectDrawCreate)(GUID *, LPDIRECTDRAW *, IUnknown *); - HRESULT (WINAPI *aDirectDrawEnumerate)(LPDDENUMCALLBACK, LPVOID); - DDCAPS ddcaps; - - hDDrawDLL = LoadLibrary("DDRAW.DLL"); - if (!hDDrawDLL) { fprintf(output, "Failed loading DDRAW.DLL\n"); return -1; } - - aDirectDrawEnumerate = (void *)GetProcAddress(hDDrawDLL, "DirectDrawEnumerateA"); - if (!aDirectDrawEnumerate) { fprintf(output, "Error fetching DirectDrawEnumerate\n"); return -1; } - - aDirectDrawCreate = (void *)GetProcAddress(hDDrawDLL, "DirectDrawCreate"); - if (!aDirectDrawCreate) { fprintf(output, "Error fetching DirectDrawCreate\n"); return -1; } - - result = aDirectDrawCreate(NULL, &lpDD, NULL); - if (result != DD_OK) { fprintf(output, "DirectDrawCreate() failed (%d)\n", result); return -1; } - - return 0; -} - -void UninitDirectDraw(void) -{ - if (lpDD) IDirectDraw_Release(lpDD); - lpDD = NULL; - if (hDDrawDLL) FreeLibrary(hDDrawDLL); - hDDrawDLL = NULL; -} - -int main(int argc, char **argv) -{ - int i; - - DEVMODE devmode; - HRESULT hresult; - - for (i=1; i -#include -#include "startwin.game.h" - -RSRC_ICON ICON "rsrc/game_icon.ico" -RSRC_BMP BITMAP "rsrc/game.bmp" - -WIN_STARTWIN DIALOGEX DISCARDABLE 20, 40, 260, 200 -STYLE DS_MODALFRAME | DS_CENTER | DS_SETFONT | DS_FIXEDSYS | WS_OVERLAPPED | WS_CAPTION | WS_VISIBLE | WS_SYSMENU -CAPTION "Startup" -FONT 8, "MS Shell Dlg" -BEGIN - CONTROL "", WIN_STARTWIN_BITMAP, "STATIC", SS_BITMAP | WS_CHILD | WS_VISIBLE, 0, 0, 32, 32 - CONTROL "", WIN_STARTWIN_TABCTL, WC_TABCONTROL, WS_CLIPSIBLINGS | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 5, 5, 250, 170 - CONTROL "&Start", WIN_STARTWIN_START, "BUTTON", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 154, 180, 48, 14 - CONTROL "&Cancel", WIN_STARTWIN_CANCEL, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 207, 180, 48, 14 - - CONTROL "", WIN_STARTWIN_MESSAGES, "EDIT", ES_MULTILINE | ES_READONLY | WS_CHILD | WS_VSCROLL, 0, 0, 32, 32 -END - -WIN_STARTWINPAGE_CONFIG DIALOGEX DISCARDABLE 20, 40, 279, 168 -STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD -CAPTION "Dialog" -FONT 8, "MS Shell Dlg" -BEGIN - CONTROL "&Video mode:", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 5, 8, 50, 8 - CONTROL "", IDC3DVMODE, "COMBOBOX", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 60, 6, 80, 56 - CONTROL "&Fullscreen", IDCFULLSCREEN, "BUTTON", BS_CHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 148, 8, 49, 10 - CONTROL "&Always show configuration on start", IDCALWAYSSHOW, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 118, 116, 140, 8 -END - diff --git a/polymer-perf/eduke32/build/src/misc/getdxdidf.c b/polymer-perf/eduke32/build/src/misc/getdxdidf.c deleted file mode 100644 index f0c7675c6..000000000 --- a/polymer-perf/eduke32/build/src/misc/getdxdidf.c +++ /dev/null @@ -1,129 +0,0 @@ -// compile with: -// gcc -o getdxdidf.exe src\getdxdidf.c -Ic:\mingw32\dx6\include -Lc:\mingw32\dx6\lib -ldxguid -ldinput -mwindows - -#define WIN32_LEAN_AND_MEAN -#define INITGUID -#include -#include -#include - - -char *WhatGUID(const GUID *guid) -{ - if (guid == &GUID_XAxis) return "&GUID_XAxis"; - if (guid == &GUID_YAxis) return "&GUID_YAxis"; - if (guid == &GUID_ZAxis) return "&GUID_ZAxis"; - if (guid == &GUID_RxAxis) return "&GUID_RxAxis"; - if (guid == &GUID_RyAxis) return "&GUID_RyAxis"; - if (guid == &GUID_RzAxis) return "&GUID_RzAxis"; - if (guid == &GUID_Slider) return "&GUID_Slider"; - - if (guid == &GUID_Button) return "&GUID_Button"; - if (guid == &GUID_Key) return "&GUID_Key"; - - if (guid == &GUID_POV) return "&GUID_POV"; - - if (guid == &GUID_Unknown) return "&GUID_Unknown"; - - return "NULL"; -} - - - -int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) -{ - FILE *fp; - DWORD i; - - fp = fopen("didf.txt", "w"); - if (!fp) return -1; - setvbuf(fp, NULL, _IONBF, 0); - - - fprintf(fp, - "// Keyboard\n" - "\n" - "static DIOBJECTDATAFORMAT c_dfDIKeyboard_odf[] = {\n" - ); - - for (i=0; i - - - - - - True - Startup - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER - False - False - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - - - - - True - False - 0 - - - - - 0 - False - False - - - - - - True - False - 0 - - - - 4 - True - True - True - True - GTK_POS_TOP - False - False - - - - True - False - 0 - - - - 6 - True - - - - 88 - 29 - True - _2D Video mode: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - vmode2dcombo - - - 0 - 0 - - - - - - 88 - 29 - True - _3D Video mode: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - vmode3dcombo - - - 0 - 32 - - - - - - 85 - 29 - True - True - _Fullscreen - True - GTK_RELIEF_NORMAL - True - False - False - True - - - - - 248 - 0 - - - - - - 150 - 29 - True - - - - - - 96 - 0 - - - - - - 150 - 29 - True - - - - - 96 - 32 - - - - - 0 - True - True - - - - - - True - True - _Always show configuration on start - True - GTK_RELIEF_NORMAL - True - False - False - True - - - - - 0 - False - False - - - - - False - True - - - - - - True - Configuration - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - tab - - - - - - True - True - GTK_POLICY_NEVER - GTK_POLICY_ALWAYS - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT - - - - True - True - False - False - True - GTK_JUSTIFY_LEFT - GTK_WRAP_WORD - False - 0 - 0 - 0 - 2 - 2 - 0 - - - - - - False - True - - - - - - True - Messages - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - tab - - - - - 0 - True - True - - - - - - 3 - True - GTK_BUTTONBOX_END - 0 - - - - True - True - True - GTK_RELIEF_NORMAL - True - - - - - - - True - 0.5 - 0.5 - 0 - 0 - 0 - 0 - 0 - 0 - - - - True - False - 2 - - - - True - gtk-cancel - 4 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - _Cancel - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - - - - - - - True - True - True - GTK_RELIEF_NORMAL - True - - - - - - - True - 0.5 - 0.5 - 0 - 0 - 0 - 0 - 0 - 0 - - - - True - False - 2 - - - - True - gtk-execute - 4 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - _Start - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - - - - - - 0 - False - True - - - - - 0 - True - True - - - - - - - diff --git a/polymer-perf/eduke32/build/src/misc/gtkstartwin/gtkstartwin.gladep b/polymer-perf/eduke32/build/src/misc/gtkstartwin/gtkstartwin.gladep deleted file mode 100644 index e27cd5bd5..000000000 --- a/polymer-perf/eduke32/build/src/misc/gtkstartwin/gtkstartwin.gladep +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Gtkstartwin - gtkstartwin - FALSE - FALSE - FALSE - FALSE - diff --git a/polymer-perf/eduke32/build/src/misc/gtkstartwin/pixmaps/game.bmp b/polymer-perf/eduke32/build/src/misc/gtkstartwin/pixmaps/game.bmp deleted file mode 100644 index c079eef46a85321cdf1dbb0b5c46b7307b0c65aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40960 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 diff --git a/polymer-perf/eduke32/build/src/misc/makesdlkeytrans.c b/polymer-perf/eduke32/build/src/misc/makesdlkeytrans.c deleted file mode 100644 index e34271078..000000000 --- a/polymer-perf/eduke32/build/src/misc/makesdlkeytrans.c +++ /dev/null @@ -1,163 +0,0 @@ -// gcc b.c -Lc:/mingw32/lib -lmingw32 -lSDLmain -lSDL - -#include -#include "SDL/SDL.h" - -int keytranslation[SDLK_LAST]; -char *keysyms[SDLK_LAST]; - -static int buildkeytranslationtable(void) -{ - memset(keytranslation,0,sizeof(keytranslation)); - memset(keysyms,0,sizeof(keysyms)); - -#define MAP(x,y) { \ - keytranslation[x] = y; \ - keysyms[x] = #x ; \ -} - MAP(SDLK_BACKSPACE, 0xe); - MAP(SDLK_TAB, 0xf); - MAP(SDLK_RETURN, 0x1c); - MAP(SDLK_PAUSE, 0x59); // 0x1d + 0x45 + 0x9d + 0xc5 - MAP(SDLK_ESCAPE, 0x1); - MAP(SDLK_SPACE, 0x39); - MAP(SDLK_EXCLAIM, 0x2); // '1' - MAP(SDLK_QUOTEDBL, 0x28); // ''' - MAP(SDLK_HASH, 0x4); // '3' - MAP(SDLK_DOLLAR, 0x5); // '4' - MAP(37, 0x6); // '5' <-- where's the keysym SDL guys? - MAP(SDLK_AMPERSAND, 0x8); // '7' - MAP(SDLK_QUOTE, 0x28); // ''' - MAP(SDLK_LEFTPAREN, 0xa); // '9' - MAP(SDLK_RIGHTPAREN, 0xb); // '0' - MAP(SDLK_ASTERISK, 0x9); // '8' - MAP(SDLK_PLUS, 0xd); // '=' - MAP(SDLK_COMMA, 0x33); - MAP(SDLK_MINUS, 0xc); - MAP(SDLK_PERIOD, 0x34); - MAP(SDLK_SLASH, 0x35); - MAP(SDLK_0, 0xb); - MAP(SDLK_1, 0x2); - MAP(SDLK_2, 0x3); - MAP(SDLK_3, 0x4); - MAP(SDLK_4, 0x5); - MAP(SDLK_5, 0x6); - MAP(SDLK_6, 0x7); - MAP(SDLK_7, 0x8); - MAP(SDLK_8, 0x9); - MAP(SDLK_9, 0xa); - MAP(SDLK_COLON, 0x27); - MAP(SDLK_SEMICOLON, 0x27); - MAP(SDLK_LESS, 0x33); - MAP(SDLK_EQUALS, 0xd); - MAP(SDLK_GREATER, 0x34); - MAP(SDLK_QUESTION, 0x35); - MAP(SDLK_AT, 0x3); // '2' - MAP(SDLK_LEFTBRACKET, 0x1a); - MAP(SDLK_BACKSLASH, 0x2b); - MAP(SDLK_RIGHTBRACKET, 0x1b); - MAP(SDLK_CARET, 0x7); // '7' - MAP(SDLK_UNDERSCORE, 0xc); - MAP(SDLK_BACKQUOTE, 0x29); - MAP(SDLK_a, 0x1e); - MAP(SDLK_b, 0x30); - MAP(SDLK_c, 0x2e); - MAP(SDLK_d, 0x20); - MAP(SDLK_e, 0x12); - MAP(SDLK_f, 0x21); - MAP(SDLK_g, 0x22); - MAP(SDLK_h, 0x23); - MAP(SDLK_i, 0x17); - MAP(SDLK_j, 0x24); - MAP(SDLK_k, 0x25); - MAP(SDLK_l, 0x26); - MAP(SDLK_m, 0x32); - MAP(SDLK_n, 0x31); - MAP(SDLK_o, 0x18); - MAP(SDLK_p, 0x19); - MAP(SDLK_q, 0x10); - MAP(SDLK_r, 0x13); - MAP(SDLK_s, 0x1f); - MAP(SDLK_t, 0x14); - MAP(SDLK_u, 0x16); - MAP(SDLK_v, 0x2f); - MAP(SDLK_w, 0x11); - MAP(SDLK_x, 0x2d); - MAP(SDLK_y, 0x15); - MAP(SDLK_z, 0x2c); - MAP(SDLK_DELETE, 0xd3); - MAP(SDLK_KP0, 0x52); - MAP(SDLK_KP1, 0x4f); - MAP(SDLK_KP2, 0x50); - MAP(SDLK_KP3, 0x51); - MAP(SDLK_KP4, 0x4b); - MAP(SDLK_KP5, 0x4c); - MAP(SDLK_KP6, 0x4d); - MAP(SDLK_KP7, 0x47); - MAP(SDLK_KP8, 0x48); - MAP(SDLK_KP9, 0x49); - MAP(SDLK_KP_PERIOD, 0x53); - MAP(SDLK_KP_DIVIDE, 0xb5); - MAP(SDLK_KP_MULTIPLY, 0x37); - MAP(SDLK_KP_MINUS, 0x4a); - MAP(SDLK_KP_PLUS, 0x4e); - MAP(SDLK_KP_ENTER, 0x9c); - //MAP(SDLK_KP_EQUALS, ); - MAP(SDLK_UP, 0xc8); - MAP(SDLK_DOWN, 0xd0); - MAP(SDLK_RIGHT, 0xcd); - MAP(SDLK_LEFT, 0xcb); - MAP(SDLK_INSERT, 0xd2); - MAP(SDLK_HOME, 0xc7); - MAP(SDLK_END, 0xcf); - MAP(SDLK_PAGEUP, 0xc9); - MAP(SDLK_PAGEDOWN, 0xd1); - MAP(SDLK_F1, 0x3b); - MAP(SDLK_F2, 0x3c); - MAP(SDLK_F3, 0x3d); - MAP(SDLK_F4, 0x3e); - MAP(SDLK_F5, 0x3f); - MAP(SDLK_F6, 0x40); - MAP(SDLK_F7, 0x41); - MAP(SDLK_F8, 0x42); - MAP(SDLK_F9, 0x43); - MAP(SDLK_F10, 0x44); - MAP(SDLK_F11, 0x57); - MAP(SDLK_F12, 0x58); - MAP(SDLK_NUMLOCK, 0x45); - MAP(SDLK_CAPSLOCK, 0x3a); - MAP(SDLK_SCROLLOCK, 0x46); - MAP(SDLK_RSHIFT, 0x36); - MAP(SDLK_LSHIFT, 0x2a); - MAP(SDLK_RCTRL, 0x9d); - MAP(SDLK_LCTRL, 0x1d); - MAP(SDLK_RALT, 0xb8); - MAP(SDLK_LALT, 0x38); - MAP(SDLK_LSUPER, 0xdb); // win l - MAP(SDLK_RSUPER, 0xdc); // win r - MAP(SDLK_PRINT, -2); // 0xaa + 0xb7 - MAP(SDLK_SYSREQ, 0x54); // alt+printscr - MAP(SDLK_BREAK, 0xb7); // ctrl+pause - MAP(SDLK_MENU, 0xdd); // win menu? -#undef MAP - - return 0; -} - -#undef main - -int main(int argc, char **argv) -{ - int i; - - buildkeytranslationtable(); - - for (i=0;i0) printf(", "); - if (i%8 == 7) printf("\n"); - printf("%d",keytranslation[i]); - } - - return 0; -} - diff --git a/polymer-perf/eduke32/build/src/mutex.c b/polymer-perf/eduke32/build/src/mutex.c deleted file mode 100644 index 6f7c78c3c..000000000 --- a/polymer-perf/eduke32/build/src/mutex.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "compat.h" -#include "mutex.h" - -int32_t mutex_init(mutex_t *mutex) -{ -#ifdef _WIN32 - *mutex = CreateMutex(0, FALSE, 0); - return (*mutex == 0); -#else - return pthread_mutex_init(mutex, NULL); -#endif - return -1; -} - -int32_t mutex_lock(mutex_t *mutex) -{ -#ifdef _WIN32 - return (WaitForSingleObject(*mutex, INFINITE) == WAIT_FAILED); -#else - return pthread_mutex_lock(mutex); -#endif - return -1; -} - -int32_t mutex_unlock(mutex_t *mutex) -{ -#ifdef _WIN32 - return (ReleaseMutex(*mutex) == 0); -#else - return pthread_mutex_unlock(mutex); -#endif - return -1; -} - - diff --git a/polymer-perf/eduke32/build/src/nedmalloc.c b/polymer-perf/eduke32/build/src/nedmalloc.c deleted file mode 100644 index 68ab11a85..000000000 --- a/polymer-perf/eduke32/build/src/nedmalloc.c +++ /dev/null @@ -1,1603 +0,0 @@ -/* Alternative malloc implementation for multiple threads without -lock contention based on dlmalloc. (C) 2005-2009 Niall Douglas - -Boost Software License - Version 1.0 - August 17th, 2003 - -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -*/ - -#include "compat.h" - -#ifdef _MSC_VER -/* Enable full aliasing on MSVC */ -/*#pragma optimize("a", on)*/ -#pragma warning(push) -#pragma warning(disable:4100) /* unreferenced formal parameter */ -#pragma warning(disable:4127) /* conditional expression is constant */ -#pragma warning(disable:4232) /* address of dllimport is not static, identity not guaranteed */ -#pragma warning(disable:4706) /* assignment within conditional expression */ -#endif - -/*#define ENABLE_TOLERANT_NEDMALLOC 1*/ -/*#define ENABLE_FAST_HEAP_DETECTION 1*/ -/*#define NEDMALLOC_DEBUG 1*/ - -/*#define FULLSANITYCHECKS*/ -/* If link time code generation is on, don't force or prevent inlining */ -#if defined(_MSC_VER) && defined(NEDMALLOC_DLL_EXPORTS) -// #define FORCEINLINE -// #define NOINLINE -#endif - -#include "nedmalloc.h" -#if defined(_WIN32) -#include -#endif -#if defined(__linux__) || defined(__FreeBSD__) -/* Sadly we can't include as it causes a redefinition error */ -extern size_t malloc_usable_size(void *); -#endif -#if defined(__APPLE__) -/* PK: for malloc_size(): */ -#include -#endif -#if USE_ALLOCATOR==1 -#define MSPACES 1 -#define ONLY_MSPACES 1 -#endif -#define USE_DL_PREFIX 1 -#ifndef USE_LOCKS -#define USE_LOCKS 1 -#endif -#define FOOTERS 1 /* Need to enable footers so frees lock the right mspace */ -#ifndef NEDMALLOC_DEBUG -#if defined(DEBUG) || defined(_DEBUG) -#define NEDMALLOC_DEBUG 1 -#else -#define NEDMALLOC_DEBUG 0 -#endif -#endif -/* We need to consistently define DEBUG=0|1, _DEBUG and NDEBUG for dlmalloc */ -#undef DEBUG -#undef _DEBUG -#if NEDMALLOC_DEBUG -#define _DEBUG -#define DEBUG 1 -#else -#define DEBUG 0 -#endif -#ifdef NDEBUG /* Disable assert checking on release builds */ -#undef DEBUG -#undef _DEBUG -#endif -/* The default of 64Kb means we spend too much time kernel-side */ -#ifndef DEFAULT_GRANULARITY -#define DEFAULT_GRANULARITY (1*1024*1024) -#if DEBUG -#define DEFAULT_GRANULARITY_ALIGNED -#endif -#endif -/*#define USE_SPIN_LOCKS 0*/ - - -#include "malloc.c.h" -#ifdef NDEBUG /* Disable assert checking on release builds */ -#undef DEBUG -#elif !NEDMALLOC_DEBUG -#ifdef __GNUC__ -#warning DEBUG is defined so allocator will run with assert checking! Define NDEBUG to run at full speed. -#elif defined(_MSC_VER) -#pragma message(__FILE__ ": WARNING: DEBUG is defined so allocator will run with assert checking! Define NDEBUG to run at full speed.") -#endif -#endif - -/* The maximum concurrent threads in a pool possible */ -#ifndef MAXTHREADSINPOOL -#define MAXTHREADSINPOOL 16 -#endif -/* The maximum number of threadcaches which can be allocated */ -#ifndef THREADCACHEMAXCACHES -#define THREADCACHEMAXCACHES 256 -#endif -/* The maximum size to be allocated from the thread cache */ -#ifndef THREADCACHEMAX -#define THREADCACHEMAX 8192 -#elif THREADCACHEMAX && !defined(THREADCACHEMAXBINS) -#ifdef __GNUC__ -#warning If you are changing THREADCACHEMAX, do you also need to change THREADCACHEMAXBINS=(topbitpos(THREADCACHEMAX)-4)? -#elif defined(_MSC_VER) -#pragma message(__FILE__ ": WARNING: If you are changing THREADCACHEMAX, do you also need to change THREADCACHEMAXBINS=(topbitpos(THREADCACHEMAX)-4)?") -#endif -#endif -#ifndef THREADCACHEMAXBINS -#ifdef FINEGRAINEDBINS -/* The number of cache entries for finer grained bins. This is (topbitpos(THREADCACHEMAX)-4)*2 */ -#define THREADCACHEMAXBINS ((13-4)*2) -#else -/* The number of cache entries. This is (topbitpos(THREADCACHEMAX)-4) */ -#define THREADCACHEMAXBINS (13-4) -#endif -#endif -/* Point at which the free space in a thread cache is garbage collected */ -#ifndef THREADCACHEMAXFREESPACE -#define THREADCACHEMAXFREESPACE (512*1024) -#endif - - -#if USE_LOCKS -#ifdef WIN32 -#define TLSVAR DWORD -#define TLSALLOC(k) (*(k)=TlsAlloc(), TLS_OUT_OF_INDEXES==*(k)) -#define TLSFREE(k) (!TlsFree(k)) -#define TLSGET(k) TlsGetValue(k) -#define TLSSET(k, a) (!TlsSetValue(k, a)) -#ifdef DEBUG -static LPVOID ChkedTlsGetValue(DWORD idx) -{ - LPVOID ret=TlsGetValue(idx); - assert(S_OK==GetLastError()); - return ret; -} -#undef TLSGET -#define TLSGET(k) ChkedTlsGetValue(k) -#endif -#else -#define TLSVAR pthread_key_t -#define TLSALLOC(k) pthread_key_create(k, 0) -#define TLSFREE(k) pthread_key_delete(k) -#define TLSGET(k) pthread_getspecific(k) -#define TLSSET(k, a) pthread_setspecific(k, a) -#endif -#else /* Probably if you're not using locks then you don't want ANY pthread stuff at all */ -#define TLSVAR void * -#define TLSALLOC(k) (*k=0) -#define TLSFREE(k) (k=0) -#define TLSGET(k) k -#define TLSSET(k, a) (k=a, 0) -#endif - -#if defined(__cplusplus) -#if !defined(NO_NED_NAMESPACE) -namespace nedalloc -{ -#else -extern "C" { -#endif -#endif - -#if USE_ALLOCATOR==0 -static void *unsupported_operation(const char *opname) THROWSPEC -{ - fprintf(stderr, "nedmalloc: The operation %s is not supported under this build configuration\n", opname); - abort(); - return 0; -} -static size_t mspacecounter=(size_t) 0xdeadbeef; -#endif -#ifndef ENABLE_FAST_HEAP_DETECTION -static void *RESTRICT leastusedaddress; -static size_t largestusedblock; -#endif -/* Used to redirect system allocator ops if needed */ -extern void *(*sysmalloc)(size_t); -extern void *(*syscalloc)(size_t, size_t); -extern void *(*sysrealloc)(void *, size_t); -extern void (*sysfree)(void *); -extern size_t (*sysblksize)(void *); - -void *(*sysmalloc)(size_t)=malloc; -void *(*syscalloc)(size_t, size_t)=calloc; -void *(*sysrealloc)(void *, size_t)=realloc; -void (*sysfree)(void *)=free; -size_t (*sysblksize)(void *)= -#ifdef WIN32 - /* This is the MSVCRT equivalent */ - _msize; -#elif defined(__linux__) || defined(__FreeBSD__) - /* This is the glibc/ptmalloc2/dlmalloc equivalent. */ - malloc_usable_size; -#elif defined(__APPLE__) - /* This is the BSD libc equivalent. */ - malloc_size; -#else -#error Cannot tolerate the memory allocator of an unknown system! -#endif - -static FORCEINLINE NEDMALLOCNOALIASATTR NEDMALLOCPTRATTR void *CallMalloc(void *RESTRICT mspace, size_t size, size_t alignment) THROWSPEC -{ - void *RESTRICT ret=0; - size_t _alignment=alignment; -#if USE_MAGIC_HEADERS - size_t *_ret=0; - size+=alignment+3*sizeof(size_t); - _alignment=0; -#endif -#if USE_ALLOCATOR==0 - ret=sysmalloc(size); /* magic headers takes care of alignment */ -#elif USE_ALLOCATOR==1 - ret=_alignment ? mspace_memalign((mstate) mspace, _alignment, size) : mspace_malloc((mstate) mspace, size); -#ifndef ENABLE_FAST_HEAP_DETECTION - if (ret) - { - size_t truesize=chunksize(mem2chunk(ret)); - if (!leastusedaddress || (void *)((mstate) mspace)->least_addrleast_addr; - if (!largestusedblock || truesize>largestusedblock) largestusedblock=(truesize+mparams.page_size) & ~(mparams.page_size-1); - } -#endif -#endif - if (!ret) return 0; -#if USE_MAGIC_HEADERS - _ret=(size_t *) ret; - ret=(void *)(_ret+3); - if (alignment) ret=(void *)(((size_t) ret+alignment-1)&~(alignment-1)); - for (; _ret<(size_t *)ret-2; _ret++) *_ret=*(size_t *)"NEDMALOC"; - _ret[0]=(size_t) mspace; - _ret[1]=size-3*sizeof(size_t); -#endif - return ret; -} - -static FORCEINLINE NEDMALLOCNOALIASATTR NEDMALLOCPTRATTR void *CallCalloc(void *RESTRICT mspace, size_t size, size_t alignment) THROWSPEC -{ - void *RESTRICT ret=0; -#if USE_MAGIC_HEADERS - size_t *_ret=0; - size+=alignment+3*sizeof(size_t); -#endif -#if USE_ALLOCATOR==0 - ret=syscalloc(1, size); -#elif USE_ALLOCATOR==1 - ret=mspace_calloc((mstate) mspace, 1, size); -#ifndef ENABLE_FAST_HEAP_DETECTION - if (ret) - { - size_t truesize=chunksize(mem2chunk(ret)); - if (!leastusedaddress || (void *)((mstate) mspace)->least_addrleast_addr; - if (!largestusedblock || truesize>largestusedblock) largestusedblock=(truesize+mparams.page_size) & ~(mparams.page_size-1); - } -#endif -#endif - if (!ret) return 0; -#if USE_MAGIC_HEADERS - _ret=(size_t *) ret; - ret=(void *)(_ret+3); - if (alignment) ret=(void *)(((size_t) ret+alignment-1)&~(alignment-1)); - for (; _ret<(size_t *)ret-2; _ret++) *_ret=*(size_t *) "NEDMALOC"; - _ret[0]=(size_t) mspace; - _ret[1]=size-3*sizeof(size_t); -#endif - return ret; -} - -static FORCEINLINE NEDMALLOCNOALIASATTR NEDMALLOCPTRATTR void *CallRealloc(void *RESTRICT mspace, void *RESTRICT mem, int isforeign, size_t oldsize, size_t newsize) THROWSPEC -{ - void *RESTRICT ret=0; -#if USE_MAGIC_HEADERS - mstate oldmspace=0; - size_t *_ret=0, *_mem=(size_t *) mem-3; -#endif - if (isforeign) - { - /* Transfer */ -#if USE_MAGIC_HEADERS - assert(_mem[0]!=*(size_t *) "NEDMALOC"); -#endif - if ((ret=CallMalloc(mspace, newsize, 0))) - { -#if defined(DEBUG) - printf("*** nedmalloc frees system allocated block %p\n", mem); -#endif - memcpy(ret, mem, oldsize=_mem[2]); - for (; *_mem==*(size_t *) "NEDMALOC"; *_mem--=*(size_t *) "nedmaloc"); - mem=(void *)(++_mem); -#endif -#if USE_ALLOCATOR==0 - ret=sysrealloc(mem, newsize); -#elif USE_ALLOCATOR==1 - ret=mspace_realloc((mstate) mspace, mem, newsize); -#ifndef ENABLE_FAST_HEAP_DETECTION - if (ret) - { - size_t truesize=chunksize(mem2chunk(ret)); - if (!largestusedblock || truesize>largestusedblock) largestusedblock=(truesize+mparams.page_size) & ~(mparams.page_size-1); - } -#endif -#endif - if (!ret) - { - /* Put it back the way it was */ -#if USE_MAGIC_HEADERS - for (; *_mem==0; *_mem++=*(size_t *) "NEDMALOC"); -#endif - return 0; - } -#if USE_MAGIC_HEADERS - _ret=(size_t *) ret; - ret=(void *)(_ret+3); - for (; _ret<(size_t *)ret-2; _ret++) *_ret=*(size_t *) "NEDMALOC"; - _ret[0]=(size_t) mspace; - _ret[1]=newsize-3*sizeof(size_t); -#endif - return ret; -} - -static FORCEINLINE void CallFree(void *RESTRICT mspace, void *RESTRICT mem, int isforeign) THROWSPEC -{ -#if USE_MAGIC_HEADERS - mstate oldmspace=0; - size_t *_mem=(size_t *) mem-3, oldsize=0; -#endif - if (isforeign) - { -#if USE_MAGIC_HEADERS - assert(_mem[0]!=*(size_t *) "NEDMALOC"); -#endif -#if defined(DEBUG) - printf("*** nedmalloc frees system allocated block %p\n", mem); -#endif - sysfree(mem); - return; - } -#if USE_MAGIC_HEADERS - assert(_mem[0]==*(size_t *) "NEDMALOC"); - oldmspace=(mstate) _mem[1]; - oldsize=_mem[2]; - for (; *_mem==*(size_t *) "NEDMALOC"; *_mem--=*(size_t *) "nedmaloc"); - mem=(void *)(++_mem); -#endif -#if USE_ALLOCATOR==0 - sysfree(mem); -#elif USE_ALLOCATOR==1 - mspace_free((mstate) mspace, mem); -#endif -} - -static NEDMALLOCNOALIASATTR mstate nedblkmstate(void *RESTRICT mem) THROWSPEC -{ - if (mem) - { -#if USE_MAGIC_HEADERS - size_t *_mem=(size_t *) mem-3; - if (_mem[0]==*(size_t *) "NEDMALOC") - { - return (mstate) _mem[1]; - } - else return 0; -#else -#if USE_ALLOCATOR==0 - /* Fail everything */ - return 0; -#elif USE_ALLOCATOR==1 -#ifdef ENABLE_FAST_HEAP_DETECTION -#ifdef WIN32 - /* On Windows for RELEASE both x86 and x64 the NT heap precedes each block with an eight byte header - which looks like: - normal: 4 bytes of size, 4 bytes of [char < 64, char < 64, char < 64 bit 0 always set, char random ] - mmaped: 4 bytes of size 4 bytes of [zero, zero, 0xb, zero ] - - On Windows for DEBUG both x86 and x64 the preceding four bytes is always 0xfdfdfdfd (no man's land). - */ -#pragma pack(push, 1) - struct _HEAP_ENTRY - { - USHORT Size; - USHORT PreviousSize; - UCHAR Cookie; /* SegmentIndex */ - UCHAR Flags; /* always bit 0 (HEAP_ENTRY_BUSY). bit 1=(HEAP_ENTRY_EXTRA_PRESENT), bit 2=normal block (HEAP_ENTRY_FILL_PATTERN), bit 3=mmap block (HEAP_ENTRY_VIRTUAL_ALLOC). Bit 4 (HEAP_ENTRY_LAST_ENTRY) could be set */ - UCHAR UnusedBytes; - UCHAR SmallTagIndex; /* fastbin index. Always one of 0x02, 0x03, 0x04 < 0x80 */ - } *RESTRICT he=((struct _HEAP_ENTRY *) mem)-1; -#pragma pack(pop) - unsigned int header=((unsigned int *)mem)[-1], mask1=0x8080E100, result1, mask2=0xFFFFFF06, result2; - result1=header & mask1; /* Positive testing for NT heap */ - result2=header & mask2; /* Positive testing for dlmalloc */ - if (result1==0x00000100 && result2!=0x00000102) - { - /* This is likely a NT heap block */ - return 0; - } -#endif -#ifdef __linux__ - /* On Linux glibc uses ptmalloc2 (really dlmalloc) just as we do, but prev_foot contains rubbish - when the preceding block is allocated because ptmalloc2 finds the local mstate by rounding the ptr - down to the nearest megabyte. It's like dlmalloc with FOOTERS disabled. */ - mchunkptr p=mem2chunk(mem); - mstate fm=get_mstate_for(p); - /* If it's a ptmalloc2 block, fm is likely to be some crazy value */ - if (!is_aligned(fm)) return 0; - if ((size_t)mem-(size_t)fm>=(size_t)1<<(SIZE_T_BITSIZE-1)) return 0; - if (ok_magic(fm)) - return fm; - else - return 0; - if (1) { } -#endif - else - { - mchunkptr p=mem2chunk(mem); - mstate fm=get_mstate_for(p); - assert(ok_magic(fm)); /* If this fails, someone tried to free a block twice */ - if (ok_magic(fm)) - return fm; - } -#else -#ifdef WIN32 -#ifdef _MSC_VER - __try -#elif defined(__MINGW32__) - __try1 -#endif -#endif - { - /* We try to return zero here if it isn't one of our own blocks, however - the current block annotation scheme used by dlmalloc makes it impossible - to be absolutely sure of avoiding a segfault. - - mchunkptr->prev_foot = mem-(2*size_t) = mstate ^ mparams.magic for PRECEDING block; - mchunkptr->head = mem-(1*size_t) = 8 multiple size of this block with bottom three bits = FLAG_BITS - FLAG_BITS = bit 0 is CINUSE (currently in use unless is mmap), bit 1 is PINUSE (previous block currently - in use unless mmap), bit 2 is UNUSED and currently is always zero. - */ - register void *RESTRICT leastusedaddress_=leastusedaddress; /* Cache these to avoid register reloading */ - register size_t largestusedblock_=largestusedblock; - if (!is_aligned(mem)) return 0; /* Would fail very rarely as all allocators return aligned blocks */ - if (memhead &FLAG4_BIT)) return 0; - /* Reduced uncertainty by 0.5^2 = 25.0% */ - /* size should never exceed largestusedblock */ - if (chunksize(p)>largestusedblock_) return 0; - /* Reduced uncertainty by a minimum of 0.5^3 = 12.5%, maximum 0.5^16 = 0.0015% */ - /* Having sanity checked prev_foot and head, check next block */ - if (!ismmapped && (!next_pinuse(p) || (next_chunk(p)->head &FLAG4_BIT))) return 0; - /* Reduced uncertainty by 0.5^5 = 3.13% or 0.5^18 = 0.00038% */ -#if 0 - /* If previous block is free, check that its next block pointer equals us */ - if (!ismmapped && !pinuse(p)) - if (next_chunk(prev_chunk(p))!=p) return 0; - /* We could start comparing prev_foot's for similarity but it starts getting slow. */ -#endif - fm = get_mstate_for(p); - if (!is_aligned(fm) || (void *)fm=(size_t)1<<(SIZE_T_BITSIZE-1)) return 0; - assert(ok_magic(fm)); /* If this fails, someone tried to free a block twice */ - if (ok_magic(fm)) - return fm; - } - } -#ifdef WIN32 -#ifdef _MSC_VER - __except(1) { } -#elif defined(__MINGW32__) - __except1(1) { } -#endif -#endif -#endif -#endif -#endif - } - return 0; -} -NEDMALLOCNOALIASATTR size_t nedblksize(int *RESTRICT isforeign, void *RESTRICT mem) THROWSPEC -{ - if (mem) - { - if (isforeign) *isforeign=1; -#if USE_MAGIC_HEADERS - { - size_t *_mem=(size_t *) mem-3; - if (_mem[0]==*(size_t *) "NEDMALOC") - { - //mstate mspace=(mstate) _mem[1]; - size_t size=_mem[2]; - if (isforeign) *isforeign=0; - return size; - } - } -#elif USE_ALLOCATOR==1 - if (nedblkmstate(mem)) - { - mchunkptr p=mem2chunk(mem); - if (isforeign) *isforeign=0; - return chunksize(p)-overhead_for(p); - } -#ifdef DEBUG - else - { - int a=1; /* Set breakpoints here if needed */ - } -#endif -#endif -#if defined(ENABLE_TOLERANT_NEDMALLOC) || USE_ALLOCATOR==0 - return sysblksize(mem); -#endif - } - return 0; -} - -NEDMALLOCNOALIASATTR void nedsetvalue(void *v) THROWSPEC { nedpsetvalue((nedpool *) 0, v); } -NEDMALLOCNOALIASATTR NEDMALLOCPTRATTR void *nedmalloc(size_t size) THROWSPEC { return nedpmalloc((nedpool *) 0, size); } -NEDMALLOCNOALIASATTR NEDMALLOCPTRATTR void *nedcalloc(size_t no, size_t size) THROWSPEC { return nedpcalloc((nedpool *) 0, no, size); } -NEDMALLOCNOALIASATTR NEDMALLOCPTRATTR void *nedrealloc(void *mem, size_t size) THROWSPEC { return nedprealloc((nedpool *) 0, mem, size); } -NEDMALLOCNOALIASATTR void nedfree(void *mem) THROWSPEC { nedpfree((nedpool *) 0, mem); } -NEDMALLOCNOALIASATTR NEDMALLOCPTRATTR void *nedmemalign(size_t alignment, size_t bytes) THROWSPEC { return nedpmemalign((nedpool *) 0, alignment, bytes); } -NEDMALLOCNOALIASATTR struct nedmallinfo nedmallinfo(void) THROWSPEC { return nedpmallinfo((nedpool *) 0); } -NEDMALLOCNOALIASATTR int nedmallopt(int parno, int value) THROWSPEC { return nedpmallopt((nedpool *) 0, parno, value); } -NEDMALLOCNOALIASATTR int nedmalloc_trim(size_t pad) THROWSPEC { return nedpmalloc_trim((nedpool *) 0, pad); } -void nedmalloc_stats() THROWSPEC { nedpmalloc_stats((nedpool *) 0); } -NEDMALLOCNOALIASATTR size_t nedmalloc_footprint() THROWSPEC { return nedpmalloc_footprint((nedpool *) 0); } -NEDMALLOCNOALIASATTR NEDMALLOCPTRATTR void **nedindependent_calloc(size_t elemsno, size_t elemsize, void **chunks) THROWSPEC { return nedpindependent_calloc((nedpool *) 0, elemsno, elemsize, chunks); } -NEDMALLOCNOALIASATTR NEDMALLOCPTRATTR void **nedindependent_comalloc(size_t elems, size_t *sizes, void **chunks) THROWSPEC { return nedpindependent_comalloc((nedpool *) 0, elems, sizes, chunks); } - -struct threadcacheblk_t; -typedef struct threadcacheblk_t threadcacheblk; -struct threadcacheblk_t -{ - /* Keep less than 16 bytes on 32 bit systems and 32 bytes on 64 bit systems */ -#ifdef FULLSANITYCHECKS - unsigned int magic; -#endif - unsigned int lastUsed, size; - threadcacheblk *next, *prev; -}; -typedef struct threadcache_t -{ -#ifdef FULLSANITYCHECKS - unsigned int magic1; -#endif - int mymspace; /* Last mspace entry this thread used */ - long threadid; - unsigned int mallocs, frees, successes; - size_t freeInCache; /* How much free space is stored in this cache */ - threadcacheblk *bins[(THREADCACHEMAXBINS+1)*2]; -#ifdef FULLSANITYCHECKS - unsigned int magic2; -#endif -} threadcache; -struct nedpool_t -{ -#if USE_LOCKS - MLOCK_T mutex; -#endif - void *uservalue; - int threads; /* Max entries in m to use */ - threadcache *caches[THREADCACHEMAXCACHES]; - TLSVAR mycache; /* Thread cache for this thread. 0 for unset, negative for use mspace-1 directly, otherwise is cache-1 */ - mstate m[MAXTHREADSINPOOL+1]; /* mspace entries for this pool */ -}; -static nedpool syspool; - -static FORCEINLINE NEDMALLOCNOALIASATTR unsigned int size2binidx(size_t _size) THROWSPEC -{ - /* 8=1000 16=10000 20=10100 24=11000 32=100000 48=110000 4096=1000000000000 */ - unsigned int topbit, size=(unsigned int)(_size>>4); - /* 16=1 20=1 24=1 32=10 48=11 64=100 96=110 128=1000 4096=100000000 */ - -#if defined(__GNUC__) - topbit = sizeof(size)*__CHAR_BIT__ - 1 - __builtin_clz(size); -#elif defined(_MSC_VER) && _MSC_VER>=1300 - { - unsigned long bsrTopBit; - - _BitScanReverse(&bsrTopBit, size); - - topbit = bsrTopBit; - } -#else -#if 0 - union { - unsigned asInt[2]; - double asDouble; - }; - int n; - - asDouble = (double)size + 0.5; - topbit = (asInt[!FOX_BIGENDIAN] >> 20) - 1023; -#else - { - unsigned int x=size; - x = x | (x >> 1); - x = x | (x >> 2); - x = x | (x >> 4); - x = x | (x >> 8); - x = x | (x >>16); - x = ~x; - x = x - ((x >> 1) & 0x55555555); - x = (x & 0x33333333) + ((x >> 2) & 0x33333333); - x = (x + (x >> 4)) & 0x0F0F0F0F; - x = x + (x << 8); - x = x + (x << 16); - topbit=31 - (x >> 24); - } -#endif -#endif - return topbit; -} - - -#ifdef FULLSANITYCHECKS -static void tcsanitycheck(threadcacheblk **ptr) THROWSPEC -{ - assert((ptr[0] && ptr[1]) || (!ptr[0] && !ptr[1])); - if (ptr[0] && ptr[1]) - { - assert(nedblksize(ptr[0])>=sizeof(threadcacheblk)); - assert(nedblksize(ptr[1])>=sizeof(threadcacheblk)); - assert(*(unsigned int *) "NEDN"==ptr[0]->magic); - assert(*(unsigned int *) "NEDN"==ptr[1]->magic); - assert(!ptr[0]->prev); - assert(!ptr[1]->next); - if (ptr[0]==ptr[1]) - { - assert(!ptr[0]->next); - assert(!ptr[1]->prev); - } - } -} -static void tcfullsanitycheck(threadcache *tc) THROWSPEC -{ - threadcacheblk **tcbptr=tc->bins; - int n; - for (n=0; n<=THREADCACHEMAXBINS; n++, tcbptr+=2) - { - threadcacheblk *b, *ob=0; - tcsanitycheck(tcbptr); - for (b=tcbptr[0]; b; ob=b, b=b->next) - { - assert(*(unsigned int *) "NEDN"==b->magic); - assert(!ob || ob->next==b); - assert(!ob || b->prev==ob); - } - } -} -#endif - -static NOINLINE void RemoveCacheEntries(nedpool *RESTRICT p, threadcache *RESTRICT tc, unsigned int age) THROWSPEC -{ - UNREFERENCED_PARAMETER(p); -#ifdef FULLSANITYCHECKS - tcfullsanitycheck(tc); -#endif - if (tc->freeInCache) - { - threadcacheblk **tcbptr=tc->bins; - int n; - for (n=0; n<=THREADCACHEMAXBINS; n++, tcbptr+=2) - { - threadcacheblk **tcb=tcbptr+1; /* come from oldest end of list */ - /*tcsanitycheck(tcbptr);*/ - for (; *tcb && tc->frees-(*tcb)->lastUsed>=age;) - { - threadcacheblk *f=*tcb; - size_t blksize=f->size; /*nedblksize(f);*/ - assert(blksize<=nedblksize(0, f)); - assert(blksize); -#ifdef FULLSANITYCHECKS - assert(*(unsigned int *) "NEDN"==(*tcb)->magic); -#endif - *tcb=(*tcb)->prev; - if (*tcb) - (*tcb)->next=0; - else - *tcbptr=0; - tc->freeInCache-=blksize; - assert((long) tc->freeInCache>=0); - CallFree(0, f, 0); - /*tcsanitycheck(tcbptr);*/ - } - } - } -#ifdef FULLSANITYCHECKS - tcfullsanitycheck(tc); -#endif -} -static void DestroyCaches(nedpool *RESTRICT p) THROWSPEC -{ - if (p->caches) - { - threadcache *tc; - int n; - for (n=0; ncaches[n])) - { - tc->frees++; - RemoveCacheEntries(p, tc, 0); - assert(!tc->freeInCache); - tc->mymspace=-1; - tc->threadid=0; - CallFree(0, tc, 0); - p->caches[n]=0; - } - } - } -} - -static NOINLINE threadcache *AllocCache(nedpool *RESTRICT p) THROWSPEC -{ - threadcache *tc=0; - int n, end; -#if USE_LOCKS - ACQUIRE_LOCK(&p->mutex); -#endif - for (n=0; ncaches[n]; n++); - if (THREADCACHEMAXCACHES==n) - { - /* List exhausted, so disable for this thread */ -#if USE_LOCKS - RELEASE_LOCK(&p->mutex); -#endif - return 0; - } - tc=p->caches[n]=(threadcache *) CallCalloc(p->m[0], sizeof(threadcache), 0); - if (!tc) - { -#if USE_LOCKS - RELEASE_LOCK(&p->mutex); -#endif - return 0; - } -#ifdef FULLSANITYCHECKS - tc->magic1=*(unsigned int *)"NEDMALC1"; - tc->magic2=*(unsigned int *)"NEDMALC2"; -#endif - tc->threadid= -#if USE_LOCKS - (long)(size_t)CURRENT_THREAD; -#else - 1; -#endif - for (end=0; p->m[end]; end++); - tc->mymspace=abs(tc->threadid) % end; -#if USE_LOCKS - RELEASE_LOCK(&p->mutex); -#endif - if (TLSSET(p->mycache, (void *)(size_t)(n+1))) abort(); - return tc; -} - -static void *threadcache_malloc(nedpool *RESTRICT p, threadcache *RESTRICT tc, size_t *RESTRICT _size) THROWSPEC -{ - UNREFERENCED_PARAMETER(p); - - void *RESTRICT ret=0; - size_t size=*_size, blksize=0; - unsigned int bestsize; - unsigned int idx=size2binidx(size); - threadcacheblk *RESTRICT blk, * *RESTRICT binsptr; -#ifdef FULLSANITYCHECKS - tcfullsanitycheck(tc); -#endif - /* Calculate best fit bin size */ - bestsize=1<<(idx+4); -#ifdef FINEGRAINEDBINS - /* Finer grained bin fit */ - idx<<=1; - if (size>bestsize) - { - idx++; - bestsize+=bestsize>>1; - } - if (size>bestsize) - { - idx++; - bestsize=1<<(4+(idx>>1)); - } -#else - if (size>bestsize) - { - idx++; - bestsize<<=1; - } -#endif - assert(bestsize>=size); - if (sizebins[idx*2]; - /* Try to match close, but move up a bin if necessary */ - blk=*binsptr; - if (!blk || blk->sizesize; /*nedblksize(blk);*/ - assert(nedblksize(0, blk)>=blksize); - assert(blksize>=size); - if (blk->next) - blk->next->prev=0; - *binsptr=blk->next; - if (!*binsptr) - binsptr[1]=0; -#ifdef FULLSANITYCHECKS - blk->magic=0; -#endif - assert(binsptr[0]!=blk && binsptr[1]!=blk); - assert(nedblksize(0, blk)>=sizeof(threadcacheblk) && nedblksize(0, blk)<=THREADCACHEMAX+CHUNK_OVERHEAD); - /*printf("malloc: %p, %p, %p, %lu\n", p, tc, blk, (long) _size);*/ - ret=(void *) blk; - } - ++tc->mallocs; - if (ret) - { - assert(blksize>=size); - ++tc->successes; - tc->freeInCache-=blksize; - assert((long) tc->freeInCache>=0); - } -#if defined(DEBUG) && 0 - if (!(tc->mallocs & 0xfff)) - { - printf("*** threadcache=%u, mallocs=%u (%f), free=%u (%f), freeInCache=%u\n", (unsigned int) tc->threadid, tc->mallocs, - (float) tc->successes/tc->mallocs, tc->frees, (float) tc->successes/tc->frees, (unsigned int) tc->freeInCache); - } -#endif -#ifdef FULLSANITYCHECKS - tcfullsanitycheck(tc); -#endif - *_size=size; - return ret; -} -static NOINLINE void ReleaseFreeInCache(nedpool *RESTRICT p, threadcache *RESTRICT tc, int mymspace) THROWSPEC -{ - UNREFERENCED_PARAMETER(mymspace); - - unsigned int age=THREADCACHEMAXFREESPACE/8192; -#if USE_LOCKS - /*ACQUIRE_LOCK(&p->m[mymspace]->mutex);*/ -#endif - while (age && tc->freeInCache>=THREADCACHEMAXFREESPACE) - { - RemoveCacheEntries(p, tc, age); - /*printf("*** Removing cache entries older than %u (%u)\n", age, (unsigned int) tc->freeInCache);*/ - age>>=1; - } -#if USE_LOCKS - /*RELEASE_LOCK(&p->m[mymspace]->mutex);*/ -#endif -} -static void threadcache_free(nedpool *RESTRICT p, threadcache *RESTRICT tc, int mymspace, void *RESTRICT mem, size_t size) THROWSPEC -{ - unsigned int bestsize; - unsigned int idx=size2binidx(size); - threadcacheblk **RESTRICT binsptr, *RESTRICT tck=(threadcacheblk *) mem; - assert(size>=sizeof(threadcacheblk) && size<=THREADCACHEMAX+CHUNK_OVERHEAD); -#ifdef DEBUG - /* Make sure this is a valid memory block */ - assert(nedblksize(0, mem)); -#endif -#ifdef FULLSANITYCHECKS - tcfullsanitycheck(tc); -#endif - /* Calculate best fit bin size */ - bestsize=1<<(idx+4); -#ifdef FINEGRAINEDBINS - /* Finer grained bin fit */ - idx<<=1; - if (size>bestsize) - { - unsigned int biggerbestsize=bestsize+(bestsize<<1); - if (size>=biggerbestsize) - { - idx++; - bestsize=biggerbestsize; - } - } -#endif - if (bestsize!=size) /* dlmalloc can round up, so we round down to preserve indexing */ - size=bestsize; - binsptr=&tc->bins[idx*2]; - assert(idx<=THREADCACHEMAXBINS); - if (tck==*binsptr) - { - fprintf(stderr, "nedmalloc: Attempt to free already freed memory block %p - aborting!\n", tck); - abort(); - } -#ifdef FULLSANITYCHECKS - tck->magic=*(unsigned int *) "NEDN"; -#endif - tck->lastUsed=++tc->frees; - tck->size=(unsigned int) size; - tck->next=*binsptr; - tck->prev=0; - if (tck->next) - tck->next->prev=tck; - else - binsptr[1]=tck; - assert(!*binsptr || (*binsptr)->size==tck->size); - *binsptr=tck; - assert(tck==tc->bins[idx*2]); - assert(tc->bins[idx*2+1]==tck || binsptr[0]->next->prev==tck); - /*printf("free: %p, %p, %p, %lu\n", p, tc, mem, (long) size);*/ - tc->freeInCache+=size; -#ifdef FULLSANITYCHECKS - tcfullsanitycheck(tc); -#endif -#if 1 - if (tc->freeInCache>=THREADCACHEMAXFREESPACE) - ReleaseFreeInCache(p, tc, mymspace); -#endif -} - - - - -static NOINLINE int InitPool(nedpool *RESTRICT p, size_t capacity, int threads) THROWSPEC -{ - /* threads is -1 for system pool */ - ensure_initialization(); - ACQUIRE_MALLOC_GLOBAL_LOCK(); - if (p->threads) goto done; -#if USE_LOCKS - if (INITIAL_LOCK(&p->mutex)) goto err; -#endif - if (TLSALLOC(&p->mycache)) goto err; -#if USE_ALLOCATOR==0 - p->m[0]=(mstate) mspacecounter++; -#elif USE_ALLOCATOR==1 - if (!(p->m[0]=(mstate) create_mspace(capacity, 1))) goto err; - p->m[0]->extp=p; -#endif - p->threads=(threads<1 || threads>MAXTHREADSINPOOL) ? MAXTHREADSINPOOL : threads; -done: - RELEASE_MALLOC_GLOBAL_LOCK(); - return 1; -err: - if (threads<0) - abort(); /* If you can't allocate for system pool, we're screwed */ - DestroyCaches(p); - if (p->m[0]) - { -#if USE_ALLOCATOR==1 - destroy_mspace(p->m[0]); -#endif - p->m[0]=0; - } - if (p->mycache) - { - if (TLSFREE(p->mycache)) abort(); - p->mycache=0; - } - RELEASE_MALLOC_GLOBAL_LOCK(); - return 0; -} -static NOINLINE mstate FindMSpace(nedpool *RESTRICT p, threadcache *RESTRICT tc, int *RESTRICT lastUsed, size_t size) THROWSPEC -{ - /* Gets called when thread's last used mspace is in use. The strategy - is to run through the list of all available mspaces looking for an - unlocked one and if we fail, we create a new one so long as we don't - exceed p->threads */ - int n, end; - n=end=*lastUsed+1; -#if USE_LOCKS - for (; p->m[n]; end=++n) - { - if (TRY_LOCK(&p->m[n]->mutex)) goto found; - } - for (n=0; n<*lastUsed && p->m[n]; n++) - { - if (TRY_LOCK(&p->m[n]->mutex)) goto found; - } - if (endthreads) - { - mstate temp; -#if USE_ALLOCATOR==0 - temp=(mstate) mspacecounter++; -#elif USE_ALLOCATOR==1 - if (!(temp=(mstate) create_mspace(size, 1))) - goto badexit; -#endif - /* Now we're ready to modify the lists, we lock */ - ACQUIRE_LOCK(&p->mutex); - while (p->m[end] && endthreads) - end++; - if (end>=p->threads) - { - /* Drat, must destroy it now */ - RELEASE_LOCK(&p->mutex); -#if USE_ALLOCATOR==1 - destroy_mspace((mstate) temp); -#endif - goto badexit; - } - /* We really want to make sure this goes into memory now but we - have to be careful of breaking aliasing rules, so write it twice */ - *((volatile struct malloc_state **) &p->m[end])=p->m[end]=temp; - ACQUIRE_LOCK(&p->m[end]->mutex); - /*printf("Created mspace idx %d\n", end);*/ - RELEASE_LOCK(&p->mutex); - n=end; - goto found; - } - /* Let it lock on the last one it used */ -badexit: - ACQUIRE_LOCK(&p->m[*lastUsed]->mutex); - return p->m[*lastUsed]; -#endif -found: - *lastUsed=n; - if (tc) - tc->mymspace=n; - else - { - if (TLSSET(p->mycache, (void *)(size_t)(-(n+1)))) abort(); - } - return p->m[n]; -} - -typedef struct PoolList_t -{ - size_t size; /* Size of list */ - size_t length; /* Actual entries in list */ -#ifdef DEBUG - nedpool *list[1]; /* Force testing of list expansion */ -#else - nedpool *list[16]; -#endif -} PoolList; -#if USE_LOCKS -static MLOCK_T poollistlock; -#endif -static PoolList *poollist; -NEDMALLOCPTRATTR nedpool *nedcreatepool(size_t capacity, int threads) THROWSPEC -{ - nedpool *ret=0; - if (!poollist) - { - PoolList *newpoollist=0; - if (!(newpoollist=(PoolList *) nedpcalloc(0, 1, sizeof(PoolList)+sizeof(nedpool *)))) return 0; -#if USE_LOCKS - INITIAL_LOCK(&poollistlock); - ACQUIRE_LOCK(&poollistlock); -#endif - poollist=newpoollist; - poollist->size=sizeof(poollist->list)/sizeof(nedpool *); - } -#if USE_LOCKS - else - ACQUIRE_LOCK(&poollistlock); -#endif - if (poollist->length==poollist->size) - { - PoolList *newpoollist=0; - size_t newsize=0; - newsize=sizeof(PoolList)+(poollist->size+1)*sizeof(nedpool *); - if (!(newpoollist=(PoolList *) nedprealloc(0, poollist, newsize))) goto badexit; - poollist=newpoollist; - memset(&poollist->list[poollist->size], 0, newsize-((size_t)&poollist->list[poollist->size]-(size_t)&poollist->list[0])); - poollist->size=((newsize-((char *)&poollist->list[0]-(char *)poollist))/sizeof(nedpool *))-1; - assert(poollist->size>poollist->length); - } - if (!(ret=(nedpool *) nedpcalloc(0, 1, sizeof(nedpool)))) goto badexit; - if (!InitPool(ret, capacity, threads)) - { - nedpfree(0, ret); - goto badexit; - } - poollist->list[poollist->length++]=ret; -badexit: - { -#if USE_LOCKS - RELEASE_LOCK(&poollistlock); -#endif - } - return ret; -} -void neddestroypool(nedpool *p) THROWSPEC -{ - unsigned int n; -#if USE_LOCKS - ACQUIRE_LOCK(&p->mutex); -#endif - DestroyCaches(p); - for (n=0; p->m[n]; n++) - { -#if USE_ALLOCATOR==1 - destroy_mspace(p->m[n]); -#endif - p->m[n]=0; - } -#if USE_LOCKS - RELEASE_LOCK(&p->mutex); -#endif - if (TLSFREE(p->mycache)) abort(); - nedpfree(0, p); -#if USE_LOCKS - ACQUIRE_LOCK(&poollistlock); -#endif - assert(poollist); - for (n=0; nlength && poollist->list[n]!=p; n++); - assert(n!=poollist->length); - memmove(&poollist->list[n], &poollist->list[n+1], (size_t)&poollist->list[poollist->length]-(size_t)&poollist->list[n]); - if (!--poollist->length) - { - assert(!poollist->list[0]); - nedpfree(0, poollist); - poollist=0; - } -#if USE_LOCKS - RELEASE_LOCK(&poollistlock); -#endif -} -void neddestroysyspool() THROWSPEC -{ - nedpool *p=&syspool; - int n; -#if USE_LOCKS - ACQUIRE_LOCK(&p->mutex); -#endif - DestroyCaches(p); - for (n=0; p->m[n]; n++) - { -#if USE_ALLOCATOR==1 - destroy_mspace(p->m[n]); -#endif - p->m[n]=0; - } - /* Render syspool unusable */ - for (n=0; ncaches[n]=(threadcache *)(size_t)(sizeof(size_t)>4 ? 0xdeadbeefdeadbeefULL : 0xdeadbeefUL); - for (n=0; nm[n]=(mstate)(size_t)(sizeof(size_t)>4 ? 0xdeadbeefdeadbeefULL : 0xdeadbeefUL); - if (TLSFREE(p->mycache)) abort(); -#if USE_LOCKS - RELEASE_LOCK(&p->mutex); -#endif -} -nedpool **nedpoollist() THROWSPEC -{ - nedpool **ret=0; - if (poollist) - { -#if USE_LOCKS - ACQUIRE_LOCK(&poollistlock); -#endif - if (!(ret=(nedpool **) nedmalloc((poollist->length+1)*sizeof(nedpool *)))) goto badexit; - memcpy(ret, poollist->list, (poollist->length+1)*sizeof(nedpool *)); -badexit: - { -#if USE_LOCKS - RELEASE_LOCK(&poollistlock); -#endif - } - } - return ret; -} - -void nedpsetvalue(nedpool *p, void *v) THROWSPEC -{ - if (!p) { p=&syspool; if (!syspool.threads) InitPool(&syspool, 0, -1); } - p->uservalue=v; -} -void *nedgetvalue(nedpool **p, void *mem) THROWSPEC -{ - nedpool *np=0; - mstate fm=nedblkmstate(mem); - if (!fm || !fm->extp) return 0; - np=(nedpool *) fm->extp; - if (p) *p=np; - return np->uservalue; -} - -void nedtrimthreadcache(nedpool *p, int disable) THROWSPEC -{ - int mycache; - if (!p) - { - p=&syspool; - if (!syspool.threads) InitPool(&syspool, 0, -1); - } - mycache=(int)(size_t) TLSGET(p->mycache); - if (!mycache) - { - /* Set to mspace 0 */ - if (disable && TLSSET(p->mycache, (void *)(size_t)-1)) abort(); - } - else if (mycache>0) - { - /* Set to last used mspace */ - threadcache *tc=p->caches[mycache-1]; -#if defined(DEBUG) - printf("Threadcache utilisation: %lf%% in cache with %lf%% lost to other threads\n", - 100.0*tc->successes/tc->mallocs, 100.0*((double) tc->mallocs-tc->frees)/tc->mallocs); -#endif - if (disable && TLSSET(p->mycache, (void *)(size_t)(-tc->mymspace))) abort(); - tc->frees++; - RemoveCacheEntries(p, tc, 0); - assert(!tc->freeInCache); - if (disable) - { - tc->mymspace=-1; - tc->threadid=0; - CallFree(0, p->caches[mycache-1], 0); - p->caches[mycache-1]=0; - } - } -} -void neddisablethreadcache(nedpool *p) THROWSPEC -{ - nedtrimthreadcache(p, 1); -} - -#if USE_LOCKS && USE_ALLOCATOR==1 -#define GETMSPACE(m,p,tc,ms,s,action) \ - do \ - { \ - mstate m = GetMSpace((p),(tc),(ms),(s)); \ - action; \ - RELEASE_LOCK(&m->mutex); \ - } while (0) -#else -#define GETMSPACE(m,p,tc,ms,s,action) \ - do \ - { \ - mstate m = GetMSpace((p),(tc),(ms),(s)); \ - action; \ - } while (0) -#endif - -static FORCEINLINE mstate GetMSpace(nedpool *RESTRICT p, threadcache *RESTRICT tc, int mymspace, size_t size) THROWSPEC -{ - /* Returns a locked and ready for use mspace */ - mstate m=p->m[mymspace]; - assert(m); -#if USE_LOCKS && USE_ALLOCATOR==1 - if (!TRY_LOCK(&p->m[mymspace]->mutex)) m=FindMSpace(p, tc, &mymspace, size); - /*assert(IS_LOCKED(&p->m[mymspace]->mutex));*/ -#endif - return m; -} -static NOINLINE void GetThreadCache_cold1(nedpool *RESTRICT *RESTRICT p) THROWSPEC -{ - *p=&syspool; - if (!syspool.threads) InitPool(&syspool, 0, -1); -} -static NOINLINE void GetThreadCache_cold2(nedpool *RESTRICT *RESTRICT p, threadcache *RESTRICT *RESTRICT tc, int *RESTRICT mymspace, int mycache) THROWSPEC -{ - if (!mycache) - { - /* Need to allocate a new cache */ - *tc=AllocCache(*p); - if (!*tc) - { - /* Disable */ - if (TLSSET((*p)->mycache, (void *)(size_t)-1)) abort(); - *mymspace=0; - } - else - *mymspace=(*tc)->mymspace; - } - else - { /* Cache disabled, but we do have an assigned thread pool */ - *tc=0; - *mymspace=-mycache-1; - } -} -static FORCEINLINE void GetThreadCache(nedpool *RESTRICT *RESTRICT p, threadcache *RESTRICT *RESTRICT tc, int *RESTRICT mymspace, size_t *RESTRICT size) THROWSPEC -{ - int mycache; - if (size && *sizemycache); - if (mycache>0) - { - /* Already have a cache */ - *tc=(*p)->caches[mycache-1]; - *mymspace=(*tc)->mymspace; - } - else GetThreadCache_cold2(p, tc, mymspace, mycache); - assert(*mymspace>=0); -#if USE_LOCKS - assert(!(*tc) || (long)(size_t)CURRENT_THREAD==(*tc)->threadid); -#endif -#ifdef FULLSANITYCHECKS - if (*tc) - { - if (*(unsigned int *)"NEDMALC1"!=(*tc)->magic1 || *(unsigned int *)"NEDMALC2"!=(*tc)->magic2) - { - abort(); - } - } -#endif -} - -NEDMALLOCPTRATTR void *nedpmalloc(nedpool *p, size_t size) THROWSPEC -{ - void *ret=0; - threadcache *tc; - int mymspace; - GetThreadCache(&p, &tc, &mymspace, &size); -#if THREADCACHEMAX - if (tc && size<=THREADCACHEMAX) - { - /* Use the thread cache */ - ret=threadcache_malloc(p, tc, &size); - } -#endif - if (!ret) - { - /* Use this thread's mspace */ - GETMSPACE(m, p, tc, mymspace, size, - ret=CallMalloc(m, size, 0)); - } - return ret; -} -NEDMALLOCPTRATTR void *nedpcalloc(nedpool *p, size_t no, size_t size) THROWSPEC -{ - size_t rsize=size*no; - void *ret=0; - threadcache *tc; - int mymspace; - GetThreadCache(&p, &tc, &mymspace, &rsize); -#if THREADCACHEMAX - if (tc && rsize<=THREADCACHEMAX) - { - /* Use the thread cache */ - if ((ret=threadcache_malloc(p, tc, &rsize))) - memset(ret, 0, rsize); - } -#endif - if (!ret) - { - /* Use this thread's mspace */ - GETMSPACE(m, p, tc, mymspace, rsize, - ret=CallCalloc(m, rsize, 0)); - } - return ret; -} -NEDMALLOCPTRATTR void *nedprealloc(nedpool *p, void *mem, size_t size) THROWSPEC -{ - void *ret=0; - threadcache *tc; - int mymspace, isforeign=1; - size_t memsize; - if (!mem) return nedpmalloc(p, size); - memsize=nedblksize(&isforeign, mem); - assert(memsize); - if (!memsize) - { - fprintf(stderr, "nedmalloc: nedprealloc() called with a block not created by nedmalloc!\n"); - abort(); - } - else if (size<=memsize && memsize-size< -#ifdef DEBUG - 32 -#else - 1024 -#endif - ) /* If realloc size is within 1Kb smaller than existing, noop it */ - return mem; - GetThreadCache(&p, &tc, &mymspace, &size); -#if THREADCACHEMAX - if (tc && size && size<=THREADCACHEMAX) - { - /* Use the thread cache */ - if ((ret=threadcache_malloc(p, tc, &size))) - { - memcpy(ret, mem, memsize=sizeof(threadcacheblk) && memsize<=(THREADCACHEMAX+CHUNK_OVERHEAD)) - threadcache_free(p, tc, mymspace, mem, memsize); - else - CallFree(0, mem, isforeign); - } - } -#endif - if (!ret) - { - /* Reallocs always happen in the mspace they happened in, so skip - locking the preferred mspace for this thread */ - ret=CallRealloc(p->m[mymspace], mem, isforeign, memsize, size); - } - return ret; -} -void nedpfree(nedpool *p, void *mem) THROWSPEC -{ - /* Frees always happen in the mspace they happened in, so skip - locking the preferred mspace for this thread */ - threadcache *tc; - int mymspace, isforeign=1; - size_t memsize; - if (!mem) - { - /* If you tried this on FreeBSD you'd be sorry! */ -#ifdef DEBUG - fprintf(stderr, "nedmalloc: WARNING nedpfree() called with zero. This is not portable behaviour!\n"); -#endif - return; - } - memsize=nedblksize(&isforeign, mem); - assert(memsize); - if (!memsize) - { - fprintf(stderr, "nedmalloc: nedpfree() called with a block not created by nedmalloc!\n"); - abort(); - } - GetThreadCache(&p, &tc, &mymspace, 0); -#if THREADCACHEMAX - if (mem && tc && memsize>=sizeof(threadcacheblk) && memsize<=(THREADCACHEMAX+CHUNK_OVERHEAD)) - threadcache_free(p, tc, mymspace, mem, memsize); - else -#endif - CallFree(0, mem, isforeign); -} -NEDMALLOCPTRATTR void *nedpmemalign(nedpool *p, size_t alignment, size_t bytes) THROWSPEC -{ - void *ret; - threadcache *tc; - int mymspace; - GetThreadCache(&p, &tc, &mymspace, &bytes); - { /* Use this thread's mspace */ - GETMSPACE(m, p, tc, mymspace, bytes, - ret=CallMalloc(m, bytes, alignment)); - } - return ret; -} -struct nedmallinfo nedpmallinfo(nedpool *p) THROWSPEC -{ - int n; - struct nedmallinfo ret= {0,0,0,0,0,0,0,0,0,0}; -if (!p) { p=&syspool; if (!syspool.threads) InitPool(&syspool, 0, -1); } -for (n=0; p->m[n]; n++) -{ -#if USE_ALLOCATOR==1 && !NO_MALLINFO -struct mallinfo t=mspace_mallinfo(p->m[n]); - ret.arena+=t.arena; - ret.ordblks+=t.ordblks; - ret.hblkhd+=t.hblkhd; - ret.usmblks+=t.usmblks; - ret.uordblks+=t.uordblks; - ret.fordblks+=t.fordblks; - ret.keepcost+=t.keepcost; -#endif -} -return ret; -} -int nedpmallopt(nedpool *p, int parno, int value) THROWSPEC -{ - UNREFERENCED_PARAMETER(p); -#if USE_ALLOCATOR==1 - return mspace_mallopt(parno, value); -#else - return 0; -#endif -} -NEDMALLOCNOALIASATTR void *nedmalloc_internals(size_t *granularity, size_t *magic) THROWSPEC -{ -#if USE_ALLOCATOR==1 - if (granularity) *granularity=mparams.granularity; - if (magic) *magic=mparams.magic; - return (void *) &syspool; -#else - if (granularity) *granularity=0; - if (magic) *magic=0; - return 0; -#endif -} -int nedpmalloc_trim(nedpool *p, size_t pad) THROWSPEC -{ - int n, ret=0; - if (!p) { p=&syspool; if (!syspool.threads) InitPool(&syspool, 0, -1); } - for (n=0; p->m[n]; n++) - { -#if USE_ALLOCATOR==1 - ret+=mspace_trim(p->m[n], pad); -#endif - } - return ret; -} -void nedpmalloc_stats(nedpool *p) THROWSPEC -{ - int n; - if (!p) { p=&syspool; if (!syspool.threads) InitPool(&syspool, 0, -1); } - for (n=0; p->m[n]; n++) - { -#if USE_ALLOCATOR==1 - mspace_malloc_stats(p->m[n]); -#endif - } -} -size_t nedpmalloc_footprint(nedpool *p) THROWSPEC -{ - size_t ret=0; - int n; - if (!p) { p=&syspool; if (!syspool.threads) InitPool(&syspool, 0, -1); } - for (n=0; p->m[n]; n++) - { -#if USE_ALLOCATOR==1 - ret+=mspace_footprint(p->m[n]); -#endif - } - return ret; -} -NEDMALLOCPTRATTR void **nedpindependent_calloc(nedpool *p, size_t elemsno, size_t elemsize, void **chunks) THROWSPEC -{ - void **ret; - threadcache *tc; - int mymspace; - GetThreadCache(&p, &tc, &mymspace, &elemsize); -#if USE_ALLOCATOR==0 - GETMSPACE(m, p, tc, mymspace, elemsno *elemsize, - ret=unsupported_operation("independent_calloc")); -#elif USE_ALLOCATOR==1 - GETMSPACE(m, p, tc, mymspace, elemsno *elemsize, - ret=mspace_independent_calloc(m, elemsno, elemsize, chunks)); -#endif - return ret; -} -NEDMALLOCPTRATTR void **nedpindependent_comalloc(nedpool *p, size_t elems, size_t *sizes, void **chunks) THROWSPEC -{ - void **ret; - threadcache *tc; - int mymspace; - size_t i, *adjustedsizes=(size_t *) alloca(elems *sizeof(size_t)); - if (!adjustedsizes) return 0; - for (i=0; iname || !cvar->name[0]) - { - OSD_Printf("OSD_RegisterCvar(): can't register cvar with null name\n"); - return -1; - } - - if (!cvar->var) - { - OSD_Printf("OSD_RegisterCvar(): can't register null cvar\n"); - return -1; - } - - // check for illegal characters in name - for (cp = cvar->name; *cp; cp++) - { - if ((cp == cvar->name) && (*cp >= '0') && (*cp <= '9')) - { - OSD_Printf("OSD_RegisterCvar(): first character of cvar name \"%s\" must not be a numeral\n", cvar->name); - return -1; - } - if ((*cp < '0') || - (*cp > '9' && *cp < 'A') || - (*cp > 'Z' && *cp < 'a' && *cp != '_') || - (*cp > 'z')) - { - OSD_Printf("OSD_RegisterCvar(): illegal character in cvar name \"%s\"\n", cvar->name); - return -1; - } - } - - cvars = (osdcvar_t *)Brealloc(cvars, (osdnumcvars + 1) * sizeof(osdcvar_t)); - - hash_add(&h_cvars, cvar->name, osdnumcvars, 1); - - switch (cvar->type & (CVAR_BOOL|CVAR_INT|CVAR_UINT|CVAR_FLOAT|CVAR_DOUBLE)) - { - case CVAR_BOOL: - case CVAR_INT: - cvars[osdnumcvars].dval.i = *(int32_t *)cvar->var; - break; - case CVAR_UINT: - cvars[osdnumcvars].dval.uint = *(uint32_t *)cvar->var; - break; - case CVAR_FLOAT: - cvars[osdnumcvars].dval.f = *(float *)cvar->var; - break; - case CVAR_DOUBLE: - cvars[osdnumcvars].dval.d = *(double *)cvar->var; - break; - } - - Bmemcpy(&cvars[osdnumcvars++], cvar, sizeof(cvar_t)); - - return 0; -} - -static int32_t OSD_CvarModified(const osdcvar_t *cvar) -{ - if ((osdflags & OSD_INITIALIZED) == 0) - return 0; - - if (!cvar->var) - { - OSD_Printf("OSD_CvarModified(): null cvar?!\n"); - return 0; - } - - switch (cvar->type & (CVAR_BOOL|CVAR_INT|CVAR_UINT|CVAR_FLOAT|CVAR_DOUBLE)) - { - case CVAR_BOOL: - case CVAR_INT: - return (cvar->dval.i != *(int32_t *)cvar->var); - case CVAR_UINT: - return (cvar->dval.uint != *(uint32_t *)cvar->var); - case CVAR_FLOAT: - return (cvar->dval.f != *(float *)cvar->var); - case CVAR_DOUBLE: - return (cvar->dval.d != *(double *)cvar->var); - default: - return 0; - } -} - -// color code format is as follows: -// ^## sets a color, where ## is the palette number -// ^S# sets a shade, range is 0-7 equiv to shades 0-14 -// ^O resets formatting to defaults - -const char *OSD_StripColors(char *out, const char *in) -{ - const char *ptr = out; - - do - { - if (*in == '^' && isdigit(*(in+1))) - { - in += 2; - if (isdigit(*in)) - in++; - continue; - } - if (*in == '^' && (Btoupper(*(in+1)) == 'S') && isdigit(*(in+2))) - { - in += 3; - continue; - } - if (*in == '^' && (Btoupper(*(in+1)) == 'O')) - { - in += 2; - continue; - } - *(out++) = *(in++); - } - while (*in); - - *out = '\0'; - return (ptr); -} - -int32_t OSD_Exec(const char *szScript) -{ - FILE *fp = fopenfrompath(szScript, "r"); - - if (fp != NULL) - { - char line[255]; - - OSD_Printf("Executing \"%s\"\n", szScript); - osdexecscript++; - while (fgets(line, sizeof(line)-1, fp) != NULL) - OSD_Dispatch(strtok(line,"\r\n")); - osdexecscript--; - fclose(fp); - return 0; - } - return 1; -} - -int32_t OSD_ParsingScript(void) -{ - return osdexecscript; -} - -int32_t OSD_OSDKey(void) -{ - return osdkey; -} - -char *OSD_GetTextPtr(void) -{ - return osdtext; -} - -char *OSD_GetFmtPtr(void) -{ - return osdfmt; -} - -char *OSD_GetFmt(char *ptr) -{ - return (ptr - osdtext + osdfmt); -} - -int32_t OSD_GetCols(void) -{ - return osdcols; -} - -int32_t OSD_IsMoving(void) -{ - return (osdrowscur!=-1 && osdrowscur!=osdrows); -} - -int32_t OSD_GetTextMode(void) -{ - return osdtextmode; -} - -void OSD_SetTextMode(int32_t mode) -{ - osdtextmode = (mode != 0); - if (osdtextmode) - { - if (drawosdchar != _internal_drawosdchar) - { - swaplong(&_drawosdchar,&drawosdchar); - swaplong(&_drawosdstr,&drawosdstr); - swaplong(&_drawosdcursor,&drawosdcursor); - swaplong(&_getcolumnwidth,&getcolumnwidth); - swaplong(&_getrowheight,&getrowheight); - } - } - else if (drawosdchar == _internal_drawosdchar) - { - swaplong(&_drawosdchar,&drawosdchar); - swaplong(&_drawosdstr,&drawosdstr); - swaplong(&_drawosdcursor,&drawosdcursor); - swaplong(&_getcolumnwidth,&getcolumnwidth); - swaplong(&_getrowheight,&getrowheight); - } - if (qsetmode == 200) - OSD_ResizeDisplay(xdim, ydim); -} - -static int32_t _internal_osdfunc_exec(const osdfuncparm_t *parm) -{ - char fn[BMAX_PATH]; - - if (parm->numparms != 1) return OSDCMD_SHOWHELP; - Bstrcpy(fn,parm->parms[0]); - - if (OSD_Exec(fn)) - { - OSD_Printf(OSD_ERROR "exec: file \"%s\" not found.\n", fn); - return OSDCMD_OK; - } - return OSDCMD_OK; -} - -static int32_t _internal_osdfunc_echo(const osdfuncparm_t *parm) -{ - int32_t i; - for (i = 0; i < parm->numparms; i++) - { - if (i > 0) OSD_Printf(" "); - OSD_Printf("%s", parm->parms[i]); - } - OSD_Printf("\n"); - - return OSDCMD_OK; -} - -static int32_t _internal_osdfunc_fileinfo(const osdfuncparm_t *parm) -{ - uint32_t crc, length; - int32_t i,j; - char buf[256]; - - if (parm->numparms != 1) return OSDCMD_SHOWHELP; - - if ((i = kopen4load((char *)parm->parms[0],0)) < 0) - { - OSD_Printf("fileinfo: File \"%s\" not found.\n", parm->parms[0]); - return OSDCMD_OK; - } - - length = kfilelength(i); - - crc32init(&crc); - do - { - j = kread(i,buf,256); - crc32block(&crc,(uint8_t *)buf,j); - } - while (j == 256); - crc32finish(&crc); - - kclose(i); - - OSD_Printf("fileinfo: %s\n" - " File size: %d\n" - " CRC-32: %08X\n", - parm->parms[0], length, crc); - - return OSDCMD_OK; -} - -static void _internal_drawosdchar(int32_t x, int32_t y, char ch, int32_t shade, int32_t pal) -{ - char st[2] = { 0,0 }; - - UNREFERENCED_PARAMETER(shade); - UNREFERENCED_PARAMETER(pal); - - st[0] = ch; - - printext256(4+(x<<3),4+(y<<3), white, -1, st, 0); -} - -static void _internal_drawosdstr(int32_t x, int32_t y, char *ch, int32_t len, int32_t shade, int32_t pal) -{ - char st[1024]; - - UNREFERENCED_PARAMETER(shade); - UNREFERENCED_PARAMETER(pal); - - if (len>1023) len=1023; - Bmemcpy(st,ch,len); - st[len]=0; - - printext256(4+(x<<3),4+(y<<3), white, -1, st, 0); -} - -static void _internal_drawosdcursor(int32_t x, int32_t y, int32_t type, int32_t lastkeypress) -{ - char st[2] = { '_',0 }; - - UNREFERENCED_PARAMETER(lastkeypress); - - if (type) st[0] = '#'; - - if (white > -1) - { - printext256(4+(x<<3),4+(y<<3)+2, white, -1, st, 0); - return; - } - - { - int32_t i, j, k; - // find the palette index closest to white - k=0; - for (i=0; i<256; i++) - { - j = ((int32_t)curpalette[i].r)+((int32_t)curpalette[i].g)+((int32_t)curpalette[i].b); - if (j > k) { k = j; white = i; } - } - } - -} - -static int32_t _internal_getcolumnwidth(int32_t w) -{ - return w/8 - 1; -} - -static int32_t _internal_getrowheight(int32_t w) -{ - return w/8; -} - -static void _internal_clearbackground(int32_t cols, int32_t rows) -{ - UNREFERENCED_PARAMETER(cols); - UNREFERENCED_PARAMETER(rows); -} - -static int32_t _internal_gettime(void) -{ - return 0; -} - -static void _internal_onshowosd(int32_t a) -{ - UNREFERENCED_PARAMETER(a); -} - -//////////////////////////// - -static int32_t _internal_osdfunc_alias(const osdfuncparm_t *parm) -{ - symbol_t *i; - - if (parm->numparms < 1) - { - int32_t j = 0; - OSD_Printf("Alias listing:\n"); - for (i=symbols; i!=NULL; i=i->next) - if (i->func == OSD_ALIAS) - { - j++; - OSD_Printf(" %s \"%s\"\n", i->name, i->help); - } - if (j == 0) - OSD_Printf("No aliases found.\n"); - return OSDCMD_OK; - } - - for (i=symbols; i!=NULL; i=i->next) - { - if (!Bstrcasecmp(parm->parms[0],i->name)) - { - if (parm->numparms < 2) - { - if (i->func == OSD_ALIAS) - OSD_Printf("alias %s \"%s\"\n", i->name, i->help); - else OSD_Printf("%s is a function, not an alias\n",i->name); - return OSDCMD_OK; - } - if (i->func != OSD_ALIAS && i->func != OSD_UNALIASED) - { - OSD_Printf("Cannot override function \"%s\" with alias\n",i->name); - return OSDCMD_OK; - } - } - } - - OSD_RegisterFunction(Bstrdup(parm->parms[0]),Bstrdup(parm->parms[1]),OSD_ALIAS); - if (!osdexecscript) - OSD_Printf("%s\n",parm->raw); - return OSDCMD_OK; -} - -static int32_t _internal_osdfunc_unalias(const osdfuncparm_t *parm) -{ - symbol_t *i; - - if (parm->numparms < 1) - return OSDCMD_SHOWHELP; - - for (i=symbols; i!=NULL; i=i->next) - { - if (!Bstrcasecmp(parm->parms[0],i->name)) - { - if (parm->numparms < 2) - { - if (i->func == OSD_ALIAS) - { - OSD_Printf("Removed alias %s (\"%s\")\n", i->name, i->help); - i->func = OSD_UNALIASED; - } - else OSD_Printf("Invalid alias %s\n",i->name); - return OSDCMD_OK; - } - } - } - OSD_Printf("Invalid alias %s\n",parm->parms[0]); - return OSDCMD_OK; -} - -static int32_t _internal_osdfunc_listsymbols(const osdfuncparm_t *parm) -{ - symbol_t *i; - int32_t maxwidth = 0; - - UNREFERENCED_PARAMETER(parm); - - for (i=symbols; i!=NULL; i=i->next) - if (i->func != OSD_UNALIASED) - maxwidth = max((unsigned)maxwidth,Bstrlen(i->name)); - - if (maxwidth > 0) - { - int32_t x = 0, count = 0; - maxwidth += 3; - OSD_Printf(OSDTEXT_RED "Symbol listing:\n"); - for (i=symbols; i!=NULL; i=i->next) - { - if (i->func != OSD_UNALIASED) - { - int32_t j = hash_find(&h_cvars, i->name); - - if (j != -1 && OSD_CvarModified(&cvars[j])) - { - OSD_Printf(OSDTEXT_RED "*"); - OSD_Printf("%-*s",maxwidth-1,i->name); - } - else OSD_Printf("%-*s",maxwidth,i->name); - - x += maxwidth; - count++; - } - if (x > osdcols - maxwidth) - { - x = 0; - OSD_Printf("\n"); - } - } - if (x) OSD_Printf("\n"); - OSD_Printf(OSDTEXT_RED "Found %d symbols\n",count); - } - return OSDCMD_OK; -} - -static int32_t _internal_osdfunc_help(const osdfuncparm_t *parm) -{ - symbol_t *symb; - - if (parm->numparms != 1) return OSDCMD_SHOWHELP; - symb = findexactsymbol(parm->parms[0]); - if (!symb) - OSD_Printf("Error: no help for undefined symbol \"%s\"\n", parm->parms[0]); - else - OSD_Printf("%s\n", symb->help); - - return OSDCMD_OK; -} - -static int32_t _internal_osdfunc_clear(const osdfuncparm_t *parm) -{ - UNREFERENCED_PARAMETER(parm); - Bmemset(osdtext,0,sizeof(osdtext)); - Bmemset(osdfmt,osdtextpal+(osdtextshade<<5),sizeof(osdfmt)); - osdlines = 1; - return OSDCMD_OK; -} - -static int32_t _internal_osdfunc_history(const osdfuncparm_t *parm) -{ - int32_t i, j = 0; - UNREFERENCED_PARAMETER(parm); - OSD_Printf(OSDTEXT_RED "Command history:\n"); - for (i=OSD_HISTORYDEPTH-1; i>=0; i--) - if (osdhistorybuf[i][0]) - OSD_Printf("%4d \"%s\"\n",osdhistorytotal-osdhistorysize+(++j),osdhistorybuf[i]); - return OSDCMD_OK; -} - -//////////////////////////// - - -// -// OSD_Cleanup() -- Cleans up the on-screen display -// -void OSD_Cleanup(void) -{ - symbol_t *s; - - hash_free(&h_osd); - hash_free(&h_cvars); - - for (; symbols; symbols=s) - { - s=symbols->next; - Bfree(symbols); - } - - if (osdlog) - { - Bfclose(osdlog); - osdlog = NULL; - } - - if (cvars) - { - Bfree(cvars); - cvars = NULL; - } - - osdflags &= ~OSD_INITIALIZED; -} - - -static int32_t osdcmd_cvar_set_osd(const osdfuncparm_t *parm) -{ - int32_t r = osdcmd_cvar_set(parm); - - if (r == OSDCMD_OK) - { - if (!Bstrcasecmp(parm->name, "osdrows")) - { - if (osdrows > osdmaxrows) osdrows = osdmaxrows; - if (osdrowscur!=-1)osdrowscur = osdrows; - return r; - } - else if (!Bstrcasecmp(parm->name, "osdtextmode")) - { - OSD_SetTextMode(osdtextmode); - return r; - } - } - return r; -} - -static int32_t _internal_osdfunc_toggle(const osdfuncparm_t *parm) -{ - int32_t i; - - if (parm->numparms != 1) return OSDCMD_SHOWHELP; - - i = hash_find(&h_cvars, parm->parms[0]); - - if (i == -1) - for (i = osdnumcvars-1; i >= 0; i--) - if (!Bstrcasecmp(parm->parms[0], cvars[i].name)) break; - - if (i == -1 || (cvars[i].type & CVAR_BOOL) != CVAR_BOOL) - { - OSD_Printf("Bad cvar name or cvar not boolean\n"); - return OSDCMD_OK; - } - - *(int32_t *)cvars[i].var = 1 - *(int32_t *)cvars[i].var; - return OSDCMD_OK; -} - -// -// OSD_Init() -- Initializes the on-screen display -// -void OSD_Init(void) -{ - uint32_t i; - cvar_t cvars_osd[] = - { - { "osdeditpal","osdeditpal: sets the palette of the OSD input text",(void *) &osdeditpal, CVAR_INT, 0, MAXPALOOKUPS-1 }, - { "osdpromptpal","osdpromptpal: sets the palette of the OSD prompt",(void *) &osdpromptpal, CVAR_INT, 0, MAXPALOOKUPS-1 }, - { "osdtextpal","osdtextpal: sets the palette of the OSD text",(void *) &osdtextpal, CVAR_INT, 0, MAXPALOOKUPS-1 }, - { "osdeditshade","osdeditshade: sets the shade of the OSD input text",(void *) &osdeditshade, CVAR_INT, 0, 7 }, - { "osdtextshade","osdtextshade: sets the shade of the OSD text",(void *) &osdtextshade, CVAR_INT, 0, 7 }, - { "osdpromptshade","osdpromptshade: sets the shade of the OSD prompt",(void *) &osdpromptshade, CVAR_INT, INT8_MIN, INT8_MAX }, - { "osdrows","osdrows: sets the number of visible lines of the OSD",(void *) &osdrows, CVAR_INT|CVAR_FUNCPTR, 0, MAXPALOOKUPS-1 }, - { "osdtextmode","osdtextmode: set OSD text mode (0:graphical, 1:fast)",(void *) &osdtextmode, CVAR_BOOL|CVAR_FUNCPTR, 0, 1 }, - { "logcutoff","logcutoff: sets the maximal line count of the log file",(void *) &logcutoff, CVAR_INT, 0, 262144 }, - }; - - mutex_init(&m_osdprintf); - - Bmemset(osdtext, asc_Space, TEXTSIZE); - Bmemset(osdfmt, osdtextpal+(osdtextshade<<5), TEXTSIZE); - Bmemset(osdsymbptrs, 0, sizeof(osdsymbptrs)); - - osdnumsymbols = osdnumcvars = 0; - osdlines = 1; - osdflags |= OSD_INITIALIZED; - - hash_init(&h_osd); - hash_init(&h_cvars); - - for (i=0; i: executes a script", _internal_osdfunc_exec); - OSD_RegisterFunction("fileinfo","fileinfo : gets a file's information", _internal_osdfunc_fileinfo); - OSD_RegisterFunction("help","help: displays help for the specified cvar or command; \"listsymbols\" to show all commands",_internal_osdfunc_help); - OSD_RegisterFunction("history","history: displays the console command history",_internal_osdfunc_history); - OSD_RegisterFunction("listsymbols","listsymbols: lists all registered functions, cvars and aliases",_internal_osdfunc_listsymbols); - OSD_RegisterFunction("toggle","toggle: toggles the value of a boolean cvar",_internal_osdfunc_toggle); - OSD_RegisterFunction("unalias","unalias: removes a command alias",_internal_osdfunc_unalias); - - atexit(OSD_Cleanup); -} - - -// -// OSD_SetLogFile() -- Sets the text file where printed text should be echoed -// -void OSD_SetLogFile(char *fn) -{ - if (osdlog) - { - Bfclose(osdlog); - osdlog = NULL; - } - - if (fn) osdlog = Bfopen(fn,"w"); - if (osdlog) setvbuf(osdlog, (char *)NULL, _IONBF, 0); -} - - -// -// OSD_SetFunctions() -- Sets some callbacks which the OSD uses to understand its world -// -void OSD_SetFunctions( - void (*drawchar)(int32_t,int32_t,char,int32_t,int32_t), - void (*drawstr)(int32_t,int32_t,char *,int32_t,int32_t,int32_t), - void (*drawcursor)(int32_t,int32_t,int32_t,int32_t), - int32_t (*colwidth)(int32_t), - int32_t (*rowheight)(int32_t), - void (*clearbg)(int32_t,int32_t), - int32_t (*gtime)(void), - void (*showosd)(int32_t) -) -{ - drawosdchar = drawchar; - drawosdstr = drawstr; - drawosdcursor = drawcursor; - getcolumnwidth = colwidth; - getrowheight = rowheight; - clearbackground = clearbg; - gettime = gtime; - onshowosd = showosd; - - if (!drawosdchar) drawosdchar = _internal_drawosdchar; - if (!drawosdstr) drawosdstr = _internal_drawosdstr; - if (!drawosdcursor) drawosdcursor = _internal_drawosdcursor; - if (!getcolumnwidth) getcolumnwidth = _internal_getcolumnwidth; - if (!getrowheight) getrowheight = _internal_getrowheight; - if (!clearbackground) clearbackground = _internal_clearbackground; - if (!gettime) gettime = _internal_gettime; - if (!onshowosd) onshowosd = _internal_onshowosd; -} - - -// -// OSD_SetParameters() -- Sets the parameters for presenting the text -// -void OSD_SetParameters( - int32_t promptshade, int32_t promptpal, - int32_t editshade, int32_t editpal, - int32_t textshade, int32_t textpal -) -{ - osdpromptshade = promptshade; - osdpromptpal = promptpal; - osdeditshade = editshade; - osdeditpal = editpal; - osdtextshade = textshade; - osdtextpal = textpal; -} - - -// -// OSD_CaptureKey() -- Sets the scancode for the key which activates the onscreen display -// -void OSD_CaptureKey(int32_t sc) -{ - osdkey = sc; -} - -// -// OSD_FindDiffPoint() -- Finds the length of the longest common prefix of 2 strings, stolen from ZDoom -// -static int32_t OSD_FindDiffPoint(const char *str1, const char *str2) -{ - int32_t i; - - for (i = 0; Btolower(str1[i]) == Btolower(str2[i]); i++) - if (str1[i] == 0 || str2[i] == 0) - break; - - return i; -} - -static void OSD_HistoryPrev(void) -{ - if (osdhistorypos >= osdhistorysize-1) return; - - osdhistorypos++; - Bmemcpy(osdeditbuf, osdhistorybuf[osdhistorypos], OSD_EDITLENGTH+1); - - osdeditcursor = 0; - while (osdeditbuf[osdeditcursor]) osdeditcursor++; - osdeditlen = osdeditcursor; - - if (osdeditcursor=osdeditwinend) - { - osdeditwinstart+=(osdeditcursor-osdeditwinend); - osdeditwinend+=(osdeditcursor-osdeditwinend); - } -} - -static void OSD_HistoryNext(void) -{ - if (osdhistorypos < 0) return; - - if (osdhistorypos == 0) - { - osdeditlen=0; - osdeditcursor=0; - osdeditwinstart=0; - osdeditwinend=editlinewidth; - osdhistorypos = -1; - return; - } - - osdhistorypos--; - Bmemcpy(osdeditbuf, osdhistorybuf[osdhistorypos], OSD_EDITLENGTH+1); - - osdeditcursor = 0; - while (osdeditbuf[osdeditcursor]) osdeditcursor++; - osdeditlen = osdeditcursor; - - if (osdeditcursor=osdeditwinend) - { - osdeditwinstart+=(osdeditcursor-osdeditwinend); - osdeditwinend+=(osdeditcursor-osdeditwinend); - } -} - -// -// OSD_HandleKey() -- Handles keyboard input when capturing input. -// Returns 0 if the key was handled internally, or the scancode if it should -// be passed on to the game. -// - -int32_t OSD_HandleChar(char ch) -{ - int32_t i,j; - symbol_t *tabc = NULL; - static symbol_t *lastmatch = NULL; - - if ((osdflags & (OSD_INITIALIZED|OSD_CAPTURE)) != (OSD_INITIALIZED|OSD_CAPTURE)) - return ch; - - if (ch != 9) // tab - lastmatch = NULL; - - switch (ch) - { - case 1: // control a. jump to beginning of line - osdeditcursor=0; - osdeditwinstart=0; - osdeditwinend=editlinewidth; - return 0; - case 2: // control b, move one character left - if (osdeditcursor > 0) osdeditcursor--; - return 0; - case 3: // control c - osdeditbuf[osdeditlen] = 0; - OSD_Printf("%s\n",osdeditbuf); - osdeditlen=0; - osdeditcursor=0; - osdeditwinstart=0; - osdeditwinend=editlinewidth; - osdeditbuf[0] = 0; - return 0; - case 5: // control e, jump to end of line - osdeditcursor = osdeditlen; - osdeditwinend = osdeditcursor; - osdeditwinstart = osdeditwinend-editlinewidth; - if (osdeditwinstart<0) - { - osdeditwinstart=0; - osdeditwinend = editlinewidth; - } - return 0; - case 6: // control f, move one character right - if (osdeditcursor < osdeditlen) osdeditcursor++; - return 0; - case 8: -// case 127: // control h, backspace - if (!osdeditcursor || !osdeditlen) return 0; - if ((osdflags & OSD_OVERTYPE) == 0) - { - if (osdeditcursor < osdeditlen) - Bmemmove(osdeditbuf+osdeditcursor-1, osdeditbuf+osdeditcursor, osdeditlen-osdeditcursor); - osdeditlen--; - } - osdeditcursor--; - if (osdeditcursor0; i--) if (osdeditbuf[i-1] == ' ') break; - for (j=0; osdeditbuf[i] != ' ' && i < osdeditlen; j++,i++) - osdedittmp[j] = osdeditbuf[i]; - osdedittmp[j] = 0; - - if (j > 0) - { - tabc = findsymbol(osdedittmp, NULL); - - if (tabc && tabc->next && findsymbol(osdedittmp, tabc->next)) - { - symbol_t *symb=tabc; - int32_t maxwidth = 0, x = 0, num = 0, diffpt; - - while (symb && symb != lastmatch) - { - num++; - - if (lastmatch) - { - diffpt = OSD_FindDiffPoint(symb->name,lastmatch->name); - if (diffpt < commonsize) - commonsize = diffpt; - } - - maxwidth = max((unsigned)maxwidth,Bstrlen(symb->name)); - lastmatch = symb; - if (!lastmatch->next) break; - symb=findsymbol(osdedittmp, lastmatch->next); - } - OSD_Printf(OSDTEXT_RED "Found %d possible completions for '%s':\n",num,osdedittmp); - maxwidth += 3; - symb = tabc; - OSD_Printf(" "); - while (symb && (symb != lastmatch)) - { - tabc = lastmatch = symb; - OSD_Printf("%-*s",maxwidth,symb->name); - if (!lastmatch->next) break; - symb=findsymbol(osdedittmp, lastmatch->next); - x += maxwidth; - if (x > (osdcols - maxwidth)) - { - x = 0; - OSD_Printf("\n"); - if (symb && (symb != lastmatch)) - OSD_Printf(" "); - } - } - if (x) OSD_Printf("\n"); - OSD_Printf(OSDTEXT_RED "Press TAB again to cycle through matches\n"); - } - } - } - else - { - tabc = findsymbol(osdedittmp, lastmatch->next); - if (!tabc && lastmatch) - tabc = findsymbol(osdedittmp, NULL); // wrap */ - } - - if (tabc) - { - for (i=osdeditcursor; i>0; i--) if (osdeditbuf[i-1] == ' ') break; - osdeditlen = i; - for (j=0; tabc->name[j] && osdeditlen <= OSD_EDITLENGTH - && (osdeditlen < commonsize); i++,j++,osdeditlen++) - osdeditbuf[i] = tabc->name[j]; - osdeditcursor = osdeditlen; - osdeditwinend = osdeditcursor; - osdeditwinstart = osdeditwinend-editlinewidth; - if (osdeditwinstart<0) - { - osdeditwinstart=0; - osdeditwinend = editlinewidth; - } - - lastmatch = tabc; - } - } - return 0; - case 11: // control k, delete all to end of line - Bmemset(osdeditbuf+osdeditcursor,0,sizeof(osdeditbuf)-osdeditcursor); - return 0; - case 12: // control l, clear screen - Bmemset(osdtext,0,sizeof(osdtext)); - Bmemset(osdfmt,osdtextpal+(osdtextshade<<5),sizeof(osdfmt)); - osdlines = 1; - return 0; - case 13: // control m, enter - if (osdeditlen>0) - { - osdeditbuf[osdeditlen] = 0; - if (Bstrcmp(osdhistorybuf[0], osdeditbuf)) - { - Bmemmove(osdhistorybuf[1], osdhistorybuf[0], (OSD_HISTORYDEPTH-1)*(OSD_EDITLENGTH+1)); - Bmemmove(osdhistorybuf[0], osdeditbuf, OSD_EDITLENGTH+1); - if (osdhistorysize < OSD_HISTORYDEPTH) osdhistorysize++; - osdhistorytotal++; - if (osdexeccount == OSD_HISTORYDEPTH) - OSD_Printf("Command Buffer Warning: Failed queueing command " - "for execution. Buffer full.\n"); - else - osdexeccount++; - } - else - { - if (osdexeccount == OSD_HISTORYDEPTH) - OSD_Printf("Command Buffer Warning: Failed queueing command " - "for execution. Buffer full.\n"); - else - osdexeccount++; - } - osdhistorypos=-1; - } - - osdeditlen=0; - osdeditcursor=0; - osdeditwinstart=0; - osdeditwinend=editlinewidth; - return 0; - case 14: // control n, next (ie. down arrow) - OSD_HistoryNext(); - return 0; - case 16: // control p, previous (ie. up arrow) - OSD_HistoryPrev(); - return 0; - case 21: // control u, delete all to beginning - if (osdeditcursor>0 && osdeditlen) - { - if (osdeditcursor0 && osdeditlen>0) - { - i=osdeditcursor; - while (i>0 && osdeditbuf[i-1]==asc_Space) i--; - while (i>0 && osdeditbuf[i-1]!=asc_Space) i--; - if (osdeditcursor= asc_Space) // text char - { - if ((osdflags & OSD_OVERTYPE) == 0) - { - if (osdeditlen == OSD_EDITLENGTH) // buffer full, can't insert another char - return 0; - if (osdeditcursor < osdeditlen) - Bmemmove(osdeditbuf+osdeditcursor+1, osdeditbuf+osdeditcursor, osdeditlen-osdeditcursor); - osdeditlen++; - } - else if (osdeditcursor == osdeditlen) - osdeditlen++; - - osdeditbuf[osdeditcursor++] = ch; - - if (osdeditcursor > osdeditwinend) - osdeditwinstart++, osdeditwinend++; - } - return 0; - } - return 0; -} - -int32_t OSD_HandleScanCode(int32_t sc, int32_t press) -{ - if ((osdflags & OSD_INITIALIZED) == 0) - return sc; - - if (sc == osdkey) - { - if (press) - { - osdscroll = -osdscroll; - if (osdrowscur == -1) - osdscroll = 1; - else if (osdrowscur == osdrows) - osdscroll = -1; - osdrowscur += osdscroll; - OSD_CaptureInput(osdscroll == 1); - osdscrtime = getticks(); - } - return 0; - } - else if ((osdflags & OSD_CAPTURE) == 0) - return sc; - - if (!press) - { - if (sc == sc_LeftShift || sc == sc_RightShift) - osdflags &= ~OSD_SHIFT; - if (sc == sc_LeftControl || sc == sc_RightControl) - osdflags &= ~OSD_CTRL; - return 0; - } - - keytime = gettime(); - - switch (sc) - { - case sc_Escape: - // OSD_ShowDisplay(0); - osdscroll = -1; - osdrowscur--; - OSD_CaptureInput(0); - osdscrtime = getticks(); - break; - case sc_PgUp: - if (osdhead < osdlines-1) - osdhead++; - break; - case sc_PgDn: - if (osdhead > 0) - osdhead--; - break; - case sc_Home: - if (osdflags & OSD_CTRL) - osdhead = osdlines-1; - else - { - osdeditcursor = 0; - osdeditwinstart = osdeditcursor; - osdeditwinend = osdeditwinstart+editlinewidth; - } - break; - case sc_End: - if (osdflags & OSD_CTRL) - osdhead = 0; - else - { - osdeditcursor = osdeditlen; - osdeditwinend = osdeditcursor; - osdeditwinstart = osdeditwinend-editlinewidth; - if (osdeditwinstart<0) - { - osdeditwinstart=0; - osdeditwinend = editlinewidth; - } - } - break; - case sc_Insert: - osdflags = (osdflags & ~OSD_OVERTYPE) | (-((osdflags & OSD_OVERTYPE) == 0) & OSD_OVERTYPE); - break; - case sc_LeftArrow: - if (osdeditcursor>0) - { - if (osdflags & OSD_CTRL) - { - while (osdeditcursor>0) - { - if (osdeditbuf[osdeditcursor-1] != asc_Space) - break; - osdeditcursor--; - } - while (osdeditcursor>0) - { - if (osdeditbuf[osdeditcursor-1] == asc_Space) - break; - osdeditcursor--; - } - } - else osdeditcursor--; - } - if (osdeditcursor=osdeditwinend) - { - osdeditwinstart+=(osdeditcursor-osdeditwinend); - osdeditwinend+=(osdeditcursor-osdeditwinend); - } - break; - case sc_UpArrow: - OSD_HistoryPrev(); - break; - case sc_DownArrow: - OSD_HistoryNext(); - break; - case sc_LeftShift: - case sc_RightShift: - osdflags |= OSD_SHIFT; - break; - case sc_LeftControl: - case sc_RightControl: - osdflags |= OSD_CTRL; - break; - case sc_CapsLock: - osdflags = (osdflags & ~OSD_CAPS) | (-((osdflags & OSD_CAPS) == 0) & OSD_CAPS); - break; - case sc_Delete: - if (osdeditcursor == osdeditlen || !osdeditlen) - return 0; - if (osdeditcursor <= osdeditlen-1) - Bmemmove(osdeditbuf+osdeditcursor, osdeditbuf+osdeditcursor+1, osdeditlen-osdeditcursor-1); - osdeditlen--; - break; - } - return 0; -} - - -// -// OSD_ResizeDisplay() -- Handles readjustment of the display when the screen resolution -// changes on us. -// -void OSD_ResizeDisplay(int32_t w, int32_t h) -{ - int32_t newcols; - int32_t newmaxlines; - char newtext[TEXTSIZE]; - char newfmt[TEXTSIZE]; - int32_t i,j,k; - - newcols = getcolumnwidth(w); - newmaxlines = TEXTSIZE / newcols; - - j = min(newmaxlines, osdmaxlines); - k = min(newcols, osdcols); - - Bmemset(newtext, asc_Space, TEXTSIZE); - for (i=j-1; i>=0; i--) - { - Bmemcpy(newtext+newcols*i, osdtext+osdcols*i, k); - Bmemcpy(newfmt+newcols*i, osdfmt+osdcols*i, k); - } - - Bmemcpy(osdtext, newtext, TEXTSIZE); - Bmemcpy(osdfmt, newfmt, TEXTSIZE); - osdcols = newcols; - osdmaxlines = newmaxlines; - osdmaxrows = getrowheight(h)-2; - - if (osdrows > osdmaxrows) osdrows = osdmaxrows; - - osdpos = 0; - osdhead = 0; - osdeditwinstart = 0; - osdeditwinend = editlinewidth; - white = -1; -} - - -// -// OSD_CaptureInput() -// -void OSD_CaptureInput(int32_t cap) -{ - osdflags = (osdflags & ~(OSD_CAPTURE|OSD_CTRL|OSD_SHIFT)) | (-cap & OSD_CAPTURE); - - grabmouse(cap == 0); - onshowosd(cap); - - if (cap) - releaseallbuttons(); - - bflushchars(); -} - - -// -// OSD_ShowDisplay() -- Shows or hides the onscreen display -// -void OSD_ShowDisplay(int32_t onf) -{ - osdflags = (osdflags & ~OSD_DRAW) | (-onf & OSD_DRAW); - OSD_CaptureInput(onf); -} - - -// -// OSD_Draw() -- Draw the onscreen display -// - -void OSD_Draw(void) -{ - uint32_t topoffs; - int32_t row, lines, x, len; - - if ((osdflags & OSD_INITIALIZED) == 0) - return; - - if (osdrowscur == 0) - OSD_ShowDisplay(osdflags & OSD_DRAW ? 0 : 1); - - if (osdrowscur == osdrows) - osdscroll = 0; - else - { - int32_t j; - - if ((osdrowscur < osdrows && osdscroll == 1) || osdrowscur < -1) - { - j = (getticks()-osdscrtime); - while (j > -1) - { - osdrowscur++; - j -= 200/osdrows; - if (osdrowscur > osdrows-1) - break; - } - } - if ((osdrowscur > -1 && osdscroll == -1) || osdrowscur > osdrows) - { - j = (getticks()-osdscrtime); - while (j > -1) - { - osdrowscur--; - j -= 200/osdrows; - if (osdrowscur < 1) - break; - } - } - osdscrtime = getticks(); - } - - if ((osdflags & OSD_DRAW) == 0 || !osdrowscur) return; - - topoffs = osdhead * osdcols; - row = osdrowscur-1; - lines = min(osdlines-osdhead, osdrowscur); - - begindrawing(); - - clearbackground(osdcols,osdrowscur+1); - - for (; lines>0; lines--, row--) - { - drawosdstr(0,row,osdtext+topoffs,osdcols,osdtextshade,osdtextpal); - topoffs+=osdcols; - } - - { - int32_t offset = ((osdflags & (OSD_CAPS|OSD_SHIFT)) == (OSD_CAPS|OSD_SHIFT) && osdhead > 0); - int32_t shade = osdpromptshade?osdpromptshade:(sintable[(totalclock<<4)&2047]>>11); - - if (osdhead == osdlines-1) drawosdchar(0,osdrowscur,'~',shade,osdpromptpal); - else if (osdhead > 0) drawosdchar(0,osdrowscur,'^',shade,osdpromptpal); - if (osdflags & OSD_CAPS) drawosdchar(0+(osdhead > 0),osdrowscur,'C',shade,osdpromptpal); - if (osdflags & OSD_SHIFT) drawosdchar(1+(osdflags & OSD_CAPS && osdhead > 0),osdrowscur,'H',shade,osdpromptpal); - - drawosdchar(2+offset,osdrowscur,'>',shade,osdpromptpal); - - len = min(osdcols-1-3-offset, osdeditlen-osdeditwinstart); - for (x=len-1; x>=0; x--) - drawosdchar(3+x+offset,osdrowscur,osdeditbuf[osdeditwinstart+x],osdeditshade<<1,osdeditpal); - - offset += 3+osdeditcursor-osdeditwinstart; - - drawosdcursor(offset,osdrowscur,osdflags & OSD_OVERTYPE,keytime); - - if (osdver[0]) - drawosdstr(osdcols-osdverlen,osdrowscur - (offset >= osdcols-osdverlen), - osdver,osdverlen,(sintable[(totalclock<<4)&2047]>>11),osdverpal); - } - - enddrawing(); -} - - -// -// OSD_Printf() -- Print a string to the onscreen display -// and write it to the log file -// - -static inline void OSD_LineFeed(void) -{ - Bmemmove(osdtext+osdcols, osdtext, TEXTSIZE-osdcols); - Bmemset(osdtext, asc_Space, osdcols); - Bmemmove(osdfmt+osdcols, osdfmt, TEXTSIZE-osdcols); - Bmemset(osdfmt, osdtextpal, osdcols); - if (osdlines < osdmaxlines) osdlines++; -} -#define MAX_ERRORS 4096 -void OSD_Printf(const char *fmt, ...) -{ - static char tmpstr[8192]; - char *chp, p=osdtextpal, s=osdtextshade; - va_list va; - - mutex_lock(&m_osdprintf); - - va_start(va, fmt); - Bvsnprintf(tmpstr, 8192, fmt, va); - va_end(va); - - if (tmpstr[0]=='^' && tmpstr[1]=='1' && tmpstr[2]=='0' && ++OSD_errors > MAX_ERRORS) - { - if (OSD_errors == MAX_ERRORS + 1) - Bstrcpy(tmpstr, OSD_ERROR "\nToo many errors. Logging errors stopped.\n"); - else - { - OSD_errors = MAX_ERRORS + 2; - mutex_unlock(&m_osdprintf); - return; - } - } - - if (linecnt < logcutoff) - { - if (osdlog && (!logcutoff || linecnt < logcutoff)) - { - chp = Bstrdup(tmpstr); - Bfputs(OSD_StripColors(chp, tmpstr), osdlog); - Bprintf("%s", chp); - Bfree(chp); - } - } - else if (linecnt == logcutoff) - { - Bfputs("\nMaximal log size reached. Logging stopped.\nSet the \"logcutoff\" console variable to a higher value if you need a longer log.\n", osdlog); - linecnt = logcutoff + 1; - } - - chp = tmpstr; - do - { - if (*chp == '\n') - { - osdpos=0; - linecnt++; - OSD_LineFeed(); - continue; - } - - if (*chp == '\r') - { - osdpos=0; - continue; - } - - if (*chp == '^') - { - if (isdigit(*(chp+1))) - { - char smallbuf[4]; - if (!isdigit(*(++chp+1))) - { - smallbuf[0] = *(chp); - smallbuf[1] = '\0'; - p = atol(smallbuf); - continue; - } - - smallbuf[0] = *(chp++); - smallbuf[1] = *(chp); - smallbuf[2] = '\0'; - p = atol(smallbuf); - continue; - } - - if (Btoupper(*(chp+1)) == 'S') - { - chp++; - if (isdigit(*(++chp))) - s = *chp; - continue; - } - - if (Btoupper(*(chp+1)) == 'O') - { - chp++; - p = osdtextpal; - s = osdtextshade; - continue; - } - } - - osdtext[osdpos] = *chp; - osdfmt[osdpos++] = p+(s<<5); - - if (osdpos == osdcols) - { - osdpos = 0; - OSD_LineFeed(); - } - } - while (*(++chp)); - - mutex_unlock(&m_osdprintf); -} - - -// -// OSD_DispatchQueued() -- Executes any commands queued in the buffer -// -void OSD_DispatchQueued(void) -{ - int32_t cmd; - - if (!osdexeccount) return; - - cmd=osdexeccount-1; - osdexeccount=0; - - for (; cmd>=0; cmd--) - OSD_Dispatch((const char *)osdhistorybuf[cmd]); -} - - -// -// OSD_Dispatch() -- Executes a command string -// - -static char *strtoken(char *s, char **ptrptr, int32_t *restart) -{ - char *p, *p2, *start; - - *restart = 0; - if (!ptrptr) return NULL; - - // if s != NULL, we process from the start of s, otherwise - // we just continue with where ptrptr points to - if (s) p = s; - else p = *ptrptr; - - if (!p) return NULL; - - // eat up any leading whitespace - while (*p != 0 && *p != ';' && *p == ' ') p++; - - // a semicolon is an end of statement delimiter like a \0 is, so we signal - // the caller to 'restart' for the rest of the string pointed at by *ptrptr - if (*p == ';') - { - *restart = 1; - *ptrptr = p+1; - return NULL; - } - // or if we hit the end of the input, signal all done by nulling *ptrptr - else if (*p == 0) - { - *ptrptr = NULL; - return NULL; - } - - if (*p == '\"') - { - // quoted string - start = ++p; - p2 = p; - while (*p != 0) - { - if (*p == '\"') - { - p++; - break; - } - else if (*p == '\\') - { - switch (*(++p)) - { - case 'n': - *p2 = '\n'; break; - case 'r': - *p2 = '\r'; break; - default: - *p2 = *p; break; - } - } - else - { - *p2 = *p; - } - p2++, p++; - } - *p2 = 0; - } - else - { - start = p; - while (*p != 0 && *p != ';' && *p != ' ') p++; - } - - // if we hit the end of input, signal all done by nulling *ptrptr - if (*p == 0) - { - *ptrptr = NULL; - } - // or if we came upon a semicolon, signal caller to restart with the - // string at *ptrptr - else if (*p == ';') - { - *p = 0; - *ptrptr = p+1; - *restart = 1; - } - // otherwise, clip off the token and carry on - else - { - *(p++) = 0; - *ptrptr = p; - } - - return start; -} - -#define MAXPARMS 512 -int32_t OSD_Dispatch(const char *cmd) -{ - char *workbuf, *wp, *wtp, *state; - int32_t restart = 0; - - workbuf = state = Bstrdup(cmd); - if (!workbuf) return -1; - - do - { - int32_t numparms = 0; - symbol_t *symb; - osdfuncparm_t ofp; - char *parms[MAXPARMS]; - - Bmemset(parms, 0, sizeof(parms)); - - if ((wp = strtoken(state, &wtp, &restart)) == NULL) - { - state = wtp; - continue; - } - - if ((symb = findexactsymbol(wp)) == NULL) - { - if ((wp[0] != '/' || wp[1] != '/') && !m32_osd_tryscript) // cheap hack for comments in cfgs - { - OSD_Printf(OSDTEXT_RED "\"%s\" is not a valid command or cvar\n", wp); - } - else if (m32_osd_tryscript) - { - M32RunScript(cmd); - } - Bfree(workbuf); - return -1; - } - - ofp.name = wp; - while (wtp && !restart) - { - wp = strtoken(NULL, &wtp, &restart); - if (wp && numparms < MAXPARMS) parms[numparms++] = wp; - } - ofp.numparms = numparms; - ofp.parms = (const char **)parms; - ofp.raw = cmd; - - switch ((intptr_t)symb->func) - { - case(intptr_t)OSD_ALIAS: - OSD_Dispatch(symb->help); - case(intptr_t)OSD_UNALIASED: - break; - default: - switch (symb->func(&ofp)) - { - case OSDCMD_OK: - break; - case OSDCMD_SHOWHELP: - OSD_Printf("%s\n", symb->help); - break; - } - break; - } - - state = wtp; - } - while (wtp && restart); - - Bfree(workbuf); - - return 0; -} - - -// -// OSD_RegisterFunction() -- Registers a new function -// -int32_t OSD_RegisterFunction(const char *name, const char *help, int32_t (*func)(const osdfuncparm_t *)) -{ - symbol_t *symb; - const char *cp; - - if ((osdflags & OSD_INITIALIZED) == 0) - OSD_Init(); - - if (!name || !name[0]) - { - OSD_Printf("OSD_RegisterFunction(): can't register function with null name\n"); - return -1; - } - - if (!func) - { - OSD_Printf("OSD_RegisterFunction(): can't register null function\n"); - return -1; - } - - // check for illegal characters in name - for (cp = name; *cp; cp++) - { - if ((cp == name) && (*cp >= '0') && (*cp <= '9')) - { - OSD_Printf("OSD_RegisterFunction(): first character of function name \"%s\" must not be a numeral\n", name); - return -1; - } - if ((*cp < '0') || - (*cp > '9' && *cp < 'A') || - (*cp > 'Z' && *cp < 'a' && *cp != '_') || - (*cp > 'z')) - { - OSD_Printf("OSD_RegisterFunction(): illegal character in function name \"%s\"\n", name); - return -1; - } - } - - if (!help) help = "(no description for this function)"; - - symb = findexactsymbol(name); - - if (symb) // allow this now for reusing an alias name - { - /* - if (symb->func != OSD_ALIAS && symb->func != OSD_UNALIASED) - { - OSD_Printf("OSD_RegisterFunction(): \"%s\" is already defined\n", name); - return -1; - } - */ -// Bfree((char *)symb->help); - symb->help = help; - symb->func = func; - return 0; - } - - symb = addnewsymbol(name); - - if (!symb) - { - OSD_Printf("OSD_RegisterFunction(): Failed registering function \"%s\"\n", name); - return -1; - } - - symb->name = name; - symb->help = help; - symb->func = func; - - return 0; -} - -// -// OSD_SetVersionString() -// -void OSD_SetVersion(const char *version, int32_t shade, int32_t pal) -{ - Bstrcpy(osdver,version); - osdverlen = Bstrlen(osdver); - osdvershade = shade; - osdverpal = pal; -} - -// -// addnewsymbol() -- Allocates space for a new symbol and attaches it -// appropriately to the lists, sorted. -// - -static symbol_t *addnewsymbol(const char *name) -{ - symbol_t *newsymb, *s, *t; - - if (osdnumsymbols >= MAXSYMBOLS) return NULL; - newsymb = (symbol_t *)Bmalloc(sizeof(symbol_t)); - if (!newsymb) { return NULL; } - Bmemset(newsymb, 0, sizeof(symbol_t)); - - // link it to the main chain - if (!symbols) - { - symbols = newsymb; - } - else - { - if (Bstrcasecmp(name, symbols->name) <= 0) - { - t = symbols; - symbols = newsymb; - symbols->next = t; - } - else - { - s = symbols; - while (s->next) - { - if (Bstrcasecmp(s->next->name, name) > 0) break; - s=s->next; - } - t = s->next; - s->next = newsymb; - newsymb->next = t; - } - } - hash_add(&h_osd, name, osdnumsymbols, 1); - name = Bstrtolower(Bstrdup(name)); - hash_add(&h_osd, name, osdnumsymbols, 1); - Bfree((void *)name); - osdsymbptrs[osdnumsymbols++] = newsymb; - return newsymb; -} - - -// -// findsymbol() -- Finds a symbol, possibly partially named -// -static symbol_t *findsymbol(const char *name, symbol_t *startingat) -{ - if (!startingat) startingat = symbols; - if (!startingat) return NULL; - - for (; startingat; startingat=startingat->next) - if (startingat->func != OSD_UNALIASED && !Bstrncasecmp(name, startingat->name, Bstrlen(name))) return startingat; - - return NULL; -} - -// -// findexactsymbol() -- Finds a symbol, complete named -// -static symbol_t *findexactsymbol(const char *name) -{ - int32_t i; - char *lname = Bstrdup(name); - if (!symbols) return NULL; - - i = hash_find(&h_osd,lname); - if (i > -1) - { -// if ((symbol_t *)osdsymbptrs[i]->func == OSD_UNALIASED) -// return NULL; - Bfree(lname); - return osdsymbptrs[i]; - } - - // try it again - Bstrtolower(lname); - i = hash_find(&h_osd,lname); - Bfree(lname); - - if (i > -1) - return osdsymbptrs[i]; - return NULL; -} - -int32_t osdcmd_cvar_set(const osdfuncparm_t *parm) -{ - int32_t showval = (parm->numparms == 0); - int32_t i; - - i = hash_find(&h_cvars, parm->name); - - if (i < 0) - for (i = osdnumcvars-1; i >= 0; i--) - if (!Bstrcasecmp(parm->name, cvars[i].name)) break; - - if (i > -1) - { - if ((cvars[i].type & CVAR_NOMULTI) && numplayers > 1) - { - // sound the alarm - OSD_Printf("Cvar \"%s\" locked in multiplayer.\n",cvars[i].name); - return OSDCMD_OK; - } - - switch (cvars[i].type&(CVAR_FLOAT|CVAR_DOUBLE|CVAR_INT|CVAR_UINT|CVAR_BOOL|CVAR_STRING)) - { - case CVAR_FLOAT: - { - float val; - if (showval) - { - OSD_Printf("\"%s\" is \"%f\"\n%s\n",cvars[i].name,*(float *)cvars[i].var,(char *)cvars[i].helpstr); - return OSDCMD_OK; - } - - sscanf(parm->parms[0], "%f", &val); - - if (val < cvars[i].min || val > cvars[i].max) - { - OSD_Printf("%s value out of range\n",cvars[i].name); - return OSDCMD_OK; - } - *(float *)cvars[i].var = val; - if (!OSD_ParsingScript()) - OSD_Printf("%s %f",cvars[i].name,val); - } - break; - case CVAR_DOUBLE: - { - double val; - if (showval) - { - OSD_Printf("\"%s\" is \"%f\"\n%s\n",cvars[i].name,*(double *)cvars[i].var,(char *)cvars[i].helpstr); - return OSDCMD_OK; - } - - sscanf(parm->parms[0], "%lf", &val); - - if (val < cvars[i].min || val > cvars[i].max) - { - OSD_Printf("%s value out of range\n",cvars[i].name); - return OSDCMD_OK; - } - *(double *)cvars[i].var = val; - if (!OSD_ParsingScript()) - OSD_Printf("%s %f",cvars[i].name,val); - } - break; - case CVAR_INT: - case CVAR_UINT: - case CVAR_BOOL: - { - int32_t val; - if (showval) - { - OSD_Printf("\"%s\" is \"%d\"\n%s\n",cvars[i].name,*(int32_t *)cvars[i].var,(char *)cvars[i].helpstr); - return OSDCMD_OK; - } - - val = atoi(parm->parms[0]); - if (cvars[i].type & CVAR_BOOL) val = val != 0; - - if (val < cvars[i].min || val > cvars[i].max) - { - OSD_Printf("%s value out of range\n",cvars[i].name); - return OSDCMD_OK; - } - *(int32_t *)cvars[i].var = val; - if (!OSD_ParsingScript()) - OSD_Printf("%s %d",cvars[i].name,val); - } - break; - case CVAR_STRING: - { - if (showval) - { - OSD_Printf("\"%s\" is \"%s\"\n%s\n",cvars[i].name,(char *)cvars[i].var,(char *)cvars[i].helpstr); - return OSDCMD_OK; - } - - Bstrncpy((char *)cvars[i].var, parm->parms[0], cvars[i].max-1); - ((char *)cvars[i].var)[cvars[i].max-1] = 0; - if (!OSD_ParsingScript()) - OSD_Printf("%s %s",cvars[i].name,(char *)cvars[i].var); - } - break; - default: - break; - } - } - - if (!OSD_ParsingScript()) - OSD_Printf("\n"); - - return OSDCMD_OK; -} - -void OSD_WriteCvars(FILE *fp) -{ - uint32_t i; - - if (!fp) - return; - - for (i=0; i - -#ifndef MAC_OS_VERSION_10_3 -# define MAC_OS_VERSION_10_3 1030 -#endif - -int osx_msgbox(char *name, char *msg) -{ - NSString *mmsg = [[NSString alloc] initWithCString: msg]; - -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3 - NSAlert *alert = [[NSAlert alloc] init]; - [alert addButtonWithTitle: @"OK"]; - [alert setInformativeText: mmsg]; - [alert setAlertStyle: NSInformationalAlertStyle]; - - [alert runModal]; - - [alert release]; - -#else - NSRunAlertPanel(nil, mmsg, @"OK", nil, nil); -#endif - - [mmsg release]; - return 0; -} - -int osx_ynbox(char *name, char *msg) -{ - NSString *mmsg = [[NSString alloc] initWithCString: msg]; - int r; - -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3 - NSAlert *alert = [[NSAlert alloc] init]; - - [alert addButtonWithTitle:@"Yes"]; - [alert addButtonWithTitle:@"No"]; - [alert setInformativeText: mmsg]; - [alert setAlertStyle: NSInformationalAlertStyle]; - - r = ([alert runModal] == NSAlertFirstButtonReturn); - - [alert release]; -#else - r = (NSRunAlertPanel(nil, mmsg, @"Yes", @"No", nil) == NSAlertDefaultReturn); -#endif - - [mmsg release]; - return r; -} diff --git a/polymer-perf/eduke32/build/src/polymer.c b/polymer-perf/eduke32/build/src/polymer.c deleted file mode 100644 index 7a2c49781..000000000 --- a/polymer-perf/eduke32/build/src/polymer.c +++ /dev/null @@ -1,5375 +0,0 @@ -// blah - -#ifdef USE_OPENGL - -#define POLYMER_C -#include "polymer.h" -#include "engine_priv.h" -#include "crc32.h" - -// CVARS -int32_t pr_lighting = 1; -int32_t pr_normalmapping = 1; -int32_t pr_specularmapping = 1; -int32_t pr_shadows = 1; -int32_t pr_shadowcount = 5; -int32_t pr_shadowdetail = 4; -int32_t pr_shadowfiltering = 1; -int32_t pr_maxlightpasses = 10; -int32_t pr_maxlightpriority = PR_MAXLIGHTPRIORITY; -int32_t pr_fov = 426; // appears to be the classic setting. -float pr_customaspect = 0.0f; -int32_t pr_billboardingmode = 1; -int32_t pr_verbosity = 1; // 0: silent, 1: errors and one-times, 2: multiple-times, 3: flood -int32_t pr_wireframe = 0; -int32_t pr_vbos = 2; -int32_t pr_gpusmoothing = 1; -int32_t pr_overrideparallax = 0; -float pr_parallaxscale = 0.1f; -float pr_parallaxbias = 0.0f; -int32_t pr_overridespecular = 0; -float pr_specularpower = 15.0f; -float pr_specularfactor = 1.0f; -int32_t pr_highpalookups = 1; -int32_t pr_overridehud = 0; -float pr_hudxadd = 0.0f; -float pr_hudyadd = 0.0f; -float pr_hudzadd = 0.0f; -int32_t pr_hudangadd = 0; -int32_t pr_hudfov = 426; -float pr_overridemodelscale = 0.0f; -int32_t pr_ati_fboworkaround = 0; -int32_t pr_ati_nodepthoffset = 0; -#ifdef __APPLE__ -int32_t pr_ati_textureformat_one = 0; -#endif - -int32_t r_pr_maxlightpasses = 5; // value of the cvar (not live value), used to detect changes - -GLenum mapvbousage = GL_STREAM_DRAW_ARB; -GLenum modelvbousage = GL_STATIC_DRAW_ARB; - -// BUILD DATA -_prsector *prsectors[MAXSECTORS]; -_prwall *prwalls[MAXWALLS]; -_prsprite *prsprites[MAXSPRITES]; -_prmaterial mdspritematerial; -_prhighpalookup prhighpalookups[MAXBASEPALS][MAXPALOOKUPS]; - -static const GLfloat vertsprite[4 * 5] = -{ - -0.5f, 0.0f, 0.0f, - 0.0f, 1.0f, - 0.5f, 0.0f, 0.0f, - 1.0f, 1.0f, - 0.5f, 1.0f, 0.0f, - 1.0f, 0.0f, - -0.5f, 1.0f, 0.0f, - 0.0f, 0.0f, -}; - -static const GLfloat horizsprite[4 * 5] = -{ - -0.5f, 0.0f, 0.5f, - 0.0f, 0.0f, - 0.5f, 0.0f, 0.5f, - 1.0f, 0.0f, - 0.5f, 0.0f, -0.5f, - 1.0f, 1.0f, - -0.5f, 0.0f, -0.5f, - 0.0f, 1.0f, -}; - -static const GLfloat skyboxdata[4 * 5 * 6] = -{ - // -ZY - -0.5f, -0.5f, 0.5f, - 0.0f, 1.0f, - -0.5f, -0.5f, -0.5f, - 1.0f, 1.0f, - -0.5f, 0.5f, -0.5f, - 1.0f, 0.0f, - -0.5f, 0.5f, 0.5f, - 0.0f, 0.0f, - - // XY - -0.5f, -0.5f, -0.5f, - 0.0f, 1.0f, - 0.5f, -0.5f, -0.5f, - 1.0f, 1.0f, - 0.5f, 0.5f, -0.5f, - 1.0f, 0.0f, - -0.5f, 0.5f, -0.5f, - 0.0f, 0.0f, - - // ZY - 0.5f, -0.5f, -0.5f, - 0.0f, 1.0f, - 0.5f, -0.5f, 0.5f, - 1.0f, 1.0f, - 0.5f, 0.5f, 0.5f, - 1.0f, 0.0f, - 0.5f, 0.5f, -0.5f, - 0.0f, 0.0f, - - // -XY - 0.5f, -0.5f, 0.5f, - 0.0f, 1.0f, - -0.5f, -0.5f, 0.5f, - 1.0f, 1.0f, - -0.5f, 0.5f, 0.5f, - 1.0f, 0.0f, - 0.5f, 0.5f, 0.5f, - 0.0f, 0.0f, - - // XZ - -0.5f, 0.5f, -0.5f, - 1.0f, 1.0f, - 0.5f, 0.5f, -0.5f, - 1.0f, 0.0f, - 0.5f, 0.5f, 0.5f, - 0.0f, 0.0f, - -0.5f, 0.5f, 0.5f, - 0.0f, 1.0f, - - // X-Z - -0.5f, -0.5f, 0.5f, - 0.0f, 0.0f, - 0.5f, -0.5f, 0.5f, - 0.0f, 1.0f, - 0.5f, -0.5f, -0.5f, - 1.0f, 1.0f, - -0.5f, -0.5f, -0.5f, - 1.0f, 0.0f, -}; - -GLuint skyboxdatavbo; - -GLfloat artskydata[16]; - -// LIGHTS -#pragma pack(push,1) -_prlight prlights[PR_MAXLIGHTS]; -int32_t lightcount; -int32_t curlight; -#pragma pack(pop) - -static const GLfloat shadowBias[] = -{ - 0.5, 0.0, 0.0, 0.0, - 0.0, 0.5, 0.0, 0.0, - 0.0, 0.0, 0.5, 0.0, - 0.5, 0.5, 0.5, 1.0 -}; - -// MATERIALS -_prprogrambit prprogrambits[PR_BIT_COUNT] = { - { - 1 << PR_BIT_HEADER, - // vert_def - "#version 120\n" - "#extension GL_ARB_texture_rectangle : enable\n" - "\n", - // vert_prog - "", - // frag_def - "#version 120\n" - "#extension GL_ARB_texture_rectangle : enable\n" - "\n", - // frag_prog - "", - }, - { - 1 << PR_BIT_ANIM_INTERPOLATION, - // vert_def - "attribute vec4 nextFrameData;\n" - "attribute vec4 nextFrameNormal;\n" - "uniform float frameProgress;\n" - "\n", - // vert_prog - " vec4 currentFramePosition;\n" - " vec4 nextFramePosition;\n" - "\n" - " currentFramePosition = curVertex * (1.0 - frameProgress);\n" - " nextFramePosition = nextFrameData * frameProgress;\n" - " curVertex = currentFramePosition + nextFramePosition;\n" - "\n" - " currentFramePosition = vec4(curNormal, 1.0) * (1.0 - frameProgress);\n" - " nextFramePosition = nextFrameNormal * frameProgress;\n" - " curNormal = vec3(currentFramePosition + nextFramePosition);\n" - "\n", - // frag_def - "", - // frag_prog - "", - }, - { - 1 << PR_BIT_LIGHTING_PASS, - // vert_def - "", - // vert_prog - "", - // frag_def - "", - // frag_prog - " isLightingPass = 1;\n" - " result = vec4(0.0, 0.0, 0.0, 1.0);\n" - "\n", - }, - { - 1 << PR_BIT_NORMAL_MAP, - // vert_def - "attribute vec3 T;\n" - "attribute vec3 B;\n" - "attribute vec3 N;\n" - "uniform vec3 eyePosition;\n" - "varying vec3 tangentSpaceEyeVec;\n" - "\n", - // vert_prog - " TBN = mat3(T, B, N);\n" - " tangentSpaceEyeVec = eyePosition - vec3(curVertex);\n" - " tangentSpaceEyeVec = TBN * tangentSpaceEyeVec;\n" - "\n" - " isNormalMapped = 1;\n" - "\n", - // frag_def - "uniform sampler2D normalMap;\n" - "uniform vec2 normalBias;\n" - "varying vec3 tangentSpaceEyeVec;\n" - "\n", - // frag_prog - " vec4 normalStep;\n" - " float biasedHeight;\n" - "\n" - " eyeVec = normalize(tangentSpaceEyeVec);\n" - "\n" - " for (int i = 0; i < 4; i++) {\n" - " normalStep = texture2D(normalMap, commonTexCoord.st);\n" - " biasedHeight = normalStep.a * normalBias.x - normalBias.y;\n" - " commonTexCoord += (biasedHeight - commonTexCoord.z) * normalStep.z * eyeVec;\n" - " }\n" - "\n" - " normalTexel = texture2D(normalMap, commonTexCoord.st);\n" - "\n" - " isNormalMapped = 1;\n" - "\n", - }, - { - 1 << PR_BIT_DIFFUSE_MAP, - // vert_def - "uniform vec2 diffuseScale;\n" - "\n", - // vert_prog - " gl_TexCoord[0] = vec4(diffuseScale, 1.0, 1.0) * gl_MultiTexCoord0;\n" - "\n", - // frag_def - "uniform sampler2D diffuseMap;\n" - "\n", - // frag_prog - " diffuseTexel = texture2D(diffuseMap, commonTexCoord.st);\n" - "\n", - }, - { - 1 << PR_BIT_DIFFUSE_DETAIL_MAP, - // vert_def - "uniform vec2 detailScale;\n" - "varying vec2 fragDetailScale;\n" - "\n", - // vert_prog - " fragDetailScale = detailScale;\n" - " if (isNormalMapped == 0)\n" - " gl_TexCoord[1] = vec4(detailScale, 1.0, 1.0) * gl_MultiTexCoord0;\n" - "\n", - // frag_def - "uniform sampler2D detailMap;\n" - "varying vec2 fragDetailScale;\n" - "\n", - // frag_prog - " if (isNormalMapped == 0)\n" - " diffuseTexel *= texture2D(detailMap, gl_TexCoord[1].st);\n" - " else\n" - " diffuseTexel *= texture2D(detailMap, commonTexCoord.st * fragDetailScale);\n" - " diffuseTexel.rgb *= 2.0;\n" - "\n", - }, - { - 1 << PR_BIT_DIFFUSE_MODULATION, - // vert_def - "", - // vert_prog - " gl_FrontColor = gl_Color;\n" - "\n", - // frag_def - "", - // frag_prog - " if (isLightingPass == 0)\n" - " result *= vec4(gl_Color);\n" - "\n", - }, - { - 1 << PR_BIT_DIFFUSE_MAP2, - // vert_def - "", - // vert_prog - "", - // frag_def - "", - // frag_prog - " if (isLightingPass == 0)\n" - " result *= diffuseTexel;\n" - "\n", - }, - { - 1 << PR_BIT_HIGHPALOOKUP_MAP, - // vert_def - "", - // vert_prog - "", - // frag_def - "uniform sampler3D highPalookupMap;\n" - "\n", - // frag_prog - " float highPalScale = 0.9921875; // for 6 bits\n" - " float highPalBias = 0.00390625;\n" - "\n" - " if (isLightingPass == 0)\n" - " result.rgb = texture3D(highPalookupMap, result.rgb * highPalScale + highPalBias).rgb;\n" - " diffuseTexel.rgb = texture3D(highPalookupMap, diffuseTexel.rgb * highPalScale + highPalBias).rgb;\n" - "\n", - }, - { - 1 << PR_BIT_SPECULAR_MAP, - // vert_def - "", - // vert_prog - "", - // frag_def - "uniform sampler2D specMap;\n" - "\n", - // frag_prog - " specTexel = texture2D(specMap, commonTexCoord.st);\n" - "\n" - " isSpecularMapped = 1;\n" - "\n", - }, - { - 1 << PR_BIT_SPECULAR_MATERIAL, - // vert_def - "", - // vert_prog - "", - // frag_def - "uniform vec2 specMaterial;\n" - "\n", - // frag_prog - " specularMaterial = specMaterial;\n" - "\n", - }, - { - 1 << PR_BIT_MIRROR_MAP, - // vert_def - "", - // vert_prog - "", - // frag_def - "uniform sampler2DRect mirrorMap;\n" - "\n", - // frag_prog - " vec4 mirrorTexel;\n" - " vec2 mirrorCoords;\n" - "\n" - " mirrorCoords = gl_FragCoord.st;\n" - " if (isNormalMapped == 1) {\n" - " mirrorCoords += 100.0 * (normalTexel.rg - 0.5);\n" - " }\n" - " mirrorTexel = texture2DRect(mirrorMap, mirrorCoords);\n" - " result = vec4((result.rgb * (1.0 - specTexel.a)) + (mirrorTexel.rgb * specTexel.rgb * specTexel.a), result.a);\n" - "\n", - }, - { - 1 << PR_BIT_FOG, - // vert_def - "", - // vert_prog - "", - // frag_def - "", - // frag_prog - " float fragDepth;\n" - " float fogFactor;\n" - "\n" - " fragDepth = gl_FragCoord.z / gl_FragCoord.w / 35.0;\n" - " fragDepth *= fragDepth;\n" - " fogFactor = exp2(-gl_Fog.density * gl_Fog.density * fragDepth * 1.442695);\n" - " result.rgb = mix(gl_Fog.color.rgb, result.rgb, fogFactor);\n" - "\n", - }, - { - 1 << PR_BIT_GLOW_MAP, - // vert_def - "", - // vert_prog - "", - // frag_def - "uniform sampler2D glowMap;\n" - "\n", - // frag_prog - " vec4 glowTexel;\n" - "\n" - " glowTexel = texture2D(glowMap, commonTexCoord.st);\n" - " result = vec4((result.rgb * (1.0 - glowTexel.a)) + (glowTexel.rgb * glowTexel.a), result.a);\n" - "\n", - }, - { - 1 << PR_BIT_PROJECTION_MAP, - // vert_def - "uniform mat4 shadowProjMatrix;\n" - "\n", - // vert_prog - " gl_TexCoord[2] = shadowProjMatrix * curVertex;\n" - "\n", - // frag_def - "", - // frag_prog - "", - }, - { - 1 << PR_BIT_SHADOW_MAP, - // vert_def - "", - // vert_prog - "", - // frag_def - "uniform sampler2DShadow shadowMap;\n" - "\n", - // frag_prog - " shadowResult = shadow2DProj(shadowMap, gl_TexCoord[2]).a;\n" - "\n", - }, - { - 1 << PR_BIT_LIGHT_MAP, - // vert_def - "", - // vert_prog - "", - // frag_def - "uniform sampler2D lightMap;\n" - "\n", - // frag_prog - " lightTexel = texture2D(lightMap, gl_TexCoord[2].st / gl_TexCoord[2].q).rgb;\n" - "\n", - }, - { - 1 << PR_BIT_SPOT_LIGHT, - // vert_def - "", - // vert_prog - "", - // frag_def - "uniform vec3 spotDir;\n" - "uniform vec2 spotRadius;\n" - "\n", - // frag_prog - " spotVector = spotDir;\n" - " spotCosRadius = spotRadius;\n" - " isSpotLight = 1;\n" - "\n", - }, - { - 1 << PR_BIT_POINT_LIGHT, - // vert_def - "varying vec3 vertexNormal;\n" - "varying vec3 eyeVector;\n" - "varying vec3 lightVector;\n" - "varying vec3 tangentSpaceLightVector;\n" - "\n", - // vert_prog - " vec3 vertexPos;\n" - "\n" - " vertexPos = vec3(gl_ModelViewMatrix * curVertex);\n" - " eyeVector = -vertexPos;\n" - " lightVector = gl_LightSource[0].ambient.rgb - vertexPos;\n" - "\n" - " if (isNormalMapped == 1) {\n" - " tangentSpaceLightVector = gl_LightSource[0].specular.rgb - vec3(curVertex);\n" - " tangentSpaceLightVector = TBN * tangentSpaceLightVector;\n" - " } else\n" - " vertexNormal = normalize(gl_NormalMatrix * curNormal);\n" - "\n", - // frag_def - "varying vec3 vertexNormal;\n" - "varying vec3 eyeVector;\n" - "varying vec3 lightVector;\n" - "varying vec3 tangentSpaceLightVector;\n" - "\n", - // frag_prog - " float pointLightDistance;\n" - " float lightAttenuation;\n" - " float spotAttenuation;\n" - " vec3 N, L, E, R, D;\n" - " vec3 lightDiffuse;\n" - " float lightSpecular;\n" - " float NdotL;\n" - " float spotCosAngle;\n" - "\n" - " L = normalize(lightVector);\n" - "\n" - " pointLightDistance = dot(lightVector,lightVector);\n" - " lightAttenuation = clamp(1.0 - pointLightDistance * gl_LightSource[0].linearAttenuation, 0.0, 1.0);\n" - " spotAttenuation = 1.0;\n" - "\n" - " if (isSpotLight == 1) {\n" - " D = normalize(spotVector);\n" - " spotCosAngle = dot(-L, D);\n" - " spotAttenuation = clamp((spotCosAngle - spotCosRadius.x) * spotCosRadius.y, 0.0, 1.0);\n" - " }\n" - "\n" - " if (isNormalMapped == 1) {\n" - " E = eyeVec;\n" - " N = normalize(2.0 * (normalTexel.rgb - 0.5));\n" - " L = normalize(tangentSpaceLightVector);\n" - " } else {\n" - " E = normalize(eyeVector);\n" - " N = normalize(vertexNormal);\n" - " }\n" - " NdotL = max(dot(N, L), 0.0);\n" - "\n" - " R = reflect(-L, N);\n" - "\n" - " lightDiffuse = gl_Color.a * shadowResult * lightTexel *\n" - " gl_LightSource[0].diffuse.rgb * lightAttenuation * spotAttenuation;\n" - " result += vec4(lightDiffuse * diffuseTexel.a * diffuseTexel.rgb * NdotL, 0.0);\n" - "\n" - " if (isSpecularMapped == 0)\n" - " specTexel.rgb = diffuseTexel.rgb * diffuseTexel.a;\n" - "\n" - " lightSpecular = pow( max(dot(R, E), 0.0), specularMaterial.x * specTexel.a) * specularMaterial.y;\n" - " result += vec4(lightDiffuse * specTexel.rgb * lightSpecular, 0.0);\n" - "\n", - }, - { - 1 << PR_BIT_FOOTER, - // vert_def - "void main(void)\n" - "{\n" - " vec4 curVertex = gl_Vertex;\n" - " vec3 curNormal = gl_Normal;\n" - " int isNormalMapped = 0;\n" - " mat3 TBN;\n" - "\n" - " gl_TexCoord[0] = gl_MultiTexCoord0;\n" - "\n", - // vert_prog - " gl_Position = gl_ModelViewProjectionMatrix * curVertex;\n" - "}\n", - // frag_def - "void main(void)\n" - "{\n" - " vec3 commonTexCoord = vec3(gl_TexCoord[0].st, 0.0);\n" - " vec4 result = vec4(1.0, 1.0, 1.0, 1.0);\n" - " vec4 diffuseTexel = vec4(1.0, 1.0, 1.0, 1.0);\n" - " vec4 specTexel = vec4(1.0, 1.0, 1.0, 1.0);\n" - " vec4 normalTexel;\n" - " int isLightingPass = 0;\n" - " int isNormalMapped = 0;\n" - " int isSpecularMapped = 0;\n" - " vec3 eyeVec;\n" - " int isSpotLight = 0;\n" - " vec3 spotVector;\n" - " vec2 spotCosRadius;\n" - " float shadowResult = 1.0;\n" - " vec2 specularMaterial = vec2(15.0, 1.0);\n" - " vec3 lightTexel = vec3(1.0, 1.0, 1.0);\n" - "\n", - // frag_prog - " gl_FragColor = result;\n" - "}\n", - } -}; - -_prprograminfo prprograms[1 << PR_BIT_COUNT]; - -int32_t overridematerial; -int32_t globaloldoverridematerial; - -int32_t rotatespritematerialbits; - -// RENDER TARGETS -_prrt *prrts; - -// CONTROL -GLfloat spritemodelview[16]; -GLfloat mdspritespace[4][4]; -GLfloat rootmodelviewmatrix[16]; -GLfloat *curmodelviewmatrix; -GLfloat rootskymodelviewmatrix[16]; -GLfloat *curskymodelviewmatrix; - -static int16_t sectorqueue[MAXSECTORS]; -static int16_t querydelay[MAXSECTORS]; -static GLuint queryid[MAXWALLS]; -static int16_t drawingstate[MAXSECTORS]; - -float horizang; -int16_t viewangle; - -int32_t depth; -_prmirror mirrors[10]; - -GLUtesselator* prtess; - -int16_t cursky; -char curskypal; -int8_t curskyshade; - -_pranimatespritesinfo asi; - -int32_t polymersearching; - -// EXTERNAL FUNCTIONS -int32_t polymer_init(void) -{ - int32_t i, j; - - if (pr_verbosity >= 1) OSD_Printf("Initializing Polymer subsystem...\n"); - - if (!glinfo.texnpot || - !glinfo.depthtex || - !glinfo.shadow || - !glinfo.fbos || - !glinfo.rect || - !glinfo.multitex || - !glinfo.vbos || - !glinfo.occlusionqueries || - !glinfo.glsl) - { - OSD_Printf("PR : Your video card driver/combo doesn't support the necessary features!\n"); - OSD_Printf("PR : Disabling Polymer...\n"); - return (0); - } - - Bmemset(&prsectors[0], 0, sizeof(prsectors[0]) * MAXSECTORS); - Bmemset(&prwalls[0], 0, sizeof(prwalls[0]) * MAXWALLS); - - prtess = bgluNewTess(); - if (prtess == 0) - { - OSD_Printf("PR : Tessellation object initialization failed!\n"); - return (0); - } - - polymer_loadboard(); - - polymer_initartsky(); - skyboxdatavbo = 0; - - i = 0; - while (i < nextmodelid) - { - if (models[i]) - { - md3model_t* m; - - m = (md3model_t*)models[i]; - m->indices = NULL; - } - i++; - } - - i = 0; - while (i < (1 << PR_BIT_COUNT)) - { - prprograms[i].handle = 0; - i++; - } - - overridematerial = 0xFFFFFFFF; - - polymersearching = FALSE; - - polymer_initrendertargets(pr_shadowcount + 1); - - // Prime highpalookup maps - i = 0; - while (i < MAXBASEPALS) - { - j = 0; - while (j < MAXPALOOKUPS) - { - if (prhighpalookups[i][j].data) - { - bglGenTextures(1, &prhighpalookups[i][j].map); - bglBindTexture(GL_TEXTURE_3D, prhighpalookups[i][j].map); - bglTexImage3D(GL_TEXTURE_3D, // target - 0, // mip level - GL_RGBA, // internalFormat - PR_HIGHPALOOKUP_DIM, // width - PR_HIGHPALOOKUP_DIM, // height - PR_HIGHPALOOKUP_DIM, // depth - 0, // border - GL_BGRA, // upload format - GL_UNSIGNED_BYTE, // upload component type - prhighpalookups[i][j].data); // data pointer - bglTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - bglTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - bglTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, glinfo.clamptoedge?GL_CLAMP_TO_EDGE:GL_CLAMP); - bglTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, glinfo.clamptoedge?GL_CLAMP_TO_EDGE:GL_CLAMP); - bglTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, glinfo.clamptoedge?GL_CLAMP_TO_EDGE:GL_CLAMP); - bglBindTexture(GL_TEXTURE_3D, 0); - } - j++; - } - i++; - } - - if (pr_verbosity >= 1) OSD_Printf("PR : Initialization complete.\n"); - - return (1); -} - -void polymer_uninit(void) -{ - int32_t i, j; - - polymer_freeboard(); - - i = 0; - while (i < MAXBASEPALS) - { - j = 0; - while (j < MAXPALOOKUPS) - { - if (prhighpalookups[i][j].data) { - Bfree(prhighpalookups[i][j].data); - prhighpalookups[i][j].data = NULL; - } - if (prhighpalookups[i][j].map) { - bglDeleteTextures(1, &prhighpalookups[i][j].map); - prhighpalookups[i][j].map = 0; - } - j++; - } - i++; - } -} - -void polymer_setaspect(int32_t ang) -{ - float aspect; - - if (pr_customaspect != 0.0f) - aspect = pr_customaspect; - else - aspect = (float)(windowx2-windowx1+1) / - (float)(windowy2-windowy1+1); - - bglMatrixMode(GL_PROJECTION); - bglLoadIdentity(); - bgluPerspective((float)(ang) / (2048.0f / 360.0f), aspect, 0.01f, 100.0f); -} - -void polymer_glinit(void) -{ - bglClearColor(0.0f, 0.0f, 0.0f, 1.0f); - bglClearStencil(0); - bglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - bglViewport(windowx1, yres-(windowy2+1),windowx2-windowx1+1, windowy2-windowy1+1); - - // texturing - bglEnable(GL_TEXTURE_2D); - - bglEnable(GL_DEPTH_TEST); - bglDepthFunc(GL_LEQUAL); - - bglDisable(GL_BLEND); - bglDisable(GL_ALPHA_TEST); - - if (pr_wireframe) - bglPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - else - bglPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - polymer_setaspect(pr_fov); - - bglMatrixMode(GL_MODELVIEW); - bglLoadIdentity(); - - bglEnableClientState(GL_VERTEX_ARRAY); - bglEnableClientState(GL_TEXTURE_COORD_ARRAY); - - bglDisable(GL_FOG); - - bglEnable(GL_CULL_FACE); - bglCullFace(GL_BACK); -} - -void polymer_resetlights(void) -{ - int32_t i; - _prsector *s; - _prwall *w; - - i = 0; - while (i < numsectors) - { - s = prsectors[i]; - - if (!s) { - i++; - continue; - } - - polymer_resetplanelights(&s->floor); - polymer_resetplanelights(&s->ceil); - - i++; - } - - i = 0; - while (i < numwalls) - { - w = prwalls[i]; - - if (!w) { - i++; - continue; - } - - polymer_resetplanelights(&w->wall); - polymer_resetplanelights(&w->over); - polymer_resetplanelights(&w->mask); - - i++; - } - - i = 0; - while (i < PR_MAXLIGHTS) - { - prlights[i].flags.active = 0; - i++; - } - - lightcount = 0; - - loadmaphack(NULL); -} - -void polymer_loadboard(void) -{ - int32_t i; - - polymer_freeboard(); - - i = 0; - while (i < numsectors) - { - polymer_initsector(i); - polymer_updatesector(i); - i++; - } - - i = 0; - while (i < numwalls) - { - polymer_initwall(i); - polymer_updatewall(i); - i++; - } - - polymer_getsky(); - - polymer_resetlights(); - - if (pr_verbosity >= 1 && numsectors) OSD_Printf("PR : Board loaded.\n"); -} - -void polymer_drawrooms(int32_t daposx, int32_t daposy, int32_t daposz, int16_t daang, int32_t dahoriz, int16_t dacursectnum) -{ - int16_t cursectnum; - int32_t i, cursectflorz, cursectceilz; - float skyhoriz, ang, tiltang; - float pos[3]; - pthtyp* pth; - - if (!rendmode) return; - - begindrawing(); - - // TODO: support for screen resizing - // frameoffset = frameplace + windowy1*bytesperline + windowx1; - - if (pr_verbosity >= 3) OSD_Printf("PR : Drawing rooms...\n"); - - // fogcalc needs this - gvisibility = ((float)globalvisibility)*FOGSCALE; - - ang = (float)(daang) / (2048.0f / 360.0f); - horizang = (float)(-getangle(128, dahoriz-100)) / (2048.0f / 360.0f); - tiltang = (gtang * 90.0f); - - pos[0] = (float)daposy; - pos[1] = -(float)(daposz) / 16.0f; - pos[2] = -(float)daposx; - - polymer_updatelights(); - -// polymer_resetlights(); -// if (pr_lighting) -// polymer_applylights(); - - depth = 0; - - if (pr_shadows && lightcount && (pr_shadowcount > 0)) - polymer_prepareshadows(); - - // hack for parallax skies - skyhoriz = horizang; - if (skyhoriz < -180.0f) - skyhoriz += 360.0f; - - drawingskybox = 1; - pth = gltexcache(cursky,0,0); - drawingskybox = 0; - - // if it's not a skybox, make the sky parallax - // the angle factor is computed from eyeballed values - // need to recompute it if we ever change the max horiz amplitude - if (!pth || !(pth->flags & 4)) - skyhoriz /= 4.3027f; - - bglMatrixMode(GL_MODELVIEW); - bglLoadIdentity(); - - bglRotatef(tiltang, 0.0f, 0.0f, -1.0f); - bglRotatef(skyhoriz, 1.0f, 0.0f, 0.0f); - bglRotatef(ang, 0.0f, 1.0f, 0.0f); - - bglScalef(1.0f / 1000.0f, 1.0f / 1000.0f, 1.0f / 1000.0f); - bglTranslatef(-pos[0], -pos[1], -pos[2]); - - bglGetFloatv(GL_MODELVIEW_MATRIX, rootskymodelviewmatrix); - curskymodelviewmatrix = rootskymodelviewmatrix; - - bglMatrixMode(GL_MODELVIEW); - bglLoadIdentity(); - - bglRotatef(tiltang, 0.0f, 0.0f, -1.0f); - bglRotatef(horizang, 1.0f, 0.0f, 0.0f); - bglRotatef(ang, 0.0f, 1.0f, 0.0f); - - bglScalef(1.0f / 1000.0f, 1.0f / 1000.0f, 1.0f / 1000.0f); - bglTranslatef(-pos[0], -pos[1], -pos[2]); - - bglGetFloatv(GL_MODELVIEW_MATRIX, rootmodelviewmatrix); - - cursectnum = dacursectnum; - updatesector(daposx, daposy, &cursectnum); - - if ((cursectnum >= 0) && (cursectnum < numsectors)) - dacursectnum = cursectnum; - - // unflag all sectors - i = numsectors-1; - while (i >= 0) - { - prsectors[i]->flags.uptodate = 0; - prsectors[i]->wallsproffset = 0.0f; - prsectors[i]->floorsproffset = 0.0f; - i--; - } - i = numwalls-1; - while (i >= 0) - { - prwalls[i]->flags.uptodate = 0; - i--; - } - - if (searchit == 2 && !polymersearching) - { - globaloldoverridematerial = overridematerial; - overridematerial = prprogrambits[PR_BIT_DIFFUSE_MODULATION].bit; - overridematerial |= prprogrambits[PR_BIT_DIFFUSE_MAP2].bit; - polymersearching = TRUE; - } - if (!searchit && polymersearching) { - overridematerial = globaloldoverridematerial; - polymersearching = FALSE; - } - - if (dacursectnum > -1 && dacursectnum < numsectors) - getzsofslope(dacursectnum, daposx, daposy, &cursectceilz, &cursectflorz); - - // external view (editor) - if ((dacursectnum < 0) || (dacursectnum >= numsectors) || - (daposz > cursectflorz) || - (daposz < cursectceilz)) - { - curmodelviewmatrix = rootmodelviewmatrix; - i = numsectors-1; - while (i >= 0) - { - polymer_updatesector(i); - polymer_drawsector(i); - polymer_scansprites(i, tsprite, &spritesortcnt); - i--; - } - - i = numwalls-1; - while (i >= 0) - { - polymer_updatewall(i); - polymer_drawwall(sectorofwall(i), i); - i--; - } - viewangle = daang; - enddrawing(); - return; - } - - // GO! - polymer_displayrooms(dacursectnum); - - curmodelviewmatrix = rootmodelviewmatrix; - - // build globals used by rotatesprite - viewangle = daang; - globalang = (daang&2047); - cosglobalang = sintable[(globalang+512)&2047]; - singlobalang = sintable[globalang&2047]; - cosviewingrangeglobalang = mulscale16(cosglobalang,viewingrange); - sinviewingrangeglobalang = mulscale16(singlobalang,viewingrange); - - // polymost globals used by polymost_dorotatesprite - gcosang = ((double)cosglobalang)/262144.0; - gsinang = ((double)singlobalang)/262144.0; - gcosang2 = gcosang*((double)viewingrange)/65536.0; - gsinang2 = gsinang*((double)viewingrange)/65536.0; - - if (pr_verbosity >= 3) OSD_Printf("PR : Rooms drawn.\n"); - enddrawing(); -} - -void polymer_drawmasks(void) -{ - bglEnable(GL_ALPHA_TEST); - bglEnable(GL_BLEND); - bglEnable(GL_POLYGON_OFFSET_FILL); - - while (--spritesortcnt) - { - tspriteptr[spritesortcnt] = &tsprite[spritesortcnt]; - polymer_drawsprite(spritesortcnt); - } - - bglDisable(GL_POLYGON_OFFSET_FILL); - bglDisable(GL_BLEND); - bglDisable(GL_ALPHA_TEST); -} - -static inline GLfloat dot2f(GLfloat *v1, GLfloat *v2) -{ - return v1[0]*v2[0] + v1[1]*v2[1]; -} -static inline GLfloat dot3f(GLfloat *v1, GLfloat *v2) -{ - return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]; -} -static inline void relvec2f(GLfloat *v1, GLfloat *v2, GLfloat *out) -{ - out[0] = v2[0]-v1[0]; - out[1] = v2[1]-v1[1]; -} - -void polymer_editorpick(void) -{ - GLubyte picked[3]; - int16_t num; - - bglReadPixels(searchx, ydim - searchy, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, picked); - - num = *(int16_t *)(&picked[1]); - - searchstat = picked[0]; - - switch (searchstat) { - case 0: // wall - case 5: // botomwall - case 4: // 1-way/masked wall - searchsector = sectorofwall(num); - searchbottomwall = searchwall = num; - if (searchstat == 5) { - searchstat = 0; - if (wall[num].nextwall >= 0 && (wall[num].cstat & 2)) { - searchbottomwall = wall[num].nextwall; - } - } - break; - case 1: // floor - case 2: // ceiling - searchsector = num; - - // Apologies to Plagman for littering here, but this feature is quite essential - { - GLdouble model[16]; - GLdouble proj[16]; - GLint view[4]; - - GLdouble x,y,z; - GLfloat scr[3], scrv[3]; - GLdouble scrx,scry,scrz; - GLfloat dadepth; - - int16_t k, bestk=0; - GLfloat bestwdistsq = 3.4e38, wdistsq; - GLfloat w1[2], w2[2], w21[2], pw1[2], pw2[2]; - GLfloat ptonline[2]; - GLfloat scrvxz[2]; - GLfloat scrvxznorm, scrvxzn[2], scrpxz[2]; - GLfloat w1d, w2d; - walltype *wal = &wall[sector[searchsector].wallptr]; - - GLfloat t, svcoeff, p[2]; - GLfloat *pl; - - bglGetDoublev(GL_MODELVIEW_MATRIX, model); - bglGetDoublev(GL_PROJECTION_MATRIX, proj); - bglGetIntegerv(GL_VIEWPORT, view); - - bglReadPixels(searchx, ydim-searchy, 1,1, GL_DEPTH_COMPONENT, GL_FLOAT, &dadepth); - bgluUnProject(searchx, ydim-searchy, dadepth, model, proj, view, &x, &y, &z); - bgluUnProject(searchx, ydim-searchy, 0.0, model, proj, view, &scrx, &scry, &scrz); - - scr[0]=scrx, scr[1]=scry, scr[2]=scrz; - - scrv[0] = x-scrx; - scrv[1] = y-scry; - scrv[2] = z-scrz; - - scrvxz[0] = x-scrx; - scrvxz[1] = z-scrz; - - if (searchstat==1) - pl = &prsectors[searchsector]->ceil.plane[0]; - else - pl = &prsectors[searchsector]->floor.plane[0]; - - t = dot3f(pl,scrv); - svcoeff = -(dot3f(pl,scr)+pl[3])/t; - - // point on plane (x and z) - p[0] = scrx + svcoeff*scrv[0]; - p[1] = scrz + svcoeff*scrv[2]; - - for (k=0; k= 3) OSD_Printf("PR : Masked wall %i...\n", damaskwallcnt); - - sec = §or[sectorofwall(maskwall[damaskwallcnt])]; - wal = &wall[maskwall[damaskwallcnt]]; - w = prwalls[maskwall[damaskwallcnt]]; - - fogcalc(wal->shade,sec->visibility,sec->floorpal); - bglFogf(GL_FOG_DENSITY,fogresult); - bglFogfv(GL_FOG_COLOR,fogcol); - - bglEnable(GL_CULL_FACE); - - if (searchit == 2) { - memcpy(oldcolor, w->mask.material.diffusemodulation, sizeof(GLubyte) * 4); - - w->mask.material.diffusemodulation[0] = 0x04; - w->mask.material.diffusemodulation[1] = ((GLubyte *)(&maskwall[damaskwallcnt]))[0]; - w->mask.material.diffusemodulation[2] = ((GLubyte *)(&maskwall[damaskwallcnt]))[1]; - w->mask.material.diffusemodulation[3] = 0xFF; - } - - polymer_drawplane(&w->mask); - - if (searchit == 2) - memcpy(w->mask.material.diffusemodulation, oldcolor, sizeof(GLubyte) * 4); - - bglDisable(GL_CULL_FACE); -} - -void polymer_updatesprite(int32_t snum) -{ - int32_t curpicnum, xsize, ysize, tilexoff, tileyoff, xoff, yoff, i, j, cs; - spritetype *tspr = tspriteptr[snum]; - float xratio, yratio, ang; - float spos[3]; - const GLfloat *inbuffer; - uint8_t flipu, flipv; - _prsprite *s; - - if (pr_verbosity >= 3) OSD_Printf("PR : Updating sprite %i...\n", snum); - - if (tspr->owner < 0 || tspr->picnum < 0) return; - - cs = tspr->cstat; - - if (prsprites[tspr->owner] == NULL) - { - prsprites[tspr->owner] = (_prsprite *) Bcalloc(sizeof(_prsprite), 1); - - if (prsprites[tspr->owner] == NULL) - { - if (pr_verbosity >= 1) OSD_Printf("PR : Cannot initialize sprite %i : Bmalloc failed.\n", tspr->owner); - return; - } - - prsprites[tspr->owner]->plane.buffer = (GLfloat *) Bmalloc(4 * sizeof(GLfloat) * 5); - prsprites[tspr->owner]->plane.vertcount = 4; - } - - if ((tspr->cstat & 48) && (pr_vbos > 0) && !prsprites[tspr->owner]->plane.vbo) - { - bglGenBuffersARB(1, &prsprites[tspr->owner]->plane.vbo); - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, prsprites[tspr->owner]->plane.vbo); - bglBufferDataARB(GL_ARRAY_BUFFER_ARB, 4 * sizeof(GLfloat) * 5, NULL, mapvbousage); - } - - s = prsprites[tspr->owner]; - - curpicnum = tspr->picnum; - if (picanm[curpicnum]&192) curpicnum += animateoffs(curpicnum,tspr->owner+32768); - - if (tspr->cstat & 48 && searchit != 2) - { - uint32_t crc = crc32once((uint8_t *)tspr, offsetof(spritetype, owner)); - int32_t curpriority = 0; - - if (crc == s->crc && tspr->picnum == curpicnum) return; - s->crc = crc; - - polymer_resetplanelights(&s->plane); - - while ((curpriority < pr_maxlightpriority) && (!depth || mirrors[depth-1].plane)) - { - i = j = 0; - while (j < lightcount) - { - while (!prlights[i].flags.active) - i++; - - if (prlights[i].priority != curpriority) - { - i++; - j++; - continue; - } - - if (polymer_planeinlight(&s->plane, &prlights[i])) - polymer_addplanelight(&s->plane, i); - i++; - j++; - } - curpriority++; - } - } - - polymer_getbuildmaterial(&s->plane.material, curpicnum, tspr->pal, tspr->shade, 4); - - if (tspr->cstat & 2) - { - if (tspr->cstat & 512) - s->plane.material.diffusemodulation[3] = 0x55; - else - s->plane.material.diffusemodulation[3] = 0xAA; - } - - s->plane.material.diffusemodulation[3] *= (1.0f - spriteext[tspr->owner].alpha); - - if (searchit == 2) - { - s->plane.material.diffusemodulation[0] = 0x03; - s->plane.material.diffusemodulation[1] = ((GLubyte *)(&tspr->owner))[0]; - s->plane.material.diffusemodulation[2] = ((GLubyte *)(&tspr->owner))[1]; - s->plane.material.diffusemodulation[3] = 0xFF; - s->crc = 0xdeadbeef; - } - - curpicnum = tspr->picnum; - if (picanm[curpicnum]&192) curpicnum += animateoffs(curpicnum,tspr->owner+32768); - - if (((tspr->cstat>>4) & 3) == 0) - xratio = (float)(tspr->xrepeat) * 0.20f; // 32 / 160 - else - xratio = (float)(tspr->xrepeat) * 0.25f; - - yratio = (float)(tspr->yrepeat) * 0.25f; - - xsize = tilesizx[curpicnum]; - ysize = tilesizy[curpicnum]; - - if (usehightile && h_xsize[curpicnum]) - { - xsize = h_xsize[curpicnum]; - ysize = h_ysize[curpicnum]; - } - - xsize = (int32_t)(xsize * xratio); - ysize = (int32_t)(ysize * yratio); - - tilexoff = (int32_t)tspr->xoffset; - tileyoff = (int32_t)tspr->yoffset; - tilexoff += (int8_t)((usehightile&&h_xsize[curpicnum])?(h_xoffs[curpicnum]):((picanm[curpicnum]>>8)&255)); - tileyoff += (int8_t)((usehightile&&h_xsize[curpicnum])?(h_yoffs[curpicnum]):((picanm[curpicnum]>>16)&255)); - - xoff = (int32_t)(tilexoff * xratio); - yoff = (int32_t)(tileyoff * yratio); - - if ((tspr->cstat & 128) && (((tspr->cstat>>4) & 3) != 2)) - yoff -= ysize / 2; - - spos[0] = (float)tspr->y; - spos[1] = -(float)(tspr->z) / 16.0f; - spos[2] = -(float)tspr->x; - - bglMatrixMode(GL_MODELVIEW); - bglPushMatrix(); - bglLoadIdentity(); - - inbuffer = vertsprite; - - flipu = flipv = 0; - - if (pr_billboardingmode && !((tspr->cstat>>4) & 3)) - { - // do surgery on the face tspr to make it look like a wall sprite - tspr->cstat |= 16; - tspr->ang = (viewangle + 1024) & 2047; - } - - switch ((tspr->cstat>>4) & 3) - { - case 0: - ang = (float)((viewangle) & 2047) / (2048.0f / 360.0f); - - bglTranslatef(spos[0], spos[1], spos[2]); - bglRotatef(-ang, 0.0f, 1.0f, 0.0f); - bglRotatef(-horizang, 1.0f, 0.0f, 0.0f); - bglTranslatef((float)(-xoff), (float)(yoff), 0.0f); - bglScalef((float)(xsize), (float)(ysize), 1.0f); - break; - case 1: - ang = (float)((tspr->ang + 1024) & 2047) / (2048.0f / 360.0f); - - bglTranslatef(spos[0], spos[1], spos[2]); - bglRotatef(-ang, 0.0f, 1.0f, 0.0f); - bglTranslatef((float)(-xoff), (float)(yoff), 0.0f); - bglScalef((float)(xsize), (float)(ysize), 1.0f); - break; - case 2: - ang = (float)((tspr->ang + 1024) & 2047) / (2048.0f / 360.0f); - - bglTranslatef(spos[0], spos[1], spos[2]); - bglRotatef(-ang, 0.0f, 1.0f, 0.0f); - if (tspr->cstat & 8) { - bglRotatef(-180.0, 0.0f, 0.0f, 1.0f); - flipu = !flipu; - } - bglTranslatef((float)(-xoff), 1.0f, (float)(yoff)); - bglScalef((float)(xsize), 1.0f, (float)(ysize)); - - inbuffer = horizsprite; - break; - } - - if ((tspr->cstat & 4) && (((tspr->cstat>>4) & 3) != 2)) - flipu = !flipu; - - if (!(tspr->cstat & 4) && (((tspr->cstat>>4) & 3) == 2)) - flipu = !flipu; - - if ((tspr->cstat & 8) && (((tspr->cstat>>4) & 3) != 2)) - flipv = !flipv; - - bglGetFloatv(GL_MODELVIEW_MATRIX, spritemodelview); - bglPopMatrix(); - - Bmemcpy(s->plane.buffer, inbuffer, sizeof(GLfloat) * 4 * 5); - - if (flipu || flipv) - { - i = 0; - do - { - if (flipu) - s->plane.buffer[(i * 5) + 3] = - (s->plane.buffer[(i * 5) + 3] - 1.0f) * -1.0f; - if (flipv) - s->plane.buffer[(i * 5) + 4] = - (s->plane.buffer[(i * 5) + 4] - 1.0f) * -1.0f; - } - while (++i < 4); - } - - i = 0; - do - polymer_transformpoint(&inbuffer[i * 5], &s->plane.buffer[i * 5], spritemodelview); - while (++i < 4); - - polymer_computeplane(&s->plane); - - if ((cs & 48) && (pr_vbos > 0)) - { - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, s->plane.vbo); - bglBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, 4 * sizeof(GLfloat) * 5, s->plane.buffer); - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); - } - else if (s->plane.vbo) // clean up the vbo if a wall/floor sprite becomes a face sprite - { - bglDeleteBuffersARB(1, &s->plane.vbo); - s->plane.vbo = 0; - } -} - - -void polymer_drawsprite(int32_t snum) -{ - spritetype *tspr; - int32_t i, j, cs; - _prsprite *s; - - if (pr_verbosity >= 3) OSD_Printf("PR : Sprite %i...\n", snum); - - tspr = tspriteptr[snum]; - - if (tspr->owner < 0 || tspr->picnum < 0) return; - - if ((tspr->cstat & 8192) && (depth && !mirrors[depth-1].plane)) - return; - - if ((tspr->cstat & 16384) && (!depth || mirrors[depth-1].plane)) - return; - - fogcalc(tspr->shade,sector[tspr->sectnum].visibility,sector[tspr->sectnum].floorpal); - bglFogf(GL_FOG_DENSITY,fogresult); - bglFogfv(GL_FOG_COLOR,fogcol); - - if (usemodels && tile2model[Ptile2tile(tspr->picnum,tspr->pal)].modelid >= 0 && - tile2model[Ptile2tile(tspr->picnum,tspr->pal)].framenum >= 0 && - !(spriteext[tspr->owner].flags & SPREXT_NOTMD)) - { - polymer_drawmdsprite(tspr); - return; - } - - cs = tspr->cstat; - - // I think messing with the tspr is safe at this point? - // If not, change that to modify a temp position in updatesprite itself. - // I don't think this flags are meant to change on the fly so it'd possibly - // be safe to cache a plane that has them applied. - if (spriteext[tspr->owner].flags & SPREXT_AWAY1) - { - tspr->x += sintable[(tspr->ang + 512) & 2047] >> 13; - tspr->y += sintable[tspr->ang & 2047] >> 13; - } - else if (spriteext[tspr->owner].flags & SPREXT_AWAY2) - { - tspr->x -= sintable[(tspr->ang + 512) & 2047] >> 13; - tspr->y -= sintable[tspr->ang & 2047] >> 13; - } - - polymer_updatesprite(snum); - - if (prsprites[tspr->owner] == NULL) - return; - - s = prsprites[tspr->owner]; - - switch ((tspr->cstat>>4) & 3) - { - case 1: - prsectors[tspr->sectnum]->wallsproffset += 0.5f; - if (!depth || mirrors[depth-1].plane) - bglPolygonOffset(-1.0f, -1.0f); - break; - case 2: - prsectors[tspr->sectnum]->floorsproffset += 0.5f; - if (!depth || mirrors[depth-1].plane) - bglPolygonOffset(-1.0f, -1.0f); - break; - } - - if ((cs & 48) == 0) - { - int32_t curpriority = 0; - - s->plane.lightcount = 0; - - while ((curpriority < pr_maxlightpriority) && (!depth || mirrors[depth-1].plane)) - { - i = j = 0; - while (j < lightcount) - { - while (!prlights[i].flags.active) - i++; - - if (prlights[i].priority != curpriority) - { - i++; - j++; - continue; - } - - if (polymer_planeinlight(&s->plane, &prlights[i])) - s->plane.lights[s->plane.lightcount++] = i; - - i++; - j++; - } - curpriority++; - } - } - - if ((tspr->cstat & 64) && ((tspr->cstat>>4) & 3)) - bglEnable(GL_CULL_FACE); - - if ((!depth || mirrors[depth-1].plane) && !pr_ati_nodepthoffset) - bglEnable(GL_POLYGON_OFFSET_FILL); - - polymer_drawplane(&s->plane); - - if ((!depth || mirrors[depth-1].plane) && !pr_ati_nodepthoffset) - bglDisable(GL_POLYGON_OFFSET_FILL); - - if ((tspr->cstat & 64) && ((tspr->cstat>>4) & 3)) - bglDisable(GL_CULL_FACE); -} - -void polymer_setanimatesprites(animatespritesptr animatesprites, int32_t x, int32_t y, int32_t a, int32_t smoothratio) -{ - asi.animatesprites = animatesprites; - asi.x = x; - asi.y = y; - asi.a = a; - asi.smoothratio = smoothratio; -} - -int16_t polymer_addlight(_prlight* light) -{ - int32_t lighti; - - if (lightcount >= PR_MAXLIGHTS || light->priority > pr_maxlightpriority || !pr_lighting) - return (-1); - - if ((light->sector == -1) || (light->sector >= numsectors)) - return (-1); - - lighti = 0; - while ((lighti < PR_MAXLIGHTS) && (prlights[lighti].flags.active)) - lighti++; - - if (lighti == PR_MAXLIGHTS) - return (-1); - - Bmemcpy(&prlights[lighti], light, sizeof(_prlight)); - - if (light->radius) - polymer_processspotlight(&prlights[lighti]); - - prlights[lighti].flags.isinview = 0; - prlights[lighti].flags.active = 1; - - prlights[lighti].planecount = 0; - prlights[lighti].planelist = NULL; - - polymer_culllight(lighti); - - lightcount++; - - return (lighti); -} - -void polymer_deletelight(int16_t lighti) -{ - if (!prlights[lighti].flags.active) - return; - - polymer_removelight(lighti); - - prlights[lighti].flags.active = 0; - - lightcount--; -} - -void polymer_invalidatelights(void) -{ - int32_t i = PR_MAXLIGHTS-1; - - do - prlights[i].flags.invalidate = prlights[i].flags.active; - while (i--); -} - -void polymer_texinvalidate(void) -{ - int32_t i = numsectors-1; - - if (!numsectors || !prsectors[i]) - return; - - do - prsectors[i--]->flags.invalidtex = 1; - while (i >= 0); - - i = numwalls-1; - do - prwalls[i--]->flags.invalidtex = 1; - while (i >= 0); -} - -void polymer_definehighpalookup(char basepalnum, char palnum, char *data) -{ - prhighpalookups[basepalnum][palnum].data = Bmalloc(PR_HIGHPALOOKUP_DATA_SIZE); - - Bmemcpy(prhighpalookups[basepalnum][palnum].data, data, PR_HIGHPALOOKUP_DATA_SIZE); -} - -// CORE -static void polymer_displayrooms(int16_t dacursectnum) -{ - sectortype *sec; - int32_t i; - GLint result; - int16_t doquery; - int32_t front; - int32_t back; - GLfloat localskymodelviewmatrix[16]; - GLfloat localmodelviewmatrix[16]; - GLfloat localprojectionmatrix[16]; - float frustum[5 * 4]; - int32_t localspritesortcnt; - spritetype localtsprite[MAXSPRITESONSCREEN]; - int16_t localmaskwall[MAXWALLSB]; - int16_t localmaskwallcnt; - _prmirror mirrorlist[10]; - int mirrorcount; - int32_t gx, gy, gz, px, py, pz; - GLdouble plane[4]; - float coeff; - - curmodelviewmatrix = localmodelviewmatrix; - bglGetFloatv(GL_MODELVIEW_MATRIX, localmodelviewmatrix); - bglGetFloatv(GL_PROJECTION_MATRIX, localprojectionmatrix); - - polymer_extractfrustum(localmodelviewmatrix, localprojectionmatrix, frustum); - - Bmemset(querydelay, 0, sizeof(int16_t) * numsectors); - Bmemset(queryid, 0, sizeof(GLuint) * numwalls); - Bmemset(drawingstate, 0, sizeof(int16_t) * numsectors); - - front = 0; - back = 1; - sectorqueue[0] = dacursectnum; - drawingstate[dacursectnum] = 1; - - localspritesortcnt = localmaskwallcnt = 0; - - mirrorcount = 0; - - bglDisable(GL_DEPTH_TEST); - bglColor4f(1.0f, 1.0f, 1.0f, 1.0f); - polymer_drawsky(cursky, curskypal, curskyshade); - bglEnable(GL_DEPTH_TEST); - - // depth-only occlusion testing pass -// overridematerial = 0; - - while (front != back) - { - sec = §or[sectorqueue[front]]; - - polymer_pokesector(sectorqueue[front]); - polymer_drawsector(sectorqueue[front]); - polymer_scansprites(sectorqueue[front], localtsprite, &localspritesortcnt); - - doquery = 0; - - i = sec->wallnum-1; - do - { - // this is a couple of fps faster for me... does it mess anything up? - if (wallvisible(globalposx, globalposy, sec->wallptr + i)) - polymer_drawwall(sectorqueue[front], sec->wallptr + i); - - // if we have a level boundary somewhere in the sector, - // consider these walls as visportals - if (wall[sec->wallptr + i].nextsector < 0) - doquery = 1; - } - while (--i >= 0); - - i = sec->wallnum-1; - while (i >= 0) - { - if ((wall[sec->wallptr + i].nextsector >= 0) && - (wallvisible(globalposx, globalposy, sec->wallptr + i)) && - (polymer_planeinfrustum(&prwalls[sec->wallptr + i]->mask, frustum))) - { - if ((prwalls[sec->wallptr + i]->mask.vertcount == 4) && - !(prwalls[sec->wallptr + i]->underover & 4) && - !(prwalls[sec->wallptr + i]->underover & 8)) - { - // early exit for closed sectors - _prwall *w; - - w = prwalls[sec->wallptr + i]; - - if ((w->mask.buffer[(0 * 5) + 1] >= w->mask.buffer[(3 * 5) + 1]) && - (w->mask.buffer[(1 * 5) + 1] >= w->mask.buffer[(2 * 5) + 1])) - { - i--; - continue; - } - } - - if (wall[sec->wallptr + i].cstat & 48) - localmaskwall[localmaskwallcnt++] = sec->wallptr + i; - - if (!depth && (overridematerial & prprogrambits[PR_BIT_MIRROR_MAP].bit) && - wall[sec->wallptr + i].overpicnum == 560 && - wall[sec->wallptr + i].cstat & 32) - { - mirrorlist[mirrorcount].plane = &prwalls[sec->wallptr + i]->mask; - mirrorlist[mirrorcount].sectnum = sectorqueue[front]; - mirrorlist[mirrorcount].wallnum = sec->wallptr + i; - mirrorcount++; - } - - if (!(wall[sec->wallptr + i].cstat & 32)) { - if (doquery && (!drawingstate[wall[sec->wallptr + i].nextsector])) - { - float pos[3], sqdist; - int32_t oldoverridematerial; - - pos[0] = (float)globalposy; - pos[1] = -(float)(globalposz) / 16.0f; - pos[2] = -(float)globalposx; - - sqdist = prwalls[sec->wallptr + i]->mask.plane[0] * pos[0] + - prwalls[sec->wallptr + i]->mask.plane[1] * pos[1] + - prwalls[sec->wallptr + i]->mask.plane[2] * pos[2] + - prwalls[sec->wallptr + i]->mask.plane[3]; - - // hack to avoid occlusion querying portals that are too close to the viewpoint - // this is needed because of the near z-clipping plane; - if (sqdist < 100) - queryid[sec->wallptr + i] = 0xFFFFFFFF; - else { - _prwall *w; - - w = prwalls[sec->wallptr + i]; - - bglColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - bglDepthMask(GL_FALSE); - - bglGenQueriesARB(1, &queryid[sec->wallptr + i]); - bglBeginQueryARB(GL_SAMPLES_PASSED_ARB, queryid[sec->wallptr + i]); - - oldoverridematerial = overridematerial; - overridematerial = 0; - - if ((w->underover & 4) && (w->underover & 1)) - polymer_drawplane(&w->wall); - polymer_drawplane(&w->mask); - if ((w->underover & 8) && (w->underover & 2)) - polymer_drawplane(&w->over); - - overridematerial = oldoverridematerial; - - bglEndQueryARB(GL_SAMPLES_PASSED_ARB); - - bglDepthMask(GL_TRUE); - bglColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - } - } else - queryid[sec->wallptr + i] = 1; - } - } - - i--; - } - - i = sec->wallnum-1; - do - { - if ((queryid[sec->wallptr + i]) && - (!drawingstate[wall[sec->wallptr + i].nextsector])) - { - // REAP - result = 0; - if (doquery && (queryid[sec->wallptr + i] != 0xFFFFFFFF)) - { - bglGetQueryObjectivARB(queryid[sec->wallptr + i], - GL_QUERY_RESULT_ARB, - &result); - bglDeleteQueriesARB(1, &queryid[sec->wallptr + i]); - } else if (queryid[sec->wallptr + i] == 0xFFFFFFFF) - result = 1; - - queryid[sec->wallptr + i] = 0; - - if (result || !doquery) - { - sectorqueue[back++] = wall[sec->wallptr + i].nextsector; - drawingstate[wall[sec->wallptr + i].nextsector] = 1; - } - } - } - while (--i >= 0); - - front++; - } - - // do the actual shaded drawing -// overridematerial = 0xFFFFFFFF; - - // go through the sector queue again -// front = 0; -// while (front < back) -// { -// sec = §or[sectorqueue[front]]; -// -// polymer_drawsector(sectorqueue[front]); -// -// i = 0; -// while (i < sec->wallnum) -// { -// polymer_drawwall(sectorqueue[front], sec->wallptr + i); -// -// i++; -// } -// -// front++; -// } - - i = mirrorcount-1; - while (i >= 0) - { - bglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, prrts[0].fbo); - bglPushAttrib(GL_VIEWPORT_BIT); - bglViewport(windowx1, yres-(windowy2+1),windowx2-windowx1+1, windowy2-windowy1+1); - - bglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - Bmemcpy(localskymodelviewmatrix, curskymodelviewmatrix, sizeof(GLfloat) * 16); - curskymodelviewmatrix = localskymodelviewmatrix; - - bglMatrixMode(GL_MODELVIEW); - bglPushMatrix(); - - plane[0] = mirrorlist[i].plane->plane[0]; - plane[1] = mirrorlist[i].plane->plane[1]; - plane[2] = mirrorlist[i].plane->plane[2]; - plane[3] = mirrorlist[i].plane->plane[3]; - - bglClipPlane(GL_CLIP_PLANE0, plane); - polymer_inb4mirror(mirrorlist[i].plane->buffer, mirrorlist[i].plane->plane); - bglCullFace(GL_FRONT); - //bglEnable(GL_CLIP_PLANE0); - - if (mirrorlist[i].wallnum >= 0) - preparemirror(globalposx, globalposy, 0, globalang, 0, - mirrorlist[i].wallnum, 0, &gx, &gy, &viewangle); - - gx = globalposx; - gy = globalposy; - gz = globalposz; - - // map the player pos from build to polymer - px = globalposy; - py = -globalposz / 16; - pz = -globalposx; - - // calculate new player position on the other side of the mirror - // this way the basic build visibility shit can be used (wallvisible) - coeff = mirrorlist[i].plane->plane[0] * px + - mirrorlist[i].plane->plane[1] * py + - mirrorlist[i].plane->plane[2] * pz + - mirrorlist[i].plane->plane[3]; - - coeff /= (float)(mirrorlist[i].plane->plane[0] * mirrorlist[i].plane->plane[0] + - mirrorlist[i].plane->plane[1] * mirrorlist[i].plane->plane[1] + - mirrorlist[i].plane->plane[2] * mirrorlist[i].plane->plane[2]); - - px = (int32_t)(-coeff*mirrorlist[i].plane->plane[0]*2 + px); - py = (int32_t)(-coeff*mirrorlist[i].plane->plane[1]*2 + py); - pz = (int32_t)(-coeff*mirrorlist[i].plane->plane[2]*2 + pz); - - // map back from polymer to build - globalposx = -pz; - globalposy = px; - globalposz = -py * 16; - - mirrors[depth++] = mirrorlist[i]; - polymer_displayrooms(mirrorlist[i].sectnum); - depth--; - - globalposx = gx; - globalposy = gy; - globalposz = gz; - - bglDisable(GL_CLIP_PLANE0); - bglCullFace(GL_BACK); - bglMatrixMode(GL_MODELVIEW); - bglPopMatrix(); - - bglPopAttrib(); - bglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); - - mirrorlist[i].plane->material.mirrormap = prrts[0].color; - polymer_drawplane(mirrorlist[i].plane); - mirrorlist[i].plane->material.mirrormap = 0; - - i--; - } - - spritesortcnt = localspritesortcnt; - Bmemcpy(tsprite, localtsprite, sizeof(spritetype) * spritesortcnt); - maskwallcnt = localmaskwallcnt; - Bmemcpy(maskwall, localmaskwall, sizeof(int16_t) * maskwallcnt); - - if (depth) - { - // drawmasks needs these - cosglobalang = sintable[(viewangle+512)&2047]; - singlobalang = sintable[viewangle&2047]; - cosviewingrangeglobalang = mulscale16(cosglobalang,viewingrange); - sinviewingrangeglobalang = mulscale16(singlobalang,viewingrange); - - if (mirrors[depth - 1].plane) - display_mirror = 1; - polymer_animatesprites(); - if (mirrors[depth - 1].plane) - display_mirror = 0; - - bglDisable(GL_CULL_FACE); - drawmasks(); - bglEnable(GL_CULL_FACE); - } - return; -} - -static void polymer_drawplane(_prplane* plane) -{ - int32_t materialbits; - - // debug code for drawing plane inverse TBN -// bglDisable(GL_TEXTURE_2D); -// bglBegin(GL_LINES); -// bglColor4f(1.0, 0.0, 0.0, 1.0); -// bglVertex3f(plane->buffer[0], -// plane->buffer[1], -// plane->buffer[2]); -// bglVertex3f(plane->buffer[0] + plane->t[0] * 50, -// plane->buffer[1] + plane->t[1] * 50, -// plane->buffer[2] + plane->t[2] * 50); -// bglColor4f(0.0, 1.0, 0.0, 1.0); -// bglVertex3f(plane->buffer[0], -// plane->buffer[1], -// plane->buffer[2]); -// bglVertex3f(plane->buffer[0] + plane->b[0] * 50, -// plane->buffer[1] + plane->b[1] * 50, -// plane->buffer[2] + plane->b[2] * 50); -// bglColor4f(0.0, 0.0, 1.0, 1.0); -// bglVertex3f(plane->buffer[0], -// plane->buffer[1], -// plane->buffer[2]); -// bglVertex3f(plane->buffer[0] + plane->n[0] * 50, -// plane->buffer[1] + plane->n[1] * 50, -// plane->buffer[2] + plane->n[2] * 50); -// bglEnd(); -// bglEnable(GL_TEXTURE_2D); - - // debug code for drawing plane normals -// bglDisable(GL_TEXTURE_2D); -// bglBegin(GL_LINES); -// bglColor4f(1.0, 1.0, 1.0, 1.0); -// bglVertex3f(plane->buffer[0], -// plane->buffer[1], -// plane->buffer[2]); -// bglVertex3f(plane->buffer[0] + plane->plane[0] * 50, -// plane->buffer[1] + plane->plane[1] * 50, -// plane->buffer[2] + plane->plane[2] * 50); -// bglEnd(); -// bglEnable(GL_TEXTURE_2D); - - bglNormal3f((float)(plane->plane[0]), (float)(plane->plane[1]), (float)(plane->plane[2])); - - if (plane->vbo && (pr_vbos > 0)) - { - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, plane->vbo); - bglVertexPointer(3, GL_FLOAT, 5 * sizeof(GLfloat), NULL); - bglTexCoordPointer(2, GL_FLOAT, 5 * sizeof(GLfloat), (GLfloat*)(3 * sizeof(GLfloat))); - if (plane->indices) - bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, plane->ivbo); - } else { - bglVertexPointer(3, GL_FLOAT, 5 * sizeof(GLfloat), plane->buffer); - bglTexCoordPointer(2, GL_FLOAT, 5 * sizeof(GLfloat), &plane->buffer[3]); - } - - curlight = 0; - do { - materialbits = polymer_bindmaterial(plane->material, plane->lights, plane->lightcount); - - if (materialbits & prprogrambits[PR_BIT_NORMAL_MAP].bit) - { - bglVertexAttrib3fvARB(prprograms[materialbits].attrib_T, &plane->tbn[0][0]); - bglVertexAttrib3fvARB(prprograms[materialbits].attrib_B, &plane->tbn[1][0]); - bglVertexAttrib3fvARB(prprograms[materialbits].attrib_N, &plane->tbn[2][0]); - } - - if (plane->indices) - { - if (plane->vbo && (pr_vbos > 0)) - bglDrawElements(GL_TRIANGLES, plane->indicescount, GL_UNSIGNED_SHORT, NULL); - else - bglDrawElements(GL_TRIANGLES, plane->indicescount, GL_UNSIGNED_SHORT, plane->indices); - } else - bglDrawArrays(GL_QUADS, 0, 4); - - polymer_unbindmaterial(materialbits); - - if (plane->lightcount && (!depth || mirrors[depth-1].plane)) - prlights[plane->lights[curlight]].flags.isinview = 1; - - curlight++; - } while ((curlight < plane->lightcount) && (curlight < pr_maxlightpasses) && (!depth || mirrors[depth-1].plane)); - - if (plane->vbo && (pr_vbos > 0)) - { - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); - if (plane->indices) - bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); - } -} - -static inline void polymer_inb4mirror(GLfloat* buffer, GLfloat* plane) -{ - float pv; - float reflectionmatrix[16]; - - pv = buffer[0] * plane[0] + - buffer[1] * plane[1] + - buffer[2] * plane[2]; - - reflectionmatrix[0] = 1 - (2 * plane[0] * plane[0]); - reflectionmatrix[1] = -2 * plane[0] * plane[1]; - reflectionmatrix[2] = -2 * plane[0] * plane[2]; - reflectionmatrix[3] = 0; - - reflectionmatrix[4] = -2 * plane[0] * plane[1]; - reflectionmatrix[5] = 1 - (2 * plane[1] * plane[1]); - reflectionmatrix[6] = -2 * plane[1] * plane[2]; - reflectionmatrix[7] = 0; - - reflectionmatrix[8] = -2 * plane[0] * plane[2]; - reflectionmatrix[9] = -2 * plane[1] * plane[2]; - reflectionmatrix[10] = 1 - (2 * plane[2] * plane[2]); - reflectionmatrix[11] = 0; - - reflectionmatrix[12] = 2 * pv * plane[0]; - reflectionmatrix[13] = 2 * pv * plane[1]; - reflectionmatrix[14] = 2 * pv * plane[2]; - reflectionmatrix[15] = 1; - - bglMultMatrixf(reflectionmatrix); - - bglPushMatrix(); - bglLoadMatrixf(curskymodelviewmatrix); - bglMultMatrixf(reflectionmatrix); - bglGetFloatv(GL_MODELVIEW_MATRIX, curskymodelviewmatrix); - bglPopMatrix(); -} - -static void polymer_animatesprites(void) -{ - if (asi.animatesprites) - asi.animatesprites(globalposx, globalposy, viewangle, asi.smoothratio); -} - -static void polymer_freeboard(void) -{ - int32_t i; - - i = 0; - while (i < MAXSECTORS) - { - if (prsectors[i]) - { - if (prsectors[i]->verts) Bfree(prsectors[i]->verts); - if (prsectors[i]->floor.buffer) Bfree(prsectors[i]->floor.buffer); - if (prsectors[i]->ceil.buffer) Bfree(prsectors[i]->ceil.buffer); - if (prsectors[i]->floor.indices) Bfree(prsectors[i]->floor.indices); - if (prsectors[i]->ceil.indices) Bfree(prsectors[i]->ceil.indices); - if (prsectors[i]->ceil.vbo) bglDeleteBuffersARB(1, &prsectors[i]->ceil.vbo); - if (prsectors[i]->ceil.ivbo) bglDeleteBuffersARB(1, &prsectors[i]->ceil.ivbo); - if (prsectors[i]->floor.vbo) bglDeleteBuffersARB(1, &prsectors[i]->floor.vbo); - if (prsectors[i]->floor.ivbo) bglDeleteBuffersARB(1, &prsectors[i]->floor.ivbo); - - Bfree(prsectors[i]); - prsectors[i] = NULL; - } - - i++; - } - - i = 0; - while (i < MAXWALLS) - { - if (prwalls[i]) - { - if (prwalls[i]->bigportal) Bfree(prwalls[i]->bigportal); - if (prwalls[i]->mask.buffer) Bfree(prwalls[i]->mask.buffer); - if (prwalls[i]->cap) Bfree(prwalls[i]->cap); - if (prwalls[i]->wall.buffer) Bfree(prwalls[i]->wall.buffer); - if (prwalls[i]->wall.vbo) bglDeleteBuffersARB(1, &prwalls[i]->wall.vbo); - if (prwalls[i]->over.vbo) bglDeleteBuffersARB(1, &prwalls[i]->over.vbo); - if (prwalls[i]->mask.vbo) bglDeleteBuffersARB(1, &prwalls[i]->mask.vbo); - if (prwalls[i]->stuffvbo) bglDeleteBuffersARB(1, &prwalls[i]->stuffvbo); - - Bfree(prwalls[i]); - prwalls[i] = NULL; - } - - i++; - } - - i = 0; - while (i < MAXSPRITES) - { - if (prsprites[i]) - { - if (prsprites[i]->plane.buffer) Bfree(prsprites[i]->plane.buffer); - if (prsprites[i]->plane.vbo) bglDeleteBuffersARB(1, &prsprites[i]->plane.vbo); - Bfree(prsprites[i]); - prsprites[i] = NULL; - } - - i++; - } - -} - -// SECTORS -static int32_t polymer_initsector(int16_t sectnum) -{ - sectortype *sec; - _prsector* s; - - if (pr_verbosity >= 2) OSD_Printf("PR : Initializing sector %i...\n", sectnum); - - sec = §or[sectnum]; - s = Bcalloc(1, sizeof(_prsector)); - if (s == NULL) - { - if (pr_verbosity >= 1) OSD_Printf("PR : Cannot initialize sector %i : Bmalloc failed.\n", sectnum); - return (0); - } - - s->verts = Bcalloc(sec->wallnum, sizeof(GLdouble) * 3); - s->floor.buffer = Bcalloc(sec->wallnum, sizeof(GLfloat) * 5); - s->floor.vertcount = sec->wallnum; - s->ceil.buffer = Bcalloc(sec->wallnum, sizeof(GLfloat) * 5); - s->ceil.vertcount = sec->wallnum; - if ((s->verts == NULL) || (s->floor.buffer == NULL) || (s->ceil.buffer == NULL)) - { - if (pr_verbosity >= 1) OSD_Printf("PR : Cannot initialize geometry of sector %i : Bmalloc failed.\n", sectnum); - return (0); - } - bglGenBuffersARB(1, &s->floor.vbo); - bglGenBuffersARB(1, &s->ceil.vbo); - bglGenBuffersARB(1, &s->floor.ivbo); - bglGenBuffersARB(1, &s->ceil.ivbo); - - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, s->floor.vbo); - bglBufferDataARB(GL_ARRAY_BUFFER_ARB, sec->wallnum * sizeof(GLfloat) * 5, NULL, mapvbousage); - - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, s->ceil.vbo); - bglBufferDataARB(GL_ARRAY_BUFFER_ARB, sec->wallnum * sizeof(GLfloat) * 5, NULL, mapvbousage); - - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); - - s->flags.empty = 1; // let updatesector know that everything needs to go - - prsectors[sectnum] = s; - - if (pr_verbosity >= 2) OSD_Printf("PR : Initialized sector %i.\n", sectnum); - - return (1); -} - -static int32_t polymer_updatesector(int16_t sectnum) -{ - _prsector* s; - sectortype *sec; - walltype *wal; - int32_t i, j; - int32_t ceilz, florz; - int32_t tex, tey, heidiff; - float secangcos, secangsin, scalecoef, xpancoef, ypancoef; - int32_t ang, needfloor, wallinvalidate; - int16_t curstat, curpicnum, floorpicnum, ceilingpicnum; - char curxpanning, curypanning; - GLfloat* curbuffer; - - s = prsectors[sectnum]; - sec = §or[sectnum]; - - secangcos = secangsin = 2; - - if (s == NULL) - { - if (pr_verbosity >= 1) OSD_Printf("PR : Can't update uninitialized sector %i.\n", sectnum); - return (-1); - } - - needfloor = wallinvalidate = 0; - - // geometry - wal = &wall[sec->wallptr]; - i = 0; - while (i < sec->wallnum) - { - if ((-wal->x != s->verts[(i*3)+2])) - { - s->verts[(i*3)+2] = s->floor.buffer[(i*5)+2] = s->ceil.buffer[(i*5)+2] = -(float)wal->x; - needfloor = wallinvalidate = 1; - } - if ((wal->y != s->verts[i*3])) - { - s->verts[i*3] = s->floor.buffer[i*5] = s->ceil.buffer[i*5] = (float)wal->y; - needfloor = wallinvalidate = 1; - } - - i++; - wal = &wall[sec->wallptr + i]; - } - - if ((s->flags.empty) || - needfloor || - (sec->floorz != s->floorz) || - (sec->ceilingz != s->ceilingz) || - (sec->floorheinum != s->floorheinum) || - (sec->ceilingheinum != s->ceilingheinum)) - { - wallinvalidate = 1; - - wal = &wall[sec->wallptr]; - i = 0; - while (i < sec->wallnum) - { - getzsofslope(sectnum, wal->x, wal->y, &ceilz, &florz); - s->floor.buffer[(i*5)+1] = -(float)(florz) / 16.0f; - s->ceil.buffer[(i*5)+1] = -(float)(ceilz) / 16.0f; - - i++; - wal = &wall[sec->wallptr + i]; - } - - s->floorz = sec->floorz; - s->ceilingz = sec->ceilingz; - s->floorheinum = sec->floorheinum; - s->ceilingheinum = sec->ceilingheinum; - } - - floorpicnum = sec->floorpicnum; - if (picanm[floorpicnum]&192) floorpicnum += animateoffs(floorpicnum,sectnum); - ceilingpicnum = sec->ceilingpicnum; - if (picanm[ceilingpicnum]&192) ceilingpicnum += animateoffs(ceilingpicnum,sectnum); - - if ((!s->flags.empty) && (!needfloor) && - (sec->floorstat == s->floorstat) && - (sec->ceilingstat == s->ceilingstat) && - (floorpicnum == s->floorpicnum) && - (ceilingpicnum == s->ceilingpicnum) && - (sec->floorxpanning == s->floorxpanning) && - (sec->ceilingxpanning == s->ceilingxpanning) && - (sec->floorypanning == s->floorypanning) && - (sec->ceilingypanning == s->ceilingypanning)) - goto attributes; - - wal = &wall[sec->wallptr]; - i = 0; - while (i < sec->wallnum) - { - j = 2; - curstat = sec->floorstat; - curbuffer = s->floor.buffer; - curpicnum = floorpicnum; - curxpanning = sec->floorxpanning; - curypanning = sec->floorypanning; - - while (j) - { - if (j == 1) - { - curstat = sec->ceilingstat; - curbuffer = s->ceil.buffer; - curpicnum = ceilingpicnum; - curxpanning = sec->ceilingxpanning; - curypanning = sec->ceilingypanning; - } - - if (!waloff[curpicnum]) - loadtile(curpicnum); - - if (((sec->floorstat & 64) || (sec->ceilingstat & 64)) && - ((secangcos == 2) && (secangsin == 2))) - { - ang = (getangle(wall[wal->point2].x - wal->x, wall[wal->point2].y - wal->y) + 512) & 2047; - secangcos = (float)(sintable[(ang+512)&2047]) / 16383.0f; - secangsin = (float)(sintable[ang&2047]) / 16383.0f; - } - - // relative texturing - if (curstat & 64) - { - xpancoef = (float)(wal->x - wall[sec->wallptr].x); - ypancoef = (float)(wall[sec->wallptr].y - wal->y); - - tex = (int32_t)(xpancoef * secangsin + ypancoef * secangcos); - tey = (int32_t)(xpancoef * secangcos - ypancoef * secangsin); - } else { - tex = wal->x; - tey = -wal->y; - } - - if ((curstat & (2+64)) == (2+64)) - { - heidiff = (int32_t)(curbuffer[(i*5)+1] - curbuffer[1]); - // don't forget the sign, tey could be negative with concave sectors - if (tey >= 0) - tey = (int32_t)sqrt((tey * tey) + (heidiff * heidiff)); - else - tey = -(int32_t)sqrt((tey * tey) + (heidiff * heidiff)); - } - - if (curstat & 4) - swaplong(&tex, &tey); - - if (curstat & 16) tex = -tex; - if (curstat & 32) tey = -tey; - - scalecoef = (curstat & 8) ? 8.0f : 16.0f; - - if (curxpanning) - { - xpancoef = (float)(pow2long[picsiz[curpicnum] & 15]); - xpancoef *= (float)(curxpanning) / (256.0f * (float)(tilesizx[curpicnum])); - } - else - xpancoef = 0; - - if (curypanning) - { - ypancoef = (float)(pow2long[picsiz[curpicnum] >> 4]); - ypancoef *= (float)(curypanning) / (256.0f * (float)(tilesizy[curpicnum])); - } - else - ypancoef = 0; - - curbuffer[(i*5)+3] = ((float)(tex) / (scalecoef * tilesizx[curpicnum])) + xpancoef; - curbuffer[(i*5)+4] = ((float)(tey) / (scalecoef * tilesizy[curpicnum])) + ypancoef; - - j--; - } - i++; - wal = &wall[sec->wallptr + i]; - } - - s->floorstat = sec->floorstat; - s->ceilingstat = sec->ceilingstat; - s->floorxpanning = sec->floorxpanning; - s->ceilingxpanning = sec->ceilingxpanning; - s->floorypanning = sec->floorypanning; - s->ceilingypanning = sec->ceilingypanning; - - i = -1; - -attributes: - if ((pr_vbos > 0) && ((i == -1) || (wallinvalidate))) - { - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, s->floor.vbo); - bglBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, sec->wallnum * sizeof(GLfloat) * 5, s->floor.buffer); - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, s->ceil.vbo); - bglBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, sec->wallnum * sizeof(GLfloat) * 5, s->ceil.buffer); - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); - } - - if ((!s->flags.empty) && (!s->flags.invalidtex) && - (sec->floorshade == s->floorshade) && - (sec->ceilingshade == s->ceilingshade) && - (sec->floorpal == s->floorpal) && - (sec->ceilingpal == s->ceilingpal) && - (floorpicnum == s->floorpicnum) && - (ceilingpicnum == s->ceilingpicnum)) - goto finish; - - polymer_getbuildmaterial(&s->floor.material, floorpicnum, sec->floorpal, sec->floorshade, 0); - polymer_getbuildmaterial(&s->ceil.material, ceilingpicnum, sec->ceilingpal, sec->ceilingshade, 0); - - s->flags.invalidtex = 0; - - s->floorshade = sec->floorshade; - s->ceilingshade = sec->ceilingshade; - s->floorpal = sec->floorpal; - s->ceilingpal = sec->ceilingpal; - s->floorpicnum = floorpicnum; - s->ceilingpicnum = ceilingpicnum; - -finish: - - if (needfloor) - { - polymer_buildfloor(sectnum); - if ((pr_vbos > 0)) - { - if (s->oldindicescount < s->indicescount) - { - bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, s->floor.ivbo); - bglBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, s->indicescount * sizeof(GLushort), NULL, mapvbousage); - bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, s->ceil.ivbo); - bglBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, s->indicescount * sizeof(GLushort), NULL, mapvbousage); - s->oldindicescount = s->indicescount; - } - bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, s->floor.ivbo); - bglBufferSubDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, s->indicescount * sizeof(GLushort), s->floor.indices); - bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, s->ceil.ivbo); - bglBufferSubDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, s->indicescount * sizeof(GLushort), s->ceil.indices); - bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); - } - } - - if (wallinvalidate) - { - s->invalidid++; - polymer_computeplane(&s->floor); - polymer_computeplane(&s->ceil); - } - - s->flags.empty = 0; - s->flags.uptodate = 1; - - if (pr_verbosity >= 3) OSD_Printf("PR : Updated sector %i.\n", sectnum); - - return (0); -} - -void PR_CALLBACK polymer_tesserror(GLenum error) -{ - /* This callback is called by the tesselator whenever it raises an error. - GLU_TESS_ERROR6 is the "no error"/"null" error spam in e1l1 and others. */ - - if (pr_verbosity >= 1 && error != GLU_TESS_ERROR6) OSD_Printf("PR : Tesselation error number %i reported : %s.\n", error, bgluErrorString(errno)); -} - -void PR_CALLBACK polymer_tessedgeflag(GLenum error) -{ - // Passing an edgeflag callback forces the tesselator to output a triangle list - UNREFERENCED_PARAMETER(error); - return; -} - -void PR_CALLBACK polymer_tessvertex(void* vertex, void* sector) -{ - _prsector* s; - - s = (_prsector*)sector; - - if (s->curindice >= s->indicescount) - { - if (pr_verbosity >= 2) OSD_Printf("PR : Indice overflow, extending the indices list... !\n"); - s->indicescount++; - s->floor.indices = Brealloc(s->floor.indices, s->indicescount * sizeof(GLushort)); - s->ceil.indices = Brealloc(s->ceil.indices, s->indicescount * sizeof(GLushort)); - } - s->ceil.indices[s->curindice] = (intptr_t)vertex; - s->curindice++; -} - -static int32_t polymer_buildfloor(int16_t sectnum) -{ - // This function tesselates the floor/ceiling of a sector and stores the triangles in a display list. - _prsector* s; - sectortype *sec; - intptr_t i; - - if (pr_verbosity >= 2) OSD_Printf("PR : Tesselating floor of sector %i...\n", sectnum); - - s = prsectors[sectnum]; - sec = §or[sectnum]; - - if (s == NULL) - return (-1); - - if (s->floor.indices == NULL) - { - s->indicescount = (sec->wallnum - 2) * 3; - s->floor.indices = Bcalloc(s->indicescount, sizeof(GLushort)); - s->ceil.indices = Bcalloc(s->indicescount, sizeof(GLushort)); - } - - s->curindice = 0; - - bgluTessCallback(prtess, GLU_TESS_VERTEX_DATA, polymer_tessvertex); - bgluTessCallback(prtess, GLU_TESS_EDGE_FLAG, polymer_tessedgeflag); - bgluTessCallback(prtess, GLU_TESS_ERROR, polymer_tesserror); - - bgluTessProperty(prtess, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_POSITIVE); - - bgluTessBeginPolygon(prtess, s); - bgluTessBeginContour(prtess); - - i = 0; - while (i < sec->wallnum) - { - bgluTessVertex(prtess, s->verts + (3 * i), (void *)i); - if ((i != (sec->wallnum - 1)) && ((sec->wallptr + i) > wall[sec->wallptr + i].point2)) - { - bgluTessEndContour(prtess); - bgluTessBeginContour(prtess); - } - i++; - } - bgluTessEndContour(prtess); - bgluTessEndPolygon(prtess); - - i = 0; - while (i < s->indicescount) - { - s->floor.indices[s->indicescount - i - 1] = s->ceil.indices[i]; - - i++; - } - s->floor.indicescount = s->ceil.indicescount = s->indicescount; - - if (pr_verbosity >= 2) OSD_Printf("PR : Tesselated floor of sector %i.\n", sectnum); - - return (1); -} - -static void polymer_drawsector(int16_t sectnum) -{ - sectortype *sec; - _prsector* s; - GLubyte oldcolor[4]; - - if (pr_verbosity >= 3) OSD_Printf("PR : Drawing sector %i...\n", sectnum); - - sec = §or[sectnum]; - s = prsectors[sectnum]; - - fogcalc(sec->floorshade,sec->visibility,sec->floorpal); - bglFogf(GL_FOG_DENSITY,fogresult); - bglFogfv(GL_FOG_COLOR,fogcol); - - if (!(sec->floorstat & 1) || (searchit == 2)) { - if (searchit == 2) { - memcpy(oldcolor, s->floor.material.diffusemodulation, sizeof(GLubyte) * 4); - - s->floor.material.diffusemodulation[0] = 0x02; - s->floor.material.diffusemodulation[1] = ((GLubyte *)(§num))[0]; - s->floor.material.diffusemodulation[2] = ((GLubyte *)(§num))[1]; - s->floor.material.diffusemodulation[3] = 0xFF; - } - polymer_drawplane(&s->floor); - - if (searchit == 2) - memcpy(s->floor.material.diffusemodulation, oldcolor, sizeof(GLubyte) * 4); - } - - fogcalc(sec->ceilingshade,sec->visibility,sec->ceilingpal); - bglFogf(GL_FOG_DENSITY,fogresult); - bglFogfv(GL_FOG_COLOR,fogcol); - - if (!(sec->ceilingstat & 1) || (searchit == 2)) { - if (searchit == 2) { - memcpy(oldcolor, s->ceil.material.diffusemodulation, sizeof(GLubyte) * 4); - - s->ceil.material.diffusemodulation[0] = 0x01; - s->ceil.material.diffusemodulation[1] = ((GLubyte *)(§num))[0]; - s->ceil.material.diffusemodulation[2] = ((GLubyte *)(§num))[1]; - s->ceil.material.diffusemodulation[3] = 0xFF; - } - polymer_drawplane(&s->ceil); - - if (searchit == 2) - memcpy(s->ceil.material.diffusemodulation, oldcolor, sizeof(GLubyte) * 4); - } - - if (pr_verbosity >= 3) OSD_Printf("PR : Finished drawing sector %i...\n", sectnum); -} - -// WALLS -static int32_t polymer_initwall(int16_t wallnum) -{ - _prwall *w; - - if (pr_verbosity >= 2) OSD_Printf("PR : Initializing wall %i...\n", wallnum); - - w = Bcalloc(1, sizeof(_prwall)); - if (w == NULL) - { - if (pr_verbosity >= 1) OSD_Printf("PR : Cannot initialize wall %i : Bmalloc failed.\n", wallnum); - return (0); - } - - if (w->mask.buffer == NULL) { - w->mask.buffer = Bmalloc(4 * sizeof(GLfloat) * 5); - w->mask.vertcount = 4; - } - if (w->bigportal == NULL) - w->bigportal = Bmalloc(4 * sizeof(GLfloat) * 5); - if (w->cap == NULL) - w->cap = Bmalloc(4 * sizeof(GLfloat) * 3); - - bglGenBuffersARB(1, &w->wall.vbo); - bglGenBuffersARB(1, &w->over.vbo); - bglGenBuffersARB(1, &w->mask.vbo); - bglGenBuffersARB(1, &w->stuffvbo); - - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, w->wall.vbo); - bglBufferDataARB(GL_ARRAY_BUFFER_ARB, 4 * sizeof(GLfloat) * 5, NULL, mapvbousage); - - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, w->over.vbo); - bglBufferDataARB(GL_ARRAY_BUFFER_ARB, 4 * sizeof(GLfloat) * 5, NULL, mapvbousage); - - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, w->mask.vbo); - bglBufferDataARB(GL_ARRAY_BUFFER_ARB, 4 * sizeof(GLfloat) * 5, NULL, mapvbousage); - - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, w->stuffvbo); - bglBufferDataARB(GL_ARRAY_BUFFER_ARB, 8 * sizeof(GLfloat) * 5, NULL, mapvbousage); - - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); - - w->flags.empty = 1; - - prwalls[wallnum] = w; - - if (pr_verbosity >= 2) OSD_Printf("PR : Initialized wall %i.\n", wallnum); - - return (1); -} - -static void polymer_updatewall(int16_t wallnum) -{ - int16_t nwallnum, nnwallnum, curpicnum, wallpicnum, walloverpicnum, nwallpicnum; - char curxpanning, curypanning, underwall, overwall, curpal; - int8_t curshade; - walltype *wal; - sectortype *sec, *nsec; - _prwall *w; - _prsector *s, *ns; - int32_t xref, yref; - float ypancoef, dist; - int32_t i; - uint32_t invalid; - int32_t sectofwall = sectorofwall(wallnum); - - // yes, this function is messy and unefficient - // it also works, bitches - sec = §or[sectofwall]; - - if (sectofwall < 0 || sectofwall >= numsectors || - wallnum < 0 || wallnum > numwalls || - sec->wallptr > wallnum || wallnum >= (sec->wallptr + sec->wallnum)) - return; // yay, corrupt map - - wal = &wall[wallnum]; - nwallnum = wal->nextwall; - - w = prwalls[wallnum]; - s = prsectors[sectofwall]; - invalid = s->invalidid; - if (nwallnum >= 0 && nwallnum < numwalls) - { - ns = prsectors[wal->nextsector]; - invalid += ns->invalidid; - nsec = §or[wal->nextsector]; - } - else - { - ns = NULL; - nsec = NULL; - } - - if (w->wall.buffer == NULL) { - w->wall.buffer = Bmalloc(4 * sizeof(GLfloat) * 5); - w->wall.vertcount = 4; - } - - wallpicnum = wal->picnum; - if (picanm[wallpicnum]&192) wallpicnum += animateoffs(wallpicnum,wallnum+16384); - walloverpicnum = wal->overpicnum; - if (picanm[walloverpicnum]&192) walloverpicnum += animateoffs(walloverpicnum,wallnum+16384); - if (nwallnum >= 0 && nwallnum < numwalls) - { - nwallpicnum = wall[nwallnum].picnum; - if (picanm[nwallpicnum]&192) nwallpicnum += animateoffs(nwallpicnum,wallnum+16384); - } - else - nwallpicnum = 0; - - if ((!w->flags.empty) && (!w->flags.invalidtex) && - (w->invalidid == invalid) && - (wal->cstat == w->cstat) && - (wallpicnum == w->picnum) && - (wal->pal == w->pal) && - (wal->xpanning == w->xpanning) && - (wal->ypanning == w->ypanning) && - (wal->xrepeat == w->xrepeat) && - (wal->yrepeat == w->yrepeat) && - (walloverpicnum == w->overpicnum) && - (wal->shade == w->shade) && - ((nwallnum < 0 || nwallnum > numwalls) || - ((nwallpicnum == w->nwallpicnum) && - (wall[nwallnum].xpanning == w->nwallxpanning) && - (wall[nwallnum].ypanning == w->nwallypanning) && - (wall[nwallnum].cstat == w->nwallcstat) && - (wall[nwallnum].shade == w->nwallshade)))) - { - w->flags.uptodate = 1; - return; // screw you guys I'm going home - } - else - { - if (w->invalidid != invalid) - polymer_invalidatesectorlights(sectofwall); - - w->invalidid = invalid; - w->cstat = wal->cstat; - w->picnum = wallpicnum; - w->pal = wal->pal; - w->xpanning = wal->xpanning; - w->ypanning = wal->ypanning; - w->xrepeat = wal->xrepeat; - w->yrepeat = wal->yrepeat; - w->overpicnum = walloverpicnum; - w->shade = wal->shade; - if (nwallnum >= 0 && nwallnum < numwalls) - { - w->nwallpicnum = nwallpicnum; - w->nwallxpanning = wall[nwallnum].xpanning; - w->nwallypanning = wall[nwallnum].ypanning; - w->nwallcstat = wall[nwallnum].cstat; - w->nwallshade = wall[nwallnum].shade; - } - } - - w->underover = underwall = overwall = 0; - - if (wal->cstat & 8) - xref = 1; - else - xref = 0; - - if (wal->nextsector < 0 || wal->nextsector >= numsectors) - { - Bmemcpy(w->wall.buffer, &s->floor.buffer[(wallnum - sec->wallptr) * 5], sizeof(GLfloat) * 3); - Bmemcpy(&w->wall.buffer[5], &s->floor.buffer[(wal->point2 - sec->wallptr) * 5], sizeof(GLfloat) * 3); - Bmemcpy(&w->wall.buffer[10], &s->ceil.buffer[(wal->point2 - sec->wallptr) * 5], sizeof(GLfloat) * 3); - Bmemcpy(&w->wall.buffer[15], &s->ceil.buffer[(wallnum - sec->wallptr) * 5], sizeof(GLfloat) * 3); - - if (wal->nextsector < 0) - curpicnum = wallpicnum; - else - curpicnum = walloverpicnum; - - polymer_getbuildmaterial(&w->wall.material, curpicnum, wal->pal, wal->shade, 0); - - if (wal->cstat & 4) - yref = sec->floorz; - else - yref = sec->ceilingz; - - if ((wal->cstat & 32) && (wal->nextsector >= 0)) - { - if ((!(wal->cstat & 2) && (wal->cstat & 4)) || ((wal->cstat & 2) && (wall[nwallnum].cstat & 4))) - yref = sec->ceilingz; - else - yref = nsec->floorz; - } - - if (wal->ypanning) - { - ypancoef = (float)(pow2long[picsiz[curpicnum] >> 4]); - if (ypancoef < tilesizy[curpicnum]) - ypancoef *= 2; - curypanning = wal->ypanning; - if (curypanning > 256 - (ypancoef - tilesizy[curpicnum]) * (256.0f / ypancoef)) - curypanning -= (ypancoef - tilesizy[curpicnum]) * (256.0f / ypancoef); - ypancoef *= (float)(curypanning) / (256.0f * (float)(tilesizy[curpicnum])); - } - else - ypancoef = 0; - - i = 0; - while (i < 4) - { - if ((i == 0) || (i == 3)) - dist = (float)xref; - else - dist = (float)(xref == 0); - - w->wall.buffer[(i * 5) + 3] = ((dist * 8.0f * wal->xrepeat) + wal->xpanning) / (float)(tilesizx[curpicnum]); - w->wall.buffer[(i * 5) + 4] = (-(float)(yref + (w->wall.buffer[(i * 5) + 1] * 16)) / ((tilesizy[curpicnum] * 2048.0f) / (float)(wal->yrepeat))) + ypancoef; - - if (wal->cstat & 256) w->wall.buffer[(i * 5) + 4] = -w->wall.buffer[(i * 5) + 4]; - - i++; - } - - w->underover |= 1; - } - else - { - nnwallnum = wall[nwallnum].point2; - - if ((s->floor.buffer[((wallnum - sec->wallptr) * 5) + 1] < ns->floor.buffer[((nnwallnum - nsec->wallptr) * 5) + 1]) || - (s->floor.buffer[((wal->point2 - sec->wallptr) * 5) + 1] < ns->floor.buffer[((nwallnum - nsec->wallptr) * 5) + 1])) - underwall = 1; - - if ((underwall) || (wal->cstat & 16) || (wal->cstat & 32)) - { - if (s->floor.buffer[((wallnum - sec->wallptr) * 5) + 1] < ns->floor.buffer[((nnwallnum - nsec->wallptr) * 5) + 1]) - Bmemcpy(w->wall.buffer, &s->floor.buffer[(wallnum - sec->wallptr) * 5], sizeof(GLfloat) * 3); - else - Bmemcpy(w->wall.buffer, &ns->floor.buffer[(nnwallnum - nsec->wallptr) * 5], sizeof(GLfloat) * 3); - Bmemcpy(&w->wall.buffer[5], &s->floor.buffer[(wal->point2 - sec->wallptr) * 5], sizeof(GLfloat) * 3); - Bmemcpy(&w->wall.buffer[10], &ns->floor.buffer[(nwallnum - nsec->wallptr) * 5], sizeof(GLfloat) * 3); - Bmemcpy(&w->wall.buffer[15], &ns->floor.buffer[(nnwallnum - nsec->wallptr) * 5], sizeof(GLfloat) * 3); - - if (wal->cstat & 2) - { - curpicnum = nwallpicnum; - curpal = wall[nwallnum].pal; - curshade = wall[nwallnum].shade; - curxpanning = wall[nwallnum].xpanning; - curypanning = wall[nwallnum].ypanning; - } - else - { - curpicnum = wallpicnum; - curpal = wal->pal; - curshade = wal->shade; - curxpanning = wal->xpanning; - curypanning = wal->ypanning; - } - - polymer_getbuildmaterial(&w->wall.material, curpicnum, curpal, curshade, 0); - - if ((!(wal->cstat & 2) && (wal->cstat & 4)) || ((wal->cstat & 2) && (wall[nwallnum].cstat & 4))) - yref = sec->ceilingz; - else - yref = nsec->floorz; - - if (curypanning) - { - ypancoef = (float)(pow2long[picsiz[curpicnum] >> 4]); - if (ypancoef < tilesizy[curpicnum]) - ypancoef *= 2; - if (curypanning > 256 - (ypancoef - tilesizy[curpicnum]) * (256.0f / ypancoef)) - curypanning -= (ypancoef - tilesizy[curpicnum]) * (256.0f / ypancoef); - ypancoef *= (float)(curypanning) / (256.0f * (float)(tilesizy[curpicnum])); - } - else - ypancoef = 0; - - i = 0; - while (i < 4) - { - if ((i == 0) || (i == 3)) - dist = (float)xref; - else - dist = (float)(xref == 0); - - w->wall.buffer[(i * 5) + 3] = ((dist * 8.0f * wal->xrepeat) + curxpanning) / (float)(tilesizx[curpicnum]); - w->wall.buffer[(i * 5) + 4] = (-(float)(yref + (w->wall.buffer[(i * 5) + 1] * 16)) / ((tilesizy[curpicnum] * 2048.0f) / (float)(wal->yrepeat))) + ypancoef; - - if ((!(wal->cstat & 2) && (wal->cstat & 256)) || - ((wal->cstat & 2) && (wall[nwallnum].cstat & 256))) - w->wall.buffer[(i * 5) + 4] = -w->wall.buffer[(i * 5) + 4]; - - i++; - } - - if (underwall) - w->underover |= 1; - - Bmemcpy(w->mask.buffer, &w->wall.buffer[15], sizeof(GLfloat) * 5); - Bmemcpy(&w->mask.buffer[5], &w->wall.buffer[10], sizeof(GLfloat) * 5); - } - else - { - Bmemcpy(w->mask.buffer, &s->floor.buffer[(wallnum - sec->wallptr) * 5], sizeof(GLfloat) * 5); - Bmemcpy(&w->mask.buffer[5], &s->floor.buffer[(wal->point2 - sec->wallptr) * 5], sizeof(GLfloat) * 5); - } - - if ((s->ceil.buffer[((wallnum - sec->wallptr) * 5) + 1] > ns->ceil.buffer[((nnwallnum - nsec->wallptr) * 5) + 1]) || - (s->ceil.buffer[((wal->point2 - sec->wallptr) * 5) + 1] > ns->ceil.buffer[((nwallnum - nsec->wallptr) * 5) + 1])) - overwall = 1; - - if ((overwall) || (wal->cstat & 16) || (wal->cstat & 32)) - { - if (w->over.buffer == NULL) { - w->over.buffer = Bmalloc(4 * sizeof(GLfloat) * 5); - w->over.vertcount = 4; - } - - Bmemcpy(w->over.buffer, &ns->ceil.buffer[(nnwallnum - nsec->wallptr) * 5], sizeof(GLfloat) * 3); - Bmemcpy(&w->over.buffer[5], &ns->ceil.buffer[(nwallnum - nsec->wallptr) * 5], sizeof(GLfloat) * 3); - if (s->ceil.buffer[((wal->point2 - sec->wallptr) * 5) + 1] > ns->ceil.buffer[((nwallnum - nsec->wallptr) * 5) + 1]) - Bmemcpy(&w->over.buffer[10], &s->ceil.buffer[(wal->point2 - sec->wallptr) * 5], sizeof(GLfloat) * 3); - else - Bmemcpy(&w->over.buffer[10], &ns->ceil.buffer[(nwallnum - nsec->wallptr) * 5], sizeof(GLfloat) * 3); - Bmemcpy(&w->over.buffer[15], &s->ceil.buffer[(wallnum - sec->wallptr) * 5], sizeof(GLfloat) * 3); - - if ((wal->cstat & 16) || (wal->overpicnum == 0)) - curpicnum = wallpicnum; - else - curpicnum = wallpicnum; - - polymer_getbuildmaterial(&w->over.material, curpicnum, wal->pal, wal->shade, 0); - - if ((wal->cstat & 16) || (wal->cstat & 32)) - { - // mask - polymer_getbuildmaterial(&w->mask.material, walloverpicnum, wal->pal, wal->shade, 0); - - if (wal->cstat & 128) - { - if (wal->cstat & 512) - w->mask.material.diffusemodulation[3] = 0x55; - else - w->mask.material.diffusemodulation[3] = 0xAA; - } - } - - if (wal->cstat & 4) - yref = sec->ceilingz; - else - yref = nsec->ceilingz; - - if (wal->ypanning) - { - ypancoef = (float)(pow2long[picsiz[curpicnum] >> 4]); - if (ypancoef < tilesizy[curpicnum]) - ypancoef *= 2; - curypanning = wal->ypanning; - if (curypanning > 256 - (ypancoef - tilesizy[curpicnum]) * (256.0f / ypancoef)) - curypanning -= (ypancoef - tilesizy[curpicnum]) * (256.0f / ypancoef); - ypancoef *= (float)(curypanning) / (256.0f * (float)(tilesizy[curpicnum])); - } - else - ypancoef = 0; - - i = 0; - while (i < 4) - { - if ((i == 0) || (i == 3)) - dist = (float)xref; - else - dist = (float)(xref == 0); - - w->over.buffer[(i * 5) + 3] = ((dist * 8.0f * wal->xrepeat) + wal->xpanning) / (float)(tilesizx[curpicnum]); - w->over.buffer[(i * 5) + 4] = (-(float)(yref + (w->over.buffer[(i * 5) + 1] * 16)) / ((tilesizy[curpicnum] * 2048.0f) / (float)(wal->yrepeat))) + ypancoef; - - if (wal->cstat & 256) w->over.buffer[(i * 5) + 4] = -w->over.buffer[(i * 5) + 4]; - - i++; - } - - if (overwall) - w->underover |= 2; - - Bmemcpy(&w->mask.buffer[10], &w->over.buffer[5], sizeof(GLfloat) * 5); - Bmemcpy(&w->mask.buffer[15], &w->over.buffer[0], sizeof(GLfloat) * 5); - - if ((wal->cstat & 16) || (wal->cstat & 32)) - { - // mask wall pass - if (wal->cstat & 4) - yref = min(sec->floorz, nsec->floorz); - else - yref = max(sec->ceilingz, nsec->ceilingz); - - if (wal->cstat & 32) - { - if ((!(wal->cstat & 2) && (wal->cstat & 4)) || ((wal->cstat & 2) && (wall[nwallnum].cstat & 4))) - yref = sec->ceilingz; - else - yref = nsec->ceilingz; - } - - curpicnum = walloverpicnum; - - if (wal->ypanning) - { - ypancoef = (float)(pow2long[picsiz[curpicnum] >> 4]); - if (ypancoef < tilesizy[curpicnum]) - ypancoef *= 2; - curypanning = wal->ypanning; - if (curypanning > 256 - (ypancoef - tilesizy[curpicnum]) * (256.0f / ypancoef)) - curypanning -= (ypancoef - tilesizy[curpicnum]) * (256.0f / ypancoef); - ypancoef *= (float)(curypanning) / (256.0f * (float)(tilesizy[curpicnum])); - } - else - ypancoef = 0; - - i = 0; - while (i < 4) - { - if ((i == 0) || (i == 3)) - dist = (float)xref; - else - dist = (float)(xref == 0); - - w->mask.buffer[(i * 5) + 3] = ((dist * 8.0f * wal->xrepeat) + wal->xpanning) / (float)(tilesizx[curpicnum]); - w->mask.buffer[(i * 5) + 4] = (-(float)(yref + (w->mask.buffer[(i * 5) + 1] * 16)) / ((tilesizy[curpicnum] * 2048.0f) / (float)(wal->yrepeat))) + ypancoef; - - if (wal->cstat & 256) w->mask.buffer[(i * 5) + 4] = -w->mask.buffer[(i * 5) + 4]; - - i++; - } - } - } - else - { - Bmemcpy(&w->mask.buffer[10], &s->ceil.buffer[(wal->point2 - sec->wallptr) * 5], sizeof(GLfloat) * 5); - Bmemcpy(&w->mask.buffer[15], &s->ceil.buffer[(wallnum - sec->wallptr) * 5], sizeof(GLfloat) * 5); - } - } - - if (wal->nextsector < 0) - Bmemcpy(w->mask.buffer, w->wall.buffer, sizeof(GLfloat) * 4 * 5); - - Bmemcpy(w->bigportal, &s->floor.buffer[(wallnum - sec->wallptr) * 5], sizeof(GLfloat) * 3); - Bmemcpy(&w->bigportal[5], &s->floor.buffer[(wal->point2 - sec->wallptr) * 5], sizeof(GLfloat) * 3); - Bmemcpy(&w->bigportal[10], &s->ceil.buffer[(wal->point2 - sec->wallptr) * 5], sizeof(GLfloat) * 3); - Bmemcpy(&w->bigportal[15], &s->ceil.buffer[(wallnum - sec->wallptr) * 5], sizeof(GLfloat) * 3); - - Bmemcpy(&w->cap[0], &s->ceil.buffer[(wallnum - sec->wallptr) * 5], sizeof(GLfloat) * 3); - Bmemcpy(&w->cap[3], &s->ceil.buffer[(wal->point2 - sec->wallptr) * 5], sizeof(GLfloat) * 3); - Bmemcpy(&w->cap[6], &s->ceil.buffer[(wal->point2 - sec->wallptr) * 5], sizeof(GLfloat) * 3); - Bmemcpy(&w->cap[9], &s->ceil.buffer[(wallnum - sec->wallptr) * 5], sizeof(GLfloat) * 3); - w->cap[7] += 1048576; // this number is the result of 1048574 + 2 - w->cap[10] += 1048576; // this one is arbitrary - - if (w->underover & 1) - polymer_computeplane(&w->wall); - if (w->underover & 2) - polymer_computeplane(&w->over); - polymer_computeplane(&w->mask); - - if ((pr_vbos > 0)) - { - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, w->wall.vbo); - bglBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, 4 * sizeof(GLfloat) * 5, w->wall.buffer); - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, w->over.vbo); - if (w->over.buffer) - bglBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, 4 * sizeof(GLfloat) * 5, w->over.buffer); - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, w->mask.vbo); - bglBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, 4 * sizeof(GLfloat) * 5, w->mask.buffer); - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, w->stuffvbo); - bglBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, 4 * sizeof(GLfloat) * 5, w->bigportal); - bglBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 4 * sizeof(GLfloat) * 5, 4 * sizeof(GLfloat) * 3, w->cap); - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); - } - - w->flags.empty = 0; - w->flags.uptodate = 1; - w->flags.invalidtex = 0; - - if (pr_verbosity >= 3) OSD_Printf("PR : Updated wall %i.\n", wallnum); -} - -static void polymer_drawwall(int16_t sectnum, int16_t wallnum) -{ - sectortype *sec; - walltype *wal; - _prwall *w; - GLubyte oldcolor[4]; - int32_t parallaxedfloor = 0, parallaxedceiling = 0; - - if (pr_verbosity >= 3) OSD_Printf("PR : Drawing wall %i...\n", wallnum); - - sec = §or[sectnum]; - wal = &wall[wallnum]; - w = prwalls[wallnum]; - - if ((sec->floorstat & 1) && (wal->nextsector >= 0) && - (sector[wal->nextsector].floorstat & 1)) - parallaxedfloor = 1; - - if ((sec->ceilingstat & 1) && (wal->nextsector >= 0) && - (sector[wal->nextsector].ceilingstat & 1)) - parallaxedceiling = 1; - - fogcalc(wal->shade,sec->visibility,sec->floorpal); - bglFogf(GL_FOG_DENSITY,fogresult); - bglFogfv(GL_FOG_COLOR,fogcol); - - if ((w->underover & 1) && (!parallaxedfloor || (searchit == 2))) - { - if (searchit == 2) { - memcpy(oldcolor, w->wall.material.diffusemodulation, sizeof(GLubyte) * 4); - - w->wall.material.diffusemodulation[0] = 0x05; - w->wall.material.diffusemodulation[1] = ((GLubyte *)(&wallnum))[0]; - w->wall.material.diffusemodulation[2] = ((GLubyte *)(&wallnum))[1]; - w->wall.material.diffusemodulation[3] = 0xFF; - } - - polymer_drawplane(&w->wall); - - if (searchit == 2) - memcpy(w->wall.material.diffusemodulation, oldcolor, sizeof(GLubyte) * 4); - } - - if ((w->underover & 2) && (!parallaxedceiling || (searchit == 2))) - { - if (searchit == 2) { - memcpy(oldcolor, w->over.material.diffusemodulation, sizeof(GLubyte) * 4); - - w->over.material.diffusemodulation[0] = 0x00; - w->over.material.diffusemodulation[1] = ((GLubyte *)(&wallnum))[0]; - w->over.material.diffusemodulation[2] = ((GLubyte *)(&wallnum))[1]; - w->over.material.diffusemodulation[3] = 0xFF; - } - - polymer_drawplane(&w->over); - - if (searchit == 2) - memcpy(w->over.material.diffusemodulation, oldcolor, sizeof(GLubyte) * 4); - } - - if ((wall[wallnum].cstat & 32) && (wall[wallnum].nextsector >= 0)) { - if (searchit == 2) { - memcpy(oldcolor, w->mask.material.diffusemodulation, sizeof(GLubyte) * 4); - - w->mask.material.diffusemodulation[0] = 0x04; - w->mask.material.diffusemodulation[1] = ((GLubyte *)(&wallnum))[0]; - w->mask.material.diffusemodulation[2] = ((GLubyte *)(&wallnum))[1]; - w->mask.material.diffusemodulation[3] = 0xFF; - } - - polymer_drawplane(&w->mask); - - if (searchit == 2) - memcpy(w->mask.material.diffusemodulation, oldcolor, sizeof(GLubyte) * 4); - } - - if (!searchit && (sector[sectnum].ceilingstat & 1) && - ((wall[wallnum].nextsector < 0) || - !(sector[wall[wallnum].nextsector].ceilingstat & 1))) - { - bglColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - - if (pr_vbos) - { - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, w->stuffvbo); - bglVertexPointer(3, GL_FLOAT, 0, (const GLvoid*)(4 * sizeof(GLfloat) * 5)); - } - else - bglVertexPointer(3, GL_FLOAT, 0, w->cap); - - bglDrawArrays(GL_QUADS, 0, 4); - - if (pr_vbos) - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); - - bglColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - } - - if (pr_verbosity >= 3) OSD_Printf("PR : Finished drawing wall %i...\n", wallnum); -} - -#define INDICE(n) ((p->indices) ? (p->indices[(i+n)%p->indicescount]*5) : (((i+n)%p->vertcount)*5)) - -// HSR -static void polymer_computeplane(_prplane* p) -{ - GLfloat vec1[5], vec2[5], norm, r;// BxN[3], NxT[3], TxB[3]; - int32_t i; - GLfloat* buffer; - GLfloat* plane; - - if (p->indices && (p->indicescount < 3)) - return; // corrupt sector (E3L4, I'm looking at you) - - buffer = p->buffer; - plane = p->plane; - - i = 0; - do - { - vec1[0] = buffer[(INDICE(1)) + 0] - buffer[(INDICE(0)) + 0]; //x1 - vec1[1] = buffer[(INDICE(1)) + 1] - buffer[(INDICE(0)) + 1]; //y1 - vec1[2] = buffer[(INDICE(1)) + 2] - buffer[(INDICE(0)) + 2]; //z1 - vec1[3] = buffer[(INDICE(1)) + 3] - buffer[(INDICE(0)) + 3]; //s1 - vec1[4] = buffer[(INDICE(1)) + 4] - buffer[(INDICE(0)) + 4]; //t1 - - vec2[0] = buffer[(INDICE(2)) + 0] - buffer[(INDICE(1)) + 0]; //x2 - vec2[1] = buffer[(INDICE(2)) + 1] - buffer[(INDICE(1)) + 1]; //y2 - vec2[2] = buffer[(INDICE(2)) + 2] - buffer[(INDICE(1)) + 2]; //z2 - vec2[3] = buffer[(INDICE(2)) + 3] - buffer[(INDICE(1)) + 3]; //s2 - vec2[4] = buffer[(INDICE(2)) + 4] - buffer[(INDICE(1)) + 4]; //t2 - - polymer_crossproduct(vec2, vec1, plane); - - norm = plane[0] * plane[0] + plane[1] * plane[1] + plane[2] * plane[2]; - - // hack to work around a precision issue with slopes - if (norm >= 15000) - { - float tangent[3][3]; - double det; - - // normalize the normal/plane equation and calculate its plane norm - norm = -sqrt(norm); - norm = 1.0 / norm; - plane[0] *= norm; - plane[1] *= norm; - plane[2] *= norm; - plane[3] = -(plane[0] * buffer[0] + plane[1] * buffer[1] + plane[2] * buffer[2]); - - // calculate T and B - r = 1.0 / (vec1[3] * vec2[4] - vec2[3] * vec1[4]); - - // tangent - tangent[0][0] = (vec2[4] * vec1[0] - vec1[4] * vec2[0]) * r; - tangent[0][1] = (vec2[4] * vec1[1] - vec1[4] * vec2[1]) * r; - tangent[0][2] = (vec2[4] * vec1[2] - vec1[4] * vec2[2]) * r; - - polymer_normalize(&tangent[0][0]); - - // bitangent - tangent[1][0] = (vec1[3] * vec2[0] - vec2[3] * vec1[0]) * r; - tangent[1][1] = (vec1[3] * vec2[1] - vec2[3] * vec1[1]) * r; - tangent[1][2] = (vec1[3] * vec2[2] - vec2[3] * vec1[2]) * r; - - polymer_normalize(&tangent[1][0]); - - // normal - tangent[2][0] = plane[0]; - tangent[2][1] = plane[1]; - tangent[2][2] = plane[2]; - - INVERT_3X3(p->tbn, det, tangent); - - break; - } - i+= (p->indices) ? 3 : 1; - } - while ((p->indices && i < p->indicescount) || - (!p->indices && i < p->vertcount)); -} - -static inline void polymer_crossproduct(GLfloat* in_a, GLfloat* in_b, GLfloat* out) -{ - out[0] = in_a[1] * in_b[2] - in_a[2] * in_b[1]; - out[1] = in_a[2] * in_b[0] - in_a[0] * in_b[2]; - out[2] = in_a[0] * in_b[1] - in_a[1] * in_b[0]; -} - -static inline void polymer_transformpoint(const float* inpos, float* pos, float* matrix) -{ - pos[0] = inpos[0] * matrix[0] + - inpos[1] * matrix[4] + - inpos[2] * matrix[8] + - + matrix[12]; - pos[1] = inpos[0] * matrix[1] + - inpos[1] * matrix[5] + - inpos[2] * matrix[9] + - + matrix[13]; - pos[2] = inpos[0] * matrix[2] + - inpos[1] * matrix[6] + - inpos[2] * matrix[10] + - + matrix[14]; -} - -static inline void polymer_normalize(float* vec) -{ - double norm; - - norm = vec[0] * vec[0] + vec[1] * vec[1] + vec[2] * vec[2]; - - norm = sqrt(norm); - norm = 1.0 / norm; - vec[0] *= norm; - vec[1] *= norm; - vec[2] *= norm; -} - -static inline void polymer_pokesector(int16_t sectnum) -{ - sectortype *sec = §or[sectnum]; - _prsector *s = prsectors[sectnum]; - walltype *wal = &wall[sec->wallptr]; - int32_t i = 0; - - if (!s->flags.uptodate) - polymer_updatesector(sectnum); - - do - { - if ((wal->nextsector >= 0) && (!prsectors[wal->nextsector]->flags.uptodate)) - polymer_updatesector(wal->nextsector); - if (!prwalls[sec->wallptr + i]->flags.uptodate) - polymer_updatewall(sec->wallptr + i); - - i++; - wal = &wall[sec->wallptr + i]; - } - while (i < sec->wallnum); -} - -static void polymer_extractfrustum(GLfloat* modelview, GLfloat* projection, float* frustum) -{ - GLfloat matrix[16]; - int32_t i; - - bglMatrixMode(GL_TEXTURE); - bglLoadMatrixf(projection); - bglMultMatrixf(modelview); - bglGetFloatv(GL_TEXTURE_MATRIX, matrix); - bglLoadIdentity(); - bglMatrixMode(GL_MODELVIEW); - - i = 0; - do - { - frustum[i] = matrix[(4 * i) + 3] + matrix[4 * i]; // left - frustum[i + 4] = matrix[(4 * i) + 3] - matrix[4 * i]; // right - frustum[i + 8] = matrix[(4 * i) + 3] - matrix[(4 * i) + 1]; // top - frustum[i + 12] = matrix[(4 * i) + 3] + matrix[(4 * i) + 1]; // bottom - frustum[i + 16] = matrix[(4 * i) + 3] - matrix[(4 * i) + 2]; // far - } - while (++i < 4); - - if (pr_verbosity >= 3) OSD_Printf("PR : Frustum extracted.\n"); -} - -static inline int32_t polymer_planeinfrustum(_prplane *plane, float* frustum) -{ - int32_t i, j, k = -1; - - i = 4; - do - { - j = k = plane->vertcount - 1; - do - { - k -= ((frustum[(i << 2) + 0] * plane->buffer[j + (j << 2) + 0] + - frustum[(i << 2) + 1] * plane->buffer[j + (j << 2) + 1] + - frustum[(i << 2) + 2] * plane->buffer[j + (j << 2) + 2] + - frustum[(i << 2) + 3]) < 0.f); - - } - while (j--); - - if (k == -1) - return (0); // OUT ! - } - while (i--); - - return (1); -} - -static inline void polymer_scansprites(int16_t sectnum, spritetype* localtsprite, int32_t* localspritesortcnt) -{ - int32_t i; - spritetype *spr; - - for (i = headspritesect[sectnum];i >=0;i = nextspritesect[i]) - { - spr = &sprite[i]; - if ((((spr->cstat&0x8000) == 0) || (showinvisibility)) && - (spr->xrepeat > 0) && (spr->yrepeat > 0) && - (*localspritesortcnt < MAXSPRITESONSCREEN)) - { - copybufbyte(spr,&localtsprite[*localspritesortcnt],sizeof(spritetype)); - localtsprite[(*localspritesortcnt)++].owner = i; - } - } -} - -// SKIES -static void polymer_getsky(void) -{ - int32_t i; - - i = 0; - while (i < numsectors) - { - if (sector[i].ceilingstat & 1) - { - cursky = sector[i].ceilingpicnum; - curskypal = sector[i].ceilingpal; - curskyshade = sector[i].ceilingshade; - return; - } - i++; - } -} - -static void polymer_drawsky(int16_t tilenum, char palnum, int8_t shade) -{ - float pos[3]; - pthtyp* pth; - - pos[0] = (float)globalposy; - pos[1] = -(float)(globalposz) / 16.0f; - pos[2] = -(float)globalposx; - - bglPushMatrix(); - bglLoadIdentity(); - bglLoadMatrixf(curskymodelviewmatrix); - - bglTranslatef(pos[0], pos[1], pos[2]); - bglScalef(1000.0f, 1000.0f, 1000.0f); - - drawingskybox = 1; - pth = gltexcache(tilenum,0,0); - drawingskybox = 0; - - if (pth && (pth->flags & 4)) - polymer_drawskybox(tilenum, palnum, shade); - else - polymer_drawartsky(tilenum, palnum, shade); - - bglPopMatrix(); -} - -static void polymer_initartsky(void) -{ - GLfloat halfsqrt2 = 0.70710678f; - - artskydata[0] = -1.0f; artskydata[1] = 0.0f; // 0 - artskydata[2] = -halfsqrt2; artskydata[3] = halfsqrt2; // 1 - artskydata[4] = 0.0f; artskydata[5] = 1.0f; // 2 - artskydata[6] = halfsqrt2; artskydata[7] = halfsqrt2; // 3 - artskydata[8] = 1.0f; artskydata[9] = 0.0f; // 4 - artskydata[10] = halfsqrt2; artskydata[11] = -halfsqrt2; // 5 - artskydata[12] = 0.0f; artskydata[13] = -1.0f; // 6 - artskydata[14] = -halfsqrt2; artskydata[15] = -halfsqrt2; // 7 -} - -static void polymer_drawartsky(int16_t tilenum, char palnum, int8_t shade) -{ - pthtyp* pth; - GLuint glpics[5]; - GLfloat glcolors[5][3]; - int32_t i, j; - GLfloat height = 2.45f / 2.0f; - int16_t picnum; - - i = 0; - while (i < 5) - { - picnum = tilenum + i; - if (picanm[picnum]&192) picnum += animateoffs(picnum,0); - if (!waloff[picnum]) - loadtile(picnum); - pth = gltexcache(picnum, palnum, 0); - glpics[i] = pth ? pth->glpic : 0; - - glcolors[i][0] = glcolors[i][1] = glcolors[i][2] = - ((float)(numpalookups-min(max(shade*shadescale,0),numpalookups)))/((float)numpalookups); - - if (pth && (pth->flags & 2)) - { - if (pth->palnum != palnum) - { - glcolors[i][0] *= (float)hictinting[palnum].r / 255.0; - glcolors[i][1] *= (float)hictinting[palnum].g / 255.0; - glcolors[i][2] *= (float)hictinting[palnum].b / 255.0; - } - - if (hictinting[MAXPALOOKUPS-1].r != 255 || - hictinting[MAXPALOOKUPS-1].g != 255 || - hictinting[MAXPALOOKUPS-1].b != 255) - { - glcolors[i][0] *= (float)hictinting[MAXPALOOKUPS-1].r / 255.0; - glcolors[i][1] *= (float)hictinting[MAXPALOOKUPS-1].g / 255.0; - glcolors[i][2] *= (float)hictinting[MAXPALOOKUPS-1].b / 255.0; - } - } - - i++; - } - - i = 0; - j = (1< 0) && (skyboxdatavbo == 0)) - { - bglGenBuffersARB(1, &skyboxdatavbo); - - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, skyboxdatavbo); - bglBufferDataARB(GL_ARRAY_BUFFER_ARB, 4 * sizeof(GLfloat) * 5 * 6, skyboxdata, modelvbousage); - - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); - } - - if (pr_vbos > 0) - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, skyboxdatavbo); - - if (picanm[tilenum]&192) tilenum += animateoffs(tilenum,0); - - i = 0; - while (i < 6) - { - drawingskybox = i + 1; - pth = gltexcache(tilenum, palnum, 4); - - color[0] = color[1] = color[2] = - ((float)(numpalookups-min(max(shade*shadescale,0),numpalookups)))/((float)numpalookups); - - if (pth && (pth->flags & 2)) - { - if (pth->palnum != palnum) - { - color[0] *= (float)hictinting[palnum].r / 255.0; - color[1] *= (float)hictinting[palnum].g / 255.0; - color[2] *= (float)hictinting[palnum].b / 255.0; - } - - if (hictinting[MAXPALOOKUPS-1].r != 255 || - hictinting[MAXPALOOKUPS-1].g != 255 || - hictinting[MAXPALOOKUPS-1].b != 255) - { - color[0] *= (float)hictinting[MAXPALOOKUPS-1].r / 255.0; - color[1] *= (float)hictinting[MAXPALOOKUPS-1].g / 255.0; - color[2] *= (float)hictinting[MAXPALOOKUPS-1].b / 255.0; - } - } - - bglColor4f(color[0], color[1], color[2], 1.0); - bglBindTexture(GL_TEXTURE_2D, pth ? pth->glpic : 0); - if (pr_vbos > 0) - { - bglVertexPointer(3, GL_FLOAT, 5 * sizeof(GLfloat), (GLfloat*)(4 * 5 * i * sizeof(GLfloat))); - bglTexCoordPointer(2, GL_FLOAT, 5 * sizeof(GLfloat), (GLfloat*)(((4 * 5 * i) + 3) * sizeof(GLfloat))); - } else { - bglVertexPointer(3, GL_FLOAT, 5 * sizeof(GLfloat), &skyboxdata[4 * 5 * i]); - bglTexCoordPointer(2, GL_FLOAT, 5 * sizeof(GLfloat), &skyboxdata[3 + (4 * 5 * i)]); - } - bglDrawArrays(GL_QUADS, 0, 4); - - i++; - } - drawingskybox = 0; - - if (pr_vbos > 0) - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); - - return; -} - -// MDSPRITES -static void polymer_drawmdsprite(spritetype *tspr) -{ - md3model_t* m; - mdskinmap_t* sk; - float *v0, *v1; - md3surf_t *s; - char lpal, targetpal, usinghighpal, foundpalskin; - float spos2[3], spos[3], tspos[3], lpos[3], tlpos[3], vec[3], mat[4][4]; - float ang; - float scale; - double det; - int32_t surfi, i, j; - GLubyte* color; - int32_t materialbits; - float sradius, lradius; - int16_t modellights[PR_MAXLIGHTS]; - char modellightcount; - uint8_t curpriority; - - m = (md3model_t*)models[tile2model[Ptile2tile(tspr->picnum,sprite[tspr->owner].pal)].modelid]; - updateanimation((md2model_t *)m,tspr); - - lpal = (tspr->owner >= MAXSPRITES) ? tspr->pal : sprite[tspr->owner].pal; - - if ((pr_vbos > 1) && (m->indices == NULL)) - polymer_loadmodelvbos(m); - - // Hackish, but that means it's a model drawn by rotatesprite. - if (tspriteptr[MAXSPRITESONSCREEN] == tspr) { - float x, y, z; - - spos[0] = (float)globalposy; - spos[1] = -(float)(globalposz) / 16.0f; - spos[2] = -(float)globalposx; - - // The coordinates are actually floats disguised as int in this case - memcpy(&x, &tspr->x, sizeof(float)); - memcpy(&y, &tspr->y, sizeof(float)); - memcpy(&z, &tspr->z, sizeof(float)); - - spos2[0] = (float)y - globalposy; - spos2[1] = -(float)(z - globalposz) / 16.0f; - spos2[2] = -(float)(x - globalposx); - } else { - spos[0] = (float)tspr->y; - spos[1] = -(float)(tspr->z) / 16.0f; - spos[2] = -(float)tspr->x; - - spos2[0] = spos2[1] = spos2[2] = 0.0f; - } - - ang = (float)((tspr->ang+spriteext[tspr->owner].angoff) & 2047) / (2048.0f / 360.0f); - ang -= 90.0f; - if (((tspr->cstat>>4) & 3) == 2) - ang -= 90.0f; - - bglMatrixMode(GL_MODELVIEW); - bglPushMatrix(); - bglLoadIdentity(); - scale = (1.0/4.0); - scale *= m->scale; - if (pr_overridemodelscale) { - scale *= pr_overridemodelscale; - } else { - scale *= m->bscale; - } - - if (tspriteptr[MAXSPRITESONSCREEN] == tspr) { - float playerang, radplayerang, cosminusradplayerang, sinminusradplayerang, hudzoom; - - playerang = (globalang & 2047) / (2048.0f / 360.0f) - 90.0f; - radplayerang = (globalang & 2047) * 2.0f * PI / 2048.0f; - cosminusradplayerang = cos(-radplayerang); - sinminusradplayerang = sin(-radplayerang); - hudzoom = 65536.0 / spriteext[tspr->owner].zoff; - - bglTranslatef(spos[0], spos[1], spos[2]); - bglRotatef(horizang, -cosminusradplayerang, 0.0f, sinminusradplayerang); - bglRotatef(spriteext[tspr->owner].roll / (2048.0f / 360.0f), sinminusradplayerang, 0.0f, cosminusradplayerang); - bglRotatef(-playerang, 0.0f, 1.0f, 0.0f); - bglScalef(hudzoom, 1.0f, 1.0f); - bglRotatef(playerang, 0.0f, 1.0f, 0.0f); - bglTranslatef(spos2[0], spos2[1], spos2[2]); - bglRotatef(-ang, 0.0f, 1.0f, 0.0f); - } else { - bglTranslatef(spos[0], spos[1], spos[2]); - bglRotatef(-ang, 0.0f, 1.0f, 0.0f); - } - if (((tspr->cstat>>4) & 3) == 2) - { - bglTranslatef(0.0f, 0.0, -(float)(tilesizy[tspr->picnum] * tspr->yrepeat) / 8.0f); - bglRotatef(90.0f, 0.0f, 0.0f, 1.0f); - } - else - bglRotatef(-90.0f, 1.0f, 0.0f, 0.0f); - - if ((tspr->cstat & 128) && (((tspr->cstat>>4) & 3) != 2)) - bglTranslatef(0.0f, 0.0, -(float)(tilesizy[tspr->picnum] * tspr->yrepeat) / 8.0f); - - if (tspr->cstat & 8) - { - bglTranslatef(0.0f, 0.0, (float)(tilesizy[tspr->picnum] * tspr->yrepeat) / 4.0f); - bglScalef(1.0f, 1.0f, -1.0f); - } - - if (tspr->cstat & 4) - bglScalef(1.0f, -1.0f, 1.0f); - - bglScalef(scale * tspr->xrepeat, scale * tspr->xrepeat, scale * tspr->yrepeat); - bglTranslatef(0.0f, 0.0, m->zadd * 64); - - // scripted model rotation - if (tspr->owner < MAXSPRITES && - (spriteext[tspr->owner].pitch || spriteext[tspr->owner].roll)) - { - float pitchang, rollang, offsets[3]; - - pitchang = (float)(spriteext[tspr->owner].pitch) / (2048.0f / 360.0f); - rollang = (float)(spriteext[tspr->owner].roll) / (2048.0f / 360.0f); - - offsets[0] = -spriteext[tspr->owner].xoff / (scale * tspr->xrepeat); - offsets[1] = -spriteext[tspr->owner].yoff / (scale * tspr->xrepeat); - offsets[2] = (float)(spriteext[tspr->owner].zoff) / 16.0f / (scale * tspr->yrepeat); - - bglTranslatef(-offsets[0], -offsets[1], -offsets[2]); - - bglRotatef(pitchang, 0.0f, 1.0f, 0.0f); - bglRotatef(rollang, -1.0f, 0.0f, 0.0f); - - bglTranslatef(offsets[0], offsets[1], offsets[2]); - } - - bglGetFloatv(GL_MODELVIEW_MATRIX, spritemodelview); - - bglPopMatrix(); - bglPushMatrix(); - bglMultMatrixf(spritemodelview); - - // invert this matrix to get the polymer -> mdsprite space - memcpy(mat, spritemodelview, sizeof(float) * 16); - INVERT_4X4(mdspritespace, det, mat); - - // debug code for drawing the model bounding sphere -// bglDisable(GL_TEXTURE_2D); -// bglBegin(GL_LINES); -// bglColor4f(1.0, 0.0, 0.0, 1.0); -// bglVertex3f(m->head.frames[m->cframe].cen.x, -// m->head.frames[m->cframe].cen.y, -// m->head.frames[m->cframe].cen.z); -// bglVertex3f(m->head.frames[m->cframe].cen.x + m->head.frames[m->cframe].r, -// m->head.frames[m->cframe].cen.y, -// m->head.frames[m->cframe].cen.z); -// bglColor4f(0.0, 1.0, 0.0, 1.0); -// bglVertex3f(m->head.frames[m->cframe].cen.x, -// m->head.frames[m->cframe].cen.y, -// m->head.frames[m->cframe].cen.z); -// bglVertex3f(m->head.frames[m->cframe].cen.x, -// m->head.frames[m->cframe].cen.y + m->head.frames[m->cframe].r, -// m->head.frames[m->cframe].cen.z); -// bglColor4f(0.0, 0.0, 1.0, 1.0); -// bglVertex3f(m->head.frames[m->cframe].cen.x, -// m->head.frames[m->cframe].cen.y, -// m->head.frames[m->cframe].cen.z); -// bglVertex3f(m->head.frames[m->cframe].cen.x, -// m->head.frames[m->cframe].cen.y, -// m->head.frames[m->cframe].cen.z + m->head.frames[m->cframe].r); -// bglEnd(); -// bglEnable(GL_TEXTURE_2D); - - polymer_getscratchmaterial(&mdspritematerial); - - color = mdspritematerial.diffusemodulation; - - color[0] = color[1] = color[2] = - ((float)(numpalookups-min(max((tspr->shade * shadescale)+m->shadeoff,0),numpalookups)))/((float)numpalookups) * 0xFF; - - usinghighpal = (pr_highpalookups && - prhighpalookups[curbasepal][tspr->pal].map); - - // If that palette has a highpalookup, we'll never use tinting. We might use - // alternate skins if they exist later, though. - if (!usinghighpal && !(hictinting[tspr->pal].f&4)) - { - if (!(m->flags&1) || (!(tspr->owner >= MAXSPRITES) && sector[sprite[tspr->owner].sectnum].floorpal!=0)) - { - color[0] *= (float)hictinting[tspr->pal].r / 255.0; - color[1] *= (float)hictinting[tspr->pal].g / 255.0; - color[2] *= (float)hictinting[tspr->pal].b / 255.0; - } - else globalnoeffect=1; //mdloadskin reads this - } - - // fullscreen tint on global palette change - if (!usinghighpal && - (hictinting[MAXPALOOKUPS-1].r != 255 || - hictinting[MAXPALOOKUPS-1].g != 255 || - hictinting[MAXPALOOKUPS-1].b != 255)) - { - color[0] *= hictinting[MAXPALOOKUPS-1].r / 255.0; - color[1] *= hictinting[MAXPALOOKUPS-1].g / 255.0; - color[2] *= hictinting[MAXPALOOKUPS-1].b / 255.0; - } - - if (tspr->cstat & 2) - { - if (!(tspr->cstat&512)) - color[3] = 0xAA; - else - color[3] = 0x55; - } else - color[3] = 0xFF; - - color[3] *= (1.0f - spriteext[tspr->owner].alpha); - - if (searchit == 2) - { - color[0] = 0x03; - color[1] = ((GLubyte *)(&tspr->owner))[0]; - color[2] = ((GLubyte *)(&tspr->owner))[1]; - color[3] = 0xFF; - } - - if (pr_gpusmoothing) - mdspritematerial.frameprogress = m->interpol; - - mdspritematerial.mdspritespace = GL_TRUE; - - modellightcount = 0; - curpriority = 0; - - // light culling - if (lightcount && (!depth || mirrors[depth-1].plane)) - { - sradius = (m->head.frames[m->cframe].r * (1 - m->interpol)) + - (m->head.frames[m->nframe].r * m->interpol); - - sradius *= max(scale * tspr->xrepeat, scale * tspr->yrepeat); - sradius /= 1000.0f; - - spos[0] = (m->head.frames[m->cframe].cen.x * (1 - m->interpol)) + - (m->head.frames[m->nframe].cen.x * m->interpol); - spos[1] = (m->head.frames[m->cframe].cen.y * (1 - m->interpol)) + - (m->head.frames[m->nframe].cen.y * m->interpol); - spos[2] = (m->head.frames[m->cframe].cen.z * (1 - m->interpol)) + - (m->head.frames[m->nframe].cen.z * m->interpol); - - polymer_transformpoint(spos, tspos, spritemodelview); - polymer_transformpoint(tspos, spos, rootmodelviewmatrix); - - while (curpriority < pr_maxlightpriority) - { - i = j = 0; - while (j < lightcount) - { - while (!prlights[i].flags.active) - i++; - - if (prlights[i].priority != curpriority) - { - i++; - j++; - continue; - } - - lradius = prlights[i].range / 1000.0f; - - lpos[0] = (float)prlights[i].y; - lpos[1] = -(float)prlights[i].z / 16.0f; - lpos[2] = -(float)prlights[i].x; - - polymer_transformpoint(lpos, tlpos, rootmodelviewmatrix); - - vec[0] = tlpos[0] - spos[0]; - vec[0] *= vec[0]; - vec[1] = tlpos[1] - spos[1]; - vec[1] *= vec[1]; - vec[2] = tlpos[2] - spos[2]; - vec[2] *= vec[2]; - - if ((vec[0] + vec[1] + vec[2]) <= ((sradius+lradius) * (sradius+lradius))) - modellights[modellightcount++] = i; - - i++; - j++; - } - curpriority++; - } - } - - for (surfi=0;surfihead.numsurfs;surfi++) - { - s = &m->head.surfs[surfi]; - v0 = &s->geometry[m->cframe*s->numverts*15]; - v1 = &s->geometry[m->nframe*s->numverts*15]; - - // debug code for drawing model normals -// bglDisable(GL_TEXTURE_2D); -// bglBegin(GL_LINES); -// bglColor4f(1.0, 1.0, 1.0, 1.0); -// -// int i = 0; -// while (i < s->numverts) -// { -// bglVertex3f(v0[(i * 6) + 0], -// v0[(i * 6) + 1], -// v0[(i * 6) + 2]); -// bglVertex3f(v0[(i * 6) + 0] + v0[(i * 6) + 3] * 100, -// v0[(i * 6) + 1] + v0[(i * 6) + 4] * 100, -// v0[(i * 6) + 2] + v0[(i * 6) + 5] * 100); -// i++; -// } -// bglEnd(); -// bglEnable(GL_TEXTURE_2D); - - - targetpal = tspr->pal; - foundpalskin = 0; - - for (sk = m->skinmap; sk; sk = sk->next) - if ((int32_t)sk->palette == tspr->pal && - sk->skinnum == tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum && - sk->surfnum == surfi) - { - if (sk->specpower != 1.0) - mdspritematerial.specmaterial[0] = sk->specpower; - mdspritematerial.specmaterial[1] = sk->specfactor; - foundpalskin = 1; - } - - // If we have a global palette tint, the palskin won't do us any good - if (curbasepal) - foundpalskin = 0; - - if (!foundpalskin && usinghighpal) { - // We don't have a specific skin defined for this palette - // Use the base skin instead and plug in our highpalookup map - targetpal = 0; - mdspritematerial.highpalookupmap = prhighpalookups[curbasepal][tspr->pal].map; - } - - mdspritematerial.diffusemap = - mdloadskin((md2model_t *)m,tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum,targetpal,surfi); - if (!mdspritematerial.diffusemap) - continue; - - if (!(tspr->cstat&1024)) - { - mdspritematerial.detailmap = - mdloadskin((md2model_t *)m,tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum,DETAILPAL,surfi); - - for (sk = m->skinmap; sk; sk = sk->next) - if ((int32_t)sk->palette == DETAILPAL && - sk->skinnum == tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum && - sk->surfnum == surfi) - mdspritematerial.detailscale[0] = mdspritematerial.detailscale[1] = sk->param; - } - - if (!(tspr->cstat&1024)) - { - mdspritematerial.specmap = - mdloadskin((md2model_t *)m,tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum,SPECULARPAL,surfi); - } - - if (!(tspr->cstat&1024)) - { - mdspritematerial.normalmap = - mdloadskin((md2model_t *)m,tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum,NORMALPAL,surfi); - - for (sk = m->skinmap; sk; sk = sk->next) - if ((int32_t)sk->palette == NORMALPAL && - sk->skinnum == tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum && - sk->surfnum == surfi) { - mdspritematerial.normalbias[0] = sk->specpower; - mdspritematerial.normalbias[1] = sk->specfactor; - } - } - - if (!(tspr->cstat&1024)) - { - mdspritematerial.glowmap = - mdloadskin((md2model_t *)m,tile2model[Ptile2tile(tspr->picnum,lpal)].skinnum,GLOWPAL,surfi); - } - - bglEnableClientState(GL_NORMAL_ARRAY); - - if (pr_vbos > 1) - { - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, m->texcoords[surfi]); - bglTexCoordPointer(2, GL_FLOAT, 0, 0); - - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, m->geometry[surfi]); - bglVertexPointer(3, GL_FLOAT, sizeof(float) * 15, (GLfloat*)(m->cframe * s->numverts * sizeof(float) * 15)); - bglNormalPointer(GL_FLOAT, sizeof(float) * 15, (GLfloat*)(m->cframe * s->numverts * sizeof(float) * 15) + 3); - - mdspritematerial.tbn = (GLfloat*)(m->cframe * s->numverts * sizeof(float) * 15) + 6; - - if (pr_gpusmoothing) { - mdspritematerial.nextframedata = (GLfloat*)(m->nframe * s->numverts * sizeof(float) * 15); - } - - bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m->indices[surfi]); - - curlight = 0; - do { - materialbits = polymer_bindmaterial(mdspritematerial, modellights, modellightcount); - bglDrawElements(GL_TRIANGLES, s->numtris * 3, GL_UNSIGNED_INT, 0); - polymer_unbindmaterial(materialbits); - } while ((++curlight < modellightcount) && (curlight < pr_maxlightpasses)); - - bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); - } - else - { - bglVertexPointer(3, GL_FLOAT, sizeof(float) * 15, v0); - bglNormalPointer(GL_FLOAT, sizeof(float) * 15, v0 + 3); - bglTexCoordPointer(2, GL_FLOAT, 0, s->uv); - - mdspritematerial.tbn = v0 + 6; - - if (pr_gpusmoothing) { - mdspritematerial.nextframedata = (GLfloat*)(v1); - } - - curlight = 0; - do { - materialbits = polymer_bindmaterial(mdspritematerial, modellights, modellightcount); - bglDrawElements(GL_TRIANGLES, s->numtris * 3, GL_UNSIGNED_INT, s->tris); - polymer_unbindmaterial(materialbits); - } while ((++curlight < modellightcount) && (curlight < pr_maxlightpasses)); - } - - bglDisableClientState(GL_NORMAL_ARRAY); - } - - bglPopMatrix(); - - globalnoeffect = 0; -} - -static void polymer_loadmodelvbos(md3model_t* m) -{ - int32_t i; - md3surf_t *s; - - m->indices = Bmalloc(m->head.numsurfs * sizeof(GLuint)); - m->texcoords = Bmalloc(m->head.numsurfs * sizeof(GLuint)); - m->geometry = Bmalloc(m->head.numsurfs * sizeof(GLuint)); - - bglGenBuffersARB(m->head.numsurfs, m->indices); - bglGenBuffersARB(m->head.numsurfs, m->texcoords); - bglGenBuffersARB(m->head.numsurfs, m->geometry); - - i = 0; - while (i < m->head.numsurfs) - { - s = &m->head.surfs[i]; - - bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m->indices[i]); - bglBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, s->numtris * sizeof(md3tri_t), s->tris, modelvbousage); - - bglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); - - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, m->texcoords[i]); - bglBufferDataARB(GL_ARRAY_BUFFER_ARB, s->numverts * sizeof(md3uv_t), s->uv, modelvbousage); - - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, m->geometry[i]); - bglBufferDataARB(GL_ARRAY_BUFFER_ARB, s->numframes * s->numverts * sizeof(float) * (15), s->geometry, modelvbousage); - - bglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); - i++; - } -} - -// MATERIALS -static void polymer_getscratchmaterial(_prmaterial* material) -{ - // this function returns a material that won't validate any bits - // make sure to keep it up to date with the validation logic in bindmaterial - - // PR_BIT_ANIM_INTERPOLATION - material->frameprogress = 0.0f; - material->nextframedata = NULL; - // PR_BIT_NORMAL_MAP - material->normalmap = 0; - material->normalbias[0] = material->normalbias[1] = 0.0f; - material->tbn = NULL; - // PR_BIT_DIFFUSE_MAP - material->diffusemap = 0; - material->diffusescale[0] = material->diffusescale[1] = 1.0f; - // PR_BIT_HIGHPALOOKUP_MAP - material->highpalookupmap = 0; - // PR_BIT_DIFFUSE_DETAIL_MAP - material->detailmap = 0; - material->detailscale[0] = material->detailscale[1] = 1.0f; - // PR_BIT_DIFFUSE_MODULATION - material->diffusemodulation[0] = - material->diffusemodulation[1] = - material->diffusemodulation[2] = - material->diffusemodulation[3] = 0xFF; - // PR_BIT_SPECULAR_MAP - material->specmap = 0; - // PR_BIT_SPECULAR_MATERIAL - material->specmaterial[0] = 15.0f; - material->specmaterial[1] = 1.0f; - // PR_BIT_MIRROR_MAP - material->mirrormap = 0; - // PR_BIT_GLOW_MAP - material->glowmap = 0; - // PR_BIT_PROJECTION_MAP - material->mdspritespace = GL_FALSE; -} - -static void polymer_getbuildmaterial(_prmaterial* material, int16_t tilenum, char pal, int8_t shade, int32_t cmeth) -{ - pthtyp* pth; - int32_t usinghighpal = 0; - - polymer_getscratchmaterial(material); - - // PR_BIT_DIFFUSE_MAP - if (!waloff[tilenum]) - loadtile(tilenum); - - // PR_BIT_HIGHPALOOKUP_MAP - if (pr_highpalookups && prhighpalookups[curbasepal][pal].map && - hicfindsubst(tilenum, 0, 0) && - (curbasepal || (hicfindsubst(tilenum, pal, 0)->palnum != pal))) - { - material->highpalookupmap = prhighpalookups[curbasepal][pal].map; - pal = 0; - usinghighpal = 1; - } - - if ((pth = gltexcache(tilenum, pal, cmeth))) - { - material->diffusemap = pth->glpic; - - if (pth->hicr) - { - material->diffusescale[0] = pth->hicr->xscale; - material->diffusescale[1] = pth->hicr->yscale; - - // PR_BIT_SPECULAR_MATERIAL - if (pth->hicr->specpower != 1.0f) - material->specmaterial[0] = pth->hicr->specpower; - material->specmaterial[1] = pth->hicr->specfactor; - } - - // PR_BIT_DIFFUSE_MODULATION - material->diffusemodulation[0] = - material->diffusemodulation[1] = - material->diffusemodulation[2] = - ((float)(numpalookups-min(max((shade * shadescale),0),numpalookups)))/((float)numpalookups) * 0xFF; - - if (pth->flags & 2) - { - if (pth->palnum != pal) - { - material->diffusemodulation[0] *= (float)hictinting[pal].r / 255.0; - material->diffusemodulation[1] *= (float)hictinting[pal].g / 255.0; - material->diffusemodulation[2] *= (float)hictinting[pal].b / 255.0; - } - - // fullscreen tint on global palette change... this is used for nightvision and underwater tinting - // if ((hictinting[MAXPALOOKUPS-1].r + hictinting[MAXPALOOKUPS-1].g + hictinting[MAXPALOOKUPS-1].b) != 0x2FD) - if (!usinghighpal && ((uint32_t)hictinting[MAXPALOOKUPS-1].r & 0xFFFFFF00) != 0xFFFFFF00) - { - material->diffusemodulation[0] *= hictinting[MAXPALOOKUPS-1].r / 255.0; - material->diffusemodulation[1] *= hictinting[MAXPALOOKUPS-1].g / 255.0; - material->diffusemodulation[2] *= hictinting[MAXPALOOKUPS-1].b / 255.0; - } - } - - // PR_BIT_GLOW_MAP - if (r_fullbrights && pth->flags & 16) - material->glowmap = pth->ofb->glpic; - } - - // PR_BIT_DIFFUSE_DETAIL_MAP - if (hicfindsubst(tilenum, DETAILPAL, 0) && (pth = gltexcache(tilenum, DETAILPAL, 0)) && - pth->hicr && (pth->hicr->palnum == DETAILPAL)) - { - material->detailmap = pth->glpic; - material->detailscale[0] = pth->hicr->xscale; - material->detailscale[1] = pth->hicr->yscale; - } - - // PR_BIT_GLOW_MAP - if (hicfindsubst(tilenum, GLOWPAL, 0) && (pth = gltexcache(tilenum, GLOWPAL, 0)) && - pth->hicr && (pth->hicr->palnum == GLOWPAL)) - material->glowmap = pth->glpic; - - // PR_BIT_SPECULAR_MAP - if (hicfindsubst(tilenum, SPECULARPAL, 0) && (pth = gltexcache(tilenum, SPECULARPAL, 0)) && - pth->hicr && (pth->hicr->palnum == SPECULARPAL)) - material->specmap = pth->glpic; - - // PR_BIT_NORMAL_MAP - if (hicfindsubst(tilenum, NORMALPAL, 0) && (pth = gltexcache(tilenum, NORMALPAL, 0)) && - pth->hicr && (pth->hicr->palnum == NORMALPAL)) - { - material->normalmap = pth->glpic; - material->normalbias[0] = pth->hicr->specpower; - material->normalbias[1] = pth->hicr->specfactor; - } -} - -static int32_t polymer_bindmaterial(_prmaterial material, int16_t* lights, int matlightcount) -{ - int32_t programbits; - int32_t texunit; - - programbits = 0; - - // --------- bit validation - - // PR_BIT_ANIM_INTERPOLATION - if (material.nextframedata) - programbits |= prprogrambits[PR_BIT_ANIM_INTERPOLATION].bit; - - // PR_BIT_LIGHTING_PASS - if (curlight && matlightcount) - programbits |= prprogrambits[PR_BIT_LIGHTING_PASS].bit; - - // PR_BIT_NORMAL_MAP - if (pr_normalmapping && material.normalmap) - programbits |= prprogrambits[PR_BIT_NORMAL_MAP].bit; - - // PR_BIT_DIFFUSE_MAP - if (material.diffusemap) { - programbits |= prprogrambits[PR_BIT_DIFFUSE_MAP].bit; - programbits |= prprogrambits[PR_BIT_DIFFUSE_MAP2].bit; - } - - // PR_BIT_HIGHPALOOKUP_MAP - if (material.highpalookupmap) - programbits |= prprogrambits[PR_BIT_HIGHPALOOKUP_MAP].bit; - - // PR_BIT_DIFFUSE_DETAIL_MAP - if (r_detailmapping && material.detailmap) - programbits |= prprogrambits[PR_BIT_DIFFUSE_DETAIL_MAP].bit; - - // PR_BIT_DIFFUSE_MODULATION - programbits |= prprogrambits[PR_BIT_DIFFUSE_MODULATION].bit; - - // PR_BIT_SPECULAR_MAP - if (pr_specularmapping && material.specmap) - programbits |= prprogrambits[PR_BIT_SPECULAR_MAP].bit; - - // PR_BIT_SPECULAR_MATERIAL - if ((material.specmaterial[0] != 15.0) || (material.specmaterial[1] != 1.0) || pr_overridespecular) - programbits |= prprogrambits[PR_BIT_SPECULAR_MATERIAL].bit; - - // PR_BIT_MIRROR_MAP - if (!curlight && material.mirrormap) - programbits |= prprogrambits[PR_BIT_MIRROR_MAP].bit; - - // PR_BIT_FOG - if (!material.mirrormap) - programbits |= prprogrambits[PR_BIT_FOG].bit; - - // PR_BIT_GLOW_MAP - if (!curlight && r_glowmapping && material.glowmap) - programbits |= prprogrambits[PR_BIT_GLOW_MAP].bit; - - // PR_BIT_POINT_LIGHT - if (matlightcount) { - programbits |= prprogrambits[PR_BIT_POINT_LIGHT].bit; - // PR_BIT_SPOT_LIGHT - if (prlights[lights[curlight]].radius) { - programbits |= prprogrambits[PR_BIT_SPOT_LIGHT].bit; - // PR_BIT_SHADOW_MAP - if (prlights[lights[curlight]].rtindex != -1) { - programbits |= prprogrambits[PR_BIT_SHADOW_MAP].bit; - programbits |= prprogrambits[PR_BIT_PROJECTION_MAP].bit; - } - // PR_BIT_LIGHT_MAP - if (prlights[lights[curlight]].lightmap) { - programbits |= prprogrambits[PR_BIT_LIGHT_MAP].bit; - programbits |= prprogrambits[PR_BIT_PROJECTION_MAP].bit; - } - } - } - - // material override - programbits &= overridematerial; - - programbits |= prprogrambits[PR_BIT_HEADER].bit; - programbits |= prprogrambits[PR_BIT_FOOTER].bit; - - // --------- program compiling - if (!prprograms[programbits].handle) - polymer_compileprogram(programbits); - - bglUseProgramObjectARB(prprograms[programbits].handle); - - // --------- bit setup - - texunit = 0; - - // PR_BIT_ANIM_INTERPOLATION - if (programbits & prprogrambits[PR_BIT_ANIM_INTERPOLATION].bit) - { - bglEnableVertexAttribArrayARB(prprograms[programbits].attrib_nextFrameData); - if (prprograms[programbits].attrib_nextFrameNormal != -1) - bglEnableVertexAttribArrayARB(prprograms[programbits].attrib_nextFrameNormal); - bglVertexAttribPointerARB(prprograms[programbits].attrib_nextFrameData, - 3, GL_FLOAT, GL_FALSE, - sizeof(float) * 15, - material.nextframedata); - if (prprograms[programbits].attrib_nextFrameNormal != -1) - bglVertexAttribPointerARB(prprograms[programbits].attrib_nextFrameNormal, - 3, GL_FLOAT, GL_FALSE, - sizeof(float) * 15, - material.nextframedata + 3); - - bglUniform1fARB(prprograms[programbits].uniform_frameProgress, material.frameprogress); - } - - // PR_BIT_LIGHTING_PASS - if (programbits & prprogrambits[PR_BIT_LIGHTING_PASS].bit) - { - // Careful with that, it works only if we respect the wrapping order - // or make sure GL_BLEND is the only ENABLE we mess with here. - bglPushAttrib(GL_ENABLE_BIT); - bglEnable(GL_BLEND); - bglBlendFunc(GL_ONE, GL_ONE); - } - - // PR_BIT_NORMAL_MAP - if (programbits & prprogrambits[PR_BIT_NORMAL_MAP].bit) - { - float pos[3], bias[2]; - - pos[0] = (float)globalposy; - pos[1] = -(float)(globalposz) / 16.0f; - pos[2] = -(float)globalposx; - - bglActiveTextureARB(texunit + GL_TEXTURE0_ARB); - bglBindTexture(GL_TEXTURE_2D, material.normalmap); - - if (material.mdspritespace == GL_TRUE) { - float mdspritespacepos[3]; - polymer_transformpoint(pos, mdspritespacepos, (float *)mdspritespace); - bglUniform3fvARB(prprograms[programbits].uniform_eyePosition, 1, mdspritespacepos); - } else - bglUniform3fvARB(prprograms[programbits].uniform_eyePosition, 1, pos); - bglUniform1iARB(prprograms[programbits].uniform_normalMap, texunit); - if (pr_overrideparallax) { - bias[0] = pr_parallaxscale; - bias[1] = pr_parallaxbias; - bglUniform2fvARB(prprograms[programbits].uniform_normalBias, 1, bias); - } else - bglUniform2fvARB(prprograms[programbits].uniform_normalBias, 1, material.normalbias); - - if (material.tbn) { - bglEnableVertexAttribArrayARB(prprograms[programbits].attrib_T); - bglEnableVertexAttribArrayARB(prprograms[programbits].attrib_B); - bglEnableVertexAttribArrayARB(prprograms[programbits].attrib_N); - - bglVertexAttribPointerARB(prprograms[programbits].attrib_T, - 3, GL_FLOAT, GL_FALSE, - sizeof(float) * 15, - material.tbn); - bglVertexAttribPointerARB(prprograms[programbits].attrib_B, - 3, GL_FLOAT, GL_FALSE, - sizeof(float) * 15, - material.tbn + 3); - bglVertexAttribPointerARB(prprograms[programbits].attrib_N, - 3, GL_FLOAT, GL_FALSE, - sizeof(float) * 15, - material.tbn + 6); - } - - texunit++; - } - - // PR_BIT_DIFFUSE_MAP - if (programbits & prprogrambits[PR_BIT_DIFFUSE_MAP].bit) - { - bglActiveTextureARB(texunit + GL_TEXTURE0_ARB); - bglBindTexture(GL_TEXTURE_2D, material.diffusemap); - - bglUniform1iARB(prprograms[programbits].uniform_diffuseMap, texunit); - bglUniform2fvARB(prprograms[programbits].uniform_diffuseScale, 1, material.diffusescale); - - texunit++; - } - - // PR_BIT_HIGHPALOOKUP_MAP - if (programbits & prprogrambits[PR_BIT_HIGHPALOOKUP_MAP].bit) - { - bglActiveTextureARB(texunit + GL_TEXTURE0_ARB); - bglBindTexture(GL_TEXTURE_3D, material.highpalookupmap); - - bglUniform1iARB(prprograms[programbits].uniform_highPalookupMap, texunit); - - texunit++; - } - - // PR_BIT_DIFFUSE_DETAIL_MAP - if (programbits & prprogrambits[PR_BIT_DIFFUSE_DETAIL_MAP].bit) - { - float scale[2]; - - // scale by the diffuse map scale if we're not doing normal mapping - if (!(programbits & prprogrambits[PR_BIT_NORMAL_MAP].bit)) - { - scale[0] = material.diffusescale[0] * material.detailscale[0]; - scale[1] = material.diffusescale[1] * material.detailscale[1]; - } else { - scale[0] = material.detailscale[0]; - scale[1] = material.detailscale[1]; - } - - bglActiveTextureARB(texunit + GL_TEXTURE0_ARB); - bglBindTexture(GL_TEXTURE_2D, material.detailmap); - - bglUniform1iARB(prprograms[programbits].uniform_detailMap, texunit); - bglUniform2fvARB(prprograms[programbits].uniform_detailScale, 1, scale); - - texunit++; - } - - // PR_BIT_DIFFUSE_MODULATION - if (programbits & prprogrambits[PR_BIT_DIFFUSE_MODULATION].bit) - { - bglColor4ub(material.diffusemodulation[0], - material.diffusemodulation[1], - material.diffusemodulation[2], - material.diffusemodulation[3]); - } - - // PR_BIT_SPECULAR_MAP - if (programbits & prprogrambits[PR_BIT_SPECULAR_MAP].bit) - { - bglActiveTextureARB(texunit + GL_TEXTURE0_ARB); - bglBindTexture(GL_TEXTURE_2D, material.specmap); - - bglUniform1iARB(prprograms[programbits].uniform_specMap, texunit); - - texunit++; - } - - // PR_BIT_SPECULAR_MATERIAL - if (programbits & prprogrambits[PR_BIT_SPECULAR_MATERIAL].bit) - { - float specmaterial[2]; - - if (pr_overridespecular) { - specmaterial[0] = pr_specularpower; - specmaterial[1] = pr_specularfactor; - bglUniform2fvARB(prprograms[programbits].uniform_specMaterial, 1, specmaterial); - } else - bglUniform2fvARB(prprograms[programbits].uniform_specMaterial, 1, material.specmaterial); - } - - // PR_BIT_MIRROR_MAP - if (programbits & prprogrambits[PR_BIT_MIRROR_MAP].bit) - { - bglActiveTextureARB(texunit + GL_TEXTURE0_ARB); - bglBindTexture(GL_TEXTURE_RECTANGLE, material.mirrormap); - - bglUniform1iARB(prprograms[programbits].uniform_mirrorMap, texunit); - - texunit++; - } - - // PR_BIT_GLOW_MAP - if (programbits & prprogrambits[PR_BIT_GLOW_MAP].bit) - { - bglActiveTextureARB(texunit + GL_TEXTURE0_ARB); - bglBindTexture(GL_TEXTURE_2D, material.glowmap); - - bglUniform1iARB(prprograms[programbits].uniform_glowMap, texunit); - - texunit++; - } - - // PR_BIT_POINT_LIGHT - if (programbits & prprogrambits[PR_BIT_POINT_LIGHT].bit) - { - float inpos[4], pos[4]; - float range[2]; - float color[4]; - - inpos[0] = (float)prlights[lights[curlight]].y; - inpos[1] = -(float)prlights[lights[curlight]].z / 16.0f; - inpos[2] = -(float)prlights[lights[curlight]].x; - - polymer_transformpoint(inpos, pos, curmodelviewmatrix); - - // PR_BIT_SPOT_LIGHT - if (programbits & prprogrambits[PR_BIT_SPOT_LIGHT].bit) - { - float sinang, cosang, sinhorizang, coshorizangs; - float indir[3], dir[3]; - - cosang = (float)(sintable[(-prlights[lights[curlight]].angle+1024)&2047]) / 16383.0f; - sinang = (float)(sintable[(-prlights[lights[curlight]].angle+512)&2047]) / 16383.0f; - coshorizangs = (float)(sintable[(getangle(128, prlights[lights[curlight]].horiz-100)+1024)&2047]) / 16383.0f; - sinhorizang = (float)(sintable[(getangle(128, prlights[lights[curlight]].horiz-100)+512)&2047]) / 16383.0f; - - indir[0] = inpos[0] + sinhorizang * cosang; - indir[1] = inpos[1] - coshorizangs; - indir[2] = inpos[2] - sinhorizang * sinang; - - polymer_transformpoint(indir, dir, curmodelviewmatrix); - - dir[0] -= pos[0]; - dir[1] -= pos[1]; - dir[2] -= pos[2]; - - indir[0] = (float)(sintable[(prlights[lights[curlight]].radius+512)&2047]) / 16383.0f; - indir[1] = (float)(sintable[(prlights[lights[curlight]].faderadius+512)&2047]) / 16383.0f; - indir[1] = 1.0 / (indir[1] - indir[0]); - - bglUniform3fvARB(prprograms[programbits].uniform_spotDir, 1, dir); - bglUniform2fvARB(prprograms[programbits].uniform_spotRadius, 1, indir); - - // PR_BIT_PROJECTION_MAP - if (programbits & prprogrambits[PR_BIT_PROJECTION_MAP].bit) - { - GLfloat matrix[16]; - - bglMatrixMode(GL_TEXTURE); - bglLoadMatrixf(shadowBias); - bglMultMatrixf(prlights[lights[curlight]].proj); - bglMultMatrixf(prlights[lights[curlight]].transform); - if (material.mdspritespace == GL_TRUE) - bglMultMatrixf(spritemodelview); - bglGetFloatv(GL_TEXTURE_MATRIX, matrix); - bglLoadIdentity(); - bglMatrixMode(GL_MODELVIEW); - - bglUniformMatrix4fvARB(prprograms[programbits].uniform_shadowProjMatrix, 1, GL_FALSE, matrix); - - // PR_BIT_SHADOW_MAP - if (programbits & prprogrambits[PR_BIT_SHADOW_MAP].bit) - { - bglActiveTextureARB(texunit + GL_TEXTURE0_ARB); - bglBindTexture(prrts[prlights[lights[curlight]].rtindex].target, prrts[prlights[lights[curlight]].rtindex].z); - - bglUniform1iARB(prprograms[programbits].uniform_shadowMap, texunit); - - texunit++; - } - - // PR_BIT_LIGHT_MAP - if (programbits & prprogrambits[PR_BIT_LIGHT_MAP].bit) - { - bglActiveTextureARB(texunit + GL_TEXTURE0_ARB); - bglBindTexture(GL_TEXTURE_2D, prlights[lights[curlight]].lightmap); - - bglUniform1iARB(prprograms[programbits].uniform_lightMap, texunit); - - texunit++; - } - } - } - - range[0] = prlights[lights[curlight]].range / 1000.0f; - range[1] = 1 / (range[0] * range[0]); - - color[0] = prlights[lights[curlight]].color[0] / 255.0f; - color[1] = prlights[lights[curlight]].color[1] / 255.0f; - color[2] = prlights[lights[curlight]].color[2] / 255.0f; - - bglLightfv(GL_LIGHT0, GL_AMBIENT, pos); - bglLightfv(GL_LIGHT0, GL_DIFFUSE, color); - if (material.mdspritespace == GL_TRUE) { - float mdspritespacepos[3]; - polymer_transformpoint(inpos, mdspritespacepos, (float *)mdspritespace); - bglLightfv(GL_LIGHT0, GL_SPECULAR, mdspritespacepos); - } else { - bglLightfv(GL_LIGHT0, GL_SPECULAR, inpos); - } - bglLightfv(GL_LIGHT0, GL_LINEAR_ATTENUATION, &range[1]); - } - - bglActiveTextureARB(GL_TEXTURE0_ARB); - - return (programbits); -} - -static void polymer_unbindmaterial(int32_t programbits) -{ - // repair any dirty GL state here - - // PR_BIT_ANIM_INTERPOLATION - if (programbits & prprogrambits[PR_BIT_ANIM_INTERPOLATION].bit) - { - if (prprograms[programbits].attrib_nextFrameNormal != -1) - bglDisableVertexAttribArrayARB(prprograms[programbits].attrib_nextFrameNormal); - bglDisableVertexAttribArrayARB(prprograms[programbits].attrib_nextFrameData); - } - - // PR_BIT_LIGHTING_PASS - if (programbits & prprogrambits[PR_BIT_LIGHTING_PASS].bit) - { - bglPopAttrib(); - bglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - } - - // PR_BIT_NORMAL_MAP - if (programbits & prprogrambits[PR_BIT_NORMAL_MAP].bit) - { - bglDisableVertexAttribArrayARB(prprograms[programbits].attrib_T); - bglDisableVertexAttribArrayARB(prprograms[programbits].attrib_B); - bglDisableVertexAttribArrayARB(prprograms[programbits].attrib_N); - } - - bglUseProgramObjectARB(0); -} - -static void polymer_compileprogram(int32_t programbits) -{ - int32_t i, enabledbits; - GLhandleARB vert, frag, program; - GLcharARB* source[PR_BIT_COUNT * 2]; - GLcharARB infobuffer[PR_INFO_LOG_BUFFER_SIZE]; - GLint linkstatus; - - // --------- VERTEX - vert = bglCreateShaderObjectARB(GL_VERTEX_SHADER_ARB); - - enabledbits = i = 0; - while (i < PR_BIT_COUNT) - { - if (programbits & prprogrambits[i].bit) - source[enabledbits++] = prprogrambits[i].vert_def; - i++; - } - i = 0; - while (i < PR_BIT_COUNT) - { - if (programbits & prprogrambits[i].bit) - source[enabledbits++] = prprogrambits[i].vert_prog; - i++; - } - - bglShaderSourceARB(vert, enabledbits, (const GLcharARB**)source, NULL); - - bglCompileShaderARB(vert); - - // --------- FRAGMENT - frag = bglCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB); - - enabledbits = i = 0; - while (i < PR_BIT_COUNT) - { - if (programbits & prprogrambits[i].bit) - source[enabledbits++] = prprogrambits[i].frag_def; - i++; - } - i = 0; - while (i < PR_BIT_COUNT) - { - if (programbits & prprogrambits[i].bit) - source[enabledbits++] = prprogrambits[i].frag_prog; - i++; - } - - bglShaderSourceARB(frag, enabledbits, (const GLcharARB**)source, NULL); - - bglCompileShaderARB(frag); - - // --------- PROGRAM - program = bglCreateProgramObjectARB(); - - bglAttachObjectARB(program, vert); - bglAttachObjectARB(program, frag); - - bglLinkProgramARB(program); - - bglGetObjectParameterivARB(program, GL_OBJECT_LINK_STATUS_ARB, &linkstatus); - - bglGetInfoLogARB(program, PR_INFO_LOG_BUFFER_SIZE, NULL, infobuffer); - - prprograms[programbits].handle = program; - - if (pr_verbosity >= 2) OSD_Printf("PR : Compiling GPU program with bits %i...\n", programbits); - if (!linkstatus) { - OSD_Printf("PR : Failed to compile GPU program with bits %i!\n", programbits); - if (pr_verbosity >= 1) OSD_Printf("PR : Compilation log:\n%s\n", infobuffer); - bglGetShaderSourceARB(vert, PR_INFO_LOG_BUFFER_SIZE, NULL, infobuffer); - if (pr_verbosity >= 1) OSD_Printf("PR : Vertex source dump:\n%s\n", infobuffer); - bglGetShaderSourceARB(frag, PR_INFO_LOG_BUFFER_SIZE, NULL, infobuffer); - if (pr_verbosity >= 1) OSD_Printf("PR : Fragment source dump:\n%s\n", infobuffer); - } - - // --------- ATTRIBUTE/UNIFORM LOCATIONS - - // PR_BIT_ANIM_INTERPOLATION - if (programbits & prprogrambits[PR_BIT_ANIM_INTERPOLATION].bit) - { - prprograms[programbits].attrib_nextFrameData = bglGetAttribLocationARB(program, "nextFrameData"); - prprograms[programbits].attrib_nextFrameNormal = bglGetAttribLocationARB(program, "nextFrameNormal"); - prprograms[programbits].uniform_frameProgress = bglGetUniformLocationARB(program, "frameProgress"); - } - - // PR_BIT_NORMAL_MAP - if (programbits & prprogrambits[PR_BIT_NORMAL_MAP].bit) - { - prprograms[programbits].attrib_T = bglGetAttribLocationARB(program, "T"); - prprograms[programbits].attrib_B = bglGetAttribLocationARB(program, "B"); - prprograms[programbits].attrib_N = bglGetAttribLocationARB(program, "N"); - prprograms[programbits].uniform_eyePosition = bglGetUniformLocationARB(program, "eyePosition"); - prprograms[programbits].uniform_normalMap = bglGetUniformLocationARB(program, "normalMap"); - prprograms[programbits].uniform_normalBias = bglGetUniformLocationARB(program, "normalBias"); - } - - // PR_BIT_DIFFUSE_MAP - if (programbits & prprogrambits[PR_BIT_DIFFUSE_MAP].bit) - { - prprograms[programbits].uniform_diffuseMap = bglGetUniformLocationARB(program, "diffuseMap"); - prprograms[programbits].uniform_diffuseScale = bglGetUniformLocationARB(program, "diffuseScale"); - } - - // PR_BIT_HIGHPALOOKUP_MAP - if (programbits & prprogrambits[PR_BIT_HIGHPALOOKUP_MAP].bit) - { - prprograms[programbits].uniform_highPalookupMap = bglGetUniformLocationARB(program, "highPalookupMap"); - } - - // PR_BIT_DIFFUSE_DETAIL_MAP - if (programbits & prprogrambits[PR_BIT_DIFFUSE_DETAIL_MAP].bit) - { - prprograms[programbits].uniform_detailMap = bglGetUniformLocationARB(program, "detailMap"); - prprograms[programbits].uniform_detailScale = bglGetUniformLocationARB(program, "detailScale"); - } - - // PR_BIT_SPECULAR_MAP - if (programbits & prprogrambits[PR_BIT_SPECULAR_MAP].bit) - { - prprograms[programbits].uniform_specMap = bglGetUniformLocationARB(program, "specMap"); - } - - // PR_BIT_SPECULAR_MATERIAL - if (programbits & prprogrambits[PR_BIT_SPECULAR_MATERIAL].bit) - { - prprograms[programbits].uniform_specMaterial = bglGetUniformLocationARB(program, "specMaterial"); - } - - // PR_BIT_MIRROR_MAP - if (programbits & prprogrambits[PR_BIT_MIRROR_MAP].bit) - { - prprograms[programbits].uniform_mirrorMap = bglGetUniformLocationARB(program, "mirrorMap"); - } - - // PR_BIT_GLOW_MAP - if (programbits & prprogrambits[PR_BIT_GLOW_MAP].bit) - { - prprograms[programbits].uniform_glowMap = bglGetUniformLocationARB(program, "glowMap"); - } - - // PR_BIT_PROJECTION_MAP - if (programbits & prprogrambits[PR_BIT_PROJECTION_MAP].bit) - { - prprograms[programbits].uniform_shadowProjMatrix = bglGetUniformLocationARB(program, "shadowProjMatrix"); - } - - // PR_BIT_SHADOW_MAP - if (programbits & prprogrambits[PR_BIT_SHADOW_MAP].bit) - { - prprograms[programbits].uniform_shadowMap = bglGetUniformLocationARB(program, "shadowMap"); - } - - // PR_BIT_LIGHT_MAP - if (programbits & prprogrambits[PR_BIT_LIGHT_MAP].bit) - { - prprograms[programbits].uniform_lightMap = bglGetUniformLocationARB(program, "lightMap"); - } - - // PR_BIT_SPOT_LIGHT - if (programbits & prprogrambits[PR_BIT_SPOT_LIGHT].bit) - { - prprograms[programbits].uniform_spotDir = bglGetUniformLocationARB(program, "spotDir"); - prprograms[programbits].uniform_spotRadius = bglGetUniformLocationARB(program, "spotRadius"); - } -} - -// LIGHTS -static void polymer_removelight(int16_t lighti) -{ - _prplanelist* oldhead; - - while (prlights[lighti].planelist) - { - polymer_deleteplanelight(prlights[lighti].planelist->plane, lighti); - oldhead = prlights[lighti].planelist; - prlights[lighti].planelist = prlights[lighti].planelist->n; - Bfree(oldhead); - } - prlights[lighti].planecount = 0; - prlights[lighti].planelist = NULL; -} - -static void polymer_updatelights(void) -{ - int32_t i = 0; - - do - { - if (prlights[i].flags.active && prlights[i].flags.invalidate) { - // highly suboptimal - polymer_removelight(i); - - if (prlights[i].radius) - polymer_processspotlight(&prlights[i]); - - polymer_culllight(i); - - prlights[i].flags.invalidate = 0; - } - - if (prlights[i].flags.active) - prlights[i].rtindex = -1; - } - while (++i < PR_MAXLIGHTS); -} - -static inline void polymer_resetplanelights(_prplane* plane) -{ - Bmemset(&plane->lights[0], -1, sizeof(plane->lights[0]) * plane->lightcount); - plane->lightcount = 0; -} - -static void polymer_addplanelight(_prplane* plane, int16_t lighti) -{ - _prplanelist* oldhead; - int32_t i = 0; - - if (plane->lightcount == PR_MAXLIGHTS - 1) - return; - - if (plane->lightcount) - { - do - { - if (plane->lights[i++] == lighti) - goto out; - } - while (i < plane->lightcount); - - i = 0; - while (i < plane->lightcount && prlights[plane->lights[i]].priority < prlights[lighti].priority) - i++; - Bmemmove(&plane->lights[i+1], &plane->lights[i], sizeof(int16_t) * (plane->lightcount - i)); - } - - plane->lights[i] = lighti; - plane->lightcount++; - -out: - oldhead = prlights[lighti].planelist; - while (oldhead != NULL) - { - if (oldhead->plane == plane) return; - oldhead = oldhead->n; - } - - oldhead = prlights[lighti].planelist; - prlights[lighti].planelist = Bmalloc(sizeof(_prplanelist)); - prlights[lighti].planelist->n = oldhead; - - prlights[lighti].planelist->plane = plane; - prlights[lighti].planecount++; -} - -static inline void polymer_deleteplanelight(_prplane* plane, int16_t lighti) -{ - int32_t i = plane->lightcount-1; - - while (i >= 0) - { - if (plane->lights[i] == lighti) - { - Bmemmove(&plane->lights[i], &plane->lights[i+1], sizeof(int16_t) * (plane->lightcount - i)); - plane->lightcount--; - return; - } - i--; - } -} - -static int32_t polymer_planeinlight(_prplane* plane, _prlight* light) -{ - float lightpos[3]; - int32_t i, j, k, l; - - if (!plane->vertcount) - return 0; - - if (light->radius) - return polymer_planeinfrustum(plane, light->frustum); - - lightpos[0] = (float)light->y; - lightpos[1] = -(float)light->z / 16.0f; - lightpos[2] = -(float)light->x; - - i = 0; - - do - { - j = k = l = 0; - - do - { - if (plane->buffer[(j * 5) + i] > (lightpos[i] + light->range)) k++; - if (plane->buffer[(j * 5) + i] < (lightpos[i] - light->range)) l++; - } - while (++j < plane->vertcount); - - if ((k == plane->vertcount) || (l == plane->vertcount)) - return 0; - } - while (++i < 3); - - return 1; -} - -static void polymer_invalidateplanelights(_prplane* plane) -{ - int32_t i = plane->lightcount; - - while (i--) - { - if (plane && (plane->lights[i] != -1) && (prlights[plane->lights[i]].flags.active)) - prlights[plane->lights[i]].flags.invalidate = 1; - } -} - -static void polymer_invalidatesectorlights(int16_t sectnum) -{ - int32_t i; - _prsector *s = prsectors[sectnum]; - sectortype *sec = §or[sectnum]; - - if (!s) - return; - - polymer_invalidateplanelights(&s->floor); - polymer_invalidateplanelights(&s->ceil); - - i = sec->wallnum; - - while (i--) - { - _prwall *w; - if (!(w = prwalls[sec->wallptr + i])) continue; - - polymer_invalidateplanelights(&w->wall); - polymer_invalidateplanelights(&w->over); - polymer_invalidateplanelights(&w->mask); - } -} - -static void polymer_processspotlight(_prlight* light) -{ - float radius, ang, horizang, lightpos[3]; - pthtyp* pth; - - // hack to avoid lights beams perpendicular to walls - if ((light->horiz <= 100) && (light->horiz > 90)) - light->horiz = 90; - if ((light->horiz > 100) && (light->horiz < 110)) - light->horiz = 110; - - lightpos[0] = (float)light->y; - lightpos[1] = -(float)light->z / 16.0f; - lightpos[2] = -(float)light->x; - - // calculate the spot light transformations and matrices - radius = (float)(light->radius) / (2048.0f / 360.0f); - ang = (float)(light->angle) / (2048.0f / 360.0f); - horizang = (float)(-getangle(128, light->horiz-100)) / (2048.0f / 360.0f); - - bglMatrixMode(GL_PROJECTION); - bglPushMatrix(); - bglLoadIdentity(); - bgluPerspective(radius * 2, 1, 0.1f, light->range / 1000.0f); - bglGetFloatv(GL_PROJECTION_MATRIX, light->proj); - bglPopMatrix(); - - bglMatrixMode(GL_MODELVIEW); - bglPushMatrix(); - bglLoadIdentity(); - bglRotatef(horizang, 1.0f, 0.0f, 0.0f); - bglRotatef(ang, 0.0f, 1.0f, 0.0f); - bglScalef(1.0f / 1000.0f, 1.0f / 1000.0f, 1.0f / 1000.0f); - bglTranslatef(-lightpos[0], -lightpos[1], -lightpos[2]); - bglGetFloatv(GL_MODELVIEW_MATRIX, light->transform); - bglPopMatrix(); - - polymer_extractfrustum(light->transform, light->proj, light->frustum); - - light->rtindex = -1; - - // get the texture handle for the lightmap - light->lightmap = 0; - if (light->tilenum > 0) - { - if (!waloff[light->tilenum]) - loadtile(light->tilenum); - - pth = NULL; - pth = gltexcache(light->tilenum, 0, 0); - - if (pth) - light->lightmap = pth->glpic; - } -} - -static inline void polymer_culllight(int16_t lighti) -{ - _prlight* light = &prlights[lighti]; - int32_t front = 0; - int32_t back = 1; - int32_t i; - int32_t j; - int32_t zdiff; - _prsector *s; - _prwall *w; - sectortype *sec; - - Bmemset(drawingstate, 0, sizeof(int16_t) * numsectors); - drawingstate[light->sector] = 1; - - sectorqueue[0] = light->sector; - - do - { - s = prsectors[sectorqueue[front]]; - sec = §or[sectorqueue[front]]; - - polymer_pokesector(sectorqueue[front]); - - zdiff = light->z - s->floorz; - if (zdiff < 0) - zdiff = -zdiff; - zdiff >>= 4; - - if (!light->radius && !(sec->floorstat & 1)) { - if (zdiff < light->range) - polymer_addplanelight(&s->floor, lighti); - } else if (polymer_planeinlight(&s->floor, light)) - polymer_addplanelight(&s->floor, lighti); - - zdiff = light->z - s->ceilingz; - if (zdiff < 0) - zdiff = -zdiff; - zdiff >>= 4; - - if (!light->radius && !(sec->ceilingstat & 1)) { - if (zdiff < light->range) - polymer_addplanelight(&s->ceil, lighti); - } else if (polymer_planeinlight(&s->ceil, light)) - polymer_addplanelight(&s->ceil, lighti); - - i = 0; - while (i < sec->wallnum) - { - w = prwalls[sec->wallptr + i]; - - j = 0; - - if (polymer_planeinlight(&w->wall, light)) { - polymer_addplanelight(&w->wall, lighti); - j++; - } - - if (polymer_planeinlight(&w->over, light)) { - polymer_addplanelight(&w->over, lighti); - j++; - } - - // assume the light hits the middle section if it hits the top and bottom - if (wallvisible(light->x, light->y, sec->wallptr + i) && - (j == 2 || polymer_planeinlight(&w->mask, light))) { - if ((w->mask.vertcount == 4) && - (w->mask.buffer[(0 * 5) + 1] >= w->mask.buffer[(3 * 5) + 1]) && - (w->mask.buffer[(1 * 5) + 1] >= w->mask.buffer[(2 * 5) + 1])) - { - i++; - continue; - } - - polymer_addplanelight(&w->mask, lighti); - - if ((wall[sec->wallptr + i].nextsector >= 0) && - (!drawingstate[wall[sec->wallptr + i].nextsector])) { - drawingstate[wall[sec->wallptr + i].nextsector] = 1; - sectorqueue[back] = wall[sec->wallptr + i].nextsector; - back++; - } - } - - i++; - } - front++; - } - while (front != back); - - i = MAXSPRITES-1; - - do - { - _prsprite *s = prsprites[i]; - - if ((sprite[i].cstat & 48) == 0 || s == NULL || sprite[i].statnum == MAXSTATUS || sprite[i].sectnum == MAXSECTORS) - continue; - - if (polymer_planeinlight(&s->plane, light)) - polymer_addplanelight(&s->plane, lighti); - } - while (i--); -} - -static void polymer_prepareshadows(void) -{ - int16_t oviewangle, oglobalang; - int32_t ocosglobalang, osinglobalang; - int32_t ocosviewingrangeglobalang, osinviewingrangeglobalang; - int32_t i, j, k; - int32_t gx, gy, gz; - int32_t oldoverridematerial; - - // for wallvisible() - gx = globalposx; - gy = globalposy; - gz = globalposz; - // build globals used by drawmasks - oviewangle = viewangle; - oglobalang = globalang; - ocosglobalang = cosglobalang; - osinglobalang = singlobalang; - ocosviewingrangeglobalang = cosviewingrangeglobalang; - osinviewingrangeglobalang = sinviewingrangeglobalang; - - i = j = k = 0; - - while ((k < lightcount) && (j < pr_shadowcount)) - { - while (!prlights[i].flags.active) - i++; - - if (prlights[i].radius && prlights[i].flags.isinview) - { - prlights[i].flags.isinview = 0; - prlights[i].rtindex = j + 1; - if (pr_verbosity >= 3) OSD_Printf("PR : Drawing shadow %i...\n", i); - - bglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, prrts[prlights[i].rtindex].fbo); - bglPushAttrib(GL_VIEWPORT_BIT); - bglViewport(0, 0, prrts[prlights[i].rtindex].xdim, prrts[prlights[i].rtindex].ydim); - - bglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - bglMatrixMode(GL_PROJECTION); - bglPushMatrix(); - bglLoadMatrixf(prlights[i].proj); - bglMatrixMode(GL_MODELVIEW); - bglLoadMatrixf(prlights[i].transform); - - bglEnable(GL_POLYGON_OFFSET_FILL); - bglPolygonOffset(5, SHADOW_DEPTH_OFFSET); - - globalposx = prlights[i].x; - globalposy = prlights[i].y; - globalposz = prlights[i].z; - - // build globals used by rotatesprite - viewangle = prlights[i].angle; - globalang = (prlights[i].angle&2047); - cosglobalang = sintable[(globalang+512)&2047]; - singlobalang = sintable[globalang&2047]; - cosviewingrangeglobalang = mulscale16(cosglobalang,viewingrange); - sinviewingrangeglobalang = mulscale16(singlobalang,viewingrange); - - oldoverridematerial = overridematerial; - // smooth model shadows - overridematerial = prprogrambits[PR_BIT_ANIM_INTERPOLATION].bit; - // used by alpha-testing for sprite silhouette - overridematerial |= prprogrambits[PR_BIT_DIFFUSE_MAP].bit; - overridematerial |= prprogrambits[PR_BIT_DIFFUSE_MAP2].bit; - - // to force sprite drawing - mirrors[depth++].plane = NULL; - polymer_displayrooms(prlights[i].sector); - depth--; - - overridematerial = oldoverridematerial; - - bglDisable(GL_POLYGON_OFFSET_FILL); - - bglMatrixMode(GL_PROJECTION); - bglPopMatrix(); - - bglPopAttrib(); - bglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); - - j++; - } - i++; - k++; - } - - globalposx = gx; - globalposy = gy; - globalposz = gz; - - viewangle = oviewangle; - globalang = oglobalang; - cosglobalang = ocosglobalang; - singlobalang = osinglobalang; - cosviewingrangeglobalang = ocosviewingrangeglobalang; - sinviewingrangeglobalang = osinviewingrangeglobalang; -} - -// RENDER TARGETS -static void polymer_initrendertargets(int32_t count) -{ - int32_t i; - - prrts = Bcalloc(count, sizeof(_prrt)); - - i = 0; - while (i < count) - { - if (!i) { - prrts[i].target = GL_TEXTURE_RECTANGLE; - prrts[i].xdim = xdim; - prrts[i].ydim = ydim; - - bglGenTextures(1, &prrts[i].color); - bglBindTexture(prrts[i].target, prrts[i].color); - - bglTexImage2D(prrts[i].target, 0, GL_RGB, prrts[i].xdim, prrts[i].ydim, 0, GL_RGB, GL_SHORT, NULL); - bglTexParameteri(prrts[i].target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - bglTexParameteri(prrts[i].target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - bglTexParameteri(prrts[i].target, GL_TEXTURE_WRAP_S, glinfo.clamptoedge?GL_CLAMP_TO_EDGE:GL_CLAMP); - bglTexParameteri(prrts[i].target, GL_TEXTURE_WRAP_T, glinfo.clamptoedge?GL_CLAMP_TO_EDGE:GL_CLAMP); - } else { - prrts[i].target = GL_TEXTURE_2D; - prrts[i].xdim = 128 << pr_shadowdetail; - prrts[i].ydim = 128 << pr_shadowdetail; - prrts[i].color = 0; - - if (pr_ati_fboworkaround) { - bglGenTextures(1, &prrts[i].color); - bglBindTexture(prrts[i].target, prrts[i].color); - - bglTexImage2D(prrts[i].target, 0, GL_RGB, prrts[i].xdim, prrts[i].ydim, 0, GL_RGB, GL_SHORT, NULL); - bglTexParameteri(prrts[i].target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - bglTexParameteri(prrts[i].target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - bglTexParameteri(prrts[i].target, GL_TEXTURE_WRAP_S, glinfo.clamptoedge?GL_CLAMP_TO_EDGE:GL_CLAMP); - bglTexParameteri(prrts[i].target, GL_TEXTURE_WRAP_T, glinfo.clamptoedge?GL_CLAMP_TO_EDGE:GL_CLAMP); - } - } - - bglGenTextures(1, &prrts[i].z); - bglBindTexture(prrts[i].target, prrts[i].z); - - bglTexImage2D(prrts[i].target, 0, GL_DEPTH_COMPONENT, prrts[i].xdim, prrts[i].ydim, 0, GL_DEPTH_COMPONENT, GL_SHORT, NULL); - bglTexParameteri(prrts[i].target, GL_TEXTURE_MIN_FILTER, pr_shadowfiltering ? GL_LINEAR : GL_NEAREST); - bglTexParameteri(prrts[i].target, GL_TEXTURE_MAG_FILTER, pr_shadowfiltering ? GL_LINEAR : GL_NEAREST); - bglTexParameteri(prrts[i].target, GL_TEXTURE_WRAP_S, glinfo.clamptoedge?GL_CLAMP_TO_EDGE:GL_CLAMP); - bglTexParameteri(prrts[i].target, GL_TEXTURE_WRAP_T, glinfo.clamptoedge?GL_CLAMP_TO_EDGE:GL_CLAMP); - bglTexParameteri(prrts[i].target, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB); - bglTexParameteri(prrts[i].target, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL); - bglTexParameteri(prrts[i].target, GL_DEPTH_TEXTURE_MODE_ARB, GL_ALPHA); - - bglGenFramebuffersEXT(1, &prrts[i].fbo); - bglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, prrts[i].fbo); - - if (prrts[i].color) - bglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, - prrts[i].target, prrts[i].color, 0); - else { - bglDrawBuffer(GL_NONE); - bglReadBuffer(GL_NONE); - } - bglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, prrts[i].target, prrts[i].z, 0); - - if (bglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) != GL_FRAMEBUFFER_COMPLETE_EXT) - { - OSD_Printf("PR : FBO #%d initialization failed.\n", i); - } - - bglBindTexture(prrts[i].target, 0); - bglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); - - i++; - } -} - -#endif diff --git a/polymer-perf/eduke32/build/src/polymost.c b/polymer-perf/eduke32/build/src/polymost.c deleted file mode 100644 index 5e455e7be..000000000 --- a/polymer-perf/eduke32/build/src/polymost.c +++ /dev/null @@ -1,6678 +0,0 @@ -/************************************************************************************************** -"POLYMOST" code written by Ken Silverman -Ken Silverman's official web site: http://www.advsys.net/ken - -Motivation: -When 3D Realms released the Duke Nukem 3D source code, I thought somebody would do a OpenGL or -Direct3D port. Well, after a few months passed, I saw no sign of somebody working on a true -hardware-accelerated port of Build, just people saying it wasn't possible. Eventually, I realized -the only way this was going to happen was for me to do it myself. First, I needed to port Build to -Windows. I could have done it myself, but instead I thought I'd ask my Australian buddy, Jonathon -Fowler, if he would upgrade his Windows port to my favorite compiler (MSVC) - which he did. Once -that was done, I was ready to start the "POLYMOST" project. - -About: -This source file is basically a complete rewrite of the entire rendering part of the Build engine. -There are small pieces in ENGINE.C to activate this code, and other minor hacks in other source -files, but most of it is in here. If you're looking for polymost-related code in the other source -files, you should find most of them by searching for either "polymost" or "rendmode". Speaking of -rendmode, there are now 4 rendering modes in Build: - - rendmode 0: The original code I wrote from 1993-1997 - rendmode 1: Solid-color rendering: my debug code before I did texture mapping - rendmode 2: Software rendering before I started the OpenGL code (Note: this is just a quick - hack to make testing easier - it's not optimized to my usual standards!) - rendmode 3: The OpenGL code - -The original Build engine did hidden surface removal by using a vertical span buffer on the tops -and bottoms of walls. This worked nice back in the day, but it it's not suitable for a polygon -engine. So I decided to write a brand new hidden surface removal algorithm - using the same idea -as the original Build - but one that worked with vectors instead of already rasterized data. - -Brief history: -06/20/2000: I release Build Source code -04/01/2003: 3D Realms releases Duke Nukem 3D source code -10/04/2003: Jonathon Fowler gets his Windows port working in Visual C -10/04/2003: I start writing POLYMOST.BAS, a new hidden surface removal algorithm for Build that - works on a polygon level instead of spans. -10/16/2003: Ported POLYMOST.BAS to C inside JonoF KenBuild's ENGINE.C; later this code was split - out of ENGINE.C and put in this file, POLYMOST.C. -12/10/2003: Started OpenGL code for POLYMOST (rendmode 3) -12/23/2003: 1st public release -01/01/2004: 2nd public release: fixed stray lines, status bar, mirrors, sky, and lots of other bugs. - ----------------------------------------------------------------------------------------------------- - -Todo list (in approximate chronological order): - -High priority: - * BOTH: Do accurate software sorting/chopping for sprites: drawing in wrong order is bad :/ - * BOTH: Fix hall of mirrors near "zenith". Call polymost_drawrooms twice? - * OPENGL: drawmapview() - -Low priority: - * SOFT6D: Do back-face culling of sprites during up/down/tilt transformation (top of drawpoly) - * SOFT6D: Fix depth shading: use saturation&LUT - * SOFT6D: Optimize using hyperbolic mapping (similar to KUBE algo) - * SOFT6D: Slab6-style voxel sprites. How to accelerate? :/ - * OPENGL: KENBUILD: Write flipping code for floor mirrors - * BOTH: KENBUILD: Parallaxing sky modes 1&2 - * BOTH: Masked/1-way walls don't clip correctly to sectors of intersecting ceiling/floor slopes - * BOTH: Editart x-center is not working correctly with Duke's camera/turret sprites - * BOTH: Get rid of horizontal line above Duke full-screen status bar - * BOTH: Combine ceilings/floors into a single triangle strip (should lower poly count by 2x) - * BOTH: Optimize/clean up texture-map setup equations - -**************************************************************************************************/ - - -#ifdef USE_OPENGL - -#include "compat.h" -#include "build.h" - -#ifdef USE_OPENGL -# include "glbuild.h" -# include "mdsprite.h" -#endif - -#include "pragmas.h" -#include "baselayer.h" -#include "osd.h" -#include "engine_priv.h" -#include "hightile.h" -#include "polymost.h" -#include "polymer.h" -#include "scriptfile.h" -#include "cache1d.h" -#include "kplib.h" - -#ifndef _WIN32 -extern int32_t filelength(int h); // kplib.c -#endif - -extern char textfont[2048], smalltextfont[2048]; - -int32_t rendmode=0; -int32_t usemodels=1, usehightile=1; - -#include //<-important! -typedef struct { float x, cy[2], fy[2]; int32_t n, p, tag, ctag, ftag; } vsptyp; -#define VSPMAX 4096 //<- careful! -static vsptyp vsp[VSPMAX]; -static int32_t vcnt, gtag; - -static double dxb1[MAXWALLSB], dxb2[MAXWALLSB]; - -#define SCISDIST 1.0 //1.0: Close plane clipping distance -#define USEZBUFFER 1 //1:use zbuffer (slow, nice sprite rendering), 0:no zbuffer (fast, bad sprite rendering) -#define LINTERPSIZ 4 //log2 of interpolation size. 4:pretty fast&acceptable quality, 0:best quality/slow! -#define DEPTHDEBUG 0 //1:render distance instead of texture, for debugging only!, 0:default - -float shadescale = 1.3f; - -double gyxscale, gxyaspect, gviewxrange, ghalfx, grhalfxdown10, grhalfxdown10x, ghoriz; -double gcosang, gsinang, gcosang2, gsinang2; -double gchang, gshang, gctang, gstang, gvisibility; -float gtang = 0.0; -double guo, gux, guy; //Screen-based texture mapping parameters -double gvo, gvx, gvy; -double gdo, gdx, gdy; - -static int32_t preview_mouseaim=0; // when 1, displays a CROSSHAIR tsprite at the _real_ aimed position - -#if (USEZBUFFER != 0) -int32_t zbufysiz = 0, zbufbpl = 0, *zbufoff = 0; -intptr_t zbufmem = 0; -#endif - -#ifdef USE_OPENGL -static int32_t srepeat = 0, trepeat = 0; - -int32_t glredbluemode = 0; -static int32_t lastglredbluemode = 0, redblueclearcnt = 0; - -struct glfiltermodes glfiltermodes[numglfiltermodes] = -{ - {"GL_NEAREST",GL_NEAREST,GL_NEAREST}, - {"GL_LINEAR",GL_LINEAR,GL_LINEAR}, - {"GL_NEAREST_MIPMAP_NEAREST",GL_NEAREST_MIPMAP_NEAREST,GL_NEAREST}, - {"GL_LINEAR_MIPMAP_NEAREST",GL_LINEAR_MIPMAP_NEAREST,GL_LINEAR}, - {"GL_NEAREST_MIPMAP_LINEAR",GL_NEAREST_MIPMAP_LINEAR,GL_NEAREST}, - {"GL_LINEAR_MIPMAP_LINEAR",GL_LINEAR_MIPMAP_LINEAR,GL_LINEAR} -}; - -int32_t glanisotropy = 1; // 0 = maximum supported by card -int32_t glusetexcompr = 1; -int32_t gltexfiltermode = 2; // GL_NEAREST_MIPMAP_NEAREST -int32_t glusetexcache = 2; -int32_t glmultisample = 0, glnvmultisamplehint = 0; -int32_t gltexmaxsize = 0; // 0 means autodetection on first run -int32_t gltexmiplevel = 0; // discards this many mipmap levels -static int32_t lastglpolygonmode = 0; //FUK -int32_t glpolygonmode = 0; // 0:GL_FILL,1:GL_LINE,2:GL_POINT //FUK -int32_t glwidescreen = 0; -int32_t glprojectionhacks = 1; -static GLuint polymosttext = 0; -extern char nofog; -int32_t glrendmode = 3; - -// Those THREE globals control the drawing of fullbright tiles -static int32_t fullbrightloadingpass = 0; -static int32_t fullbrightdrawingpass = 0; -static int32_t shadeforfullbrightpass; - -float curpolygonoffset; // internal polygon offset stack for drawing flat sprites to avoid depth fighting - -// Detail mapping cvar -int32_t r_detailmapping = 1; - -// Glow mapping cvar -int32_t r_glowmapping = 1; - -// Vertex Array model drawing cvar -int32_t r_vertexarrays = 1; - -// Vertex Buffer Objects model drawing cvars -int32_t r_vbos = 1; -int32_t r_vbocount = 64; - -// model animation smoothing cvar -int32_t r_animsmoothing = 1; - -// line of sight checks before mddraw() -int32_t r_modelocclusionchecking = 0; - -// fullbright cvar -int32_t r_fullbrights = 1; - -// texture downsizing -// is medium quality a good default? -int32_t r_downsize = 1; -int32_t r_downsizevar = -1; - -// used for fogcalc -float fogresult, fogcol[4], fogtable[4*MAXPALOOKUPS]; -#endif - -static char ptempbuf[MAXWALLSB<<1]; - -// polymost ART sky control -int32_t r_parallaxskyclamping = 1; -int32_t r_parallaxskypanning = 0; - -extern int16_t editstatus; - -#define MIN_CACHETIME_PRINT 5 - - -static inline int32_t imod(int32_t a, int32_t b) -{ - if (a >= 0) return(a%b); - return(((a+1)%b)+b-1); -} - -void drawline2d(float x0, float y0, float x1, float y1, char col) -{ - float f, dx, dy, fxres, fyres; - int32_t e, inc, x, y; - uint32_t up16; - - dx = x1-x0; dy = y1-y0; if ((dx == 0) && (dy == 0)) return; - fxres = (float)xdimen; fyres = (float)ydimen; - if (x0 >= fxres) { if (x1 >= fxres) return; y0 += (fxres-x0)*dy/dx; x0 = fxres; } - else if (x0 < 0) { if (x1 < 0) return; y0 += (0-x0)*dy/dx; x0 = 0; } - if (x1 >= fxres) { y1 += (fxres-x1)*dy/dx; x1 = fxres; } - else if (x1 < 0) { y1 += (0-x1)*dy/dx; x1 = 0; } - if (y0 >= fyres) { if (y1 >= fyres) return; x0 += (fyres-y0)*dx/dy; y0 = fyres; } - else if (y0 < 0) { if (y1 < 0) return; x0 += (0-y0)*dx/dy; y0 = 0; } - if (y1 >= fyres) { x1 += (fyres-y1)*dx/dy; y1 = fyres; } - else if (y1 < 0) { x1 += (0-y1)*dx/dy; y1 = 0; } - - if (fabs(dx) > fabs(dy)) - { - if (x0 > x1) { f = x0; x0 = x1; x1 = f; f = y0; y0 = y1; y1 = f; } - y = (int32_t)(y0*65536.f)+32768; - inc = (int32_t)(dy/dx*65536.f+.5f); - x = (int32_t)(x0+.5); if (x < 0) { y -= inc*x; x = 0; } //if for safety - e = (int32_t)(x1+.5); if (e > xdimen) e = xdimen; //if for safety - up16 = (ydimen<<16); - for (; x>16]+x+frameoffset) = col; - } - else - { - if (y0 > y1) { f = x0; x0 = x1; x1 = f; f = y0; y0 = y1; y1 = f; } - x = (int32_t)(x0*65536.f)+32768; - inc = (int32_t)(dx/dy*65536.f+.5f); - y = (int32_t)(y0+.5); if (y < 0) { x -= inc*y; y = 0; } //if for safety - e = (int32_t)(y1+.5); if (e > ydimen) e = ydimen; //if for safety - up16 = (xdimen<<16); - for (; y>16)+frameoffset) = col; - } -} - -#ifdef USE_OPENGL -#include "md4.h" -#include "quicklz.h" - -//-------------------------------------------------------------------------------------------------- -//TEXTURE MANAGEMENT: treats same texture with different .PAL as a separate texture. This makes the -// max number of virtual textures very large (MAXTILES*256). Instead of allocating a handle for -// every virtual texture, I use a cache where indexing is managed through a hash table. -// - -// moved into polymost.h -/*typedef struct pthtyp_t -{ - struct pthtyp_t *next; - GLuint glpic; - short picnum; - char palnum; - char effects; - char flags; // 1 = clamped (dameth&4), 2 = hightile, 4 = skybox face, 8 = hasalpha, 16 = hasfullbright, 128 = invalidated - char skyface; - hicreplctyp *hicr; - - unsigned short sizx, sizy; - float scalex, scaley; - struct pthtyp_t *wofb; // without fullbright - struct pthtyp_t *ofb; // only fullbright -} pthtyp;*/ - -int32_t cachefilehandle = -1; // texture cache file handle -FILE *cacheindexptr = NULL; -uint8_t *memcachedata = NULL; -int32_t memcachesize = -1; -int32_t cachepos = 0; - -hashtable_t h_texcache = { 1024, NULL }; - -char TEXCACHEFILE[BMAX_PATH] = "textures"; - -int32_t mdtims, omdtims; -float alphahackarray[MAXTILES]; - -texcacheindex *firstcacheindex = NULL; -texcacheindex *curcacheindex = NULL; -texcacheindex *cacheptrs[MAXTILES<<1]; -int32_t numcacheentries = 0; - - -#define GLTEXCACHEADSIZ 8192 -pthtyp *gltexcachead[GLTEXCACHEADSIZ]; - -int32_t drawingskybox = 0; - -int32_t gloadtile_art(int32_t,int32_t,int32_t,pthtyp *,int32_t); -int32_t gloadtile_hi(int32_t,int32_t,int32_t,hicreplctyp *,int32_t,pthtyp *,int32_t,char); -static int32_t hicprecaching = 0; -pthtyp *gltexcache(int32_t dapicnum, int32_t dapalnum, int32_t dameth) -{ - int32_t i, j; - hicreplctyp *si; - pthtyp *pth, *pth2; - - j = (dapicnum&(GLTEXCACHEADSIZ-1)); - - si = usehightile ? hicfindsubst(dapicnum,dapalnum,drawingskybox) : NULL; - - if (!si) - { - if (drawingskybox || dapalnum >= (MAXPALOOKUPS - RESERVEDPALS)) return NULL; - goto tryart; - } - - /* if palette > 0 && replacement found - * no effects are applied to the texture - * else if palette > 0 && no replacement found - * effects are applied to the palette 0 texture if it exists - */ - - // load a replacement - for (pth=gltexcachead[j]; pth; pth=pth->next) - { - if (pth->picnum == dapicnum && - pth->palnum == si->palnum && - (si->palnum>0 ? 1 : (pth->effects == hictinting[dapalnum].f)) && - (pth->flags & (1+2+4)) == (((dameth&4)>>2)+2+((drawingskybox>0)<<2)) && - (drawingskybox>0 ? (pth->skyface == drawingskybox) : 1) - ) - { - if (pth->flags & 128) - { - pth->flags &= ~128; - if (gloadtile_hi(dapicnum,dapalnum,drawingskybox,si,dameth,pth,0, - (si->palnum>0) ? 0 : hictinting[dapalnum].f)) // reload tile - { - if (drawingskybox) return NULL; - goto tryart; // failed, so try for ART - } - } - return(pth); - } - } - - - pth = (pthtyp *)Bcalloc(1,sizeof(pthtyp)); - if (!pth) return NULL; - - // possibly fetch an already loaded multitexture :_) - if (dapalnum >= (MAXPALOOKUPS - RESERVEDPALS)) - for (i = (GLTEXCACHEADSIZ - 1); i >= 0; i--) - for (pth2=gltexcachead[i]; pth2; pth2=pth2->next) - { - if ((pth2->hicr) && (pth2->hicr->filename) && (Bstrcasecmp(pth2->hicr->filename, si->filename) == 0)) - { - Bmemcpy(pth, pth2, sizeof(pthtyp)); - pth->picnum = dapicnum; - pth->flags = ((dameth&4)>>2) + 2 + ((drawingskybox>0)<<2); - if (pth2->flags & 8) pth->flags |= 8; //hasalpha - pth->hicr = si; - pth->next = gltexcachead[j]; - - gltexcachead[j] = pth; - return(pth); - } - } - - if (gloadtile_hi(dapicnum,dapalnum,drawingskybox,si,dameth,pth,1, (si->palnum>0) ? 0 : hictinting[dapalnum].f)) - { - Bfree(pth); - if (drawingskybox) return NULL; - goto tryart; // failed, so try for ART - } - pth->palnum = si->palnum; - pth->next = gltexcachead[j]; - gltexcachead[j] = pth; - return(pth); - -tryart: - if (hicprecaching) return NULL; - - // load from art - for (pth=gltexcachead[j]; pth; pth=pth->next) - if (pth->picnum == dapicnum && - pth->palnum == dapalnum && - (pth->flags & (1+2)) == ((dameth&4)>>2) - ) - { - if (pth->flags & 128) - { - pth->flags &= ~128; - if (gloadtile_art(dapicnum,dapalnum,dameth,pth,0)) return NULL; //reload tile (for animations) - } - return(pth); - } - - pth = (pthtyp *)Bcalloc(1,sizeof(pthtyp)); - if (!pth) return NULL; - - if (gloadtile_art(dapicnum,dapalnum,dameth,pth,1)) - { - Bfree(pth); - return NULL; - } - pth->next = gltexcachead[j]; - gltexcachead[j] = pth; - - return(pth); -} - -static inline int32_t gltexmayhavealpha(int32_t dapicnum, int32_t dapalnum) -{ - int32_t j = (dapicnum&(GLTEXCACHEADSIZ-1)); - pthtyp *pth; - - for (pth=gltexcachead[j]; pth; pth=pth->next) - if ((pth->picnum == dapicnum) && (pth->palnum == dapalnum)) - return((pth->flags&8) != 0); - return(1); -} - -void gltexinvalidate(int32_t dapicnum, int32_t dapalnum, int32_t dameth) -{ - int32_t j; - pthtyp *pth; - - j = (dapicnum&(GLTEXCACHEADSIZ-1)); - for (pth=gltexcachead[j]; pth; pth=pth->next) - if (pth->picnum == dapicnum && pth->palnum == dapalnum && (pth->flags & 1) == ((dameth&4)>>2)) - { - pth->flags |= 128; - if (pth->flags & 16) - pth->ofb->flags |= 128; - } -} - -//Make all textures "dirty" so they reload, but not re-allocate -//This should be much faster than polymost_glreset() -//Use this for palette effects ... but not ones that change every frame! -void gltexinvalidateall() -{ - int32_t j; - pthtyp *pth; - - for (j=GLTEXCACHEADSIZ-1; j>=0; j--) - for (pth=gltexcachead[j]; pth; pth=pth->next) - { - pth->flags |= 128; - if (pth->flags & 16) - pth->ofb->flags |= 128; - } - clearskins(); -#ifdef DEBUGGINGAIDS - OSD_Printf("gltexinvalidateall()\n"); -#endif -} - -void gltexinvalidate8() -{ - int32_t j; - pthtyp *pth; - - for (j=GLTEXCACHEADSIZ-1; j>=0; j--) - for (pth=gltexcachead[j]; pth; pth=pth->next) - { - if (pth->hicr == NULL) - { - pth->flags |= 128; - if (pth->flags & 16) - pth->ofb->flags |= 128; - } - } -#ifdef DEBUGGINGAIDS - OSD_Printf("gltexinvalidate8()\n"); -#endif -} - -void gltexapplyprops(void) -{ - int32_t i; - pthtyp *pth; - - if (glinfo.maxanisotropy > 1.0) - { - if (glanisotropy <= 0 || glanisotropy > glinfo.maxanisotropy) glanisotropy = (int32_t)glinfo.maxanisotropy; - } - - if (gltexfiltermode < 0) gltexfiltermode = 0; - else if (gltexfiltermode >= (int32_t)numglfiltermodes) gltexfiltermode = numglfiltermodes-1; - for (i=GLTEXCACHEADSIZ-1; i>=0; i--) - { - for (pth=gltexcachead[i]; pth; pth=pth->next) - { - bglBindTexture(GL_TEXTURE_2D,pth->glpic); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,glfiltermodes[gltexfiltermode].mag); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,glfiltermodes[gltexfiltermode].min); - if (glinfo.maxanisotropy > 1.0) - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_ANISOTROPY_EXT,glanisotropy); - if (r_fullbrights && pth->flags & 16) - { - bglBindTexture(GL_TEXTURE_2D,pth->ofb->glpic); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,glfiltermodes[gltexfiltermode].mag); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,glfiltermodes[gltexfiltermode].min); - if (glinfo.maxanisotropy > 1.0) - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_ANISOTROPY_EXT,glanisotropy); - } - } - } - - { - int32_t j; - mdskinmap_t *sk; - md2model_t *m; - - for (i=0; imdnum < 2) continue; - for (j=0; jnumskins*(HICEFFECTMASK+1); j++) - { - if (!m->texid[j]) continue; - bglBindTexture(GL_TEXTURE_2D,m->texid[j]); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,glfiltermodes[gltexfiltermode].mag); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,glfiltermodes[gltexfiltermode].min); - if (glinfo.maxanisotropy > 1.0) - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_ANISOTROPY_EXT,glanisotropy); - } - - for (sk=m->skinmap; sk; sk=sk->next) - for (j=0; j<(HICEFFECTMASK+1); j++) - { - if (!sk->texid[j]) continue; - bglBindTexture(GL_TEXTURE_2D,sk->texid[j]); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,glfiltermodes[gltexfiltermode].mag); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,glfiltermodes[gltexfiltermode].min); - if (glinfo.maxanisotropy > 1.0) - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_ANISOTROPY_EXT,glanisotropy); - } - } - } -} - -//-------------------------------------------------------------------------------------------------- -static int32_t LoadCacheOffsets(void); -float glox1, gloy1, glox2, gloy2; - -//Use this for both initialization and uninitialization of OpenGL. -static int32_t gltexcacnum = -1; -extern void freevbos(void); - -void polymost_cachesync(void) -{ - if (memcachedata && cachefilehandle != -1 && filelength(cachefilehandle) > memcachesize) - { - size_t len = filelength(cachefilehandle); - initprintf("Syncing memcache to texcache\n"); - memcachedata = (uint8_t *)Brealloc(memcachedata, len); - Blseek(cachefilehandle, memcachesize, BSEEK_SET); - Bread(cachefilehandle, memcachedata + memcachesize, len - memcachesize); - memcachesize = len; - } -} - - -void polymost_glreset() -{ - int32_t i; - pthtyp *pth, *next; - - for (i=MAXPALOOKUPS-1; i>=0; i--) - { - fogtable[i<<2] = palookupfog[i].r / 63.f; - fogtable[(i<<2)+1] = palookupfog[i].g / 63.f; - fogtable[(i<<2)+2] = palookupfog[i].b / 63.f; - fogtable[(i<<2)+3] = 0; - } - - //Reset if this is -1 (meaning 1st texture call ever), or > 0 (textures in memory) - if (gltexcacnum < 0) - { - gltexcacnum = 0; - - //Hack for polymost_dorotatesprite calls before 1st polymost_drawrooms() - gcosang = gcosang2 = ((double)16384)/262144.0; - gsinang = gsinang2 = ((double) 0)/262144.0; - } - else - { - for (i=GLTEXCACHEADSIZ-1; i>=0; i--) - { - for (pth=gltexcachead[i]; pth;) - { - next = pth->next; - if (pth->flags & 16) // fullbright textures - { - bglDeleteTextures(1,&pth->ofb->glpic); - Bfree(pth->ofb); - } - bglDeleteTextures(1,&pth->glpic); - Bfree(pth); - pth = next; - } - gltexcachead[i] = NULL; - } - clearskins(); - } - - if (polymosttext) bglDeleteTextures(1,&polymosttext); - polymosttext=0; - - freevbos(); - - memset(gltexcachead,0,sizeof(gltexcachead)); - glox1 = -1; - - /* - if (cachefilehandle != -1) - { - Bclose(cachefilehandle); - cachefilehandle = -1; - } - - if (cacheindexptr) - { - Bfclose(cacheindexptr); - cacheindexptr = NULL; - } - */ - - for (i = numcacheentries-1; i >= 0; i--) - if (cacheptrs[i]) - { - int32_t ii; - for (ii = numcacheentries-1; ii >= 0; ii--) - if (i != ii && cacheptrs[ii] == cacheptrs[i]) - { - /*OSD_Printf("removing duplicate cacheptr %d\n",ii);*/ - cacheptrs[ii] = NULL; - } - - Bfree(cacheptrs[i]); - cacheptrs[i] = NULL; - } - - polymost_cachesync(); -} - -// one-time initialization of OpenGL for polymost -void polymost_glinit() -{ - GLfloat col[4]; - int32_t i; - - if (!Bstrcmp(glinfo.vendor, "NVIDIA Corporation")) - { - bglHint(GL_FOG_HINT,GL_NICEST); - } - else - { - bglHint(GL_FOG_HINT,GL_DONT_CARE); - } - - bglFogi(GL_FOG_MODE, GL_EXP2); - bglFogf(GL_FOG_DENSITY,1.0); //must be > 0, default is 1 - /* bglFogf(GL_FOG_START,0.0); //default is 0 - bglFogf(GL_FOG_END,1.0); //default is 1 */ - col[0] = 0; col[1] = 0; col[2] = 0; col[3] = 0; //range:0 to 1 - bglFogfv(GL_FOG_COLOR,col); //default is 0,0,0,0 - - bglBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); - - //bglHint(GL_LINE_SMOOTH_HINT, GL_NICEST); - //bglEnable(GL_LINE_SMOOTH); - - if (glmultisample > 0 && glinfo.multisample) - { - if (glinfo.nvmultisamplehint) - bglHint(GL_MULTISAMPLE_FILTER_HINT_NV, glnvmultisamplehint ? GL_NICEST:GL_FASTEST); - bglEnable(GL_MULTISAMPLE_ARB); - } - - if (r_detailmapping && (!glinfo.multitex || !glinfo.envcombine)) - { - OSD_Printf("Your OpenGL implementation doesn't support detail mapping. Disabling...\n"); - r_detailmapping = 0; - } - - if (r_glowmapping && (!glinfo.multitex || !glinfo.envcombine)) - { - OSD_Printf("Your OpenGL implementation doesn't support glow mapping. Disabling...\n"); - r_glowmapping = 0; - } - - if (r_vbos && (!glinfo.vbos)) - { - OSD_Printf("Your OpenGL implementation doesn't support Vertex Buffer Objects. Disabling...\n"); - r_vbos = 0; - } - - bglEnableClientState(GL_VERTEX_ARRAY); - bglEnableClientState(GL_TEXTURE_COORD_ARRAY); - - if (cachefilehandle != -1) - { - Bclose(cachefilehandle); - cachefilehandle = -1; - } - - if (cacheindexptr) - { - Bfclose(cacheindexptr); - cacheindexptr = NULL; - } - - if (memcachedata) - { - Bfree(memcachedata); - memcachedata = NULL; - memcachesize = -1; - } - - for (i = numcacheentries-1; i >= 0; i--) - if (cacheptrs[i]) - { - int32_t ii; - for (ii = numcacheentries-1; ii >= 0; ii--) - if (i != ii && cacheptrs[ii] == cacheptrs[i]) - { - /*OSD_Printf("removing duplicate cacheptr %d\n",ii);*/ - cacheptrs[ii] = NULL; - } - - Bfree(cacheptrs[i]); - cacheptrs[i] = NULL; - } - - curcacheindex = firstcacheindex = (texcacheindex *)Bcalloc(1, sizeof(texcacheindex)); - numcacheentries = 0; - -// Bmemset(&firstcacheindex, 0, sizeof(texcacheindex)); -// Bmemset(&cacheptrs[0], 0, sizeof(cacheptrs)); - - hash_init(&h_texcache); - LoadCacheOffsets(); - - Bstrcpy(ptempbuf,TEXCACHEFILE); - Bstrcat(ptempbuf,".cache"); - cacheindexptr = Bfopen(ptempbuf, "at+"); - if (!cacheindexptr) - { - glusetexcache = 0; - initprintf("Unable to open cache index: %s\n",strerror(errno)); - return; - } - - fseek(cacheindexptr, 0, BSEEK_END); - if (!ftell(cacheindexptr)) - { - rewind(cacheindexptr); - Bfprintf(cacheindexptr,"// automatically generated by EDuke32, DO NOT MODIFY!\n"); - } - else rewind(cacheindexptr); - - cachefilehandle = Bopen(TEXCACHEFILE, BO_BINARY|BO_CREAT|BO_APPEND|BO_RDWR, BS_IREAD|BS_IWRITE); - - if (cachefilehandle < 0) - { - initprintf("Unable to open cache file: %s\n",strerror(errno)); - glusetexcache = 0; - return; - } - - memcachesize = filelength(cachefilehandle); - - if (memcachesize > 0) - { - memcachedata = (uint8_t *)Brealloc(memcachedata, memcachesize); - - if (!memcachedata) - { - initprintf("Failed allocating %d bytes for memcache\n", memcachesize); - memcachesize = -1; - } - - if (Bread(cachefilehandle, memcachedata, memcachesize) != memcachesize) - { - initprintf("Failed reading texcache into memcache!\n"); - Bfree(memcachedata); - memcachesize = -1; - } - } - - i = 0; - - curcacheindex = firstcacheindex; - while (curcacheindex->next) - { - i += curcacheindex->len; - curcacheindex = curcacheindex->next; - } - - i = Blseek(cachefilehandle, 0, BSEEK_END)-i; - if (i) - initprintf("Cache contains %d bytes of garbage data\n",i); -// Blseek(cachefilehandle, 0, BSEEK_SET); -} - -void invalidatecache(void) -{ - int32_t i; - - r_downsizevar = r_downsize; // update the cvar representation when the menu changes r_downsize - - polymost_glreset(); - - if (cachefilehandle != -1) - { - Bclose(cachefilehandle); - cachefilehandle = -1; - } - - if (cacheindexptr) - { - Bfclose(cacheindexptr); - cacheindexptr = NULL; - } - - if (memcachedata) - { - Bfree(memcachedata); - memcachedata = NULL; - memcachesize = -1; - } - - for (i = numcacheentries-1; i >= 0; i--) - if (cacheptrs[i]) - { - int32_t ii; - for (ii = numcacheentries-1; ii >= 0; ii--) - if (i != ii && cacheptrs[ii] == cacheptrs[i]) - { - /*OSD_Printf("removing duplicate cacheptr %d\n",ii);*/ - cacheptrs[ii] = NULL; - } - - Bfree(cacheptrs[i]); - cacheptrs[i] = NULL; - } - - curcacheindex = firstcacheindex = (texcacheindex *)Bcalloc(1, sizeof(texcacheindex)); - numcacheentries = 0; - -// Bmemset(&firstcacheindex, 0, sizeof(texcacheindex)); -// Bmemset(&cacheptrs[0], 0, sizeof(cacheptrs)); - - hash_init(&h_texcache); -// LoadCacheOffsets(); - - Bstrcpy(ptempbuf,TEXCACHEFILE); - unlink(ptempbuf); - Bstrcat(ptempbuf,".cache"); - unlink(ptempbuf); - cacheindexptr = Bfopen(ptempbuf, "at+"); - if (!cacheindexptr) - { - glusetexcache = 0; - initprintf("Unable to open cache index: %s\n",strerror(errno)); - return; - } - - Bfprintf(cacheindexptr,"// automatically generated by EDuke32, DO NOT MODIFY!\n"); - - cachefilehandle = Bopen(TEXCACHEFILE,BO_BINARY|BO_CREAT|BO_TRUNC|BO_APPEND|BO_RDWR,BS_IREAD|BS_IWRITE); - - if (cachefilehandle < 0) - { - initprintf("Unable to open cache file: %s\n",strerror(errno)); - glusetexcache = 0; - return; - } -} - -void resizeglcheck() -{ - float m[4][4]; - int32_t fovcorrect; - - if (glredbluemode < lastglredbluemode) - { - glox1 = -1; - bglColorMask(1,1,1,1); - } - else if (glredbluemode != lastglredbluemode) - { - redblueclearcnt = 0; - } - lastglredbluemode = glredbluemode; - - //FUK - if (lastglpolygonmode != glpolygonmode) - { - lastglpolygonmode = glpolygonmode; - switch (glpolygonmode) - { - default: - case 0: - bglPolygonMode(GL_FRONT_AND_BACK,GL_FILL); break; - case 1: - bglPolygonMode(GL_FRONT_AND_BACK,GL_LINE); break; - case 2: - bglPolygonMode(GL_FRONT_AND_BACK,GL_POINT); break; - } - } - if (glpolygonmode) //FUK - { - bglClearColor(1.0,1.0,1.0,0.0); - bglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - bglDisable(GL_TEXTURE_2D); - } - - if ((glox1 != windowx1) || (gloy1 != windowy1) || (glox2 != windowx2) || (gloy2 != windowy2)) - { - double ratio = 1.05; - - if (glwidescreen == 1) - ratio = 1.2f; - else if (glprojectionhacks == 1) - { - double mul = (gshang*gshang); - ratio += mul*mul*mul*mul; - } - else if (glprojectionhacks == 2) - { - if (gshang > 0.7f) - ratio += 4.f*(gshang-0.7f); - if (gshang < -0.7f) - ratio += 4.f*(-gshang-0.7f); - } - - glox1 = (float)windowx1; gloy1 = (float)windowy1; - glox2 = (float)windowx2; gloy2 = (float)windowy2; - - fovcorrect = (int32_t)(glprojectionhacks?(glwidescreen?0:(((windowx2-windowx1+1) * ratio) - (windowx2-windowx1+1))):0); - - bglViewport(windowx1 - (fovcorrect / 2), yres-(windowy2+1),windowx2-windowx1+1 + fovcorrect, windowy2-windowy1+1); - - bglMatrixMode(GL_PROJECTION); - memset(m,0,sizeof(m)); - m[0][0] = (float)ydimen / (glprojectionhacks?ratio:1.f); m[0][2] = 1.0; - m[1][1] = (float)xdimen; m[1][2] = 1.0; - m[2][2] = 1.0; m[2][3] = (float)ydimen / (glprojectionhacks?ratio:1.f); - m[3][2] =-1.0; - bglLoadMatrixf(&m[0][0]); - //bglLoadIdentity(); - - bglMatrixMode(GL_MODELVIEW); - bglLoadIdentity(); - -#ifdef USE_OPENGL - if (!nofog) bglEnable(GL_FOG); -#endif - - //bglEnable(GL_TEXTURE_2D); - } -} - -void fixtransparency(coltype *dapic, int32_t daxsiz, int32_t daysiz, int32_t daxsiz2, int32_t daysiz2, int32_t dameth) -{ - coltype *wpptr; - int32_t j, x, y, r, g, b, dox, doy, naxsiz2; - - dox = daxsiz2-1; doy = daysiz2-1; - if (dameth&4) { dox = min(dox,daxsiz); doy = min(doy,daysiz); } - else { daxsiz = daxsiz2; daysiz = daysiz2; } //Make repeating textures duplicate top/left parts - - daxsiz--; daysiz--; naxsiz2 = -daxsiz2; //Hacks for optimization inside loop - - //Set transparent pixels to average color of neighboring opaque pixels - //Doing this makes bilinear filtering look much better for masked textures (I.E. sprites) - for (y=doy; y>=0; y--) - { - wpptr = &dapic[y*daxsiz2+dox]; - for (x=dox; x>=0; x--,wpptr--) - { - if (wpptr->a) continue; - r = g = b = j = 0; - if ((x> 0) && (wpptr[ -1].a)) { r += (int32_t)wpptr[ -1].r; g += (int32_t)wpptr[ -1].g; b += (int32_t)wpptr[ -1].b; j++; } - if ((x 0) && (wpptr[naxsiz2].a)) { r += (int32_t)wpptr[naxsiz2].r; g += (int32_t)wpptr[naxsiz2].g; b += (int32_t)wpptr[naxsiz2].b; j++; } - if ((yr = r ; wpptr->g = g ; wpptr->b = b ; break; - case 2: - wpptr->r = ((r + 1)>>1); wpptr->g = ((g + 1)>>1); wpptr->b = ((b + 1)>>1); break; - case 3: - wpptr->r = ((r*85+128)>>8); wpptr->g = ((g*85+128)>>8); wpptr->b = ((b*85+128)>>8); break; - case 4: - wpptr->r = ((r + 2)>>2); wpptr->g = ((g + 2)>>2); wpptr->b = ((b + 2)>>2); break; - default: - break; - } - } - } -} - -void uploadtexture(int32_t doalloc, int32_t xsiz, int32_t ysiz, int32_t intexfmt, int32_t texfmt, coltype *pic, int32_t tsizx, int32_t tsizy, int32_t dameth) -{ - coltype *wpptr, *rpptr; - int32_t x2, y2, j, js=0, x3, y3, y, x, r, g, b, a, k; - int32_t hi = (dameth&8192)?1:0; - int32_t nocompress = (dameth&4096)?1:0; - - dameth &= ~(8192|4096); - - if (gltexmaxsize <= 0) - { - GLint i = 0; - bglGetIntegerv(GL_MAX_TEXTURE_SIZE, &i); - if (!i) gltexmaxsize = 6; // 2^6 = 64 == default GL max texture size - else - { - gltexmaxsize = 0; - for (; i>1; i>>=1) gltexmaxsize++; - } - } - - js = max(0,min(gltexmaxsize-1,gltexmiplevel)); - gltexmiplevel = js; - while ((xsiz>>js) > (1<>js) > (1< 1) || (y2 > 1); j++) - { - //x3 = ((x2+1)>>1); y3 = ((y2+1)>>1); - x3 = max(1, x2 >> 1); y3 = max(1, y2 >> 1); // this came from the GL_ARB_texture_non_power_of_two spec - for (y=0; yr = r; wpptr->g = g; wpptr->b = b; wpptr->a = a; break; - case 2: - wpptr->r = ((r+1)>>1); wpptr->g = ((g+1)>>1); wpptr->b = ((b+1)>>1); wpptr->a = ((a+1)>>1); break; - case 3: - wpptr->r = ((r*85+128)>>8); wpptr->g = ((g*85+128)>>8); wpptr->b = ((b*85+128)>>8); wpptr->a = ((a*85+128)>>8); break; - case 4: - wpptr->r = ((r+2)>>2); wpptr->g = ((g+2)>>2); wpptr->b = ((b+2)>>2); wpptr->a = ((a+2)>>2); break; - default: - break; - } - //if (wpptr->a) wpptr->a = 255; - } - } - if (tsizx >= 0) fixtransparency(pic,(tsizx+(1<>j,(tsizy+(1<>j,x3,y3,dameth); - if (j >= js) - { - if (doalloc&1) - bglTexImage2D(GL_TEXTURE_2D,j-js,intexfmt,x3,y3,0,texfmt,GL_UNSIGNED_BYTE,pic); //loading 1st time - else - bglTexSubImage2D(GL_TEXTURE_2D,j-js,0,0,x3,y3,texfmt,GL_UNSIGNED_BYTE,pic); //overwrite old texture - } - x2 = x3; y2 = y3; - } -#endif -} - -int32_t gloadtile_art(int32_t dapic, int32_t dapal, int32_t dameth, pthtyp *pth, int32_t doalloc) -{ - coltype *pic, *wpptr; - int32_t x, y, x2, y2, xsiz, ysiz, dacol, tsizx, tsizy; - char hasalpha = 0, hasfullbright = 0; - - tsizx = tilesizx[dapic]; - tsizy = tilesizy[dapic]; - if (!glinfo.texnpot) - { - for (xsiz=1; xsiz= tsizx) || (y >= tsizy))) //Clamp texture - { wpptr->r = wpptr->g = wpptr->b = wpptr->a = 0; continue; } - if (x < tsizx) x2 = x; else x2 = x-tsizx; - dacol = (int32_t)(*(char *)(waloff[dapic]+x2*tsizy+y2)); - if (!fullbrightloadingpass) - { - // regular texture - if ((dacol > 239) && (dacol != 255)) - hasfullbright = 1; - wpptr->a = 255; - } - else if (fullbrightloadingpass == 1) - { - // texture with only fullbright areas - if (dacol < 240) // regular colors - { - wpptr->a = 0; hasalpha = 1; - } - else // fullbright - { - wpptr->a = 255; - } - } - if (dacol != 255) - dacol = (int32_t)((uint8_t)palookup[dapal][dacol]); - else - { - wpptr->a = 0; hasalpha = 1; - } - if (gammabrightness) - { - wpptr->r = curpalette[dacol].r; - wpptr->g = curpalette[dacol].g; - wpptr->b = curpalette[dacol].b; - } - else - { - wpptr->r = britable[curbrightness][ curpalette[dacol].r ]; - wpptr->g = britable[curbrightness][ curpalette[dacol].g ]; - wpptr->b = britable[curbrightness][ curpalette[dacol].b ]; - } - } - } - } - - if (doalloc) bglGenTextures(1,(GLuint *)&pth->glpic); //# of textures (make OpenGL allocate structure) - bglBindTexture(GL_TEXTURE_2D,pth->glpic); - - fixtransparency(pic,tsizx,tsizy,xsiz,ysiz,dameth); - uploadtexture(doalloc,xsiz,ysiz,hasalpha?GL_RGBA:GL_RGB,GL_RGBA,pic,tsizx,tsizy,dameth); - - if (gltexfiltermode < 0) gltexfiltermode = 0; - else if (gltexfiltermode >= (int32_t)numglfiltermodes) gltexfiltermode = numglfiltermodes-1; - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,glfiltermodes[gltexfiltermode].mag); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,glfiltermodes[gltexfiltermode].min); - - if (glinfo.maxanisotropy > 1.0) - { - if (glanisotropy <= 0 || glanisotropy > glinfo.maxanisotropy) glanisotropy = (int32_t)glinfo.maxanisotropy; - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_ANISOTROPY_EXT,glanisotropy); - } - - if (!(dameth&4)) - { - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); - } - else - { - //For sprite textures, clamping looks better than wrapping - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,glinfo.clamptoedge?GL_CLAMP_TO_EDGE:GL_CLAMP); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,glinfo.clamptoedge?GL_CLAMP_TO_EDGE:GL_CLAMP); - } - - if (pic) Bfree(pic); - - pth->picnum = dapic; - pth->palnum = dapal; - pth->effects = 0; - pth->flags = ((dameth&4)>>2) | (hasalpha<<3); - pth->hicr = NULL; - - if ((hasfullbright) && (!fullbrightloadingpass)) - { - // load the ONLY texture that'll be assembled with the regular one to make the final texture with fullbright pixels - fullbrightloadingpass = 1; - pth->ofb = (pthtyp *)Bcalloc(1,sizeof(pthtyp)); - if (!pth->ofb) return 1; - pth->flags |= (hasfullbright<<4); - if (gloadtile_art(dapic, dapal, dameth, pth->ofb, 1)) return 1; - - fullbrightloadingpass = 0; - } - return 0; -} - -// JONOF'S COMPRESSED TEXTURE CACHE STUFF --------------------------------------------------- - -static int32_t LoadCacheOffsets(void) -{ - int32_t foffset, fsize, i; - char *fname; - - scriptfile *script; - - Bstrcpy(ptempbuf,TEXCACHEFILE); - Bstrcat(ptempbuf,".cache"); - script = scriptfile_fromfile(ptempbuf); - - if (!script) return -1; - - while (!scriptfile_eof(script)) - { - if (scriptfile_getstring(script, &fname)) break; // filename - if (scriptfile_getnumber(script, &foffset)) break; // offset in cache - if (scriptfile_getnumber(script, &fsize)) break; // size - - i = hash_find(&h_texcache,fname); - if (i > -1) - { - // update an existing entry - texcacheindex *t = cacheptrs[i]; - t->offset = foffset; - t->len = fsize; - /*initprintf("%s %d got a match for %s offset %d\n",__FILE__, __LINE__, fname,foffset);*/ - } - else - { - Bstrncpy(curcacheindex->name, fname, BMAX_PATH); - curcacheindex->offset = foffset; - curcacheindex->len = fsize; - curcacheindex->next = (texcacheindex *)Bcalloc(1, sizeof(texcacheindex)); - hash_add(&h_texcache, Bstrdup(fname), numcacheentries, 1); - cacheptrs[numcacheentries++] = curcacheindex; - curcacheindex = curcacheindex->next; - } - } - - scriptfile_close(script); - return 0; -} - -void phex(char v, char *s) -{ - int32_t x; - x = v>>4; - s[0] = x<10 ? (x+'0') : (x-10+'a'); - x = v&15; - s[1] = x<10 ? (x+'0') : (x-10+'a'); -} - -int32_t trytexcache(char *fn, int32_t len, int32_t dameth, char effect, texcacheheader *head) -{ - int32_t fp, err=0; - char cachefn[BMAX_PATH], *cp; - uint8_t mdsum[16]; - - if (!glusetexcompr || !glusetexcache || !cacheindexptr || cachefilehandle < 0) return -1; - if (!glinfo.texcompr || !bglCompressedTexImage2DARB || !bglGetCompressedTexImageARB) - { - // lacking the necessary extensions to do this - OSD_Printf("Warning: the GL driver lacks necessary functions to use caching\n"); - glusetexcache = 0; - return -1; - } - - md4once((uint8_t *)fn, strlen(fn), mdsum); -// for (cp = cachefn, fp = 0; (*cp = TEXCACHEFILE[fp]); cp++,fp++); -// *(cp++) = '/'; - cp = cachefn; - for (fp = 0; fp < 16; phex(mdsum[fp++], cp), cp+=2); - Bsprintf(cp, "-%x-%x%x", len, dameth, effect); - - { - int32_t offset = 0; - int32_t len = 0; - int32_t i; - - i = hash_find(&h_texcache,cachefn); - if (i > -1) - { - texcacheindex *t = cacheptrs[i]; - if (!t) - i = -1; - else - { - len = t->len; - offset = t->offset; - } - /*initprintf("%s %d got a match for %s offset %d\n",__FILE__, __LINE__, cachefn,offset);*/ - } - - if (i < 0) - return -1; // didn't find it - - cachepos = offset; - } - -// initprintf("Loading cached tex: %s\n", cachefn); - - if (memcachedata && memcachesize >= (signed)(cachepos + sizeof(texcacheheader))) - { -// initprintf("using memcache!\n"); - Bmemcpy(head, memcachedata + cachepos, sizeof(texcacheheader)); - cachepos += sizeof(texcacheheader); - } - else - { - Blseek(cachefilehandle, cachepos, BSEEK_SET); - if (Bread(cachefilehandle, head, sizeof(texcacheheader)) < (int32_t)sizeof(texcacheheader)) - { - cachepos += sizeof(texcacheheader); - err = 1; - goto failure; - } - cachepos += sizeof(texcacheheader); - } - - if (Bmemcmp(head->magic, TEXCACHEMAGIC, 4)) { err=2; goto failure; } - head->xdim = B_LITTLE32(head->xdim); - head->ydim = B_LITTLE32(head->ydim); - head->flags = B_LITTLE32(head->flags); - head->quality = B_LITTLE32(head->quality); - - if ((head->flags & 4) && glusetexcache != 2) { err=3; goto failure; } - if (!(head->flags & 4) && glusetexcache == 2) { err=4; goto failure; } - - if (!(head->flags & 8) && head->quality != r_downsize) return -1; // handle nocompress - if (gltexmaxsize && (head->xdim > (1<ydim > (1<flags & 1)) { err=6; goto failure; } - - return cachefilehandle; -failure: - initprintf("cache miss: %d\n", err); - return -1; -} - -void writexcache(char *fn, int32_t len, int32_t dameth, char effect, texcacheheader *head) -{ - int32_t fp; - char cachefn[BMAX_PATH], *cp; - uint8_t mdsum[16]; - texcachepicture pict; - char *pic = NULL, *packbuf = NULL; - void *midbuf = NULL; - uint32_t alloclen=0, level, miplen; - uint32_t padx=0, pady=0; - GLint gi; - int32_t offset = 0; - - if (!glinfo.texcompr || !glusetexcompr || !glusetexcache) return; - if (!bglCompressedTexImage2DARB || !bglGetCompressedTexImageARB) - { - // lacking the necessary extensions to do this - OSD_Printf("Warning: the GL driver lacks necessary functions to use caching\n"); - glusetexcache = 0; - return; - } - if (!cacheindexptr || cachefilehandle < 0) - { - OSD_Printf("Warning: no active cache!\n"); - return; - } - - gi = GL_FALSE; - bglGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED_ARB, (GLint *)&gi); - if (gi != GL_TRUE) - { - OSD_Printf("Error: glGetTexLevelParameteriv returned GL_FALSE!\n"); - return; - } - - md4once((uint8_t *)fn, strlen(fn), mdsum); - - cp = cachefn; - for (fp = 0; fp < 16; phex(mdsum[fp++], cp), cp+=2); - Bsprintf(cp, "-%x-%x%x", len, dameth, effect); - - Blseek(cachefilehandle, 0, BSEEK_END); - - offset = Blseek(cachefilehandle, 0, BSEEK_CUR); -// OSD_Printf("Caching %s, offset 0x%x\n", cachefn, offset); - - Bmemcpy(head->magic, TEXCACHEMAGIC, 4); // sizes are set by caller - - if (glusetexcache == 2) head->flags |= 4; - - head->xdim = B_LITTLE32(head->xdim); - head->ydim = B_LITTLE32(head->ydim); - head->flags = B_LITTLE32(head->flags); - head->quality = B_LITTLE32(head->quality); - - if (Bwrite(cachefilehandle, head, sizeof(texcacheheader)) != sizeof(texcacheheader)) goto failure; - - bglGetError(); - for (level = 0; level==0 || (padx > 1 || pady > 1); level++) - { - bglGetTexLevelParameteriv(GL_TEXTURE_2D, level, GL_TEXTURE_COMPRESSED_ARB, (GLint *)&gi); - if (bglGetError() != GL_NO_ERROR) goto failure; - if (gi != GL_TRUE) goto failure; // an uncompressed mipmap - bglGetTexLevelParameteriv(GL_TEXTURE_2D, level, GL_TEXTURE_INTERNAL_FORMAT, (GLint *)&gi); - if (bglGetError() != GL_NO_ERROR) goto failure; -#ifdef __APPLE__ - if (pr_ati_textureformat_one && gi == 1) gi = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; -#endif - pict.format = B_LITTLE32(gi); - bglGetTexLevelParameteriv(GL_TEXTURE_2D, level, GL_TEXTURE_WIDTH, (GLint *)&gi); - if (bglGetError() != GL_NO_ERROR) goto failure; - padx = gi; pict.xdim = B_LITTLE32(gi); - bglGetTexLevelParameteriv(GL_TEXTURE_2D, level, GL_TEXTURE_HEIGHT, (GLint *)&gi); - if (bglGetError() != GL_NO_ERROR) goto failure; - pady = gi; pict.ydim = B_LITTLE32(gi); - bglGetTexLevelParameteriv(GL_TEXTURE_2D, level, GL_TEXTURE_BORDER, (GLint *)&gi); - if (bglGetError() != GL_NO_ERROR) goto failure; - pict.border = B_LITTLE32(gi); - bglGetTexLevelParameteriv(GL_TEXTURE_2D, level, GL_TEXTURE_DEPTH, (GLint *)&gi); - if (bglGetError() != GL_NO_ERROR) goto failure; - pict.depth = B_LITTLE32(gi); - bglGetTexLevelParameteriv(GL_TEXTURE_2D, level, GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB, (GLint *)&gi); - if (bglGetError() != GL_NO_ERROR) goto failure; - miplen = (int32_t)gi; pict.size = B_LITTLE32(gi); - - if (alloclen < miplen) - { - void *picc = Brealloc(pic, miplen); - if (!picc) goto failure; else pic = picc; - alloclen = miplen; - - picc = Brealloc(packbuf, alloclen+16); - if (!picc) goto failure; else packbuf = picc; - - picc = Brealloc(midbuf, miplen); - if (!picc) goto failure; else midbuf = picc; - } - - bglGetCompressedTexImageARB(GL_TEXTURE_2D, level, pic); - if (bglGetError() != GL_NO_ERROR) goto failure; - - if (Bwrite(cachefilehandle, &pict, sizeof(texcachepicture)) != sizeof(texcachepicture)) goto failure; - if (dxtfilter(cachefilehandle, &pict, pic, midbuf, packbuf, miplen)) goto failure; - } - - { - int32_t i = hash_find(&h_texcache,cachefn); - if (i > -1) - { - // update an existing entry - texcacheindex *t = cacheptrs[i]; - t->offset = offset; - t->len = Blseek(cachefilehandle, 0, BSEEK_CUR) - t->offset; - /*initprintf("%s %d got a match for %s offset %d\n",__FILE__, __LINE__, cachefn,offset);*/ - - if (cacheindexptr) - { - fseek(cacheindexptr, 0, BSEEK_END); - Bfprintf(cacheindexptr, "%s %d %d\n", t->name, t->offset, t->len); - } - else OSD_Printf("wtf?\n"); - } - else - { - Bstrcpy(curcacheindex->name, cachefn); - curcacheindex->offset = offset; - curcacheindex->len = Blseek(cachefilehandle, 0, BSEEK_CUR) - curcacheindex->offset; - curcacheindex->next = (texcacheindex *)Bcalloc(1, sizeof(texcacheindex)); - - if (cacheindexptr) - { - fseek(cacheindexptr, 0, BSEEK_END); - Bfprintf(cacheindexptr, "%s %d %d\n", curcacheindex->name, curcacheindex->offset, curcacheindex->len); - } - else OSD_Printf("wtf?\n"); - - hash_add(&h_texcache, Bstrdup(cachefn), numcacheentries, 0); - cacheptrs[numcacheentries++] = curcacheindex; - curcacheindex = curcacheindex->next; - } - } - - goto success; - -failure: - initprintf("ERROR: cache failure!\n"); - curcacheindex->offset = 0; - Bmemset(curcacheindex->name,0,sizeof(curcacheindex->name)); - -success: - if (midbuf) Bfree(midbuf); - if (pic) Bfree(pic); - if (packbuf) Bfree(packbuf); -} - -int32_t gloadtile_cached(int32_t fil, texcacheheader *head, int32_t *doalloc, pthtyp *pth,int32_t dapalnum) -{ - int32_t level, r; - texcachepicture pict; - char *pic = NULL, *packbuf = NULL; - void *midbuf = NULL; - int32_t alloclen=0; - - UNREFERENCED_PARAMETER(dapalnum); - - if (*doalloc&1) - { - bglGenTextures(1,(GLuint *)&pth->glpic); //# of textures (make OpenGL allocate structure) - *doalloc |= 2; // prevents bglGenTextures being called again if we fail in here - } - bglBindTexture(GL_TEXTURE_2D,pth->glpic); - - pth->sizx = head->xdim; - pth->sizy = head->ydim; - - bglGetError(); - - // load the mipmaps - for (level = 0; level==0 || (pict.xdim > 1 || pict.ydim > 1); level++) - { - if (memcachedata && memcachesize >= (signed)(cachepos + sizeof(texcachepicture))) - { - // initprintf("using memcache!\n"); - Bmemcpy(&pict, memcachedata + cachepos, sizeof(texcachepicture)); - cachepos += sizeof(texcachepicture); - } - else - { - Blseek(fil, cachepos, BSEEK_SET); - r = Bread(fil, &pict, sizeof(texcachepicture)); - cachepos += sizeof(texcachepicture); - if (r < (int32_t)sizeof(texcachepicture)) goto failure; - } - - pict.size = B_LITTLE32(pict.size); - pict.format = B_LITTLE32(pict.format); - pict.xdim = B_LITTLE32(pict.xdim); - pict.ydim = B_LITTLE32(pict.ydim); - pict.border = B_LITTLE32(pict.border); - pict.depth = B_LITTLE32(pict.depth); - - if (alloclen < pict.size) - { - void *picc = Brealloc(pic, pict.size); - if (!picc) goto failure; else pic = picc; - alloclen = pict.size; - - picc = Brealloc(packbuf, alloclen+16); - if (!picc) goto failure; else packbuf = picc; - - picc = Brealloc(midbuf, pict.size); - if (!picc) goto failure; else midbuf = picc; - } - - if (dedxtfilter(fil, &pict, pic, midbuf, packbuf, (head->flags&4)==4)) goto failure; - - bglCompressedTexImage2DARB(GL_TEXTURE_2D,level,pict.format,pict.xdim,pict.ydim,pict.border, - pict.size,pic); - if (bglGetError() != GL_NO_ERROR) goto failure; - - { - GLint format; - bglGetTexLevelParameteriv(GL_TEXTURE_2D, level, GL_TEXTURE_INTERNAL_FORMAT, &format); - if (bglGetError() != GL_NO_ERROR) goto failure; -// format = B_LITTLE32(format); - if (pict.format != format) - { - OSD_Printf("invalid texture cache file format %d %d\n",pict.format, format); - goto failure; - } - } - - } - - if (midbuf) Bfree(midbuf); - if (pic) Bfree(pic); - if (packbuf) Bfree(packbuf); - return 0; -failure: - initprintf("failure!!!\n"); - if (midbuf) Bfree(midbuf); - if (pic) Bfree(pic); - if (packbuf) Bfree(packbuf); - return -1; -} -// --------------------------------------------------- JONOF'S COMPRESSED TEXTURE CACHE STUFF -//static -int32_t gloadtile_hi(int32_t dapic,int32_t dapalnum, int32_t facen, hicreplctyp *hicr, int32_t dameth, pthtyp *pth, int32_t doalloc, char effect) -{ - coltype *pic = NULL, *rpptr; - int32_t j, x, y, xsiz=0, ysiz=0, tsizx, tsizy; - int32_t r, g, b; - - char *picfil = NULL, *fn, hasalpha = 255; - int32_t picfillen, texfmt = GL_RGBA, intexfmt = GL_RGBA, filh; - - int32_t cachefil = -1; - texcacheheader cachead; - - static coltype *lastpic = NULL; - static char *lastfn = NULL; - static int32_t lastsize = 0; - - int32_t startticks=0, willprint=0; - - if (!hicr) return -1; - if (facen > 0) - { - if (!hicr->skybox) return -1; - if (facen > 6) return -1; - if (!hicr->skybox->face[facen-1]) return -1; - fn = hicr->skybox->face[facen-1]; - } - else - { - if (!hicr->filename) return -1; - fn = hicr->filename; - } - - if ((filh = kopen4load(fn, 0)) < 0) - { - OSD_Printf("hightile: %s (pic %d) not found\n", fn, dapic); - if (facen > 0) - hicr->skybox->ignore = 1; - else - hicr->ignore = 1; - return -1; - } - picfillen = kfilelength(filh); - - kclose(filh); // FIXME: shouldn't have to do this. bug in cache1d.c - - cachefil = trytexcache(fn, picfillen+(dapalnum<<8), dameth, effect, &cachead); - if (cachefil >= 0 && !gloadtile_cached(cachefil, &cachead, &doalloc, pth, dapalnum)) - { - tsizx = cachead.xdim; - tsizy = cachead.ydim; - hasalpha = (cachead.flags & 2) ? 0 : 255; - } - else - { - cachefil = -1; // the compressed version will be saved to disk - - if ((filh = kopen4load(fn, 0)) < 0) return -1; - - picfil = (char *)Bmalloc(picfillen+1); if (!picfil) { kclose(filh); return 1; } - kread(filh, picfil, picfillen); - kclose(filh); - - // tsizx/y = replacement texture's natural size - // xsiz/y = 2^x size of replacement - - kpgetdim(picfil,picfillen,&tsizx,&tsizy); - if (tsizx == 0 || tsizy == 0) { Bfree(picfil); return -1; } - pth->sizx = tsizx; - pth->sizy = tsizy; - - if (!glinfo.texnpot) - { - for (xsiz=1; xsiz tsizx) //Copy left to right - { - int32_t *lptr = (int32_t *)pic; - for (y=0; y tsizy) //Copy top to bottom - Bmemcpy(&pic[xsiz*tsizy],pic,(ysiz-tsizy)*xsiz<<2); - } - if (!glinfo.bgra) - { - for (j=xsiz*ysiz-1; j>=0; j--) - { - swapchar(&pic[j].r, &pic[j].b); - } - } - else texfmt = GL_BGRA; - Bfree(picfil); picfil = 0; - - if (tsizx>>r_downsize <= tilesizx[dapic] || tsizy>>r_downsize <= tilesizy[dapic]) - hicr->flags |= 17; - - if (glinfo.texcompr && glusetexcompr && !(hicr->flags & 1)) - intexfmt = (hasalpha == 255) ? GL_COMPRESSED_RGB_ARB : GL_COMPRESSED_RGBA_ARB; - else if (hasalpha == 255) intexfmt = GL_RGB; - - if ((doalloc&3)==1) bglGenTextures(1,(GLuint *)&pth->glpic); //# of textures (make OpenGL allocate structure) - bglBindTexture(GL_TEXTURE_2D,pth->glpic); - - fixtransparency(pic,tsizx,tsizy,xsiz,ysiz,dameth); - uploadtexture(doalloc,xsiz,ysiz,intexfmt,texfmt,pic,-1,tsizy,dameth|8192|(hicr->flags & 16?4096:0)); - } - - // precalculate scaling parameters for replacement - if (facen > 0) - { - pth->scalex = ((float)tsizx) / 64.0; - pth->scaley = ((float)tsizy) / 64.0; - } - else - { - pth->scalex = ((float)tsizx) / ((float)tilesizx[dapic]); - pth->scaley = ((float)tsizy) / ((float)tilesizy[dapic]); - } - - if (gltexfiltermode < 0) gltexfiltermode = 0; - else if (gltexfiltermode >= (int32_t)numglfiltermodes) gltexfiltermode = numglfiltermodes-1; - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,glfiltermodes[gltexfiltermode].mag); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,glfiltermodes[gltexfiltermode].min); - - if (glinfo.maxanisotropy > 1.0) - { - if (glanisotropy <= 0 || glanisotropy > glinfo.maxanisotropy) glanisotropy = (int32_t)glinfo.maxanisotropy; - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_ANISOTROPY_EXT,glanisotropy); - } - - if (!(dameth&4)) - { - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); - } - else - { - //For sprite textures, clamping looks better than wrapping - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,glinfo.clamptoedge?GL_CLAMP_TO_EDGE:GL_CLAMP); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,glinfo.clamptoedge?GL_CLAMP_TO_EDGE:GL_CLAMP); - } - - if (pic) Bfree(pic); - - if (tsizx>>r_downsize <= tilesizx[dapic] || tsizy>>r_downsize <= tilesizy[dapic]) - hicr->flags |= 17; - - pth->picnum = dapic; - pth->effects = effect; - pth->flags = ((dameth&4)>>2) + 2 + ((facen>0)<<2); if (hasalpha != 255) pth->flags |= 8; - pth->skyface = facen; - pth->hicr = hicr; - - if (glinfo.texcompr && glusetexcompr && glusetexcache && !(hicr->flags & 1)) - if (cachefil < 0) - { - // save off the compressed version - if (hicr->flags & 16) cachead.quality = 0; - else cachead.quality = r_downsize; - cachead.xdim = tsizx>>cachead.quality; - cachead.ydim = tsizy>>cachead.quality; - x = 0; - for (j=0; j<31; j++) - { - if (xsiz == pow2long[j]) { x |= 1; } - if (ysiz == pow2long[j]) { x |= 2; } - } - cachead.flags = (x!=3) | (hasalpha != 255 ? 2 : 0) | (hicr->flags & 16?8:0); // handle nocompress -/// OSD_Printf("Caching \"%s\"\n", fn); - writexcache(fn, picfillen+(dapalnum<<8), dameth, effect, &cachead); - - if (willprint) - { - int32_t etime = getticks()-startticks; - if (etime>=MIN_CACHETIME_PRINT) - OSD_Printf("Load tile %4d: p%d-m%d-e%d %s... cached... %d ms\n", dapic, dapalnum, dameth, effect, - willprint==2 ? fn : "", etime); - willprint = 0; - } - else - OSD_Printf("Cached \"%s\"\n", fn); - } - - if (willprint) - { - int32_t etime = getticks()-startticks; - if (etime>=MIN_CACHETIME_PRINT) - OSD_Printf("Load tile %4d: p%d-m%d-e%d %s... %d ms\n", dapic, dapalnum, dameth, effect, - willprint==2 ? fn : "", etime); - } - - return 0; -} - -#endif - -//(dpx,dpy) specifies an n-sided polygon. The polygon must be a convex clockwise loop. -// n must be <= 8 (assume clipping can double number of vertices) -//method: 0:solid, 1:masked(255 is transparent), 2:transluscent #1, 3:transluscent #2 -// +4 means it's a sprite, so wraparound isn't needed -static int32_t pow2xsplit = 0, skyclamphack = 0; - -void drawpoly(double *dpx, double *dpy, int32_t n, int32_t method) -{ - double ngdx = 0.0, ngdy = 0.0, ngdo = 0.0, ngux = 0.0, nguy = 0.0, nguo = 0.0; - double ngvx = 0.0, ngvy = 0.0, ngvo = 0.0, dp, up, vp, rdp, du0 = 0.0, du1 = 0.0, dui, duj; - double ngdx2, ngux2, ngvx2; - double f, r, ox, oy, oz, ox2, oy2, oz2, dd[16], uu[16], vv[16], px[16], py[16], uoffs; - int32_t i, j, k, x, y, z, nn, ix0, ix1, mini, maxi, tsizx, tsizy, tsizxm1 = 0, tsizym1 = 0, ltsizy = 0; - int32_t xx, yy, xi, d0, u0, v0, d1, u1, v1, xmodnice = 0, ymulnice = 0, dorot; - char dacol = 0, *walptr, *palptr = NULL, *vidp, *vide; -#ifdef USE_OPENGL - pthtyp *pth, *detailpth, *glowpth; - int32_t texunits = GL_TEXTURE0_ARB; -#endif - // backup of the n for possible redrawing of fullbright - int32_t n_ = n, method_ = method; - - if (method == -1) return; - - if (n == 3) - { - if ((dpx[0]-dpx[1])*(dpy[2]-dpy[1]) >= (dpx[2]-dpx[1])*(dpy[0]-dpy[1])) return; //for triangle - } - else - { - f = 0; //f is area of polygon / 2 - for (i=n-2,j=n-1,k=0; k= MAXTILES) globalpicnum = 0; - setgotpic(globalpicnum); - tsizx = tilesizx[globalpicnum]; - tsizy = tilesizy[globalpicnum]; - if (palookup[globalpal] == NULL) - globalpal = 0; - if (!waloff[globalpicnum]) - { - loadtile(globalpicnum); - if (!waloff[globalpicnum]) - { - if (rendmode < 3) return; - tsizx = tsizy = 1; method = 1; //Hack to update Z-buffer for invalid mirror textures - } - } - walptr = (char *)waloff[globalpicnum]; - - j = 0; dorot = ((gchang != 1.0) || (gctang != 1.0)); - if (dorot) - { - for (i=0; i= 3) && (px[j-1] == px[0]) && (py[j-1] == py[0])) j--; - if (j < 3) return; - n = j; - -#ifdef USE_OPENGL - if (rendmode >= 3) - { - float hackscx, hackscy; - - if (skyclamphack) method |= 4; - pth = gltexcache(globalpicnum,globalpal,method&(~3)); - - if (r_fullbrights && pth->flags & 16) - if (indrawroomsandmasks) - { - if (!fullbrightdrawingpass) - fullbrightdrawingpass = 1; - else if (fullbrightdrawingpass == 2) - pth = pth->ofb; - } - - bglBindTexture(GL_TEXTURE_2D, pth ? pth->glpic : 0); - - if (srepeat) - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); - if (trepeat) - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); - - // texture scale by parkar request - if (pth && pth->hicr && ((pth->hicr->xscale != 1.0f) || (pth->hicr->yscale != 1.0f)) && !drawingskybox) - { - bglMatrixMode(GL_TEXTURE); - bglLoadIdentity(); - bglScalef(pth->hicr->xscale, pth->hicr->yscale, 1.0f); - bglMatrixMode(GL_MODELVIEW); - } - - // detail texture - detailpth = NULL; - if (r_detailmapping && usehightile && !drawingskybox && - hicfindsubst(globalpicnum, DETAILPAL, 0)) - detailpth = gltexcache(globalpicnum, DETAILPAL, method&(~3)); - - if (detailpth && detailpth->hicr && (detailpth->hicr->palnum == DETAILPAL)) - { - bglActiveTextureARB(++texunits); - - bglEnable(GL_TEXTURE_2D); - bglBindTexture(GL_TEXTURE_2D, detailpth ? detailpth->glpic : 0); - - bglTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - bglTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); - - bglTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB); - bglTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - - bglTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE); - bglTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); - - bglTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - bglTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS_ARB); - bglTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); - - bglTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 2.0f); - - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); - - - f = detailpth ? detailpth->hicr->xscale : 1.0; - - bglMatrixMode(GL_TEXTURE); - bglLoadIdentity(); - - if (pth && pth->hicr && ((pth->hicr->xscale != 1.0f) || (pth->hicr->yscale != 1.0f))) - bglScalef(pth->hicr->xscale, pth->hicr->yscale, 1.0f); - - if (detailpth && detailpth->hicr && ((detailpth->hicr->xscale != 1.0f) || (detailpth->hicr->yscale != 1.0f))) - bglScalef(detailpth->hicr->xscale, detailpth->hicr->yscale, 1.0f); - - bglMatrixMode(GL_MODELVIEW); - } - - // glow texture - glowpth = NULL; - if (r_glowmapping && usehightile && !drawingskybox && - hicfindsubst(globalpicnum, GLOWPAL, 0)) - glowpth = gltexcache(globalpicnum, GLOWPAL, method&(~3)); - - if (glowpth && glowpth->hicr && (glowpth->hicr->palnum == GLOWPAL)) - { - bglActiveTextureARB(++texunits); - - bglEnable(GL_TEXTURE_2D); - bglBindTexture(GL_TEXTURE_2D, glowpth ? glowpth->glpic : 0); - - bglTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - bglTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB); - - bglTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB); - bglTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); - - bglTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE); - bglTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR); - - bglTexEnvf(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_TEXTURE); - bglTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_ONE_MINUS_SRC_ALPHA); - - bglTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); - bglTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS_ARB); - bglTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA); - - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); - } - - if (pth && (pth->flags & 2)) - { - hackscx = pth->scalex; - hackscy = pth->scaley; - tsizx = pth->sizx; - tsizy = pth->sizy; - } - else { hackscx = 1.0; hackscy = 1.0; } - - if (!glinfo.texnpot) - { - for (xx=1; xxhicr && pth->hicr->alphacut >= 0.0) al = pth->hicr->alphacut; - if (alphahackarray[globalpicnum]) - al=alphahackarray[globalpicnum]; - if (!waloff[globalpicnum]) al = 0.0; // invalid textures ignore the alpha cutoff settings - bglEnable(GL_BLEND); - bglEnable(GL_ALPHA_TEST); - bglAlphaFunc(GL_GREATER,al); - } - - if (!dorot) - { - for (i=n-1; i>=0; i--) - { - dd[i] = px[i]*gdx + py[i]*gdy + gdo; - uu[i] = px[i]*gux + py[i]*guy + guo; - vv[i] = px[i]*gvx + py[i]*gvy + gvo; - } - } - - { - float pc[4]; - f = ((float)(numpalookups-min(max((globalshade * shadescale),0),numpalookups)))/((float)numpalookups); - pc[0] = pc[1] = pc[2] = f; - switch (method&3) - { - default: - case 0: - pc[3] = 1.0f; break; - case 1: - pc[3] = 1.0f; break; - case 2: - pc[3] = 0.66f; break; - case 3: - pc[3] = 0.33f; break; - } - // tinting happens only to hightile textures, and only if the texture we're - // rendering isn't for the same palette as what we asked for - if (!(hictinting[globalpal].f&4)) - { - if (pth && (pth->flags & 2)) - { - if (pth->palnum != globalpal) - { - // apply tinting for replaced textures - pc[0] *= (float)hictinting[globalpal].r / 255.0; - pc[1] *= (float)hictinting[globalpal].g / 255.0; - pc[2] *= (float)hictinting[globalpal].b / 255.0; - } - if (hictinting[MAXPALOOKUPS-1].r != 255 || hictinting[MAXPALOOKUPS-1].g != 255 || hictinting[MAXPALOOKUPS-1].b != 255) - { - pc[0] *= (float)hictinting[MAXPALOOKUPS-1].r / 255.0; - pc[1] *= (float)hictinting[MAXPALOOKUPS-1].g / 255.0; - pc[2] *= (float)hictinting[MAXPALOOKUPS-1].b / 255.0; - } - } - // hack: this is for drawing the 8-bit crosshair recolored in polymost - else if (hictinting[globalpal].f & 8) - { - pc[0] *= (float)hictinting[globalpal].r / 255.0; - pc[1] *= (float)hictinting[globalpal].g / 255.0; - pc[2] *= (float)hictinting[globalpal].b / 255.0; - } - } - - bglColor4f(pc[0],pc[1],pc[2],pc[3]); - } - - //Hack for walls&masked walls which use textures that are not a power of 2 - if ((pow2xsplit) && (tsizx != xx)) - { - if (!dorot) - { - ngdx = gdx; ngdy = gdy; ngdo = gdo+(ngdx+ngdy)*.5; - ngux = gux; nguy = guy; nguo = guo+(ngux+nguy)*.5; - ngvx = gvx; ngvy = gvy; ngvo = gvo+(ngvx+ngvy)*.5; - } - else - { - ox = py[1]-py[2]; oy = py[2]-py[0]; oz = py[0]-py[1]; - r = 1.0 / (ox*px[0] + oy*px[1] + oz*px[2]); - ngdx = (ox*dd[0] + oy*dd[1] + oz*dd[2])*r; - ngux = (ox*uu[0] + oy*uu[1] + oz*uu[2])*r; - ngvx = (ox*vv[0] + oy*vv[1] + oz*vv[2])*r; - ox = px[2]-px[1]; oy = px[0]-px[2]; oz = px[1]-px[0]; - ngdy = (ox*dd[0] + oy*dd[1] + oz*dd[2])*r; - nguy = (ox*uu[0] + oy*uu[1] + oz*uu[2])*r; - ngvy = (ox*vv[0] + oy*vv[1] + oz*vv[2])*r; - ox = px[0]-.5; oy = py[0]-.5; //.5 centers texture nicely - ngdo = dd[0] - ox*ngdx - oy*ngdy; - nguo = uu[0] - ox*ngux - oy*nguy; - ngvo = vv[0] - ox*ngvx - oy*ngvy; - } - - ngux *= hackscx; nguy *= hackscx; nguo *= hackscx; - ngvx *= hackscy; ngvy *= hackscy; ngvo *= hackscy; - uoffs = ((double)(xx-tsizx)*.5); - ngux -= ngdx*uoffs; - nguy -= ngdy*uoffs; - nguo -= ngdo*uoffs; - - //Find min&max u coordinates (du0...du1) - for (i=0; i du1) du1 = f; - } - - f = 1.0/(double)tsizx; - ix0 = (int32_t)floor(du0*f); - ix1 = (int32_t)floor(du1*f); - for (; ix0<=ix1; ix0++) - { - du0 = (double)((ix0)*tsizx); // + uoffs; - du1 = (double)((ix0+1)*tsizx); // + uoffs; - - i = 0; nn = 0; - duj = (px[i]*ngux + py[i]*nguy + nguo) / (px[i]*ngdx + py[i]*ngdy + ngdo); - do - { - j = i+1; if (j == n) j = 0; - - dui = duj; duj = (px[j]*ngux + py[j]*nguy + nguo) / (px[j]*ngdx + py[j]*ngdy + ngdo); - - if ((du0 <= dui) && (dui <= du1)) { uu[nn] = px[i]; vv[nn] = py[i]; nn++; } - if (duj <= dui) - { - if ((du1 < duj) != (du1 < dui)) - { - //ox*(ngux-ngdx*du1) + oy*(nguy-ngdy*du1) + (nguo-ngdo*du1) = 0 - //(px[j]-px[i])*f + px[i] = ox - //(py[j]-py[i])*f + py[i] = oy - - ///Solve for f - //((px[j]-px[i])*f + px[i])*(ngux-ngdx*du1) + - //((py[j]-py[i])*f + py[i])*(nguy-ngdy*du1) + (nguo-ngdo*du1) = 0 - - f = -(px[i] *(ngux-ngdx*du1) + py[i] *(nguy-ngdy*du1) + (nguo-ngdo*du1)) / - ((px[j]-px[i])*(ngux-ngdx*du1) + (py[j]-py[i])*(nguy-ngdy*du1)); - uu[nn] = (px[j]-px[i])*f + px[i]; - vv[nn] = (py[j]-py[i])*f + py[i]; nn++; - } - if ((du0 < duj) != (du0 < dui)) - { - f = -(px[i] *(ngux-ngdx*du0) + py[i] *(nguy-ngdy*du0) + (nguo-ngdo*du0)) / - ((px[j]-px[i])*(ngux-ngdx*du0) + (py[j]-py[i])*(nguy-ngdy*du0)); - uu[nn] = (px[j]-px[i])*f + px[i]; - vv[nn] = (py[j]-py[i])*f + py[i]; nn++; - } - } - else - { - if ((du0 < duj) != (du0 < dui)) - { - f = -(px[i] *(ngux-ngdx*du0) + py[i] *(nguy-ngdy*du0) + (nguo-ngdo*du0)) / - ((px[j]-px[i])*(ngux-ngdx*du0) + (py[j]-py[i])*(nguy-ngdy*du0)); - uu[nn] = (px[j]-px[i])*f + px[i]; - vv[nn] = (py[j]-py[i])*f + py[i]; nn++; - } - if ((du1 < duj) != (du1 < dui)) - { - f = -(px[i] *(ngux-ngdx*du1) + py[i] *(nguy-ngdy*du1) + (nguo-ngdo*du1)) / - ((px[j]-px[i])*(ngux-ngdx*du1) + (py[j]-py[i])*(nguy-ngdy*du1)); - uu[nn] = (px[j]-px[i])*f + px[i]; - vv[nn] = (py[j]-py[i])*f + py[i]; nn++; - } - } - i = j; - } - while (i); - if (nn < 3) continue; - - bglBegin(GL_TRIANGLE_FAN); - for (i=0; i GL_TEXTURE0_ARB) - { - j = GL_TEXTURE0_ARB; - while (j <= texunits) - bglMultiTexCoord2dARB(j++, (up*r-du0+uoffs)*ox2,vp*r*oy2); - } - else - bglTexCoord2d((up*r-du0+uoffs)*ox2,vp*r*oy2); - bglVertex3d((ox-ghalfx)*r*grhalfxdown10x,(ghoriz-oy)*r*grhalfxdown10,r*(1.0/1024.0)); - } - bglEnd(); - } - } - else - { - ox2 *= hackscx; oy2 *= hackscy; - bglBegin(GL_TRIANGLE_FAN); - for (i=0; i GL_TEXTURE0_ARB) - { - j = GL_TEXTURE0_ARB; - while (j <= texunits) - bglMultiTexCoord2dARB(j++, uu[i]*r*ox2,vv[i]*r*oy2); - } - else - bglTexCoord2d(uu[i]*r*ox2,vv[i]*r*oy2); - bglVertex3d((px[i]-ghalfx)*r*grhalfxdown10x,(ghoriz-py[i])*r*grhalfxdown10,r*(1.0/1024.0)); - } - bglEnd(); - } - - while (texunits >= GL_TEXTURE0_ARB) - { - bglActiveTextureARB(texunits); - bglMatrixMode(GL_TEXTURE); - bglLoadIdentity(); - bglMatrixMode(GL_MODELVIEW); - if (texunits > GL_TEXTURE0_ARB) - { - bglTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 1.0f); - bglDisable(GL_TEXTURE_2D); - } - texunits--; - } - - if (srepeat) - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,glinfo.clamptoedge?GL_CLAMP_TO_EDGE:GL_CLAMP); - if (trepeat) - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,glinfo.clamptoedge?GL_CLAMP_TO_EDGE:GL_CLAMP); - - if (fullbrightdrawingpass == 1) // tile has fullbright colors ? - { - fullbrightdrawingpass = 2; - shadeforfullbrightpass = globalshade; // save the current shade - globalshade = -128; // fullbright - bglDisable(GL_FOG); - drawpoly(dpx, dpy, n_, method_); // draw them afterwards, then. :) - bglEnable(GL_FOG); - globalshade = shadeforfullbrightpass; - fullbrightdrawingpass = 0; - } - return; - } -#endif - - if (rendmode == 2) - { -#if (USEZBUFFER != 0) - if ((!zbufmem) || (zbufbpl != bytesperline) || (zbufysiz != ydim)) - { - zbufbpl = bytesperline; - zbufysiz = ydim; - zbufmem = (intptr_t)Brealloc((void *)zbufmem,zbufbpl*zbufysiz*4); - } - zbufoff = (int32_t *)(zbufmem-(frameplace<<2)); -#endif - if ((!transluc)) method = (method&~3)+1; //In case translucent table doesn't exist - - if (!dorot) - { - ngdx = gdx; ngdy = gdy; ngdo = gdo+(ngdx+ngdy)*.5; - ngux = gux; nguy = guy; nguo = guo+(ngux+nguy)*.5; - ngvx = gvx; ngvy = gvy; ngvo = gvo+(ngvx+ngvy)*.5; - } - else - { - //General equations: - //dd[i] = (px[i]*gdx + py[i]*gdy + gdo) - //uu[i] = (px[i]*gux + py[i]*guy + guo)/dd[i] - //vv[i] = (px[i]*gvx + py[i]*gvy + gvo)/dd[i] - // - //px[0]*gdx + py[0]*gdy + 1*gdo = dd[0] - //px[1]*gdx + py[1]*gdy + 1*gdo = dd[1] - //px[2]*gdx + py[2]*gdy + 1*gdo = dd[2] - // - //px[0]*gux + py[0]*guy + 1*guo = uu[0]*dd[0] (uu[i] premultiplied by dd[i] above) - //px[1]*gux + py[1]*guy + 1*guo = uu[1]*dd[1] - //px[2]*gux + py[2]*guy + 1*guo = uu[2]*dd[2] - // - //px[0]*gvx + py[0]*gvy + 1*gvo = vv[0]*dd[0] (vv[i] premultiplied by dd[i] above) - //px[1]*gvx + py[1]*gvy + 1*gvo = vv[1]*dd[1] - //px[2]*gvx + py[2]*gvy + 1*gvo = vv[2]*dd[2] - ox = py[1]-py[2]; oy = py[2]-py[0]; oz = py[0]-py[1]; - r = 1.0 / (ox*px[0] + oy*px[1] + oz*px[2]); - ngdx = (ox*dd[0] + oy*dd[1] + oz*dd[2])*r; - ngux = (ox*uu[0] + oy*uu[1] + oz*uu[2])*r; - ngvx = (ox*vv[0] + oy*vv[1] + oz*vv[2])*r; - ox = px[2]-px[1]; oy = px[0]-px[2]; oz = px[1]-px[0]; - ngdy = (ox*dd[0] + oy*dd[1] + oz*dd[2])*r; - nguy = (ox*uu[0] + oy*uu[1] + oz*uu[2])*r; - ngvy = (ox*vv[0] + oy*vv[1] + oz*vv[2])*r; - ox = px[0]-.5; oy = py[0]-.5; //.5 centers texture nicely - ngdo = dd[0] - ox*ngdx - oy*ngdy; - nguo = uu[0] - ox*ngux - oy*nguy; - ngvo = vv[0] - ox*ngvx - oy*ngvy; - } - palptr = &palookup[globalpal][min(max((int32_t)(globalshade * shadescale),0),numpalookups-1)<<8]; //<-need to make shade not static! - - tsizxm1 = tsizx-1; xmodnice = (!(tsizxm1&tsizx)); - tsizym1 = tsizy-1; ymulnice = (!(tsizym1&tsizy)); - if ((method&4) && (!xmodnice)) //Sprites don't need a mod on texture coordinates - { xmodnice = 1; for (tsizxm1=1; tsizxm1>4); - } - else - { - dacol = palookup[0][(int32_t)(*(char *)(waloff[globalpicnum]))+(min(max((int32_t)(globalshade * shadescale),0),numpalookups-1)<<8)]; - } - - if (grhalfxdown10x < 0) //Hack for mirrors - { - for (i=((n-1)>>1); i>=0; i--) - { - r = px[i]; px[i] = ((double)xdimen)-px[n-1-i]; px[n-1-i] = ((double)xdimen)-r; - r = py[i]; py[i] = py[n-1-i]; py[n-1-i] = r; - } - ngdo += ((double)xdimen)*ngdx; ngdx = -ngdx; - nguo += ((double)xdimen)*ngux; ngux = -ngux; - ngvo += ((double)xdimen)*ngvx; ngvx = -ngvx; - } - - ngdx2 = ngdx*(1<= py[1]); maxi = 1-mini; - for (z=2; z py[maxi]) maxi = z; - } - - i = maxi; dtol(py[i],&yy); if (yy > ydimen) yy = ydimen; - do - { - j = i+1; if (j == n) j = 0; - dtol(py[j],&y); if (y < 0) y = 0; - if (y < yy) - { - f = (px[j]-px[i])/(py[j]-py[i]); dtol(f*16384.0,&xi); - dtol((((double)yy-.5-py[j])*f + px[j])*16384.0+8192.0,&x); - for (; yy>y; yy--,x-=xi) lastx[yy-1] = (x>>14); - } - i = j; - } - while (i != mini); - do - { - j = i+1; if (j == n) j = 0; - dtol(py[j],&yy); if (yy > ydimen) yy = ydimen; - if (y < yy) - { - f = (px[j]-px[i])/(py[j]-py[i]); dtol(f*16384.0,&xi); - dtol((((double)y+.5-py[j])*f + px[j])*16384.0+8192.0,&x); - for (; y>14); if (ix1 > xdimen) ix1 = xdimen; - if (ix0 < ix1) - { - if (rendmode == 1) - memset((void *)(ylookup[y]+ix0+frameoffset),dacol,ix1-ix0); - else - { - vidp = (char *)(ylookup[y]+frameoffset+ix0); - dp = ngdx*(double)ix0 + ngdy*(double)y + ngdo; - up = ngux*(double)ix0 + nguy*(double)y + nguo; - vp = ngvx*(double)ix0 + ngvy*(double)y + ngvo; - rdp = 65536.0/dp; dp += ngdx2; - dtol(rdp,&d0); - dtol(up*rdp,&u0); up += ngux2; - dtol(vp*rdp,&v0); vp += ngvx2; - rdp = 65536.0/dp; - - switch (method&3) - { - case 0: - if (xmodnice&ymulnice) //both u&v texture sizes are powers of 2 :) - { - for (xx=ix0; xx>LINTERPSIZ); - dtol(up*rdp,&u1); up += ngux2; u1 = ((u1-u0)>>LINTERPSIZ); - dtol(vp*rdp,&v1); vp += ngvx2; v1 = ((v1-v0)>>LINTERPSIZ); - rdp = 65536.0/dp; vide = &vidp[min(ix1-xx,1<>16)&tsizxm1)<>16)&tsizym1)]]; //+((d0>>13)&0x3f00)]; -#else - vidp[0] = ((d0>>16)&255); -#endif - d0 += d1; u0 += u1; v0 += v1; vidp++; - } - } - } - else - { - for (xx=ix0; xx>LINTERPSIZ); - dtol(up*rdp,&u1); up += ngux2; u1 = ((u1-u0)>>LINTERPSIZ); - dtol(vp*rdp,&v1); vp += ngvx2; v1 = ((v1-v0)>>LINTERPSIZ); - rdp = 65536.0/dp; vide = &vidp[min(ix1-xx,1<>16,tsizx)*tsizy + ((v0>>16)&tsizym1)]]; //+((d0>>13)&0x3f00)]; -#else - vidp[0] = ((d0>>16)&255); -#endif - d0 += d1; u0 += u1; v0 += v1; vidp++; - } - } - } - break; - case 1: - if (xmodnice) //both u&v texture sizes are powers of 2 :) - { - for (xx=ix0; xx>LINTERPSIZ); - dtol(up*rdp,&u1); up += ngux2; u1 = ((u1-u0)>>LINTERPSIZ); - dtol(vp*rdp,&v1); vp += ngvx2; v1 = ((v1-v0)>>LINTERPSIZ); - rdp = 65536.0/dp; vide = &vidp[min(ix1-xx,1<>16)&tsizxm1)*tsizy) + ((v0>>16)&tsizym1)]; -#if (DEPTHDEBUG == 0) -#if (USEZBUFFER != 0) - if ((dacol != 255) && (d0 <= zbufoff[(intptr_t)vidp])) - { - zbufoff[(intptr_t)vidp] = d0; - vidp[0] = palptr[((int32_t)dacol)]; //+((d0>>13)&0x3f00)]; - } -#else - if (dacol != 255) vidp[0] = palptr[((int32_t)dacol)]; //+((d0>>13)&0x3f00)]; -#endif -#else - if ((dacol != 255) && (vidp[0] > (d0>>16))) vidp[0] = ((d0>>16)&255); -#endif - d0 += d1; u0 += u1; v0 += v1; vidp++; - } - } - } - else - { - for (xx=ix0; xx>LINTERPSIZ); - dtol(up*rdp,&u1); up += ngux2; u1 = ((u1-u0)>>LINTERPSIZ); - dtol(vp*rdp,&v1); vp += ngvx2; v1 = ((v1-v0)>>LINTERPSIZ); - rdp = 65536.0/dp; vide = &vidp[min(ix1-xx,1<>16,tsizx)*tsizy + ((v0>>16)&tsizym1)]; -#if (DEPTHDEBUG == 0) -#if (USEZBUFFER != 0) - if ((dacol != 255) && (d0 <= zbufoff[(intptr_t)vidp])) - { - zbufoff[(intptr_t)vidp] = d0; - vidp[0] = palptr[((int32_t)dacol)]; //+((d0>>13)&0x3f00)]; - } -#else - if (dacol != 255) vidp[0] = palptr[((int32_t)dacol)]; //+((d0>>13)&0x3f00)]; -#endif -#else - if ((dacol != 255) && (vidp[0] > (d0>>16))) vidp[0] = ((d0>>16)&255); -#endif - d0 += d1; u0 += u1; v0 += v1; vidp++; - } - } - } - break; - case 2: //Transluscence #1 - for (xx=ix0; xx>LINTERPSIZ); - dtol(up*rdp,&u1); up += ngux2; u1 = ((u1-u0)>>LINTERPSIZ); - dtol(vp*rdp,&v1); vp += ngvx2; v1 = ((v1-v0)>>LINTERPSIZ); - rdp = 65536.0/dp; vide = &vidp[min(ix1-xx,1<>16,tsizx)*tsizy + ((v0>>16)&tsizym1)]; - //dacol = walptr[(((u0>>16)&tsizxm1)<>16)&tsizym1)]; -#if (DEPTHDEBUG == 0) -#if (USEZBUFFER != 0) - if ((dacol != 255) && (d0 <= zbufoff[(intptr_t)vidp])) - { - zbufoff[(intptr_t)vidp] = d0; - vidp[0] = transluc[(((int32_t)vidp[0])<<8)+((int32_t)palptr[((int32_t)dacol)])]; //+((d0>>13)&0x3f00)])]; - } -#else - if (dacol != 255) - vidp[0] = transluc[(((int32_t)vidp[0])<<8)+((int32_t)palptr[((int32_t)dacol)])]; //+((d0>>13)&0x3f00)])]; -#endif -#else - if ((dacol != 255) && (vidp[0] > (d0>>16))) vidp[0] = ((d0>>16)&255); -#endif - d0 += d1; u0 += u1; v0 += v1; vidp++; - } - } - break; - case 3: //Transluscence #2 - for (xx=ix0; xx>LINTERPSIZ); - dtol(up*rdp,&u1); up += ngux2; u1 = ((u1-u0)>>LINTERPSIZ); - dtol(vp*rdp,&v1); vp += ngvx2; v1 = ((v1-v0)>>LINTERPSIZ); - rdp = 65536.0/dp; vide = &vidp[min(ix1-xx,1<>16,tsizx)*tsizy + ((v0>>16)&tsizym1)]; - //dacol = walptr[(((u0>>16)&tsizxm1)<>16)&tsizym1)]; -#if (DEPTHDEBUG == 0) -#if (USEZBUFFER != 0) - if ((dacol != 255) && (d0 <= zbufoff[(intptr_t)vidp])) - { - zbufoff[(intptr_t)vidp] = d0; - vidp[0] = transluc[((int32_t)vidp[0])+(((int32_t)palptr[((int32_t)dacol)/*+((d0>>13)&0x3f00)*/])<<8)]; - } -#else - if (dacol != 255) - vidp[0] = transluc[((int32_t)vidp[0])+(((int32_t)palptr[((int32_t)dacol)/*+((d0>>13)&0x3f00)*/])<<8)]; -#endif -#else - if ((dacol != 255) && (vidp[0] > (d0>>16))) vidp[0] = ((d0>>16)&255); -#endif - d0 += d1; u0 += u1; v0 += v1; vidp++; - } - } - break; - } - } - } - } - } - i = j; - } - while (i != maxi); - - if (rendmode == 1) - { - if (method&3) //Only draw border around sprites/maskwalls - { - for (i=0,j=n-1; i=2; i--) if (px[i] < px[imin]) imin = i; - - - vsp[vcnt].x = px[imin]; - vsp[vcnt].cy[0] = vsp[vcnt].fy[0] = py[imin]; - vcnt++; - i = imin+1; if (i >= n) i = 0; - j = imin-1; if (j < 0) j = n-1; - do - { - if (px[i] < px[j]) - { - if ((vcnt > 1) && (px[i] <= vsp[vcnt-1].x)) vcnt--; - vsp[vcnt].x = px[i]; - vsp[vcnt].cy[0] = py[i]; - k = j+1; if (k >= n) k = 0; - //(px[k],py[k]) - //(px[i],?) - //(px[j],py[j]) - vsp[vcnt].fy[0] = (px[i]-px[k])*(py[j]-py[k])/(px[j]-px[k]) + py[k]; - vcnt++; - i++; if (i >= n) i = 0; - } - else if (px[j] < px[i]) - { - if ((vcnt > 1) && (px[j] <= vsp[vcnt-1].x)) vcnt--; - vsp[vcnt].x = px[j]; - vsp[vcnt].fy[0] = py[j]; - k = i-1; if (k < 0) k = n-1; - //(px[k],py[k]) - //(px[j],?) - //(px[i],py[i]) - vsp[vcnt].cy[0] = (px[j]-px[k])*(py[i]-py[k])/(px[i]-px[k]) + py[k]; - vcnt++; - j--; if (j < 0) j = n-1; - } - else - { - if ((vcnt > 1) && (px[i] <= vsp[vcnt-1].x)) vcnt--; - vsp[vcnt].x = px[i]; - vsp[vcnt].cy[0] = py[i]; - vsp[vcnt].fy[0] = py[j]; - vcnt++; - i++; if (i >= n) i = 0; if (i == j) break; - j--; if (j < 0) j = n-1; - } - } - while (i != j); - if (px[i] > vsp[vcnt-1].x) - { - vsp[vcnt].x = px[i]; - vsp[vcnt].cy[0] = vsp[vcnt].fy[0] = py[i]; - vcnt++; - } - - - for (i=0; i= 0)) return(1); - } - return(0); -} - -static int32_t domostpolymethod = 0; - -void domost(float x0, float y0, float x1, float y1) -{ - double dpx[4], dpy[4]; - float d, f, n, t, slop, dx, dx0, dx1, nx, nx0, ny0, nx1, ny1; - float spx[4], spy[4], cy[2], cv[2]; - int32_t i, j, k, z, ni, vcnt = 0, scnt, newi, dir, spt[4]; - - if (x0 < x1) - { - dir = 1; //clip dmost (floor) - y0 -= .01f; y1 -= .01f; - } - else - { - if (x0 == x1) return; - f = x0; x0 = x1; x1 = f; - f = y0; y0 = y1; y1 = f; - dir = 0; //clip umost (ceiling) - //y0 += .01; y1 += .01; //necessary? - } - - slop = (y1-y0)/(x1-x0); - for (i=vsp[0].n; i; i=newi) - { - newi = vsp[i].n; nx0 = vsp[i].x; nx1 = vsp[newi].x; - if ((x0 >= nx1) || (nx0 >= x1) || (vsp[i].ctag <= 0)) continue; - dx = nx1-nx0; - cy[0] = vsp[i].cy[0]; cv[0] = vsp[i].cy[1]-cy[0]; - cy[1] = vsp[i].fy[0]; cv[1] = vsp[i].fy[1]-cy[1]; - - scnt = 0; - - //Test if left edge requires split (x0,y0) (nx0,cy(0)), - if ((x0 > nx0) && (x0 < nx1)) - { - t = (x0-nx0)*cv[dir] - (y0-cy[dir])*dx; - if (((!dir) && (t < 0)) || ((dir) && (t > 0))) - { spx[scnt] = x0; spy[scnt] = y0; spt[scnt] = -1; scnt++; } - } - - //Test for intersection on umost (j == 0) and dmost (j == 1) - for (j=0; j<2; j++) - { - d = (y0-y1)*dx - (x0-x1)*cv[j]; - n = (y0-cy[j])*dx - (x0-nx0)*cv[j]; - if ((fabs(n) <= fabs(d)) && (d *n >= 0) && (d != 0)) - { - t = n/d; nx = (x1-x0)*t + x0; - if ((nx > nx0) && (nx < nx1)) - { - spx[scnt] = nx; spy[scnt] = (y1-y0)*t + y0; - spt[scnt] = j; scnt++; - } - } - } - - //Nice hack to avoid full sort later :) - if ((scnt >= 2) && (spx[scnt-1] < spx[scnt-2])) - { - f = spx[scnt-1]; spx[scnt-1] = spx[scnt-2]; spx[scnt-2] = f; - f = spy[scnt-1]; spy[scnt-1] = spy[scnt-2]; spy[scnt-2] = f; - j = spt[scnt-1]; spt[scnt-1] = spt[scnt-2]; spt[scnt-2] = j; - } - - //Test if right edge requires split - if ((x1 > nx0) && (x1 < nx1)) - { - t = (x1-nx0)*cv[dir] - (y1-cy[dir])*dx; - if (((!dir) && (t < 0)) || ((dir) && (t > 0))) - { spx[scnt] = x1; spy[scnt] = y1; spt[scnt] = -1; scnt++; } - } - - vsp[i].tag = vsp[newi].tag = -1; - for (z=0; z<=scnt; z++,i=vcnt) - { - if (z < scnt) - { - vcnt = vsinsaft(i); - t = (spx[z]-nx0)/dx; - vsp[i].cy[1] = t*cv[0] + cy[0]; - vsp[i].fy[1] = t*cv[1] + cy[1]; - vsp[vcnt].x = spx[z]; - vsp[vcnt].cy[0] = vsp[i].cy[1]; - vsp[vcnt].fy[0] = vsp[i].fy[1]; - vsp[vcnt].tag = spt[z]; - } - - ni = vsp[i].n; if (!ni) continue; //this 'if' fixes many bugs! - dx0 = vsp[i].x; if (x0 > dx0) continue; - dx1 = vsp[ni].x; if (x1 < dx1) continue; - ny0 = (dx0-x0)*slop + y0; - ny1 = (dx1-x0)*slop + y0; - - // dx0 dx1 - // ~ ~ - //---------------------------- - // t0+=0 t1+=0 - // vsp[i].cy[0] vsp[i].cy[1] - //============================ - // t0+=1 t1+=3 - //============================ - // vsp[i].fy[0] vsp[i].fy[1] - // t0+=2 t1+=6 - // - // ny0 ? ny1 ? - - k = 1+3; - if ((vsp[i].tag == 0) || (ny0 <= vsp[i].cy[0]+.01)) k--; - if ((vsp[i].tag == 1) || (ny0 >= vsp[i].fy[0]-.01)) k++; - if ((vsp[ni].tag == 0) || (ny1 <= vsp[i].cy[1]+.01)) k -= 3; - if ((vsp[ni].tag == 1) || (ny1 >= vsp[i].fy[1]-.01)) k += 3; - - if (!dir) - { - switch (k) - { - case 1: - case 2: - dpx[0] = dx0; dpy[0] = vsp[i].cy[0]; - dpx[1] = dx1; dpy[1] = vsp[i].cy[1]; - dpx[2] = dx0; dpy[2] = ny0; drawpoly(dpx,dpy,3,domostpolymethod); - vsp[i].cy[0] = ny0; vsp[i].ctag = gtag; break; - case 3: - case 6: - dpx[0] = dx0; dpy[0] = vsp[i].cy[0]; - dpx[1] = dx1; dpy[1] = vsp[i].cy[1]; - dpx[2] = dx1; dpy[2] = ny1; drawpoly(dpx,dpy,3,domostpolymethod); - vsp[i].cy[1] = ny1; vsp[i].ctag = gtag; break; - case 4: - case 5: - case 7: - dpx[0] = dx0; dpy[0] = vsp[i].cy[0]; - dpx[1] = dx1; dpy[1] = vsp[i].cy[1]; - dpx[2] = dx1; dpy[2] = ny1; - dpx[3] = dx0; dpy[3] = ny0; drawpoly(dpx,dpy,4,domostpolymethod); - vsp[i].cy[0] = ny0; vsp[i].cy[1] = ny1; vsp[i].ctag = gtag; break; - case 8: - dpx[0] = dx0; dpy[0] = vsp[i].cy[0]; - dpx[1] = dx1; dpy[1] = vsp[i].cy[1]; - dpx[2] = dx1; dpy[2] = vsp[i].fy[1]; - dpx[3] = dx0; dpy[3] = vsp[i].fy[0]; drawpoly(dpx,dpy,4,domostpolymethod); - vsp[i].ctag = vsp[i].ftag = -1; break; - default: - break; - } - } - else - { - switch (k) - { - case 7: - case 6: - dpx[0] = dx0; dpy[0] = ny0; - dpx[1] = dx1; dpy[1] = vsp[i].fy[1]; - dpx[2] = dx0; dpy[2] = vsp[i].fy[0]; drawpoly(dpx,dpy,3,domostpolymethod); - vsp[i].fy[0] = ny0; vsp[i].ftag = gtag; break; - case 5: - case 2: - dpx[0] = dx0; dpy[0] = vsp[i].fy[0]; - dpx[1] = dx1; dpy[1] = ny1; - dpx[2] = dx1; dpy[2] = vsp[i].fy[1]; drawpoly(dpx,dpy,3,domostpolymethod); - vsp[i].fy[1] = ny1; vsp[i].ftag = gtag; break; - case 4: - case 3: - case 1: - dpx[0] = dx0; dpy[0] = ny0; - dpx[1] = dx1; dpy[1] = ny1; - dpx[2] = dx1; dpy[2] = vsp[i].fy[1]; - dpx[3] = dx0; dpy[3] = vsp[i].fy[0]; drawpoly(dpx,dpy,4,domostpolymethod); - vsp[i].fy[0] = ny0; vsp[i].fy[1] = ny1; vsp[i].ftag = gtag; break; - case 0: - dpx[0] = dx0; dpy[0] = vsp[i].cy[0]; - dpx[1] = dx1; dpy[1] = vsp[i].cy[1]; - dpx[2] = dx1; dpy[2] = vsp[i].fy[1]; - dpx[3] = dx0; dpy[3] = vsp[i].fy[0]; drawpoly(dpx,dpy,4,domostpolymethod); - vsp[i].ctag = vsp[i].ftag = -1; break; - default: - break; - } - } - } - } - - gtag++; - - //Combine neighboring vertical strips with matching collinear top&bottom edges - //This prevents x-splits from propagating through the entire scan - i = vsp[0].n; - while (i) - { - ni = vsp[i].n; - if ((vsp[i].cy[0] >= vsp[i].fy[0]) && (vsp[i].cy[1] >= vsp[i].fy[1])) { vsp[i].ctag = vsp[i].ftag = -1; } - if ((vsp[i].ctag == vsp[ni].ctag) && (vsp[i].ftag == vsp[ni].ftag)) - { vsp[i].cy[1] = vsp[ni].cy[1]; vsp[i].fy[1] = vsp[ni].fy[1]; vsdel(ni); } - else i = ni; - } -} - -static void polymost_scansector(int32_t sectnum); - -static void polymost_drawalls(int32_t bunch) -{ - sectortype *sec, *nextsec; - walltype *wal, *wal2, *nwal; - double ox, oy, oz, ox2, oy2, px[3], py[3], dd[3], uu[3], vv[3]; - double fx, fy, x0, x1, cy0, cy1, fy0, fy1, xp0, yp0, xp1, yp1, ryp0, ryp1, nx0, ny0, nx1, ny1; - double t, r, t0, t1, ocy0, ocy1, ofy0, ofy1, oxp0, oyp0, ft[4]; - double oguo, ogux, oguy; - int32_t i, x, y, z, cz, fz, wallnum, sectnum, nextsectnum; - int32_t ypan,yoffs; // for panning correction - - sectnum = thesector[bunchfirst[bunch]]; sec = §or[sectnum]; - -#if 0 // USE_OPENGL - if (!nofog) - { - if (rendmode >= 3) - { - float col[4]; - col[0] = (float)palookupfog[sec->floorpal].r / 63.f; - col[1] = (float)palookupfog[sec->floorpal].g / 63.f; - col[2] = (float)palookupfog[sec->floorpal].b / 63.f; - col[3] = 0; - bglFogfv(GL_FOG_COLOR,col); - bglFogf(GL_FOG_DENSITY,fogcalc(sec->floorshade,sec->visibility)); - - // bglFogf(GL_FOG_DENSITY,gvisibility*((float)((uint8_t)(sec->visibility<240?sec->visibility+16:sec->visibility-239)))); - } - } -#endif - - //DRAW WALLS SECTION! - for (z=bunchfirst[bunch]; z>=0; z=p2[z]) - { - wallnum = thewall[z]; wal = &wall[wallnum]; wal2 = &wall[wal->point2]; - nextsectnum = wal->nextsector; - nextsec = nextsectnum>=0 ? §or[nextsectnum] : NULL; - - //Offset&Rotate 3D coordinates to screen 3D space - x = wal->x-globalposx; y = wal->y-globalposy; - xp0 = (double)y*gcosang - (double)x*gsinang; - yp0 = (double)x*gcosang2 + (double)y*gsinang2; - x = wal2->x-globalposx; y = wal2->y-globalposy; - xp1 = (double)y*gcosang - (double)x*gsinang; - yp1 = (double)x*gcosang2 + (double)y*gsinang2; - - oxp0 = xp0; oyp0 = yp0; - - //Clip to close parallel-screen plane - if (yp0 < SCISDIST) - { - if (yp1 < SCISDIST) continue; - t0 = (SCISDIST-yp0)/(yp1-yp0); xp0 = (xp1-xp0)*t0+xp0; yp0 = SCISDIST; - nx0 = (wal2->x-wal->x)*t0+wal->x; - ny0 = (wal2->y-wal->y)*t0+wal->y; - } - else { t0 = 0.f; nx0 = wal->x; ny0 = wal->y; } - if (yp1 < SCISDIST) - { - t1 = (SCISDIST-oyp0)/(yp1-oyp0); xp1 = (xp1-oxp0)*t1+oxp0; yp1 = SCISDIST; - nx1 = (wal2->x-wal->x)*t1+wal->x; - ny1 = (wal2->y-wal->y)*t1+wal->y; - } - else { t1 = 1.f; nx1 = wal2->x; ny1 = wal2->y; } - - ryp0 = 1.f/yp0; ryp1 = 1.f/yp1; - - //Generate screen coordinates for front side of wall - x0 = ghalfx*xp0*ryp0 + ghalfx; - x1 = ghalfx*xp1*ryp1 + ghalfx; - if (x1 <= x0) continue; - - ryp0 *= gyxscale; ryp1 *= gyxscale; - - getzsofslope(sectnum,(int32_t)nx0,(int32_t)ny0,&cz,&fz); - cy0 = ((float)(cz-globalposz))*ryp0 + ghoriz; - fy0 = ((float)(fz-globalposz))*ryp0 + ghoriz; - getzsofslope(sectnum,(int32_t)nx1,(int32_t)ny1,&cz,&fz); - cy1 = ((float)(cz-globalposz))*ryp1 + ghoriz; - fy1 = ((float)(fz-globalposz))*ryp1 + ghoriz; - - - globalpicnum = sec->floorpicnum; globalshade = sec->floorshade; globalpal = (int32_t)((uint8_t)sec->floorpal); - globalorientation = sec->floorstat; - if (picanm[globalpicnum]&192) globalpicnum += animateoffs(globalpicnum,sectnum); - if (!(globalorientation&1)) - { - //(singlobalang/-16384*(sx-ghalfx) + 0*(sy-ghoriz) + (cosviewingrangeglobalang/16384)*ghalfx)*d + globalposx = u*16 - //(cosglobalang/ 16384*(sx-ghalfx) + 0*(sy-ghoriz) + (sinviewingrangeglobalang/16384)*ghalfx)*d + globalposy = v*16 - //( 0*(sx-ghalfx) + 1*(sy-ghoriz) + ( 0)*ghalfx)*d + globalposz/16 = (sec->floorz/16) - if (!(globalorientation&64)) - { ft[0] = globalposx; ft[1] = globalposy; ft[2] = cosglobalang; ft[3] = singlobalang; } - else - { - //relative alignment - fx = (double)(wall[wall[sec->wallptr].point2].x-wall[sec->wallptr].x); - fy = (double)(wall[wall[sec->wallptr].point2].y-wall[sec->wallptr].y); - r = 1.0/sqrt(fx*fx+fy*fy); fx *= r; fy *= r; - ft[2] = cosglobalang*fx + singlobalang*fy; - ft[3] = singlobalang*fx - cosglobalang*fy; - ft[0] = ((double)(globalposx-wall[sec->wallptr].x))*fx + ((double)(globalposy-wall[sec->wallptr].y))*fy; - ft[1] = ((double)(globalposy-wall[sec->wallptr].y))*fx - ((double)(globalposx-wall[sec->wallptr].x))*fy; - if (!(globalorientation&4)) globalorientation ^= 32; else globalorientation ^= 16; - } - gdx = 0; - gdy = gxyaspect; if (!(globalorientation&2)) gdy /= (double)(sec->floorz-globalposz); - gdo = -ghoriz*gdy; - if (globalorientation&8) { ft[0] /= 8; ft[1] /= -8; ft[2] /= 2097152; ft[3] /= 2097152; } - else { ft[0] /= 16; ft[1] /= -16; ft[2] /= 4194304; ft[3] /= 4194304; } - gux = (double)ft[3]*((double)viewingrange)/-65536.0; - gvx = (double)ft[2]*((double)viewingrange)/-65536.0; - guy = (double)ft[0]*gdy; gvy = (double)ft[1]*gdy; - guo = (double)ft[0]*gdo; gvo = (double)ft[1]*gdo; - guo += (double)(ft[2]-gux)*ghalfx; - gvo -= (double)(ft[3]+gvx)*ghalfx; - - //Texture flipping - if (globalorientation&4) - { - r = gux; gux = gvx; gvx = r; - r = guy; guy = gvy; gvy = r; - r = guo; guo = gvo; gvo = r; - } - if (globalorientation&16) { gux = -gux; guy = -guy; guo = -guo; } - if (globalorientation&32) { gvx = -gvx; gvy = -gvy; gvo = -gvo; } - - //Texture panning - fx = (float)sec->floorxpanning*((float)(1<<(picsiz[globalpicnum]&15)))/256.0; - fy = (float)sec->floorypanning*((float)(1<<(picsiz[globalpicnum]>>4)))/256.0; - if ((globalorientation&(2+64)) == (2+64)) //Hack for panning for slopes w/ relative alignment - { - r = (float)sec->floorheinum / 4096.0; r = 1.0/sqrt(r*r+1); - if (!(globalorientation&4)) fy *= r; else fx *= r; - } - guy += gdy*fx; guo += gdo*fx; - gvy += gdy*fy; gvo += gdo*fy; - - if (globalorientation&2) //slopes - { - px[0] = x0; py[0] = ryp0 + ghoriz; - px[1] = x1; py[1] = ryp1 + ghoriz; - - //Pick some point guaranteed to be not collinear to the 1st two points - ox = nx0 + (ny1-ny0); - oy = ny0 + (nx0-nx1); - ox2 = (double)(oy-globalposy)*gcosang - (double)(ox-globalposx)*gsinang; - oy2 = (double)(ox-globalposx)*gcosang2 + (double)(oy-globalposy)*gsinang2; - oy2 = 1.0/oy2; - px[2] = ghalfx*ox2*oy2 + ghalfx; oy2 *= gyxscale; - py[2] = oy2 + ghoriz; - - for (i=0; i<3; i++) - { - dd[i] = px[i]*gdx + py[i]*gdy + gdo; - uu[i] = px[i]*gux + py[i]*guy + guo; - vv[i] = px[i]*gvx + py[i]*gvy + gvo; - } - - py[0] = fy0; - py[1] = fy1; - py[2] = (getflorzofslope(sectnum,(int32_t)ox,(int32_t)oy)-globalposz)*oy2 + ghoriz; - - ox = py[1]-py[2]; oy = py[2]-py[0]; oz = py[0]-py[1]; - r = 1.0 / (ox*px[0] + oy*px[1] + oz*px[2]); - gdx = (ox*dd[0] + oy*dd[1] + oz*dd[2])*r; - gux = (ox*uu[0] + oy*uu[1] + oz*uu[2])*r; - gvx = (ox*vv[0] + oy*vv[1] + oz*vv[2])*r; - ox = px[2]-px[1]; oy = px[0]-px[2]; oz = px[1]-px[0]; - gdy = (ox*dd[0] + oy*dd[1] + oz*dd[2])*r; - guy = (ox*uu[0] + oy*uu[1] + oz*uu[2])*r; - gvy = (ox*vv[0] + oy*vv[1] + oz*vv[2])*r; - gdo = dd[0] - px[0]*gdx - py[0]*gdy; - guo = uu[0] - px[0]*gux - py[0]*guy; - gvo = vv[0] - px[0]*gvx - py[0]*gvy; - - if (globalorientation&64) //Hack for relative alignment on slopes - { - r = (float)sec->floorheinum / 4096.0; - r = sqrt(r*r+1); - if (!(globalorientation&4)) { gvx *= r; gvy *= r; gvo *= r; } - else { gux *= r; guy *= r; guo *= r; } - } - } - domostpolymethod = (globalorientation>>7)&3; - if (globalposz >= getflorzofslope(sectnum,globalposx,globalposy)) domostpolymethod = -1; //Back-face culling -#ifdef USE_OPENGL - if (!nofog) - { - fogcalc(sec->floorshade,sec->visibility,sec->floorpal); - bglFogf(GL_FOG_DENSITY,fogresult); - bglFogfv(GL_FOG_COLOR,fogcol); - } -#endif - pow2xsplit = 0; domost(x0,fy0,x1,fy1); //flor - domostpolymethod = 0; - } - else if ((nextsectnum < 0) || (!(sector[nextsectnum].floorstat&1))) - { - //Parallaxing sky... hacked for Ken's mountain texture; paper-sky only :/ -#ifdef USE_OPENGL - if (rendmode >= 3) - { - /* if (!nofog) { - bglDisable(GL_FOG); - //r = ((float)globalpisibility)*((float)((uint8_t)(sec->visibility<240?sec->visibility+16:sec->visibility-239)))*FOGSCALE; - //r *= ((double)xdimscale*(double)viewingrange*gdo) / (65536.0*65536.0); - //bglFogf(GL_FOG_DENSITY,r); - } */ - - if (!nofog) - { - fogcalc(sec->floorshade,sec->visibility,sec->floorpal); - bglFogf(GL_FOG_DENSITY,fogresult * 0.005); - bglFogfv(GL_FOG_COLOR,fogcol); - } - - //Use clamping for tiled sky textures - for (i=(1<0; i--) - if (pskyoff[i] != pskyoff[i-1]) - { skyclamphack = r_parallaxskyclamping; break; } - } -#endif - if (bpp == 8 || !usehightile || !hicfindsubst(globalpicnum,globalpal,1)) - { - dd[0] = (float)xdimen*.0000001; //Adjust sky depth based on screen size! - t = (double)((1<<(picsiz[globalpicnum]&15))<>1)+parallaxyoffs)) - vv[1]*ghoriz; - i = (1<<(picsiz[globalpicnum]>>4)); if (i != tilesizy[globalpicnum]) i += i; - vv[0] += dd[0]*((double)((r_parallaxskypanning)?sec->floorypanning:0))*((double)i)/256.0; - - - //Hack to draw black rectangle below sky when looking down... - gdx = 0; gdy = gxyaspect / 262144.0; gdo = -ghoriz*gdy; - gux = 0; guy = 0; guo = 0; - gvx = 0; gvy = (double)(tilesizy[globalpicnum]-1)*gdy; gvo = (double)(tilesizy[globalpicnum-1])*gdo; - oy = (((double)tilesizy[globalpicnum])*dd[0]-vv[0])/vv[1]; - if ((oy > fy0) && (oy > fy1)) domost(x0,oy,x1,oy); - else if ((oy > fy0) != (oy > fy1)) - { - // fy0 fy1 - // \ / - //oy---------- oy---------- - // \ / - // fy1 fy0 - ox = (oy-fy0)*(x1-x0)/(fy1-fy0) + x0; - if (oy > fy0) { domost(x0,oy,ox,oy); domost(ox,oy,x1,fy1); } - else { domost(x0,fy0,ox,oy); domost(ox,oy,x1,oy); } - } - else domost(x0,fy0,x1,fy1); - - - gdx = 0; gdy = 0; gdo = dd[0]; - gux = gdo*(t*((double)xdimscale)*((double)yxaspect)*((double)viewingrange))/(16384.0*65536.0*65536.0*5.0*1024.0); - guy = 0; //guo calculated later - gvx = 0; gvy = vv[1]; gvo = vv[0]; - - i = globalpicnum; r = (fy1-fy0)/(x1-x0); //slope of line - oy = ((double)viewingrange)/(ghalfx*256.0); oz = 1/oy; - - y = ((((int32_t)((x0-ghalfx)*oy))+globalang)>>(11-pskybits)); - fx = x0; - do - { - globalpicnum = pskyoff[y&((1<floorxpanning:0)) - gux*ghalfx; - y++; - ox = fx; fx = ((double)((y<<(11-pskybits))-globalang))*oz+ghalfx; - if (fx > x1) { fx = x1; i = -1; } - - pow2xsplit = 0; domost(ox,(ox-x0)*r+fy0,fx,(fx-x0)*r+fy0); //flor - } - while (i >= 0); - - } - else //NOTE: code copied from ceiling code... lots of duplicated stuff :/ - { - //Skybox code for parallax ceiling! - double _xp0, _yp0, _xp1, _yp1, _oxp0, _oyp0, _t0, _t1, _nx0, _ny0, _nx1, _ny1; - double _ryp0, _ryp1, _x0, _x1, _cy0, _fy0, _cy1, _fy1, _ox0, _ox1; - double nfy0, nfy1; - int32_t skywalx[4] = {-512,512,512,-512}, skywaly[4] = {-512,-512,512,512}; - - pow2xsplit = 0; - skyclamphack = 1; - - for (i=0; i<4; i++) - { - x = skywalx[i&3]; y = skywaly[i&3]; - _xp0 = (double)y*gcosang - (double)x*gsinang; - _yp0 = (double)x*gcosang2 + (double)y*gsinang2; - x = skywalx[(i+1)&3]; y = skywaly[(i+1)&3]; - _xp1 = (double)y*gcosang - (double)x*gsinang; - _yp1 = (double)x*gcosang2 + (double)y*gsinang2; - - _oxp0 = _xp0; _oyp0 = _yp0; - - //Clip to close parallel-screen plane - if (_yp0 < SCISDIST) - { - if (_yp1 < SCISDIST) continue; - _t0 = (SCISDIST-_yp0)/(_yp1-_yp0); _xp0 = (_xp1-_xp0)*_t0+_xp0; _yp0 = SCISDIST; - _nx0 = (skywalx[(i+1)&3]-skywalx[i&3])*_t0+skywalx[i&3]; - _ny0 = (skywaly[(i+1)&3]-skywaly[i&3])*_t0+skywaly[i&3]; - } - else { _t0 = 0.f; _nx0 = skywalx[i&3]; _ny0 = skywaly[i&3]; } - if (_yp1 < SCISDIST) - { - _t1 = (SCISDIST-_oyp0)/(_yp1-_oyp0); _xp1 = (_xp1-_oxp0)*_t1+_oxp0; _yp1 = SCISDIST; - _nx1 = (skywalx[(i+1)&3]-skywalx[i&3])*_t1+skywalx[i&3]; - _ny1 = (skywaly[(i+1)&3]-skywaly[i&3])*_t1+skywaly[i&3]; - } - else { _t1 = 1.f; _nx1 = skywalx[(i+1)&3]; _ny1 = skywaly[(i+1)&3]; } - - _ryp0 = 1.f/_yp0; _ryp1 = 1.f/_yp1; - - //Generate screen coordinates for front side of wall - _x0 = ghalfx*_xp0*_ryp0 + ghalfx; - _x1 = ghalfx*_xp1*_ryp1 + ghalfx; - if (_x1 <= _x0) continue; - if ((_x0 >= x1) || (x0 >= _x1)) continue; - - _ryp0 *= gyxscale; _ryp1 *= gyxscale; - - _cy0 = -8192.f*_ryp0 + ghoriz; - _fy0 = 8192.f*_ryp0 + ghoriz; - _cy1 = -8192.f*_ryp1 + ghoriz; - _fy1 = 8192.f*_ryp1 + ghoriz; - - _ox0 = _x0; _ox1 = _x1; - - //Make sure: x0<=_x0<_x1<=_x1 - nfy0 = fy0; nfy1 = fy1; - if (_x0 < x0) - { - t = (x0-_x0)/(_x1-_x0); - _cy0 += (_cy1-_cy0)*t; - _fy0 += (_fy1-_fy0)*t; - _x0 = x0; - } - else if (_x0 > x0) nfy0 += (_x0-x0)*(fy1-fy0)/(x1-x0); - if (_x1 > x1) - { - t = (x1-_x1)/(_x1-_x0); - _cy1 += (_cy1-_cy0)*t; - _fy1 += (_fy1-_fy0)*t; - _x1 = x1; - } - else if (_x1 < x1) nfy1 += (_x1-x1)*(fy1-fy0)/(x1-x0); - - // (skybox floor) - //(_x0,_fy0)-(_x1,_fy1) - // (skybox wall) - //(_x0,_cy0)-(_x1,_cy1) - // (skybox ceiling) - //(_x0,nfy0)-(_x1,nfy1) - - //ceiling of skybox - ft[0] = 512/16; ft[1] = 512/-16; - ft[2] = ((float)cosglobalang)*(1.f/2147483648.f); - ft[3] = ((float)singlobalang)*(1.f/2147483648.f); - gdx = 0; - gdy = gxyaspect*(1.f/4194304.f); - gdo = -ghoriz*gdy; - gux = (double)ft[3]*((double)viewingrange)/-65536.0; - gvx = (double)ft[2]*((double)viewingrange)/-65536.0; - guy = (double)ft[0]*gdy; gvy = (double)ft[1]*gdy; - guo = (double)ft[0]*gdo; gvo = (double)ft[1]*gdo; - guo += (double)(ft[2]-gux)*ghalfx; - gvo -= (double)(ft[3]+gvx)*ghalfx; - gvx = -gvx; gvy = -gvy; gvo = -gvo; //y-flip skybox floor -#ifdef USE_OPENGL - drawingskybox = 6; //ceiling/5th texture/index 4 of skybox -#endif - if ((_fy0 > nfy0) && (_fy1 > nfy1)) domost(_x0,_fy0,_x1,_fy1); - else if ((_fy0 > nfy0) != (_fy1 > nfy1)) - { - //(ox,oy) is intersection of: (_x0,_cy0)-(_x1,_cy1) - // (_x0,nfy0)-(_x1,nfy1) - //ox = _x0 + (_x1-_x0)*t - //oy = _cy0 + (_cy1-_cy0)*t - //oy = nfy0 + (nfy1-nfy0)*t - t = (_fy0-nfy0)/(nfy1-nfy0-_fy1+_fy0); - ox = _x0 + (_x1-_x0)*t; - oy = _fy0 + (_fy1-_fy0)*t; - if (nfy0 > _fy0) { domost(_x0,nfy0,ox,oy); domost(ox,oy,_x1,_fy1); } - else { domost(_x0,_fy0,ox,oy); domost(ox,oy,_x1,nfy1); } - } - else domost(_x0,nfy0,_x1,nfy1); - - //wall of skybox -#ifdef USE_OPENGL - drawingskybox = i+1; //i+1th texture/index i of skybox -#endif - gdx = (_ryp0-_ryp1)*gxyaspect*(1.f/512.f) / (_ox0-_ox1); - gdy = 0; - gdo = _ryp0*gxyaspect*(1.f/512.f) - gdx*_ox0; - gux = (_t0*_ryp0 - _t1*_ryp1)*gxyaspect*(64.f/512.f) / (_ox0-_ox1); - guo = _t0*_ryp0*gxyaspect*(64.f/512.f) - gux*_ox0; - guy = 0; - _t0 = -8192.0*_ryp0 + ghoriz; - _t1 = -8192.0*_ryp1 + ghoriz; - t = ((gdx*_ox0 + gdo)*8.f) / ((_ox1-_ox0) * _ryp0 * 2048.f); - gvx = (_t0-_t1)*t; - gvy = (_ox1-_ox0)*t; - gvo = -gvx*_ox0 - gvy*_t0; - if ((_cy0 > nfy0) && (_cy1 > nfy1)) domost(_x0,_cy0,_x1,_cy1); - else if ((_cy0 > nfy0) != (_cy1 > nfy1)) - { - //(ox,oy) is intersection of: (_x0,_fy0)-(_x1,_fy1) - // (_x0,nfy0)-(_x1,nfy1) - //ox = _x0 + (_x1-_x0)*t - //oy = _fy0 + (_fy1-_fy0)*t - //oy = nfy0 + (nfy1-nfy0)*t - t = (_cy0-nfy0)/(nfy1-nfy0-_cy1+_cy0); - ox = _x0 + (_x1-_x0)*t; - oy = _cy0 + (_cy1-_cy0)*t; - if (nfy0 > _cy0) { domost(_x0,nfy0,ox,oy); domost(ox,oy,_x1,_cy1); } - else { domost(_x0,_cy0,ox,oy); domost(ox,oy,_x1,nfy1); } - } - else domost(_x0,nfy0,_x1,nfy1); - } - - //Floor of skybox -#ifdef USE_OPENGL - drawingskybox = 5; //floor/6th texture/index 5 of skybox -#endif - ft[0] = 512/16; ft[1] = -512/-16; - ft[2] = ((float)cosglobalang)*(1.f/2147483648.f); - ft[3] = ((float)singlobalang)*(1.f/2147483648.f); - gdx = 0; - gdy = gxyaspect*(-1.f/4194304.f); - gdo = -ghoriz*gdy; - gux = (double)ft[3]*((double)viewingrange)/-65536.0; - gvx = (double)ft[2]*((double)viewingrange)/-65536.0; - guy = (double)ft[0]*gdy; gvy = (double)ft[1]*gdy; - guo = (double)ft[0]*gdo; gvo = (double)ft[1]*gdo; - guo += (double)(ft[2]-gux)*ghalfx; - gvo -= (double)(ft[3]+gvx)*ghalfx; - domost(x0,fy0,x1,fy1); - - skyclamphack = 0; -#ifdef USE_OPENGL - drawingskybox = 0; -#endif - } -#ifdef USE_OPENGL - if (rendmode >= 3) - { - skyclamphack = 0; - if (!nofog) - { - bglEnable(GL_FOG); - //bglFogf(GL_FOG_DENSITY,gvisibility*((float)((uint8_t)(sec->visibility<240?sec->visibility+16:sec->visibility-239)))); - } - } -#endif - } - - globalpicnum = sec->ceilingpicnum; globalshade = sec->ceilingshade; globalpal = (int32_t)((uint8_t)sec->ceilingpal); - globalorientation = sec->ceilingstat; - if (picanm[globalpicnum]&192) globalpicnum += animateoffs(globalpicnum,sectnum); - if (!(globalorientation&1)) - { - if (!(globalorientation&64)) - { ft[0] = globalposx; ft[1] = globalposy; ft[2] = cosglobalang; ft[3] = singlobalang; } - else - { - //relative alignment - fx = (double)(wall[wall[sec->wallptr].point2].x-wall[sec->wallptr].x); - fy = (double)(wall[wall[sec->wallptr].point2].y-wall[sec->wallptr].y); - r = 1.0/sqrt(fx*fx+fy*fy); fx *= r; fy *= r; - ft[2] = cosglobalang*fx + singlobalang*fy; - ft[3] = singlobalang*fx - cosglobalang*fy; - ft[0] = ((double)(globalposx-wall[sec->wallptr].x))*fx + ((double)(globalposy-wall[sec->wallptr].y))*fy; - ft[1] = ((double)(globalposy-wall[sec->wallptr].y))*fx - ((double)(globalposx-wall[sec->wallptr].x))*fy; - if (!(globalorientation&4)) globalorientation ^= 32; else globalorientation ^= 16; - } - gdx = 0; - gdy = gxyaspect; - if (!(globalorientation&2)) gdy /= (double)(sec->ceilingz-globalposz); - gdo = -ghoriz*gdy; - if (globalorientation&8) { ft[0] /= 8; ft[1] /= -8; ft[2] /= 2097152; ft[3] /= 2097152; } - else { ft[0] /= 16; ft[1] /= -16; ft[2] /= 4194304; ft[3] /= 4194304; } - gux = (double)ft[3]*((double)viewingrange)/-65536.0; - gvx = (double)ft[2]*((double)viewingrange)/-65536.0; - guy = (double)ft[0]*gdy; gvy = (double)ft[1]*gdy; - guo = (double)ft[0]*gdo; gvo = (double)ft[1]*gdo; - guo += (double)(ft[2]-gux)*ghalfx; - gvo -= (double)(ft[3]+gvx)*ghalfx; - - //Texture flipping - if (globalorientation&4) - { - r = gux; gux = gvx; gvx = r; - r = guy; guy = gvy; gvy = r; - r = guo; guo = gvo; gvo = r; - } - if (globalorientation&16) { gux = -gux; guy = -guy; guo = -guo; } - if (globalorientation&32) { gvx = -gvx; gvy = -gvy; gvo = -gvo; } - - //Texture panning - fx = (float)sec->ceilingxpanning*((float)(1<<(picsiz[globalpicnum]&15)))/256.0; - fy = (float)sec->ceilingypanning*((float)(1<<(picsiz[globalpicnum]>>4)))/256.0; - if ((globalorientation&(2+64)) == (2+64)) //Hack for panning for slopes w/ relative alignment - { - r = (float)sec->ceilingheinum / 4096.0; r = 1.0/sqrt(r*r+1); - if (!(globalorientation&4)) fy *= r; else fx *= r; - } - guy += gdy*fx; guo += gdo*fx; - gvy += gdy*fy; gvo += gdo*fy; - - if (globalorientation&2) //slopes - { - px[0] = x0; py[0] = ryp0 + ghoriz; - px[1] = x1; py[1] = ryp1 + ghoriz; - - //Pick some point guaranteed to be not collinear to the 1st two points - ox = nx0 + (ny1-ny0); - oy = ny0 + (nx0-nx1); - ox2 = (double)(oy-globalposy)*gcosang - (double)(ox-globalposx)*gsinang ; - oy2 = (double)(ox-globalposx)*gcosang2 + (double)(oy-globalposy)*gsinang2; - oy2 = 1.0/oy2; - px[2] = ghalfx*ox2*oy2 + ghalfx; oy2 *= gyxscale; - py[2] = oy2 + ghoriz; - - for (i=0; i<3; i++) - { - dd[i] = px[i]*gdx + py[i]*gdy + gdo; - uu[i] = px[i]*gux + py[i]*guy + guo; - vv[i] = px[i]*gvx + py[i]*gvy + gvo; - } - - py[0] = cy0; - py[1] = cy1; - py[2] = (getceilzofslope(sectnum,(int32_t)ox,(int32_t)oy)-globalposz)*oy2 + ghoriz; - - ox = py[1]-py[2]; oy = py[2]-py[0]; oz = py[0]-py[1]; - r = 1.0 / (ox*px[0] + oy*px[1] + oz*px[2]); - gdx = (ox*dd[0] + oy*dd[1] + oz*dd[2])*r; - gux = (ox*uu[0] + oy*uu[1] + oz*uu[2])*r; - gvx = (ox*vv[0] + oy*vv[1] + oz*vv[2])*r; - ox = px[2]-px[1]; oy = px[0]-px[2]; oz = px[1]-px[0]; - gdy = (ox*dd[0] + oy*dd[1] + oz*dd[2])*r; - guy = (ox*uu[0] + oy*uu[1] + oz*uu[2])*r; - gvy = (ox*vv[0] + oy*vv[1] + oz*vv[2])*r; - gdo = dd[0] - px[0]*gdx - py[0]*gdy; - guo = uu[0] - px[0]*gux - py[0]*guy; - gvo = vv[0] - px[0]*gvx - py[0]*gvy; - - if (globalorientation&64) //Hack for relative alignment on slopes - { - r = (float)sec->ceilingheinum / 4096.0; - r = sqrt(r*r+1); - if (!(globalorientation&4)) { gvx *= r; gvy *= r; gvo *= r; } - else { gux *= r; guy *= r; guo *= r; } - } - } - domostpolymethod = (globalorientation>>7)&3; - if (globalposz <= getceilzofslope(sectnum,globalposx,globalposy)) domostpolymethod = -1; //Back-face culling -#ifdef USE_OPENGL - if (!nofog) - { - fogcalc(sec->ceilingshade,sec->visibility,sec->ceilingpal); - bglFogf(GL_FOG_DENSITY,fogresult); - bglFogfv(GL_FOG_COLOR,fogcol); - } -#endif - pow2xsplit = 0; domost(x1,cy1,x0,cy0); //ceil - domostpolymethod = 0; - } - else if ((nextsectnum < 0) || (!(sector[nextsectnum].ceilingstat&1))) - { -#ifdef USE_OPENGL - if (rendmode >= 3) - { - /* if (!nofog) { - bglDisable(GL_FOG); - //r = ((float)globalpisibility)*((float)((uint8_t)(sec->visibility<240?sec->visibility+16:sec->visibility-239)))*FOGSCALE; - //r *= ((double)xdimscale*(double)viewingrange*gdo) / (65536.0*65536.0); - //bglFogf(GL_FOG_DENSITY,r); - } - */ - if (!nofog) - { - fogcalc(sec->ceilingshade,sec->visibility,sec->ceilingpal); - bglFogf(GL_FOG_DENSITY,fogresult * 0.005); - bglFogfv(GL_FOG_COLOR,fogcol); - } - //Use clamping for tiled sky textures - for (i=(1<0; i--) - if (pskyoff[i] != pskyoff[i-1]) - { skyclamphack = r_parallaxskyclamping; break; } - } -#endif - //Parallaxing sky... - if (bpp == 8 || !usehightile || !hicfindsubst(globalpicnum,globalpal,1)) - { - //Render for parallaxtype == 0 / paper-sky - dd[0] = (float)xdimen*.0000001; //Adjust sky depth based on screen size! - t = (double)((1<<(picsiz[globalpicnum]&15))<>1)+parallaxyoffs)) - vv[1]*ghoriz; - i = (1<<(picsiz[globalpicnum]>>4)); if (i != tilesizy[globalpicnum]) i += i; - vv[0] += dd[0]*((double)((r_parallaxskypanning)?sec->ceilingypanning:0))*((double)i)/256.0; - - //Hack to draw black rectangle below sky when looking down... - gdx = 0; gdy = gxyaspect / -262144.0; gdo = -ghoriz*gdy; - gux = 0; guy = 0; guo = 0; - gvx = 0; gvy = 0; gvo = 0; - oy = -vv[0]/vv[1]; - if ((oy < cy0) && (oy < cy1)) domost(x1,oy,x0,oy); - else if ((oy < cy0) != (oy < cy1)) - { - /* cy1 cy0 - // / \ - //oy---------- oy--------- - // / \ - // cy0 cy1 - */ - ox = (oy-cy0)*(x1-x0)/(cy1-cy0) + x0; - if (oy < cy0) { domost(ox,oy,x0,oy); domost(x1,cy1,ox,oy); } - else { domost(ox,oy,x0,cy0); domost(x1,oy,ox,oy); } - } - else domost(x1,cy1,x0,cy0); - - gdx = 0; gdy = 0; gdo = dd[0]; - gux = gdo*(t*((double)xdimscale)*((double)yxaspect)*((double)viewingrange))/(16384.0*65536.0*65536.0*5.0*1024.0); - guy = 0; //guo calculated later - gvx = 0; gvy = vv[1]; gvo = vv[0]; - - i = globalpicnum; r = (cy1-cy0)/(x1-x0); //slope of line - oy = ((double)viewingrange)/(ghalfx*256.0); oz = 1/oy; - - y = ((((int32_t)((x0-ghalfx)*oy))+globalang)>>(11-pskybits)); - fx = x0; - do - { - globalpicnum = pskyoff[y&((1<ceilingxpanning:0)) - gux*ghalfx; - y++; - ox = fx; fx = ((double)((y<<(11-pskybits))-globalang))*oz+ghalfx; - if (fx > x1) { fx = x1; i = -1; } - pow2xsplit = 0; domost(fx,(fx-x0)*r+cy0,ox,(ox-x0)*r+cy0); //ceil - } - while (i >= 0); - } - else - { - //Skybox code for parallax ceiling! - double _xp0, _yp0, _xp1, _yp1, _oxp0, _oyp0, _t0, _t1, _nx0, _ny0, _nx1, _ny1; - double _ryp0, _ryp1, _x0, _x1, _cy0, _fy0, _cy1, _fy1, _ox0, _ox1; - double ncy0, ncy1; - int32_t skywalx[4] = {-512,512,512,-512}, skywaly[4] = {-512,-512,512,512}; - - pow2xsplit = 0; - skyclamphack = 1; - - for (i=0; i<4; i++) - { - x = skywalx[i&3]; y = skywaly[i&3]; - _xp0 = (double)y*gcosang - (double)x*gsinang; - _yp0 = (double)x*gcosang2 + (double)y*gsinang2; - x = skywalx[(i+1)&3]; y = skywaly[(i+1)&3]; - _xp1 = (double)y*gcosang - (double)x*gsinang; - _yp1 = (double)x*gcosang2 + (double)y*gsinang2; - - _oxp0 = _xp0; _oyp0 = _yp0; - - //Clip to close parallel-screen plane - if (_yp0 < SCISDIST) - { - if (_yp1 < SCISDIST) continue; - _t0 = (SCISDIST-_yp0)/(_yp1-_yp0); _xp0 = (_xp1-_xp0)*_t0+_xp0; _yp0 = SCISDIST; - _nx0 = (skywalx[(i+1)&3]-skywalx[i&3])*_t0+skywalx[i&3]; - _ny0 = (skywaly[(i+1)&3]-skywaly[i&3])*_t0+skywaly[i&3]; - } - else { _t0 = 0.f; _nx0 = skywalx[i&3]; _ny0 = skywaly[i&3]; } - if (_yp1 < SCISDIST) - { - _t1 = (SCISDIST-_oyp0)/(_yp1-_oyp0); _xp1 = (_xp1-_oxp0)*_t1+_oxp0; _yp1 = SCISDIST; - _nx1 = (skywalx[(i+1)&3]-skywalx[i&3])*_t1+skywalx[i&3]; - _ny1 = (skywaly[(i+1)&3]-skywaly[i&3])*_t1+skywaly[i&3]; - } - else { _t1 = 1.f; _nx1 = skywalx[(i+1)&3]; _ny1 = skywaly[(i+1)&3]; } - - _ryp0 = 1.f/_yp0; _ryp1 = 1.f/_yp1; - - //Generate screen coordinates for front side of wall - _x0 = ghalfx*_xp0*_ryp0 + ghalfx; - _x1 = ghalfx*_xp1*_ryp1 + ghalfx; - if (_x1 <= _x0) continue; - if ((_x0 >= x1) || (x0 >= _x1)) continue; - - _ryp0 *= gyxscale; _ryp1 *= gyxscale; - - _cy0 = -8192.f*_ryp0 + ghoriz; - _fy0 = 8192.f*_ryp0 + ghoriz; - _cy1 = -8192.f*_ryp1 + ghoriz; - _fy1 = 8192.f*_ryp1 + ghoriz; - - _ox0 = _x0; _ox1 = _x1; - - //Make sure: x0<=_x0<_x1<=_x1 - ncy0 = cy0; ncy1 = cy1; - if (_x0 < x0) - { - t = (x0-_x0)/(_x1-_x0); - _cy0 += (_cy1-_cy0)*t; - _fy0 += (_fy1-_fy0)*t; - _x0 = x0; - } - else if (_x0 > x0) ncy0 += (_x0-x0)*(cy1-cy0)/(x1-x0); - if (_x1 > x1) - { - t = (x1-_x1)/(_x1-_x0); - _cy1 += (_cy1-_cy0)*t; - _fy1 += (_fy1-_fy0)*t; - _x1 = x1; - } - else if (_x1 < x1) ncy1 += (_x1-x1)*(cy1-cy0)/(x1-x0); - - // (skybox ceiling) - //(_x0,_cy0)-(_x1,_cy1) - // (skybox wall) - //(_x0,_fy0)-(_x1,_fy1) - // (skybox floor) - //(_x0,ncy0)-(_x1,ncy1) - - //ceiling of skybox -#ifdef USE_OPENGL - drawingskybox = 5; //ceiling/5th texture/index 4 of skybox -#endif - ft[0] = 512/16; ft[1] = -512/-16; - ft[2] = ((float)cosglobalang)*(1.f/2147483648.f); - ft[3] = ((float)singlobalang)*(1.f/2147483648.f); - gdx = 0; - gdy = gxyaspect*-(1.f/4194304.f); - gdo = -ghoriz*gdy; - gux = (double)ft[3]*((double)viewingrange)/-65536.0; - gvx = (double)ft[2]*((double)viewingrange)/-65536.0; - guy = (double)ft[0]*gdy; gvy = (double)ft[1]*gdy; - guo = (double)ft[0]*gdo; gvo = (double)ft[1]*gdo; - guo += (double)(ft[2]-gux)*ghalfx; - gvo -= (double)(ft[3]+gvx)*ghalfx; - if ((_cy0 < ncy0) && (_cy1 < ncy1)) domost(_x1,_cy1,_x0,_cy0); - else if ((_cy0 < ncy0) != (_cy1 < ncy1)) - { - //(ox,oy) is intersection of: (_x0,_cy0)-(_x1,_cy1) - // (_x0,ncy0)-(_x1,ncy1) - //ox = _x0 + (_x1-_x0)*t - //oy = _cy0 + (_cy1-_cy0)*t - //oy = ncy0 + (ncy1-ncy0)*t - t = (_cy0-ncy0)/(ncy1-ncy0-_cy1+_cy0); - ox = _x0 + (_x1-_x0)*t; - oy = _cy0 + (_cy1-_cy0)*t; - if (ncy0 < _cy0) { domost(ox,oy,_x0,ncy0); domost(_x1,_cy1,ox,oy); } - else { domost(ox,oy,_x0,_cy0); domost(_x1,ncy1,ox,oy); } - } - else domost(_x1,ncy1,_x0,ncy0); - - //wall of skybox -#ifdef USE_OPENGL - drawingskybox = i+1; //i+1th texture/index i of skybox -#endif - gdx = (_ryp0-_ryp1)*gxyaspect*(1.f/512.f) / (_ox0-_ox1); - gdy = 0; - gdo = _ryp0*gxyaspect*(1.f/512.f) - gdx*_ox0; - gux = (_t0*_ryp0 - _t1*_ryp1)*gxyaspect*(64.f/512.f) / (_ox0-_ox1); - guo = _t0*_ryp0*gxyaspect*(64.f/512.f) - gux*_ox0; - guy = 0; - _t0 = -8192.0*_ryp0 + ghoriz; - _t1 = -8192.0*_ryp1 + ghoriz; - t = ((gdx*_ox0 + gdo)*8.f) / ((_ox1-_ox0) * _ryp0 * 2048.f); - gvx = (_t0-_t1)*t; - gvy = (_ox1-_ox0)*t; - gvo = -gvx*_ox0 - gvy*_t0; - if ((_fy0 < ncy0) && (_fy1 < ncy1)) domost(_x1,_fy1,_x0,_fy0); - else if ((_fy0 < ncy0) != (_fy1 < ncy1)) - { - //(ox,oy) is intersection of: (_x0,_fy0)-(_x1,_fy1) - // (_x0,ncy0)-(_x1,ncy1) - //ox = _x0 + (_x1-_x0)*t - //oy = _fy0 + (_fy1-_fy0)*t - //oy = ncy0 + (ncy1-ncy0)*t - t = (_fy0-ncy0)/(ncy1-ncy0-_fy1+_fy0); - ox = _x0 + (_x1-_x0)*t; - oy = _fy0 + (_fy1-_fy0)*t; - if (ncy0 < _fy0) { domost(ox,oy,_x0,ncy0); domost(_x1,_fy1,ox,oy); } - else { domost(ox,oy,_x0,_fy0); domost(_x1,ncy1,ox,oy); } - } - else domost(_x1,ncy1,_x0,ncy0); - } - - //Floor of skybox -#ifdef USE_OPENGL - drawingskybox = 6; //floor/6th texture/index 5 of skybox -#endif - ft[0] = 512/16; ft[1] = 512/-16; - ft[2] = ((float)cosglobalang)*(1.f/2147483648.f); - ft[3] = ((float)singlobalang)*(1.f/2147483648.f); - gdx = 0; - gdy = gxyaspect*(1.f/4194304.f); - gdo = -ghoriz*gdy; - gux = (double)ft[3]*((double)viewingrange)/-65536.0; - gvx = (double)ft[2]*((double)viewingrange)/-65536.0; - guy = (double)ft[0]*gdy; gvy = (double)ft[1]*gdy; - guo = (double)ft[0]*gdo; gvo = (double)ft[1]*gdo; - guo += (double)(ft[2]-gux)*ghalfx; - gvo -= (double)(ft[3]+gvx)*ghalfx; - gvx = -gvx; gvy = -gvy; gvo = -gvo; //y-flip skybox floor - domost(x1,cy1,x0,cy0); - - skyclamphack = 0; -#ifdef USE_OPENGL - drawingskybox = 0; -#endif - } -#ifdef USE_OPENGL - if (rendmode >= 3) - { - skyclamphack = 0; - if (!nofog) - { - bglEnable(GL_FOG); - //bglFogf(GL_FOG_DENSITY,gvisibility*((float)((uint8_t)(sec->visibility<240?sec->visibility+16:sec->visibility-239)))); - } - } -#endif - } - - //(x0,cy0) == (u= 0,v=0,d=) - //(x1,cy0) == (u=wal->xrepeat*8,v=0) - //(x0,fy0) == (u= 0,v=v) - // u = (gux*sx + guy*sy + guo) / (gdx*sx + gdy*sy + gdo) - // v = (gvx*sx + gvy*sy + gvo) / (gdx*sx + gdy*sy + gdo) - // 0 = (gux*x0 + guy*cy0 + guo) / (gdx*x0 + gdy*cy0 + gdo) - //wal->xrepeat*8 = (gux*x1 + guy*cy0 + guo) / (gdx*x1 + gdy*cy0 + gdo) - // 0 = (gvx*x0 + gvy*cy0 + gvo) / (gdx*x0 + gdy*cy0 + gdo) - // v = (gvx*x0 + gvy*fy0 + gvo) / (gdx*x0 + gdy*fy0 + gdo) - //sx = x0, u = t0*wal->xrepeat*8, d = yp0; - //sx = x1, u = t1*wal->xrepeat*8, d = yp1; - //d = gdx*sx + gdo - //u = (gux*sx + guo) / (gdx*sx + gdo) - //yp0 = gdx*x0 + gdo - //yp1 = gdx*x1 + gdo - //t0*wal->xrepeat*8 = (gux*x0 + guo) / (gdx*x0 + gdo) - //t1*wal->xrepeat*8 = (gux*x1 + guo) / (gdx*x1 + gdo) - //gdx*x0 + gdo = yp0 - //gdx*x1 + gdo = yp1 - gdx = (ryp0-ryp1)*gxyaspect / (x0-x1); - gdy = 0; - gdo = ryp0*gxyaspect - gdx*x0; - - //gux*x0 + guo = t0*wal->xrepeat*8*yp0 - //gux*x1 + guo = t1*wal->xrepeat*8*yp1 - gux = (t0*ryp0 - t1*ryp1)*gxyaspect*(float)wal->xrepeat*8.f / (x0-x1); - guo = t0*ryp0*gxyaspect*(float)wal->xrepeat*8.f - gux*x0; - guo += (float)wal->xpanning*gdo; - gux += (float)wal->xpanning*gdx; - guy = 0; - //Derivation for u: - // (gvx*x0 + gvy*cy0 + gvo) / (gdx*x0 + gdy*cy0 + gdo) = 0 - // (gvx*x1 + gvy*cy1 + gvo) / (gdx*x1 + gdy*cy1 + gdo) = 0 - // (gvx*x0 + gvy*fy0 + gvo) / (gdx*x0 + gdy*fy0 + gdo) = v - // (gvx*x1 + gvy*fy1 + gvo) / (gdx*x1 + gdy*fy1 + gdo) = v - // (gvx*x0 + gvy*cy0 + gvo*1) = 0 - // (gvx*x1 + gvy*cy1 + gvo*1) = 0 - // (gvx*x0 + gvy*fy0 + gvo*1) = t - ogux = gux; oguy = guy; oguo = guo; - - if (nextsectnum >= 0) - { - getzsofslope(nextsectnum,(int32_t)nx0,(int32_t)ny0,&cz,&fz); - ocy0 = ((float)(cz-globalposz))*ryp0 + ghoriz; - ofy0 = ((float)(fz-globalposz))*ryp0 + ghoriz; - getzsofslope(nextsectnum,(int32_t)nx1,(int32_t)ny1,&cz,&fz); - ocy1 = ((float)(cz-globalposz))*ryp1 + ghoriz; - ofy1 = ((float)(fz-globalposz))*ryp1 + ghoriz; - - if ((wal->cstat&48) == 16) maskwall[maskwallcnt++] = z; - - if (((cy0 < ocy0) || (cy1 < ocy1)) && (!((sec->ceilingstat§or[nextsectnum].ceilingstat)&1))) - { - globalpicnum = wal->picnum; globalshade = wal->shade; globalpal = (int32_t)((uint8_t)wal->pal); - if (picanm[globalpicnum]&192) globalpicnum += animateoffs(globalpicnum,wallnum+16384); - - if (!(wal->cstat&4)) i = sector[nextsectnum].ceilingz; else i = sec->ceilingz; - t0 = ((float)(i-globalposz))*ryp0 + ghoriz; - t1 = ((float)(i-globalposz))*ryp1 + ghoriz; - t = ((gdx*x0 + gdo) * (float)wal->yrepeat) / ((x1-x0) * ryp0 * 2048.f); - i = (1<<(picsiz[globalpicnum]>>4)); if (i < tilesizy[globalpicnum]) i <<= 1; - - ypan = wal->ypanning; - ftol((i-tilesizy[globalpicnum])*(255.f/i),&yoffs); - if (wal->cstat&4) - { - if (ypan>256-yoffs) - { - ypan-=yoffs; - } - } - else - { - // not hacked yet - } - - fy = (float)ypan * ((float)i) / 256.0; - gvx = (t0-t1)*t; - gvy = (x1-x0)*t; - gvo = -gvx*x0 - gvy*t0 + fy*gdo; gvx += fy*gdx; gvy += fy*gdy; - - if (wal->cstat&8) //xflip - { - t = (float)(wal->xrepeat*8 + wal->xpanning*2); - gux = gdx*t - gux; - guy = gdy*t - guy; - guo = gdo*t - guo; - } - if (wal->cstat&256) { gvx = -gvx; gvy = -gvy; gvo = -gvo; } //yflip -#ifdef USE_OPENGL - if (!nofog) - { - fogcalc(wal->shade,sec->visibility,sec->floorpal); - bglFogf(GL_FOG_DENSITY,fogresult); - bglFogfv(GL_FOG_COLOR,fogcol); - } -#endif - pow2xsplit = 1; domost(x1,ocy1,x0,ocy0); - if (wal->cstat&8) { gux = ogux; guy = oguy; guo = oguo; } - } - if (((ofy0 < fy0) || (ofy1 < fy1)) && (!((sec->floorstat§or[nextsectnum].floorstat)&1))) - { - if (!(wal->cstat&2)) nwal = wal; - else - { - nwal = &wall[wal->nextwall]; - guo += (float)(nwal->xpanning-wal->xpanning)*gdo; - gux += (float)(nwal->xpanning-wal->xpanning)*gdx; - guy += (float)(nwal->xpanning-wal->xpanning)*gdy; - } - globalpicnum = nwal->picnum; globalshade = nwal->shade; globalpal = (int32_t)((uint8_t)nwal->pal); - if (picanm[globalpicnum]&192) globalpicnum += animateoffs(globalpicnum,wallnum+16384); - - if (!(nwal->cstat&4)) i = sector[nextsectnum].floorz; else i = sec->ceilingz; - t0 = ((float)(i-globalposz))*ryp0 + ghoriz; - t1 = ((float)(i-globalposz))*ryp1 + ghoriz; - t = ((gdx*x0 + gdo) * (float)wal->yrepeat) / ((x1-x0) * ryp0 * 2048.f); - i = (1<<(picsiz[globalpicnum]>>4)); if (i < tilesizy[globalpicnum]) i <<= 1; - - ypan = nwal->ypanning; - ftol((i-tilesizy[globalpicnum])*(255.f/i),&yoffs); - if (!(nwal->cstat&4)) - { - if (ypan>256-yoffs) - { - ypan-=yoffs; - } - } - else - { - // Still need a hack, depending on the wall(height,ypanning,yrepeat,tilesizy) - // it should do "ypan-=yoffs" or "ypan+=yoffs" or [nothing]. - // Example: the film projector in the E1L1.map needs "ypan-=yoffs" - } - - fy = (float)ypan * ((float)i) / 256.0; - gvx = (t0-t1)*t; - gvy = (x1-x0)*t; - gvo = -gvx*x0 - gvy*t0 + fy*gdo; gvx += fy*gdx; gvy += fy*gdy; - - if (wal->cstat&8) //xflip - { - t = (float)(wal->xrepeat*8 + nwal->xpanning*2); - gux = gdx*t - gux; - guy = gdy*t - guy; - guo = gdo*t - guo; - } - if (nwal->cstat&256) { gvx = -gvx; gvy = -gvy; gvo = -gvo; } //yflip -#ifdef USE_OPENGL - if (!nofog) - { - fogcalc(nwal->shade,sec->visibility,sec->floorpal); - bglFogf(GL_FOG_DENSITY,fogresult); - bglFogfv(GL_FOG_COLOR,fogcol); - } -#endif - pow2xsplit = 1; domost(x0,ofy0,x1,ofy1); - if (wal->cstat&(2+8)) { guo = oguo; gux = ogux; guy = oguy; } - } - } - - if ((nextsectnum < 0) || (wal->cstat&32)) //White/1-way wall - { - if (nextsectnum < 0) globalpicnum = wal->picnum; else globalpicnum = wal->overpicnum; - globalshade = wal->shade; globalpal = (int32_t)((uint8_t)wal->pal); - if (picanm[globalpicnum]&192) globalpicnum += animateoffs(globalpicnum,wallnum+16384); - - if (nextsectnum >= 0) { if (!(wal->cstat&4)) i = nextsec->ceilingz; else i = sec->ceilingz; } - else { if (!(wal->cstat&4)) i = sec->ceilingz; else i = sec->floorz; } - t0 = ((float)(i-globalposz))*ryp0 + ghoriz; - t1 = ((float)(i-globalposz))*ryp1 + ghoriz; - t = ((gdx*x0 + gdo) * (float)wal->yrepeat) / ((x1-x0) * ryp0 * 2048.f); - i = (1<<(picsiz[globalpicnum]>>4)); if (i < tilesizy[globalpicnum]) i <<= 1; - - ypan = wal->ypanning; - ftol((i-tilesizy[globalpicnum])*(255.f/i),&yoffs); - if (!(wal->cstat&4)) - { - if (ypan>256-yoffs) - { - ypan-=yoffs; - } - } - else - { - // not hacked yet - } - - fy = (float)ypan * ((float)i) / 256.0; - gvx = (t0-t1)*t; - gvy = (x1-x0)*t; - gvo = -gvx*x0 - gvy*t0 + fy*gdo; gvx += fy*gdx; gvy += fy*gdy; - - if (wal->cstat&8) //xflip - { - t = (float)(wal->xrepeat*8 + wal->xpanning*2); - gux = gdx*t - gux; - guy = gdy*t - guy; - guo = gdo*t - guo; - } - if (wal->cstat&256) { gvx = -gvx; gvy = -gvy; gvo = -gvo; } //yflip -#ifdef USE_OPENGL - if (!nofog) - { - fogcalc(wal->shade,sec->visibility,sec->floorpal); - bglFogf(GL_FOG_DENSITY,fogresult); - bglFogfv(GL_FOG_COLOR,fogcol); - } -#endif - pow2xsplit = 1; domost(x0,-10000,x1,-10000); - } - - if (nextsectnum >= 0) - if ((!(gotsector[nextsectnum>>3]&pow2char[nextsectnum&7])) && (testvisiblemost(x0,x1))) - polymost_scansector(nextsectnum); - } -} - -static int32_t polymost_bunchfront(int32_t b1, int32_t b2) -{ - double x1b1, x1b2, x2b1, x2b2; - int32_t b1f, b2f, i; - - b1f = bunchfirst[b1]; x1b1 = dxb1[b1f]; x2b2 = dxb2[bunchlast[b2]]; if (x1b1 >= x2b2) return(-1); - b2f = bunchfirst[b2]; x1b2 = dxb1[b2f]; x2b1 = dxb2[bunchlast[b1]]; if (x1b2 >= x2b1) return(-1); - - if (x1b1 >= x1b2) - { - for (i=b2f; dxb2[i]<=x1b1; i=p2[i]); - return(wallfront(b1f,i)); - } - for (i=b1f; dxb2[i]<=x1b2; i=p2[i]); - return(wallfront(i,b2f)); -} - -static void polymost_scansector(int32_t sectnum) -{ - double d, xp1, yp1, xp2, yp2; - walltype *wal, *wal2; - spritetype *spr; - int32_t z, zz, startwall, endwall, numscansbefore, scanfirst, bunchfrst, nextsectnum; - int32_t xs, ys, x1, y1, x2, y2; - - if (sectnum < 0) return; - if (automapping) show2dsector[sectnum>>3] |= pow2char[sectnum&7]; - - sectorborder[0] = sectnum, sectorbordercnt = 1; - do - { - sectnum = sectorborder[--sectorbordercnt]; - - for (z=headspritesect[sectnum]; z>=0; z=nextspritesect[z]) - { - spr = &sprite[z]; - if ((((spr->cstat&0x8000) == 0) || (showinvisibility)) && - (spr->xrepeat > 0) && (spr->yrepeat > 0) && - (spritesortcnt < MAXSPRITESONSCREEN)) - { - xs = spr->x-globalposx; ys = spr->y-globalposy; - if ((spr->cstat&48) || (xs*gcosang+ys*gsinang > 0)) - { - copybufbyte(spr,&tsprite[spritesortcnt],sizeof(spritetype)); - spriteext[z].tspr = (spritetype *)&tsprite[spritesortcnt]; - tsprite[spritesortcnt++].owner = z; - } - } - } - - gotsector[sectnum>>3] |= pow2char[sectnum&7]; - - bunchfrst = numbunches; - numscansbefore = numscans; - - startwall = sector[sectnum].wallptr; endwall = sector[sectnum].wallnum+startwall; - scanfirst = numscans; - xp2 = 0; yp2 = 0; - for (z=startwall,wal=&wall[z]; zpoint2]; - x1 = wal->x-globalposx; y1 = wal->y-globalposy; - x2 = wal2->x-globalposx; y2 = wal2->y-globalposy; - - nextsectnum = wal->nextsector; //Scan close sectors - if ((nextsectnum >= 0) && (!(wal->cstat&32)) && (!(gotsector[nextsectnum>>3]&pow2char[nextsectnum&7]))) - { - d = (double)x1*(double)y2 - (double)x2*(double)y1; xp1 = (double)(x2-x1); yp1 = (double)(y2-y1); - if (d *d <= (xp1*xp1 + yp1*yp1)*(SCISDIST*SCISDIST*260.0)) - sectorborder[sectorbordercnt++] = nextsectnum; - } - - if ((z == startwall) || (wall[z-1].point2 != z)) - { - xp1 = ((double)y1*(double)cosglobalang - (double)x1*(double)singlobalang)/64.0; - yp1 = ((double)x1*(double)cosviewingrangeglobalang + (double)y1*(double)sinviewingrangeglobalang)/64.0; - } - else { xp1 = xp2; yp1 = yp2; } - xp2 = ((double)y2*(double)cosglobalang - (double)x2*(double)singlobalang)/64.0; - yp2 = ((double)x2*(double)cosviewingrangeglobalang + (double)y2*(double)sinviewingrangeglobalang)/64.0; - if ((yp1 >= SCISDIST) || (yp2 >= SCISDIST)) - if ((double)xp1*(double)yp2 < (double)xp2*(double)yp1) //if wall is facing you... - { - if (yp1 >= SCISDIST) - dxb1[numscans] = (double)xp1*ghalfx/(double)yp1 + ghalfx; - else dxb1[numscans] = -1e32; - - if (yp2 >= SCISDIST) - dxb2[numscans] = (double)xp2*ghalfx/(double)yp2 + ghalfx; - else dxb2[numscans] = 1e32; - - if (dxb1[numscans] < dxb2[numscans]) - { thesector[numscans] = sectnum; thewall[numscans] = z; p2[numscans] = numscans+1; numscans++; } - } - - if ((wall[z].point2 < z) && (scanfirst < numscans)) - { p2[numscans-1] = scanfirst; scanfirst = numscans; } - } - - for (z=numscansbefore; z dxb1[p2[z]])) - { bunchfirst[numbunches++] = p2[z]; p2[z] = -1; } - - for (z=bunchfrst; z=0; zz=p2[zz]); - bunchlast[z] = zz; - } - } - while (sectorbordercnt > 0); -} - -void polymost_drawrooms() -{ - int32_t i, j, n, n2, closest; - double ox, oy, oz, ox2, oy2, oz2, r, px[6], py[6], pz[6], px2[6], py2[6], pz2[6], sx[6], sy[6]; - - if (!rendmode) return; - - begindrawing(); - frameoffset = frameplace + windowy1*bytesperline + windowx1; - -#ifdef USE_OPENGL - if (rendmode >= 3) - { - resizeglcheck(); - - if (editstatus) - bglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - bglDisable(GL_BLEND); - bglEnable(GL_TEXTURE_2D); - //bglTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); //default anyway - bglEnable(GL_DEPTH_TEST); - bglDepthFunc(GL_ALWAYS); //NEVER,LESS,(,L)EQUAL,GREATER,(NOT,G)EQUAL,ALWAYS - - //bglPolygonOffset(1,1); //Supposed to make sprites pasted on walls or floors not disappear - bglDepthRange(0.00001,1.0); //<- this is more widely supported than glPolygonOffset - - //Enable this for OpenGL red-blue glasses mode :) - if (glredbluemode) - { - static int32_t grbfcnt = 0; grbfcnt++; - if (redblueclearcnt < numpages) { redblueclearcnt++; bglColorMask(1,1,1,1); bglClear(GL_COLOR_BUFFER_BIT); } - if (grbfcnt&1) - { - bglViewport(windowx1-16,yres-(windowy2+1),windowx2-(windowx1-16)+1,windowy2-windowy1+1); - bglColorMask(1,0,0,1); - globalposx += singlobalang/1024; - globalposy -= cosglobalang/1024; - } - else - { - bglViewport(windowx1,yres-(windowy2+1),windowx2+16-windowx1+1,windowy2-windowy1+1); - bglColorMask(0,1,1,1); - globalposx -= singlobalang/1024; - globalposy += cosglobalang/1024; - } - } - } -#endif - - //Polymost supports true look up/down :) Here, we convert horizon to angle. - //gchang&gshang are cos&sin of this angle (respectively) - gyxscale = ((double)xdimenscale)/131072.0; - gxyaspect = ((double)xyaspect*(double)viewingrange)*(5.0/(65536.0*262144.0)); - gviewxrange = ((double)viewingrange)*((double)xdimen)/(32768.0*1024.0); - gcosang = ((double)cosglobalang)/262144.0; - gsinang = ((double)singlobalang)/262144.0; - gcosang2 = gcosang*((double)viewingrange)/65536.0; - gsinang2 = gsinang*((double)viewingrange)/65536.0; - ghalfx = (double)halfxdimen; grhalfxdown10 = 1.0/(((double)ghalfx)*1024); - ghoriz = (double)globalhoriz; - - gvisibility = ((float)globalvisibility)*FOGSCALE; - - //global cos/sin height angle - r = (double)((ydimen>>1)-ghoriz); - gshang = r/sqrt(r*r+ghalfx*ghalfx); - gchang = sqrt(1.0-gshang*gshang); - ghoriz = (double)(ydimen>>1); - - //global cos/sin tilt angle - gctang = cos(gtang); - gstang = sin(gtang); - if (fabs(gstang) < .001) //This hack avoids nasty precision bugs in domost() - { gstang = 0; if (gctang > 0) gctang = 1.0; else gctang = -1.0; } - - if (inpreparemirror) - gstang = -gstang; - - //Generate viewport trapezoid (for handling screen up/down) - px[0] = px[3] = 0-1; px[1] = px[2] = windowx2+1-windowx1+2; - py[0] = py[1] = 0-1; py[2] = py[3] = windowy2+1-windowy1+2; n = 4; - for (i=0; i= n) j = 0; - if (pz[i] >= SCISDIST) { px2[n2] = px[i]; py2[n2] = py[i]; pz2[n2] = pz[i]; n2++; } - if ((pz[i] >= SCISDIST) != (pz[j] >= SCISDIST)) - { - r = (SCISDIST-pz[i])/(pz[j]-pz[i]); - px2[n2] = (px[j]-px[i])*r + px[i]; - py2[n2] = (py[j]-py[i])*r + py[i]; - pz2[n2] = SCISDIST; n2++; - } - } - if (n2 < 3) { enddrawing(); return; } - for (i=0; i 0.7f) - ratio += 4.f*(gshang-0.7f); - if (gshang < -0.7f) - ratio += 4.f*(-gshang-0.7f); - } -#endif - - ox2 = (searchx-ghalfx)/ratio; oy2 = (searchy-ghoriz)/ ratio; oz2 = ghalfx; - - //Tilt rotation - ox = ox2*gctang + oy2*gstang; - oy = oy2*gctang - ox2*gstang; - oz = oz2; - - //Up/down rotation - ox2 = oz*gchang - oy*gshang; - oy2 = ox; - oz2 = oy*gchang + oz*gshang; - - //Standard Left/right rotation - vx = (int32_t)(ox2*((float)cosglobalang) - oy2*((float)singlobalang)); - vy = (int32_t)(ox2*((float)singlobalang) + oy2*((float)cosglobalang)); - vz = (int32_t)(oz2*16384.0); - - vect.x = globalposx; - vect.y = globalposy; - vect.z = globalposz; - - hitallsprites = 1; - hitscan((const vec3_t *)&vect,globalcursectnum, //Start position - vx>>10,vy>>10,vz>>6,&hitinfo,0xffff0030); - - if (hitinfo.hitsect != -1) // if hitsect is -1, hitscan overflowed somewhere - { - getzsofslope(hitinfo.hitsect,hitinfo.pos.x,hitinfo.pos.y,&cz,&fz); - hitallsprites = 0; - - searchsector = hitinfo.hitsect; - if (hitinfo.pos.zfz) searchstat = 2; else if (hitinfo.hitwall >= 0) - { - searchbottomwall = searchwall = hitinfo.hitwall; searchstat = 0; - if (wall[hitinfo.hitwall].nextwall >= 0) - { - int32_t cz, fz; - getzsofslope(wall[hitinfo.hitwall].nextsector,hitinfo.pos.x,hitinfo.pos.y,&cz,&fz); - if (hitinfo.pos.z > fz) - { - if (wall[hitinfo.hitwall].cstat&2) //'2' bottoms of walls - searchbottomwall = wall[hitinfo.hitwall].nextwall; - } - else if ((hitinfo.pos.z > cz) && (wall[hitinfo.hitwall].cstat&(16+32))) //masking or 1-way - searchstat = 4; - } - } - else if (hitinfo.hitsprite >= 0) { searchwall = hitinfo.hitsprite; searchstat = 3; } - else - { - int32_t cz, fz; - getzsofslope(hitinfo.hitsect,hitinfo.pos.x,hitinfo.pos.y,&cz,&fz); - if ((hitinfo.pos.z<<1) < cz+fz) searchstat = 1; else searchstat = 2; - //if (vz < 0) searchstat = 1; else searchstat = 2; //Won't work for slopes :/ - } - - if (preview_mouseaim && spritesortcnt < MAXSPRITESONSCREEN) - { - spritetype *tsp = &tsprite[spritesortcnt]; - double dadist, x,y,z; - Bmemcpy(tsp, &hitinfo.pos, sizeof(vec3_t)); - x = tsp->x-globalposx; y=tsp->y-globalposy; z=(tsp->z-globalposz)/16.0; - dadist = sqrt(x*x + y*y + z*z); - tsp->sectnum = hitinfo.hitsect; - tsp->picnum = 2523; // CROSSHAIR - tsp->cstat = 128; - tsp->owner = MAXSPRITES-1; - tsp->xrepeat = tsp->yrepeat = min(max(1, (int32_t)(dadist*48.0/3200.0)), 255); - sprite[tsp->owner].xoffset = sprite[tsp->owner].yoffset = 0; - tspriteptr[spritesortcnt++] = tsp; - } - - if ((searchstat==1 || searchstat==2) && searchsector>=0) - { - int32_t scrv[2] = {(vx>>12), (vy>>12)}; - int32_t scrv_r[2] = {scrv[1], -scrv[0]}; - walltype *wal = &wall[sector[searchsector].wallptr]; - int32_t wdistsq, bestwdistsq=0x7fffffff; - int16_t k, bestk=-1; - - for (k=0; k= 0) - searchwall = sector[searchsector].wallptr + bestk; - } - } - searchit = 0; - } - - numscans = numbunches = 0; - - if (globalcursectnum >= MAXSECTORS) - globalcursectnum -= MAXSECTORS; - else - { - i = globalcursectnum; - updatesector(globalposx,globalposy,&globalcursectnum); - if (globalcursectnum < 0) globalcursectnum = i; - } - - polymost_scansector(globalcursectnum); - - if (inpreparemirror) - { - grhalfxdown10x = -grhalfxdown10; - inpreparemirror = 0; - polymost_drawalls(0); - numbunches--; - bunchfirst[0] = bunchfirst[numbunches]; - bunchlast[0] = bunchlast[numbunches]; - } - else - grhalfxdown10x = grhalfxdown10; - - while (numbunches > 0) - { - memset(ptempbuf,0,numbunches+3); ptempbuf[0] = 1; - - closest = 0; //Almost works, but not quite :( - for (i=1; i= 3) - { - bglDepthFunc(GL_LEQUAL); //NEVER,LESS,(,L)EQUAL,GREATER,(NOT,G)EQUAL,ALWAYS - - //bglPolygonOffset(0,0); - bglDepthRange(0.0,0.99999); //<- this is more widely supported than glPolygonOffset - } -#endif - - enddrawing(); -} - -void polymost_drawmaskwall(int32_t damaskwallcnt) -{ - double dpx[8], dpy[8], dpx2[8], dpy2[8]; - float fy, x0, x1, sx0, sy0, sx1, sy1, xp0, yp0, xp1, yp1, oxp0, oyp0, ryp0, ryp1; - float r, t, t0, t1, csy[4], fsy[4]; - int32_t i, j, n, n2, z, sectnum, z1, z2, cz[4], fz[4], method; - int32_t m0, m1; - sectortype *sec, *nsec; - walltype *wal, *wal2; - - z = maskwall[damaskwallcnt]; - wal = &wall[thewall[z]]; wal2 = &wall[wal->point2]; - sectnum = thesector[z]; sec = §or[sectnum]; - nsec = §or[wal->nextsector]; - z1 = max(nsec->ceilingz,sec->ceilingz); - z2 = min(nsec->floorz,sec->floorz); - - globalpicnum = wal->overpicnum; if ((uint32_t)globalpicnum >= MAXTILES) globalpicnum = 0; - if (picanm[globalpicnum]&192) globalpicnum += animateoffs(globalpicnum,(int16_t)thewall[z]+16384); - globalshade = (int32_t)wal->shade; - globalpal = (int32_t)((uint8_t)wal->pal); - globalorientation = (int32_t)wal->cstat; - - sx0 = (float)(wal->x-globalposx); sx1 = (float)(wal2->x-globalposx); - sy0 = (float)(wal->y-globalposy); sy1 = (float)(wal2->y-globalposy); - yp0 = sx0*gcosang2 + sy0*gsinang2; - yp1 = sx1*gcosang2 + sy1*gsinang2; - if ((yp0 < SCISDIST) && (yp1 < SCISDIST)) return; - xp0 = sy0*gcosang - sx0*gsinang; - xp1 = sy1*gcosang - sx1*gsinang; - - //Clip to close parallel-screen plane - oxp0 = xp0; oyp0 = yp0; - if (yp0 < SCISDIST) { t0 = (SCISDIST-yp0)/(yp1-yp0); xp0 = (xp1-xp0)*t0+xp0; yp0 = SCISDIST; } - else t0 = 0.f; - if (yp1 < SCISDIST) { t1 = (SCISDIST-oyp0)/(yp1-oyp0); xp1 = (xp1-oxp0)*t1+oxp0; yp1 = SCISDIST; } - else { t1 = 1.f; } - - m0 = (int32_t)((wal2->x-wal->x)*t0+wal->x); - m1 = (int32_t)((wal2->y-wal->y)*t0+wal->y); - getzsofslope(sectnum,m0,m1,&cz[0],&fz[0]); - getzsofslope(wal->nextsector,m0,m1,&cz[1],&fz[1]); - m0 = (int32_t)((wal2->x-wal->x)*t1+wal->x); - m1 = (int32_t)((wal2->y-wal->y)*t1+wal->y); - getzsofslope(sectnum,m0,m1,&cz[2],&fz[2]); - getzsofslope(wal->nextsector,m0,m1,&cz[3],&fz[3]); - - ryp0 = 1.f/yp0; ryp1 = 1.f/yp1; - - //Generate screen coordinates for front side of wall - x0 = ghalfx*xp0*ryp0 + ghalfx; - x1 = ghalfx*xp1*ryp1 + ghalfx; - if (x1 <= x0) return; - - ryp0 *= gyxscale; ryp1 *= gyxscale; - - gdx = (ryp0-ryp1)*gxyaspect / (x0-x1); - gdy = 0; - gdo = ryp0*gxyaspect - gdx*x0; - - //gux*x0 + guo = t0*wal->xrepeat*8*yp0 - //gux*x1 + guo = t1*wal->xrepeat*8*yp1 - gux = (t0*ryp0 - t1*ryp1)*gxyaspect*(float)wal->xrepeat*8.f / (x0-x1); - guo = t0*ryp0*gxyaspect*(float)wal->xrepeat*8.f - gux*x0; - guo += (float)wal->xpanning*gdo; - gux += (float)wal->xpanning*gdx; - guy = 0; - - if (!(wal->cstat&4)) i = z1; else i = z2; - i -= globalposz; - t0 = ((float)i)*ryp0 + ghoriz; - t1 = ((float)i)*ryp1 + ghoriz; - t = ((gdx*x0 + gdo) * (float)wal->yrepeat) / ((x1-x0) * ryp0 * 2048.f); - i = (1<<(picsiz[globalpicnum]>>4)); if (i < tilesizy[globalpicnum]) i <<= 1; - fy = (float)wal->ypanning * ((float)i) / 256.0; - gvx = (t0-t1)*t; - gvy = (x1-x0)*t; - gvo = -gvx*x0 - gvy*t0 + fy*gdo; gvx += fy*gdx; gvy += fy*gdy; - - if (wal->cstat&8) //xflip - { - t = (float)(wal->xrepeat*8 + wal->xpanning*2); - gux = gdx*t - gux; - guy = gdy*t - guy; - guo = gdo*t - guo; - } - if (wal->cstat&256) { gvx = -gvx; gvy = -gvy; gvo = -gvo; } //yflip - - method = 1; pow2xsplit = 1; - if (wal->cstat&128) { if (!(wal->cstat&512)) method = 2; else method = 3; } - -#ifdef USE_OPENGL - if (!nofog) - { - if (rendmode >= 3) - { - fogcalc(wal->shade,sec->visibility,sec->floorpal); - bglFogf(GL_FOG_DENSITY,fogresult); - bglFogfv(GL_FOG_COLOR,fogcol); - } - } -#endif - - for (i=0; i<2; i++) - { - csy[i] = ((float)(cz[i]-globalposz))*ryp0 + ghoriz; - fsy[i] = ((float)(fz[i]-globalposz))*ryp0 + ghoriz; - csy[i+2] = ((float)(cz[i+2]-globalposz))*ryp1 + ghoriz; - fsy[i+2] = ((float)(fz[i+2]-globalposz))*ryp1 + ghoriz; - } - - //Clip 2 quadrilaterals - // /csy3 - // / | - // csy0------/----csy2 - // | /xxxxxxx| - // | /xxxxxxxxx| - // csy1/xxxxxxxxxxx| - // |xxxxxxxxxxx/fsy3 - // |xxxxxxxxx/ | - // |xxxxxxx/ | - // fsy0----/------fsy2 - // | / - // fsy1/ - - dpx[0] = x0; dpy[0] = csy[1]; - dpx[1] = x1; dpy[1] = csy[3]; - dpx[2] = x1; dpy[2] = fsy[3]; - dpx[3] = x0; dpy[3] = fsy[1]; - n = 4; - - //Clip to (x0,csy[0])-(x1,csy[2]) - n2 = 0; t1 = -((dpx[0]-x0)*(csy[2]-csy[0]) - (dpy[0]-csy[0])*(x1-x0)); - for (i=0; i= n) j = 0; - - t0 = t1; t1 = -((dpx[j]-x0)*(csy[2]-csy[0]) - (dpy[j]-csy[0])*(x1-x0)); - if (t0 >= 0) { dpx2[n2] = dpx[i]; dpy2[n2] = dpy[i]; n2++; } - if ((t0 >= 0) != (t1 >= 0)) - { - r = t0/(t0-t1); - dpx2[n2] = (dpx[j]-dpx[i])*r + dpx[i]; - dpy2[n2] = (dpy[j]-dpy[i])*r + dpy[i]; - n2++; - } - } - if (n2 < 3) return; - - //Clip to (x1,fsy[2])-(x0,fsy[0]) - n = 0; t1 = -((dpx2[0]-x1)*(fsy[0]-fsy[2]) - (dpy2[0]-fsy[2])*(x0-x1)); - for (i=0; i= n2) j = 0; - - t0 = t1; t1 = -((dpx2[j]-x1)*(fsy[0]-fsy[2]) - (dpy2[j]-fsy[2])*(x0-x1)); - if (t0 >= 0) { dpx[n] = dpx2[i]; dpy[n] = dpy2[i]; n++; } - if ((t0 >= 0) != (t1 >= 0)) - { - r = t0/(t0-t1); - dpx[n] = (dpx2[j]-dpx2[i])*r + dpx2[i]; - dpy[n] = (dpy2[j]-dpy2[i])*r + dpy2[i]; - n++; - } - } - if (n < 3) return; - - drawpoly(dpx,dpy,n,method); -} - -int32_t lastcullcheck = 0; -char cullmodel[MAXSPRITES]; -int32_t cullcheckcnt = 0; - -int32_t __fastcall polymost_checkcoordinates(int32_t x, int32_t y, spritetype *tspr) -{ - int16_t datempsectnum = tspr->sectnum; - int32_t oldx = x, i, j = (tilesizy[tspr->picnum]*tspr->yrepeat); - -RECHECK: - updatesectorz(tspr->x+x,tspr->y+y,tspr->z,&datempsectnum); - - if (datempsectnum == -1) - { - if (x == y || x != oldx) - return 0; - swaplong(&x,&y); - updatesector(tspr->x+x,tspr->y+y,&datempsectnum); - } - - i = 4; - do - { - cullcheckcnt += 2; - if (cansee(globalposx, globalposy, globalposz, globalcursectnum, - tspr->x+x, tspr->y+y, tspr->z-(j*i)-512, datempsectnum)) - return 1; - if (cansee(globalposx, globalposy, globalposz, globalcursectnum, - tspr->x+x, tspr->y+y, tspr->z-(j*(i-1))-512, datempsectnum)) - return 1; - i -= 2; - } - while (i); - - cullcheckcnt++; - if (cansee(globalposx, globalposy, globalposz, globalcursectnum, - tspr->x+x, tspr->y+y, tspr->z-512, datempsectnum)) - return 1; - - if (x != y && x == oldx) - { - swaplong(&x,&y); - goto RECHECK; - } - - return 0; -} - -void polymost_drawsprite(int32_t snum) -{ - double px[6], py[6]; - float f, c, s, fx, fy, sx0, sy0, sx1, xp0, yp0, xp1, yp1, oxp0, oyp0, ryp0, ryp1, ft[4]; - float x0, y0, x1, y1, sc0, sf0, sc1, sf1, px2[6], py2[6], xv, yv, t0, t1; - int32_t i, j, spritenum, xoff=0, yoff=0, method, npoints; - spritetype *tspr; - int32_t posx,posy; - int32_t oldsizx, oldsizy; - int32_t tsizx, tsizy; - tspr = tspriteptr[snum]; - if (tspr->owner < 0 || tspr->picnum < 0 || tspr->picnum >= MAXTILES) return; - - globalpicnum = tspr->picnum; - globalshade = tspr->shade; - globalpal = tspr->pal; - globalorientation = tspr->cstat; - spritenum = tspr->owner; - - if ((globalorientation&48) != 48) // only non-voxel sprites should do this - { - int32_t flag; - if (picanm[globalpicnum]&192) globalpicnum += animateoffs(globalpicnum,spritenum+32768); - flag = usehightile&&h_xsize[globalpicnum]; - xoff = (int32_t)tspr->xoffset; - yoff = (int32_t)tspr->yoffset; - xoff += (int8_t)((flag)?(h_xoffs[globalpicnum]):((picanm[globalpicnum]>>8)&255)); - yoff += (int8_t)((flag)?(h_yoffs[globalpicnum]):((picanm[globalpicnum]>>16)&255)); - } - - method = 1+4; - if (tspr->cstat&2) { if (!(tspr->cstat&512)) method = 2+4; else method = 3+4; } - -#ifdef USE_OPENGL - - if (!nofog && rendmode >= 3) - { - fogcalc(globalshade,sector[tspr->sectnum].visibility,sector[tspr->sectnum].floorpal); - bglFogf(GL_FOG_DENSITY,fogresult); - bglFogfv(GL_FOG_COLOR,fogcol); - } - - while (rendmode >= 3 && !(spriteext[tspr->owner].flags&SPREXT_NOTMD)) - { - if (usemodels && tile2model[Ptile2tile(tspr->picnum,tspr->pal)].modelid >= 0 && tile2model[Ptile2tile(tspr->picnum,tspr->pal)].framenum >= 0) - { -// md2model *modelptr = (md2model *)models[tile2model[Ptile2tile(tspr->picnum,tspr->pal)].modelid]; - if (tspr->owner < 0 || tspr->owner >= MAXSPRITES || tspr->statnum == TSPR_MIRROR) - { - if (mddraw(tspr)) return; - break; // else, render as flat sprite - } - if (r_modelocclusionchecking) - { - if (totalclock >= lastcullcheck + CULL_DELAY && cullcheckcnt < MAXCULLCHECKS && (/*modelptr->usesalpha ||*/ tspr->yrepeat*tilesizy[sprite[tspr->owner].picnum] > 1536 || tspr->xrepeat*tilesizx[sprite[tspr->owner].picnum] > 1536)) - { - do // this is so gay - { - uint32_t t = getticks()+4; - - // don't bother with shadows because processing its owner will take care of it - if (tspr->statnum == TSPR_TEMP) - break; - cullmodel[tspr->owner] = 1; - cullcheckcnt++; - - if (cansee(globalposx, globalposy, globalposz, globalcursectnum, - tspr->x, tspr->y, tspr->z,tspr->sectnum)) - { cullmodel[tspr->owner] = 0; break; } - - if (polymost_checkcoordinates(-CULL_OFFSET, 0, tspr) || getticks() > t || cullcheckcnt >= MAXCULLCHECKS) - { cullmodel[tspr->owner] = 0; break; } - if (polymost_checkcoordinates(-CULL_OFFSET, -CULL_OFFSET, tspr) || getticks() > t || cullcheckcnt >= MAXCULLCHECKS) - { cullmodel[tspr->owner] = 0; break; } - - if (polymost_checkcoordinates(CULL_OFFSET, 0, tspr) || getticks() > t || cullcheckcnt >= MAXCULLCHECKS) - { cullmodel[tspr->owner] = 0; break; } - if (polymost_checkcoordinates(CULL_OFFSET, CULL_OFFSET, tspr) || getticks() > t || cullcheckcnt >= MAXCULLCHECKS) - { cullmodel[tspr->owner] = 0; break; } - - if (polymost_checkcoordinates(-CULL_OFFSET, CULL_OFFSET, tspr) || getticks() > t || cullcheckcnt >= MAXCULLCHECKS) - { cullmodel[tspr->owner] = 0; break; } - - if (polymost_checkcoordinates(0, 0, tspr) || getticks() > t || cullcheckcnt >= MAXCULLCHECKS) - { cullmodel[tspr->owner] = 0; break; } - - break; - } - while (1); - } - } - else cullmodel[tspr->owner] = 0; - if (cullmodel[tspr->owner]) break; - if (mddraw(tspr)) return; - break; // else, render as flat sprite - } - if (usevoxels && (tspr->cstat&48)!=48 && tiletovox[tspr->picnum] >= 0 && voxmodels[ tiletovox[tspr->picnum] ]) - { - if (voxdraw(voxmodels[ tiletovox[tspr->picnum] ], tspr)) return; - break; // else, render as flat sprite - } - if ((tspr->cstat&48)==48 && voxmodels[ tspr->picnum ]) - { - voxdraw(voxmodels[ tspr->picnum ], tspr); - return; - } - break; - } - if (((tspr->cstat&2) || (gltexmayhavealpha(tspr->picnum,tspr->pal)))) - { - curpolygonoffset += 0.01f; - bglEnable(GL_POLYGON_OFFSET_FILL); - bglPolygonOffset(-curpolygonoffset, -curpolygonoffset); - } -#endif - posx=tspr->x; - posy=tspr->y; - if (spriteext[tspr->owner].flags&SPREXT_AWAY1) - { - posx+=(sintable[(tspr->ang+512)&2047]>>13); - posy+=(sintable[(tspr->ang)&2047]>>13); - } - else if (spriteext[tspr->owner].flags&SPREXT_AWAY2) - { - posx-=(sintable[(tspr->ang+512)&2047]>>13); - posy-=(sintable[(tspr->ang)&2047]>>13); - } - oldsizx=tsizx=tilesizx[globalpicnum]; - oldsizy=tsizy=tilesizy[globalpicnum]; - if (usehightile&&h_xsize[globalpicnum]) - { - tsizx=h_xsize[globalpicnum]; - tsizy=h_ysize[globalpicnum]; - } - - switch ((globalorientation>>4)&3) - { - case 0: //Face sprite - //Project 3D to 2D - sx0 = (float)(tspr->x-globalposx); - sy0 = (float)(tspr->y-globalposy); - xp0 = sy0*gcosang - sx0*gsinang; - yp0 = sx0*gcosang2 + sy0*gsinang2; - if (yp0 <= SCISDIST) return; - ryp0 = 1/yp0; - sx0 = ghalfx*xp0*ryp0 + ghalfx; - sy0 = ((float)(tspr->z-globalposz))*gyxscale*ryp0 + ghoriz; - - f = ryp0*(float)xdimen/160.0; - fx = ((float)tspr->xrepeat)*f; - fy = ((float)tspr->yrepeat)*f*((float)yxaspect/65536.0); - sx0 -= fx*(float)xoff; if (tsizx&1) sx0 += fx*.5; - sy0 -= fy*(float)yoff; - fx *= ((float)tsizx); - fy *= ((float)tsizy); - - px[0] = px[3] = sx0-fx*.5; px[1] = px[2] = sx0+fx*.5; - if (!(globalorientation&128)) { py[0] = py[1] = sy0-fy; py[2] = py[3] = sy0; } - else { py[0] = py[1] = sy0-fy*.5; py[2] = py[3] = sy0+fy*.5; } - - gdx = gdy = guy = gvx = 0; gdo = ryp0*gviewxrange; - if (!(globalorientation&4)) - { gux = (float)tsizx*gdo/(px[1]-px[0]+.002); guo = -gux*(px[0]-.001); } - else { gux = (float)tsizx*gdo/(px[0]-px[1]-.002); guo = -gux*(px[1]+.001); } - if (!(globalorientation&8)) - { gvy = (float)tsizy*gdo/(py[3]-py[0]+.002); gvo = -gvy*(py[0]-.001); } - else { gvy = (float)tsizy*gdo/(py[0]-py[3]-.002); gvo = -gvy*(py[3]+.001); } - - // sprite panning - guy -= gdy*((float)(spriteext[spritenum].xpanning)/255.f)*tsizx; - guo -= gdo*((float)(spriteext[spritenum].xpanning)/255.f)*tsizx; - gvy -= gdy*((float)(spriteext[spritenum].ypanning)/255.f)*tsizy; - gvo -= gdo*((float)(spriteext[spritenum].ypanning)/255.f)*tsizy; - - //Clip sprites to ceilings/floors when no parallaxing and not sloped - if (!(sector[tspr->sectnum].ceilingstat&3)) - { - sy0 = ((float)(sector[tspr->sectnum].ceilingz-globalposz))*gyxscale*ryp0 + ghoriz; - if (py[0] < sy0) py[0] = py[1] = sy0; - } - if (!(sector[tspr->sectnum].floorstat&3)) - { - sy0 = ((float)(sector[tspr->sectnum].floorz-globalposz))*gyxscale*ryp0 + ghoriz; - if (py[2] > sy0) py[2] = py[3] = sy0; - } - -#ifdef USE_OPENGL - if (spriteext[spritenum].xpanning) - srepeat = 1; - if (spriteext[spritenum].ypanning) - trepeat = 1; -#endif - tilesizx[globalpicnum] = tsizx; - tilesizy[globalpicnum] = tsizy; - pow2xsplit = 0; drawpoly(px,py,4,method); - -#ifdef USE_OPENGL - if (spriteext[spritenum].xpanning) - srepeat = 0; - if (spriteext[spritenum].ypanning) - trepeat = 0; -#endif - - break; - case 1: //Wall sprite - - //Project 3D to 2D - if (globalorientation&4) xoff = -xoff; - if (globalorientation&8) yoff = -yoff; - - xv = (float)tspr->xrepeat * (float)sintable[(tspr->ang)&2047] / 65536.0; - yv = (float)tspr->xrepeat * (float)sintable[(tspr->ang+1536)&2047] / 65536.0; - f = (float)(tsizx>>1) + (float)xoff; - x0 = (float)(posx-globalposx) - xv*f; x1 = xv*(float)tsizx + x0; - y0 = (float)(posy-globalposy) - yv*f; y1 = yv*(float)tsizx + y0; - - yp0 = x0*gcosang2 + y0*gsinang2; - yp1 = x1*gcosang2 + y1*gsinang2; - if ((yp0 <= SCISDIST) && (yp1 <= SCISDIST)) return; - xp0 = y0*gcosang - x0*gsinang; - xp1 = y1*gcosang - x1*gsinang; - - //Clip to close parallel-screen plane - oxp0 = xp0; oyp0 = yp0; - if (yp0 < SCISDIST) { t0 = (SCISDIST-yp0)/(yp1-yp0); xp0 = (xp1-xp0)*t0+xp0; yp0 = SCISDIST; } - else { t0 = 0.f; } - if (yp1 < SCISDIST) { t1 = (SCISDIST-oyp0)/(yp1-oyp0); xp1 = (xp1-oxp0)*t1+oxp0; yp1 = SCISDIST; } - else { t1 = 1.f; } - - f = ((float)tspr->yrepeat) * (float)tsizy * 4; - - ryp0 = 1.0/yp0; - ryp1 = 1.0/yp1; - sx0 = ghalfx*xp0*ryp0 + ghalfx; - sx1 = ghalfx*xp1*ryp1 + ghalfx; - ryp0 *= gyxscale; - ryp1 *= gyxscale; - - tspr->z -= ((yoff*tspr->yrepeat)<<2); - if (globalorientation&128) - { - tspr->z += ((tsizy*tspr->yrepeat)<<1); - if (tsizy&1) tspr->z += (tspr->yrepeat<<1); //Odd yspans - } - - sc0 = ((float)(tspr->z-globalposz-f))*ryp0 + ghoriz; - sc1 = ((float)(tspr->z-globalposz-f))*ryp1 + ghoriz; - sf0 = ((float)(tspr->z-globalposz))*ryp0 + ghoriz; - sf1 = ((float)(tspr->z-globalposz))*ryp1 + ghoriz; - - gdx = (ryp0-ryp1)*gxyaspect / (sx0-sx1); - gdy = 0; - gdo = ryp0*gxyaspect - gdx*sx0; - - //Original equations: - //(gux*sx0 + guo)/(gdx*sx1 + gdo) = tsizx*t0 - //(gux*sx1 + guo)/(gdx*sx1 + gdo) = tsizx*t1 - // - // gvx*sx0 + gvy*sc0 + gvo = 0 - // gvy*sx1 + gvy*sc1 + gvo = 0 - //(gvx*sx0 + gvy*sf0 + gvo)/(gdx*sx0 + gdo) = tsizy - //(gvx*sx1 + gvy*sf1 + gvo)/(gdx*sx1 + gdo) = tsizy - - //gux*sx0 + guo = t0*tsizx*yp0 - //gux*sx1 + guo = t1*tsizx*yp1 - if (globalorientation&4) { t0 = 1.f-t0; t1 = 1.f-t1; } - - //sprite panning - t0 -= ((float)(spriteext[spritenum].xpanning)/255.f); - t1 -= ((float)(spriteext[spritenum].xpanning)/255.f); - gux = (t0*ryp0 - t1*ryp1)*gxyaspect*(float)tsizx / (sx0-sx1); - guy = 0; - guo = t0*ryp0*gxyaspect*(float)tsizx - gux*sx0; - - //gvx*sx0 + gvy*sc0 + gvo = 0 - //gvx*sx1 + gvy*sc1 + gvo = 0 - //gvx*sx0 + gvy*sf0 + gvo = tsizy*(gdx*sx0 + gdo) - f = ((float)tsizy)*(gdx*sx0 + gdo) / ((sx0-sx1)*(sc0-sf0)); - if (!(globalorientation&8)) - { - gvx = (sc0-sc1)*f; - gvy = (sx1-sx0)*f; - gvo = -gvx*sx0 - gvy*sc0; - } - else - { - gvx = (sf1-sf0)*f; - gvy = (sx0-sx1)*f; - gvo = -gvx*sx0 - gvy*sf0; - } - - // sprite panning - gvx -= gdx*((float)(spriteext[spritenum].ypanning)/255.f)*tsizy; - gvy -= gdy*((float)(spriteext[spritenum].ypanning)/255.f)*tsizy; - gvo -= gdo*((float)(spriteext[spritenum].ypanning)/255.f)*tsizy; - - //Clip sprites to ceilings/floors when no parallaxing - if (!(sector[tspr->sectnum].ceilingstat&1)) - { - f = ((float)tspr->yrepeat) * (float)tsizy * 4; - if (sector[tspr->sectnum].ceilingz > tspr->z-f) - { - sc0 = ((float)(sector[tspr->sectnum].ceilingz-globalposz))*ryp0 + ghoriz; - sc1 = ((float)(sector[tspr->sectnum].ceilingz-globalposz))*ryp1 + ghoriz; - } - } - if (!(sector[tspr->sectnum].floorstat&1)) - { - if (sector[tspr->sectnum].floorz < tspr->z) - { - sf0 = ((float)(sector[tspr->sectnum].floorz-globalposz))*ryp0 + ghoriz; - sf1 = ((float)(sector[tspr->sectnum].floorz-globalposz))*ryp1 + ghoriz; - } - } - - if (sx0 > sx1) - { - if (globalorientation&64) return; //1-sided sprite - f = sx0; sx0 = sx1; sx1 = f; - f = sc0; sc0 = sc1; sc1 = f; - f = sf0; sf0 = sf1; sf1 = f; - } - - px[0] = sx0; py[0] = sc0; - px[1] = sx1; py[1] = sc1; - px[2] = sx1; py[2] = sf1; - px[3] = sx0; py[3] = sf0; - -#ifdef USE_OPENGL - if (spriteext[spritenum].xpanning) - srepeat = 1; - if (spriteext[spritenum].ypanning) - trepeat = 1; -#endif - - tilesizx[globalpicnum] = tsizx; - tilesizy[globalpicnum] = tsizy; - pow2xsplit = 0; drawpoly(px,py,4,method); - -#ifdef USE_OPENGL - if (spriteext[spritenum].xpanning) - srepeat = 0; - if (spriteext[spritenum].ypanning) - trepeat = 0; -#endif - - break; - case 2: //Floor sprite - - if ((globalorientation&64) != 0) - if ((globalposz > tspr->z) == (!(globalorientation&8))) - return; - if ((globalorientation&4) > 0) xoff = -xoff; - if ((globalorientation&8) > 0) yoff = -yoff; - - i = (tspr->ang&2047); - c = sintable[(i+512)&2047]/65536.0; - s = sintable[i]/65536.0; - x0 = (float)((tsizx>>1)-xoff)*tspr->xrepeat; - y0 = (float)((tsizy>>1)-yoff)*tspr->yrepeat; - x1 = (float)((tsizx>>1)+xoff)*tspr->xrepeat; - y1 = (float)((tsizy>>1)+yoff)*tspr->yrepeat; - - //Project 3D to 2D - for (j=0; j<4; j++) - { - sx0 = (float)(tspr->x-globalposx); - sy0 = (float)(tspr->y-globalposy); - if ((j+0)&2) { sy0 -= s*y0; sx0 -= c*y0; } - else { sy0 += s*y1; sx0 += c*y1; } - if ((j+1)&2) { sx0 -= s*x0; sy0 += c*x0; } - else { sx0 += s*x1; sy0 -= c*x1; } - px[j] = sy0*gcosang - sx0*gsinang; - py[j] = sx0*gcosang2 + sy0*gsinang2; - } - - if (tspr->z < globalposz) //if floor sprite is above you, reverse order of points - { - f = px[0]; px[0] = px[1]; px[1] = f; - f = py[0]; py[0] = py[1]; py[1] = f; - f = px[2]; px[2] = px[3]; px[3] = f; - f = py[2]; py[2] = py[3]; py[3] = f; - } - - //Clip to SCISDIST plane - npoints = 0; - for (i=0; i<4; i++) - { - j = ((i+1)&3); - if (py[i] >= SCISDIST) { px2[npoints] = px[i]; py2[npoints] = py[i]; npoints++; } - if ((py[i] >= SCISDIST) != (py[j] >= SCISDIST)) - { - f = (SCISDIST-py[i])/(py[j]-py[i]); - px2[npoints] = (px[j]-px[i])*f + px[i]; - py2[npoints] = (py[j]-py[i])*f + py[i]; npoints++; - } - } - if (npoints < 3) return; - - //Project rotated 3D points to screen - f = ((float)(tspr->z-globalposz))*gyxscale; - for (j=0; jz-globalposz); - gdo = -ghoriz*gdy; - //copied&modified from relative alignment - xv = (float)tspr->x + s*x1 + c*y1; fx = (double)-(x0+x1)*s; - yv = (float)tspr->y + s*y1 - c*x1; fy = (double)+(x0+x1)*c; - f = 1.0/sqrt(fx*fx+fy*fy); fx *= f; fy *= f; - ft[2] = singlobalang*fy + cosglobalang*fx; - ft[3] = singlobalang*fx - cosglobalang*fy; - ft[0] = ((double)(globalposy-yv))*fy + ((double)(globalposx-xv))*fx; - ft[1] = ((double)(globalposx-xv))*fy - ((double)(globalposy-yv))*fx; - gux = (double)ft[3]*((double)viewingrange)/(-65536.0*262144.0); - gvx = (double)ft[2]*((double)viewingrange)/(-65536.0*262144.0); - guy = (double)ft[0]*gdy; gvy = (double)ft[1]*gdy; - guo = (double)ft[0]*gdo; gvo = (double)ft[1]*gdo; - guo += (double)(ft[2]/262144.0-gux)*ghalfx; - gvo -= (double)(ft[3]/262144.0+gvx)*ghalfx; - f = 4.0/(float)tspr->xrepeat; gux *= f; guy *= f; guo *= f; - f =-4.0/(float)tspr->yrepeat; gvx *= f; gvy *= f; gvo *= f; - if (globalorientation&4) - { - gux = ((float)tsizx)*gdx - gux; - guy = ((float)tsizx)*gdy - guy; - guo = ((float)tsizx)*gdo - guo; - } - - // sprite panning - guy -= gdy*((float)(spriteext[spritenum].xpanning)/255.f)*tsizx; - guo -= gdo*((float)(spriteext[spritenum].xpanning)/255.f)*tsizx; - gvy -= gdy*((float)(spriteext[spritenum].ypanning)/255.f)*tsizy; - gvo -= gdo*((float)(spriteext[spritenum].ypanning)/255.f)*tsizy; - -#ifdef USE_OPENGL - if (spriteext[spritenum].xpanning) - srepeat = 1; - if (spriteext[spritenum].ypanning) - trepeat = 1; -#endif - - tilesizx[globalpicnum] = tsizx; - tilesizy[globalpicnum] = tsizy; - pow2xsplit = 0; drawpoly(px,py,npoints,method); - -#ifdef USE_OPENGL - if (spriteext[spritenum].xpanning) - srepeat = 0; - if (spriteext[spritenum].ypanning) - trepeat = 0; -#endif - - break; - - case 3: //Voxel sprite - break; - } - tilesizx[globalpicnum]=oldsizx; - tilesizy[globalpicnum]=oldsizy; -} - -//sx,sy center of sprite; screen coods*65536 -//z zoom*65536. > is zoomed in -//a angle (0 is default) -//dastat&1 1:translucence -//dastat&2 1:auto-scale mode (use 320*200 coordinates) -//dastat&4 1:y-flip -//dastat&8 1:don't clip to startumost/startdmost -//dastat&16 1:force point passed to be top-left corner, 0:Editart center -//dastat&32 1:reverse translucence -//dastat&64 1:non-masked, 0:masked -//dastat&128 1:draw all pages (permanent) -//cx1,... clip window (actual screen coords) -void polymost_dorotatesprite(int32_t sx, int32_t sy, int32_t z, int16_t a, int16_t picnum, - int8_t dashade, char dapalnum, int32_t dastat, int32_t cx1, int32_t cy1, int32_t cx2, int32_t cy2, int32_t uniqid) -{ - static int32_t onumframes = 0; - int32_t n, nn, x, zz, xoff, yoff, xsiz, ysiz, method; - int32_t ogpicnum, ogshade, ogpal, ofoffset, oxdimen, oydimen, oldviewingrange; - double ogxyaspect; - double ogchang, ogshang, ogctang, ogstang, oghalfx, oghoriz, fx, fy, x1, y1, z1, x2, y2; - double ogrhalfxdown10, ogrhalfxdown10x; - double d, cosang, sinang, cosang2, sinang2, px[8], py[8], px2[8], py2[8]; - float m[4][4]; - int32_t oxdim = xdim, oydim = ydim; - - -#ifdef USE_OPENGL - if (rendmode >= 3 && usemodels && hudmem[(dastat&4)>>2][picnum].angadd) - { - if ((tile2model[Ptile2tile(picnum,dapalnum)].modelid >= 0) && (tile2model[Ptile2tile(picnum,dapalnum)].framenum >= 0)) - { - spritetype tspr; - memset(&tspr,0,sizeof(spritetype)); - - if (hudmem[(dastat&4)>>2][picnum].flags&1) return; //"HIDE" is specified in DEF - - ogchang = gchang; gchang = 1.0; - ogshang = gshang; gshang = 0.0; d = (double)z/(65536.0*16384.0); - ogctang = gctang; gctang = (double)sintable[(a+512)&2047]*d; - ogstang = gstang; gstang = (double)sintable[a&2047]*d; - ogshade = globalshade; globalshade = dashade; - ogpal = globalpal; globalpal = (int32_t)((uint8_t)dapalnum); - ogxyaspect = gxyaspect; gxyaspect = 1.0; - oldviewingrange = viewingrange; viewingrange = 65536; - - x1 = hudmem[(dastat&4)>>2][picnum].xadd; - y1 = hudmem[(dastat&4)>>2][picnum].yadd; - z1 = hudmem[(dastat&4)>>2][picnum].zadd; - -#ifdef POLYMER - if (pr_overridehud) { - x1 = pr_hudxadd; - y1 = pr_hudyadd; - z1 = pr_hudzadd; - } -#endif - - if (!(hudmem[(dastat&4)>>2][picnum].flags&2)) //"NOBOB" is specified in DEF - { - fx = ((double)sx)*(1.0/65536.0); - fy = ((double)sy)*(1.0/65536.0); - - if (dastat&16) - { - xsiz = tilesizx[picnum]; ysiz = tilesizy[picnum]; - xoff = (int32_t)((int8_t)((picanm[picnum]>>8)&255))+(xsiz>>1); - yoff = (int32_t)((int8_t)((picanm[picnum]>>16)&255))+(ysiz>>1); - - d = (double)z/(65536.0*16384.0); - cosang2 = cosang = (double)sintable[(a+512)&2047]*d; - sinang2 = sinang = (double)sintable[a&2047]*d; - if ((dastat&2) || (!(dastat&8))) //Don't aspect unscaled perms - { d = (double)xyaspect/65536.0; cosang2 *= d; sinang2 *= d; } - fx += -(double)xoff*cosang2+ (double)yoff*sinang2; - fy += -(double)xoff*sinang - (double)yoff*cosang; - } - - if (!(dastat&2)) - { - x1 += fx/((double)(xdim<<15))-1.0; //-1: left of screen, +1: right of screen - y1 += fy/((double)(ydim<<15))-1.0; //-1: top of screen, +1: bottom of screen - } - else - { - x1 += fx/160.0-1.0; //-1: left of screen, +1: right of screen - y1 += fy/100.0-1.0; //-1: top of screen, +1: bottom of screen - } - } - tspr.ang = hudmem[(dastat&4)>>2][picnum].angadd+globalang; - -#ifdef POLYMER - if (pr_overridehud) { - tspr.ang = pr_hudangadd + globalang; - } -#endif - - if (dastat&4) { x1 = -x1; y1 = -y1; } - - // In Polymost, we don't care if the model is very big - if (rendmode < 4) - { - tspr.xrepeat = tspr.yrepeat = 32; - - tspr.x = (int32_t)(((double)gcosang*z1 - (double)gsinang*x1)*16384.0 + globalposx); - tspr.y = (int32_t)(((double)gsinang*z1 + (double)gcosang*x1)*16384.0 + globalposy); - tspr.z = (int32_t)(globalposz + y1*16384.0*0.8); - } - else - { - float x, y, z; - - tspr.xrepeat = tspr.yrepeat = 5; - - x = (float)(((double)gcosang*z1 - (double)gsinang*x1)*2560.0 + globalposx); - y = (float)(((double)gsinang*z1 + (double)gcosang*x1)*2560.0 + globalposy); - z = (float)(globalposz + y1*2560.0*0.8); - - memcpy(&tspr.x, &x, sizeof(float)); - memcpy(&tspr.y, &y, sizeof(float)); - memcpy(&tspr.z, &z, sizeof(float)); - } - tspr.picnum = picnum; - tspr.shade = dashade; - tspr.pal = dapalnum; - tspr.owner = uniqid+MAXSPRITES; - globalorientation = (dastat&1)+((dastat&32)<<4)+((dastat&4)<<1); - tspr.cstat = globalorientation; - - if ((dastat&10) == 2) - bglViewport(windowx1,yres-(windowy2+1),windowx2-windowx1+1,windowy2-windowy1+1); - else - { - bglViewport(0,0,xdim,ydim); - glox1 = -1; //Force fullscreen (glox1=-1 forces it to restore) - } - - if (rendmode < 4) - { - bglMatrixMode(GL_PROJECTION); - memset(m,0,sizeof(m)); - if ((dastat&10) == 2) - { - float ratioratio = (float)xdim/ydim; - m[0][0] = (float)ydimen*(ratioratio >= 1.6?1.2:1); m[0][2] = 1.0; - m[1][1] = (float)xdimen; m[1][2] = 1.0; - m[2][2] = 1.0; m[2][3] = (float)ydimen*(ratioratio >= 1.6?1.2:1); - m[3][2] =-1.0; - } - else { m[0][0] = m[2][3] = 1.0f; m[1][1] = ((float)xdim)/((float)ydim); m[2][2] = 1.0001f; m[3][2] = 1-m[2][2]; } - bglLoadMatrixf(&m[0][0]); - bglMatrixMode(GL_MODELVIEW); - bglLoadIdentity(); - } - - if (hudmem[(dastat&4)>>2][picnum].flags&8) //NODEPTH flag - bglDisable(GL_DEPTH_TEST); - else - { - bglEnable(GL_DEPTH_TEST); - if (onumframes != numframes) - { - onumframes = numframes; - bglClear(GL_DEPTH_BUFFER_BIT); - } - } - -#ifdef USE_OPENGL - if (!nofog) bglDisable(GL_FOG); - if (rendmode < 4) - mddraw(&tspr); -# ifdef POLYMER - else - { - int32_t fov; - - tspriteptr[MAXSPRITESONSCREEN] = &tspr; - - bglEnable(GL_ALPHA_TEST); - bglEnable(GL_BLEND); - - spriteext[tspr.owner].roll = a; - spriteext[tspr.owner].zoff = z; - - fov = hudmem[(dastat&4)>>2][picnum].fov; - - if (fov == -1) { - fov = pr_fov; - } - - if (pr_overridehud) { - fov = pr_hudfov; - } - - polymer_setaspect(fov); - - polymer_drawsprite(MAXSPRITESONSCREEN); - - polymer_setaspect(pr_fov); - - spriteext[tspr.owner].zoff = 0; - spriteext[tspr.owner].roll = 0; - - bglDisable(GL_BLEND); - bglDisable(GL_ALPHA_TEST); - } -# endif - if (!nofog) bglEnable(GL_FOG); -#else - mddraw(&tspr); -#endif - - viewingrange = oldviewingrange; - gxyaspect = ogxyaspect; - globalshade = ogshade; - globalpal = ogpal; - gchang = ogchang; - gshang = ogshang; - gctang = ogctang; - gstang = ogstang; - return; - } - } -#endif - - ogpicnum = globalpicnum; globalpicnum = picnum; - ogshade = globalshade; globalshade = dashade; - ogpal = globalpal; globalpal = (int32_t)((uint8_t)dapalnum); - oghalfx = ghalfx; ghalfx = (double)(xdim>>1); - ogrhalfxdown10 = grhalfxdown10; grhalfxdown10 = 1.0/(((double)ghalfx)*1024); - ogrhalfxdown10x = grhalfxdown10x; grhalfxdown10x = grhalfxdown10; - oghoriz = ghoriz; ghoriz = (double)(ydim>>1); - ofoffset = frameoffset; frameoffset = frameplace; - oxdimen = xdimen; xdimen = xdim; - oydimen = ydimen; ydimen = ydim; - ogchang = gchang; gchang = 1.0; - ogshang = gshang; gshang = 0.0; - ogctang = gctang; gctang = 1.0; - ogstang = gstang; gstang = 0.0; - -#ifdef USE_OPENGL - if (rendmode >= 3) - { - bglViewport(0,0,xdim,ydim); glox1 = -1; //Force fullscreen (glox1=-1 forces it to restore) - bglMatrixMode(GL_PROJECTION); - memset(m,0,sizeof(m)); - m[0][0] = m[2][3] = 1.0f; m[1][1] = ((float)xdim)/((float)ydim); m[2][2] = 1.0001f; m[3][2] = 1-m[2][2]; - bglPushMatrix(); bglLoadMatrixf(&m[0][0]); - bglMatrixMode(GL_MODELVIEW); - bglPushMatrix(); - bglLoadIdentity(); - - bglDisable(GL_DEPTH_TEST); - bglDisable(GL_ALPHA_TEST); - bglEnable(GL_TEXTURE_2D); - -# ifdef POLYMER - if (rendmode >= 4) { - polymer_inb4rotatesprite(picnum, dapalnum, dashade); - } -# endif - } -#endif - - method = 0; - if (!(dastat&64)) - { - method = 1; - if (dastat&1) { if (!(dastat&32)) method = 2; else method = 3; } - } - method |= 4; //Use OpenGL clamping - dorotatesprite never repeats - - xsiz = tilesizx[globalpicnum]; ysiz = tilesizy[globalpicnum]; - if (dastat&16) { xoff = 0; yoff = 0; } - else - { - xoff = (int32_t)((int8_t)((picanm[globalpicnum]>>8)&255))+(xsiz>>1); - yoff = (int32_t)((int8_t)((picanm[globalpicnum]>>16)&255))+(ysiz>>1); - } - if (dastat&4) yoff = ysiz-yoff; - - if (dastat&2) //Auto window size scaling - { - // nasty hacks go here - if (!(dastat&8)) - { - x = xdimenscale; //= scale(xdimen,yxaspect,320); - - if (!(dastat & 1024) && ((double)ydim/(double)xdim) <= .75f) - { - xdim = (int32_t)((double)ydim * 1.33333333333333334f); - setaspect(65536L,(int32_t)divscale16(ydim*320L,xdim*200L)); - } - - if (dastat & 512) - sx = ((cx1+cx2+2+scale((oxdim-xdim), cx1+cx2+2, oxdim))<<15)+scale(sx-(320<<15),scale(xdimen, xdim, oxdim),320); - else if (dastat & 256) - sx = ((cx1+cx2+2-scale((oxdim-xdim), cx1+cx2+2, oxdim))<<15)+scale(sx-(320<<15),scale(xdimen, xdim, oxdim),320); - else - sx = ((cx1+cx2+2)<<15)+scale(sx-(320<<15),scale(xdimen, xdim, oxdim),320); - - sy = ((cy1+cy2+2)<<15)+mulscale16(sy-(200<<15),x); - } - else - { - //If not clipping to startmosts, & auto-scaling on, as a - //hard-coded bonus, scale to full screen instead - - if (!(dastat & 1024) && ((double)ydim/(double)xdim) <= .75f) - { - xdim = (int32_t)((double)ydim * 1.33333333333333334f); - setaspect(65536L,(int32_t)divscale16(ydim*320L,xdim*200L)); - } - - x = scale(xdim,yxaspect,320); - sx = (xdim<<15)+32768+scale(sx-(320<<15),xdim,320); - sy = (ydim<<15)+32768+mulscale16(sy-(200<<15),x); - - if (dastat & 512) - sx += (oxdim-xdim)<<16; - else if ((dastat & 256) == 0) - sx += (oxdim-xdim)<<15; - } - z = mulscale16(z,x); - } - else if (!(dastat & 1024) && ((double)ydim/(double)xdim) <= .75f) - { - ydim = (int32_t)((double)xdim * 0.75f); - setaspect(65536L,(int32_t)divscale16(ydim*320L,xdim*200L)); - } - - d = (double)z/(65536.0*16384.0); - cosang2 = cosang = (double)sintable[(a+512)&2047]*d; - sinang2 = sinang = (double)sintable[a&2047]*d; - if ((dastat&2) || (!(dastat&8))) //Don't aspect unscaled perms - { d = (double)xyaspect/65536.0; cosang2 *= d; sinang2 *= d; } - px[0] = (double)sx/65536.0 - (double)xoff*cosang2+ (double)yoff*sinang2; - py[0] = (double)sy/65536.0 - (double)xoff*sinang - (double)yoff*cosang; - px[1] = px[0] + (double)xsiz*cosang2; - py[1] = py[0] + (double)xsiz*sinang; - px[3] = px[0] - (double)ysiz*sinang2; - py[3] = py[0] + (double)ysiz*cosang; - px[2] = px[1]+px[3]-px[0]; - py[2] = py[1]+py[3]-py[0]; - n = 4; - - gdx = 0; gdy = 0; gdo = 1.0; - //px[0]*gux + py[0]*guy + guo = 0 - //px[1]*gux + py[1]*guy + guo = xsiz-.0001 - //px[3]*gux + py[3]*guy + guo = 0 - d = 1.0/(px[0]*(py[1]-py[3]) + px[1]*(py[3]-py[0]) + px[3]*(py[0]-py[1])); - gux = (py[3]-py[0])*((double)xsiz-.0001)*d; - guy = (px[0]-px[3])*((double)xsiz-.0001)*d; - guo = 0 - px[0]*gux - py[0]*guy; - - if (!(dastat&4)) - { - //px[0]*gvx + py[0]*gvy + gvo = 0 - //px[1]*gvx + py[1]*gvy + gvo = 0 - //px[3]*gvx + py[3]*gvy + gvo = ysiz-.0001 - gvx = (py[0]-py[1])*((double)ysiz-.0001)*d; - gvy = (px[1]-px[0])*((double)ysiz-.0001)*d; - gvo = 0 - px[0]*gvx - py[0]*gvy; - } - else - { - //px[0]*gvx + py[0]*gvy + gvo = ysiz-.0001 - //px[1]*gvx + py[1]*gvy + gvo = ysiz-.0001 - //px[3]*gvx + py[3]*gvy + gvo = 0 - gvx = (py[1]-py[0])*((double)ysiz-.0001)*d; - gvy = (px[0]-px[1])*((double)ysiz-.0001)*d; - gvo = (double)ysiz-.0001 - px[0]*gvx - py[0]*gvy; - } - - cx2++; cy2++; - //Clippoly4 (converted from int32_t to double) - nn = z = 0; - do - { - zz = z+1; if (zz == n) zz = 0; - x1 = px[z]; x2 = px[zz]-x1; if ((cx1 <= x1) && (x1 <= cx2)) { px2[nn] = x1; py2[nn] = py[z]; nn++; } - if (x2 <= 0) fx = cx2; else fx = cx1; d = fx-x1; - if ((d < x2) != (d < 0)) { px2[nn] = fx; py2[nn] = (py[zz]-py[z])*d/x2 + py[z]; nn++; } - if (x2 <= 0) fx = cx1; else fx = cx2; d = fx-x1; - if ((d < x2) != (d < 0)) { px2[nn] = fx; py2[nn] = (py[zz]-py[z])*d/x2 + py[z]; nn++; } - z = zz; - } - while (z); - if (nn >= 3) - { - n = z = 0; - do - { - zz = z+1; if (zz == nn) zz = 0; - y1 = py2[z]; y2 = py2[zz]-y1; if ((cy1 <= y1) && (y1 <= cy2)) { py[n] = y1; px[n] = px2[z]; n++; } - if (y2 <= 0) fy = cy2; else fy = cy1; d = fy-y1; - if ((d < y2) != (d < 0)) { py[n] = fy; px[n] = (px2[zz]-px2[z])*d/y2 + px2[z]; n++; } - if (y2 <= 0) fy = cy1; else fy = cy2; d = fy-y1; - if ((d < y2) != (d < 0)) { py[n] = fy; px[n] = (px2[zz]-px2[z])*d/y2 + px2[z]; n++; } - z = zz; - } - while (z); -#ifdef USE_OPENGL - if (!nofog) bglDisable(GL_FOG); - pow2xsplit = 0; drawpoly(px,py,n,method); - if (!nofog) bglEnable(GL_FOG); -#else - pow2xsplit = 0; drawpoly(px,py,n,method); -#endif - } - -#ifdef USE_OPENGL - if (rendmode >= 3) - { -# ifdef POLYMER - if (rendmode >= 4) { - polymer_postrotatesprite(); - } -# endif - bglMatrixMode(GL_PROJECTION); bglPopMatrix(); - bglMatrixMode(GL_MODELVIEW); bglPopMatrix(); - } -#endif - - globalpicnum = ogpicnum; - globalshade = ogshade; - globalpal = ogpal; - ghalfx = oghalfx; - grhalfxdown10 = ogrhalfxdown10; - grhalfxdown10x = ogrhalfxdown10x; - ghoriz = oghoriz; - frameoffset = ofoffset; - xdimen = oxdimen; - ydimen = oydimen; - gchang = ogchang; - gshang = ogshang; - gctang = ogctang; - gstang = ogstang; - xdim = oxdim; - ydim = oydim; - - setaspect_new(); -} - -#ifdef USE_OPENGL -static float trapextx[2]; -static void drawtrap(float x0, float x1, float y0, float x2, float x3, float y1) -{ - float px[4], py[4]; - int32_t i, n; - - if (y0 == y1) return; - px[0] = x0; py[0] = y0; py[2] = y1; - if (x0 == x1) { px[1] = x3; py[1] = y1; px[2] = x2; n = 3; } - else if (x2 == x3) { px[1] = x1; py[1] = y0; px[2] = x3; n = 3; } - else { px[1] = x1; py[1] = y0; px[2] = x3; px[3] = x2; py[3] = y1; n = 4; } - - bglBegin(GL_TRIANGLE_FAN); - for (i=0; i allocpoints) //16 for safety - { - allocpoints = numpoints+16; - rst = (raster *)Brealloc(rst,allocpoints*sizeof(raster)); - slist = (int32_t *)Brealloc(slist,allocpoints*sizeof(int32_t)); - npoint2 = (int32_t *)Brealloc(npoint2,allocpoints*sizeof(int32_t)); - } - - //Remove unnecessary collinear points: - for (i=0; i m1) { z |= 2; continue; } - npoint2[i] = k; npoint2[j] = -1; npoints--; i--; //collinear - } - if (!z) return; - trapextx[0] = trapextx[1] = px[0]; - for (i=j=0; i trapextx[1]) trapextx[1] = px[i]; - slist[j++] = i; - } - if (z != 3) //Simple polygon... early out - { - bglBegin(GL_TRIANGLE_FAN); - for (i=0; i>1); gap; gap>>=1) - for (i=0; i=0; j-=gap) - { - if (py[npoint2[slist[j]]] <= py[npoint2[slist[j+gap]]]) break; - k = slist[j]; slist[j] = slist[j+gap]; slist[j+gap] = k; - } - - numrst = 0; - for (z=0; z0; i--) - { - if (rst[i-1].xi*(py[i1]-rst[i-1].y) + rst[i-1].x < px[i1]) break; - rst[i+1] = rst[i-1]; - } - numrst += 2; - - if (i&1) //split inside area - { - j = i-1; - - x0 = (py[i1] - rst[j ].y)*rst[j ].xi + rst[j ].x; - x1 = (py[i1] - rst[j+1].y)*rst[j+1].xi + rst[j+1].x; - drawtrap(rst[j].x,rst[j+1].x,rst[j].y,x0,x1,py[i1]); - rst[j ].x = x0; rst[j ].y = py[i1]; - rst[j+3].x = x1; rst[j+3].y = py[i1]; - } - - m0 = (px[i0]-px[i1]) / (py[i0]-py[i1]); - m1 = (px[i3]-px[i2]) / (py[i3]-py[i2]); - j = ((px[i1] > px[i2]) || ((i1 == i2) && (m0 >= m1))) + i; - k = (i<<1)+1 - j; - rst[j].i = i0; rst[j].xi = m0; rst[j].x = px[i1]; rst[j].y = py[i1]; - rst[k].i = i3; rst[k].xi = m1; rst[k].x = px[i2]; rst[k].y = py[i2]; - } - else - { - //NOTE:don't count backwards! - if (i1 == i2) { for (i=0; i py[i0]) && (py[i2] > py[i3])) //Delete raster - { - for (; j<=i+1; j+=2) - { - x0 = (py[i1] - rst[j ].y)*rst[j ].xi + rst[j ].x; - if ((i == j) && (i1 == i2)) x1 = x0; else x1 = (py[i1] - rst[j+1].y)*rst[j+1].xi + rst[j+1].x; - drawtrap(rst[j].x,rst[j+1].x,rst[j].y,x0,x1,py[i1]); - rst[j ].x = x0; rst[j ].y = py[i1]; - rst[j+1].x = x1; rst[j+1].y = py[i1]; - } - numrst -= 2; for (; i=0; i--) - { - ((float *)rx1)[i] = ((float)rx1[i])/4096.0; - ((float *)ry1)[i] = ((float)ry1[i])/4096.0; - } - - if (gloy1 != -1) setpolymost2dview(); //disables blending, texturing, and depth testing - bglEnable(GL_ALPHA_TEST); - bglEnable(GL_TEXTURE_2D); - pth = gltexcache(globalpicnum,globalpal,0); - bglBindTexture(GL_TEXTURE_2D, pth ? pth->glpic : 0); - - f = ((float)(numpalookups-min(max((globalshade * shadescale),0),numpalookups)))/((float)numpalookups); - switch ((globalorientation>>7)&3) - { - case 0: - case 1: - a = 1.0f; bglDisable(GL_BLEND); break; - case 2: - a = 0.66f; bglEnable(GL_BLEND); break; - case 3: - a = 0.33f; bglEnable(GL_BLEND); break; - } - bglColor4f(f,f,f,a); - - tessectrap((float *)rx1,(float *)ry1,xb1,npoints); -} -#endif - -int32_t polymost_drawtilescreen(int32_t tilex, int32_t tiley, int32_t wallnum, int32_t dimen, int32_t tilezoom) -{ -#ifdef USE_OPENGL - float xdime, ydime, xdimepad, ydimepad, scx, scy, ratio = 1.0; - int32_t i; - pthtyp *pth; - - if ((rendmode < 3) || (qsetmode != 200)) return(-1); - - if (!glinfo.texnpot) - { - i = (1<<(picsiz[wallnum]&15)); if (i < tilesizx[wallnum]) i += i; xdimepad = (float)i; - i = (1<<(picsiz[wallnum]>>4)); if (i < tilesizy[wallnum]) i += i; ydimepad = (float)i; - } - else - { - xdimepad = (float)tilesizx[wallnum]; - ydimepad = (float)tilesizy[wallnum]; - } - xdime = (float)tilesizx[wallnum]; xdimepad = xdime/xdimepad; - ydime = (float)tilesizy[wallnum]; ydimepad = ydime/ydimepad; - - if ((xdime <= dimen) && (ydime <= dimen)) - { - scx = xdime; - scy = ydime; - } - else - { - scx = (float)dimen; - scy = (float)dimen; - if (xdime < ydime) scx *= xdime/ydime; else scy *= ydime/xdime; - } - - pth = gltexcache(wallnum,0,4); - bglBindTexture(GL_TEXTURE_2D,pth ? pth->glpic : 0); - - bglDisable(GL_ALPHA_TEST); - - if (tilezoom) - { - if (scx > scy) ratio = dimen/scx; - else ratio = dimen/scy; - } - - if (!pth || (pth->flags & 8)) - { - bglDisable(GL_TEXTURE_2D); - bglBegin(GL_TRIANGLE_FAN); - if (gammabrightness) - bglColor4f((float)curpalette[255].r/255.0, - (float)curpalette[255].g/255.0, - (float)curpalette[255].b/255.0, - 1); - else - bglColor4f((float)britable[curbrightness][ curpalette[255].r ] / 255.0, - (float)britable[curbrightness][ curpalette[255].g ] / 255.0, - (float)britable[curbrightness][ curpalette[255].b ] / 255.0, - 1); - bglVertex2f((float)tilex ,(float)tiley); - bglVertex2f((float)tilex+(scx*ratio),(float)tiley); - bglVertex2f((float)tilex+(scx*ratio),(float)tiley+(scy*ratio)); - bglVertex2f((float)tilex ,(float)tiley+(scy*ratio)); - bglEnd(); - } - - bglColor4f(1,1,1,1); - bglEnable(GL_TEXTURE_2D); - bglEnable(GL_BLEND); - bglBegin(GL_TRIANGLE_FAN); - bglTexCoord2f(0, 0); bglVertex2f((float)tilex ,(float)tiley); - bglTexCoord2f(xdimepad, 0); bglVertex2f((float)tilex+(scx*ratio),(float)tiley); - bglTexCoord2f(xdimepad,ydimepad); bglVertex2f((float)tilex+(scx*ratio),(float)tiley+(scy*ratio)); - bglTexCoord2f(0,ydimepad); bglVertex2f((float)tilex ,(float)tiley+(scy*ratio)); - bglEnd(); - - return(0); -#else - return -1; -#endif -} - -int32_t polymost_printext256(int32_t xpos, int32_t ypos, int16_t col, int16_t backcol, const char *name, char fontsize) -{ -#ifndef USE_OPENGL - return -1; -#else - GLfloat tx, ty, txc, tyc; - int32_t c; - palette_t p,b; - - if (gammabrightness) - { - p = curpalette[col]; - b = curpalette[backcol]; - } - else - { - p.r = britable[curbrightness][ curpalette[col].r ]; - p.g = britable[curbrightness][ curpalette[col].g ]; - p.b = britable[curbrightness][ curpalette[col].b ]; - b.r = britable[curbrightness][ curpalette[backcol].r ]; - b.g = britable[curbrightness][ curpalette[backcol].g ]; - b.b = britable[curbrightness][ curpalette[backcol].b ]; - } - - if ((rendmode < 3) || (qsetmode != 200)) return(-1); - - if (!polymosttext) - { - // construct a 256x128 8-bit alpha-only texture for the font glyph matrix - char *tbuf, *cptr, *tptr; - int32_t h,i,j; - - bglGenTextures(1,&polymosttext); - if (!polymosttext) return -1; - - tbuf = (char *)Bmalloc(256*128); - if (!tbuf) - { - bglDeleteTextures(1,&polymosttext); - polymosttext = 0; - return -1; - } - Bmemset(tbuf, 0, 256*128); - - cptr = (char *)textfont; - for (h=0; h<256; h++) - { - tptr = tbuf + (h%32)*8 + (h/32)*256*8; - for (i=0; i<8; i++) - { - for (j=0; j<8; j++) - { - if (cptr[h*8+i] & pow2char[7-j]) tptr[j] = 255; - } - tptr += 256; - } - } - - cptr = (char *)smalltextfont; - for (h=0; h<256; h++) - { - tptr = tbuf + 256*64 + (h%32)*8 + (h/32)*256*8; - for (i=1; i<7; i++) - { - for (j=2; j<6; j++) - { - if (cptr[h*8+i] & pow2char[7-j]) tptr[j-2] = 255; - } - tptr += 256; - } - } - - bglBindTexture(GL_TEXTURE_2D, polymosttext); - bglTexImage2D(GL_TEXTURE_2D,0,GL_ALPHA,256,128,0,GL_ALPHA,GL_UNSIGNED_BYTE,(GLvoid *)tbuf); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); - bglTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); - Bfree(tbuf); - } - else bglBindTexture(GL_TEXTURE_2D, polymosttext); - - setpolymost2dview(); // disables blending, texturing, and depth testing - bglDisable(GL_ALPHA_TEST); - bglDepthMask(GL_FALSE); // disable writing to the z-buffer - - if (backcol >= 0) - { - bglColor4ub(b.r,b.g,b.b,255); - c = Bstrlen(name); - - bglBegin(GL_QUADS); - bglVertex2i(xpos,ypos); - bglVertex2i(xpos,ypos+(fontsize?6:8)); - bglVertex2i(xpos+(c<<(3-fontsize)),ypos+(fontsize?6:8)); - bglVertex2i(xpos+(c<<(3-fontsize)),ypos); - bglEnd(); - } - - bglPushAttrib(GL_POLYGON_BIT); // we want to have readable text in wireframe mode, too - bglPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - bglEnable(GL_TEXTURE_2D); - bglEnable(GL_BLEND); - bglColor4ub(p.r,p.g,p.b,255); - txc = fontsize ? (4.0/256.0) : (8.0/256.0); - tyc = fontsize ? (6.0/128.0) : (8.0/128.0); - bglBegin(GL_QUADS); - for (c=0; name[c]; c++) - { - if (name[c] == '^' && isdigit(name[c+1])) - { - char smallbuf[8]; - int32_t bi=0; - while (isdigit(name[c+1]) && bi<8) - { - smallbuf[bi++]=name[c+1]; - c++; - } - smallbuf[bi++]=0; - if (col)col = atol(smallbuf); - - if (gammabrightness) - { - p = curpalette[col]; - } - else - { - p.r = britable[curbrightness][ curpalette[col].r ]; - p.g = britable[curbrightness][ curpalette[col].g ]; - p.b = britable[curbrightness][ curpalette[col].b ]; - } - bglColor4ub(p.r,p.g,p.b,255); - continue; - } - tx = (float)(name[c]%32)/32.0; - ty = (float)((name[c]/32) + (fontsize*8))/16.0; - - bglTexCoord2f(tx,ty); bglVertex2i(xpos,ypos); - bglTexCoord2f(tx+txc,ty); bglVertex2i(xpos+(8>>fontsize),ypos); - bglTexCoord2f(tx+txc,ty+tyc); bglVertex2i(xpos+(8>>fontsize),ypos+(fontsize?6:8)); - bglTexCoord2f(tx,ty+tyc); bglVertex2i(xpos,ypos+(fontsize?6:8)); - - xpos += (8>>fontsize); - } - bglEnd(); - - bglDepthMask(GL_TRUE); // re-enable writing to the z-buffer - bglPopAttrib(); - - return 0; -#endif -} - -// Console commands by JBF -#ifdef USE_OPENGL -static int32_t gltexturemode(const osdfuncparm_t *parm) -{ - int32_t m; - const char *p; - - if (parm->numparms != 1) - { - OSD_Printf("Current texturing mode is %s\n", glfiltermodes[gltexfiltermode].name); - OSD_Printf(" Vaild modes are:\n"); - for (m = 0; m < (int32_t)numglfiltermodes; m++) - OSD_Printf(" %d - %s\n",m,glfiltermodes[m].name); - - return OSDCMD_OK; - } - - m = Bstrtoul(parm->parms[0], (char **)&p, 10); - if (p == parm->parms[0]) - { - // string - for (m = 0; m < (int32_t)numglfiltermodes; m++) - { - if (!Bstrcasecmp(parm->parms[0], glfiltermodes[m].name)) break; - } - if (m == numglfiltermodes) m = gltexfiltermode; // no change - } - else - { - if (m < 0) m = 0; - else if (m >= (int32_t)numglfiltermodes) m = numglfiltermodes - 1; - } - - gltexfiltermode = m; - gltexapplyprops(); - - OSD_Printf("Texture filtering mode changed to %s\n", glfiltermodes[gltexfiltermode].name); - - return OSDCMD_OK; -} -#endif - -static int32_t osdcmd_cvar_set_polymost(const osdfuncparm_t *parm) -{ - int32_t r = osdcmd_cvar_set(parm); - - if (xdim == 0 || ydim == 0 || bpp == 0) // video not set up yet - return r; - -#ifdef USE_OPENGL - if (r == OSDCMD_OK) - { - if (!Bstrcasecmp(parm->name, "r_swapinterval")) - { - setvsync(vsync); - return r; - } - else if (!Bstrcasecmp(parm->name, "r_downsize")) - { - if (r_downsize != r_downsizevar && r_downsizevar != -1) - { - invalidatecache(); - resetvideomode(); - if (setgamemode(fullscreen,xdim,ydim,bpp)) - OSD_Printf("restartvid: Reset failed...\n"); - } - else r_downsizevar = r_downsize; - - return r; - } - else if (!Bstrcasecmp(parm->name, "r_textureanisotropy")) - { - gltexapplyprops(); - return r; - } - else if (!Bstrcasecmp(parm->name, "r_texturemode")) - { - gltexturemode(parm); - return r; - } -#ifdef POLYMER - else if (!Bstrcasecmp(parm->name, "r_pr_maxlightpasses")) - { - if (pr_maxlightpasses != r_pr_maxlightpasses) - { - polymer_invalidatelights(); - pr_maxlightpasses = r_pr_maxlightpasses; - } - return r; - } -#endif - } -#endif - return r; -} - -void polymost_initosdfuncs(void) -{ - uint32_t i; - - cvar_t cvars_polymost[] = - { -#ifdef USE_OPENGL - { "r_animsmoothing","r_animsmoothing: enable/disable model animation smoothing",(void *) &r_animsmoothing, CVAR_BOOL, 0, 1 }, - { "r_modelocclusionchecking","r_modelocclusionchecking: enable/disable hack to cull \"obstructed\" models",(void *) &r_modelocclusionchecking, CVAR_INT, 0, 2 }, - { "r_detailmapping","r_detailmapping: enable/disable detail mapping",(void *) &r_detailmapping, CVAR_BOOL, 0, 1 }, - { "r_downsize","r_downsize: controls downsizing factor for hires textures",(void *) &r_downsize, CVAR_INT|CVAR_FUNCPTR, 0, 5 }, - { "r_fullbrights","r_fullbrights: enable/disable fullbright textures",(void *) &r_fullbrights, CVAR_BOOL, 0, 1 }, - { "r_glowmapping","r_glowmapping: enable/disable glow mapping",(void *) &r_glowmapping, CVAR_BOOL, 0, 1 }, - /* - { "r_multisample","r_multisample: sets the number of samples used for antialiasing (0 = off)",(void *)&r_glowmapping, CVAR_BOOL, 0, 1 } - { "r_nvmultisamplehint","r_nvmultisamplehint: enable/disable Nvidia multisampling hinting",(void *)&glnvmultisamplehint, CVAR_BOOL, 0, 1 } - */ - { - "r_parallaxskyclamping","r_parallaxskyclamping: enable/disable parallaxed floor/ceiling sky texture clamping", - (void *) &r_parallaxskyclamping, CVAR_BOOL, 0, 1 - }, - { - "r_parallaxskypanning","r_parallaxskypanning: enable/disable parallaxed floor/ceiling panning when drawing a parallaxed sky", - (void *) &r_parallaxskypanning, CVAR_BOOL, 0, 1 - }, - { "r_polygonmode","r_polygonmode: debugging feature",(void *) &glpolygonmode, CVAR_INT | CVAR_NOSAVE, 0, 3 }, - { "r_redbluemode","r_redbluemode: enable/disable experimental OpenGL red-blue glasses mode",(void *) &glredbluemode, CVAR_BOOL, 0, 1 }, - { "r_shadescale","r_shadescale: multiplier for lighting",(void *) &shadescale, CVAR_FLOAT, 0, 10 }, - { "r_swapinterval","r_swapinterval: sets the GL swap interval (VSync)",(void *) &vsync, CVAR_BOOL|CVAR_FUNCPTR, 0, 1 }, - { "r_texcache","r_texcache: enable/disable OpenGL compressed texture cache",(void *) &glusetexcache, CVAR_INT, 0, 2 }, - { "r_texcompr","r_texcompr: enable/disable OpenGL texture compression",(void *) &glusetexcompr, CVAR_BOOL, 0, 1 }, - { "r_textureanisotropy", "r_textureanisotropy: changes the OpenGL texture anisotropy setting", (void *) &glanisotropy, CVAR_INT|CVAR_FUNCPTR, 0, 16 }, - { "r_texturemaxsize","r_texturemaxsize: changes the maximum OpenGL texture size limit",(void *) &gltexmaxsize, CVAR_INT | CVAR_NOSAVE, 0, 4096 }, - { "r_texturemiplevel","r_texturemiplevel: changes the highest OpenGL mipmap level used",(void *) &gltexmiplevel, CVAR_INT, 0, 6 }, - { "r_texturemode", "r_texturemode: changes the texture filtering settings", (void *) &gltexfiltermode, CVAR_INT|CVAR_FUNCPTR, 0, 5 }, - { "r_vbocount","r_vbocount: sets the number of Vertex Buffer Objects to use when drawing models",(void *) &r_vbocount, CVAR_INT, 1, 256 }, - { "r_vbos","r_vbos: enable/disable using Vertex Buffer Objects when drawing models",(void *) &r_vbos, CVAR_BOOL, 0, 1 }, - { "r_vertexarrays","r_vertexarrays: enable/disable using vertex arrays when drawing models",(void *) &r_vertexarrays, CVAR_BOOL, 0, 1 }, - { "r_anamorphic", "r_anamorphic: enable/disable widescreen mode", (void *) &glwidescreen, CVAR_BOOL, 0, 1 }, - { "r_projectionhack", "r_projectionhack: enable/disable projection hack", (void *) &glprojectionhacks, CVAR_INT, 0, 2 }, - -#ifdef POLYMER - // polymer cvars - { "r_pr_lighting", "r_pr_lighting: enable/disable dynamic lights", (void *) &pr_lighting, CVAR_BOOL, 0, 1 }, - { "r_pr_normalmapping", "r_pr_normalmapping: enable/disable virtual displacement mapping", (void *) &pr_normalmapping, CVAR_BOOL, 0, 1 }, - { "r_pr_specularmapping", "r_pr_specularmapping: enable/disable specular mapping", (void *) &pr_specularmapping, CVAR_BOOL, 0, 1 }, - { "r_pr_shadows", "r_pr_shadows: enable/disable dynamic shadows", (void *) &pr_shadows, CVAR_BOOL, 0, 1 }, - { "r_pr_shadowcount", "r_pr_shadowcount: maximal amount of shadow emitting lights on screen - you need to restart the renderer for it to take effect", (void *) &pr_shadowcount, CVAR_INT, 0, 64 }, - { "r_pr_shadowdetail", "r_pr_shadowdetail: sets the shadow map resolution - you need to restart the renderer for it to take effect", (void *) &pr_shadowdetail, CVAR_INT, 0, 5 }, - { "r_pr_shadowfiltering", "r_pr_shadowfiltering: enable/disable shadow edges filtering - you need to restart the renderer for it to take effect", (void *) &pr_shadowfiltering, CVAR_BOOL, 0, 1 }, - { "r_pr_maxlightpasses", "r_pr_maxlightpasses: the maximal amount of lights a single object can by affected by", (void *) &r_pr_maxlightpasses, CVAR_INT|CVAR_FUNCPTR, 0, PR_MAXLIGHTS }, - { "r_pr_maxlightpriority", "r_pr_maxlightpriority: lowering that value removes less meaningful lights from the scene", (void *) &pr_maxlightpriority, CVAR_INT, 0, PR_MAXLIGHTPRIORITY }, - { "r_pr_fov", "r_pr_fov: sets the field of vision in build angle", (void *) &pr_fov, CVAR_INT, 0, 1023}, - { "r_pr_customaspect", "r_pr_customaspect: if non-zero, forces the 3D view aspect ratio", (void *) &pr_customaspect, CVAR_FLOAT, 0, 3 }, - { "r_pr_billboardingmode", "r_pr_billboardingmode: face sprite display method. 0: classic mode; 1: polymost mode", (void *) &pr_billboardingmode, CVAR_INT, 0, 1 }, - { "r_pr_verbosity", "r_pr_verbosity: verbosity level of the polymer renderer", (void *) &pr_verbosity, CVAR_INT, 0, 3 }, - { "r_pr_wireframe", "r_pr_wireframe: toggles wireframe mode", (void *) &pr_wireframe, CVAR_INT | CVAR_NOSAVE, 0, 1 }, - { "r_pr_vbos", "r_pr_vbos: contols Vertex Buffer Object usage. 0: no VBOs. 1: VBOs for map data. 2: VBOs for model data.", (void *) &pr_vbos, CVAR_INT, 0, 2 }, - { "r_pr_gpusmoothing", "r_pr_gpusmoothing: toggles model animation interpolation", (void *) &pr_gpusmoothing, CVAR_INT, 0, 1 }, - { "r_pr_overrideparallax", "r_pr_overrideparallax: overrides parallax mapping scale and bias values with values from the pr_parallaxscale and pr_parallaxbias cvars; use it to fine-tune DEF tokens", (void *) &pr_overrideparallax, CVAR_BOOL | CVAR_NOSAVE, 0, 1 }, - { "r_pr_parallaxscale", "r_pr_parallaxscale: overriden parallax mapping offset scale", (void *) &pr_parallaxscale, CVAR_FLOAT | CVAR_NOSAVE, -10, 10 }, - { "r_pr_parallaxbias", "r_pr_parallaxbias: overriden parallax mapping offset bias", (void *) &pr_parallaxbias, CVAR_FLOAT | CVAR_NOSAVE, -10, 10 }, - { "r_pr_overridespecular", "r_pr_overridespecular: overrides specular material power and factor values with values from the pr_specularpower and pr_specularfactor cvars; use it to fine-tune DEF tokens", (void *) &pr_overridespecular, CVAR_BOOL | CVAR_NOSAVE, 0, 1 }, - { "r_pr_specularpower", "r_pr_specularpower: overriden specular material power", (void *) &pr_specularpower, CVAR_FLOAT | CVAR_NOSAVE, -10, 1000 }, - { "r_pr_specularfactor", "r_pr_specularfactor: overriden specular material factor", (void *) &pr_specularfactor, CVAR_FLOAT | CVAR_NOSAVE, -10, 1000 }, - { "r_pr_highpalookups", "r_pr_highpalookups: enable/disable highpalookups", (void *) &pr_highpalookups, CVAR_BOOL, 0, 1 }, - { "r_pr_overridehud", "r_pr_overridehud: overrides hud model parameters with values from the pr_hud* cvars; use it to fine-tune DEF tokens", (void *) &pr_overridehud, CVAR_BOOL | CVAR_NOSAVE, 0, 1 }, - { "r_pr_hudxadd", "r_pr_hudxadd: overriden HUD xadd; see r_pr_overridehud", (void *) &pr_hudxadd, CVAR_FLOAT | CVAR_NOSAVE, -100, 100 }, - { "r_pr_hudyadd", "r_pr_hudyadd: overriden HUD yadd; see r_pr_overridehud", (void *) &pr_hudyadd, CVAR_FLOAT | CVAR_NOSAVE, -100, 100 }, - { "r_pr_hudzadd", "r_pr_hudzadd: overriden HUD zadd; see r_pr_overridehud", (void *) &pr_hudzadd, CVAR_FLOAT | CVAR_NOSAVE, -100, 100 }, - { "r_pr_hudangadd", "r_pr_hudangadd: overriden HUD angadd; see r_pr_overridehud", (void *) &pr_hudangadd, CVAR_INT | CVAR_NOSAVE, -512, 512 }, - { "r_pr_hudfov", "r_pr_hudfov: overriden HUD fov; see r_pr_overridehud", (void *) &pr_hudfov, CVAR_INT | CVAR_NOSAVE, 0, 1023 }, - { "r_pr_overridemodelscale", "r_pr_overridemodelscale: overrides model scale if non-zero; use it to fine-tune DEF tokens", (void *) &pr_overridemodelscale, CVAR_FLOAT | CVAR_NOSAVE, 0, 500 }, - { "r_pr_ati_fboworkaround", "r_pr_ati_fboworkaround: enable this to workaround an ATI driver bug that causes sprite shadows to be square - you need to restart the renderer for it to take effect", (void *) &pr_ati_fboworkaround, CVAR_BOOL | CVAR_NOSAVE, 0, 1 }, - { "r_pr_ati_nodepthoffset", "r_pr_ati_nodepthoffset: enable this to workaround an ATI driver bug that causes sprite drawing to freeze the game on Radeon X1x00 hardware - you need to restart the renderer for it to take effect", (void *) &pr_ati_nodepthoffset, CVAR_BOOL | CVAR_NOSAVE, 0, 1 }, -#endif - - { "r_models","r_models: enable/disable model rendering",(void *) &usemodels, CVAR_BOOL, 0, 1 }, - { "r_hightile","r_hightile: enable/disable hightile texture rendering",(void *) &usehightile, CVAR_BOOL, 0, 1 }, - - { "r_preview_mouseaim", "r_preview_mouseaim: toggles mouse aiming preview, use this to calibrate yxaspect in Polymost Mapster32", (void *) &preview_mouseaim, CVAR_BOOL, 0, 1 }, -#endif - }; - - for (i=0; imdnum < 2) return; - - { - int32_t i,j=0; - - if (models[mid]->mdnum == 3) - j = ((md3model_t *)models[mid])->head.numsurfs; - - for (i=0; i<=j; i++) - { - mdloadskin((md2model_t *)models[mid], 0, dapalnum, i); - } - } -#endif -} - -static uint16_t hicosub(uint16_t c) -{ - int32_t r, g, b; - g = ((c>> 5)&63); - r = ((c>>11)-(g>>1))&31; - b = ((c>> 0)-(g>>1))&31; - return((r<<11)+(g<<5)+b); -} - -static uint16_t hicoadd(uint16_t c) -{ - int32_t r, g, b; - g = ((c>> 5)&63); - r = ((c>>11)+(g>>1))&31; - b = ((c>> 0)+(g>>1))&31; - return((r<<11)+(g<<5)+b); -} - -/* -Description of Ken's filter to improve LZW compression of DXT1 format by ~15%: (as tested with the HRP) - - To increase LZW patterns, I store each field of the DXT block structure separately. - Here are the 3 DXT fields: - 1. __int64 alpha_4x4; //DXT3 only (16 byte structure size when included) - 2. short rgb0, rgb1; - 3. int32_t index_4x4; - - Each field is then stored with its own specialized algorithm. - 1. I haven't done much testing with this field - I just copy it raw without any transform for now. - - 2. For rgb0 and rgb1, I use a "green" filter like this: - g = g; - r = r-g; - b = b-g; - For grayscale, this makes the stream: x,0,0,x,0,0,x,0,0,... instead of x,x,x,x,x,x,x,x,... - Q:what was the significance of choosing green? A:largest/most dominant component - Believe it or not, this gave 1% better compression :P - I tried subtracting each componenet with the previous pixel, but strangely it hurt compression. - Oh, the joy of trial & error. :) - - 3. For index_4x4, I transform the ordering of 2-bit indices in the DXT blocks from this: - 0123 0123 0123 ---- ---- ---- - 4567 4567 4567 ---- ---- ---- - 89ab 89ab 89ab ---- ---- ---- - cdef cdef cdef ---- ---- ---- - To this: (I swap x & y axes) - 048c 048c 048c |||| |||| |||| - 159d 159d 159d |||| |||| |||| - 26ae 26ae 26ae |||| |||| |||| - 37bf 37bf 37bf |||| |||| |||| - The trick is: going from the bottom of the 4th line to the top of the 5th line - is the exact same jump (geometrically) as from 5th to 6th, etc.. This is not true in the top case. - These silly tricks will increase patterns and therefore make LZW compress better. - I think this improved compression by a few % :) - */ - -#ifdef USE_OPENGL -int32_t dxtfilter(int32_t fil, texcachepicture *pict, char *pic, void *midbuf, char *packbuf, uint32_t miplen) -{ - void *writebuf; - uint32_t j, k, offs, stride, cleng; - char *cptr; - - if ((pict->format == B_LITTLE32(GL_COMPRESSED_RGB_S3TC_DXT1_EXT)) || - (pict->format == B_LITTLE32(GL_COMPRESSED_RGBA_S3TC_DXT1_EXT))) { offs = 0; stride = 8; } - else if ((pict->format == B_LITTLE32(GL_COMPRESSED_RGBA_S3TC_DXT3_EXT)) || - (pict->format == B_LITTLE32(GL_COMPRESSED_RGBA_S3TC_DXT5_EXT))) { offs = 8; stride = 16; } - else { offs = 0; stride = 8; } - - if (stride == 16) //If DXT3... - { - //alpha_4x4 - cptr = midbuf; - for (k=0; k<8; k++) *cptr++ = pic[k]; - for (j=stride; (unsigned)j j-1) - { - cleng = j; - writebuf = midbuf; - } - else writebuf = packbuf; - } - else - { - cleng = (miplen/stride)<<3; - writebuf = midbuf; - } - j = B_LITTLE32(cleng); - Bwrite(fil,&j,sizeof(j)); - Bwrite(fil,writebuf,cleng); - } - - //rgb0,rgb1 - cptr = midbuf; - for (k=0; k<=2; k+=2) - for (j=0; (unsigned)j j-1) - { - cleng = j; - writebuf = midbuf; - } - else writebuf = packbuf; - } - else - { - cleng = (miplen/stride)<<2; - writebuf = midbuf; - } - j = B_LITTLE32(cleng); - Bwrite(fil,&j,sizeof(j)); - Bwrite(fil,writebuf,cleng); - - //index_4x4 - cptr = midbuf; - for (j=0; (unsigned)j>0)&3) + (((c2[1]>>0)&3)<<2) + (((c2[2]>>0)&3)<<4) + (((c2[3]>>0)&3)<<6); - cptr[1] = ((c2[0]>>2)&3) + (((c2[1]>>2)&3)<<2) + (((c2[2]>>2)&3)<<4) + (((c2[3]>>2)&3)<<6); - cptr[2] = ((c2[0]>>4)&3) + (((c2[1]>>4)&3)<<2) + (((c2[2]>>4)&3)<<4) + (((c2[3]>>4)&3)<<6); - cptr[3] = ((c2[0]>>6)&3) + (((c2[1]>>6)&3)<<2) + (((c2[2]>>6)&3)<<4) + (((c2[3]>>6)&3)<<6); - cptr += 4; - } - if (glusetexcache == 2) - { - j = (miplen/stride)<<2; - cleng = qlz_compress(midbuf,packbuf,j,state_compress); - if (cleng == 0 || cleng > j-1) - { - cleng = j; - writebuf = midbuf; - } - else writebuf = packbuf; - } - else - { - cleng = (miplen/stride)<<2; - writebuf = midbuf; - } - j = B_LITTLE32(cleng); - Bwrite(fil,&j,sizeof(j)); - Bwrite(fil,writebuf,cleng); - return 0; -} - -int32_t dedxtfilter(int32_t fil, texcachepicture *pict, char *pic, void *midbuf, char *packbuf, int32_t ispacked) -{ - void *inbuf; - int32_t j, k, offs, stride, cleng; - char *cptr; - - if (ispacked) inbuf = packbuf; else inbuf = midbuf; - - if ((pict->format == GL_COMPRESSED_RGB_S3TC_DXT1_EXT) || - (pict->format == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT)) { offs = 0; stride = 8; } - else if ((pict->format == GL_COMPRESSED_RGBA_S3TC_DXT3_EXT) || - (pict->format == GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)) { offs = 8; stride = 16; } - else { offs = 0; stride = 8; } - - if (stride == 16) //If DXT3... - { - //alpha_4x4 - if (memcachedata && memcachesize >= (signed)(cachepos + sizeof(int32_t))) - { - cleng = *(int32_t *)(memcachedata + cachepos); - cachepos += sizeof(int32_t); - } - else - { - Blseek(fil, cachepos, BSEEK_SET); - cachepos += sizeof(int32_t); - if (Bread(fil,&cleng,sizeof(int32_t)) < (signed)sizeof(int32_t)) return -1; - cleng = B_LITTLE32(cleng); - } - - j = (pict->size/stride)*8; - - if (ispacked && cleng < j) inbuf = packbuf; else inbuf = midbuf; - - if (memcachedata && memcachesize >= (signed)(cachepos + cleng)) - { - if (ispacked && cleng < j) - { - if (qlz_decompress((const char *)memcachedata + cachepos,midbuf,state_decompress) == 0) - { - cachepos += cleng; - return -1; - } - } - else Bmemcpy(inbuf, memcachedata + cachepos, cleng); - - cachepos += cleng; - } - else - { - Blseek(fil, cachepos, BSEEK_SET); - cachepos += cleng; - if (Bread(fil,inbuf,cleng) < cleng) return -1; - - - if (ispacked && cleng < j) - if (qlz_decompress(packbuf,midbuf,state_decompress) == 0) return -1; - } - - cptr = midbuf; - for (k=0; k<8; k++) pic[k] = *cptr++; - for (j=stride; jsize; j+=stride) - for (k=0; k<8; k++) pic[j+k] = (*cptr++); - } - - //rgb0,rgb1 - if (memcachedata && memcachesize >= (signed)(cachepos + sizeof(int32_t))) - { - cleng = *(int32_t *)(memcachedata + cachepos); - cachepos += sizeof(int32_t); - } - else - { - Blseek(fil, cachepos, BSEEK_SET); - cachepos += sizeof(int32_t); - if (Bread(fil,&cleng,sizeof(int32_t)) < (signed)sizeof(int32_t)) return -1; - cleng = B_LITTLE32(cleng); - } - - j = (pict->size/stride)*4; - if (ispacked && cleng < j) inbuf = packbuf; else inbuf = midbuf; - - if (memcachedata && memcachesize >= (signed)(cachepos + cleng)) - { - if (ispacked && cleng < j) - { - if (qlz_decompress((const char *)memcachedata + cachepos,midbuf,state_decompress) == 0) - { - cachepos += cleng; - return -1; - } - } - else Bmemcpy(inbuf, memcachedata + cachepos, cleng); - - cachepos += cleng; - } - else - { - Blseek(fil, cachepos, BSEEK_SET); - cachepos += cleng; - if (Bread(fil,inbuf,cleng) < cleng) return -1; - - if (ispacked && cleng < j) - if (qlz_decompress(packbuf,midbuf,state_decompress) == 0) return -1; - } - - cptr = midbuf; - for (k=0; k<=2; k+=2) - { - for (j=0; jsize; j+=stride) - { - *(int16_t *)(&pic[offs+j+k]) = hicoadd(*(int16_t *)cptr); - cptr += 2; - } - } - - //index_4x4: - if (memcachedata && memcachesize >= (signed)(cachepos + sizeof(int32_t))) - { - cleng = *(int32_t *)(memcachedata + cachepos); - cachepos += sizeof(int32_t); - } - else - { - Blseek(fil, cachepos, BSEEK_SET); - cachepos += sizeof(int32_t); - if (Bread(fil,&cleng,sizeof(int32_t)) < (signed)sizeof(int32_t)) return -1; - cleng = B_LITTLE32(cleng); - } - - j = (pict->size/stride)*4; - if (ispacked && cleng < j) inbuf = packbuf; else inbuf = midbuf; - - if (memcachedata && memcachesize >= (signed)(cachepos + cleng)) - { - if (ispacked && cleng < j) - { - if (qlz_decompress((const char *)memcachedata + cachepos,midbuf,state_decompress) == 0) - { - cachepos += cleng; - return -1; - } - } - else Bmemcpy(inbuf, memcachedata + cachepos, cleng); - - cachepos += cleng; - } - else - { - Blseek(fil, cachepos, BSEEK_SET); - cachepos += cleng; - if (Bread(fil,inbuf,cleng) < cleng) return -1; - - if (ispacked && cleng < j) - if (qlz_decompress(packbuf,midbuf,state_decompress) == 0) return -1; - } - - cptr = midbuf; - for (j=0; jsize; j+=stride) - { - pic[j+offs+4] = ((cptr[0]>>0)&3) + (((cptr[1]>>0)&3)<<2) + (((cptr[2]>>0)&3)<<4) + (((cptr[3]>>0)&3)<<6); - pic[j+offs+5] = ((cptr[0]>>2)&3) + (((cptr[1]>>2)&3)<<2) + (((cptr[2]>>2)&3)<<4) + (((cptr[3]>>2)&3)<<6); - pic[j+offs+6] = ((cptr[0]>>4)&3) + (((cptr[1]>>4)&3)<<2) + (((cptr[2]>>4)&3)<<4) + (((cptr[3]>>4)&3)<<6); - pic[j+offs+7] = ((cptr[0]>>6)&3) + (((cptr[1]>>6)&3)<<2) + (((cptr[2]>>6)&3)<<4) + (((cptr[3]>>6)&3)<<6); - cptr += 4; - } - return 0; -} -#endif - -#else /* POLYMOST */ - -#include "inttypes.h" -int32_t polymost_drawtilescreen(int32_t tilex, int32_t tiley, int32_t wallnum, int32_t dimen) { return -1; } - -#endif - -// vim:ts=4:sw=4: diff --git a/polymer-perf/eduke32/build/src/pragmas.c b/polymer-perf/eduke32/build/src/pragmas.c deleted file mode 100644 index 2e5410d48..000000000 --- a/polymer-perf/eduke32/build/src/pragmas.c +++ /dev/null @@ -1,245 +0,0 @@ -// Function-wrapped Watcom pragmas -// by Jonathon Fowler (jonof@edgenetwk.com) -// -// These functions represent some of the more longer-winded pragmas -// from the original pragmas.h wrapped into functions for easier -// use since many jumps and whatnot make it harder to write macro- -// inline versions. I'll eventually convert these to macro-inline -// equivalents. --Jonathon - -//#include "pragmas.h" -#include "compat.h" - -int32_t dmval; - -#if defined(__GNUC__) && defined(__i386__) && !defined(NOASM) // NOASM - -// -// GCC Inline Assembler version -// - -#define ASM __asm__ __volatile__ - - -int32_t boundmulscale(int32_t a, int32_t b, int32_t c) -{ - ASM( - "imull %%ebx\n\t" - "movl %%edx, %%ebx\n\t" // mov ebx, edx - "shrdl %%cl, %%edx, %%eax\n\t" // mov eax, edx, cl - "sarl %%cl, %%edx\n\t" // sar edx, cl - "xorl %%eax, %%edx\n\t" // xor edx, eax - "js 0f\n\t" // js checkit - "xorl %%eax, %%edx\n\t" // xor edx, eax - "jz 1f\n\t" // js skipboundit - "cmpl $0xffffffff, %%edx\n\t" // cmp edx, 0xffffffff - "je 1f\n\t" // je skipboundit - "0:\n\t" // checkit: - "movl %%ebx, %%eax\n\t" // mov eax, ebx - "sarl $31, %%eax\n\t" // sar eax, 31 - "xorl $0x7fffffff, %%eax\n\t" // xor eax, 0x7fffffff - "1:" // skipboundit: - : "+a"(a), "+b"(b), "+c"(c) // input eax ebx ecx - : - : "edx", "cc" - ); - return a; -} - - -void clearbufbyte(void *D, int32_t c, int32_t a) -{ - ASM( - "cmpl $4, %%ecx\n\t" - "jae 1f\n\t" - "testb $1, %%cl\n\t" - "jz 0f\n\t" // jz preskip - "stosb\n\t" - "0:\n\t" // preskip: - "shrl $1, %%ecx\n\t" - "rep\n\t" - "stosw\n\t" - "jmp 5f\n\t" // jmp endit - "1:\n\t" // intcopy: - "testl $1, %%edi\n\t" - "jz 2f\n\t" // jz skip1 - "stosb\n\t" - "decl %%ecx\n\t" - "2:\n\t" // skip1: - "testl $2, %%edi\n\t" - "jz 3f\n\t" // jz skip2 - "stosw\n\t" - "subl $2, %%ecx\n\t" - "3:\n\t" // skip2: - "movl %%ecx, %%ebx\n\t" - "shrl $2, %%ecx\n\t" - "rep\n\t" - "stosl\n\t" - "testb $2, %%bl\n\t" - "jz 4f\n\t" // jz skip3 - "stosw\n\t" - "4:\n\t" // skip3: - "testb $1, %%bl\n\t" - "jz 5f\n\t" // jz endit - "stosb\n\t" - "5:" // endit - : "+D"(D), "+c"(c), "+a"(a) : - : "ebx", "memory", "cc" - ); -} - -void copybufbyte(void *S, void *D, int32_t c) -{ - ASM( - "cmpl $4, %%ecx\n\t" // cmp ecx, 4 - "jae 1f\n\t" - "testb $1, %%cl\n\t" // test cl, 1 - "jz 0f\n\t" - "movsb\n\t" - "0:\n\t" // preskip: - "shrl $1, %%ecx\n\t" // shr ecx, 1 - "rep\n\t" - "movsw\n\t" - "jmp 5f\n\t" - "1:\n\t" // intcopy: - "testl $1, %%edi\n\t" // test edi, 1 - "jz 2f\n\t" - "movsb\n\t" - "decl %%ecx\n\t" - "2:\n\t" // skip1: - "testl $2, %%edi\n\t" // test edi, 2 - "jz 3f\n\t" - "movsw\n\t" - "subl $2, %%ecx\n\t" // sub ecx, 2 - "3:\n\t" // skip2: - "movl %%ecx, %%ebx\n\t" // mov ebx, ecx - "shrl $2, %%ecx\n\t" // shr ecx ,2 - "rep\n\t" - "movsl\n\t" - "testb $2, %%bl\n\t" // test bl, 2 - "jz 4f\n\t" - "movsw\n\t" - "4:\n\t" // skip3: - "testb $1, %%bl\n\t" // test bl, 1 - "jz 5f\n\t" - "movsb\n\t" - "5:" // endit: - : "+c"(c), "+S"(S), "+D"(D) : - : "ebx", "memory", "cc" - ); -} - -void copybufreverse(void *S, void *D, int32_t c) -{ - ASM( - "shrl $1, %%ecx\n\t" - "jnc 0f\n\t" // jnc skipit1 - "movb (%%esi), %%al\n\t" - "decl %%esi\n\t" - "movb %%al, (%%edi)\n\t" - "incl %%edi\n\t" - "0:\n\t" // skipit1: - "shrl $1, %%ecx\n\t" - "jnc 1f\n\t" // jnc skipit2 - "movw -1(%%esi), %%ax\n\t" - "subl $2, %%esi\n\t" - "rorw $8, %%ax\n\t" - "movw %%ax, (%%edi)\n\t" - "addl $2, %%edi\n\t" - "1:\n\t" // skipit2 - "testl %%ecx, %%ecx\n\t" - "jz 3f\n\t" // jz endloop - "2:\n\t" // begloop - "movl -3(%%esi), %%eax\n\t" - "subl $4, %%esi\n\t" - "bswapl %%eax\n\t" - "movl %%eax, (%%edi)\n\t" - "addl $4, %%edi\n\t" - "decl %%ecx\n\t" - "jnz 2b\n\t" // jnz begloop - "3:" - : "+S"(S), "+D"(D), "+c"(c) : - : "eax", "memory", "cc" - ); -} - -#elif defined(_MSC_VER) && !defined(NOASM) // __GNUC__ && __i386__ - -// -// Microsoft C Inline Assembler version -// - -#else // _MSC_VER - -// -// Generic C version -// - -void qinterpolatedown16(intptr_t bufptr, int32_t num, int32_t val, int32_t add) -{ - // gee, I wonder who could have provided this... - int32_t i, *lptr = (int32_t *)bufptr; - for (i=0; i>16); val += add; } -} - -void qinterpolatedown16short(intptr_t bufptr, int32_t num, int32_t val, int32_t add) -{ - // ...maybe the same person who provided this too? - int32_t i; int16_t *sptr = (int16_t *)bufptr; - for (i=0; i>16); val += add; } -} - -void clearbuf(void *d, int32_t c, int32_t a) -{ - int32_t *p = (int32_t *)d; - while ((c--) > 0) *(p++) = a; -} - -void copybuf(void *s, void *d, int32_t c) -{ - int32_t *p = (int32_t *)s, *q = (int32_t *)d; - while ((c--) > 0) *(q++) = *(p++); -} - -void swapbuf4(void *a, void *b, int32_t c) -{ - int32_t *p = (int32_t *)a, *q = (int32_t *)b; - int32_t x, y; - while ((c--) > 0) - { - x = *q; - y = *p; - *(q++) = y; - *(p++) = x; - } -} - -void clearbufbyte(void *D, int32_t c, int32_t a) -{ - // Cringe City - char *p = (char *)D; - int32_t m[4] = { 0xffl,0xff00l,0xff0000l,0xff000000l }; - int32_t n[4] = { 0,8,16,24 }; - int32_t z=0; - while ((c--) > 0) - { - *(p++) = (uint8_t)((a & m[z])>>n[z]); - z=(z+1)&3; - } -} - -void copybufbyte(void *S, void *D, int32_t c) -{ - char *p = (char *)S, *q = (char *)D; - while ((c--) > 0) *(q++) = *(p++); -} - -void copybufreverse(void *S, void *D, int32_t c) -{ - char *p = (char *)S, *q = (char *)D; - while ((c--) > 0) *(q++) = *(p--); -} - -#endif - - diff --git a/polymer-perf/eduke32/build/src/quicklz.c b/polymer-perf/eduke32/build/src/quicklz.c deleted file mode 100644 index db6364552..000000000 --- a/polymer-perf/eduke32/build/src/quicklz.c +++ /dev/null @@ -1,854 +0,0 @@ -// Fast data compression library -// Copyright (C) 2006-2009 Lasse Mikkel Reinhold -// lar@quicklz.com -// -// QuickLZ can be used for free under the GPL-1 or GPL-2 license (where anything -// released into public must be open source) or under a commercial license if such -// has been acquired (see http://www.quicklz.com/order.html). The commercial license -// does not cover derived or ported versions created by third parties under GPL. - -// BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION -// BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION -// BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION -// BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION -// BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION BETA VERSION - -// 1.5.0 BETA 2 - -#include "quicklz.h" - -#if QLZ_VERSION_MAJOR != 1 || QLZ_VERSION_MINOR != 5 || QLZ_VERSION_REVISION != 0 -#error quicklz.c and quicklz.h have different versions -#endif - -#if (defined(__X86__) || defined(__i386__) || defined(i386) || defined(_M_IX86) || defined(__386__) || defined(__x86_64__) || defined(_M_X64)) -#define X86X64 -#endif - -#define MINOFFSET 2 -#define UNCONDITIONAL_MATCHLEN 6 -#define UNCOMPRESSED_END 4 -#define CWORD_LEN 4 - -#if QLZ_COMPRESSION_LEVEL == 1 && defined QLZ_PTR_64 && QLZ_STREAMING_BUFFER == 0 -#define OFFSET_BASE source -#define CAST (ui32)(size_t) -#else -#define OFFSET_BASE 0 -#define CAST -#endif - -int qlz_get_setting(int setting) -{ - switch (setting) - { - case 0: return QLZ_COMPRESSION_LEVEL; - case 1: return sizeof(qlz_state_compress); - case 2: return sizeof(qlz_state_decompress); - case 3: return QLZ_STREAMING_BUFFER; -#ifdef QLZ_MEMORY_SAFE - case 6: return 1; -#else - case 6: return 0; -#endif - case 7: return QLZ_VERSION_MAJOR; - case 8: return QLZ_VERSION_MINOR; - case 9: return QLZ_VERSION_REVISION; - } - return -1; -} - -#if QLZ_COMPRESSION_LEVEL == 1 -static int same(const unsigned char *src, size_t n) -{ - while (n > 0 && *(src + n) == *src) - n--; - return n == 0 ? 1 : 0; -} -#endif - -static void reset_table_compress(qlz_state_compress *state) -{ - int i; - for (i = 0; i < QLZ_HASH_VALUES; i++) - { -#if QLZ_COMPRESSION_LEVEL == 1 - state->hash[i].offset = 0; -#else - state->hash_counter[i] = 0; -#endif - } -} - -static void reset_table_decompress(qlz_state_decompress *state) -{ - int i; - (void)state; - (void)i; -#if QLZ_COMPRESSION_LEVEL == 2 - for (i = 0; i < QLZ_HASH_VALUES; i++) - { - state->hash_counter[i] = 0; - } -#endif -} - -static __inline ui32 hash_func(ui32 i) -{ -#if QLZ_COMPRESSION_LEVEL == 2 - return ((i >> 9) ^(i >> 13) ^ i) & (QLZ_HASH_VALUES - 1); -#else - return ((i >> 12) ^ i) & (QLZ_HASH_VALUES - 1); -#endif -} - -static __inline ui32 fast_read(void const *src, ui32 bytes) -{ -#ifndef X86X64 - unsigned char *p = (unsigned char *)src; - switch (bytes) - { - case 4: - return(*p | *(p + 1) << 8 | *(p + 2) << 16 | *(p + 3) << 24); - case 3: - return(*p | *(p + 1) << 8 | *(p + 2) << 16); - case 2: - return(*p | *(p + 1) << 8); - case 1: - return(*p); - } - return 0; -#else - if (bytes >= 1 && bytes <= 4) - return *((ui32 *)src); - else - return 0; -#endif -} - -static __inline ui32 hashat(const unsigned char *src) -{ - ui32 fetch, hash; - fetch = fast_read(src, 3); - hash = hash_func(fetch); - return hash; -} - -static __inline void fast_write(ui32 f, void *dst, size_t bytes) -{ -#ifndef X86X64 - unsigned char *p = (unsigned char *)dst; - - switch (bytes) - { - case 4: - *p = (unsigned char)f; - *(p + 1) = (unsigned char)(f >> 8); - *(p + 2) = (unsigned char)(f >> 16); - *(p + 3) = (unsigned char)(f >> 24); - return; - case 3: - *p = (unsigned char)f; - *(p + 1) = (unsigned char)(f >> 8); - *(p + 2) = (unsigned char)(f >> 16); - return; - case 2: - *p = (unsigned char)f; - *(p + 1) = (unsigned char)(f >> 8); - return; - case 1: - *p = (unsigned char)f; - return; - } -#else - switch (bytes) - { - case 4: - *((ui32 *)dst) = f; - return; - case 3: - *((ui32 *)dst) = f; - return; - case 2: - *((ui16 *)dst) = (ui16)f; - return; - case 1: - *((unsigned char *)dst) = (unsigned char)f; - return; - } -#endif -} - - -size_t qlz_size_decompressed(const char *source) -{ - ui32 n, r; - n = (((*source) & 2) == 2) ? 4 : 1; - r = fast_read(source + 1 + n, n); - r = r & (0xffffffff >> ((4 - n)*8)); - return r; -} - -size_t qlz_size_compressed(const char *source) -{ - ui32 n, r; - n = (((*source) & 2) == 2) ? 4 : 1; - r = fast_read(source + 1, n); - r = r & (0xffffffff >> ((4 - n)*8)); - return r; -} - -size_t qlz_size_header(const char *source) -{ - size_t n = 2*((((*source) & 2) == 2) ? 4 : 1) + 1; - return n; -} - - -static __inline void memcpy_up(unsigned char *dst, const unsigned char *src, ui32 n) -{ - // Caution if modifying memcpy_up! Overlap of dst and src must be special handled. -#ifndef X86X64 - unsigned char *end = dst + n; - while (dst < end) - { - *dst = *src; - dst++; - src++; - } -#else - ui32 f = 0; - do - { - *(ui32 *)(dst + f) = *(ui32 *)(src + f); - f += MINOFFSET + 1; - } - while (f < n); -#endif -} - -static __inline void update_hash(qlz_state_decompress *state, const unsigned char *s) -{ -#if QLZ_COMPRESSION_LEVEL == 1 - ui32 hash; - hash = hashat(s); - state->hash[hash].offset = s; - state->hash_counter[hash] = 1; -#elif QLZ_COMPRESSION_LEVEL == 2 - ui32 hash; - unsigned char c; - hash = hashat(s); - c = state->hash_counter[hash]; - state->hash[hash].offset[c & (QLZ_POINTERS - 1)] = s; - c++; - state->hash_counter[hash] = c; -#endif - (void)state; - (void)s; -} - -#if QLZ_COMPRESSION_LEVEL <= 2 -static void update_hash_upto(qlz_state_decompress *state, unsigned char **lh, const unsigned char *max) -{ - while (*lh < max) - { - (*lh)++; - update_hash(state, *lh); - } -} -#endif - -static size_t qlz_compress_core(const unsigned char *source, unsigned char *destination, size_t size, qlz_state_compress *state) -{ - const unsigned char *last_byte = source + size - 1; - const unsigned char *src = source; - unsigned char *cword_ptr = destination; - unsigned char *dst = destination + CWORD_LEN; - ui32 cword_val = 1U << 31; - const unsigned char *last_matchstart = last_byte - UNCONDITIONAL_MATCHLEN - UNCOMPRESSED_END; - ui32 fetch = 0; - unsigned int lits = 0; - - (void) lits; - - if (src <= last_matchstart) - fetch = fast_read(src, 3); - - while (src <= last_matchstart) - { - if ((cword_val & 1) == 1) - { - // store uncompressed if compression ratio is too low - if (src > source + (size >> 1) && dst - destination > src - source - ((src - source) >> 5)) - return 0; - - fast_write((cword_val >> 1) | (1U << 31), cword_ptr, CWORD_LEN); - - cword_ptr = dst; - dst += CWORD_LEN; - cword_val = 1U << 31; - fetch = fast_read(src, 3); - } -#if QLZ_COMPRESSION_LEVEL == 1 - { - const unsigned char *o; - ui32 hash, cached; - - hash = hash_func(fetch); - cached = fetch ^ state->hash[hash].cache; - state->hash[hash].cache = fetch; - - o = state->hash[hash].offset + OFFSET_BASE; - state->hash[hash].offset = CAST(src - OFFSET_BASE); - -#ifdef X86X64 - if ((cached & 0xffffff) == 0 && o != OFFSET_BASE && (src - o > MINOFFSET || (src == o + 1 && lits >= 3 && src > source + 3 && same(src - 3, 6)))) - { - if (cached != 0) - { -#else - if (cached == 0 && o != OFFSET_BASE && (src - o > MINOFFSET || (src == o + 1 && lits >= 3 && src > source + 3 && same(src - 3, 6)))) - { - if (*(o + 3) != *(src + 3)) - { -#endif - hash <<= 4; - cword_val = (cword_val >> 1) | (1U << 31); - fast_write((3 - 2) | hash, dst, 2); - src += 3; - dst += 2; - } - else - { - const unsigned char *old_src = src; - size_t matchlen; - hash <<= 4; - - cword_val = (cword_val >> 1) | (1U << 31); - src += 4; - - if (*(o + (src - old_src)) == *src) - { - src++; - if (*(o + (src - old_src)) == *src) - { - size_t q = last_byte - UNCOMPRESSED_END - (src - 5) + 1; - size_t remaining = q > 255 ? 255 : q; - src++; - while (*(o + (src - old_src)) == *src && (size_t)(src - old_src) < remaining) - src++; - } - } - - matchlen = src - old_src; - if (matchlen < 18) - { - fast_write((ui32)(matchlen - 2) | hash, dst, 2); - dst += 2; - } - else - { - fast_write((ui32)(matchlen << 16) | hash, dst, 3); - dst += 3; - } - } - fetch = fast_read(src, 3); - lits = 0; - } - else - { - lits++; - *dst = *src; - src++; - dst++; - cword_val = (cword_val >> 1); -#ifdef X86X64 - fetch = fast_read(src, 3); -#else - fetch = (fetch >> 8 & 0xffff) | (*(src + 2) << 16); -#endif - } - } -#elif QLZ_COMPRESSION_LEVEL >= 2 - { - const unsigned char *o, *offset2; - ui32 hash, matchlen, k, m, best_k = 0; - unsigned char c; - size_t remaining = (last_byte - UNCOMPRESSED_END - src + 1) > 255 ? 255 : (last_byte - UNCOMPRESSED_END - src + 1); - (void)best_k; - - - //hash = hashat(src); - fetch = fast_read(src, 3); - hash = hash_func(fetch); - - c = state->hash_counter[hash]; - - offset2 = state->hash[hash].offset[0]; - if (offset2 < src - MINOFFSET && c > 0 && ((fast_read(offset2, 3) ^ fetch) & 0xffffff) == 0) - { - matchlen = 3; - if (*(offset2 + matchlen) == *(src + matchlen)) - { - matchlen = 4; - while (*(offset2 + matchlen) == *(src + matchlen) && matchlen < remaining) - matchlen++; - } - } - else - matchlen = 0; - for (k = 1; k < QLZ_POINTERS && c > k; k++) - { - o = state->hash[hash].offset[k]; -#if QLZ_COMPRESSION_LEVEL == 3 - if (((fast_read(o, 3) ^ fetch) & 0xffffff) == 0 && o < src - MINOFFSET) -#elif QLZ_COMPRESSION_LEVEL == 2 - if (*(src + matchlen) == *(o + matchlen) && ((fast_read(o, 3) ^ fetch) & 0xffffff) == 0 && o < src - MINOFFSET) -#endif - { - m = 3; - while (*(o + m) == *(src + m) && m < remaining) - m++; -#if QLZ_COMPRESSION_LEVEL == 3 - if ((m > matchlen) || (m == matchlen && o > offset2)) -#elif QLZ_COMPRESSION_LEVEL == 2 - if (m > matchlen) -#endif - { - offset2 = o; - matchlen = m; - best_k = k; - } - } - } - o = offset2; - state->hash[hash].offset[c & (QLZ_POINTERS - 1)] = src; - c++; - state->hash_counter[hash] = c; - -#if QLZ_COMPRESSION_LEVEL == 3 - if (matchlen > 2 && src - o < 131071) - { - ui32 u; - size_t offset = src - o; - - for (u = 1; u < matchlen; u++) - { - hash = hashat(src + u); - c = state->hash_counter[hash]++; - state->hash[hash].offset[c & (QLZ_POINTERS - 1)] = src + u; - } - - cword_val = (cword_val >> 1) | (1U << 31); - src += matchlen; - - if (matchlen == 3 && offset <= 63) - { - *dst = (unsigned char)(offset << 2); - dst++; - } - else if (matchlen == 3 && offset <= 16383) - { - ui32 f = (ui32)((offset << 2) | 1); - fast_write(f, dst, 2); - dst += 2; - } - else if (matchlen <= 18 && offset <= 1023) - { - ui32 f = ((matchlen - 3) << 2) | ((ui32)offset << 6) | 2; - fast_write(f, dst, 2); - dst += 2; - } - - else if (matchlen <= 33) - { - ui32 f = ((matchlen - 2) << 2) | ((ui32)offset << 7) | 3; - fast_write(f, dst, 3); - dst += 3; - } - else - { - ui32 f = ((matchlen - 3) << 7) | ((ui32)offset << 15) | 3; - fast_write(f, dst, 4); - dst += 4; - } - } - else - { - *dst = *src; - src++; - dst++; - cword_val = (cword_val >> 1); - } -#elif QLZ_COMPRESSION_LEVEL == 2 - - if (matchlen > 2) - { - cword_val = (cword_val >> 1) | (1U << 31); - src += matchlen; - - if (matchlen < 10) - { - ui32 f = best_k | ((matchlen - 2) << 2) | (hash << 5); - fast_write(f, dst, 2); - dst += 2; - } - else - { - ui32 f = best_k | (matchlen << 16) | (hash << 5); - fast_write(f, dst, 3); - dst += 3; - } - } - else - { - *dst = *src; - src++; - dst++; - cword_val = (cword_val >> 1); - } -#endif - } -#endif - } - while (src <= last_byte) - { - if ((cword_val & 1) == 1) - { - fast_write((cword_val >> 1) | (1U << 31), cword_ptr, CWORD_LEN); - cword_ptr = dst; - dst += CWORD_LEN; - cword_val = 1U << 31; - } -#if QLZ_COMPRESSION_LEVEL < 3 - if (src <= last_byte - 3) - { -#if QLZ_COMPRESSION_LEVEL == 1 - ui32 hash, fetch; - fetch = fast_read(src, 3); - hash = hash_func(fetch); - state->hash[hash].offset = CAST(src - OFFSET_BASE); - state->hash[hash].cache = fetch; -#elif QLZ_COMPRESSION_LEVEL == 2 - ui32 hash; - unsigned char c; - hash = hashat(src); - c = state->hash_counter[hash]; - state->hash[hash].offset[c & (QLZ_POINTERS - 1)] = src; - c++; - state->hash_counter[hash] = c; -#endif - } -#endif - *dst = *src; - src++; - dst++; - cword_val = (cword_val >> 1); - } - - while ((cword_val & 1) != 1) - cword_val = (cword_val >> 1); - - fast_write((cword_val >> 1) | (1U << 31), cword_ptr, CWORD_LEN); - - // min. size must be 9 bytes so that the qlz_size functions can take 9 bytes as argument - return dst - destination < 9 ? 9 : dst - destination; -} - -static size_t qlz_decompress_core(const unsigned char *source, unsigned char *destination, size_t size, qlz_state_decompress *state, const unsigned char *history) -{ - const unsigned char *src = source + qlz_size_header((const char *)source); - unsigned char *dst = destination; - const unsigned char *last_destination_byte = destination + size - 1; - ui32 cword_val = 1; - const unsigned char *last_matchstart = last_destination_byte - UNCONDITIONAL_MATCHLEN - UNCOMPRESSED_END; - unsigned char *last_hashed = destination - 1; - const unsigned char *last_source_byte = source + qlz_size_compressed((const char *)source) - 1; - static const ui32 bitlut[16] = {4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0}; - - (void) last_source_byte; - (void) last_hashed; - (void) state; - (void) history; - - for (;;) - { - ui32 fetch; - - if (cword_val == 1) - { -#ifdef QLZ_MEMORY_SAFE - if (src + CWORD_LEN - 1 > last_source_byte) - return 0; -#endif - cword_val = fast_read(src, CWORD_LEN); - src += CWORD_LEN; - } - -#ifdef QLZ_MEMORY_SAFE - if (src + 4 - 1 > last_source_byte) - return 0; -#endif - - fetch = fast_read(src, 4); - - if ((cword_val & 1) == 1) - { - ui32 matchlen; - const unsigned char *offset2; - -#if QLZ_COMPRESSION_LEVEL == 1 - ui32 hash; - cword_val = cword_val >> 1; - hash = (fetch >> 4) & 0xfff; - offset2 = (const unsigned char *)(size_t)state->hash[hash].offset; - - if ((fetch & 0xf) != 0) - { - matchlen = (fetch & 0xf) + 2; - src += 2; - } - else - { - matchlen = *(src + 2); - src += 3; - } - -#elif QLZ_COMPRESSION_LEVEL == 2 - ui32 hash; - unsigned char c; - cword_val = cword_val >> 1; - hash = (fetch >> 5) & 0x7ff; - c = (unsigned char)(fetch & 0x3); - offset2 = state->hash[hash].offset[c]; - - if ((fetch & (28)) != 0) - { - matchlen = ((fetch >> 2) & 0x7) + 2; - src += 2; - } - else - { - matchlen = *(src + 2); - src += 3; - } - -#elif QLZ_COMPRESSION_LEVEL == 3 - ui32 offset; - cword_val = cword_val >> 1; - if ((fetch & 3) == 0) - { - offset = (fetch & 0xff) >> 2; - matchlen = 3; - src++; - } - else if ((fetch & 2) == 0) - { - offset = (fetch & 0xffff) >> 2; - matchlen = 3; - src += 2; - } - else if ((fetch & 1) == 0) - { - offset = (fetch & 0xffff) >> 6; - matchlen = ((fetch >> 2) & 15) + 3; - src += 2; - } - else if ((fetch & 127) != 3) - { - offset = (fetch >> 7) & 0x1ffff; - matchlen = ((fetch >> 2) & 0x1f) + 2; - src += 3; - } - else - { - offset = (fetch >> 15); - matchlen = ((fetch >> 7) & 255) + 3; - src += 4; - } - - offset2 = dst - offset; -#endif - -#ifdef QLZ_MEMORY_SAFE - if (offset2 < history || offset2 > dst - MINOFFSET - 1) - return 0; - - if (matchlen > (ui32)(last_destination_byte - dst - UNCOMPRESSED_END + 1)) - return 0; -#endif - - memcpy_up(dst, offset2, matchlen); - dst += matchlen; - -#if QLZ_COMPRESSION_LEVEL <= 2 - update_hash_upto(state, &last_hashed, dst - matchlen); - last_hashed = dst - 1; -#endif - } - else - { - if (dst < last_matchstart) - { - unsigned int n = bitlut[cword_val & 0xf]; -#ifdef X86X64 - *(ui32 *)dst = *(ui32 *)src; -#else - memcpy_up(dst, src, 4); -#endif - cword_val = cword_val >> n; - dst += n; - src += n; -#if QLZ_COMPRESSION_LEVEL <= 2 - update_hash_upto(state, &last_hashed, dst - 3); -#endif - } - else - { - while (dst <= last_destination_byte) - { - if (cword_val == 1) - { - src += CWORD_LEN; - cword_val = 1U << 31; - } -#ifdef QLZ_MEMORY_SAFE - if (src >= last_source_byte + 1) - return 0; -#endif - *dst = *src; - dst++; - src++; - cword_val = cword_val >> 1; - } - -#if QLZ_COMPRESSION_LEVEL <= 2 - update_hash_upto(state, &last_hashed, last_destination_byte - 3); // todo, use constant -#endif - return size; - } - - } - } -} - -size_t qlz_compress(const void *source, char *destination, size_t size, qlz_state_compress *state) -{ - size_t r; - ui32 compressed; - size_t base; - - if (size == 0 || size > 0xffffffff - 400) - return 0; - - if (size < 216) - base = 3; - else - base = 9; - -#if QLZ_STREAMING_BUFFER > 0 - if (state->stream_counter + size - 1 >= QLZ_STREAMING_BUFFER) -#endif - { - reset_table_compress(state); - r = base + qlz_compress_core((const unsigned char *)source, (unsigned char *)destination + base, size, state); -#if QLZ_STREAMING_BUFFER > 0 - reset_table_compress(state); -#endif - if (r == base) - { - memcpy(destination + base, source, size); - r = size + base; - compressed = 0; - } - else - { - compressed = 1; - } - state->stream_counter = 0; - } -#if QLZ_STREAMING_BUFFER > 0 - else - { - unsigned char *src = state->stream_buffer + state->stream_counter; - - memcpy(src, source, size); - r = base + qlz_compress_core(src, (unsigned char *)destination + base, size, state); - - if (r == base) - { - memcpy(destination + base, src, size); - r = size + base; - compressed = 0; - reset_table_compress(state); - } - else - { - compressed = 1; - } - state->stream_counter += size; - } -#endif - if (base == 3) - { - *destination = (unsigned char)(0 | compressed); - *(destination + 1) = (unsigned char)r; - *(destination + 2) = (unsigned char)size; - } - else - { - *destination = (unsigned char)(2 | compressed); - fast_write((ui32)r, destination + 1, 4); - fast_write((ui32)size, destination + 5, 4); - } - - *destination |= (QLZ_COMPRESSION_LEVEL << 2); - *destination |= (1 << 6); - *destination |= ((QLZ_STREAMING_BUFFER == 0 ? 0 : (QLZ_STREAMING_BUFFER == 100000 ? 1 : (QLZ_STREAMING_BUFFER == 1000000 ? 2 : 3))) << 4); - -// 76543210 -// 01SSLLHC - - return r; -} - -size_t qlz_decompress(const char *source, void *destination, qlz_state_decompress *state) -{ - size_t dsiz = qlz_size_decompressed(source); - -#if QLZ_STREAMING_BUFFER > 0 - if (state->stream_counter + qlz_size_decompressed(source) - 1 >= QLZ_STREAMING_BUFFER) -#endif - { - if ((*source & 1) == 1) - { - reset_table_decompress(state); - dsiz = qlz_decompress_core((const unsigned char *)source, (unsigned char *)destination, dsiz, state, (const unsigned char *)destination); - } - else - { - memcpy(destination, source + qlz_size_header(source), dsiz); - } - state->stream_counter = 0; - reset_table_decompress(state); - } -#if QLZ_STREAMING_BUFFER > 0 - else - { - unsigned char *dst = state->stream_buffer + state->stream_counter; - if ((*source & 1) == 1) - { - dsiz = qlz_decompress_core((const unsigned char *)source, dst, dsiz, state, (const unsigned char *)state->stream_buffer); - } - else - { - memcpy(dst, source + qlz_size_header(source), dsiz); - reset_table_decompress(state); - } - memcpy(destination, dst, dsiz); - state->stream_counter += dsiz; - } -#endif - return dsiz; -} - diff --git a/polymer-perf/eduke32/build/src/rawinput.c b/polymer-perf/eduke32/build/src/rawinput.c deleted file mode 100644 index d68cedceb..000000000 --- a/polymer-perf/eduke32/build/src/rawinput.c +++ /dev/null @@ -1,293 +0,0 @@ -#define WIN32_LEAN_AND_MEAN -#define _WIN32_WINNT 0x0501 -#include -#include "rawinput.h" -#include "winlayer.h" -#include "scancodes.h" -#include "build.h" - -static BOOL rawinput_started = 0; -static uint8_t KeyboardState[256] = {0}; // VKeys -static int8_t MWheel = 0; - -extern volatile uint8_t moustat, mousegrab; -extern uint32_t mousewheel[2]; -extern void SetKey(int32_t key, int32_t state); - -#define MASK_DOWN (1<<(i<<1)) -#define MASK_UP (MASK_DOWN<<1) -#define MouseWheelFakePressTime 50 -#ifndef GET_RAWINPUT_CODE_WPARAM -#define GET_RAWINPUT_CODE_WPARAM(wParam) ((wParam) & 0xff) -#endif - -static inline void RI_ProcessMouse(const RAWMOUSE *rmouse) -{ - int32_t i, mask; - - if (!mousegrab || !appactive) - return; - - mousex += rmouse->lLastX; - mousey += rmouse->lLastY; - - if (rmouse->usFlags & MOUSE_MOVE_ABSOLUTE) - { - // untested... maybe devices like wacom tablets set this flag? - POINT pos = { xdim>>1, ydim>>1 }; - - ClientToScreen((HWND)win_gethwnd(), &pos); - - mousex -= pos.x; - mousey -= pos.y; - } - - for (i = 0, mask = 1; i < 4; i++) - { - if (rmouse->usButtonFlags & mask) // button down - { - if (mousepresscallback) - mousepresscallback(i, 1); - mouseb |= 1<usButtonFlags & (mask<<1)) // button up - { - if (mousepresscallback) - mousepresscallback(i, 0); - mouseb &= ~(1<usButtonFlags & RI_MOUSE_WHEEL) ? rmouse->usButtonData : 0; - - if (MWheel > 0) // wheel up - { - if (mousewheel[0] > 0 && mousepresscallback) mousepresscallback(5,0); - mousewheel[0] = getticks(); - mouseb |= 16; - if (mousepresscallback) mousepresscallback(5, 1); - } - else if (MWheel < 0) // wheel down - { - if (mousewheel[1] > 0 && mousepresscallback) mousepresscallback(6,0); - mousewheel[1] = getticks(); - mouseb |= 32; - if (mousepresscallback) mousepresscallback(6, 1); - } -} - -static inline void RI_ProcessKeyboard(const RAWKEYBOARD *rkbd) -{ - uint8_t key = rkbd->MakeCode, VKey = rkbd->VKey; - - // for some reason rkbd->MakeCode is wrong for these - // even though rkbd->VKey is right... - - switch (VKey) - { - case VK_SHIFT: - if (rkbd->Flags & RI_KEY_E0) VKey = VK_RSHIFT, key = sc_RightShift; break; - case VK_CONTROL: - if (rkbd->Flags & RI_KEY_E0) VKey = VK_RCONTROL, key = sc_RightControl; break; - case VK_MENU: - if (rkbd->Flags & RI_KEY_E0) VKey = VK_RMENU, key = sc_RightAlt; break; - case VK_UP: - case VK_NUMPAD8: - if (rkbd->Flags & RI_KEY_E0) VKey = VK_UP, key = sc_UpArrow; - else VKey = VK_NUMPAD8, key = sc_kpad_8; break; - case VK_DOWN: - case VK_NUMPAD2: - if (rkbd->Flags & RI_KEY_E0) VKey = VK_DOWN, key = sc_DownArrow; - else VKey = VK_NUMPAD2, key = sc_kpad_2; break; - case VK_LEFT: - case VK_NUMPAD4: - if (rkbd->Flags & RI_KEY_E0) VKey = VK_LEFT, key = sc_LeftArrow; - else VKey = VK_NUMPAD4, key = sc_kpad_4; break; - case VK_RIGHT: - case VK_NUMPAD6: - if (rkbd->Flags & RI_KEY_E0) VKey = VK_RIGHT, key = sc_RightArrow; - else VKey = VK_NUMPAD6, key = sc_kpad_6; break; - case VK_DIVIDE: -// if (rkbd->Flags & RI_KEY_E0) key = sc_Slash; -// else - key = sc_kpad_Slash; - break; - case VK_INSERT: - key = sc_Insert; break; - case VK_HOME: - key = sc_Home; break; - case VK_DELETE: - key = sc_Delete; break; - case VK_END: - key = sc_End; break; - case VK_PRIOR: - key = sc_PgUp; break; - case VK_NEXT: - key = sc_PgDn; break; - case VK_RETURN: - if (rkbd->Flags & RI_KEY_E0) key = sc_kpad_Enter; break; - case VK_PAUSE: - KeyboardState[VKey] = 1 - (rkbd->Flags & RI_KEY_BREAK); - if (rkbd->Flags & RI_KEY_BREAK) return; - - SetKey(sc_Pause, 1); - - if (keypresscallback) - keypresscallback(sc_Pause, 1); - return; - } - - KeyboardState[VKey] = 1 - (rkbd->Flags & RI_KEY_BREAK); - - if (OSD_HandleScanCode(key, KeyboardState[VKey] != 0)) - { - SetKey(key, KeyboardState[VKey] != 0); - - if (keypresscallback) - keypresscallback(key, KeyboardState[VKey] != 0); - } - - if (rkbd->Flags & RI_KEY_BREAK) return; - if (((keyasciififoend+1)&(KEYFIFOSIZ-1)) == keyasciififoplc) return; - if ((keyasciififoend - keyasciififoplc) > 0) return; - - { - uint8_t buf[2]; - - if (ToAscii(VKey, key, &KeyboardState[0], (LPWORD)&buf[0], 0) != 1) return; - if ((OSD_OSDKey() < 128) && (Btolower(scantoasc[OSD_OSDKey()]) == Btolower(buf[0]))) return; - if (OSD_HandleChar(buf[0]) == 0) return; - - keyasciififo[keyasciififoend] = buf[0]; - keyasciififoend = ((keyasciififoend+1)&(KEYFIFOSIZ-1)); - } -} - -// keyboard is always captured regardless of what we tell this function -BOOL RI_CaptureInput(BOOL grab, HWND target) -{ - RAWINPUTDEVICE raw[2]; - - raw[0].usUsagePage = 0x01; - raw[0].usUsage = 0x02; - raw[0].dwFlags = grab ? (RIDEV_NOLEGACY | RIDEV_CAPTUREMOUSE) : 0; - raw[0].hwndTarget = grab ? target : NULL; - - raw[1].usUsagePage = 0x01; - raw[1].usUsage = 0x06; - raw[1].dwFlags = 0; - raw[1].hwndTarget = target; - - mousegrab = grab; - - return (RegisterRawInputDevices(raw, 2, sizeof(raw[0])) == FALSE); -} - -void RI_ProcessMessage(MSG *msg) -{ - if (GET_RAWINPUT_CODE_WPARAM(msg->wParam) == RIM_INPUT) - { - UINT dwSize = sizeof(RAWINPUT); - RAWINPUT raw; - - GetRawInputData((HRAWINPUT)msg->lParam, RID_INPUT, &raw, &dwSize, sizeof(RAWINPUTHEADER)); - - if (raw.header.dwType == RIM_TYPEKEYBOARD) - RI_ProcessKeyboard(&raw.data.keyboard); - else if (raw.header.dwType == RIM_TYPEMOUSE) - RI_ProcessMouse(&raw.data.mouse); - } - - DefWindowProc(msg->hwnd, msg->message, msg->wParam, msg->lParam); -} - -void RI_PollDevices(BOOL loop) -{ - int32_t i; - MSG msg; - - if (!rawinput_started) - { - if (RI_CaptureInput(1, (HWND)win_gethwnd())) - return; - rawinput_started = 1; - } - - // snapshot the whole keyboard state so we can translate key presses into ascii later - for (i = 0; i < 256; i++) - KeyboardState[i] = GetAsyncKeyState(i) >> 8; - - MWheel = 0; - - while (loop && PeekMessage(&msg, 0, WM_INPUT, WM_INPUT, PM_REMOVE | PM_QS_INPUT)) - RI_ProcessMessage(&msg); - - if (mousegrab && appactive) - { - // center the cursor in the window - POINT pt = { xdim>>1, ydim>>1 }; - - ClientToScreen((HWND)win_gethwnd(), &pt); - SetCursorPos(pt.x, pt.y); - - // do this here because we only want the wheel to signal once, but hold the state for a moment - if (mousewheel[0] > 0 && getticks() - mousewheel[0] > MouseWheelFakePressTime) - { - if (mousepresscallback) mousepresscallback(5,0); - mousewheel[0] = 0; mouseb &= ~16; - } - if (mousewheel[1] > 0 && getticks() - mousewheel[1] > MouseWheelFakePressTime) - { - if (mousepresscallback) mousepresscallback(6,0); - mousewheel[1] = 0; mouseb &= ~32; - } - } -} - -int32_t initmouse(void) -{ - if (moustat) return 0; - grabmouse(moustat = 1); - return 0; -} - -void uninitmouse(void) -{ - if (!moustat) return; - grabmouse(moustat = 0); -} - -void grabmouse(char a) -{ - static POINT pos; - static int32_t d = 0; - - if (!moustat) return; - - if (!mousegrab || !d) - { - GetCursorPos(&pos); - d++; - } - - ShowCursor(a == 0); - RI_CaptureInput(a, (HWND)win_gethwnd()); - SetCursorPos(pos.x, pos.y); -} - -void readmousexy(int32_t *x, int32_t *y) -{ - if (!moustat || !mousegrab) { *x = *y = 0; return; } - *x = mousex; - mousex = 0; - *y = mousey; - mousey = 0; -} - -void readmousebstatus(int32_t *b) -{ - if (!moustat || !mousegrab) { *b = 0; return; } - *b = mouseb; -} - diff --git a/polymer-perf/eduke32/build/src/scriptfile.c b/polymer-perf/eduke32/build/src/scriptfile.c deleted file mode 100644 index 446303a0e..000000000 --- a/polymer-perf/eduke32/build/src/scriptfile.c +++ /dev/null @@ -1,422 +0,0 @@ -/* - * File Tokeniser/Parser/Whatever - * by Jonathon Fowler - * Remixed completely by Ken Silverman - * See the included license file "BUILDLIC.TXT" for license info. - */ - -#include "compat.h" -#include "scriptfile.h" -#include "baselayer.h" -#include "compat.h" -#include "cache1d.h" -#include - - -#define ISWS(x) ((x == ' ') || (x == '\t') || (x == '\r') || (x == '\n')) -static void skipoverws(scriptfile *sf) { if ((sf->textptr < sf->eof) && (!sf->textptr[0])) sf->textptr++; } -static void skipovertoken(scriptfile *sf) { while ((sf->textptr < sf->eof) && (sf->textptr[0])) sf->textptr++; } - -char *scriptfile_gettoken(scriptfile *sf) -{ - char *start; - - skipoverws(sf); - if (sf->textptr >= sf->eof) return NULL; - - start = sf->ltextptr = sf->textptr; - skipovertoken(sf); - return start; -} - -int32_t scriptfile_getstring(scriptfile *sf, char **retst) -{ - (*retst) = scriptfile_gettoken(sf); - if (*retst == NULL) - { - initprintf("Error on line %s:%d: unexpected eof\n",sf->filename,scriptfile_getlinum(sf,sf->textptr)); - return(-2); - } - return(0); -} - -int32_t scriptfile_getnumber(scriptfile *sf, int32_t *num) -{ - skipoverws(sf); - if (sf->textptr >= sf->eof) - { - initprintf("Error on line %s:%d: unexpected eof\n",sf->filename,scriptfile_getlinum(sf,sf->textptr)); - return -1; - } - - while ((sf->textptr[0] == '0') && (sf->textptr[1] >= '0') && (sf->textptr[1] <= '9')) - sf->textptr++; //hack to treat octal numbers like decimal - - sf->ltextptr = sf->textptr; - (*num) = strtol((const char *)sf->textptr,&sf->textptr,0); - if (!ISWS(*sf->textptr) && *sf->textptr) - { - char *p = sf->textptr; - skipovertoken(sf); - initprintf("Error on line %s:%d: expecting int32_t, got \"%s\"\n",sf->filename,scriptfile_getlinum(sf,sf->ltextptr),p); - return -2; - } - return 0; -} - -static double parsedouble(char *ptr, char **end) -{ - int32_t beforedecimal = 1, negative = 0, dig; - int32_t exposgn = 0, expo = 0; - double num = 0.0, decpl = 0.1; - char *p; - - p = ptr; - if (*p == '-') negative = 1, p++; - else if (*p == '+') p++; - for (;; p++) - { - if (*p >= '0' && *p <= '9') - { - dig = *p - '0'; - if (beforedecimal) num = num * 10.0 + dig; - else if (exposgn) expo = expo*10 + dig; - else - { - num += (double)dig * decpl; - decpl /= 10.0; - } - } - else if (*p == '.') - { - if (beforedecimal) beforedecimal = 0; - else break; - } - else if ((*p == 'E') || (*p == 'e')) - { - exposgn = 1; - if (p[1] == '-') { exposgn = -1; p++; } - else if (p[1] == '+') p++; - } - else break; - } - - if (end) *end = p; - if (exposgn) num *= pow(10.0,(double)(expo*exposgn)); - return negative ? -num : num; -} - -int32_t scriptfile_getdouble(scriptfile *sf, double *num) -{ - skipoverws(sf); - if (sf->textptr >= sf->eof) - { - initprintf("Error on line %s:%d: unexpected eof\n",sf->filename,scriptfile_getlinum(sf,sf->textptr)); - return -1; - } - - sf->ltextptr = sf->textptr; - - // On Linux, locale settings interfere with interpreting x.y format numbers - //(*num) = strtod((const char *)sf->textptr,&sf->textptr); - (*num) = parsedouble(sf->textptr, &sf->textptr); - - if (!ISWS(*sf->textptr) && *sf->textptr) - { - char *p = sf->textptr; - skipovertoken(sf); - initprintf("Error on line %s:%d: expecting float, got \"%s\"\n",sf->filename,scriptfile_getlinum(sf,sf->ltextptr),p); - return -2; - } - return 0; -} - -int32_t scriptfile_getsymbol(scriptfile *sf, int32_t *num) -{ - char *t, *e; - int32_t v; - - t = scriptfile_gettoken(sf); - if (!t) return -1; - - v = Bstrtol(t, &e, 10); - if (*e) - { - // looks like a string, so find it in the symbol table - if (scriptfile_getsymbolvalue(t, num)) return 0; - initprintf("Error on line %s:%d: expecting symbol, got \"%s\"\n",sf->filename,scriptfile_getlinum(sf,sf->ltextptr),t); - return -2; // not found - } - - *num = v; - return 0; -} - -int32_t scriptfile_getbraces(scriptfile *sf, char **braceend) -{ - int32_t bracecnt; - char *bracestart; - - skipoverws(sf); - if (sf->textptr >= sf->eof) - { - initprintf("Error on line %s:%d: unexpected eof\n",sf->filename,scriptfile_getlinum(sf,sf->textptr)); - return -1; - } - - if (sf->textptr[0] != '{') - { - initprintf("Error on line %s:%d: expecting '{'\n",sf->filename,scriptfile_getlinum(sf,sf->textptr)); - return -1; - } - bracestart = ++sf->textptr; bracecnt = 1; - while (1) - { - if (sf->textptr >= sf->eof) return(0); - if (sf->textptr[0] == '{') bracecnt++; - if (sf->textptr[0] == '}') { bracecnt--; if (!bracecnt) break; } - sf->textptr++; - } - (*braceend) = sf->textptr; - sf->textptr = bracestart; - return 0; -} - - -int32_t scriptfile_getlinum(scriptfile *sf, char *ptr) -{ - int32_t i, stp; - intptr_t ind; - - //for(i=0;ilinenum;i++) if (sf->lineoffs[i] >= ind) return(i+1); //brute force algo - - ind = ((intptr_t)ptr) - ((intptr_t)sf->textbuf); - - for (stp=1; stp+stplinenum; stp+=stp); //stp = highest power of 2 less than sf->linenum - for (i=0; stp; stp>>=1) - if ((i+stp < sf->linenum) && (sf->lineoffs[i+stp] < ind)) i += stp; - return(i+1); //i = index to highest lineoffs which is less than ind; convert to 1-based line numbers -} - -void scriptfile_preparse(scriptfile *sf, char *tx, int32_t flen) -{ - int32_t i, cr, numcr, nflen, ws, cs, inquote; - - //Count number of lines - numcr = 1; - for (i=0; ilinenum = numcr; - sf->lineoffs = (int32_t *)Bmalloc(sf->linenum*sizeof(int32_t)); - - //Preprocess file for comments (// and /*...*/, and convert all whitespace to single spaces) - nflen = 0; ws = 0; cs = 0; numcr = 0; inquote = 0; - for (i=0; ilineoffs[numcr++] = nflen; - if (cs == 1) cs = 0; - ws = 1; continue; //strip CR/LF - } - - if ((!inquote) && ((tx[i] == ' ') || (tx[i] == '\t'))) { ws = 1; continue; } //strip Space/Tab - if ((tx[i] == '/') && (tx[i+1] == '/') && (!cs)) cs = 1; - if ((tx[i] == '/') && (tx[i+1] == '*') && (!cs)) { ws = 1; cs = 2; } - if ((tx[i] == '*') && (tx[i+1] == '/') && (cs == 2)) { cs = 0; i++; continue; } - if (cs) continue; - - if (ws) { tx[nflen++] = 0; ws = 0; } - - //quotes inside strings: \" - if ((tx[i] == '\\') && (tx[i+1] == '\"')) { i++; tx[nflen++] = '\"'; continue; } - if (tx[i] == '\"') { inquote ^= 1; continue; } - tx[nflen++] = tx[i]; - } - tx[nflen++] = 0; sf->lineoffs[numcr] = nflen; - tx[nflen++] = 0; - -#if 0 - //for debugging only: - printf("pre-parsed file:flen=%d,nflen=%d\n",flen,nflen); - for (i=0; ilinenum); - for (i=0; ilinenum; i++) printf("line %d = byte %d\n",i,sf->lineoffs[i]); -#endif - flen = nflen; - - sf->textbuf = sf->textptr = tx; - sf->textlength = nflen; - sf->eof = &sf->textbuf[nflen-1]; -} - -scriptfile *scriptfile_fromfile(const char *fn) -{ - int32_t fp; - scriptfile *sf; - char *tx; - uint32_t flen; - - fp = kopen4load(fn,0); - if (fp<0) return NULL; - - flen = kfilelength(fp); - tx = (char *) Bmalloc(flen + 2); - if (!tx) - { - kclose(fp); - return NULL; - } - - sf = (scriptfile *) Bmalloc(sizeof(scriptfile)); - if (!sf) - { - kclose(fp); - Bfree(tx); - return NULL; - } - - kread(fp, tx, flen); - tx[flen] = tx[flen+1] = 0; - - kclose(fp); - - scriptfile_preparse(sf,tx,flen); - sf->filename = Bstrdup(fn); - - return sf; -} - -scriptfile *scriptfile_fromstring(const char *string) -{ - scriptfile *sf; - char *tx; - uint32_t flen; - - if (!string) return NULL; - - flen = strlen(string); - - tx = (char *) Bmalloc(flen + 2); - if (!tx) return NULL; - - sf = (scriptfile *) Bmalloc(sizeof(scriptfile)); - if (!sf) - { - Bfree(tx); - return NULL; - } - - Bmemcpy(tx, string, flen); - tx[flen] = tx[flen+1] = 0; - - scriptfile_preparse(sf,tx,flen); - sf->filename = NULL; - - return sf; -} - -void scriptfile_close(scriptfile *sf) -{ - if (!sf) return; - if (sf->lineoffs) Bfree(sf->lineoffs); - if (sf->textbuf) Bfree(sf->textbuf); - if (sf->filename) Bfree(sf->filename); - sf->textbuf = NULL; - sf->filename = NULL; - Bfree(sf); -} - -int32_t scriptfile_eof(scriptfile *sf) -{ - skipoverws(sf); - if (sf->textptr >= sf->eof) return 1; - return 0; -} - -#define SYMBTABSTARTSIZE 256 -static int32_t symbtablength=0, symbtaballoclength=0; -static char *symbtab = NULL; - -static char *getsymbtabspace(int32_t reqd) -{ - char *pos,*np; - int32_t i; - - if (symbtablength + reqd > symbtaballoclength) - { - for (i=max(symbtaballoclength,SYMBTABSTARTSIZE); symbtablength+reqd>i; i<<=1); - np = (char *)Brealloc(symbtab, i); if (!np) return NULL; - symbtab = np; symbtaballoclength = i; - } - - pos = &symbtab[symbtablength]; - symbtablength += reqd; - return pos; -} - -int32_t scriptfile_getsymbolvalue(char *name, int32_t *val) -{ - char *scanner = symbtab; - - if (!symbtab) return 0; - while (scanner - symbtab < symbtablength) - { - if (!Bstrcasecmp(name, scanner)) - { - *val = *(int32_t *)(scanner + strlen(scanner) + 1); - return 1; - } - - scanner += strlen(scanner) + 1 + sizeof(int32_t); - } - - return 0; -} - -int32_t scriptfile_addsymbolvalue(char *name, int32_t val) -{ - char *sp; - // if (scriptfile_getsymbolvalue(name, &x)) return -1; // already exists - - if (symbtab) - { - char *scanner = symbtab; - while (scanner - symbtab < symbtablength) - { - if (!Bstrcasecmp(name, scanner)) - { - *(int32_t *)(scanner + strlen(scanner) + 1) = val; - return 1; - } - - scanner += strlen(scanner) + 1 + sizeof(int32_t); - } - } - - sp = getsymbtabspace(strlen(name) + 1 + sizeof(int32_t)); - if (!sp) return 0; - strcpy(sp, name); - sp += strlen(name)+1; - *(int32_t *)sp = val; - return 1; // added -} - -void scriptfile_clearsymbols(void) -{ - if (symbtab) Bfree(symbtab); - symbtab = NULL; - symbtablength = 0; - symbtaballoclength = 0; -} diff --git a/polymer-perf/eduke32/build/src/sdlayer.c b/polymer-perf/eduke32/build/src/sdlayer.c deleted file mode 100644 index 24a2d40f8..000000000 --- a/polymer-perf/eduke32/build/src/sdlayer.c +++ /dev/null @@ -1,2200 +0,0 @@ -// SDL interface layer -// for the Build Engine -// by Jonathon Fowler (jonof@edgenetwk.com) -// -// Use SDL 1.2 or 1.3 from http://www.libsdl.org - -#include -#include -#include -#include "sdl_inc.h" -#include "compat.h" -#include "sdlayer.h" -#include "cache1d.h" -#include "pragmas.h" -#include "a.h" -#include "build.h" -#include "osd.h" - -#if (SDL_MAJOR_VERSION == 1 && SDL_MINOR_VERSION < 3) // SDL 1.2 -// for SDL_WaitEventTimeout defined below -#include -#endif - -#ifdef USE_OPENGL -# include "glbuild.h" -#endif - -#if defined __APPLE__ -# include "osxbits.h" -#elif defined HAVE_GTK2 -# include "gtkbits.h" -#else -int32_t startwin_open(void) { return 0; } -int32_t startwin_close(void) { return 0; } -int32_t startwin_puts(const char *s) { s=s; return 0; } -int32_t startwin_idle(void *s) { s=s; return 0; } -int32_t startwin_settitle(const char *s) { s=s; return 0; } -#endif - -/// These can be useful for debugging sometimes... -//#define SDL_WM_GrabInput(x) SDL_WM_GrabInput(SDL_GRAB_OFF) -//#define SDL_ShowCursor(x) SDL_ShowCursor(SDL_ENABLE) - -#define SURFACE_FLAGS (SDL_SWSURFACE|SDL_HWPALETTE|SDL_HWACCEL) - -// undefine to restrict windowed resolutions to conventional sizes -#define ANY_WINDOWED_SIZE - -// fix for mousewheel -#define MWHEELTICKS 10 -static uint32_t mwheelup, mwheeldown; - -int32_t _buildargc = 1; -const char **_buildargv = NULL; -extern int32_t app_main(int32_t argc, const char *argv[]); - -char quitevent=0, appactive=1, novideo=0; - -// video -static SDL_Surface *sdl_surface; -int32_t xres=-1, yres=-1, bpp=0, fullscreen=0, bytesperline, imageSize; -intptr_t frameplace=0; -int32_t lockcount=0; -char modechange=1; -char offscreenrendering=0; -char videomodereset = 0; -char nofog=0; -static uint16_t sysgamma[3][256]; -extern int32_t curbrightness, gammabrightness; -#ifdef USE_OPENGL -// OpenGL stuff -char nogl=0; -#endif -int32_t vsync=0; - -#if (SDL_MAJOR_VERSION == 1 && SDL_MINOR_VERSION < 3) -static char keytranslation[SDLK_LAST]; -#else -static char keytranslation[SDL_NUM_SCANCODES]; -#endif -static int32_t buildkeytranslationtable(void); - -//static SDL_Surface * loadtarga(const char *fn); // for loading the icon -static SDL_Surface *appicon = NULL; -static SDL_Surface *loadappicon(void); - -static mutex_t m_initprintf; - -// Joystick dead and saturation zones -uint16_t *joydead, *joysatur; - -int32_t wm_msgbox(char *name, char *fmt, ...) -{ - char buf[2048]; - va_list va; - - UNREFERENCED_PARAMETER(name); - - va_start(va,fmt); - vsprintf(buf,fmt,va); - va_end(va); - -#if defined(__APPLE__) - return osx_msgbox(name, buf); -#elif defined HAVE_GTK2 - if (gtkbuild_msgbox(name, buf) >= 0) return 1; -#endif - puts(buf); - puts(" (press Return or Enter to continue)"); - getchar(); - - return 0; -} - -int32_t wm_ynbox(char *name, char *fmt, ...) -{ - char buf[2048]; - char c; - va_list va; -#if (!defined(__APPLE__) && defined(HAVE_GTK2)) - int32_t r; -#endif - - UNREFERENCED_PARAMETER(name); - - va_start(va,fmt); - vsprintf(buf,fmt,va); - va_end(va); - -#if defined __APPLE__ - return osx_ynbox(name, buf); -#elif defined HAVE_GTK2 - if ((r = gtkbuild_ynbox(name, buf)) >= 0) return r; -#endif - puts(buf); - puts(" (type 'Y' or 'N', and press Return or Enter to continue)"); - do c = getchar(); while (c != 'Y' && c != 'y' && c != 'N' && c != 'n'); - if (c == 'Y' || c == 'y') return 1; - - return 0; -} - -void wm_setapptitle(char *name) -{ - if (name) - { - Bstrncpy(apptitle, name, sizeof(apptitle)-1); - apptitle[ sizeof(apptitle)-1 ] = 0; - } - - SDL_WM_SetCaption(apptitle, NULL); - - startwin_settitle(apptitle); -} - - -// -// -// --------------------------------------- -// -// System -// -// --------------------------------------- -// -// - -int32_t main(int32_t argc, char *argv[]) -{ - int32_t r; - char *argp; - FILE *fp; - -#ifdef NEDMALLOC - nedcreatepool(SYSTEM_POOL_SIZE, -1); - // atexit(neddestroysyspool); -#endif - - buildkeytranslationtable(); - -#ifdef HAVE_GTK2 - gtkbuild_init(&argc, &argv); -#endif - startwin_open(); - - _buildargc = argc; - _buildargv = (const char **)argv; - - // pipe standard outputs to files - if ((argp = Bgetenv("BUILD_LOGSTDOUT")) != NULL) - if (!Bstrcasecmp(argp, "TRUE")) - { - fp = freopen("stdout.txt", "w", stdout); - - if (!fp) - fp = fopen("stdout.txt", "w"); - - if (fp) - { - setvbuf(fp, 0, _IONBF, 0); - *stdout = *fp; - *stderr = *fp; - } - } - -#ifdef USE_OPENGL - if ((argp = Bgetenv("BUILD_NOFOG")) != NULL) - nofog = Batol(argp); -#endif - - baselayer_init(); - r = app_main(_buildargc, _buildargv); - - startwin_close(); -#ifdef HAVE_GTK2 - gtkbuild_exit(r); -#endif - return r; -} - -#ifdef USE_OPENGL -void setvsync(int32_t sync) -{ - if (vsync == sync) return; - vsync = sync; - resetvideomode(); - if (setgamemode(fullscreen,xdim,ydim,bpp)) - OSD_Printf("restartvid: Reset failed...\n"); -} -#endif - -static void attach_debugger_here(void) {} - -#ifdef __GNUC__ -# define PRINTSTACKONSEGV 1 -# include -#endif - -static void sighandler(int signum) -{ - UNREFERENCED_PARAMETER(signum); -// if (signum==SIGSEGV) - { - SDL_WM_GrabInput(SDL_GRAB_OFF); - SDL_ShowCursor(SDL_ENABLE); -#if PRINTSTACKONSEGV - { - void *addr[32]; - int32_t errfd = fileno(stderr); - int32_t n=backtrace(addr, sizeof(addr)/sizeof(addr[0])); - backtrace_symbols_fd(addr, n, errfd); - } - // This is useful for attaching the debugger post-mortem. For those pesky - // cases where the program runs through happily when inspected from the start. -// usleep(15000000); -#endif - attach_debugger_here(); - uninitsystem(); - exit(8); - } -} - -// -// initsystem() -- init SDL systems -// -int32_t initsystem(void) -{ - /* - #ifdef DEBUGGINGAIDS - const SDL_VideoInfo *vid; - #endif - */ - const SDL_version *linked = SDL_Linked_Version(); - SDL_version compiled; - char drvname[32]; - - SDL_VERSION(&compiled); - - mutex_init(&m_initprintf); - - initprintf("Initializing SDL system interface " - "(compiled against SDL version %d.%d.%d, found version %d.%d.%d)\n", - compiled.major, compiled.minor, compiled.patch, - linked->major, linked->minor, linked->patch); - - if (SDL_VERSIONNUM(linked->major,linked->minor,linked->patch) < SDL_REQUIREDVERSION) - { - /*reject running under SDL versions older than what is stated in sdl_inc.h */ - initprintf("You need at least v%d.%d.%d of SDL to run this game\n",SDL_MIN_X,SDL_MIN_Y,SDL_MIN_Z); - return -1; - } - - if (SDL_Init(SDL_INIT_VIDEO //| SDL_INIT_TIMER -#ifdef NOSDLPARACHUTE - | SDL_INIT_NOPARACHUTE -#endif - )) - { - initprintf("Initialization failed! (%s)\nNon-interactive mode enabled\n", SDL_GetError()); - /* if (SDL_Init(0)) - { - initprintf("Initialization failed! (%s)\n", SDL_GetError()); - return -1; - } - else - */ - novideo = 1; -#ifdef USE_OPENGL - nogl = 1; -#endif - } - - signal(SIGSEGV, sighandler); - signal(SIGABRT, sighandler); - signal(SIGFPE, sighandler); - - atexit(uninitsystem); - - frameplace = 0; - lockcount = 0; - -#ifdef USE_OPENGL - if (!novideo && loadgldriver(getenv("BUILD_GLDRV"))) - { - initprintf("Failed loading OpenGL driver. GL modes will be unavailable.\n"); - nogl = 1; - } -#endif - -#ifndef __APPLE__ - - //icon = loadtarga("icon.tga"); - - if (!novideo) - { - appicon = loadappicon(); - if (appicon) - SDL_WM_SetIcon(appicon, 0); - } -#endif - - if (!novideo) - if (SDL_VideoDriverName(drvname, 32)) - initprintf("Using \"%s\" video driver\n", drvname); - - /* - // dump a quick summary of the graphics hardware - #ifdef DEBUGGINGAIDS - vid = SDL_GetVideoInfo(); - initprintf("Video device information:\n"); - initprintf(" Can create hardware surfaces? %s\n", (vid->hw_available)?"Yes":"No"); - initprintf(" Window manager available? %s\n", (vid->wm_available)?"Yes":"No"); - initprintf(" Accelerated hardware blits? %s\n", (vid->blit_hw)?"Yes":"No"); - initprintf(" Accelerated hardware colourkey blits? %s\n", (vid->blit_hw_CC)?"Yes":"No"); - initprintf(" Accelerated hardware alpha blits? %s\n", (vid->blit_hw_A)?"Yes":"No"); - initprintf(" Accelerated software blits? %s\n", (vid->blit_sw)?"Yes":"No"); - initprintf(" Accelerated software colourkey blits? %s\n", (vid->blit_sw_CC)?"Yes":"No"); - initprintf(" Accelerated software alpha blits? %s\n", (vid->blit_sw_A)?"Yes":"No"); - initprintf(" Accelerated colour fills? %s\n", (vid->blit_fill)?"Yes":"No"); - initprintf(" Total video memory: %dKB\n", vid->video_mem); - #endif - */ - return 0; -} - - -// -// uninitsystem() -- uninit SDL systems -// -void uninitsystem(void) -{ - uninitinput(); - uninitmouse(); - uninittimer(); - - if (appicon) - { - SDL_FreeSurface(appicon); - appicon = NULL; - } - - SDL_Quit(); - -#ifdef USE_OPENGL - unloadgldriver(); -#endif -} - - -// -// initprintf() -- prints a string to the intitialization window -// -void initprintf(const char *f, ...) -{ - va_list va; - char buf[2048]; - static char dabuf[2048]; - - va_start(va, f); - Bvsnprintf(buf, sizeof(buf), f, va); - va_end(va); - - OSD_Printf("%s", buf); -// Bprintf("%s", buf); - - mutex_lock(&m_initprintf); - if (Bstrlen(dabuf) + Bstrlen(buf) > 1022) - { - startwin_puts(dabuf); - Bmemset(dabuf, 0, sizeof(dabuf)); - } - - Bstrcat(dabuf,buf); - - if (flushlogwindow || Bstrlen(dabuf) > 768) - { - startwin_puts(dabuf); - startwin_idle(NULL); - Bmemset(dabuf, 0, sizeof(dabuf)); - } - mutex_unlock(&m_initprintf); -} - -// -// debugprintf() -- prints a debug string to stderr -// -void debugprintf(const char *f, ...) -{ -#ifdef DEBUGGINGAIDS - va_list va; - - va_start(va,f); - Bvfprintf(stderr, f, va); - va_end(va); -#else - UNREFERENCED_PARAMETER(f); -#endif -} - - -// -// -// --------------------------------------- -// -// All things Input -// -// --------------------------------------- -// -// - -static char mouseacquired=0,moustat=0; -// static int32_t joyblast=0; -static SDL_Joystick *joydev = NULL; - -// -// initinput() -- init input system -// -int32_t initinput(void) -{ - int32_t i,j; - -#ifdef __APPLE__ - // force OS X to operate in >1 button mouse mode so that LMB isn't adulterated - if (!getenv("SDL_HAS3BUTTONMOUSE")) putenv("SDL_HAS3BUTTONMOUSE=1"); -#endif - if (!remapinit) - for (i=0; i<256; i++) - remap[i]=i; - remapinit=1; - - if (SDL_EnableKeyRepeat(250, 30)) // doesn't do anything in 1.3 - initprintf("Error enabling keyboard repeat.\n"); - inputdevices = 1|2; // keyboard (1) and mouse (2) - mouseacquired = 0; - - SDL_EnableUNICODE(1); // let's hope this doesn't hit us too hard - - memset(key_names,0,sizeof(key_names)); -#if (SDL_MAJOR_VERSION == 1 && SDL_MINOR_VERSION < 3) - for (i=0; i (unsigned)joynumaxes) return NULL; - Bsprintf(tmp,"Axis %d",num); - return (char *)tmp; - - case 1: // button - if ((unsigned)num > (unsigned)joynumbuttons) return NULL; - Bsprintf(tmp,"Button %d",num); - return (char *)tmp; - - case 2: // hat - if ((unsigned)num > (unsigned)joynumhats) return NULL; - Bsprintf(tmp,"Hat %d",num); - return (char *)tmp; - - default: - return NULL; - } -} - - -// -// initmouse() -- init mouse input -// -int32_t initmouse(void) -{ - moustat=1; - grabmouse(1); // FIXME - SA - return 0; -} - -// -// uninitmouse() -- uninit mouse input -// -void uninitmouse(void) -{ - grabmouse(0); - moustat=0; -} - - -// -// grabmouse() -- show/hide mouse cursor -// -void grabmouse(char a) -{ - if (appactive && moustat) - { - if (a != mouseacquired) - { -#ifndef DEBUGGINGAIDS - SDL_GrabMode g; - - g = SDL_WM_GrabInput(a ? SDL_GRAB_ON : SDL_GRAB_OFF); - mouseacquired = (g == SDL_GRAB_ON); - - SDL_ShowCursor(mouseacquired ? SDL_DISABLE : SDL_ENABLE); -#else - mouseacquired = a; -#endif - } - } - else - { - mouseacquired = a; - } - mousex = mousey = 0; -} - - -// -// readmousexy() -- return mouse motion information -// -void readmousexy(int32_t *x, int32_t *y) -{ - if (!mouseacquired || !appactive || !moustat) { *x = *y = 0; return; } - -// if (mousex|mousey)printf("r:%d,%d\n",mousex,mousey); /// - - *x = mousex; - *y = mousey; - mousex = mousey = 0; -} - -// -// readmousebstatus() -- return mouse button information -// -void readmousebstatus(int32_t *b) -{ - if (!mouseacquired || !appactive || !moustat) *b = 0; - else *b = mouseb; -} - -// -// setjoydeadzone() -- sets the dead and saturation zones for the joystick -// -void setjoydeadzone(int32_t axis, uint16_t dead, uint16_t satur) -{ - joydead[axis] = dead; - joysatur[axis] = satur; -} - - -// -// getjoydeadzone() -- gets the dead and saturation zones for the joystick -// -void getjoydeadzone(int32_t axis, uint16_t *dead, uint16_t *satur) -{ - *dead = joydead[axis]; - *satur = joysatur[axis]; -} - - -// -// releaseallbuttons() -// -void releaseallbuttons(void) -{} - - -// -// -// --------------------------------------- -// -// All things Timer -// Ken did this -// -// --------------------------------------- -// -// - -static Uint32 timerfreq=0; -static Uint32 timerlastsample=0; -Uint32 timerticspersec=0; -static void(*usertimercallback)(void) = NULL; - -// -// inittimer() -- initialize timer -// -int32_t inittimer(int32_t tickspersecond) -{ - if (timerfreq) return 0; // already installed - -// initprintf("Initializing timer\n"); - - timerfreq = 1000; - timerticspersec = tickspersecond; - timerlastsample = SDL_GetTicks() * timerticspersec / timerfreq; - - usertimercallback = NULL; - - return 0; -} - -// -// uninittimer() -- shut down timer -// -void uninittimer(void) -{ - if (!timerfreq) return; - - timerfreq=0; -} - -// -// sampletimer() -- update totalclock -// -void sampletimer(void) -{ - Uint32 i; - int32_t n; - - if (!timerfreq) return; - - i = SDL_GetTicks(); - n = (int32_t)(i * timerticspersec / timerfreq) - timerlastsample; - if (n>0) - { - totalclock += n; - timerlastsample += n; - } - - if (usertimercallback) for (; n>0; n--) usertimercallback(); -} - -// -// getticks() -- returns the sdl ticks count -// -uint32_t getticks(void) -{ - return (uint32_t)SDL_GetTicks(); -} - - -// -// gettimerfreq() -- returns the number of ticks per second the timer is configured to generate -// -int32_t gettimerfreq(void) -{ - return timerticspersec; -} - - -// -// installusertimercallback() -- set up a callback function to be called when the timer is fired -// -void(*installusertimercallback(void(*callback)(void)))(void) -{ - void(*oldtimercallback)(void); - - oldtimercallback = usertimercallback; - usertimercallback = callback; - - return oldtimercallback; -} - - - -// -// -// --------------------------------------- -// -// All things Video -// -// --------------------------------------- -// -// - - -// -// getvalidmodes() -- figure out what video modes are available -// -static int32_t sortmodes(const struct validmode_t *a, const struct validmode_t *b) -{ - int32_t x; - - if ((x = a->fs - b->fs) != 0) return x; - if ((x = a->bpp - b->bpp) != 0) return x; - if ((x = a->xdim - b->xdim) != 0) return x; - if ((x = a->ydim - b->ydim) != 0) return x; - - return 0; -} -static char modeschecked=0; -void getvalidmodes(void) -{ - static int32_t cdepths[] = - { - 8, -#ifdef USE_OPENGL - 16,24,32, -#endif - 0 - }; - SDL_Rect **modes; - SDL_PixelFormat pf; - - pf.palette = NULL; - pf.BitsPerPixel = 8; - pf.BytesPerPixel = 1; - - int32_t i, j, maxx=0, maxy=0; - - if (modeschecked || novideo) return; - - validmodecnt=0; -// initprintf("Detecting video modes:\n"); - -#define ADDMODE(x,y,c,f) do { \ - if (validmodecnt 8) continue; -#endif - pf.BitsPerPixel = cdepths[j]; - pf.BytesPerPixel = cdepths[j] >> 3; - - modes = SDL_ListModes(&pf, SURFACE_FLAGS -// #if (SDL_MAJOR_VERSION == 1 && SDL_MINOR_VERSION < 3) - | SDL_FULLSCREEN // not implemented/working in SDL 1.3 SDL_compat.c -//#endif - ); - - if (modes == (SDL_Rect **)0) - { - if (cdepths[j] > 8) cdepths[j] = -1; - continue; - } - - if (modes == (SDL_Rect **)-1) - { - for (i=0; defaultres[i][0]; i++) - ADDMODE(defaultres[i][0],defaultres[i][1],cdepths[j],1); - } - else - { - for (i=0; modes[i]; i++) - { - if ((modes[i]->w > MAXXDIM) || (modes[i]->h > MAXYDIM)) continue; - - ADDMODE(modes[i]->w, modes[i]->h, cdepths[j], 1); - - if ((modes[i]->w > maxx) && (modes[i]->h > maxy)) - { - maxx = modes[i]->w; - maxy = modes[i]->h; - } - } - } - } - - if (maxx == 0 && maxy == 0) - { - initprintf("No fullscreen modes available!\n"); - maxx = MAXXDIM; maxy = MAXYDIM; - } - - // add windowed modes next - for (j=0; cdepths[j]; j++) - { -#ifdef USE_OPENGL - if (nogl && cdepths[j] > 8) continue; -#endif - if (cdepths[j] < 0) continue; - for (i=0; defaultres[i][0]; i++) - CHECK(defaultres[i][0],defaultres[i][1]) - ADDMODE(defaultres[i][0],defaultres[i][1],cdepths[j],0); - } - -#undef CHECK -#undef ADDMODE - - qsort((void *)validmode, validmodecnt, sizeof(struct validmode_t), (int32_t( *)(const void *,const void *))sortmodes); - - modeschecked=1; -} - - -// -// checkvideomode() -- makes sure the video mode passed is legal -// -int32_t checkvideomode(int32_t *x, int32_t *y, int32_t c, int32_t fs, int32_t forced) -{ - int32_t i, nearest=-1, dx, dy, odx=9999, ody=9999; - - getvalidmodes(); - - if (c>8 -#ifdef USE_OPENGL - && nogl -#endif - ) return -1; - - // fix up the passed resolution values to be multiples of 8 - // and at least 320x200 or at most MAXXDIMxMAXYDIM - if (*x < 320) *x = 320; - if (*y < 200) *y = 200; - if (*x > MAXXDIM) *x = MAXXDIM; - if (*y > MAXYDIM) *y = MAXYDIM; -// *x &= 0xfffffff8l; - - for (i=0; i 8 && sdl_surface) polymost_glreset(); -#endif - - // restore gamma before we change video modes if it was changed - if (sdl_surface && gammabrightness) - { - SDL_SetGammaRamp(sysgamma[0], sysgamma[1], sysgamma[2]); - gammabrightness = 0; // redetect on next mode switch - } - -#ifdef USE_OPENGL - if (c > 8) - { - int32_t i, j, multisamplecheck = (glmultisample > 0); - struct - { - SDL_GLattr attr; - int32_t value; - } - attributes[] = - { -#if 0 - { SDL_GL_RED_SIZE, 8 }, - { SDL_GL_GREEN_SIZE, 8 }, - { SDL_GL_BLUE_SIZE, 8 }, - { SDL_GL_ALPHA_SIZE, 8 }, - { SDL_GL_BUFFER_SIZE, c }, - { SDL_GL_STENCIL_SIZE, 0 }, - { SDL_GL_ACCUM_RED_SIZE, 0 }, - { SDL_GL_ACCUM_GREEN_SIZE, 0 }, - { SDL_GL_ACCUM_BLUE_SIZE, 0 }, - { SDL_GL_ACCUM_ALPHA_SIZE, 0 }, - { SDL_GL_DEPTH_SIZE, 24 }, -#endif - { SDL_GL_DOUBLEBUFFER, 1 }, - { SDL_GL_MULTISAMPLEBUFFERS, glmultisample > 0 }, - { SDL_GL_MULTISAMPLESAMPLES, glmultisample }, - { SDL_GL_STENCIL_SIZE, 1 }, -#if (SDL_MAJOR_VERSION == 1 && SDL_MINOR_VERSION < 3) - { SDL_GL_SWAP_CONTROL, vsync }, -#endif - }; - - if (nogl) return -1; - - initprintf("Setting video mode %dx%d (%d-bpp %s)\n", - x,y,c, ((fs&1) ? "fullscreen" : "windowed")); - do - { - for (i=0; i < (int32_t)(sizeof(attributes)/sizeof(attributes[0])); i++) - { - j = attributes[i].value; - if (!multisamplecheck && - (attributes[i].attr == SDL_GL_MULTISAMPLEBUFFERS || - attributes[i].attr == SDL_GL_MULTISAMPLESAMPLES) - ) - { - j = 0; - } - SDL_GL_SetAttribute(attributes[i].attr, j); - } - - /* HACK: changing SDL GL attribs only works before surface creation, - so we have to create a new surface in a different format first - to force the surface we WANT to be recreated instead of reused. */ -#if (SDL_MAJOR_VERSION == 1 && SDL_MINOR_VERSION < 3) - if (vsync != ovsync) - { - if (sdl_surface) - { - SDL_FreeSurface(sdl_surface); - sdl_surface = SDL_SetVideoMode(1, 1, 8, SDL_NOFRAME | SURFACE_FLAGS | ((fs&1)?SDL_FULLSCREEN:0)); - SDL_FreeSurface(sdl_surface); - } - ovsync = vsync; - } -#endif - sdl_surface = SDL_SetVideoMode(x, y, c, SDL_OPENGL | ((fs&1)?SDL_FULLSCREEN:0)); - if (!sdl_surface) - { - if (multisamplecheck) - { - initprintf("Multisample mode not possible. Retrying without multisampling.\n"); - glmultisample = 0; - continue; - } - initprintf("Unable to set video mode!\n"); - return -1; - } - } - while (multisamplecheck--); - } - else -#endif - { - initprintf("Setting video mode %dx%d (%d-bpp %s)\n", - x,y,c, ((fs&1) ? "fullscreen" : "windowed")); - sdl_surface = SDL_SetVideoMode(x, y, c, SURFACE_FLAGS | ((fs&1)?SDL_FULLSCREEN:0)); - if (!sdl_surface) - { - initprintf("Unable to set video mode!\n"); - return -1; - } - } - -#if 0 - { - char flags[512] = ""; -#define FLAG(x,y) if ((sdl_surface->flags & x) == x) { strcat(flags, y); strcat(flags, " "); } - FLAG(SDL_HWSURFACE, "HWSURFACE") else - FLAG(SDL_SWSURFACE, "SWSURFACE") - FLAG(SDL_ASYNCBLIT, "ASYNCBLIT") - FLAG(SDL_ANYFORMAT, "ANYFORMAT") - FLAG(SDL_HWPALETTE, "HWPALETTE") - FLAG(SDL_DOUBLEBUF, "DOUBLEBUF") - FLAG(SDL_FULLSCREEN, "FULLSCREEN") - FLAG(SDL_OPENGL, "OPENGL") - FLAG(SDL_OPENGLBLIT, "OPENGLBLIT") - FLAG(SDL_RESIZABLE, "RESIZABLE") - FLAG(SDL_HWACCEL, "HWACCEL") - FLAG(SDL_SRCCOLORKEY, "SRCCOLORKEY") - FLAG(SDL_RLEACCEL, "RLEACCEL") - FLAG(SDL_SRCALPHA, "SRCALPHA") - FLAG(SDL_PREALLOC, "PREALLOC") -#undef FLAG - initprintf("SDL Surface flags: %s\n", flags); - } -#endif - - { - //static char t[384]; - //sprintf(t, "%s (%dx%d %s)", apptitle, x, y, ((fs) ? "fullscreen" : "windowed")); - SDL_WM_SetCaption(apptitle, 0); - } - -#ifdef USE_OPENGL - if (c > 8) - { - char *p,*p2,*p3; - - polymost_glreset(); - - bglEnable(GL_TEXTURE_2D); - bglShadeModel(GL_SMOOTH); //GL_FLAT - bglClearColor(0,0,0,0.5); //Black Background - bglHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); //Use FASTEST for ortho! - bglHint(GL_LINE_SMOOTH_HINT,GL_NICEST); - bglDisable(GL_DITHER); - - glinfo.vendor = (const char *)bglGetString(GL_VENDOR); - glinfo.renderer = (const char *)bglGetString(GL_RENDERER); - glinfo.version = (const char *)bglGetString(GL_VERSION); - glinfo.extensions = (const char *)bglGetString(GL_EXTENSIONS); - -#ifdef POLYMER - if (!Bstrcmp(glinfo.vendor,"ATI Technologies Inc.")) - { - pr_ati_fboworkaround = 1; - initprintf("Enabling ATI FBO color attachment workaround.\n"); - - if (Bstrstr(glinfo.renderer,"Radeon X1")) - { - pr_ati_nodepthoffset = 1; - initprintf("Enabling ATI R520 polygon offset workaround.\n"); - } - else - pr_ati_nodepthoffset = 0; -#ifdef __APPLE__ - //See bug description at http://lists.apple.com/archives/mac-opengl/2005/Oct/msg00169.html - if (!Bstrncmp(glinfo.renderer,"ATI Radeon 9600", 15)) - { - pr_ati_textureformat_one = 1; - initprintf("Enabling ATI Radeon 9600 texture format workaround.\n"); - } - else - pr_ati_textureformat_one = 0; -#endif - } - else - pr_ati_fboworkaround = 0; -#endif - - glinfo.maxanisotropy = 1.0; - glinfo.bgra = 0; - glinfo.texcompr = 0; - - // process the extensions string and flag stuff we recognize - p = Bstrdup(glinfo.extensions); - p3 = p; - while ((p2 = Bstrtoken(p3==p?p:NULL, " ", (char **)&p3, 1)) != NULL) - { - if (!Bstrcmp(p2, "GL_EXT_texture_filter_anisotropic")) - { - // supports anisotropy. get the maximum anisotropy level - bglGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &glinfo.maxanisotropy); - } - else if (!Bstrcmp(p2, "GL_EXT_texture_edge_clamp") || - !Bstrcmp(p2, "GL_SGIS_texture_edge_clamp")) - { - // supports GL_CLAMP_TO_EDGE or GL_CLAMP_TO_EDGE_SGIS - glinfo.clamptoedge = 1; - } - else if (!Bstrcmp(p2, "GL_EXT_bgra")) - { - // support bgra textures - glinfo.bgra = 1; - } - else if (!Bstrcmp(p2, "GL_ARB_texture_compression")) - { - // support texture compression - glinfo.texcompr = 1; - } - else if (!Bstrcmp(p2, "GL_ARB_texture_non_power_of_two")) - { - // support non-power-of-two texture sizes - glinfo.texnpot = 1; - } - else if (!Bstrcmp(p2, "WGL_3DFX_gamma_control")) - { - // 3dfx cards have issues with fog - nofog = 1; - if (!(warnonce&1)) initprintf("3dfx card detected: OpenGL fog disabled\n"); - warnonce |= 1; - } - else if (!Bstrcmp(p2, "GL_ARB_multisample")) - { - // supports multisampling - glinfo.multisample = 1; - } - else if (!Bstrcmp(p2, "GL_NV_multisample_filter_hint")) - { - // supports nvidia's multisample hint extension - glinfo.nvmultisamplehint = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_fragment_program")) - { - glinfo.arbfp = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_depth_texture")) - { - glinfo.depthtex = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_shadow")) - { - glinfo.shadow = 1; - } - else if (!Bstrcmp((char *)p2, "GL_EXT_framebuffer_object")) - { - glinfo.fbos = 1; - } - else if (!Bstrcmp((char *)p2, "GL_NV_texture_rectangle") || - !Bstrcmp((char *)p2, "GL_EXT_texture_rectangle")) - { - glinfo.rect = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_multitexture")) - { - glinfo.multitex = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_texture_env_combine")) - { - glinfo.envcombine = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_vertex_buffer_object")) - { - glinfo.vbos = 1; - } - else if (!Bstrcmp((char *)p2, "GL_EXT_gpu_shader4")) - { - glinfo.sm4 = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_occlusion_query")) - { - glinfo.occlusionqueries = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_shader_objects")) - { - glinfo.glsl = 1; - } - } - Bfree(p); - - if (!glinfo.dumped) - { - int32_t oldbpp = bpp; - bpp = 32; - osdcmd_glinfo(NULL); - glinfo.dumped = 1; - bpp = oldbpp; - } - } -#endif - - xres = x; - yres = y; - bpp = c; - fullscreen = fs; - //bytesperline = sdl_surface->pitch; - //imageSize = bytesperline*yres; - numpages = c>8?2:1; - frameplace = 0; - lockcount = 0; - modechange=1; - videomodereset = 0; - OSD_ResizeDisplay(xres,yres); - - // save the current system gamma to determine if gamma is available - if (!gammabrightness) - { -// float f = 1.0 + ((float)curbrightness / 10.0); - if (SDL_GetGammaRamp(sysgamma[0], sysgamma[1], sysgamma[2]) >= 0) - gammabrightness = 1; - - // see if gamma really is working by trying to set the brightness - if (gammabrightness && setgamma() < 0) - gammabrightness = 0; // nope - } - - // setpalettefade will set the palette according to whether gamma worked - setpalettefade(palfadergb.r, palfadergb.g, palfadergb.b, palfadedelta); - - //if (c==8) setpalette(0,256,0); - //baselayer_onvideomodechange(c>8); - - if (regrab) grabmouse(1); - - return 0; -} - - -// -// resetvideomode() -- resets the video system -// -void resetvideomode(void) -{ - videomodereset = 1; - modeschecked = 0; -} - - -// -// begindrawing() -- locks the framebuffer for drawing -// -void begindrawing(void) -{ - int32_t i,j; - - if (bpp > 8) - { - if (offscreenrendering) return; - frameplace = 0; - bytesperline = 0; - imageSize = 0; - modechange = 0; - return; - } - - // lock the frame - if (lockcount++ > 0) - return; - - if (offscreenrendering) return; - - if (SDL_MUSTLOCK(sdl_surface)) SDL_LockSurface(sdl_surface); - frameplace = (intptr_t)sdl_surface->pixels; - - if (sdl_surface->pitch != bytesperline || modechange) - { - bytesperline = sdl_surface->pitch; - imageSize = bytesperline*yres; - setvlinebpl(bytesperline); - - j = 0; - for (i=0; i<=ydim; i++) ylookup[i] = j, j += bytesperline; - modechange=0; - } -} - - -// -// enddrawing() -- unlocks the framebuffer -// -void enddrawing(void) -{ - if (bpp > 8) - { - if (!offscreenrendering) frameplace = 0; - return; - } - - if (!frameplace) return; - if (lockcount > 1) { lockcount--; return; } - if (!offscreenrendering) frameplace = 0; - if (lockcount == 0) return; - lockcount = 0; - - if (offscreenrendering) return; - - if (SDL_MUSTLOCK(sdl_surface)) SDL_UnlockSurface(sdl_surface); -} - - -// -// showframe() -- update the display -// -void showframe(int32_t w) -{ -// int32_t i,j; - UNREFERENCED_PARAMETER(w); - -#ifdef USE_OPENGL - if (bpp > 8) - { - if (palfadedelta) - { - bglMatrixMode(GL_PROJECTION); - bglPushMatrix(); - bglLoadIdentity(); - bglMatrixMode(GL_MODELVIEW); - bglPushMatrix(); - bglLoadIdentity(); - - bglDisable(GL_DEPTH_TEST); - bglDisable(GL_ALPHA_TEST); - bglDisable(GL_TEXTURE_2D); - - bglEnable(GL_BLEND); - bglColor4ub(palfadergb.r, palfadergb.g, palfadergb.b, palfadedelta); - - bglBegin(GL_TRIANGLES); - bglVertex2f(-2.5f, 1.f); - bglVertex2f(2.5f, 1.f); - bglVertex2f(.0f, -2.5f); - bglEnd(); - - bglDisable(GL_BLEND); - - bglPopMatrix(); - bglMatrixMode(GL_PROJECTION); - bglPopMatrix(); - } - - SDL_GL_SwapBuffers(); - return; - } -#endif - - if (offscreenrendering) return; - - if (lockcount) - { - printf("Frame still locked %d times when showframe() called.\n", lockcount); - while (lockcount) enddrawing(); - } - - SDL_Flip(sdl_surface); -} - - -// -// setpalette() -- set palette values -// -int32_t setpalette(int32_t start, int32_t num) -{ - SDL_Color pal[256]; - int32_t i,n; - - if (bpp > 8) return 0; // no palette in opengl - - copybuf(curpalettefaded, pal, 256); - - for (i=start, n=num; n>0; i++, n--) - curpalettefaded[i].f = pal[i].unused = 0; - - //return SDL_SetPalette(sdl_surface, SDL_LOGPAL|SDL_PHYSPAL, pal, 0, 256); - - return sdl_surface ? SDL_SetColors(sdl_surface, pal, 0, 256) : 0; -} - -// -// getpalette() -- get palette values -// -/* -int32_t getpalette(int32_t start, int32_t num, char *dapal) -{ - int32_t i; - SDL_Palette *pal; - - // we shouldn't need to lock the surface to get the palette - pal = sdl_surface->format->palette; - - for (i=num; i>0; i--, start++) { - dapal[0] = pal->colors[start].b >> 2; - dapal[1] = pal->colors[start].g >> 2; - dapal[2] = pal->colors[start].r >> 2; - dapal += 4; - } - - return 1; -} -*/ - -// -// setgamma -// -int32_t setgamma(void) -{ - int32_t i; - uint16_t gammaTable[768]; - float gamma = max(0.1f,min(4.f,vid_gamma)); - float contrast = max(0.1f,min(3.f,vid_contrast)); - float bright = max(-0.8f,min(0.8f,vid_brightness)); - - double invgamma = 1 / gamma; - double norm = pow(255., invgamma - 1); - - if (novideo) return 0; - - // This formula is taken from Doomsday - - for (i = 0; i < 256; i++) - { - double val = i * contrast - (contrast - 1) * 127; - if (gamma != 1) val = pow(val, invgamma) / norm; - val += bright * 128; - - gammaTable[i] = gammaTable[i + 256] = gammaTable[i + 512] = (uint16_t)max(0.f,(double)min(0xffff,val*256)); - } - return SDL_SetGammaRamp(&gammaTable[0],&gammaTable[256],&gammaTable[512]); -} - -#ifndef __APPLE__ -extern struct sdlappicon sdlappicon; -static SDL_Surface *loadappicon(void) -{ - SDL_Surface *surf; - - surf = SDL_CreateRGBSurfaceFrom((void *)sdlappicon.pixels, - sdlappicon.width, sdlappicon.height, 32, sdlappicon.width*4, - 0xffl,0xff00l,0xff0000l,0xff000000l); - - return surf; -} -#endif - -// -// -// --------------------------------------- -// -// Miscellany -// -// --------------------------------------- -// -// - - -// -// handleevents() -- process the SDL message queue -// returns !0 if there was an important event worth checking (like quitting) -// - -int32_t handleevents(void) -{ - int32_t code, rv=0, j; - SDL_Event ev; - - while (SDL_PollEvent(&ev)) - { - switch (ev.type) - { -#if (SDL_MAJOR_VERSION > 1 || SDL_MINOR_VERSION > 2) - case SDL_TEXTINPUT: - j = 0; - do - { - code = ev.text.text[j]; - - if (code != scantoasc[OSD_OSDKey()] && ((keyasciififoend+1)&(KEYFIFOSIZ-1)) != keyasciififoplc) - { -// printf("got char %d\n",code); - - if (OSD_HandleChar(code)) - { - keyasciififo[keyasciififoend] = code; - keyasciififoend = ((keyasciififoend+1)&(KEYFIFOSIZ-1)); - } - } - } - while (j < SDL_TEXTINPUTEVENT_TEXT_SIZE && ev.text.text[++j]); - break; - - case SDL_KEYDOWN: - case SDL_KEYUP: - code = keytranslation[ev.key.keysym.scancode]; -// printf("got key %d, %d\n",ev.key.keysym.scancode,code); - - // hook in the osd - if (OSD_HandleScanCode(code, (ev.key.type == SDL_KEYDOWN)) == 0) - break; - - if (ev.key.type == SDL_KEYDOWN) - { - if (!keystatus[code]) - { - SetKey(code, 1); - if (keypresscallback) - keypresscallback(code, 1); - } - } - else - { - SetKey(code, 0); - if (keypresscallback) - keypresscallback(code, 0); - } - break; - case SDL_WINDOWEVENT: - switch (ev.window.event) - { - case SDL_WINDOWEVENT_FOCUS_GAINED: - appactive = 1; -#ifndef DEBUGGINGAIDS - if (mouseacquired && moustat) - { - SDL_WM_GrabInput(SDL_GRAB_ON); - SDL_ShowCursor(SDL_DISABLE); - } -#endif - break; - case SDL_WINDOWEVENT_FOCUS_LOST: - appactive = 0; -#ifndef DEBUGGINGAIDS - if (mouseacquired && moustat) - { - SDL_WM_GrabInput(SDL_GRAB_OFF); - SDL_ShowCursor(SDL_ENABLE); - } -#endif - break; - } - break; - /* - case SDL_MOUSEWHEEL: - initprintf("wheel y %d\n",ev.wheel.y); - if (ev.wheel.y > 0) - { - mwheelup = totalclock; - mouseb |= 16; - if (mousepresscallback) - mousepresscallback(5, 1); - } - if (ev.wheel.y < 0) - { - mwheeldown = totalclock; - mouseb |= 32; - if (mousepresscallback) - mousepresscallback(6, 1); - } - break; - */ -// #print "Using SDL 1.3" -#else // SDL 1.3 ^^^ | vvv SDL 1.2 -// #print "Using SDL 1.2" - case SDL_KEYDOWN: - case SDL_KEYUP: - code = keytranslation[ev.key.keysym.sym]; - - if (code != OSD_OSDKey() && ev.key.keysym.unicode != 0 && ev.key.type == SDL_KEYDOWN && - (ev.key.keysym.unicode & 0xff80) == 0 && - ((keyasciififoend+1)&(KEYFIFOSIZ-1)) != keyasciififoplc) - { -// if (ev.type==SDL_KEYDOWN) -// printf("got char %d\n",ev.key.keysym.unicode & 0x7f); - if (OSD_HandleChar(ev.key.keysym.unicode & 0x7f)) - { - keyasciififo[keyasciififoend] = ev.key.keysym.unicode & 0x7f; - keyasciififoend = ((keyasciififoend+1)&(KEYFIFOSIZ-1)); - } - } - - // hook in the osd -// if (ev.type==SDL_KEYDOWN) -// printf("got key %d\n",code); - if (OSD_HandleScanCode(code, (ev.key.type == SDL_KEYDOWN)) == 0) - break; - - if (ev.key.type == SDL_KEYDOWN) - { - if (!keystatus[code]) - { - SetKey(code, 1); - if (keypresscallback) - keypresscallback(code, 1); - } - } - else - { - SetKey(code, 0); - if (keypresscallback) - keypresscallback(code, 0); - } - break; - - case SDL_ACTIVEEVENT: - if (ev.active.state & SDL_APPINPUTFOCUS) - { - appactive = ev.active.gain; -#ifndef DEBUGGINGAIDS - if (mouseacquired && moustat) - { - if (appactive) - { - SDL_WM_GrabInput(SDL_GRAB_ON); - SDL_ShowCursor(SDL_DISABLE); - } - else - { - SDL_WM_GrabInput(SDL_GRAB_OFF); - SDL_ShowCursor(SDL_ENABLE); - } - } -#endif - rv=-1; - } - break; -#endif - - case SDL_MOUSEBUTTONDOWN: - case SDL_MOUSEBUTTONUP: - switch (ev.button.button) - { - // some of these get reordered to match winlayer - default: - j = -1; break; - case SDL_BUTTON_LEFT: - j = 0; break; - case SDL_BUTTON_RIGHT: - j = 1; break; - case SDL_BUTTON_MIDDLE: - j = 2; break; - case SDL_BUTTON_WHEELUP: - case SDL_BUTTON_WHEELDOWN: - j = ev.button.button; break; - } - if (j<0) break; - - if (ev.button.state == SDL_PRESSED) - { - if (ev.button.button == SDL_BUTTON_WHEELUP) - { - mwheelup = totalclock; - } - if (ev.button.button == SDL_BUTTON_WHEELDOWN) - { - mwheeldown = totalclock; - } - mouseb |= (1< -joydead[ev.jaxis.axis])) - joyaxis[ev.jaxis.axis] = 0; - else if (joyaxis[ev.jaxis.axis] >= joysatur[ev.jaxis.axis]) - joyaxis[ev.jaxis.axis] = 10000; - else if (joyaxis[ev.jaxis.axis] <= -joysatur[ev.jaxis.axis]) - joyaxis[ev.jaxis.axis] = -10000; - else - joyaxis[ev.jaxis.axis] = joyaxis[ev.jaxis.axis] * - 10000 / joysatur[ev.jaxis.axis]; - } - break; - - case SDL_JOYHATMOTION: - { - int32_t hatvals[16] = - { - -1, // centre - 0, // up 1 - 9000, // right 2 - 4500, // up+right 3 - 18000, // down 4 - -1, // down+up!! 5 - 13500, // down+right 6 - -1, // down+right+up!! 7 - 27000, // left 8 - 27500, // left+up 9 - -1, // left+right!! 10 - -1, // left+right+up!! 11 - 22500, // left+down 12 - -1, // left+down+up!! 13 - -1, // left+down+right!! 14 - -1, // left+down+right+up!! 15 - }; - if (appactive && ev.jhat.hat < joynumhats) - joyhat[ ev.jhat.hat ] = hatvals[ ev.jhat.value & 15 ]; - break; - } - - case SDL_JOYBUTTONDOWN: - case SDL_JOYBUTTONUP: - if (appactive && ev.jbutton.button < joynumbuttons) - { - if (ev.jbutton.state == SDL_PRESSED) - joyb |= 1 << ev.jbutton.button; - else - joyb &= ~(1 << ev.jbutton.button); - } - break; - - case SDL_QUIT: - quitevent = 1; - rv=-1; - break; - - default: - //OSD_Printf("Got event (%d)\n", ev.type); - break; - } - } - -// if (mousex|mousey) printf("%d,%d\n",mousex,mousey); /// - - sampletimer(); - - if (moustat) - { - if ((mwheelup) && (mwheelup <= (unsigned)(totalclock - MWHEELTICKS))) - { - mouseb &= ~16; - mwheelup = 0; - } - if ((mwheeldown) && (mwheeldown <= (unsigned)(totalclock - MWHEELTICKS))) - { - mouseb &= ~32; - mwheeldown = 0; - } - } - - startwin_idle(NULL); - -#undef SetKey - - if (after_handleevents_hook) - after_handleevents_hook(); - - return rv; -} - -inline void idle(void) -{ - usleep(1000); -} - -inline void idle_waitevent(void) -{ - SDL_WaitEvent(NULL); -} - -#if (SDL_MAJOR_VERSION == 1 && SDL_MINOR_VERSION < 3) // SDL 1.2 -// from SDL HG, modified -static int32_t SDL_WaitEventTimeout(SDL_Event *event, int32_t timeout) -{ - uint32_t expiration = 0; - - if (timeout > 0) - expiration = SDL_GetTicks() + timeout; - - for (;;) - { - SDL_PumpEvents(); - switch (SDL_PeepEvents(event, 1, SDL_GETEVENT, ~0)) //SDL_FIRSTEVENT, SDL_LASTEVENT)) { - { - case -1: - return 0; - case 1: - return 1; - case 0: - if (timeout == 0) - { - /* Polling and no events, just return */ - return 0; - } - if (timeout > 0 && ((int32_t)(SDL_GetTicks() - expiration) >= 0)) - { - /* Timeout expired and no events */ - return 0; - } - SDL_Delay(10); - break; - } - } -} -#endif - -inline void idle_waitevent_timeout(uint32_t timeout) -{ - SDL_WaitEventTimeout(NULL, timeout); -} - -#if (SDL_MAJOR_VERSION == 1 && SDL_MINOR_VERSION < 3) // SDL 1.2 -static int32_t buildkeytranslationtable(void) -{ - memset(keytranslation,0,sizeof(keytranslation)); - -#define MAP(x,y) keytranslation[x] = y - MAP(SDLK_BACKSPACE, 0xe); - MAP(SDLK_TAB, 0xf); - MAP(SDLK_RETURN, 0x1c); - MAP(SDLK_PAUSE, 0x59); // 0x1d + 0x45 + 0x9d + 0xc5 - MAP(SDLK_ESCAPE, 0x1); - MAP(SDLK_SPACE, 0x39); - MAP(SDLK_EXCLAIM, 0x2); // '1' - MAP(SDLK_QUOTEDBL, 0x28); // ''' - MAP(SDLK_HASH, 0x4); // '3' - MAP(SDLK_DOLLAR, 0x5); // '4' - MAP(37, 0x6); // '5' <-- where's the keysym SDL guys? - MAP(SDLK_AMPERSAND, 0x8); // '7' - MAP(SDLK_QUOTE, 0x28); // ''' - MAP(SDLK_LEFTPAREN, 0xa); // '9' - MAP(SDLK_RIGHTPAREN, 0xb); // '0' - MAP(SDLK_ASTERISK, 0x9); // '8' - MAP(SDLK_PLUS, 0xd); // '=' - MAP(SDLK_COMMA, 0x33); - MAP(SDLK_MINUS, 0xc); - MAP(SDLK_PERIOD, 0x34); - MAP(SDLK_SLASH, 0x35); - MAP(SDLK_0, 0xb); - MAP(SDLK_1, 0x2); - MAP(SDLK_2, 0x3); - MAP(SDLK_3, 0x4); - MAP(SDLK_4, 0x5); - MAP(SDLK_5, 0x6); - MAP(SDLK_6, 0x7); - MAP(SDLK_7, 0x8); - MAP(SDLK_8, 0x9); - MAP(SDLK_9, 0xa); - MAP(SDLK_COLON, 0x27); - MAP(SDLK_SEMICOLON, 0x27); - MAP(SDLK_LESS, 0x33); - MAP(SDLK_EQUALS, 0xd); - MAP(SDLK_GREATER, 0x34); - MAP(SDLK_QUESTION, 0x35); - MAP(SDLK_AT, 0x3); // '2' - MAP(SDLK_LEFTBRACKET, 0x1a); - MAP(SDLK_BACKSLASH, 0x2b); - MAP(SDLK_RIGHTBRACKET, 0x1b); - MAP(SDLK_CARET, 0x7); // '7' - MAP(SDLK_UNDERSCORE, 0xc); - MAP(SDLK_BACKQUOTE, 0x29); - MAP(SDLK_a, 0x1e); - MAP(SDLK_b, 0x30); - MAP(SDLK_c, 0x2e); - MAP(SDLK_d, 0x20); - MAP(SDLK_e, 0x12); - MAP(SDLK_f, 0x21); - MAP(SDLK_g, 0x22); - MAP(SDLK_h, 0x23); - MAP(SDLK_i, 0x17); - MAP(SDLK_j, 0x24); - MAP(SDLK_k, 0x25); - MAP(SDLK_l, 0x26); - MAP(SDLK_m, 0x32); - MAP(SDLK_n, 0x31); - MAP(SDLK_o, 0x18); - MAP(SDLK_p, 0x19); - MAP(SDLK_q, 0x10); - MAP(SDLK_r, 0x13); - MAP(SDLK_s, 0x1f); - MAP(SDLK_t, 0x14); - MAP(SDLK_u, 0x16); - MAP(SDLK_v, 0x2f); - MAP(SDLK_w, 0x11); - MAP(SDLK_x, 0x2d); - MAP(SDLK_y, 0x15); - MAP(SDLK_z, 0x2c); - MAP(SDLK_DELETE, 0xd3); - MAP(SDLK_KP0, 0x52); - MAP(SDLK_KP1, 0x4f); - MAP(SDLK_KP2, 0x50); - MAP(SDLK_KP3, 0x51); - MAP(SDLK_KP4, 0x4b); - MAP(SDLK_KP5, 0x4c); - MAP(SDLK_KP6, 0x4d); - MAP(SDLK_KP7, 0x47); - MAP(SDLK_KP8, 0x48); - MAP(SDLK_KP9, 0x49); - MAP(SDLK_KP_PERIOD, 0x53); - MAP(SDLK_KP_DIVIDE, 0xb5); - MAP(SDLK_KP_MULTIPLY, 0x37); - MAP(SDLK_KP_MINUS, 0x4a); - MAP(SDLK_KP_PLUS, 0x4e); - MAP(SDLK_KP_ENTER, 0x9c); - //MAP(SDLK_KP_EQUALS, ); - MAP(SDLK_UP, 0xc8); - MAP(SDLK_DOWN, 0xd0); - MAP(SDLK_RIGHT, 0xcd); - MAP(SDLK_LEFT, 0xcb); - MAP(SDLK_INSERT, 0xd2); - MAP(SDLK_HOME, 0xc7); - MAP(SDLK_END, 0xcf); - MAP(SDLK_PAGEUP, 0xc9); - MAP(SDLK_PAGEDOWN, 0xd1); - MAP(SDLK_F1, 0x3b); - MAP(SDLK_F2, 0x3c); - MAP(SDLK_F3, 0x3d); - MAP(SDLK_F4, 0x3e); - MAP(SDLK_F5, 0x3f); - MAP(SDLK_F6, 0x40); - MAP(SDLK_F7, 0x41); - MAP(SDLK_F8, 0x42); - MAP(SDLK_F9, 0x43); - MAP(SDLK_F10, 0x44); - MAP(SDLK_F11, 0x57); - MAP(SDLK_F12, 0x58); - MAP(SDLK_NUMLOCK, 0x45); - MAP(SDLK_CAPSLOCK, 0x3a); - MAP(SDLK_SCROLLOCK, 0x46); - MAP(SDLK_RSHIFT, 0x36); - MAP(SDLK_LSHIFT, 0x2a); - MAP(SDLK_RCTRL, 0x9d); - MAP(SDLK_LCTRL, 0x1d); - MAP(SDLK_RALT, 0xb8); - MAP(SDLK_LALT, 0x38); - MAP(SDLK_LSUPER, 0xdb); // win l - MAP(SDLK_RSUPER, 0xdc); // win r - MAP(SDLK_PRINT, -2); // 0xaa + 0xb7 - MAP(SDLK_SYSREQ, 0x54); // alt+printscr - MAP(SDLK_BREAK, 0xb7); // ctrl+pause - MAP(SDLK_MENU, 0xdd); // win menu? -#undef MAP - - return 0; -} -#else // if SDL 1.3 -static int32_t buildkeytranslationtable(void) -{ - memset(keytranslation,0,sizeof(keytranslation)); - -#define MAP(x,y) keytranslation[x] = y - printf("%d\n",SDL_SCANCODE_BACKSPACE); - MAP(SDL_SCANCODE_BACKSPACE, 0xe); - MAP(SDL_SCANCODE_TAB, 0xf); - MAP(SDL_SCANCODE_RETURN, 0x1c); - MAP(SDL_SCANCODE_PAUSE, 0x59); // 0x1d + 0x45 + 0x9d + 0xc5 - MAP(SDL_SCANCODE_ESCAPE, 0x1); - MAP(SDL_SCANCODE_SPACE, 0x39); - MAP(SDL_SCANCODE_COMMA, 0x33); - MAP(SDL_SCANCODE_MINUS, 0xc); - MAP(SDL_SCANCODE_PERIOD, 0x34); - MAP(SDL_SCANCODE_SLASH, 0x35); - MAP(SDL_SCANCODE_0, 0xb); - MAP(SDL_SCANCODE_1, 0x2); - MAP(SDL_SCANCODE_2, 0x3); - MAP(SDL_SCANCODE_3, 0x4); - MAP(SDL_SCANCODE_4, 0x5); - MAP(SDL_SCANCODE_5, 0x6); - MAP(SDL_SCANCODE_6, 0x7); - MAP(SDL_SCANCODE_7, 0x8); - MAP(SDL_SCANCODE_8, 0x9); - MAP(SDL_SCANCODE_9, 0xa); - MAP(SDL_SCANCODE_SEMICOLON, 0x27); - MAP(SDL_SCANCODE_EQUALS, 0xd); - MAP(SDL_SCANCODE_LEFTBRACKET, 0x1a); - MAP(SDL_SCANCODE_BACKSLASH, 0x2b); - MAP(SDL_SCANCODE_RIGHTBRACKET, 0x1b); - MAP(SDL_SCANCODE_A, 0x1e); - MAP(SDL_SCANCODE_B, 0x30); - MAP(SDL_SCANCODE_C, 0x2e); - MAP(SDL_SCANCODE_D, 0x20); - MAP(SDL_SCANCODE_E, 0x12); - MAP(SDL_SCANCODE_F, 0x21); - MAP(SDL_SCANCODE_G, 0x22); - MAP(SDL_SCANCODE_H, 0x23); - MAP(SDL_SCANCODE_I, 0x17); - MAP(SDL_SCANCODE_J, 0x24); - MAP(SDL_SCANCODE_K, 0x25); - MAP(SDL_SCANCODE_L, 0x26); - MAP(SDL_SCANCODE_M, 0x32); - MAP(SDL_SCANCODE_N, 0x31); - MAP(SDL_SCANCODE_O, 0x18); - MAP(SDL_SCANCODE_P, 0x19); - MAP(SDL_SCANCODE_Q, 0x10); - MAP(SDL_SCANCODE_R, 0x13); - MAP(SDL_SCANCODE_S, 0x1f); - MAP(SDL_SCANCODE_T, 0x14); - MAP(SDL_SCANCODE_U, 0x16); - MAP(SDL_SCANCODE_V, 0x2f); - MAP(SDL_SCANCODE_W, 0x11); - MAP(SDL_SCANCODE_X, 0x2d); - MAP(SDL_SCANCODE_Y, 0x15); - MAP(SDL_SCANCODE_Z, 0x2c); - MAP(SDL_SCANCODE_DELETE, 0xd3); - MAP(SDL_SCANCODE_KP_0, 0x52); - MAP(SDL_SCANCODE_KP_1, 0x4f); - MAP(SDL_SCANCODE_KP_2, 0x50); - MAP(SDL_SCANCODE_KP_3, 0x51); - MAP(SDL_SCANCODE_KP_4, 0x4b); - MAP(SDL_SCANCODE_KP_5, 0x4c); - MAP(SDL_SCANCODE_KP_6, 0x4d); - MAP(SDL_SCANCODE_KP_7, 0x47); - MAP(SDL_SCANCODE_KP_8, 0x48); - MAP(SDL_SCANCODE_KP_9, 0x49); - MAP(SDL_SCANCODE_KP_PERIOD, 0x53); - MAP(SDL_SCANCODE_KP_DIVIDE, 0xb5); - MAP(SDL_SCANCODE_KP_MULTIPLY, 0x37); - MAP(SDL_SCANCODE_KP_MINUS, 0x4a); - MAP(SDL_SCANCODE_KP_PLUS, 0x4e); - MAP(SDL_SCANCODE_KP_ENTER, 0x9c); - //MAP(SDL_SCANCODE_KP_EQUALS, ); - MAP(SDL_SCANCODE_UP, 0xc8); - MAP(SDL_SCANCODE_DOWN, 0xd0); - MAP(SDL_SCANCODE_RIGHT, 0xcd); - MAP(SDL_SCANCODE_LEFT, 0xcb); - MAP(SDL_SCANCODE_INSERT, 0xd2); - MAP(SDL_SCANCODE_HOME, 0xc7); - MAP(SDL_SCANCODE_END, 0xcf); - MAP(SDL_SCANCODE_PAGEUP, 0xc9); - MAP(SDL_SCANCODE_PAGEDOWN, 0xd1); - MAP(SDL_SCANCODE_F1, 0x3b); - MAP(SDL_SCANCODE_F2, 0x3c); - MAP(SDL_SCANCODE_F3, 0x3d); - MAP(SDL_SCANCODE_F4, 0x3e); - MAP(SDL_SCANCODE_F5, 0x3f); - MAP(SDL_SCANCODE_F6, 0x40); - MAP(SDL_SCANCODE_F7, 0x41); - MAP(SDL_SCANCODE_F8, 0x42); - MAP(SDL_SCANCODE_F9, 0x43); - MAP(SDL_SCANCODE_F10, 0x44); - MAP(SDL_SCANCODE_F11, 0x57); - MAP(SDL_SCANCODE_F12, 0x58); - MAP(SDL_SCANCODE_NUMLOCKCLEAR, 0x45); - MAP(SDL_SCANCODE_CAPSLOCK, 0x3a); - MAP(SDL_SCANCODE_SCROLLLOCK, 0x46); - MAP(SDL_SCANCODE_RSHIFT, 0x36); - MAP(SDL_SCANCODE_LSHIFT, 0x2a); - MAP(SDL_SCANCODE_RCTRL, 0x9d); - MAP(SDL_SCANCODE_LCTRL, 0x1d); - MAP(SDL_SCANCODE_RALT, 0xb8); - MAP(SDL_SCANCODE_LALT, 0x38); - MAP(SDL_SCANCODE_LGUI, 0xdb); // win l - MAP(SDL_SCANCODE_RGUI, 0xdc); // win r - MAP(SDL_SCANCODE_PRINTSCREEN, -2); // 0xaa + 0xb7 - MAP(SDL_SCANCODE_SYSREQ, 0x54); // alt+printscr - MAP(SDL_SCANCODE_PAUSE, 0xb7); // ctrl+pause - MAP(SDL_SCANCODE_MENU, 0xdd); // win menu? - MAP(SDL_SCANCODE_GRAVE, 0x29); // tilde -#undef MAP - - return 0; -} -#endif -#if defined _WIN32 -# define WIN32_LEAN_AND_MEAN -# include -#elif defined __linux || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ || defined __APPLE__ -# include -#endif - -void makeasmwriteable(void) -{ -#ifndef ENGINE_USING_A_C - extern int32_t dep_begin, dep_end; -# if defined _WIN32 - DWORD oldprot; - if (!VirtualProtect((LPVOID)&dep_begin, (SIZE_T)&dep_end - (SIZE_T)&dep_begin, PAGE_EXECUTE_READWRITE, &oldprot)) - { - initprint("Error making code writeable\n"); - return; - } -# elif defined __linux || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ || defined __APPLE__ - int32_t pagesize; - size_t dep_begin_page; - pagesize = sysconf(_SC_PAGE_SIZE); - if (pagesize == -1) - { - initprintf("Error getting system page size\n"); - return; - } - dep_begin_page = ((size_t)&dep_begin) & ~(pagesize-1); - if (mprotect((void *)dep_begin_page, (size_t)&dep_end - dep_begin_page, PROT_READ|PROT_WRITE) < 0) - { - initprintf("Error making code writeable (errno=%d)\n", errno); - return; - } -# else -# error "Don't know how to unprotect the self-modifying assembly on this platform!" -# endif -#endif -} diff --git a/polymer-perf/eduke32/build/src/smalltextfont.c b/polymer-perf/eduke32/build/src/smalltextfont.c deleted file mode 100644 index 60d2d4d6a..000000000 --- a/polymer-perf/eduke32/build/src/smalltextfont.c +++ /dev/null @@ -1,180 +0,0 @@ -// SMALLTEXTFONT.C - -// Font created by Ken Silverman -// Generated by BIN2C.EXE by Jonathon Fowler - -char smalltextfont[2048] = -{ - // 2048 bytes - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x24, - 0x3C, 0x18, 0x00, 0x00, 0x00, 0x18, 0x24, 0x3C, 0x24, 0x18, 0x00, 0x00, - 0x00, 0x28, 0x3C, 0x3C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x10, 0x38, 0x3C, - 0x38, 0x10, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x3C, 0x00, 0x00, - 0x00, 0x18, 0x18, 0x3C, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x28, 0x38, 0x38, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x14, 0x14, 0x30, 0x00, 0x00, - 0x00, 0x24, 0x18, 0x3C, 0x18, 0x24, 0x00, 0x00, 0x00, 0x20, 0x30, 0x38, - 0x30, 0x20, 0x00, 0x00, 0x00, 0x08, 0x18, 0x38, 0x18, 0x08, 0x00, 0x00, - 0x00, 0x10, 0x38, 0x10, 0x38, 0x10, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, - 0x00, 0x28, 0x00, 0x00, 0x00, 0x1C, 0x34, 0x34, 0x14, 0x14, 0x00, 0x00, - 0x00, 0x1C, 0x30, 0x28, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x38, 0x00, 0x00, 0x00, 0x10, 0x38, 0x10, 0x38, 0x38, 0x00, 0x00, - 0x00, 0x10, 0x38, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, - 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3C, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x3C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x10, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x28, 0x28, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x3C, 0x28, 0x3C, 0x28, 0x00, 0x00, - 0x00, 0x18, 0x30, 0x10, 0x18, 0x30, 0x00, 0x00, 0x00, 0x28, 0x08, 0x10, - 0x20, 0x28, 0x00, 0x00, 0x00, 0x10, 0x28, 0x10, 0x30, 0x38, 0x00, 0x00, - 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x20, - 0x20, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x08, 0x08, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x28, 0x10, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10, 0x10, 0x20, 0x00, 0x00, - 0x00, 0x38, 0x28, 0x28, 0x28, 0x38, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x00, 0x00, 0x00, 0x38, 0x08, 0x38, 0x20, 0x38, 0x00, 0x00, - 0x00, 0x38, 0x08, 0x38, 0x08, 0x38, 0x00, 0x00, 0x00, 0x28, 0x28, 0x38, - 0x08, 0x08, 0x00, 0x00, 0x00, 0x38, 0x20, 0x38, 0x08, 0x38, 0x00, 0x00, - 0x00, 0x38, 0x20, 0x38, 0x28, 0x38, 0x00, 0x00, 0x00, 0x38, 0x08, 0x08, - 0x08, 0x08, 0x00, 0x00, 0x00, 0x38, 0x28, 0x38, 0x28, 0x38, 0x00, 0x00, - 0x00, 0x38, 0x28, 0x38, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x20, 0x00, 0x00, - 0x00, 0x08, 0x10, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x10, 0x20, 0x00, 0x00, - 0x00, 0x30, 0x08, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x38, 0x28, 0x38, - 0x30, 0x38, 0x00, 0x00, 0x00, 0x10, 0x28, 0x38, 0x28, 0x28, 0x00, 0x00, - 0x00, 0x30, 0x28, 0x30, 0x28, 0x30, 0x00, 0x00, 0x00, 0x18, 0x20, 0x20, - 0x20, 0x18, 0x00, 0x00, 0x00, 0x30, 0x28, 0x28, 0x28, 0x30, 0x00, 0x00, - 0x00, 0x38, 0x20, 0x30, 0x20, 0x38, 0x00, 0x00, 0x00, 0x38, 0x20, 0x30, - 0x20, 0x20, 0x00, 0x00, 0x00, 0x38, 0x20, 0x28, 0x28, 0x38, 0x00, 0x00, - 0x00, 0x28, 0x28, 0x38, 0x28, 0x28, 0x00, 0x00, 0x00, 0x38, 0x10, 0x10, - 0x10, 0x38, 0x00, 0x00, 0x00, 0x38, 0x08, 0x08, 0x28, 0x18, 0x00, 0x00, - 0x00, 0x28, 0x28, 0x30, 0x28, 0x28, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, - 0x20, 0x38, 0x00, 0x00, 0x00, 0x28, 0x38, 0x38, 0x28, 0x28, 0x00, 0x00, - 0x00, 0x28, 0x38, 0x38, 0x38, 0x28, 0x00, 0x00, 0x00, 0x38, 0x28, 0x28, - 0x28, 0x38, 0x00, 0x00, 0x00, 0x38, 0x28, 0x38, 0x20, 0x20, 0x00, 0x00, - 0x00, 0x38, 0x28, 0x28, 0x38, 0x18, 0x00, 0x00, 0x00, 0x38, 0x28, 0x30, - 0x28, 0x28, 0x00, 0x00, 0x00, 0x38, 0x20, 0x38, 0x08, 0x38, 0x00, 0x00, - 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, - 0x28, 0x38, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x10, 0x10, 0x00, 0x00, - 0x00, 0x28, 0x28, 0x38, 0x38, 0x28, 0x00, 0x00, 0x00, 0x28, 0x28, 0x10, - 0x28, 0x28, 0x00, 0x00, 0x00, 0x28, 0x28, 0x38, 0x10, 0x10, 0x00, 0x00, - 0x00, 0x38, 0x08, 0x10, 0x20, 0x38, 0x00, 0x00, 0x00, 0x30, 0x20, 0x20, - 0x20, 0x30, 0x00, 0x00, 0x00, 0x20, 0x10, 0x10, 0x08, 0x08, 0x00, 0x00, - 0x00, 0x18, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00, 0x00, 0x10, 0x28, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, - 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, - 0x28, 0x18, 0x00, 0x00, 0x00, 0x20, 0x20, 0x38, 0x28, 0x38, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x20, 0x38, 0x00, 0x00, 0x00, 0x08, 0x08, 0x38, - 0x28, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0x18, 0x00, 0x00, - 0x00, 0x08, 0x10, 0x38, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x18, 0x28, - 0x18, 0x08, 0x30, 0x00, 0x00, 0x20, 0x20, 0x38, 0x28, 0x28, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x10, 0x10, 0x20, 0x00, 0x00, 0x20, 0x20, 0x28, 0x30, 0x28, 0x00, 0x00, - 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x20, 0x38, - 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x28, 0x28, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x28, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, - 0x28, 0x38, 0x20, 0x00, 0x00, 0x00, 0x00, 0x38, 0x28, 0x38, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, - 0x10, 0x30, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x10, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x28, 0x28, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, - 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x28, 0x10, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, - 0x28, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0x10, 0x18, 0x00, 0x00, - 0x00, 0x18, 0x10, 0x20, 0x10, 0x18, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, - 0x10, 0x10, 0x00, 0x00, 0x00, 0x30, 0x10, 0x08, 0x10, 0x30, 0x00, 0x00, - 0x00, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x28, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x18, 0x20, 0x20, 0x20, 0x18, 0x30, 0x00, - 0x00, 0x28, 0x00, 0x28, 0x28, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, - 0x38, 0x18, 0x00, 0x00, 0x00, 0x38, 0x00, 0x18, 0x28, 0x18, 0x00, 0x00, - 0x00, 0x28, 0x00, 0x18, 0x28, 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x18, - 0x28, 0x18, 0x00, 0x00, 0x00, 0x00, 0x10, 0x18, 0x28, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x20, 0x38, 0x10, 0x00, 0x00, 0x38, 0x00, 0x18, - 0x38, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x18, 0x38, 0x18, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x18, 0x38, 0x18, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, - 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x10, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x30, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x28, 0x10, 0x28, - 0x38, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x38, 0x28, 0x00, 0x00, - 0x00, 0x18, 0x00, 0x38, 0x30, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, - 0x28, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x28, 0x3C, 0x28, 0x2C, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x38, 0x28, 0x38, 0x00, 0x00, 0x00, 0x28, 0x00, 0x38, - 0x28, 0x38, 0x00, 0x00, 0x00, 0x30, 0x00, 0x38, 0x28, 0x38, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x28, 0x28, 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x28, - 0x28, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x28, 0x28, 0x18, 0x30, 0x00, - 0x00, 0x28, 0x00, 0x38, 0x28, 0x38, 0x00, 0x00, 0x00, 0x28, 0x00, 0x28, - 0x28, 0x38, 0x00, 0x00, 0x00, 0x10, 0x38, 0x20, 0x38, 0x10, 0x00, 0x00, - 0x00, 0x18, 0x14, 0x30, 0x10, 0x3C, 0x00, 0x00, 0x00, 0x28, 0x10, 0x38, - 0x38, 0x10, 0x00, 0x00, 0x00, 0x30, 0x28, 0x3C, 0x28, 0x2C, 0x00, 0x00, - 0x00, 0x18, 0x10, 0x38, 0x10, 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, - 0x28, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x10, 0x10, 0x00, 0x00, - 0x00, 0x18, 0x00, 0x38, 0x28, 0x38, 0x00, 0x00, 0x00, 0x18, 0x00, 0x28, - 0x28, 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x28, 0x28, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x28, 0x38, 0x28, 0x00, 0x00, 0x00, 0x18, 0x28, 0x18, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x28, 0x38, 0x00, 0x38, 0x00, 0x00, - 0x00, 0x10, 0x00, 0x10, 0x20, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x20, 0x28, 0x10, 0x38, 0x18, 0x00, 0x00, 0x00, 0x20, 0x28, 0x18, - 0x38, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x10, 0x10, 0x00, 0x00, - 0x00, 0x00, 0x14, 0x28, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x14, - 0x28, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x08, 0x20, 0x08, 0x20, 0x00, - 0x00, 0x14, 0x28, 0x14, 0x28, 0x14, 0x28, 0x00, 0x00, 0x34, 0x1C, 0x34, - 0x1C, 0x34, 0x1C, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, - 0x00, 0x10, 0x10, 0x30, 0x10, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x30, - 0x30, 0x10, 0x10, 0x00, 0x00, 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x30, - 0x30, 0x10, 0x10, 0x00, 0x00, 0x18, 0x18, 0x38, 0x38, 0x18, 0x18, 0x00, - 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x38, - 0x38, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x38, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x18, 0x18, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x30, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x10, 0x10, 0x10, 0x00, - 0x00, 0x10, 0x10, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x3C, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x10, 0x10, 0x10, 0x00, - 0x00, 0x10, 0x10, 0x1C, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x3C, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x3C, 0x10, 0x10, 0x10, 0x00, - 0x00, 0x10, 0x10, 0x1C, 0x1C, 0x10, 0x10, 0x00, 0x00, 0x18, 0x18, 0x1C, - 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x1C, 0x1C, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x3C, - 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x3C, 0x18, 0x18, 0x00, - 0x00, 0x18, 0x18, 0x1C, 0x1C, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x3C, - 0x3C, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, - 0x00, 0x10, 0x10, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x3C, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x3C, 0x10, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x1C, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x1C, 0x1C, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1C, - 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x3C, 0x18, 0x18, 0x18, 0x00, - 0x00, 0x10, 0x10, 0x3C, 0x3C, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x30, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x10, 0x10, 0x10, 0x00, - 0x00, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3C, 0x3C, 0x3C, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, - 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0x00, 0x3C, 0x3C, 0x3C, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x28, 0x34, 0x00, 0x00, - 0x00, 0x30, 0x28, 0x30, 0x28, 0x30, 0x20, 0x00, 0x00, 0x38, 0x28, 0x20, - 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x18, 0x18, 0x00, 0x00, - 0x00, 0x38, 0x20, 0x10, 0x20, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, - 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x30, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x14, 0x28, 0x08, 0x08, 0x00, 0x00, 0x00, 0x38, 0x10, 0x28, - 0x10, 0x38, 0x00, 0x00, 0x00, 0x10, 0x28, 0x38, 0x28, 0x10, 0x00, 0x00, - 0x00, 0x18, 0x24, 0x24, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x18, 0x10, 0x18, - 0x28, 0x38, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x18, 0x3C, 0x18, 0x20, 0x00, 0x00, 0x00, 0x18, 0x20, 0x30, - 0x20, 0x18, 0x00, 0x00, 0x00, 0x10, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x00, 0x00, 0x10, 0x38, 0x10, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x10, 0x08, 0x10, 0x00, 0x38, 0x00, 0x00, - 0x00, 0x10, 0x20, 0x10, 0x00, 0x38, 0x00, 0x00, 0x00, 0x10, 0x28, 0x20, - 0x20, 0x20, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x28, 0x10, 0x00, 0x00, - 0x00, 0x10, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x38, 0x28, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x10, 0x10, 0x30, 0x10, 0x00, 0x00, - 0x00, 0x30, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x10, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; diff --git a/polymer-perf/eduke32/build/src/startgtk.editor.c b/polymer-perf/eduke32/build/src/startgtk.editor.c deleted file mode 100644 index 7de019d23..000000000 --- a/polymer-perf/eduke32/build/src/startgtk.editor.c +++ /dev/null @@ -1,549 +0,0 @@ -#if defined(LINKED_GTK) -#include -#include -#include -#else -#include "dynamicgtk.h" -#endif - -#include "build.h" -#include "editor.h" -#include "baselayer.h" - -enum -{ - TAB_CONFIG, - TAB_MESSAGES, -}; - -static struct -{ - GtkWidget *startwin; - GtkWidget *hlayout; - GtkWidget *banner; - GtkWidget *vlayout; - GtkWidget *tabs; - GtkWidget *configtlayout; - GtkWidget *vmode2dlabel; - GtkWidget *vmode3dlabel; - GtkWidget *vmode2dcombo; - GtkWidget *vmode3dcombo; - GtkWidget *fullscreencheck; - GtkWidget *emptyhlayout; - GtkWidget *alwaysshowcheck; - GtkWidget *configtab; - GtkWidget *messagesscroll; - GtkWidget *messagestext; - GtkWidget *messagestab; - GtkWidget *buttons; - GtkWidget *cancelbutton; - GtkWidget *cancelbuttonalign; - GtkWidget *cancelbuttonlayout; - GtkWidget *cancelbuttonicon; - GtkWidget *cancelbuttonlabel; - GtkWidget *startbutton; - GtkWidget *startbuttonalign; - GtkWidget *startbuttonlayout; - GtkWidget *startbuttonicon; - GtkWidget *startbuttonlabel; - GtkAccelGroup *accel_group; -} stwidgets; - -static struct -{ - int32_t fullscreen; - int32_t xdim2d, ydim2d; - int32_t xdim3d, ydim3d, bpp3d; - int32_t forcesetup; -} settings; - -static int32_t retval = -1, mode = TAB_MESSAGES; -extern int32_t gtkenabled; -static void PopulateForm(void); - -// -- EVENT CALLBACKS AND CREATION STUFF -------------------------------------- - -static void on_vmode2dcombo_changed(GtkComboBox *combobox, gpointer user_data) -{ - GtkTreeModel *data; - GtkTreeIter iter; - int32_t val; - UNREFERENCED_PARAMETER(user_data); - if (!gtk_combo_box_get_active_iter(combobox, &iter)) return; - if (!(data = gtk_combo_box_get_model(combobox))) return; - gtk_tree_model_get(data, &iter, 1, &val, -1); - settings.xdim2d = validmode[val].xdim; - settings.ydim2d = validmode[val].ydim; -} - -static void on_vmode3dcombo_changed(GtkComboBox *combobox, gpointer user_data) -{ - GtkTreeModel *data; - GtkTreeIter iter; - int32_t val; - UNREFERENCED_PARAMETER(user_data); - if (!gtk_combo_box_get_active_iter(combobox, &iter)) return; - if (!(data = gtk_combo_box_get_model(combobox))) return; - gtk_tree_model_get(data, &iter, 1, &val, -1); - settings.xdim3d = validmode[val].xdim; - settings.ydim3d = validmode[val].ydim; - settings.bpp3d = validmode[val].bpp; -} - -static void on_fullscreencheck_toggled(GtkToggleButton *togglebutton, gpointer user_data) -{ - UNREFERENCED_PARAMETER(user_data); - settings.fullscreen = (gtk_toggle_button_get_active(togglebutton) == TRUE); - PopulateForm(); -} - -static void on_alwaysshowcheck_toggled(GtkToggleButton *togglebutton, gpointer user_data) -{ - UNREFERENCED_PARAMETER(user_data); - settings.forcesetup = (gtk_toggle_button_get_active(togglebutton) == TRUE); -} - -static void on_cancelbutton_clicked(GtkButton *button, gpointer user_data) -{ - UNREFERENCED_PARAMETER(button); - UNREFERENCED_PARAMETER(user_data); - if (mode == TAB_CONFIG) { retval = 0; gtk_main_quit(); } - else quitevent++; -} - -static void on_startbutton_clicked(GtkButton *button, gpointer user_data) -{ - UNREFERENCED_PARAMETER(button); - UNREFERENCED_PARAMETER(user_data); - retval = 1; - gtk_main_quit(); -} - -static gboolean on_startwin_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) -{ - UNREFERENCED_PARAMETER(widget); - UNREFERENCED_PARAMETER(event); - UNREFERENCED_PARAMETER(user_data); - if (mode == TAB_CONFIG) { retval = 0; gtk_main_quit(); } - else quitevent++; - return TRUE; // FALSE would let the event go through. we want the game to decide when to close -} - -// -- SUPPORT FUNCTIONS ------------------------------------------------------- - -static GdkPixbuf *load_banner(void) -{ - extern const GdkPixdata startbanner_pixdata; - return gdk_pixbuf_from_pixdata(&startbanner_pixdata, FALSE, NULL); -} - -static void SetPage(int32_t n) -{ - if (!gtkenabled || !stwidgets.startwin) return; - mode = n; - gtk_notebook_set_current_page(GTK_NOTEBOOK(stwidgets.tabs), n); - - // each control in the config page vertical layout plus the start button should be made (in)sensitive - if (n == TAB_CONFIG) n = TRUE; else n = FALSE; - gtk_widget_set_sensitive(stwidgets.startbutton, n); - gtk_container_foreach(GTK_CONTAINER(stwidgets.configtlayout), - (GtkCallback)gtk_widget_set_sensitive, - (gpointer)&n); -} - -static void PopulateForm(void) -{ - int32_t mode2d, mode3d, i; - GtkListStore *modes2d, *modes3d; - GtkTreeIter iter; - GtkComboBox *box2d, *box3d; - char buf[64]; - - mode2d = checkvideomode(&settings.xdim2d, &settings.ydim2d, 8, settings.fullscreen, 1); - mode3d = checkvideomode(&settings.xdim3d, &settings.ydim3d, settings.bpp3d, settings.fullscreen, 1); - if (mode2d < 0) mode2d = 0; - if (mode3d < 0) - { - int32_t i, cd[] = { 32, 24, 16, 15, 8, 0 }; - for (i=0; cd[i];) { if (cd[i] >= settings.bpp3d) i++; else break; } - for (; cd[i]; i++) - { - mode3d = checkvideomode(&settings.xdim3d, &settings.ydim3d, cd[i], settings.fullscreen, 1); - if (mode3d < 0) continue; - settings.bpp3d = cd[i]; - break; - } - } - - box2d = GTK_COMBO_BOX(stwidgets.vmode2dcombo); - box3d = GTK_COMBO_BOX(stwidgets.vmode3dcombo); - modes2d = GTK_LIST_STORE(gtk_combo_box_get_model(box2d)); - modes3d = GTK_LIST_STORE(gtk_combo_box_get_model(box3d)); - gtk_list_store_clear(modes2d); - gtk_list_store_clear(modes3d); - - for (i=0; i aptr) - gtk_text_buffer_insert(textbuffer, &enditer, (const gchar *)aptr, (gint)(bptr-aptr)-1); -#if GTK_CHECK_VERSION(2,6,0) - gtk_text_buffer_backspace(textbuffer, &enditer, FALSE, TRUE); -#else - { - GtkTextIter iter2 = enditer; - gtk_text_iter_backward_cursor_position(&iter2); - //FIXME: this seems be deleting one too many chars somewhere! - if (!gtk_text_iter_equal(&iter2, &enditer)) - gtk_text_buffer_delete_interactive(textbuffer, &iter2, &enditer, TRUE); - } -#endif - aptr = ++bptr; - break; - case 0: - if (bptr > aptr) - gtk_text_buffer_insert(textbuffer, &enditer, (const gchar *)aptr, (gint)(bptr-aptr)); - aptr = bptr; - break; - case '\r': // FIXME - default: - bptr++; - break; - } - } - - mark = gtk_text_buffer_create_mark(textbuffer, NULL, &enditer, 1); - gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(textview), mark, 0.0, FALSE, 0.0, 1.0); - gtk_text_buffer_delete_mark(textbuffer, mark); - - return 0; -} - -int32_t startwin_settitle(const char *title) -{ - if (!gtkenabled) return 0; - if (!stwidgets.startwin) return 1; - gtk_window_set_title(GTK_WINDOW(stwidgets.startwin), title); - return 0; -} - -int32_t startwin_idle(void *s) -{ - UNREFERENCED_PARAMETER(s); - if (!gtkenabled) return 0; - //if (!stwidgets.startwin) return 1; - gtk_main_iteration_do(FALSE); - return 0; -} - -int32_t startwin_run(void) -{ - if (!gtkenabled) return 1; - if (!stwidgets.startwin) return 1; - - SetPage(TAB_CONFIG); - - settings.fullscreen = fullscreen; - settings.xdim2d = xdim2d; - settings.ydim2d = ydim2d; - settings.xdim3d = xdimgame; - settings.ydim3d = ydimgame; - settings.bpp3d = bppgame; - settings.forcesetup = forcesetup; - PopulateForm(); - - gtk_main(); - - SetPage(TAB_MESSAGES); - if (retval) - { - fullscreen = settings.fullscreen; - xdim2d = settings.xdim2d; - ydim2d = settings.ydim2d; - xdimgame = settings.xdim3d; - ydimgame = settings.ydim3d; - bppgame = settings.bpp3d; - forcesetup = settings.forcesetup; - } - - return retval; -} diff --git a/polymer-perf/eduke32/build/src/startwin.editor.c b/polymer-perf/eduke32/build/src/startwin.editor.c deleted file mode 100644 index 7067718a7..000000000 --- a/polymer-perf/eduke32/build/src/startwin.editor.c +++ /dev/null @@ -1,491 +0,0 @@ -#ifndef RENDERTYPEWIN -#error Only for Windows -#endif - -#include "compat.h" -#include "build.h" -#include "editor.h" -#include "winlayer.h" - -#define WIN32_LEAN_AND_MEAN -#include -#include -#ifndef _WIN32_IE -#define _WIN32_IE 0x0300 -#endif -#include -#include - -#include "startwin.editor.h" - -#define TAB_CONFIG 0 -#define TAB_MESSAGES 1 - -static struct -{ - int32_t fullscreen; - int32_t xdim2d, ydim2d; - int32_t xdim3d, ydim3d, bpp3d; - int32_t forcesetup; -} settings; - -static HWND startupdlg = NULL; -static HWND pages[2] = { NULL, NULL}; -static int32_t done = -1, mode = TAB_CONFIG; - -static void PopulateForm(void) -{ - int32_t i,j; - char buf[64]; - int32_t mode2d, mode3d; - HWND hwnd2d, hwnd3d; - - hwnd2d = GetDlgItem(pages[TAB_CONFIG], IDC2DVMODE); - hwnd3d = GetDlgItem(pages[TAB_CONFIG], IDC3DVMODE); - - mode2d = checkvideomode(&settings.xdim2d, &settings.ydim2d, 8, settings.fullscreen, 1); - mode3d = checkvideomode(&settings.xdim3d, &settings.ydim3d, settings.bpp3d, settings.fullscreen, 1); - if (mode2d < 0) mode2d = 0; - if (mode3d < 0) - { - int32_t cd[] = { 32, 24, 16, 15, 8, 0 }; - for (i=0; cd[i];) { if (cd[i] >= settings.bpp3d) i++; else break; } - for (; cd[i]; i++) - { - mode3d = checkvideomode(&settings.xdim3d, &settings.ydim3d, cd[i], settings.fullscreen, 1); - if (mode3d < 0) continue; - settings.bpp3d = cd[i]; - break; - } - } - - Button_SetCheck(GetDlgItem(pages[TAB_CONFIG], IDCFULLSCREEN), (settings.fullscreen ? BST_CHECKED : BST_UNCHECKED)); - Button_SetCheck(GetDlgItem(pages[TAB_CONFIG], IDCALWAYSSHOW), (settings.forcesetup ? BST_CHECKED : BST_UNCHECKED)); - - (void)ComboBox_ResetContent(hwnd2d); - (void)ComboBox_ResetContent(hwnd3d); - for (i=0; iidFrom != WIN_STARTWIN_TABCTL) break; - cur = (int32_t)SendMessage(nmhdr->hwndFrom, TCM_GETCURSEL,0,0); - switch (nmhdr->code) - { - case TCN_SELCHANGING: - { - if (cur < 0 || !pages[cur]) break; - ShowWindow(pages[cur],SW_HIDE); - return TRUE; - } - case TCN_SELCHANGE: - { - if (cur < 0 || !pages[cur]) break; - ShowWindow(pages[cur],SW_SHOW); - return TRUE; - } - } - break; - } - - case WM_CLOSE: - if (mode == TAB_CONFIG) done = 0; - else quitevent++; - return TRUE; - - case WM_DESTROY: - if (hbmp) - { - DeleteObject(hbmp); - hbmp = NULL; - } - - if (pages[TAB_CONFIG]) - { - DestroyWindow(pages[TAB_CONFIG]); - pages[TAB_CONFIG] = NULL; - } - - startupdlg = NULL; - return TRUE; - - case WM_COMMAND: - switch (LOWORD(wParam)) - { - case WIN_STARTWIN_CANCEL: - if (mode == TAB_CONFIG) done = 0; - else quitevent++; - return TRUE; - case WIN_STARTWIN_START: - done = 1; return TRUE; - } - return FALSE; - - case WM_CTLCOLORSTATIC: - if ((HWND)lParam == pages[TAB_MESSAGES]) - return (BOOL)GetSysColorBrush(COLOR_WINDOW); - break; - - default: - break; - } - - return FALSE; -} - - -int32_t startwin_open(void) -{ - INITCOMMONCONTROLSEX icc; - if (startupdlg) return 1; - icc.dwSize = sizeof(icc); - icc.dwICC = ICC_TAB_CLASSES; - InitCommonControlsEx(&icc); - startupdlg = CreateDialog((HINSTANCE)win_gethinstance(), MAKEINTRESOURCE(WIN_STARTWIN), NULL, startup_dlgproc); - if (startupdlg) - { - SetPage(TAB_MESSAGES); - EnableConfig(0); - return 0; - } - return -1; -} - -int32_t startwin_close(void) -{ - if (!startupdlg) return 1; - DestroyWindow(startupdlg); - startupdlg = NULL; - return 0; -} - -int32_t startwin_puts(const char *buf) -{ - const char *p = NULL, *q = NULL; - static char workbuf[1024]; - static int32_t newline = 0; - int32_t curlen, linesbefore, linesafter; - HWND edctl; - int32_t vis; - static HWND dactrl = NULL; - - if (!startupdlg) return 1; - - edctl = pages[TAB_MESSAGES]; - if (!edctl) return -1; - - if (!dactrl) dactrl = GetDlgItem(startupdlg, WIN_STARTWIN_TABCTL); - - vis = ((int32_t)SendMessage(dactrl, TCM_GETCURSEL,0,0) == TAB_MESSAGES); - - if (vis) SendMessage(edctl, WM_SETREDRAW, FALSE,0); - curlen = SendMessage(edctl, WM_GETTEXTLENGTH, 0,0); - SendMessage(edctl, EM_SETSEL, (WPARAM)curlen, (LPARAM)curlen); - linesbefore = SendMessage(edctl, EM_GETLINECOUNT, 0,0); - p = buf; - while (*p) - { - if (newline) - { - SendMessage(edctl, EM_REPLACESEL, 0, (LPARAM)"\r\n"); - newline = 0; - } - q = p; - while (*q && *q != '\n') q++; - Bmemcpy(workbuf, p, q-p); - if (*q == '\n') - { - if (!q[1]) - { - newline = 1; - workbuf[q-p] = 0; - } - else - { - workbuf[q-p] = '\r'; - workbuf[q-p+1] = '\n'; - workbuf[q-p+2] = 0; - } - p = q+1; - } - else - { - workbuf[q-p] = 0; - p = q; - } - SendMessage(edctl, EM_REPLACESEL, 0, (LPARAM)workbuf); - } - linesafter = SendMessage(edctl, EM_GETLINECOUNT, 0,0); - SendMessage(edctl, EM_LINESCROLL, 0, linesafter-linesbefore); - if (vis) SendMessage(edctl, WM_SETREDRAW, TRUE,0); - return 0; -} - -int32_t startwin_settitle(const char *str) -{ - if (!startupdlg) return 1; - SetWindowText(startupdlg, str); - return 0; -} - -int32_t startwin_idle(void *v) -{ - if (!startupdlg || !IsWindow(startupdlg)) return 0; - if (IsDialogMessage(startupdlg, (MSG *)v)) return 1; - return 0; -} - -int32_t startwin_run(void) -{ - MSG msg; - if (!startupdlg) return 1; - - done = -1; - - SetPage(TAB_CONFIG); - EnableConfig(1); - - settings.fullscreen = fullscreen; - settings.xdim2d = xdim2d; - settings.ydim2d = ydim2d; - settings.xdim3d = xdimgame; - settings.ydim3d = ydimgame; - settings.bpp3d = bppgame; - settings.forcesetup = forcesetup; - PopulateForm(); - - while (done < 0) - { - switch (GetMessage(&msg, NULL, 0,0)) - { - case 0: - done = 1; break; - case -1: - return -1; - default: - if (IsWindow(startupdlg) && IsDialogMessage(startupdlg, &msg)) break; - TranslateMessage(&msg); - DispatchMessage(&msg); - break; - } - } - - SetPage(TAB_MESSAGES); - EnableConfig(0); - if (done) - { - fullscreen = settings.fullscreen; - xdim2d = settings.xdim2d; - ydim2d = settings.ydim2d; - xdimgame = settings.xdim3d; - ydimgame = settings.ydim3d; - bppgame = settings.bpp3d; - forcesetup = settings.forcesetup; - } - - return done; -} - diff --git a/polymer-perf/eduke32/build/src/textfont.c b/polymer-perf/eduke32/build/src/textfont.c deleted file mode 100644 index 8e2027f40..000000000 --- a/polymer-perf/eduke32/build/src/textfont.c +++ /dev/null @@ -1,261 +0,0 @@ -// TEXTFONT.C - -char textfont[2048] = -{ - 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, // . - 0x7E, 0x81, 0xA5, 0x81, 0xBD, 0x81, 0x7E, 0x00, // . - 0x7E, 0xFF, 0xDB, 0xFF, 0xC3, 0xFF, 0x7E, 0x00, // . - 0x36, 0x7F, 0x7F, 0x7F, 0x3E, 0x1C, 0x08, 0x00, // . - 0x08, 0x1C, 0x3E, 0x7F, 0x3E, 0x1C, 0x08, 0x00, // . - 0x1C, 0x1C, 0x08, 0x6B, 0x7F, 0x6B, 0x08, 0x1C, // . - 0x08, 0x1C, 0x3E, 0x7F, 0x3E, 0x08, 0x1C, 0x3E, // . - 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00, // . - 0xFF, 0xFF, 0xE7, 0xC3, 0xC3, 0xE7, 0xFF, 0xFF, // . - 0x00, 0x3C, 0x66, 0x42, 0x42, 0x66, 0x3C, 0x00, // . - 0xFF, 0xC3, 0x99, 0xBD, 0xBD, 0x99, 0xC3, 0xFF, // . - 0x0F, 0x07, 0x0D, 0x3C, 0x66, 0x66, 0x66, 0x3C, // . - 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, // . - 0x30, 0x38, 0x3C, 0x36, 0x34, 0x70, 0xF0, 0xE0, // . - 0x7F, 0x63, 0x7F, 0x63, 0x63, 0x67, 0xE6, 0xC0, // . - 0x18, 0xDB, 0x7E, 0x66, 0x66, 0x7E, 0xDB, 0x18, // . - 0x40, 0x70, 0x7C, 0x7F, 0x7C, 0x70, 0x40, 0x00, // . - 0x01, 0x07, 0x1F, 0x7F, 0x1F, 0x07, 0x01, 0x00, // . - 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x7E, 0x3C, 0x18, // . - 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00, // . - 0x3F, 0x7A, 0x7A, 0x3A, 0x0A, 0x0A, 0x0A, 0x00, // . - 0x1E, 0x33, 0x1C, 0x36, 0x36, 0x1C, 0x66, 0x3C, // . - 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x00, // . - 0x18, 0x3C, 0x7E, 0x18, 0x7E, 0x3C, 0x18, 0x7E, // . - 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x00, // . - 0x18, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00, // . - 0x00, 0x0C, 0x0E, 0x7F, 0x0E, 0x0C, 0x00, 0x00, // . - 0x00, 0x18, 0x38, 0x7F, 0x38, 0x18, 0x00, 0x00, // . - 0x00, 0x00, 0x60, 0x60, 0x60, 0x7F, 0x00, 0x00, // . - 0x00, 0x24, 0x66, 0xFF, 0x66, 0x24, 0x00, 0x00, // . - 0x00, 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x00, 0x00, // . - 0x00, 0xFF, 0xFF, 0x7E, 0x3C, 0x18, 0x00, 0x00, // - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ! - 0x06, 0x0E, 0x0C, 0x18, 0x10, 0x00, 0x20, 0x00, // " - 0x6C, 0x6C, 0x24, 0x48, 0x00, 0x00, 0x00, 0x00, // # - 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, // $ - 0x10, 0x7C, 0xD0, 0x7C, 0x16, 0x7C, 0x10, 0x00, // % - 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00, // & - 0x38, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0x76, 0x00, // ' - 0x18, 0x18, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, // ( - 0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, // ) - 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00, // * - 0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, // + - 0x00, 0x18, 0x18, 0x7E, 0x7E, 0x18, 0x18, 0x00, // , - 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x08, 0x10, // - - 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, // . - 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, // / - 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80, // 0 - 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, // 1 - 0x0C, 0x1C, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, // 2 - 0x3C, 0x66, 0x06, 0x1C, 0x30, 0x60, 0x7E, 0x00, // 3 - 0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C, 0x00, // 4 - 0x1C, 0x3C, 0x6C, 0xCC, 0xFF, 0x0C, 0x0C, 0x00, // 5 - 0x7E, 0x60, 0x60, 0x7C, 0x06, 0x66, 0x3C, 0x00, // 6 - 0x3C, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x3C, 0x00, // 7 - 0x7E, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x00, // 8 - 0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00, // 9 - 0x3C, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x3C, 0x00, // : - 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x00, 0x00, // ; - 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x08, 0x10, // < - 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x00, // = - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, // > - 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x00, // ? - 0x3C, 0x66, 0x06, 0x0C, 0x18, 0x00, 0x18, 0x00, // @ - 0x3C, 0x66, 0x6E, 0x6E, 0x6C, 0x60, 0x3C, 0x00, // A - 0x1C, 0x36, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x00, // B - 0x1C, 0x36, 0x66, 0x7C, 0x66, 0x66, 0x7C, 0x00, // C - 0x1C, 0x36, 0x60, 0x60, 0x60, 0x66, 0x3C, 0x00, // D - 0x78, 0x6C, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00, // E - 0x1E, 0x30, 0x60, 0x7C, 0x60, 0x60, 0x7E, 0x00, // F - 0x1E, 0x30, 0x60, 0x7C, 0x60, 0x60, 0x60, 0x00, // G - 0x1C, 0x36, 0x60, 0x6E, 0x66, 0x66, 0x3C, 0x00, // H - 0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, // I - 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, // J - 0x06, 0x06, 0x06, 0x06, 0x66, 0x6C, 0x38, 0x00, // K - 0x66, 0x6C, 0x78, 0x70, 0x78, 0x6C, 0x66, 0x00, // L - 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x3E, 0x00, // M - 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00, // N - 0x26, 0x76, 0x7E, 0x6E, 0x66, 0x66, 0x66, 0x00, // O - 0x1C, 0x36, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, // P - 0x1C, 0x36, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x00, // Q - 0x1C, 0x36, 0x66, 0x66, 0x66, 0x6E, 0x3C, 0x06, // R - 0x1C, 0x36, 0x66, 0x7C, 0x66, 0x66, 0x66, 0x00, // S - 0x3C, 0x66, 0x60, 0x3C, 0x06, 0x66, 0x3C, 0x00, // T - 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, // U - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, // V - 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, // W - 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00, // X - 0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00, // Y - 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00, // Z - 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x7E, 0x00, // [ - 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00, // - 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, // ] - 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00, // ^ - 0x18, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, // _ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, // ` - 0x18, 0x18, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, // a - 0x00, 0x00, 0x3C, 0x6C, 0x6C, 0x6C, 0x36, 0x00, // b - 0x30, 0x30, 0x3C, 0x36, 0x36, 0x36, 0x5C, 0x00, // c - 0x00, 0x00, 0x38, 0x64, 0x60, 0x64, 0x38, 0x00, // d - 0x0C, 0x0C, 0x3C, 0x6C, 0x6C, 0x6C, 0x36, 0x00, // e - 0x00, 0x00, 0x38, 0x64, 0x7C, 0x60, 0x38, 0x00, // f - 0x18, 0x34, 0x30, 0x7C, 0x30, 0x30, 0x30, 0x00, // g - 0x00, 0x00, 0x3C, 0x68, 0x38, 0x7C, 0x4C, 0x38, // h - 0x60, 0x60, 0x78, 0x6C, 0x6C, 0x6C, 0x6C, 0x00, // i - 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x00, // j - 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x58, 0x30, // k - 0x60, 0x60, 0x66, 0x6C, 0x78, 0x6C, 0x66, 0x00, // l - 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x00, // m - 0x00, 0x00, 0xEC, 0xD6, 0xD6, 0xD6, 0xC6, 0x00, // n - 0x00, 0x00, 0xB8, 0x6C, 0x6C, 0x6C, 0x6C, 0x00, // o - 0x00, 0x00, 0x38, 0x6C, 0x6C, 0x6C, 0x38, 0x00, // p - 0x00, 0x00, 0x5C, 0x36, 0x36, 0x3C, 0x30, 0x30, // q - 0x00, 0x00, 0x3A, 0x6C, 0x6C, 0x3C, 0x0C, 0x0E, // r - 0x00, 0x00, 0x5C, 0x3A, 0x30, 0x30, 0x30, 0x00, // s - 0x00, 0x00, 0x38, 0x60, 0x38, 0x0C, 0x78, 0x00, // t - 0x30, 0x30, 0x7C, 0x30, 0x30, 0x34, 0x18, 0x00, // u - 0x00, 0x00, 0x6C, 0x6C, 0x6C, 0x6C, 0x36, 0x00, // v - 0x00, 0x00, 0x6C, 0x6C, 0x6C, 0x38, 0x10, 0x00, // w - 0x00, 0x00, 0xC6, 0xC6, 0xD6, 0xD6, 0x6C, 0x00, // x - 0x00, 0x00, 0x62, 0x34, 0x18, 0x1C, 0x66, 0x00, // y - 0x00, 0x00, 0x6C, 0x6C, 0x6C, 0x3E, 0x2C, 0x38, // z - 0x00, 0x00, 0x7C, 0x0C, 0x18, 0x30, 0x7C, 0x00, // { - 0x1C, 0x30, 0x30, 0x60, 0x30, 0x30, 0x1C, 0x00, // | - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, // } - 0x38, 0x0C, 0x0C, 0x06, 0x0C, 0x0C, 0x38, 0x00, // ~ - 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // . - 0x00, 0x00, 0x18, 0x3C, 0x66, 0x66, 0x7E, 0x00, // . - 0x3F, 0x61, 0x63, 0xF8, 0x60, 0xF9, 0x61, 0x3F, // . - 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, // . - 0x0E, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, // . - 0x3C, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, // . - 0x66, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, // . - 0x70, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, // . - 0x1C, 0x1C, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, // . - 0x00, 0x00, 0x3E, 0x60, 0x60, 0x3E, 0x18, 0x30, // . - 0x3C, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, // . - 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, // . - 0x70, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, // . - 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, // . - 0x3C, 0x66, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, // . - 0x70, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, // . - 0xC6, 0x38, 0x6C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, // . - 0x1C, 0x1C, 0x00, 0x3C, 0x66, 0x7E, 0x66, 0x00, // . - 0x0C, 0x18, 0x7C, 0x60, 0x78, 0x60, 0x7C, 0x00, // . - 0x00, 0x00, 0x7E, 0x1A, 0x7E, 0xD8, 0x7E, 0x00, // . - 0x3E, 0x78, 0xD8, 0xDE, 0xF8, 0xD8, 0xDE, 0x00, // . - 0x3C, 0x66, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, // . - 0x66, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, // . - 0x70, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, // . - 0x3C, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, // . - 0x70, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, // . - 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x06, 0x3C, // . - 0x66, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, // . - 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, // . - 0x0C, 0x0C, 0x3E, 0x60, 0x60, 0x3E, 0x0C, 0x0C, // . - 0x38, 0x6C, 0x60, 0xF0, 0x60, 0x66, 0xFC, 0x00, // . - 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, 0x7E, 0x18, // . - 0x7C, 0x66, 0x66, 0x7C, 0x66, 0x6F, 0x66, 0x63, // . - 0x0E, 0x1B, 0x18, 0x3C, 0x18, 0x18, 0x78, 0x30, // . - 0x0E, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, // . - 0x0E, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, // . - 0x0E, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, // . - 0x0E, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, // . - 0x3B, 0x6E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00, // . - 0x3B, 0x6E, 0x00, 0x66, 0x76, 0x7E, 0x6E, 0x66, // . - 0x3E, 0x66, 0x66, 0x3E, 0x00, 0x7E, 0x00, 0x00, // . - 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x7E, 0x00, 0x00, // . - 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00, // . - 0x00, 0x00, 0x00, 0x7E, 0x60, 0x60, 0x00, 0x00, // . - 0x00, 0x00, 0x00, 0x7E, 0x06, 0x06, 0x00, 0x00, // . - 0xC6, 0xCC, 0xD8, 0x3E, 0x63, 0xC6, 0x0C, 0x1F, // . - 0xC6, 0xCC, 0xD8, 0x36, 0x6E, 0xD6, 0x1F, 0x06, // . - 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, // . - 0x00, 0x36, 0x6C, 0xD8, 0x6C, 0x36, 0x00, 0x00, // . - 0x00, 0xD8, 0x6C, 0x36, 0x6C, 0xD8, 0x00, 0x00, // . - 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, // . - 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, // . - 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, // . - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, // . - 0x08, 0x08, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x08, // . - 0x08, 0x08, 0x08, 0xF8, 0xF8, 0x08, 0x08, 0x08, // . - 0x1C, 0x1C, 0x1C, 0x1C, 0xFC, 0x1C, 0x1C, 0x1C, // . - 0x00, 0x00, 0x00, 0x00, 0xFC, 0x1C, 0x1C, 0x1C, // . - 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x08, 0x08, 0x08, // . - 0x1C, 0x1C, 0x1C, 0xFC, 0xFC, 0x1C, 0x1C, 0x1C, // . - 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, // . - 0x00, 0x00, 0x00, 0xFC, 0xFC, 0x1C, 0x1C, 0x1C, // . - 0x1C, 0x1C, 0x1C, 0xFC, 0xFC, 0x00, 0x00, 0x00, // . - 0x1C, 0x1C, 0x1C, 0x1C, 0xFC, 0x00, 0x00, 0x00, // . - 0x08, 0x08, 0x08, 0xF8, 0xF8, 0x00, 0x00, 0x00, // . - 0x00, 0x00, 0x00, 0x00, 0xF8, 0x08, 0x08, 0x08, // . - 0x08, 0x08, 0x08, 0x08, 0x0F, 0x00, 0x00, 0x00, // . - 0x08, 0x08, 0x08, 0x08, 0xFF, 0x00, 0x00, 0x00, // . - 0x00, 0x00, 0x00, 0x00, 0xFF, 0x08, 0x08, 0x08, // . - 0x08, 0x08, 0x08, 0x08, 0x0F, 0x08, 0x08, 0x08, // . - 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, // . - 0x08, 0x08, 0x08, 0x08, 0xFF, 0x08, 0x08, 0x08, // . - 0x08, 0x08, 0x08, 0x0F, 0x0F, 0x08, 0x08, 0x08, // . - 0x1C, 0x1C, 0x1C, 0x1C, 0x1F, 0x1C, 0x1C, 0x1C, // . - 0x1C, 0x1C, 0x1C, 0x1F, 0x1F, 0x00, 0x00, 0x00, // . - 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1C, 0x1C, 0x1C, // . - 0x1C, 0x1C, 0x1C, 0xFF, 0xFF, 0x00, 0x00, 0x00, // . - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x1C, 0x1C, 0x1C, // . - 0x1C, 0x1C, 0x1C, 0x1F, 0x1F, 0x1C, 0x1C, 0x1C, // . - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, // . - 0x1C, 0x1C, 0x1C, 0xFF, 0xFF, 0x1C, 0x1C, 0x1C, // . - 0x08, 0x08, 0x08, 0xFF, 0xFF, 0x00, 0x00, 0x00, // . - 0x1C, 0x1C, 0x1C, 0x1C, 0xFF, 0x00, 0x00, 0x00, // . - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x08, 0x08, 0x08, // . - 0x00, 0x00, 0x00, 0x00, 0xFF, 0x1C, 0x1C, 0x1C, // . - 0x1C, 0x1C, 0x1C, 0x1C, 0x1F, 0x00, 0x00, 0x00, // . - 0x08, 0x08, 0x08, 0x0F, 0x0F, 0x00, 0x00, 0x00, // . - 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x08, 0x08, 0x08, // . - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1C, 0x1C, 0x1C, // . - 0x1C, 0x1C, 0x1C, 0x1C, 0xFF, 0x1C, 0x1C, 0x1C, // . - 0x08, 0x08, 0x08, 0xFF, 0xFF, 0x08, 0x08, 0x08, // . - 0x08, 0x08, 0x08, 0x08, 0xF8, 0x00, 0x00, 0x00, // . - 0x00, 0x00, 0x00, 0x00, 0x0F, 0x08, 0x08, 0x08, // . - 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, // . - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, // . - 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, // . - 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, // . - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, // . - 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0x76, 0x00, // . - 0x3C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C, 0x60, // . - 0x7E, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, // . - 0x00, 0x00, 0xFE, 0x6C, 0x6C, 0x6C, 0x66, 0x00, // . - 0x7E, 0x66, 0x30, 0x18, 0x30, 0x66, 0x7E, 0x00, // . - 0x00, 0x00, 0x3E, 0x6C, 0x6C, 0x6C, 0x38, 0x00, // . - 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7F, 0xC0, // . - 0x00, 0x00, 0x7E, 0xD8, 0x18, 0x18, 0x0C, 0x00, // . - 0x7C, 0x38, 0x7C, 0xD6, 0xD6, 0x7C, 0x38, 0x7C, // . - 0x7C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x7C, 0x00, // . - 0x7C, 0xC6, 0xC6, 0xC6, 0x6C, 0x6C, 0xEE, 0x00, // . - 0x1E, 0x30, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x00, // . - 0x00, 0x00, 0x7E, 0xDB, 0xDB, 0x7E, 0x00, 0x00, // . - 0x03, 0x06, 0x3E, 0x6B, 0x73, 0x3E, 0x60, 0xC0, // . - 0x1E, 0x30, 0x60, 0x7E, 0x60, 0x30, 0x1E, 0x00, // . - 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, // . - 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, // . - 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x7E, 0x00, // . - 0x30, 0x18, 0x0C, 0x18, 0x30, 0x00, 0x7E, 0x00, // . - 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x00, 0x7E, 0x00, // . - 0x0E, 0x1B, 0x1B, 0x18, 0x18, 0x18, 0x18, 0x18, // . - 0x18, 0x18, 0x18, 0x18, 0x18, 0xD8, 0xD8, 0x70, // . - 0x18, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x18, 0x00, // . - 0x00, 0x76, 0xDC, 0x00, 0x76, 0xDC, 0x00, 0x00, // . - 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, // . - 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, // . - 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // . - 0x1E, 0x18, 0x18, 0x18, 0x18, 0xD8, 0x78, 0x38, // . - 0x78, 0x6C, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, // . - 0x38, 0x0C, 0x18, 0x30, 0x3C, 0x00, 0x00, 0x00, // . - 0x00, 0x00, 0x3C, 0x3C, 0x3C, 0x3C, 0x00, 0x00, // . - 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00 -}; diff --git a/polymer-perf/eduke32/build/src/tmp/keep.me b/polymer-perf/eduke32/build/src/tmp/keep.me deleted file mode 100644 index e69de29bb..000000000 diff --git a/polymer-perf/eduke32/build/src/util/ase_import.py b/polymer-perf/eduke32/build/src/util/ase_import.py deleted file mode 100755 index f97e0ce78..000000000 --- a/polymer-perf/eduke32/build/src/util/ase_import.py +++ /dev/null @@ -1,452 +0,0 @@ -#!BPY - -""" -Name: 'ASCII Scene (.ase) v0.16' -Blender: 249 -Group: 'Import' -Tooltip: 'ASCII Scene import (*.ase)' -""" -__author__ = "Goofos & Plagman" -__version__ = "0.16" - -# goofos at epruegel.de -# -# ***** BEGIN GPL LICENSE BLOCK ***** -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# ***** END GPL LICENCE BLOCK ***** - -import string, time, sys as osSys -import Blender -from Blender import Draw, Mesh, Window, Object, Scene, NMesh, Key, Ipo, IpoCurve -#import meshtools - - -def read_main(filename): - - global counts - counts = {'verts': 0, 'tris': 0} - - start = time.clock() - file = open(filename, "r") - - print_boxed("----------------start-----------------") - print 'Import Patch: ', filename - - editmode = Window.EditMode() # are we in edit mode? If so ... - if editmode: Window.EditMode(0) # leave edit mode before getting the mesh - - lines= file.readlines() - read_file(file, lines) - - Blender.Window.DrawProgressBar(1.0, '') # clear progressbar - file.close() - print "----------------end-----------------" - end = time.clock() - seconds = " in %.2f %s" % (end-start, "seconds") - totals = "Verts: %i Tris: %i " % (counts['verts'], counts['tris']) - print_boxed(totals) - message = "Successfully imported " + Blender.sys.basename(filename) + seconds - #meshtools.print_boxed(message) - print_boxed(message) - - -def print_boxed(text): #Copy/Paste from meshtools, only to remove the beep :) - lines = text.splitlines() - maxlinelen = max(map(len, lines)) - if osSys.platform[:3] == "win": - print chr(218)+chr(196) + chr(196)*maxlinelen + chr(196)+chr(191) - for line in lines: - print chr(179) + ' ' + line.ljust(maxlinelen) + ' ' + chr(179) - print chr(192)+chr(196) + chr(196)*maxlinelen + chr(196)+chr(217) - else: - print '+-' + '-'*maxlinelen + '-+' - for line in lines: print '| ' + line.ljust(maxlinelen) + ' |' - print '+-' + '-'*maxlinelen + '-+' - #print '\a\r', # beep when done - - -class ase_obj: - - def __init__(self): - self.name = 'Name' - self.objType = None - self.row0x = None - self.row0y = None - self.row0z = None - self.row1x = None - self.row1y = None - self.row1z = None - self.row2x = None - self.row2y = None - self.row2z = None - self.row3x = None - self.row3y = None - self.row3z = None - self.parent = None - self.obj = None - self.objName = 'Name' - -class ase_mesh: - - def __init__(self): - self.name = '' - self.vCount = 0 - self.fCount = 0 - self.frames = [] - self.verts = [] - self.faces = [] - self.animated = 0 - self.frameCount = -1 - -class mesh_vert: - - def __init__(self): - self.x = 0.0 - self.y = 0.0 - self.z = 0.0 - self.u = 0.0 - self.v = 0.0 - self.nx = 0.0 - self.ny = 0.0 - self.nz = 0.0 - self.origi = 0 - def make_tuple(self): - return (self.x, self.y, self.z, self.u, self.v, self.nx, self.ny, self.nz) - -class mesh_face: - - def __init__(self): - self.v1 = mesh_vert() - self.v2 = mesh_vert() - self.v3 = mesh_vert() - self.i1 = 0 - self.i2 = 0 - self.i3 = 0 - -def read_file(file, lines): - - objects = [] - objIdx = 0 - objCheck = -1 #needed to skip helper objects - PBidx = 0.0 - lineCount = float(len(lines)) - processed_indices = [] - curFaceID = 0 - faceVertID = 0 - - print 'Read file' - Blender.Window.DrawProgressBar(0.0, "Read File...") - - for line in lines: - words = string.split(line) - - if (PBidx % 10000) == 0.0: - Blender.Window.DrawProgressBar(PBidx / lineCount, "Read File...") - - if not words: - continue - elif objIdx > 0 and me.animated == 1: - # I don't know how to make empty statements, this is to skip everything else - me.animated = me.animated - elif words[0] == '*GEOMOBJECT': - objCheck = 0 - newObj = ase_obj() - objects.append(newObj) - obj = objects[objIdx] - objIdx += 1 - - obj.objType = 'Mesh' - obj.obj = ase_mesh() - me = obj.obj - elif words[0] == '*NODE_NAME' and objCheck != -1: - if objCheck == 0: - obj.name = words[1] - objCheck = 1 - elif objCheck == 1: - obj.objName = words[1] - elif words[0] == '*TM_ROW0' and objCheck != -1: - obj.row0x = float(words[1]) - obj.row0y = float(words[2]) - obj.row0z = float(words[3]) - elif words[0] == '*TM_ROW1' and objCheck != -1: - obj.row1x = float(words[1]) - obj.row1y = float(words[2]) - obj.row1z = float(words[3]) - elif words[0] == '*TM_ROW2' and objCheck != -1: - obj.row2x = float(words[1]) - obj.row2y = float(words[2]) - obj.row2z = float(words[3]) - elif words[0] == '*TM_ROW3' and objCheck != -1: - obj.row3x = float(words[1]) - obj.row3y = float(words[2]) - obj.row3z = float(words[3]) - objCheck = -1 - elif words[0] == '*MESH_NUMVERTEX': - me.vCount = int(words[1]) - for i in range(me.vCount): - me.verts.append(mesh_vert()) - elif words[0] == '*MESH_NUMFACES': - me.fCount = int(words[1]) - for i in range(me.fCount): - me.faces.append(mesh_face()) - elif words[0] == '*MESH_VERTEX': - i = int(words[1]) - me.verts[i].x = float(words[2]); - me.verts[i].y = float(words[3]); - me.verts[i].z = float(words[4]); - elif words[0] == '*MESH_FACE': - i = int(words[1].rstrip(":")) # looks like "13:" - v1 = int(words[3]); - v2 = int(words[5]); - v3 = int(words[7]); - me.faces[i].v1.x = me.verts[v1].x; - me.faces[i].v1.y = me.verts[v1].y; - me.faces[i].v1.z = me.verts[v1].z; - me.faces[i].v1.origi = v1 - - me.faces[i].v2.x = me.verts[v2].x; - me.faces[i].v2.y = me.verts[v2].y; - me.faces[i].v2.z = me.verts[v2].z; - me.faces[i].v2.origi = v2 - - me.faces[i].v3.x = me.verts[v3].x; - me.faces[i].v3.y = me.verts[v3].y; - me.faces[i].v3.z = me.verts[v3].z; - me.faces[i].v3.origi = v3 - elif words[0] == '*MESH_NUMTVERTEX': - del me.verts[:] - uvCount = int(words[1]) - for i in range(uvCount): - me.verts.append(mesh_vert()) - elif words[0] == '*MESH_TVERT': - i = int(words[1]) - me.verts[i].u = float(words[2]); - me.verts[i].v = float(words[3]); - elif words[0] == '*MESH_TFACE': - i = int(words[1]) - uv1 = int(words[2]); - uv2 = int(words[3]); - uv3 = int(words[4]); - - me.faces[i].v1.u = me.verts[uv1].u; - me.faces[i].v1.v = me.verts[uv1].v; - - me.faces[i].v2.u = me.verts[uv2].u; - me.faces[i].v2.v = me.verts[uv2].v; - - me.faces[i].v3.u = me.verts[uv3].u; - me.faces[i].v3.v = me.verts[uv3].v; - elif words[0] == '*MESH_FACENORMAL': - curFaceID = int(words[1]) # global, vertexnormal needs this - faceVertID = 0 # same - elif words[0] == '*MESH_VERTEXNORMAL': - nx = float(words[2]) - ny = float(words[3]) - nz = float(words[4]) - - if (faceVertID == 0): - me.faces[curFaceID].v1.nx = nx; - me.faces[curFaceID].v1.ny = ny; - me.faces[curFaceID].v1.nz = nz; - elif (faceVertID == 1): - me.faces[curFaceID].v2.nx = nx; - me.faces[curFaceID].v2.ny = ny; - me.faces[curFaceID].v2.nz = nz; - elif (faceVertID == 2): - me.faces[curFaceID].v3.nx = nx; - me.faces[curFaceID].v3.ny = ny; - me.faces[curFaceID].v3.nz = nz; - - faceVertID = faceVertID + 1; - elif words[0] == '*MESH_ANIMATION': - me.animated = 1 - - # now the loop for animation frames - if objIdx > 0 and me.animated == 1: - if words[0] == '*MESH_VERTEX_LIST': - me.frameCount += 1 - me.frames.append([]) - elif words[0] == '*MESH_VERTEX': - me.frames[me.frameCount].append(mesh_vert()) - i = int(words[1]) - me.frames[me.frameCount][i].x = float(words[2]); - me.frames[me.frameCount][i].y = float(words[3]); - me.frames[me.frameCount][i].z = float(words[4]); - - PBidx += 1.0 - - spawn_main(objects) - - Blender.Redraw() - -def spawn_main(objects): - - PBidx = 0.0 - objCount = float(len(objects)) - - print 'Import Objects' - Blender.Window.DrawProgressBar(0.0, "Importing Objects...") - - for obj in objects: - - Blender.Window.DrawProgressBar(PBidx / objCount, "Importing Objects...") - - if obj.objType == 'Mesh': - spawn_mesh(obj) - - PBidx += 1.0 - -import random - -def spawn_mesh(obj): - - objMe = obj.obj - #normal_flag = 1 - - row0 = obj.row0x, obj.row0y, obj.row0z - row1 = obj.row1x, obj.row1y, obj.row1z - row2 = obj.row2x, obj.row2y, obj.row2z - row3 = obj.row3x, obj.row3y, obj.row3z - - newMatrix = Blender.Mathutils.Matrix(row0, row1, row2, row3) - newMatrix.resize4x4() - - newObj = Blender.Object.New(obj.objType, obj.name) - newObj.setMatrix(newMatrix) - Blender.Scene.getCurrent().link(newObj) - - - newMesh = Blender.Mesh.New(obj.objName) - newMesh.getFromObject(newObj.name) - - newMesh.vertexUV = 1 - newObj.link(newMesh) - - del objMe.verts[:] - objMe.vCount = 0 - - vertDict = {} - - #for face in objMe.faces: - #objMe.verts.append(face.v1) - #objMe.verts.append(face.v2) - #objMe.verts.append(face.v3) - #face.i1 = objMe.vCount - #objMe.vCount = objMe.vCount + 1 - #face.i2 = objMe.vCount - #objMe.vCount = objMe.vCount + 1 - #face.i3 = objMe.vCount - #objMe.vCount = objMe.vCount + 1 - - for face in objMe.faces: - if not face.v1.make_tuple() in vertDict: - vertDict[face.v1.make_tuple()] = objMe.vCount - objMe.verts.append(face.v1) - objMe.vCount = objMe.vCount + 1 - if not face.v2.make_tuple() in vertDict: - vertDict[face.v2.make_tuple()] = objMe.vCount - objMe.verts.append(face.v2) - objMe.vCount = objMe.vCount + 1 - if not face.v3.make_tuple() in vertDict: - vertDict[face.v3.make_tuple()] = objMe.vCount - objMe.verts.append(face.v3) - objMe.vCount = objMe.vCount + 1 - face.i1 = vertDict[face.v1.make_tuple()] - face.i2 = vertDict[face.v2.make_tuple()] - face.i3 = vertDict[face.v3.make_tuple()] - - # Verts - for i in range(objMe.vCount): - xyz = Blender.Mathutils.Vector(objMe.verts[i].x, objMe.verts[i].y, objMe.verts[i].z) - newMesh.verts.extend(xyz) - - for i in range(objMe.vCount): - xyz = Blender.Mathutils.Vector(objMe.verts[i].x, objMe.verts[i].y, objMe.verts[i].z) - uv = Blender.Mathutils.Vector(objMe.verts[i].u, objMe.verts[i].v) - norm = Blender.Mathutils.Vector(objMe.verts[i].nx, objMe.verts[i].ny, objMe.verts[i].nz) - newMesh.verts[i].co = xyz; - newMesh.verts[i].uvco = uv; - newMesh.verts[i].no = norm; - - if objMe.animated: - objMe.frameCount -= 1 # do we always get an extra frame at the end? - for frame in objMe.frames: - for i in range(objMe.vCount): - xyz = Blender.Mathutils.Vector(frame[objMe.verts[i].origi].x, frame[objMe.verts[i].origi].y, frame[objMe.verts[i].origi].z) - - newMesh.verts[i].co = xyz; - newObj.insertShapeKey() - - for key in Key.Get() : - key.ipo = Ipo.New('Key', "bleh" + "_ipo") - index = 1 - for curveName in key.ipo.curveConsts : - # print curveName - key.ipo.addCurve(curveName) - key.ipo[curveName].interpolation = IpoCurve.InterpTypes.CONST - key.ipo[curveName].addBezier((0, 0)) - key.ipo[curveName].addBezier((index, 1)) - key.ipo[curveName].addBezier((index + 1, 0)) - index+=1 - - # Faces - for i in range(objMe.fCount): - face = [objMe.faces[i].i1, objMe.faces[i].i2, objMe.faces[i].i3] - newMesh.faces.extend(face) - - # UV - #if guiTable['UV'] == 1 and objMe.hasFUV == 1: - #newMesh.faceUV = 1 - #for f in objMe.uvFaces: - #uv1 = Blender.Mathutils.Vector(float(objMe.uvVerts[f.uv1].u), float(objMe.uvVerts[f.uv1].v)) - #uv2 = Blender.Mathutils.Vector(float(objMe.uvVerts[f.uv2].u), float(objMe.uvVerts[f.uv2].v)) - #uv3 = Blender.Mathutils.Vector(float(objMe.uvVerts[f.uv3].u), float(objMe.uvVerts[f.uv3].v)) - #newMesh.faces[f.index].uv = [uv1, uv2, uv3] - ## normals - #vertices = [coords for n, coords in sorted(objMe.normals)] - - #random.seed() - - #i = 0 - #for v in newMesh.verts: - #no = Blender.Mathutils.Vector(vertices[i][0], vertices[i][1], vertices[i][2]) - #v.no = no - #print 'vertice ', i, 'normal : ', v.no - ##v.no[0] = vertices[i][0] - ##v.no[1] = vertices[i][1] - ##v.no[2] = vertices[i][2] - #i = i + 1 - - newMesh.transform((newObj.getMatrix('worldspace').invert()), 1) - - Blender.Set("curframe", objMe.frameCount + 1) - - counts['verts'] += objMe.vCount - counts['tris'] += objMe.fCount - print 'Imported Mesh-Object: ', obj.name - - - -def read_ui(filename): - Window.WaitCursor(1) - - read_main(filename) - - Window.WaitCursor(0) - - -Blender.Window.FileSelector(read_ui, "Import ASE") \ No newline at end of file diff --git a/polymer-perf/eduke32/build/src/util/bin2c.cpp b/polymer-perf/eduke32/build/src/util/bin2c.cpp deleted file mode 100644 index dd4a277c0..000000000 --- a/polymer-perf/eduke32/build/src/util/bin2c.cpp +++ /dev/null @@ -1,151 +0,0 @@ -// BIN2C.CPP -// by Jonathon Fowler (jonof@edgenetwork.org) - -// Converts a binary file to C source -// This is a DOS program originally written with Borland Turbo C++ for DOS 3.1 - - -#include -#include -#include -#include -#include -#include - - -char defsrcext[] = ".DAT"; -char defoutext[] = ".C"; - -char source[MAXPATH], output[MAXPATH], bytesize; - - -int PathAddExt(char *path, char *ext); - - -void main(int argc, char *argv[]) -{ - printf("BIN2C - Binary to C data converter\n" - "Copyright (c) 1999 Jonathon Fowler\n\n"); - - if (argc < 4) - { - printf("Usage:\n" - " BIN2C source<.DAT> output<.C> b|w\n\n" - " source<.DAT> Binary source file\n" - " output<.C> Output C code file\n" - " b|w Byte or word-sized data\n\n"); - exit(0); - } - - int arg; - FILE *in, *out; - char datab1, datab2; - int across=0, maxacross; - int length, written=0; - - - // get the source file - strcpy(source, argv[1]); - strupr(source); - PathAddExt(source, defsrcext); - printf("þ Source file: %s\n", source); - - // get the output file - strcpy(output, argv[2]); - strupr(output); - PathAddExt(output, defoutext); - printf("þ Output file: %s\n", output); - - // get byte/word data - switch (tolower(argv[3][0])) - { - case 'b': - printf("þ Byte data.\n"); - bytesize=1; - break; - - case 'w': - printf("þ Word data.\n"); - bytesize=0; - break; - - default: - printf("þ Unknown data size specified. Defaulting to byte.\n"); - bytesize=1; - break; - } - - // open the input file - in = fopen(source, "rb"); - if (!in) - { - printf("Error opening %s\n", source); - exit(1); - } - - // open the output file - out = fopen(output, "w+t"); - if (!out) - { - printf("Error creating %s\n", output); - exit(1); - } - - length = filelength(fileno(in)); - - // write a header out to the output file - fprintf(out, "// %s\n\n// Generated by BIN2C.EXE\n// By Jonathon Fowler\n\n", output); - - // start a data block - fprintf(out, "%s datablock[] = {\n // %ld bytes", (bytesize) ? "char" : "unsigned", length); - - if (bytesize) - maxacross = 12; - else - maxacross = 9; - across = maxacross; - - // convert the data - for (written=0; written1) ? ',' : '\n'); - } else { - datab1 = fgetc(in); - datab2 = fgetc(in); - fprintf(out, " 0x%02X%02X%c", datab2, datab1, ((length-written)>2) ? ',' : '\n'); - } - - across++; - - if (!bytesize) written++; - } - - - fprintf(out, " };"); - - fclose(out); - fclose(in); -} - - -// Add an extention to a path if one doesn't exist -int PathAddExt(char *path, char *ext) -{ - char drive[MAXDRIVE], dir[MAXDIR], name[MAXFILE], extn[MAXEXT]; - int flags; - - flags = fnsplit(path, drive, dir, name, extn); - - if (!(flags & EXTENSION)) // tack on an extension - strcat(path, ext); - - return ((flags & EXTENSION) == 0); -} diff --git a/polymer-perf/eduke32/build/src/util/cacheinfo.c b/polymer-perf/eduke32/build/src/util/cacheinfo.c deleted file mode 100644 index 251cbe1b1..000000000 --- a/polymer-perf/eduke32/build/src/util/cacheinfo.c +++ /dev/null @@ -1,90 +0,0 @@ -#include -#include -#include -#include -#include "compat.h" - -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 - -typedef struct { - char magic[8]; // 'Polymost' - int xdim, ydim; // of image, unpadded - int flags; // 1 = !2^x, 2 = has alpha, 4 = lzw compressed -} texcacheheader; -typedef struct { - int size; - int format; - int xdim, ydim; // of mipmap (possibly padded) - int border, depth; -} texcachepicture; - -int main(int argc, char **argv) -{ - DIR *dir; - struct dirent *dirent; - struct stat st; - FILE *fp; - texcacheheader head; - texcachepicture mip; - - dir = opendir("."); - while ((dirent = readdir(dir))) { - if (stat(dirent->d_name, &st)) { - printf("%s: failed to stat\n", dirent->d_name); - continue; - } - if (!(st.st_mode&S_IFREG)) { - printf("%s: not a regular file\n", dirent->d_name); - continue; - } - - fp = fopen(dirent->d_name,"rb"); - if (!fp) { - printf("%s: failed to open\n", dirent->d_name); - continue; - } - - if (fread(&head, sizeof(head), 1, fp) != 1) { - fclose(fp); - printf("%s: failed to read header\n", dirent->d_name); - continue; - } - head.xdim = B_LITTLE32(head.xdim); - head.ydim = B_LITTLE32(head.ydim); - head.flags = B_LITTLE32(head.flags); - if (fread(&mip, sizeof(mip), 1, fp) != 1) { - fclose(fp); - printf("%s: failed to read mipmap header\n", dirent->d_name); - continue; - } - mip.format = B_LITTLE32(mip.format); - fclose(fp); - if (memcmp(head.magic, "Polymost", 8)) { - printf("%s: bad signature\n", dirent->d_name); - continue; - } - else { - char *format; - char flags[4] = "", flagsc = 0; - switch (mip.format) { - case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: format = "RGB DXT1"; break; - case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: format = "RGBA DXT1"; break; - case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: format = "RGBA DXT3"; break; - case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: format = "RGBA DXT5"; break; - default: format = "Unknown"; break; - } - if (head.flags&1) flags[flagsc++] = '2'; - if (head.flags&2) flags[flagsc++] = 'A'; - if (head.flags&4) flags[flagsc++] = 'L'; - flags[flagsc++] = 0; - - printf("%s: flags=%s format=%s\n", dirent->d_name, flags, format); - } - } - closedir(dir); - - return 0; -} \ No newline at end of file diff --git a/polymer-perf/eduke32/build/src/util/generateicon.c b/polymer-perf/eduke32/build/src/util/generateicon.c deleted file mode 100644 index 3356dc381..000000000 --- a/polymer-perf/eduke32/build/src/util/generateicon.c +++ /dev/null @@ -1,111 +0,0 @@ -#include "inttypes.h" -#include "kplib.h" -#include "compat.h" - -struct icon { - int width,height; - unsigned int *pixels; - unsigned char *mask; -}; - -int writeicon(FILE *fp, struct icon *ico) -{ - int i; - - fprintf(fp, - "#include \"sdlayer.h\"\n" - "\n" - ); - fprintf(fp,"static unsigned int sdlappicon_pixels[] = {\n"); - for (i=0;iwidth*ico->height;i++) { - if ((i%6) == 0) fprintf(fp,"\t"); - else fprintf(fp," "); - fprintf(fp, "0x%08x,", B_LITTLE32(ico->pixels[i])); - if ((i%6) == 5) fprintf(fp,"\n"); - } - if ((i%16) > 0) fprintf(fp, "\n"); - fprintf(fp, "};\n\n"); - - fprintf(fp,"static unsigned char sdlappicon_mask[] = {\n"); - for (i=0;i<((ico->width+7)/8)*ico->height;i++) { - if ((i%14) == 0) fprintf(fp,"\t"); - else fprintf(fp," "); - fprintf(fp, "%3d,", ico->mask[i]); - if ((i%14) == 13) fprintf(fp,"\n"); - } - if ((i%16) > 0) fprintf(fp, "\n"); - fprintf(fp, "};\n\n"); - - fprintf(fp, - "struct sdlappicon sdlappicon = {\n" - " %d,%d, // width,height\n" - " sdlappicon_pixels,\n" - " sdlappicon_mask\n" - "};\n", - ico->width, ico->height - ); - - return 0; -} - -int main(int argc, char **argv) -{ - struct icon icon; - int bpl, xsiz, ysiz; - int i,j,k,c; - unsigned char *mask, *maskp, bm, *pp; - - if (argc<2) { - fprintf(stderr, "generateicon \n"); - return 1; - } - - memset(&icon, 0, sizeof(icon)); - - kpzload(argv[1], (int*)&icon.pixels, &bpl, (int*)&icon.width, (int*)&icon.height); - if (!icon.pixels) { - fprintf(stderr, "Failure loading %s\n", argv[1]); - return 1; - } - - if (bpl != icon.width * 4) { - fprintf(stderr, "bpl != icon.width * 4\n"); - free(icon.pixels); - return 1; - } - - icon.mask = (unsigned char *)calloc(icon.height, (icon.width+7)/8); - if (!icon.mask) { - fprintf(stderr, "Out of memory\n"); - free(icon.pixels); - return 1; - } - - maskp = icon.mask; - bm = 1; - pp = (unsigned char *)icon.pixels; - for (i=0; i 0) *maskp |= bm; - - bm <<= 1; - pp += 4; - } - - writeicon(stdout, &icon); - - free(icon.pixels); - free(icon.mask); - - return 0; -} - diff --git a/polymer-perf/eduke32/build/src/util/highpalookupmaker.py b/polymer-perf/eduke32/build/src/util/highpalookupmaker.py deleted file mode 100644 index c28f23420..000000000 --- a/polymer-perf/eduke32/build/src/util/highpalookupmaker.py +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/python - -def makehighpalookuppixel(pal, rgb): - hsv = list(colorsys.rgb_to_hsv(*rgb)) - if pal == 0: - # no-op, pass through - return rgb - # frozen, blue light - elif pal == 1: - # make everything blueish - hsv[0] = 0.66 - return list(colorsys.hsv_to_rgb(*hsv)) - # nightvision - elif pal == 6: - # make everything green and reverse brightness - hsv[0] = 0.33 - hsv[2] = 1.0 - hsv[2] - #hsv[1] = 0.5 - return list(colorsys.hsv_to_rgb(*hsv)) - # pal 20 - elif pal == 20: - # blue to gray by removing all saturation - if (hsv[0] > 0.6 and hsv[0] < 0.7): - hsv[1] = 0 - # orange and brown to blue - if (hsv[0] > 0.04 and hsv[0] < 0.13): - hsv[0] = 0.66 - # purple and reddish to blue - if (hsv[0] > 0.7 and hsv[0] < 0.9): - hsv[0] = 0.66 - # green to blue - if (hsv[0] > 0.30 and hsv[0] < 0.36): - hsv[0] = 0.66 - return list(colorsys.hsv_to_rgb(*hsv)) - else: - print "unknown pal!" - sys.exit() - -import colorsys -import sys -import struct - -if (len(sys.argv) != 3): - print "Usage: python highpalookupmaker.py palnum outfile" - sys.exit() - -# bit depth per dimension -xbits = 7 -ybits = 7 -zbits = 7 - -xdim = 1 << xbits -ydim = 1 << ybits -zdim = 1 << zbits - -palnum = int(sys.argv[1]) - -pixels = [] -pixelcount = xdim * ydim * zdim -curpix = 0.0 - -fo = open(sys.argv[2], "w") - -# throw in a TGA header in there, this way they'll be able to directly edit it if they feel like it -fo.write(struct.pack("=BBBHHBHHHHBB", 0, 0, 2, 0, 0, 0, 0, 0, 16384, 128, 32, 0)) - -print "Creating highpalookup map %s for palette %d with depth %d:%d:%d..." % (sys.argv[2], palnum, xbits, ybits, zbits) - -for k in range(zdim): - for j in range(ydim): - for i in range(xdim): - rgb = [float(i) / (xdim - 1), float(j) / (ydim - 1), float(k) / (zdim - 1)] - rgb = makehighpalookuppixel(palnum, rgb) - # save as BGRA as that's what TGA uses - pixels.append(struct.pack('BBBB', int(rgb[2] * 255), int(rgb[1] * 255), int(rgb[0] * 255), 255)) - curpix += 1 - if (curpix % 128 == 0): - print "\r%f%% done." % (curpix * 100 / pixelcount), - -fo.writelines(pixels) -fo.close() - -print "\n" diff --git a/polymer-perf/eduke32/build/src/util/kextract.c b/polymer-perf/eduke32/build/src/util/kextract.c deleted file mode 100644 index af45e82ad..000000000 --- a/polymer-perf/eduke32/build/src/util/kextract.c +++ /dev/null @@ -1,148 +0,0 @@ -// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman -// Ken Silverman's official web site: "http://www.advsys.net/ken" -// See the included license file "BUILDLIC.TXT" for license info. -// -// This file has been modified from Ken Silverman's original release -// by Jonathon Fowler (jonof@edgenetwk.com) - -#include "compat.h" - -#define MAXFILES 4096 - -static char buf[65536]; - -static int numfiles, anyfiles4extraction; -static char marked4extraction[MAXFILES]; -static char filelist[MAXFILES][16]; -static int fileoffs[MAXFILES+1], fileleng[MAXFILES]; - -void findfiles(const char *dafilespec) -{ - char t[13]; - int i; - - for(i=numfiles-1;i>=0;i--) - { - memcpy(t,filelist[i],12); - t[12] = 0; - - if (Bwildmatch(t,dafilespec)) { - marked4extraction[i] = 1; - anyfiles4extraction = 1; - } - } -} - -int main(int argc, char **argv) -{ - int i, j, k, l, fil, fil2; - - if (argc < 3) - { - printf("KEXTRACT [grouped file][@file or filespec...] by Kenneth Silverman\n"); - printf(" This program extracts files from a previously grouped group file.\n"); - printf(" You can extract files using the ? and * wildcards.\n"); - printf(" Ex: kextract stuff.dat tiles000.art nukeland.map palette.dat\n"); - printf(" (stuff.dat is the group file, the rest are the files to extract)\n"); - return(0); - } - - if ((fil = Bopen(argv[1],BO_BINARY|BO_RDONLY,BS_IREAD)) == -1) - { - printf("Error: %s could not be opened\n",argv[1]); - return(0); - } - - Bread(fil,buf,16); - if ((buf[0] != 'K') || (buf[1] != 'e') || (buf[2] != 'n') || - (buf[3] != 'S') || (buf[4] != 'i') || (buf[5] != 'l') || - (buf[6] != 'v') || (buf[7] != 'e') || (buf[8] != 'r') || - (buf[9] != 'm') || (buf[10] != 'a') || (buf[11] != 'n')) - { - Bclose(fil); - printf("Error: %s not a valid group file\n",argv[1]); - return(0); - } - numfiles = *((int*)&buf[12]); numfiles = B_LITTLE32(numfiles); - - Bread(fil,filelist,numfiles<<4); - - j = 0; - for(i=0;i1;i--) - { - if (argv[i][0] == '@') - { - if ((fil2 = Bopen(&argv[i][1],BO_BINARY|BO_RDONLY,BS_IREAD)) != -1) - { - l = Bread(fil2,buf,65536); - j = 0; - while ((j < l) && (buf[j] <= 32)) j++; - while (j < l) - { - k = j; - while ((k < l) && (buf[k] > 32)) k++; - - buf[k] = 0; - findfiles(&buf[j]); - j = k+1; - - while ((j < l) && (buf[j] <= 32)) j++; - } - Bclose(fil2); - } - } - else - findfiles(argv[i]); - } - - if (anyfiles4extraction == 0) - { - Bclose(fil); - printf("No files found in group file with those names\n"); - return(0); - } - - for(i=0;imode & BS_IFDIR) return 0; // is a directory - if (a->namlen > 12) return 0; // name too long - return Bwildmatch(a->name, matchstr); -} - -int filesize(const char *path, const char *name) -{ - char p[BMAX_PATH]; - struct stat st; - - strcpy(p, path); - strcat(p, "/"); - strcat(p, name); - - if (!stat(p, &st)) return st.st_size; - return 0; -} - -void findfiles(const char *dafilespec) -{ - struct Bdirent *name; - int daspeclen; - char daspec[128], *dir; - BDIR *di; - - strcpy(daspec,dafilespec); - daspeclen=strlen(daspec); - while ((daspec[daspeclen] != '\\') && (daspec[daspeclen] != '/') && (daspeclen > 0)) daspeclen--; - if (daspeclen > 0) { - daspec[daspeclen]=0; - dir = daspec; - matchstr = &daspec[daspeclen+1]; - } else { - dir = "."; - matchstr = daspec; - } - - di = Bopendir(dir); - if (!di) return; - - while ((name = Breaddir(di))) { - if (!checkmatch(name)) continue; - - strcpy(&filelist[numfiles][0],name->name); - jstrupr(&filelist[numfiles][0]); - fileleng[numfiles] = name->size; - filelist[numfiles][12] = (char)(fileleng[numfiles]&255); - filelist[numfiles][13] = (char)((fileleng[numfiles]>>8)&255); - filelist[numfiles][14] = (char)((fileleng[numfiles]>>16)&255); - filelist[numfiles][15] = (char)((fileleng[numfiles]>>24)&255); - - strcpy(filespec[numfiles],dir); - strcat(filespec[numfiles], "/"); - strcat(filespec[numfiles],name->name); - - numfiles++; - if (numfiles > MAXFILES) - { - printf("FATAL ERROR: TOO MANY FILES SELECTED! (MAX is 4096)\n"); - exit(0); - } - } - - Bclosedir(di); -} - -int main(int argc, char **argv) -{ - int i, j, k, l, fil, fil2; - - if (argc < 3) - { - printf("KGROUP [grouped file][@file or filespec...] by Kenneth Silverman\n"); - printf(" This program collects many files into 1 big uncompressed file called a\n"); - printf(" group file\n"); - printf(" Ex: kgroup stuff.dat *.art *.map *.k?? palette.dat tables.dat\n"); - printf(" (stuff.dat is the group file, the rest are the files to add)\n"); - exit(0); - } - - numfiles = 0; - for(i=argc-1;i>1;i--) - { - if (argv[i][0] == '@') - { - if ((fil = Bopen(&argv[i][1],BO_BINARY|BO_RDONLY,BS_IREAD)) != -1) - { - l = Bread(fil,buf,65536); - j = 0; - while ((j < l) && (buf[j] <= 32)) j++; - while (j < l) - { - k = j; - while ((k < l) && (buf[k] > 32)) k++; - - buf[k] = 0; - findfiles(&buf[j]); - j = k+1; - - while ((j < l) && (buf[j] <= 32)) j++; - } - Bclose(fil); - } - } - else - findfiles(argv[i]); - } - - if ((fil = Bopen(argv[1],BO_BINARY|BO_TRUNC|BO_CREAT|BO_WRONLY,BS_IREAD|BS_IWRITE)) == -1) - { - printf("Error: %s could not be opened\n",argv[1]); - exit(0); - } - Bwrite(fil,"KenSilverman",12); - Bwrite(fil,&numfiles,4); - Bwrite(fil,filelist,numfiles<<4); - - for(i=0;i -#include -#include - -typedef struct { float x, y, z; } point3d; - -typedef struct -{ int id, vers, skinxsiz, skinysiz, framebytes; //id:"IPD2", vers:8 - int numskins, numverts, numuv, numtris, numglcmds, numframes; - int ofsskins, ofsuv, ofstris, ofsframes, ofsglcmds, ofseof; //ofsskins: skin names (64 bytes each) -} md2typ; - -typedef struct { point3d mul, add; } frametyp; - -int main (int argc, char **argv) -{ - FILE *fil; - int i, leng; - char *fbuf; - md2typ *head; - frametyp *fptr; - - if (argc != 4) { puts("KMD2TOOL [MD2 in file] [MD2 out file] [z offset] by Ken Silverman"); return(0); } - if (!stricmp(argv[1],argv[2])) { puts("input&output filenames can't be same"); return(0); } - - fil = fopen(argv[1],"rb"); if (!fil) { puts("error"); return(0); } - leng = filelength(_fileno(fil)); - fbuf = (char *)malloc(leng); if (!fbuf) { puts("error"); return(0); } - fread(fbuf,leng,1,fil); - fclose(fil); - - head = (md2typ *)fbuf; - if ((head->id != 0x32504449) && (head->vers != 8)) { free(fbuf); puts("error"); return(0); } //"IDP2" - for(i=0;inumframes;i++) - { - fptr = (frametyp *)&fbuf[head->ofsframes+head->framebytes*i]; - printf("frame %2d scale:%f,%f,%f offs:%f,%f,%f\n",i,fptr->mul.x,fptr->mul.y,fptr->mul.z,fptr->add.x,fptr->add.y,fptr->add.z); - fptr->add.z += atof(argv[3]); - } - - fil = fopen(argv[2],"wb"); if (!fil) { puts("error"); return(0); } - fwrite(fbuf,leng,1,fil); - fclose(fil); - - free(fbuf); - - return(0); -} - -#if 0 -!endif -#endif diff --git a/polymer-perf/eduke32/build/src/util/md2tool.c b/polymer-perf/eduke32/build/src/util/md2tool.c deleted file mode 100644 index 97999bf7b..000000000 --- a/polymer-perf/eduke32/build/src/util/md2tool.c +++ /dev/null @@ -1,249 +0,0 @@ - -#include "compat.h" -#include "build.h" -#include "glbuild.h" -#include "mdsprite.h" - -#include -#include - - -static md2head_t head; - - -static void quit(int32_t status) -{ - exit(status); -} - -static md2model_t *md2load(int *fd, const char *filename, int32_t ronly) -{ - md2model_t *m; - int fil; - - fil = Bopen(filename, ronly?BO_RDONLY:BO_RDWR); - if (fil<0) - { - fprintf(stderr, "Couldn't open `%s': %s\n", filename, strerror(errno)); - quit(2); - } - - m = (md2model_t *)Bcalloc(1,sizeof(md2model_t)); if (!m) quit(1); - m->mdnum = 2; m->scale = .01f; - - Bread(fil,(char *)&head,sizeof(md2head_t)); - - head.id = B_LITTLE32(head.id); head.vers = B_LITTLE32(head.vers); - head.skinxsiz = B_LITTLE32(head.skinxsiz); head.skinysiz = B_LITTLE32(head.skinysiz); - head.framebytes = B_LITTLE32(head.framebytes); head.numskins = B_LITTLE32(head.numskins); - head.numverts = B_LITTLE32(head.numverts); head.numuv = B_LITTLE32(head.numuv); - head.numtris = B_LITTLE32(head.numtris); head.numglcmds = B_LITTLE32(head.numglcmds); - head.numframes = B_LITTLE32(head.numframes); head.ofsskins = B_LITTLE32(head.ofsskins); - head.ofsuv = B_LITTLE32(head.ofsuv); head.ofstris = B_LITTLE32(head.ofstris); - head.ofsframes = B_LITTLE32(head.ofsframes); head.ofsglcmds = B_LITTLE32(head.ofsglcmds); - head.ofseof = B_LITTLE32(head.ofseof); - - if ((head.id != 0x32504449) || (head.vers != 8)) - { - fprintf(stderr, "File `%s' is not an md2 file.\n", filename); - quit(3); - } //"IDP2" - - m->numskins = head.numskins; - m->numframes = head.numframes; - m->numverts = head.numverts; - m->numglcmds = head.numglcmds; - m->framebytes = head.framebytes; - - m->frames = (char *)Bmalloc(m->numframes*m->framebytes); if (!m->frames) quit(1); - m->tris = (md2tri_t *)Bmalloc(head.numtris*sizeof(md2tri_t)); if (!m->tris) quit(1); - m->uv = (md2uv_t *)Bmalloc(head.numuv*sizeof(md2uv_t)); if (!m->uv) quit(1); - - Blseek(fil,head.ofsframes,SEEK_SET); - if (Bread(fil,(char *)m->frames,m->numframes*m->framebytes) != m->numframes*m->framebytes) - quit(1); - - Blseek(fil,head.ofstris,SEEK_SET); - if (Bread(fil,(char *)m->tris,head.numtris*sizeof(md2tri_t)) != (int32_t)(head.numtris*sizeof(md2tri_t))) - quit(1); - - Blseek(fil,head.ofsuv,SEEK_SET); - if (Bread(fil,(char *)m->uv,head.numuv*sizeof(md2uv_t)) != (int32_t)(head.numuv*sizeof(md2uv_t))) - quit(1); - -#if B_BIG_ENDIAN != 0 - { - char *f = (char *)m->frames; - int32_t *l,i,j; - md2frame_t *fr; - - for (i = m->numframes-1; i>=0; i--) - { - fr = (md2frame_t *)f; - l = (int32_t *)&fr->mul; - for (j=5; j>=0; j--) l[j] = B_LITTLE32(l[j]); - f += m->framebytes; - } - - for (i = head.numtris-1; i>=0; i--) - { - m->tris[i].v[0] = B_LITTLE16(m->tris[i].v[0]); - m->tris[i].v[1] = B_LITTLE16(m->tris[i].v[1]); - m->tris[i].v[2] = B_LITTLE16(m->tris[i].v[2]); - m->tris[i].u[0] = B_LITTLE16(m->tris[i].u[0]); - m->tris[i].u[1] = B_LITTLE16(m->tris[i].u[1]); - m->tris[i].u[2] = B_LITTLE16(m->tris[i].u[2]); - } - for (i = head.numuv-1; i>=0; i--) - { - m->uv[i].u = B_LITTLE16(m->uv[i].u); - m->uv[i].v = B_LITTLE16(m->uv[i].v); - } - } -#endif - - *fd = fil; - return(m); -} - - -static void usage_and_quit() -{ - fprintf(stderr, - "Usage:\n" - " md2tool .md2: display info about model\n" - " md2tool -minmax ,,:,, .md2:\n" - " modify `scale' and `translate' fields of MD2 (in-place) to produce given bounds\n" - ); - quit(1); -} - -int main(int argc, char **argv) -{ - char *fn=NULL, *cp; - int32_t fd=-1, i, j, slen; - - int32_t doinfo=1; - - // md2 mul[x,y,z], add[x,y,z] - float mx,my,mz, ax,ay,az; - - // desired model bounds - float dminx=0,dminy=0,dminz=0, dmaxx=1,dmaxy=1,dmaxz=1; - - // md2 uint8-coordinate bounds - uint8_t maxv[3]={0,0,0}; - uint8_t minv[3]={255,255,255}; - - md2frame_t *fr; - uint8_t *vp; - - md2model_t *m; - - if (argc<=1) - usage_and_quit(); - - for (i=1; i= argc) - usage_and_quit(); - if (sscanf(argv[i+1], "%f,%f,%f:%f,%f,%f", &dminx,&dminy,&dminz, &dmaxx,&dmaxy,&dmaxz)!=6) - usage_and_quit(); - i++; - } - else - { - fprintf(stderr, "unrecognized option `%s'\n", cp); - quit(2); - } - } - else - fn = cp; - } - - if (!fn) - usage_and_quit(); - - m = md2load(&fd, fn, doinfo); - - fr = (md2frame_t *)m->frames; - mx=fr->mul.x; my=fr->mul.y; mz=fr->mul.z; - ax=fr->add.x; ay=fr->add.y; az=fr->add.z; - - for (i=0, vp=fr->verts->v; inumverts; i++, vp+=sizeof(md2vert_t)) - { - for (j=0; j<3; j++) - { - maxv[j] = max(maxv[j], vp[j]); - minv[j] = min(minv[j], vp[j]); - } - } - - if (doinfo) - { - printf("------ %s ------\n", fn); - printf("numframes: %d\n", m->numframes); - printf("numverts: %d\n", m->numverts); - printf("numtris: %d\n", head.numtris); - printf("\n"); - printf("ofsframes: %x\n", head.ofsframes); - printf("framebytes: %d\n", head.framebytes); -// printf("framebytes: %d, calculated=%d\n", head.framebytes, sizeof(md2frame_t)+(m->numverts-1)*sizeof(md2vert_t)); - printf("\n"); - - printf("mul=%f %f %f\n", mx, my, mz); - printf("add=%f %f %f\n", ax, ay, az); - - printf("min xyz (s+t) = %f %f %f\n", minv[0]*mx+ax, minv[1]*my+ay, minv[2]*mz+az); - printf("max xyz (s+t) = %f %f %f\n", maxv[0]*mx+ax, maxv[1]*my+ay, maxv[2]*mz+az); - - printf("\n"); - } - else - { - if (maxv[0]-minv[0]>0) mx = (dmaxx-dminx)/(maxv[0]-minv[0]); else mx=0; - if (maxv[1]-minv[1]>0) my = (dmaxy-dminy)/(maxv[1]-minv[1]); else my=0; - if (maxv[2]-minv[2]>0) mz = (dmaxz-dminz)/(maxv[2]-minv[2]); else mz=0; - - if (mx==0||my==0||mz==0) - { - fprintf(stderr, "max[x,y,z]-min[x,y,z] must each be grater 0!\n"); - quit(2); - } - - ax = dmaxx-maxv[0]*mx; - ay = dmaxy-maxv[1]*my; - az = dmaxz-maxv[2]*mz; - -#define ISNAN(x) ((x)!=(x)) -#define ISINF(x) ((x!=0)&&(x/2==x)) - - if (ISNAN(mx)||ISNAN(my)||ISNAN(mz)||ISNAN(ax)||ISNAN(ay)||ISNAN(az)|| - ISINF(mx)||ISINF(my)||ISINF(mz)||ISINF(ax)||ISINF(ay)||ISINF(az)) - { - fprintf(stderr, "Calculation resulted in NaN or Inf.\n"); - quit(2); - } - - Blseek(fd,head.ofsframes,SEEK_SET); - if (Bwrite(fd, &mx, sizeof(mx))!=sizeof(mx)) { perror("write"); quit(3); } - if (Bwrite(fd, &my, sizeof(my))!=sizeof(my)) { perror("write"); quit(3); } - if (Bwrite(fd, &mz, sizeof(mz))!=sizeof(mz)) { perror("write"); quit(3); } - if (Bwrite(fd, &ax, sizeof(ax))!=sizeof(ax)) { perror("write"); quit(3); } - if (Bwrite(fd, &ay, sizeof(ay))!=sizeof(ay)) { perror("write"); quit(3); } - if (Bwrite(fd, &az, sizeof(az))!=sizeof(az)) { perror("write"); quit(3); } - Bclose(fd); - - printf("wrote scale and translate of `%s'.\n", fn); - } - - return 0; -} diff --git a/polymer-perf/eduke32/build/src/util/md3_export.py b/polymer-perf/eduke32/build/src/util/md3_export.py deleted file mode 100644 index 6a21e4513..000000000 --- a/polymer-perf/eduke32/build/src/util/md3_export.py +++ /dev/null @@ -1,1219 +0,0 @@ -#!BPY - -""" -Name: 'Quake3 (.md3)...' -Blender: 242 -Group: 'Export' -Tooltip: 'Export to Quake3 file format. (.md3)' -""" -__author__ = "PhaethonH, Bob Holcomb, Damien McGinnes, Robert (Tr3B) Beckebans" -__url__ = ("http://xreal.sourceforge.net") -__version__ = "0.7 2006-11-12" - -__bpydoc__ = """\ -This script exports a Quake3 file (MD3). - -Supported:
- Surfaces, Materials and Tags. - -Missing:
- None. - -Known issues:
- None. - -Notes:
- TODO -""" - -import sys, os, os.path, struct, string, math - -import Blender -from Blender import * -from Blender.Draw import * -from Blender.BGL import * -from Blender.Window import * - -import types - -import textwrap - -import logging -reload(logging) - -import sys, struct, string, math -from types import * - -import os -from os import path - -GAMEDIR = 'D:/Games/XreaL_testing/base/' -#GAMEDIR = '/opt/XreaL/base/' -MAX_QPATH = 64 - -import sys, struct, string, math -from types import * - -import os -from os import path - -import q_shared -from q_shared import * - -MD3_IDENT = "IDP3" -MD3_VERSION = 15 -MD3_MAX_TAGS = 16 -MD3_MAX_SURFACES = 32 -MD3_MAX_FRAMES = 1024 -MD3_MAX_SHADERS = 256 -MD3_MAX_VERTICES = 4096 -MD3_MAX_TRIANGLES = 8192 -MD3_XYZ_SCALE = (1.0 / 64.0) -MD3_BLENDER_SCALE = (1.0 / 1.0) - - -class md3Vert: - xyz = [] - normal = 0 - binaryFormat = "<3hh" - - def __init__(self): - self.xyz = [0, 0, 0] - self.normal = 0 - - def GetSize(self): - return struct.calcsize(self.binaryFormat) - - # copied from PhaethonH md3.py - def Decode(self, latlng): - lat = (latlng >> 8) & 0xFF; - lng = (latlng) & 0xFF; - lat *= math.pi / 128; - lng *= math.pi / 128; - x = math.cos(lat) * math.sin(lng) - y = math.sin(lat) * math.sin(lng) - z = math.cos(lng) - retval = [ x, y, z ] - return retval - - # copied from PhaethonH md3.py - def Encode(self, normal): - x, y, z = normal - - # normalise - l = math.sqrt((x*x) + (y*y) + (z*z)) - if l == 0: - return 0 - x = x/l - y = y/l - z = z/l - - if (x == 0.0) & (y == 0.0) : - if z > 0.0: - return 0 - else: - return (128 << 8) - - # Encode a normal vector into a 16-bit latitude-longitude value - #lng = math.acos(z) - #lat = math.acos(x / math.sin(lng)) - #retval = ((lat & 0xFF) << 8) | (lng & 0xFF) - lng = math.acos(z) * 255 / (2 * math.pi) - lat = math.atan2(y, x) * 255 / (2 * math.pi) - retval = ((int(lat) & 0xFF) << 8) | (int(lng) & 0xFF) - return retval - - def Load(self, file): - tmpData = file.read(struct.calcsize(self.binaryFormat)) - data = struct.unpack(self.binaryFormat, tmpData) - self.xyz[0] = data[0] * MD3_XYZ_SCALE - self.xyz[1] = data[1] * MD3_XYZ_SCALE - self.xyz[2] = data[2] * MD3_XYZ_SCALE - self.normal = data[3] - return self - - def Save(self, file): - tmpData = [0] * 4 - tmpData[0] = self.xyz[0] / MD3_XYZ_SCALE - tmpData[1] = self.xyz[1] / MD3_XYZ_SCALE - tmpData[2] = self.xyz[2] / MD3_XYZ_SCALE - tmpData[3] = self.normal - data = struct.pack(self.binaryFormat, tmpData[0], tmpData[1], tmpData[2], tmpData[3]) - file.write(data) - #print "Wrote MD3 Vertex: ", data - - def Dump(self): - log.info("MD3 Vertex") - log.info("X: %s", self.xyz[0]) - log.info("Y: %s", self.xyz[1]) - log.info("Z: %s", self.xyz[2]) - log.info("Normal: %s", self.normal) - log.info("") - -class md3TexCoord: - u = 0.0 - v = 0.0 - - binaryFormat = "<2f" - - def __init__(self): - self.u = 0.0 - self.v = 0.0 - - def GetSize(self): - return struct.calcsize(self.binaryFormat) - - def Load(self, file): - tmpData = file.read(struct.calcsize(self.binaryFormat)) - data = struct.unpack(self.binaryFormat, tmpData) - # for some reason quake3 texture maps are upside down, flip that - self.u = data[0] - self.v = 1.0 - data[1] - return self - - def Save(self, file): - tmpData = [0] * 2 - tmpData[0] = self.u - tmpData[1] = 1.0 - self.v - data = struct.pack(self.binaryFormat, tmpData[0], tmpData[1]) - file.write(data) - #print "wrote MD3 texture coordinate structure: ", data - - def Dump(self): - log.info("MD3 Texture Coordinates") - log.info("U: %s", self.u) - log.info("V: %s", self.v) - log.info("") - - -class md3Triangle: - indexes = [] - - binaryFormat = "<3i" - - def __init__(self): - self.indexes = [ 0, 0, 0 ] - - def GetSize(self): - return struct.calcsize(self.binaryFormat) - - def Load(self, file): - tmpData = file.read(struct.calcsize(self.binaryFormat)) - data = struct.unpack(self.binaryFormat, tmpData) - self.indexes[0] = data[0] - self.indexes[1] = data[2] # reverse - self.indexes[2] = data[1] # reverse - return self - - def Save(self, file): - tmpData = [0] * 3 - tmpData[0] = self.indexes[0] - tmpData[1] = self.indexes[2] # reverse - tmpData[2] = self.indexes[1] # reverse - data = struct.pack(self.binaryFormat,tmpData[0], tmpData[1], tmpData[2]) - file.write(data) - #print "wrote MD3 face structure: ",data - - def Dump(self, log): - log.info("MD3 Triangle") - log.info("Indices: %s", self.indexes) - log.info("") - - -class md3Shader: - name = "" - index = 0 - - binaryFormat = "<%dsi" % MAX_QPATH - - def __init__(self): - self.name = "" - self.index = 0 - - def GetSize(self): - return struct.calcsize(self.binaryFormat) - - def Load(self, file): - tmpData = file.read(struct.calcsize(self.binaryFormat)) - data = struct.unpack(self.binaryFormat, tmpData) - self.name = asciiz(data[0]) - self.index = data[1] - return self - - def Save(self, file): - tmpData = [0] * 2 - tmpData[0] = self.name - tmpData[1] = self.index - data = struct.pack(self.binaryFormat, tmpData[0], tmpData[1]) - file.write(data) - #print "wrote MD3 shader structure: ",data - - def Dump(self, log): - log.info("MD3 Shader") - log.info("Name: %s", self.name) - log.info("Index: %s", self.index) - log.info("") - - -class md3Surface: - ident = "" - name = "" - flags = 0 - numFrames = 0 - numShaders = 0 - numVerts = 0 - numTriangles = 0 - ofsTriangles = 0 - ofsShaders = 0 - ofsUV = 0 - ofsVerts = 0 - ofsEnd = 0 - shaders = [] - triangles = [] - uv = [] - verts = [] - - binaryFormat = "<4s%ds10i" % MAX_QPATH # 1 int, name, then 10 ints - - def __init__(self): - self.ident = "" - self.name = "" - self.flags = 0 - self.numFrames = 0 - self.numShaders = 0 - self.numVerts = 0 - self.numTriangles = 0 - self.ofsTriangles = 0 - self.ofsShaders = 0 - self.ofsUV = 0 - self.ofsVerts = 0 - self.ofsEnd - self.shaders = [] - self.triangles = [] - self.uv = [] - self.verts = [] - - def GetSize(self): - sz = struct.calcsize(self.binaryFormat) - self.ofsTriangles = sz - for t in self.triangles: - sz += t.GetSize() - self.ofsShaders = sz - for s in self.shaders: - sz += s.GetSize() - self.ofsUV = sz - for u in self.uv: - sz += u.GetSize() - self.ofsVerts = sz - for v in self.verts: - sz += v.GetSize() - self.ofsEnd = sz - return self.ofsEnd - - def Load(self, file, log): - # where are we in the file (for calculating real offsets) - ofsBegin = file.tell() - tmpData = file.read(struct.calcsize(self.binaryFormat)) - data = struct.unpack(self.binaryFormat, tmpData) - self.ident = data[0] - self.name = asciiz(data[1]) - self.flags = data[2] - self.numFrames = data[3] - self.numShaders = data[4] - self.numVerts = data[5] - self.numTriangles = data[6] - self.ofsTriangles = data[7] - self.ofsShaders = data[8] - self.ofsUV = data[9] - self.ofsVerts = data[10] - self.ofsEnd = data[11] - - # load the tri info - file.seek(ofsBegin + self.ofsTriangles, 0) - for i in range(0, self.numTriangles): - self.triangles.append(md3Triangle()) - self.triangles[i].Load(file) - #self.triangles[i].Dump(log) - - # load the shader info - file.seek(ofsBegin + self.ofsShaders, 0) - for i in range(0, self.numShaders): - self.shaders.append(md3Shader()) - self.shaders[i].Load(file) - #self.shaders[i].Dump(log) - - # load the uv info - file.seek(ofsBegin + self.ofsUV, 0) - for i in range(0, self.numVerts): - self.uv.append(md3TexCoord()) - self.uv[i].Load(file) - #self.uv[i].Dump(log) - - # load the verts info - file.seek(ofsBegin + self.ofsVerts, 0) - for i in range(0, self.numFrames): - for j in range(0, self.numVerts): - self.verts.append(md3Vert()) - #i*self.numVerts+j=where in the surface vertex list the vert position for this frame is - self.verts[(i * self.numVerts) + j].Load(file) - #self.verts[j].Dump(log) - - # go to the end of this structure - file.seek(ofsBegin+self.ofsEnd, 0) - - return self - - def Save(self, file): - self.GetSize() - tmpData = [0] * 12 - tmpData[0] = self.ident - tmpData[1] = self.name - tmpData[2] = self.flags - tmpData[3] = self.numFrames - tmpData[4] = self.numShaders - tmpData[5] = self.numVerts - tmpData[6] = self.numTriangles - tmpData[7] = self.ofsTriangles - tmpData[8] = self.ofsShaders - tmpData[9] = self.ofsUV - tmpData[10] = self.ofsVerts - tmpData[11] = self.ofsEnd - data = struct.pack(self.binaryFormat, tmpData[0],tmpData[1],tmpData[2],tmpData[3],tmpData[4],tmpData[5],tmpData[6],tmpData[7],tmpData[8],tmpData[9],tmpData[10],tmpData[11]) - file.write(data) - - # write the tri data - for t in self.triangles: - t.Save(file) - - # save the shader coordinates - for s in self.shaders: - s.Save(file) - - # save the uv info - for u in self.uv: - u.Save(file) - - # save the verts - for v in self.verts: - v.Save(file) - - def Dump(self, log): - log.info("MD3 Surface") - log.info("Ident: %s", self.ident) - log.info("Name: %s", self.name) - log.info("Flags: %s", self.flags) - log.info("Number of Frames: %s", self.numFrames) - log.info("Number of Shaders: %s", self.numShaders) - log.info("Number of Verts: %s", self.numVerts) - log.info("Number of Triangles: %s", self.numTriangles) - log.info("Offset to Triangles: %s", self.ofsTriangles) - log.info("Offset to Shaders: %s", self.ofsShaders) - log.info("Offset to UV: %s", self.ofsUV) - log.info("Offset to Verts: %s", self.ofsVerts) - log.info("Offset to end: %s", self.ofsEnd) - log.info("") - - -class md3Tag: - name = "" - origin = [] - axis = [] - - binaryFormat="<%ds3f9f" % MAX_QPATH - - def __init__(self): - self.name = "" - self.origin = [0, 0, 0] - self.axis = [0, 0, 0, 0, 0, 0, 0, 0, 0] - - def GetSize(self): - return struct.calcsize(self.binaryFormat) - - def Load(self, file): - tmpData = file.read(struct.calcsize(self.binaryFormat)) - data = struct.unpack(self.binaryFormat, tmpData) - self.name = asciiz(data[0]) - self.origin[0] = data[1] - self.origin[1] = data[2] - self.origin[2] = data[3] - self.axis[0] = data[4] - self.axis[1] = data[5] - self.axis[2] = data[6] - self.axis[3] = data[7] - self.axis[4] = data[8] - self.axis[5] = data[9] - self.axis[6] = data[10] - self.axis[7] = data[11] - self.axis[8] = data[12] - return self - - def Save(self, file): - tmpData = [0] * 13 - tmpData[0] = self.name - tmpData[1] = float(self.origin[0]) - tmpData[2] = float(self.origin[1]) - tmpData[3] = float(self.origin[2]) - tmpData[4] = float(self.axis[0]) - tmpData[5] = float(self.axis[1]) - tmpData[6] = float(self.axis[2]) - tmpData[7] = float(self.axis[3]) - tmpData[8] = float(self.axis[4]) - tmpData[9] = float(self.axis[5]) - tmpData[10] = float(self.axis[6]) - tmpData[11] = float(self.axis[7]) - tmpData[12] = float(self.axis[8]) - data = struct.pack(self.binaryFormat, tmpData[0],tmpData[1],tmpData[2],tmpData[3],tmpData[4],tmpData[5],tmpData[6], tmpData[7], tmpData[8], tmpData[9], tmpData[10], tmpData[11], tmpData[12]) - file.write(data) - #print "wrote MD3 Tag structure: ",data - - def Dump(self, log): - log.info("MD3 Tag") - log.info("Name: %s", self.name) - log.info("Origin: %s", self.origin) - log.info("Axis: %s", self.axis) - log.info("") - -class md3Frame: - mins = 0 - maxs = 0 - localOrigin = 0 - radius = 0.0 - name = "" - - binaryFormat="<3f3f3ff16s" - - def __init__(self): - self.mins = [0, 0, 0] - self.maxs = [0, 0, 0] - self.localOrigin = [0, 0, 0] - self.radius = 0.0 - self.name = "" - - def GetSize(self): - return struct.calcsize(self.binaryFormat) - - def Load(self, file): - tmpData = file.read(struct.calcsize(self.binaryFormat)) - data = struct.unpack(self.binaryFormat, tmpData) - self.mins[0] = data[0] - self.mins[1] = data[1] - self.mins[2] = data[2] - self.maxs[0] = data[3] - self.maxs[1] = data[4] - self.maxs[2] = data[5] - self.localOrigin[0] = data[6] - self.localOrigin[1] = data[7] - self.localOrigin[2] = data[8] - self.radius = data[9] - self.name = asciiz(data[10]) - return self - - def Save(self, file): - tmpData = [0] * 11 - tmpData[0] = self.mins[0] - tmpData[1] = self.mins[1] - tmpData[2] = self.mins[2] - tmpData[3] = self.maxs[0] - tmpData[4] = self.maxs[1] - tmpData[5] = self.maxs[2] - tmpData[6] = self.localOrigin[0] - tmpData[7] = self.localOrigin[1] - tmpData[8] = self.localOrigin[2] - tmpData[9] = self.radius - tmpData[10] = self.name - data = struct.pack(self.binaryFormat, tmpData[0],tmpData[1],tmpData[2],tmpData[3],tmpData[4],tmpData[5],tmpData[6],tmpData[7], tmpData[8], tmpData[9], tmpData[10]) - file.write(data) - #print "wrote MD3 frame structure: ",data - - def Dump(self, log): - log.info("MD3 Frame") - log.info("Min Bounds: %s", self.mins) - log.info("Max Bounds: %s", self.maxs) - log.info("Local Origin: %s", self.localOrigin) - log.info("Radius: %s", self.radius) - log.info("Name: %s", self.name) - log.info("") - -class md3Object: - # header structure - ident = "" # this is used to identify the file (must be IDP3) - version = 0 # the version number of the file (Must be 15) - name = "" - flags = 0 - numFrames = 0 - numTags = 0 - numSurfaces = 0 - numSkins = 0 - ofsFrames = 0 - ofsTags = 0 - ofsSurfaces = 0 - ofsEnd = 0 - frames = [] - tags = [] - surfaces = [] - - binaryFormat="<4si%ds9i" % MAX_QPATH # little-endian (<), 17 integers (17i) - - def __init__(self): - self.ident = 0 - self.version = 0 - self.name = "" - self.flags = 0 - self.numFrames = 0 - self.numTags = 0 - self.numSurfaces = 0 - self.numSkins = 0 - self.ofsFrames = 0 - self.ofsTags = 0 - self.ofsSurfaces = 0 - self.ofsEnd = 0 - self.frames = [] - self.tags = [] - self.surfaces = [] - - def GetSize(self): - self.ofsFrames = struct.calcsize(self.binaryFormat) - self.ofsTags = self.ofsFrames - for f in self.frames: - self.ofsTags += f.GetSize() - self.ofsSurfaces += self.ofsTags - for t in self.tags: - self.ofsSurfaces += t.GetSize() - self.ofsEnd = self.ofsSurfaces - for s in self.surfaces: - self.ofsEnd += s.GetSize() - return self.ofsEnd - - def Load(self, file, log): - tmpData = file.read(struct.calcsize(self.binaryFormat)) - data = struct.unpack(self.binaryFormat, tmpData) - - self.ident = data[0] - self.version = data[1] - - if(self.ident != "IDP3" or self.version != 15): - log.error("Not a valid MD3 file") - log.error("Ident: %s", self.ident) - log.error("Version: %s", self.version) - Exit() - - self.name = asciiz(data[2]) - self.flags = data[3] - self.numFrames = data[4] - self.numTags = data[5] - self.numSurfaces = data[6] - self.numSkins = data[7] - self.ofsFrames = data[8] - self.ofsTags = data[9] - self.ofsSurfaces = data[10] - self.ofsEnd = data[11] - - # load the frame info - file.seek(self.ofsFrames, 0) - for i in range(0, self.numFrames): - self.frames.append(md3Frame()) - self.frames[i].Load(file) - #self.frames[i].Dump(log) - - # load the tags info - file.seek(self.ofsTags, 0) - for i in range(0, self.numFrames): - for j in range(0, self.numTags): - tag = md3Tag() - tag.Load(file) - #tag.Dump(log) - self.tags.append(tag) - - # load the surface info - file.seek(self.ofsSurfaces, 0) - for i in range(0, self.numSurfaces): - self.surfaces.append(md3Surface()) - self.surfaces[i].Load(file, log) - self.surfaces[i].Dump(log) - return self - - def Save(self, file): - self.GetSize() - tmpData = [0] * 12 - tmpData[0] = self.ident - tmpData[1] = self.version - tmpData[2] = self.name - tmpData[3] = self.flags - tmpData[4] = self.numFrames - tmpData[5] = self.numTags - tmpData[6] = self.numSurfaces - tmpData[7] = self.numSkins - tmpData[8] = self.ofsFrames - tmpData[9] = self.ofsTags - tmpData[10] = self.ofsSurfaces - tmpData[11] = self.ofsEnd - - data = struct.pack(self.binaryFormat, tmpData[0],tmpData[1],tmpData[2],tmpData[3],tmpData[4],tmpData[5],tmpData[6],tmpData[7], tmpData[8], tmpData[9], tmpData[10], tmpData[11]) - file.write(data) - - for f in self.frames: - f.Save(file) - - for t in self.tags: - t.Save(file) - - for s in self.surfaces: - s.Save(file) - - def Dump(self, log): - log.info("Header Information") - log.info("Ident: %s", self.ident) - log.info("Version: %s", self.version) - log.info("Name: %s", self.name) - log.info("Flags: %s", self.flags) - log.info("Number of Frames: %s",self.numFrames) - log.info("Number of Tags: %s", self.numTags) - log.info("Number of Surfaces: %s", self.numSurfaces) - log.info("Number of Skins: %s", self.numSkins) - log.info("Offset Frames: %s", self.ofsFrames) - log.info("Offset Tags: %s", self.ofsTags) - log.info("Offset Surfaces: %s", self.ofsSurfaces) - log.info("Offset end: %s", self.ofsEnd) - log.info("") - -def asciiz(s): - n = 0 - while(ord(s[n]) != 0): - n = n + 1 - return s[0:n] - -# strips the slashes from the back of a string -def StripPath(path): - for c in range(len(path), 0, -1): - if path[c-1] == "/" or path[c-1] == "\\": - path = path[c:] - break - return path - -# strips the model from path -def StripModel(path): - for c in range(len(path), 0, -1): - if path[c-1] == "/" or path[c-1] == "\\": - path = path[:c] - break - return path - -# strips file type extension -def StripExtension(name): - n = 0 - best = len(name) - while(n != -1): - n = name.find('.',n+1) - if(n != -1): - best = n - name = name[0:best] - return name - -# strips gamedir -def StripGamePath(name): - gamepath = GAMEDIR.replace( '\\', '/' ) - namepath = name.replace( '\\', '/' ) - if namepath[0:len(gamepath)] == gamepath: - namepath= namepath[len(gamepath):len(namepath)] - return namepath - -import sys, struct, string, math - -def ANGLE2SHORT(x): - return int((x * 65536 / 360) & 65535) - -def SHORT2ANGLE(x): - return x * (360.0 / 65536.0) - -def DEG2RAD(a): - return (a * math.pi) / 180.0 - -def RAD2DEG(a): - return (a * 180.0) / math.pi - -def DotProduct(x, y): - return x[0] * y[0] + x[1] * y[1] + x[2] * y[2] - -def CrossProduct(a,b): - return [a[1]*b[2] - a[2]*b[1], a[2]*b[0]-a[0]*b[2], a[0]*b[1]-a[1]*b[0]] - -def VectorLength(v): - return math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]) - -def VectorSubtract(a, b): - return [a[0] - b[0], a[1] - b[1], a[2] - b[2]] - -def VectorAdd(a, b): - return [a[0] + b[0], a[1] + b[1], a[2] + b[2]] - -def VectorCopy(v): - return [v[0], v[1], v[2]] - -def VectorInverse(v): - return [-v[0], -v[1], -v[2]] - -#define VectorCopy(a,b) ((b)[0]=(a)[0],(b)[1]=(a)[1],(b)[2]=(a)[2]) -#define VectorScale(v, s, o) ((o)[0]=(v)[0]*(s),(o)[1]=(v)[1]*(s),(o)[2]=(v)[2]*(s)) -#define VectorMA(v, s, b, o) ((o)[0]=(v)[0]+(b)[0]*(s),(o)[1]=(v)[1]+(b)[1]*(s),(o)[2]=(v)[2]+(b)[2]*(s)) - -def RadiusFromBounds(mins, maxs): - corner = [0, 0, 0] - a = 0 - b = 0 - - for i in range(0, 3): - a = abs(mins[i]) - b = abs(maxs[i]) - if a > b: - corner[i] = a - else: - corner[i] = b - - return VectorLength(corner) - - -# NOTE: Tr3B - matrix is in column-major order -def MatrixIdentity(): - return [[1.0, 0.0, 0.0, 0.0], - [0.0, 1.0, 0.0, 0.0], - [0.0, 0.0, 1.0, 0.0], - [0.0, 0.0, 0.0, 1.0]] - -def MatrixFromAngles(pitch, yaw, roll): - sp = math.sin(DEG2RAD(pitch)) - cp = math.cos(DEG2RAD(pitch)) - - sy = math.sin(DEG2RAD(yaw)) - cy = math.cos(DEG2RAD(yaw)) - - sr = math.sin(DEG2RAD(roll)) - cr = math.cos(DEG2RAD(roll)) - -# return [[cp * cy, (sr * sp * cy + cr * -sy), (cr * sp * cy + -sr * -sy), 0.0], -# [cp * sy, (sr * sp * sy + cr * cy), (cr * sp * sy + -sr * cy), 0.0], -# [-sp, sr * cp, cr * cp, 0.0], -# [0.0, 0.0, 0.0, 1.0]] - - return [[cp * cy, cp * sy, -sp, 0.0], - [(sr * sp * cy + cr * -sy), (sr * sp * sy + cr * cy), sr * cp, 0.0], - [(cr * sp * cy + -sr * -sy), (cr * sp * sy + -sr * cy), cr * cp, 0.0], - [0.0, 0.0, 0.0, 1.0]] - -def MatrixTransformPoint(m, p): - return [m[0][0] * p[0] + m[1][0] * p[1] + m[2][0] * p[2] + m[3][0], - m[0][1] * p[0] + m[1][1] * p[1] + m[2][1] * p[2] + m[3][1], - m[0][2] * p[0] + m[1][2] * p[1] + m[2][2] * p[2] + m[3][2]] - - -def MatrixTransformNormal(m, p): - return [m[0][0] * p[0] + m[1][0] * p[1] + m[2][0] * p[2], - m[0][1] * p[0] + m[1][1] * p[1] + m[2][1] * p[2], - m[0][2] * p[0] + m[1][2] * p[1] + m[2][2] * p[2]] - -def MatrixMultiply(b, a): - return [[ - a[0][0] * b[0][0] + a[0][1] * b[1][0] + a[0][2] * b[2][0], - a[0][0] * b[0][1] + a[0][1] * b[1][1] + a[0][2] * b[2][1], - a[0][0] * b[0][2] + a[0][1] * b[1][2] + a[0][2] * b[2][2], - 0.0, - ],[ - a[1][0] * b[0][0] + a[1][1] * b[1][0] + a[1][2] * b[2][0], - a[1][0] * b[0][1] + a[1][1] * b[1][1] + a[1][2] * b[2][1], - a[1][0] * b[0][2] + a[1][1] * b[1][2] + a[1][2] * b[2][2], - 0.0, - ],[ - a[2][0] * b[0][0] + a[2][1] * b[1][0] + a[2][2] * b[2][0], - a[2][0] * b[0][1] + a[2][1] * b[1][1] + a[2][2] * b[2][1], - a[2][0] * b[0][2] + a[2][1] * b[1][2] + a[2][2] * b[2][2], - 0.0, - ],[ - a[3][0] * b[0][0] + a[3][1] * b[1][0] + a[3][2] * b[2][0] + b[3][0], - a[3][0] * b[0][1] + a[3][1] * b[1][1] + a[3][2] * b[2][1] + b[3][1], - a[3][0] * b[0][2] + a[3][1] * b[1][2] + a[3][2] * b[2][2] + b[3][2], - 1.0, - ]] - -def MatrixSetupTransform(forward, left, up, origin): - return [[forward[0], forward[1], forward[2], origin[0]], - [left[0], left[1], left[2], origin[1]], - [up[0], up[1], up[2], origin[2]], - [0.0, 0.0, 0.0, 1.0]] - -# our own logger class. it works just the same as a normal logger except -# all info messages get show. -class Logger(logging.Logger): - def __init__(self, name,level = logging.NOTSET): - logging.Logger.__init__(self, name, level) - - self.has_warnings = False - self.has_errors = False - self.has_critical = False - - def info(self, msg, *args, **kwargs): - apply(self._log,(logging.INFO, msg, args), kwargs) - - def warning(self, msg, *args, **kwargs): - logging.Logger.warning(self, msg, *args, **kwargs) - self.has_warnings = True - - def error(self, msg, *args, **kwargs): - logging.Logger.error(self, msg, *args, **kwargs) - self.has_errors = True - - def critical(self, msg, *args, **kwargs): - logging.Logger.critical(self, msg, *args, **kwargs) - self.has_errors = True - -# should be able to make this print to stdout in realtime and save MESSAGES -# as well. perhaps also have a log to file option -class LogHandler(logging.StreamHandler): - def __init__(self): - logging.StreamHandler.__init__(self, sys.stdout) - - if "md3_export_log" not in Blender.Text.Get(): - self.outtext = Blender.Text.New("md3_export_log") - else: - self.outtext = Blender.Text.Get('md3_export_log') - self.outtext.clear() - - self.lastmsg = '' - - def emit(self, record): - # print to stdout and to a new blender text object - msg = self.format(record) - - if msg == self.lastmsg: - return - - self.lastmsg = msg - self.outtext.write("%s\n" %msg) - - logging.StreamHandler.emit(self, record) - -logging.setLoggerClass(Logger) -log = logging.getLogger('md3_export') - -handler = LogHandler() -formatter = logging.Formatter('%(levelname)s %(message)s') -handler.setFormatter(formatter) - -log.addHandler(handler) -# set this to minimum output level. eg. logging.DEBUG, logging.WARNING, logging.ERROR -# logging.CRITICAL. logging.INFO will make little difference as these always get -# output'd -log.setLevel(logging.WARNING) - - -class BlenderGui: - def __init__(self): - text = """A log has been written to a blender text window. Change this window type to -a text window and you will be able to select the file md3_export_log.""" - - text = textwrap.wrap(text,40) - text += [''] - - if log.has_critical: - text += ['There were critical errors!!!!'] - - elif log.has_errors: - text += ['There were errors!'] - - elif log.has_warnings: - text += ['There were warnings'] - - # add any more text before here - text.reverse() - - self.msg = text - - Blender.Draw.Register(self.gui, self.event, self.button_event) - - def gui(self,): - quitbutton = Blender.Draw.Button("Exit", 1, 0, 0, 100, 20, "Close Window") - - y = 35 - - for line in self.msg: - BGL.glRasterPos2i(10,y) - Blender.Draw.Text(line) - y+=15 - - def event(self,evt, val): - if evt == Blender.Draw.ESCKEY: - Blender.Draw.Exit() - return - - def button_event(self,evt): - if evt == 1: - Blender.Draw.Exit() - return - - -def ApplyTransform(vert, matrix): - return vert * matrix - - -def UpdateFrameBounds(v, f): - for i in range(0, 3): - f.mins[i] = min(v[i], f.mins[i]) - for i in range(0, 3): - f.maxs[i] = max(v[i], f.maxs[i]) - - -def UpdateFrameRadius(f): - f.radius = RadiusFromBounds(f.mins, f.maxs) - - -def ProcessSurface(scene, blenderObject, md3, pathName, modelName): - # because md3 doesnt suppoort faceUVs like blender, we need to duplicate - # any vertex that has multiple uv coords - - vertDict = {} - indexDict = {} # maps a vertex index to the revised index after duplicating to account for uv - vertList = [] # list of vertices ordered by revised index - numVerts = 0 - uvList = [] # list of tex coords ordered by revised index - faceList = [] # list of faces (they index into vertList) - numFaces = 0 - - scene.makeCurrent() - Blender.Set("curframe", 1) - Blender.Window.Redraw() - - # get the object (not just name) and the Mesh, not NMesh - mesh = blenderObject.getData(False, True) - matrix = blenderObject.getMatrix('worldspace') - - surf = md3Surface() - surf.numFrames = md3.numFrames - surf.name = blenderObject.getName() - surf.ident = MD3_IDENT - - # create shader for surface - surf.shaders.append(md3Shader()) - surf.numShaders += 1 - surf.shaders[0].index = 0 - - log.info("Materials: %s", mesh.materials) - # :P - #shaderpath=Blender.Draw.PupStrInput("shader path for "+blenderObject.name+":", "", MAX_QPATH ) - shaderpath="" - if shaderpath == "" : - if not mesh.materials: - surf.shaders[0].name = pathName + blenderObject.name - else: - surf.shaders[0].name = pathName + mesh.materials[0].name - else: - if not mesh.materials: - surf.shaders[0].name = shaderpath + blenderObject.name - else: - surf.shaders[0].name = shaderpath + mesh.materials[0].name - - # process each face in the mesh - for face in mesh.faces: - - tris_in_this_face = [] #to handle quads and up... - - # this makes a list of indices for each tri in this face. a quad will be [[0,1,1],[0,2,3]] - for vi in range(1, len(face.v)-1): - tris_in_this_face.append([0, vi, vi + 1]) - - # loop across each tri in the face, then each vertex in the tri - for this_tri in tris_in_this_face: - numFaces += 1 - tri = md3Triangle() - tri_ind = 0 - for i in this_tri: - # get the vertex index, coords and uv coords - index = face.v[i].index - v = face.v[i].co - if mesh.faceUV == True: - uv = (face.uv[i][0], face.uv[i][1]) - elif mesh.vertexUV: - uv = (face.v[i].uvco[0], face.v[i].uvco[1]) - else: - uv = (0.0, 0.0) # handle case with no tex coords - - - if vertDict.has_key((index, uv)): - # if we've seen this exact vertex before, simply add it - # to the tris list of vertex indices - tri.indexes[tri_ind] = vertDict[(index, uv)] - else: - # havent seen this tri before - # (or its uv coord is different, so we need to duplicate it) - - vertDict[(index, uv)] = numVerts - - # put the uv coord into the list - # (uv coord are directly related to each vertex) - tex = md3TexCoord() - tex.u = uv[0] - tex.v = uv[1] - uvList.append(tex) - - tri.indexes[tri_ind] = numVerts - - # now because we have created a new index, - # we need a way to link it to the index that - # blender returns for NMVert.index - if indexDict.has_key(index): - # already there - each of the entries against - # this key represents the same vertex with a - # different uv value - ilist = indexDict[index] - ilist.append(numVerts) - indexDict[index] = ilist - else: - # this is a new one - indexDict[index] = [numVerts] - - numVerts += 1 - tri_ind +=1 - faceList.append(tri) - - # we're done with faces and uv coords - for t in uvList: - surf.uv.append(t) - - for f in faceList: - surf.triangles.append(f) - - surf.numTriangles = len(faceList) - surf.numVerts = numVerts - - # now vertices are stored as frames - - # all vertices for frame 1, all vertices for frame 2...., all vertices for frame n - # so we need to iterate across blender's frames, and copy out each vertex - for frameNum in range(1, md3.numFrames + 1): - Blender.Set("curframe", frameNum) - Blender.Window.Redraw() - - m = NMesh.GetRawFromObject(blenderObject.name) - - vlist = [0] * numVerts - for vertex in m.verts: - try: - vindices = indexDict[vertex.index] - except: - log.warning("Found a vertex in %s that is not part of a face", blenderObject.name) - continue - - vTx = ApplyTransform(vertex.co, matrix) - nTx = ApplyTransform(vertex.no, matrix) - UpdateFrameBounds(vTx, md3.frames[frameNum - 1]) - vert = md3Vert() - #vert.xyz = vertex.co[0:3] - #vert.normal = vert.Encode(vertex.no[0:3]) - vert.xyz = vTx[0:3] - vert.normal = vert.Encode(vertex.no[0:3]) - #print vertex.no - for ind in vindices: # apply the position to all the duplicated vertices - vlist[ind] = vert - - UpdateFrameRadius(md3.frames[frameNum - 1]) - - for vl in vlist: - surf.verts.append(vl) - - surf.Dump(log) - md3.surfaces.append(surf) - md3.numSurfaces += 1 - - -def Export(fileName): - if(fileName.find('.md3', -4) <= 0): - fileName += '.md3' - - log.info("Starting ...") - - log.info("Exporting MD3 format to: %s", fileName) - - pathName = StripGamePath(StripModel(fileName)) - log.info("Shader path name: %s", pathName) - - modelName = StripExtension(StripPath(fileName)) - log.info("Model name: %s", modelName) - - md3 = md3Object() - md3.ident = MD3_IDENT - md3.version = MD3_VERSION - - tagList = [] - - # get the scene - scene = Blender.Scene.getCurrent() - context = scene.getRenderingContext() - - scene.makeCurrent() - md3.numFrames = Blender.Get("curframe") - Blender.Set("curframe", 1) - - # create a bunch of blank frames, they'll be filled in by 'ProcessSurface' - for i in range(1, md3.numFrames + 1): - frame = md3Frame() - frame.name = "frame_" + str(i) - md3.frames.append(frame) - - # export all selected objects - objlist = Blender.Object.GetSelected() - - # process each object for the export - for obj in objlist: - # check if it's a mesh object - if obj.getType() == "Mesh": - log.info("Processing surface: %s", obj.name) - if len(md3.surfaces) == MD3_MAX_SURFACES: - log.warning("Hit md3 limit (%i) for number of surfaces, skipping ...", MD3_MAX_SURFACES, obj.getName()) - else: - ProcessSurface(scene, obj, md3, pathName, modelName) - elif obj.getType() == "Empty": # for tags, we just put em in a list so we can process them all together - if obj.name[0:4] == "tag_": - log.info("Processing tag: %s", obj.name) - tagList.append(obj) - md3.numTags += 1 - else: - log.info("Skipping object: %s", obj.name) - - - # work out the transforms for the tags for each frame of the export - for i in range(1, md3.numFrames + 1): - - # needed to update IPO's value, but probably not the best way for that... - scene.makeCurrent() - Blender.Set("curframe", i) - Blender.Window.Redraw() - for tag in tagList: - t = md3Tag() - matrix = tag.getMatrix('worldspace') - t.origin[0] = matrix[3][0] - t.origin[1] = matrix[3][1] - t.origin[2] = matrix[3][2] - - t.axis[0] = matrix[0][0] - t.axis[1] = matrix[0][1] - t.axis[2] = matrix[0][2] - - t.axis[3] = matrix[1][0] - t.axis[4] = matrix[1][1] - t.axis[5] = matrix[1][2] - - t.axis[6] = matrix[2][0] - t.axis[7] = matrix[2][1] - t.axis[8] = matrix[2][2] - t.name = tag.name - #t.Dump(log) - md3.tags.append(t) - - # export! - file = open(fileName, "wb") - md3.Save(file) - file.close() - md3.Dump(log) - -def FileSelectorCallback(fileName): - Export(fileName) - - BlenderGui() - -Blender.Window.FileSelector(FileSelectorCallback, "Export Quake3 MD3") \ No newline at end of file diff --git a/polymer-perf/eduke32/build/src/util/prhighpal.py b/polymer-perf/eduke32/build/src/util/prhighpal.py deleted file mode 100755 index 6947bd8e7..000000000 --- a/polymer-perf/eduke32/build/src/util/prhighpal.py +++ /dev/null @@ -1,300 +0,0 @@ -#!/usr/bin/python - -import sys; - -from numpy import array, zeros, ones, arange, uint32 -from numpy import vstack, hstack, hsplit, dstack, dsplit - -from PIL.Image import frombuffer - - -NBITS = 7; -RESIDBITS = 8-NBITS; -DIM = 1<>(i*8))&255; - - return imbyte; - - -def getdispimg(im): - "Get a reshaped version of the palette image IM suitable for viewing." - # 2^NBITS x 2^NBITS*2^NBITS --> 2^(NBITS + NBITS/2) x 2^NBITS*2^(NBITS - NBITS/2) - - if (im.shape != (DIM, DIM*DIM, 3)): - raise ValueError("image must have shape (DIM, DIM*DIM, 3)"); - - dimfactor = 1<<(NBITS/2); - return vstack(hsplit(im, dimfactor)); - - -def getPILimg(im): - sz = im.shape; - return frombuffer("RGB", [sz[1], sz[0]], im, "raw", "RGB", 0, 1); - - -def saveimage(im, filename): - getPILimg(im).save(filename); - -def showpalimg(im): - getPILimg(getdispimg(im)).show(); - - -### utility functions - -## port of Octave's rbg2hsv -def rgb2hsv(im): - if (im.dtype=='uint8'): - im = imitof(im); - - r, g, b = im[..., 0], im[..., 1], im[..., 2]; - s, v = im.min(2), im.max(2); - dif = v-s; - - colored = (s != v); - - h = zeros(r.shape, im.dtype); - - # blue hue - idx = ((v==b) & colored); - h[idx] = 2./3 + 1./6*(r[idx]-g[idx])/dif[idx]; - - # green hue - idx = ((v==g) & colored); - h[idx] = 1./3 + 1./6*(b[idx]-r[idx])/dif[idx]; - - # red hue - idx = ((v==r) & colored); - h[idx] = 1./6*(g[idx]-b[idx])/dif[idx]; - h[idx] %= 1; - - s[~colored] = 0; - s[colored] = 1.0 - s[colored]/v[colored]; - - return dstack((h,s,v)); - - -## port of Octave's hsv2rbg -def hsv2rgb(imh): - imh[imh<0] = 0; - imh[imh>1] = 1; - - h, s, v = imh[..., 0], imh[..., 1], imh[..., 2]; - - rgb = v*(1.0-s); - rgb = dstack((rgb, rgb, rgb)); - - hue = dstack((h-2./3, h, h-1./3))%1; - f = s*v; - f = dstack((f, f, f)); - - rgb += f * (6.0 * (hue < 1./6)*hue - + ((hue >= 1./6) & (hue < 1./2)) - + ((hue >= 1./2) & (hue < 2./3))*(4.0 - 6.0*hue)); - - return imftoi(rgb); - - -def imftoi(im): - im = im.copy(); - if (im.dtype=='uint8'): - return im - im *= CONVFACT; - im[im>255] = 255; - return im.astype('uint8'); - -def imitof(im): - if (im.dtype=='float32'): - return im.copy(); - return im.astype('float32')/CONVFACT; - - -### -def genpal(basepal, basepalhsv, pal): - "Generate a highpalookup image for palette number PAL. \ -BASEPALHSV should the precomputed HSV representation of BASEPAL." - - if (basepal.dtype != 'uint8'): - raise TypeError('BASEPAL should be uint8.'); - - if (pal==0): - return basepal; - - bph = basepalhsv; - h,s,v = bph[..., 0], bph[..., 1], bph[..., 2]; - - bluemask = (h>0.52) & (h<0.8) & (s>0.2); - - # all true mask will be used unless overridden - mask = ones(h.shape, 'bool'); - - -## PHRP r176 defs: -# -# tint { pal 1 red 100 green 120 blue 148 flags 1 } -# tint { pal 2 red 255 green 48 blue 0 flags 0 } -# tint { pal 4 red 0 green 0 blue 0 flags 0 } -# tint { pal 6 red 224 green 255 blue 112 flags 3 } -# tint { pal 7 red 172 green 157 blue 140 flags 0 } -# tint { pal 8 red 199 green 226 blue 113 flags 1 } -# -# bit 1: greyscale (max) -# bit 2: invert (255-x) -# colorization: min(int(C*C')/64, 255) - - if (pal in [1,2,4,6,7,8]): - rgbf = { 1: [100, 120, 148, 1], - 2: [255, 48, 0, 0], - 4: [0, 0, 0, 0], - 6: [224, 255, 112, 3], - 7: [172, 157, 140, 0], - 8: [199, 226, 113, 1]} - - newrgb = basepal.astype('uint32'); - - flags = rgbf[pal][3] - - if (flags&1): # greyscale - newrgb = newrgb.max(2); - newrgb = dstack((newrgb, newrgb, newrgb)).copy(); - - if (flags&2): # invert - newrgb = 255-newrgb; - - # colorize - for i in range(3): - newrgb[:,:,i] *= rgbf[pal][i] - newrgb[:,:,i] /= 255 - newrgb[newrgb>255] = 255 - - return newrgb.astype('uint8'); - -# plagman: -# if (pal==1): -# h[:] = 0.66; - -# elif (pal==6): -# h[:] = 0.33; -# v = 1.0 - v; - - elif (pal==20): - m1 = ((h>0.6) & (h<0.7)); - m2 = ((h>0.04) & (h<0.13)); - m3 = ((h>0.7) & (h<0.9)); - m4 = ((h>0.3) & (h<0.36)); - mask = m1 | m2 | m3 | m4; - - # blue to gray by removing all saturation - s[m1] = 0.0; - # orange and brown to blue - h[m2] = 0.66; - # purple and reddish to blue - h[m3] = 0.66 - # green to blue - h[m4] = 0.66; - -# helixhorned: - elif (pal==11): - mask = bluemask; - h[mask] = green; - s[mask] += 0.1; - - elif (pal==12): - mask = bluemask; - h[mask] = 0.0; - s[mask] = 0.0; - - elif (pal==13): - mask = bluemask; - h[mask] = 0.0; - s[mask] = 0.0; - v[mask] *= 0.7; - - elif (pal==16): - mask = bluemask; - s[mask] += 0.1; - v[mask] -= 0.1; - - elif (pal==21): - mask = bluemask; - h[mask] = red; - s[mask] += 0.3; - - elif (pal==23): - mask = bluemask; - h[mask] = yellow; - s[mask] += 0.12; - v[mask] *= 1.15; - - elif (pal==99): - mask = bluemask; - v[mask] = 0; - -# user: -# ... - - else: - raise ValueError("unknown pal {0}!".format(pal)); - - # --- - newrgb = hsv2rgb(dstack((h, s, v))); - - nmask = ~mask; - - r = mask*newrgb[:,:,0] + nmask*basepal[:,:,0]; - g = mask*newrgb[:,:,1] + nmask*basepal[:,:,1]; - b = mask*newrgb[:,:,2] + nmask*basepal[:,:,2]; - - # PIL doesn't seem to like views/shallow copies - return dstack((r, g, b)).copy(); - - -## main -if (__name__ == "__main__"): - - argc = len(sys.argv); - if (argc == 1): - print "Usage: python prhighpal.py (palnums ...)" - sys.exit(); - - print "Generating base palette..." - bp = genbasepal(); - bph = rgb2hsv(bp); - - for i in xrange(1, argc): - palnum = int(sys.argv[i]); - filename = "hipal{0}_gen.png".format(palnum); - print "Generating palnum", palnum, "image ..."; - palimg = genpal(bp.copy(), bph.copy(), palnum); - print "Writing", filename, "..."; - saveimage(palimg, filename); - - print "\nDEF code:\n" - for i in xrange(1, argc): - palnum = int(sys.argv[i]); - if (palnum==0): - continue; - filename = "hipal{0}_gen.png".format(palnum); - print "highpalookup { pal", palnum, "file", filename, "}"; diff --git a/polymer-perf/eduke32/build/src/util/transpal.c b/polymer-perf/eduke32/build/src/util/transpal.c deleted file mode 100644 index 1f3456365..000000000 --- a/polymer-perf/eduke32/build/src/util/transpal.c +++ /dev/null @@ -1,270 +0,0 @@ -// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman -// Ken Silverman's official web site: "http://www.advsys.net/ken" -// See the included license file "BUILDLIC.TXT" for license info. -// -// This file has been modified from Ken Silverman's original release -// by Jonathon Fowler (jonof@edgenetwk.com) - -#include "compat.h" -#include "pragmas.h" - -#define MAXPALOOKUPS 256 - -static int numpalookups, transratio; -static char palettefilename[13], origpalookup[MAXPALOOKUPS<<8]; -static char palette[768], palookup[MAXPALOOKUPS<<8], transluc[65536]; -static char closestcol[64][64][64]; - -#define FASTPALGRIDSIZ 8 -static int rdist[129], gdist[129], bdist[129]; -static char colhere[((FASTPALGRIDSIZ+2)*(FASTPALGRIDSIZ+2)*(FASTPALGRIDSIZ+2))>>3]; -static char colhead[(FASTPALGRIDSIZ+2)*(FASTPALGRIDSIZ+2)*(FASTPALGRIDSIZ+2)]; -static int colnext[256]; -static char coldist[8] = {0,1,2,3,4,3,2,1}; -static int colscan[27]; - - - -char getclosestcol(int r, int g, int b) -{ - int i, j, k, dist, mindist, retcol; - int *rlookup, *glookup, *blookup; - char *ptr; - - if (closestcol[r][g][b] != 255) return(closestcol[r][g][b]); - - j = (r>>3)*FASTPALGRIDSIZ*FASTPALGRIDSIZ+(g>>3)*FASTPALGRIDSIZ+(b>>3)+FASTPALGRIDSIZ*FASTPALGRIDSIZ+FASTPALGRIDSIZ+1; - mindist = min(rdist[coldist[r&7]+64+8],gdist[coldist[g&7]+64+8]); - mindist = min(mindist,bdist[coldist[b&7]+64+8]); - mindist++; - - rlookup = (int *)&rdist[64-r]; - glookup = (int *)&gdist[64-g]; - blookup = (int *)&bdist[64-b]; - - retcol = -1; - for(k=26;k>=0;k--) - { - i = colscan[k]+j; if ((colhere[i>>3]&(1<<(i&7))) == 0) continue; - for(i=colhead[i];i>=0;i=colnext[i]) - { - ptr = (char *)&palette[i*3]; - dist = glookup[ptr[1]]; if (dist >= mindist) continue; - dist += rlookup[ptr[0]]; if (dist >= mindist) continue; - dist += blookup[ptr[2]]; if (dist >= mindist) continue; - mindist = dist; retcol = i; - } - } - if (retcol < 0) - { - mindist = 0x7fffffff; - ptr = (char *)&palette[768-3]; - for(i=255;i>=0;i--,ptr-=3) - { - dist = glookup[ptr[1]]; if (dist >= mindist) continue; - dist += rlookup[ptr[0]]; if (dist >= mindist) continue; - dist += blookup[ptr[2]]; if (dist >= mindist) continue; - mindist = dist; retcol = i; - } - } - ptr = (char *)&closestcol[r][g][b]; - *ptr = retcol; - if ((r >= 4) && (ptr[(-2)<<12] == retcol)) ptr[(-3)<<12] = retcol, ptr[(-2)<<12] = retcol, ptr[(-1)<<12] = retcol; - if ((g >= 4) && (ptr[(-2)<<6] == retcol)) ptr[(-3)<<6] = retcol, ptr[(-2)<<6] = retcol, ptr[(-1)<<6] = retcol; - if ((b >= 4) && (ptr[(-2)] == retcol)) ptr[(-3)] = retcol, ptr[(-2)] = retcol, ptr[(-1)] = retcol; - if ((r < 64-4) && (ptr[(2)<<12] == retcol)) ptr[(3)<<12] = retcol, ptr[(2)<<12] = retcol, ptr[(1)<<12] = retcol; - if ((g < 64-4) && (ptr[(2)<<6] == retcol)) ptr[(3)<<6] = retcol, ptr[(2)<<6] = retcol, ptr[(1)<<6] = retcol; - if ((b < 64-4) && (ptr[(2)] == retcol)) ptr[(3)] = retcol, ptr[(2)] = retcol, ptr[(1)] = retcol; - if ((r >= 2) && (ptr[(-1)<<12] == retcol)) ptr[(-1)<<12] = retcol; - if ((g >= 2) && (ptr[(-1)<<6] == retcol)) ptr[(-1)<<6] = retcol; - if ((b >= 2) && (ptr[(-1)] == retcol)) ptr[(-1)] = retcol; - if ((r < 64-2) && (ptr[(1)<<12] == retcol)) ptr[(1)<<12] = retcol; - if ((g < 64-2) && (ptr[(1)<<6] == retcol)) ptr[(1)<<6] = retcol; - if ((b < 64-2) && (ptr[(1)] == retcol)) ptr[(1)] = retcol; - return(retcol); -} - -char getpalookup(char dashade, char dacol) -{ - int r, g, b, t; - char *ptr; - - ptr = (char *)&palette[dacol*3]; - t = divscale16(numpalookups-dashade,numpalookups); - r = ((ptr[0]*t+32768)>>16); - g = ((ptr[1]*t+32768)>>16); - b = ((ptr[2]*t+32768)>>16); - return(getclosestcol(r,g,b)); -} - -char gettrans(char dat1, char dat2, int datransratio) -{ - int r, g, b; - char *ptr, *ptr2; - - ptr = (char *)&palette[dat1*3]; - ptr2 = (char *)&palette[dat2*3]; - r = ptr[0]; r += (((ptr2[0]-r)*datransratio+128)>>8); - g = ptr[1]; g += (((ptr2[1]-g)*datransratio+128)>>8); - b = ptr[2]; b += (((ptr2[2]-b)*datransratio+128)>>8); - return(getclosestcol(r,g,b)); -} - -void initfastcolorlookup(int rscale, int gscale, int bscale) -{ - int i, j, x, y, z; - char *ptr; - - j = 0; - for(i=64;i>=0;i--) - { - //j = (i-64)*(i-64); - rdist[i] = rdist[128-i] = j*rscale; - gdist[i] = gdist[128-i] = j*gscale; - bdist[i] = bdist[128-i] = j*bscale; - j += 129-(i<<1); - } - - clearbufbyte(FP_OFF(colhere),sizeof(colhere),0L); - clearbufbyte(FP_OFF(colhead),sizeof(colhead),0L); - - ptr = (char *)&palette[768-3]; - for(i=255;i>=0;i--,ptr-=3) - { - j = (ptr[0]>>3)*FASTPALGRIDSIZ*FASTPALGRIDSIZ+(ptr[1]>>3)*FASTPALGRIDSIZ+(ptr[2]>>3)+FASTPALGRIDSIZ*FASTPALGRIDSIZ+FASTPALGRIDSIZ+1; - if (colhere[j>>3]&(1<<(j&7))) colnext[i] = colhead[j]; else colnext[i] = -1; - colhead[j] = i; - colhere[j>>3] |= (1<<(j&7)); - } - - i = 0; - for(x=-FASTPALGRIDSIZ*FASTPALGRIDSIZ;x<=FASTPALGRIDSIZ*FASTPALGRIDSIZ;x+=FASTPALGRIDSIZ*FASTPALGRIDSIZ) - for(y=-FASTPALGRIDSIZ;y<=FASTPALGRIDSIZ;y+=FASTPALGRIDSIZ) - for(z=-1;z<=1;z++) - colscan[i++] = x+y+z; - i = colscan[13]; colscan[13] = colscan[26]; colscan[26] = i; -} - -int main(int argc, char **argv) -{ - char col, ch; - short orignumpalookups; - int fil, i, j, rscale, gscale, bscale; - char buf[65536]; - - ch = 13; - if (argc>1) { - if (argv[1][0] == '-') { - if (argv[1][1] == 't') { ch = 32; puts("Updating translucency table ONLY"); } - argc--; - argv++; - } - } - - if ((argc != 3) && (argc != 6)) - { - printf("TRANSPAL [-t] [numshades][trans#(0-inv,256-opa)][r][g][b] by Kenneth Silverman\n"); - printf(" Ex #1: transpal 32 170 30 59 11 (I use these values in my BUILD demo)\n"); - printf(" ÀÄÄÁÄÄÁÄÄÄ The RGB scales are optional\n"); - printf(" Ex #2: transpal 64 160\n\n"); - printf("Once tables are generated, the optional -t switch determines what to save:\n"); - printf(" Exclude -t to update both the shade table and transluscent table\n"); - printf(" Include -t to update the transluscent table ONLY\n"); - exit(0); - } - - strcpy(palettefilename,"palette.dat"); - numpalookups = atol(argv[1]); - transratio = atol(argv[2]); - - if (argc == 6) - { - rscale = atol(argv[3]); - gscale = atol(argv[4]); - bscale = atol(argv[5]); - } - else - { - rscale = 30; - gscale = 59; - bscale = 11; - } - - if ((numpalookups < 1) || (numpalookups > 256)) - { printf("Invalid number of shades\n"); exit(0); } - if ((transratio < 0) || (transratio > 256)) - { printf("Invalid transluscent ratio\n"); exit(0); } - - if ((fil = Bopen(palettefilename,BO_BINARY|BO_RDONLY,BS_IREAD)) == -1) - { - printf("%s not found",palettefilename); - return(0); - } - Bread(fil,palette,768); - Bread(fil,&orignumpalookups,2); orignumpalookups = B_LITTLE16(orignumpalookups); - orignumpalookups = min(max(orignumpalookups,1),256); - Bread(fil,origpalookup,(int)orignumpalookups<<8); - Bclose(fil); - - clearbuf(buf,65536>>2,0L); - - initfastcolorlookup(rscale,gscale,bscale); - clearbuf(closestcol,262144>>2,0xffffffff); - - for(i=0;i>2)+buf,(int)col); - drawpixel(((((i<<1)+1)*320+(j+8))>>2)+buf,(int)col); - } - - for(i=0;i<256;i++) - for(j=0;j<6;j++) - { - drawpixel((((j+132+0)*320+(i+8))>>2)+buf,i); - - drawpixel((((i+132+8)*320+(j+0))>>2)+buf,i); - } - - for(i=0;i<256;i++) - for(j=0;j<256;j++) - { - col = gettrans((char)i,(char)j,transratio); - transluc[(i<<8)+j] = col; - - drawpixel((((j+132+8)*320+(i+8))>>2)+buf,(int)col); - } - - if (ch == 13) - { - short s; - if ((fil = Bopen(palettefilename,BO_BINARY|BO_TRUNC|BO_CREAT|BO_WRONLY,BS_IREAD|BS_IWRITE)) == -1) - { printf("Couldn't save file %s",palettefilename); return(0); } - Bwrite(fil,palette,768); - s = B_LITTLE16(numpalookups); Bwrite(fil,&s,2); - Bwrite(fil,palookup,numpalookups<<8); - Bwrite(fil,transluc,65536); - Bclose(fil); - printf("Shade table AND transluscent table updated\n"); - } - else if (ch == 32) - { - short s; - if ((fil = Bopen(palettefilename,BO_BINARY|BO_TRUNC|BO_CREAT|BO_WRONLY,BS_IREAD|BS_IWRITE)) == -1) - { printf("Couldn't save file %s",palettefilename); return(0); } - Bwrite(fil,palette,768); - s = B_LITTLE16(orignumpalookups); Bwrite(fil,&s,2); - Bwrite(fil,origpalookup,(int)orignumpalookups<<8); - Bwrite(fil,transluc,65536); - Bclose(fil); - printf("Transluscent table updated\n"); - } - else - printf("Palette file wasn't touched\n"); - - return 0; -} - diff --git a/polymer-perf/eduke32/build/src/util/vgafont.cpp b/polymer-perf/eduke32/build/src/util/vgafont.cpp deleted file mode 100644 index 9e1b000bc..000000000 --- a/polymer-perf/eduke32/build/src/util/vgafont.cpp +++ /dev/null @@ -1,139 +0,0 @@ -// VGA Font Grabber -// Copyright (c) 1997 Jonathon Fowler -// This is a DOS program originally written with Borland Turbo C++ for DOS 3.1 - - -#include -#include - -void main(void) -{ - int font, width, height, numchars; - struct REGPACK r; - FILE *fp; - - printf("VGA Font Grabber\n" - "Copyright (c) 1997 Jonathon Fowler\n"); - - do { - printf("\nSelect which font to grab:\n" - " 1. 8-by-8 ROM\n" - " 2. 8-by-14 ROM\n" - " 3. 8-by-16 ROM\n" - " 4. 9-by-16 ROM\n" - " 5. 9-by-14 ROM\n" - " 6. Quit\n" - " > "); - scanf("%d",&font); - - switch (font) { - case 1: - printf("Getting 8-by-8 ROM font..."); - - if ((fp = fopen("88vga.dat", "wb")) != NULL) { - width = 8; - height = 8; - numchars = 256; - - r.r_ax = 0x1130; // locate the font (1st half) - r.r_bx = 0x0300; - intr(0x10, &r); - - fwrite(MK_FP(r.r_es, r.r_bp), 1, (8 * 128), fp); - - r.r_ax = 0x1130; // locate the font (2nd half) - r.r_bx = 0x0400; - intr(0x10, &r); - - fwrite(MK_FP(r.r_es, r.r_bp), 1, (8 * 128), fp); - - fclose(fp); - } - - printf("Done\n"); - break; - case 2: - printf("Getting 8-by-14 ROM font..."); - - if ((fp = fopen("814vga.dat", "wb")) != NULL) { - width = 8; - height = 14; - numchars = 256; - - r.r_ax = 0x1130; // locate the font - r.r_bx = 0x0200; - intr(0x10, &r); - - fwrite(MK_FP(r.r_es, r.r_bp), 1, (14 * 256), fp); - - fclose(fp); - } - - printf("Done\n"); - break; - case 3: - printf("Getting 8-by-16 ROM font..."); - - if ((fp = fopen("816vga.dat", "wb")) != NULL) { - width = 8; - height = 16; - numchars = 256; - - r.r_ax = 0x1130; // locate the font - r.r_bx = 0x0600; - intr(0x10, &r); - - fwrite(MK_FP(r.r_es, r.r_bp), 1, (16 * 256), fp); - - fclose(fp); - } - - printf("Done\n"); - break; - case 4: - printf("Getting 9-by-16 ROM font..."); - - if ((fp = fopen("916vga.dat", "wb")) != NULL) { - width = 9; - height = 16; - numchars = 256; - - r.r_ax = 0x1130; // locate the font - r.r_bx = 0x0700; - intr(0x10, &r); - - fwrite(MK_FP(r.r_es, r.r_bp), 1, (16 * 256) *2, fp); - - fclose(fp); - } - - printf("Done\n"); - break; - case 5: - printf("Getting 9-by-14 ROM font..."); - - if ((fp = fopen("914vga.dat", "wb")) != NULL) { - width = 9; - height = 16; - numchars = 256; - - r.r_ax = 0x1130; // locate the font - r.r_bx = 0x0500; - intr(0x10, &r); - - fwrite(MK_FP(r.r_es, r.r_bp), 1, (14 * 256)* 2, fp); - - fclose(fp); - } - - printf("Done\n"); - break; - case 6: - break; - default: - printf("Please try again\n"); - break; - } - } while (font != 6); - -} diff --git a/polymer-perf/eduke32/build/src/util/wad2art.c b/polymer-perf/eduke32/build/src/util/wad2art.c deleted file mode 100644 index 4de10dc76..000000000 --- a/polymer-perf/eduke32/build/src/util/wad2art.c +++ /dev/null @@ -1,283 +0,0 @@ -// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman -// Ken Silverman's official web site: "http://www.advsys.net/ken" -// See the included license file "BUILDLIC.TXT" for license info. -// -// This file has been modified from Ken Silverman's original release -// by Jonathon Fowler (jonof@edgenetwk.com) - -#include "compat.h" -#include "pragmas.h" - -#define MAXWADS 4096 - -static int artversion, localtilestart, localtileend; -static int fil1, fil2; -static char wadata[MAXWADS][8]; -static int wadplc[MAXWADS], wadlen[MAXWADS], numwads; -static int xoffses[1024], ylookup[256], picanm[MAXWADS]; -static short tilesizx[MAXWADS], tilesizy[MAXWADS]; -static char pal[768], palookup[8192]; -static char screen[65536], tempbuf[131072]; - - -void loadwadheader(void) -{ - int i, j; - - Bread(fil1,&tempbuf[0],12); - numwads = ((int)tempbuf[4])+(((int)tempbuf[5])<<8)+(((int)tempbuf[6])<<16)+(((int)tempbuf[7])<<24); - i = ((int)tempbuf[8])+(((int)tempbuf[9])<<8)+(((int)tempbuf[10])<<16)+(((int)tempbuf[11])<<24); - Blseek(fil1,i,BSEEK_SET); - Bread(fil1,&tempbuf[0],numwads*16); - j = 0; - for(i=0;i>= 2; - - i = 0; - while (Bstrncasecmp(wadata[i],"COLORMAP",8) != 0) i++; - Blseek(fil1,wadplc[i],BSEEK_SET); - Bread(fil1,palookup,8192); - - if ((fil3 = Bopen("palette.dat",BO_BINARY|BO_TRUNC|BO_CREAT|BO_WRONLY,BS_IREAD|BS_IWRITE)) == -1) - { printf("Cannot save palette.dat\n"); exit(0); } - Bwrite(fil3,pal,768); - danumshades = 32; - Bwrite(fil3,&danumshades,2); - Bwrite(fil3,palookup,8192); - Bclose(fil3); -} - -void saveart (short tilenum, short xlen, short ylen) -{ - int i, x, p, pend; - - pend = ylookup[ylen]; - - tilesizx[tilenum] = xlen; - tilesizy[tilenum] = ylen; - i = 0; - for(x=0;x= 10000) buffer[j++] = ((i/10000)%10)+48; - if (i >= 1000) buffer[j++] = ((i/1000)%10)+48; - if (i >= 100) buffer[j++] = ((i/100)%10)+48; - if (i >= 10) buffer[j++] = ((i/10)%10)+48; - buffer[j++] = (i%10)+48; - - buffer[j++] = 13; - buffer[j++] = 10; - Bwrite(fil3,&buffer[0],j); - } - - Bclose(fil3); -} - -void showart (char *part) -{ - char yoff, ylen; - short xsiz, ysiz; - int i, j, z, zx, zzx, x, y, p, pend, junk, curplc; - - curplc = -1; - if ((Bstrncasecmp(part,"L_START",7) == 0) || (Bstrncasecmp(part,"S_START",7) == 0) || (Bstrncasecmp(part,"P_START",7) == 0)) - { - if (Bstrncasecmp(part,"L_START",7) == 0) - z = 462; - else - { - z = 0; - while (Bstrncasecmp(wadata[z],part,7) != 0) z++; - z++; - } - - do - { - if (Bstrncasecmp(wadata[z],"P1_START",8) == 0) z++; - if (Bstrncasecmp(wadata[z],"P1_END",6) == 0) z++; - if (Bstrncasecmp(wadata[z],"P2_START",8) == 0) z++; - if (Bstrncasecmp(wadata[z],"S_START",7) == 0) break; - if (Bstrncasecmp(wadata[z],"S_END",5) == 0) break; - if (Bstrncasecmp(wadata[z],"P_END",5) == 0) break; - - if (curplc != wadplc[z]) Blseek(fil1,wadplc[z],BSEEK_SET); - read(fil1,&tempbuf[0],wadlen[z]); - curplc = wadplc[z]+wadlen[z]; - - xsiz = (int)tempbuf[0]+(((int)tempbuf[1])<<8); - ysiz = (int)tempbuf[2]+(((int)tempbuf[3])<<8); - if ((xsiz <= 0) || (ysiz <= 0) || (xsiz > 320) || (ysiz > 200)) goto skipit; - i = 8; - for(zx=0;zx>2,0xffffffff); - - for(x=0;x> 24) + 4096]; - else c = shlookup[a >> 12]; - a >>= c&0xff; - a = (a&0xffff0000)|(sqrtable[a]); - a >>= ((c&0xff00) >> 8); - - return a; -} - -static inline int msqrtasm(unsigned int c) -{ - unsigned int a,b; - - a = 0x40000000l; - b = 0x20000000l; - do { - if (c >= a) { - c -= a; - a += b*4; - } - a -= b; - a >>= 1; - b >>= 2; - } while (b); - if (c >= a) a++; - a >>= 1; - return a; -} - -static void initksqrt(void) -{ - int i, j, k; - - j = 1; k = 0; - for(i=0;i<4096;i++) - { - if (i >= j) { j <<= 2; k++; } - sqrtable[i] = (unsigned short)(msqrtasm((i<<18)+131072)<<1); - shlookup[i] = (k<<1)+((10-k)<<8); - if (i < 256) shlookup[i+4096] = ((k+6)<<1)+((10-(k+6))<<8); - } -} - - -int inside(int x, int y, short sectnum) -{ - walltype *wal; - int i, x1, y1, x2, y2; - char cnt; - - cnt = 0; - - wal = &wall[sector[sectnum].wallptr]; - for(i=sector[sectnum].wallnum;i>0;i--) - { - y1 = wal->y-y; y2 = wall[wal->point2].y-y; - if ((y1^y2) < 0) - { - x1 = wal->x-x; x2 = wall[wal->point2].x-x; - - if ((x1^x2) < 0) - cnt ^= (x1*y2= 0) - cnt ^= 1; - } - wal++; - } - return(cnt); -} - -int readbyte(void) -{ - if (filpos >= fileng) return(-1); - if ((filpos&16383) == 0) Bread(filhandle,filebuf,16384); - filpos++; - return((int)filebuf[(filpos-1)&16383]); -} - -int readline(void) -{ - int i, ch; - - do - { - do - { - ch = readbyte(); - if (ch < 0) return(0); - } while ((ch == 13) || (ch == 10)); - - i = 0; tempbuf[0] = 0; - while ((ch != 13) && (ch != 10)) - { - if (ch < 0) return(0); - if (ch == ';') - { - do - { - if (ch < 0) return(0); - ch = readbyte(); - } while ((ch != 13) && (ch != 10)); - break; - } - if ((ch == 32) || (ch == 9)) ch = ','; - if ((ch != ',') || (i == 0) || (tempbuf[i-1] != ',')) - { tempbuf[i++] = ch; tempbuf[i] = 0; } - ch = readbyte(); - } - if ((i > 0) && (tempbuf[i-1] == ',')) tempbuf[i-1] = 0; - } while (i <= 0); - return(i); -} - -void parsescript(void) -{ - int i, j, k, l, lasti, breakout, tstart, tend, textnum, frontbackstat; - int spritenumstat, slen; - char ch; - - clearbufbyte(FP_OFF(sectspri),MAXSECTS*8*sizeof(short),0xffffffff); - - if (scriptname[0] == 0) - { - for(i=0;i<4096;i++) texturelookup[i] = i; - return; - } - - if ((filhandle = Bopen(scriptname,BO_BINARY|BO_RDONLY,BS_IREAD)) == -1) - { - printf("Could not find %s\n",scriptname); - exit(0); - } - filpos = 0; fileng = Bfilelength(filhandle); - while (readline() != 0) - { - i = 0; j = 0; lasti = 0; - while (1) - { - if ((tempbuf[i] == ',') || (tempbuf[i] == 0)) - { - if (tempbuf[i] == 0) { breakout = 1; } - else { breakout = 0, tempbuf[i] = 0; } - - if (j == 0) - { - if (tempbuf[lasti] == '[') - { - definemode = 0; - thingtypemode = 0; - texturelookupmode = 0; - tagtypemode = 0; - sectypemode = 0; - } - - if (Bstrcasecmp(&tempbuf[lasti],"#define") == 0) - definemode = 1; - - if (thingtypemode == 1) - { - thingoff[numthings] = thingopnum; - - k = lasti; - while ((tempbuf[k] != 0) && (tempbuf[k] != '-')) k++; - - if (tempbuf[k] == '-') - { - tempbuf[k] = 0; - thingnum[numthings] = atol(&tempbuf[lasti]); - thingnum2[numthings] = atol(&tempbuf[k+1]); - } - else - { - thingnum[numthings] = atol(&tempbuf[lasti]); - thingnum2[numthings] = thingnum[numthings]; - } - - numthings++; - } - else if (Bstrcasecmp(&tempbuf[lasti],"[THINGTYPES]") == 0) - thingtypemode = 1; - - if (texturelookupmode == 1) - { - textnum = 0; - if ((tempbuf[lasti] >= 48) && (tempbuf[lasti] <= 57)) - { - k = lasti; - while ((tempbuf[k] != 0) && (tempbuf[k] != '-')) k++; - - if (tempbuf[k] == '-') - { - tempbuf[k] = 0; - tstart = atol(&tempbuf[lasti]); - tend = atol(&tempbuf[k+1]); - for(k=tstart;k<=tend;k++) - tempshort[textnum++] = k; - } - else - tempshort[textnum++] = atol(&tempbuf[lasti]); - } - else - { - slen = 0; - while (tempbuf[lasti+slen] != 0) - { - ch = tempbuf[lasti+slen]; - if ((ch >= 97) && (ch <= 122)) tempbuf[lasti+slen] -= 32; - slen++; - } - if (slen > 0) - for(k=inumwads-1;k>=0;k--) - if ((iwadata[k][slen] == 0) || (iwadata[k][slen] == 32)) - if ((iwadata[k][slen-1] != 0) && (iwadata[k][slen-1] != 32)) - { - for(l=slen-1;l>=0;l--) - if (tempbuf[lasti+l] != '?') - { - ch = iwadata[k][l]; - if ((ch >= 97) && (ch <= 122)) ch -= 32; - if (tempbuf[lasti+l] != ch) break; - } - if (l < 0) tempshort[textnum++] = k; - } - } - } - else if (Bstrcasecmp(&tempbuf[lasti],"[TEXTURELOOKUPS]") == 0) - texturelookupmode = 1; - - if (tagtypemode == 1) - { - tagoff[numtags] = tagopnum; - - k = lasti; - while ((tempbuf[k] != 0) && (tempbuf[k] != '-')) k++; - - if (tempbuf[k] == '-') - { - tempbuf[k] = 0; - tagnum[numtags] = atol(&tempbuf[lasti]); - tagnum2[numtags] = atol(&tempbuf[k+1]); - } - else - { - tagnum[numtags] = atol(&tempbuf[lasti]); - tagnum2[numtags] = tagnum[numtags]; - } - - numtags++; - } - else if (Bstrcasecmp(&tempbuf[lasti],"[TAGCONVERSIONS]") == 0) - tagtypemode = 1; - - if (sectypemode == 1) - { - secoff[numsecs] = secopnum; - - k = lasti; - while ((tempbuf[k] != 0) && (tempbuf[k] != '-')) k++; - - if (tempbuf[k] == '-') - { - tempbuf[k] = 0; - secnum[numsecs] = atol(&tempbuf[lasti]); - secnum2[numsecs] = atol(&tempbuf[k+1]); - } - else - { - secnum[numsecs] = atol(&tempbuf[lasti]); - secnum2[numsecs] = secnum[numsecs]; - } - numsecs++; - } - else if (Bstrcasecmp(&tempbuf[lasti],"[SECTORCONVERSIONS]") == 0) - sectypemode = 1; - - } - else if (j > 0) - { - if (definemode == 1) - { - defineptr[numdefines] = (char *)(&define[definecnt]); - for(k=lasti;k= 48) && (tempbuf[k+1] <= 57)) - thingval[thingopnum] = atol(&tempbuf[k+1]); - else - { - for(l=0;l= 48) && (tempbuf[lasti] <= 57)) - l = atol(&tempbuf[lasti]); - else - { - for(l=0;l=0;k--) texturelookup[tempshort[k]] = l; - } - - if (tagtypemode == 1) - { - for(k=lasti;k= 48) && (tempbuf[lasti] <= 57)) //1 DIGIT ONLY! - { - spritenumstat = tempbuf[lasti]-48; - lasti++; - } - - if (Bstrcasecmp(&tempbuf[lasti],"sprite.x") == 0) tagfield[tagopnum] = 0; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.y") == 0) tagfield[tagopnum] = 1; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.z") == 0) tagfield[tagopnum] = 2; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.cstat") == 0) tagfield[tagopnum] = 3; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.shade") == 0) tagfield[tagopnum] = 4; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.pal") == 0) tagfield[tagopnum] = 5; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.clipdist") == 0) tagfield[tagopnum] = 6; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.xrepeat") == 0) tagfield[tagopnum] = 7; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.yrepeat") == 0) tagfield[tagopnum] = 8; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.xoffset") == 0) tagfield[tagopnum] = 9; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.yoffset") == 0) tagfield[tagopnum] = 10; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.picnum") == 0) tagfield[tagopnum] = 11; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.ang") == 0) tagfield[tagopnum] = 12; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.xvel") == 0) tagfield[tagopnum] = 13; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.yvel") == 0) tagfield[tagopnum] = 14; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.zvel") == 0) tagfield[tagopnum] = 15; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.owner") == 0) tagfield[tagopnum] = 16; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.sectnum") == 0) tagfield[tagopnum] = 17; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.statnum") == 0) tagfield[tagopnum] = 18; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.lotag") == 0) tagfield[tagopnum] = 19; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.hitag") == 0) tagfield[tagopnum] = 20; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.extra") == 0) tagfield[tagopnum] = 21; - - if (Bstrcasecmp(&tempbuf[lasti],"sector.wallptr") == 0) tagfield[tagopnum] = 32; - if (Bstrcasecmp(&tempbuf[lasti],"sector.wallnum") == 0) tagfield[tagopnum] = 33; - if (Bstrcasecmp(&tempbuf[lasti],"sector.ceilingpicnum") == 0) tagfield[tagopnum] = 34; - if (Bstrcasecmp(&tempbuf[lasti],"sector.floorpicnum") == 0) tagfield[tagopnum] = 35; - if (Bstrcasecmp(&tempbuf[lasti],"sector.ceilingheinum") == 0) tagfield[tagopnum] = 36; - if (Bstrcasecmp(&tempbuf[lasti],"sector.floorheinum") == 0) tagfield[tagopnum] = 37; - if (Bstrcasecmp(&tempbuf[lasti],"sector.ceilingz") == 0) tagfield[tagopnum] = 38; - if (Bstrcasecmp(&tempbuf[lasti],"sector.floorz") == 0) tagfield[tagopnum] = 39; - if (Bstrcasecmp(&tempbuf[lasti],"sector.ceilingshade") == 0) tagfield[tagopnum] = 40; - if (Bstrcasecmp(&tempbuf[lasti],"sector.floorshade") == 0) tagfield[tagopnum] = 41; - if (Bstrcasecmp(&tempbuf[lasti],"sector.ceilingxpanning") == 0) tagfield[tagopnum] = 42; - if (Bstrcasecmp(&tempbuf[lasti],"sector.floorxpanning") == 0) tagfield[tagopnum] = 43; - if (Bstrcasecmp(&tempbuf[lasti],"sector.ceilingypanning") == 0) tagfield[tagopnum] = 44; - if (Bstrcasecmp(&tempbuf[lasti],"sector.floorypanning") == 0) tagfield[tagopnum] = 45; - if (Bstrcasecmp(&tempbuf[lasti],"sector.ceilingstat") == 0) tagfield[tagopnum] = 46; - if (Bstrcasecmp(&tempbuf[lasti],"sector.floorstat") == 0) tagfield[tagopnum] = 47; - if (Bstrcasecmp(&tempbuf[lasti],"sector.ceilingpal") == 0) tagfield[tagopnum] = 48; - if (Bstrcasecmp(&tempbuf[lasti],"sector.floorpal") == 0) tagfield[tagopnum] = 49; - if (Bstrcasecmp(&tempbuf[lasti],"sector.visibility") == 0) tagfield[tagopnum] = 50; - if (Bstrcasecmp(&tempbuf[lasti],"sector.lotag") == 0) tagfield[tagopnum] = 51; - if (Bstrcasecmp(&tempbuf[lasti],"sector.hitag") == 0) tagfield[tagopnum] = 52; - if (Bstrcasecmp(&tempbuf[lasti],"sector.extra") == 0) tagfield[tagopnum] = 53; - - if (Bstrcasecmp(&tempbuf[lasti],"wall.x") == 0) tagfield[tagopnum] = 64; - if (Bstrcasecmp(&tempbuf[lasti],"wall.y") == 0) tagfield[tagopnum] = 65; - if (Bstrcasecmp(&tempbuf[lasti],"wall.point2") == 0) tagfield[tagopnum] = 66; - if (Bstrcasecmp(&tempbuf[lasti],"wall.nextsector") == 0) tagfield[tagopnum] = 67; - if (Bstrcasecmp(&tempbuf[lasti],"wall.nextwall") == 0) tagfield[tagopnum] = 68; - if (Bstrcasecmp(&tempbuf[lasti],"wall.picnum") == 0) tagfield[tagopnum] = 69; - if (Bstrcasecmp(&tempbuf[lasti],"wall.overpicnum") == 0) tagfield[tagopnum] = 70; - if (Bstrcasecmp(&tempbuf[lasti],"wall.shade") == 0) tagfield[tagopnum] = 71; - if (Bstrcasecmp(&tempbuf[lasti],"wall.pal") == 0) tagfield[tagopnum] = 72; - if (Bstrcasecmp(&tempbuf[lasti],"wall.cstat") == 0) tagfield[tagopnum] = 73; - if (Bstrcasecmp(&tempbuf[lasti],"wall.xrepeat") == 0) tagfield[tagopnum] = 74; - if (Bstrcasecmp(&tempbuf[lasti],"wall.yrepeat") == 0) tagfield[tagopnum] = 75; - if (Bstrcasecmp(&tempbuf[lasti],"wall.xpanning") == 0) tagfield[tagopnum] = 76; - if (Bstrcasecmp(&tempbuf[lasti],"wall.ypanning") == 0) tagfield[tagopnum] = 77; - if (Bstrcasecmp(&tempbuf[lasti],"wall.lotag") == 0) tagfield[tagopnum] = 78; - if (Bstrcasecmp(&tempbuf[lasti],"wall.hitag") == 0) tagfield[tagopnum] = 79; - if (Bstrcasecmp(&tempbuf[lasti],"wall.extra") == 0) tagfield[tagopnum] = 80; - - tagfield[tagopnum] += (frontbackstat<<7) + (spritenumstat<<8); - - if ((tempbuf[k+1] >= 48) && (tempbuf[k+1] <= 57)) - tagval[tagopnum] = atol(&tempbuf[k+1]); - else if (Bstrcasecmp("tag",&tempbuf[k+1]) == 0) - tagval[tagopnum] = 0x80000000; - else - { - for(l=0;l= 48) && (tempbuf[lasti] <= 57)) //1 DIGIT ONLY! - { - spritenumstat = tempbuf[lasti]-48; - lasti++; - } - - if (Bstrcasecmp(&tempbuf[lasti],"sprite.x") == 0) secfield[secopnum] = 0; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.y") == 0) secfield[secopnum] = 1; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.z") == 0) secfield[secopnum] = 2; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.cstat") == 0) secfield[secopnum] = 3; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.shade") == 0) secfield[secopnum] = 4; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.pal") == 0) secfield[secopnum] = 5; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.clipdist") == 0) secfield[secopnum] = 6; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.xrepeat") == 0) secfield[secopnum] = 7; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.yrepeat") == 0) secfield[secopnum] = 8; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.xoffset") == 0) secfield[secopnum] = 9; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.yoffset") == 0) secfield[secopnum] = 10; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.picnum") == 0) secfield[secopnum] = 11; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.ang") == 0) secfield[secopnum] = 12; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.xvel") == 0) secfield[secopnum] = 13; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.yvel") == 0) secfield[secopnum] = 14; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.zvel") == 0) secfield[secopnum] = 15; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.owner") == 0) secfield[secopnum] = 16; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.sectnum") == 0) secfield[secopnum] = 17; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.statnum") == 0) secfield[secopnum] = 18; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.lotag") == 0) secfield[secopnum] = 19; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.hitag") == 0) secfield[secopnum] = 20; - if (Bstrcasecmp(&tempbuf[lasti],"sprite.extra") == 0) secfield[secopnum] = 21; - - if (Bstrcasecmp(&tempbuf[lasti],"sector.wallptr") == 0) secfield[secopnum] = 32; - if (Bstrcasecmp(&tempbuf[lasti],"sector.wallnum") == 0) secfield[secopnum] = 33; - if (Bstrcasecmp(&tempbuf[lasti],"sector.ceilingpicnum") == 0) secfield[secopnum] = 34; - if (Bstrcasecmp(&tempbuf[lasti],"sector.floorpicnum") == 0) secfield[secopnum] = 35; - if (Bstrcasecmp(&tempbuf[lasti],"sector.ceilingheinum") == 0) secfield[secopnum] = 36; - if (Bstrcasecmp(&tempbuf[lasti],"sector.floorheinum") == 0) secfield[secopnum] = 37; - if (Bstrcasecmp(&tempbuf[lasti],"sector.ceilingz") == 0) secfield[secopnum] = 38; - if (Bstrcasecmp(&tempbuf[lasti],"sector.floorz") == 0) secfield[secopnum] = 39; - if (Bstrcasecmp(&tempbuf[lasti],"sector.ceilingshade") == 0) secfield[secopnum] = 40; - if (Bstrcasecmp(&tempbuf[lasti],"sector.floorshade") == 0) secfield[secopnum] = 41; - if (Bstrcasecmp(&tempbuf[lasti],"sector.ceilingxpanning") == 0) secfield[secopnum] = 42; - if (Bstrcasecmp(&tempbuf[lasti],"sector.floorxpanning") == 0) secfield[secopnum] = 43; - if (Bstrcasecmp(&tempbuf[lasti],"sector.ceilingypanning") == 0) secfield[secopnum] = 44; - if (Bstrcasecmp(&tempbuf[lasti],"sector.floorypanning") == 0) secfield[secopnum] = 45; - if (Bstrcasecmp(&tempbuf[lasti],"sector.ceilingstat") == 0) secfield[secopnum] = 46; - if (Bstrcasecmp(&tempbuf[lasti],"sector.floorstat") == 0) secfield[secopnum] = 47; - if (Bstrcasecmp(&tempbuf[lasti],"sector.ceilingpal") == 0) secfield[secopnum] = 48; - if (Bstrcasecmp(&tempbuf[lasti],"sector.floorpal") == 0) secfield[secopnum] = 49; - if (Bstrcasecmp(&tempbuf[lasti],"sector.visibility") == 0) secfield[secopnum] = 50; - if (Bstrcasecmp(&tempbuf[lasti],"sector.lotag") == 0) secfield[secopnum] = 51; - if (Bstrcasecmp(&tempbuf[lasti],"sector.hitag") == 0) secfield[secopnum] = 52; - if (Bstrcasecmp(&tempbuf[lasti],"sector.extra") == 0) secfield[secopnum] = 53; - - secfield[secopnum] += (spritenumstat<<8); - - if ((tempbuf[k+1] >= 48) && (tempbuf[k+1] <= 57)) - secval[secopnum] = atol(&tempbuf[k+1]); - else if (Bstrcasecmp("tag",&tempbuf[k+1]) == 0) - secval[secopnum] = 0x80000000; - else - { - for(l=0;l0;j>>=1) - if (i+j < inumwads) - if (Bstrcasecmp(iwadata[slist[i+j]],nam) <= 0) i += j; - if (Bstrcasecmp(iwadata[slist[i]],nam) == 0) return(slist[i]); - return(-1); -} - -int main(int argc, char **argv) -{ - char argstring[5][80]; - char iwadfil[80], pwadfil[80], doommap[16], buildmap[16], picstr[16]; - int w, numwads, numtexts, startnumtexts, danumtexts, numpnames; - int x, y, z, zz, zzz, zzx, zx, cx, cy, gap, p, pp, i, j, k, l, offs; - int dnumpoints, dnumlines, dnumsides, dnumsectors, dnumthings, good; - int minx, maxx, miny, maxy, numsectors, numwalls, wadtype; - int startnumwalls, l1, l2, startpoint2, dapoint2, area; - int fil, ifil, pfil, x1, y1, x2, y2, startwall, endwall; - int mapversion, posx, posy, posz, tempint, cnt, boardwadindex; - short ang, cursectnum; - - printf("Wad2Map! Copyright 1995 by Ken Silverman\n"); - - if ((argc < 3) || (argc > 5)) - { - printf("Command line parameters: Wad2Map (PWADName) IWADName MapName (ScriptName)\n"); - printf(" Ex #1: wad2map c:\\doom\\doom.wad e1m1\n"); - printf(" Ex #2: wad2map c:\\doom\\doom.wad e1m1 kenbuild.txt\n"); - printf(" Ex #3: wad2map c:\\doom\\mypwad.wad c:\\doom\\doom.wad e1m1\n"); - printf(" Ex #4: wad2map c:\\doom\\mypwad.wad c:\\doom\\doom.wad e1m1 kenbuild.txt\n"); - exit(0); - } - - for(i=1;i>1);gap>0;gap>>=1) - for(z=0;z=0;zz-=gap) - { - if (Bstrcasecmp(iwadata[slist[zz]],iwadata[slist[zz+gap]]) <= 0) break; - i = slist[zz]; slist[zz] = slist[zz+gap]; slist[zz+gap] = i; - } - - if (ifil != pfil) - { - Bread(pfil,&pnumwads,4); - Bread(pfil,&pwadstart,4); - Blseek(pfil,pwadstart,SEEK_SET); - for(z=0;z= 0) - { - Blseek(ifil,iwadplc[w],BSEEK_SET); - startnumtexts = numtexts; - Bread(ifil,&danumtexts,4); numtexts += danumtexts; - Bread(ifil,&textoffs[startnumtexts],(numtexts-startnumtexts)*sizeof(int)); - for(z=startnumtexts;z=boardwadindex;w--) - { - Blseek(pfil,pwadplc[w],BSEEK_SET); - - if (Bstrcasecmp(pwadata[w],"VERTEXES") == 0) - { - dnumpoints = (pwadlen[w]>>2); - Bread(pfil,tempbuf,pwadlen[w]); - offs = 0; - for(z=0;z maxx) maxx = x; - if (y < miny) miny = y; - if (y > maxy) maxy = y; - } - cx = (((minx+maxx)>>1)&0xffffffc0); - cy = (((miny+maxy)>>1)&0xffffffc0); - - numwalls = 0; - - for(z=0;z= 0) && (z == side[line[zz].side2].sect)) - { - wx[numwalls] = px[line[zz].p2]; wy[numwalls] = py[line[zz].p2]; - wx2[numwalls] = px[line[zz].p1]; wy2[numwalls] = py[line[zz].p1]; - picindex[numwalls] = line[zz].side2; linindex[numwalls++] = zz; - } - } - - startpoint2 = startnumwalls; - for(zz=startnumwalls;zz 0)) j = 2; - else if ((wx2[zz+1]-x)*(wy2[zzz]-y) > (wy2[zz+1]-y)*(wx2[zzz]-x)) j = 2; - - if (j == 2) - { - i = wx[zz+1]; wx[zz+1] = wx[zzz]; wx[zzz] = i; - i = wy[zz+1]; wy[zz+1] = wy[zzz]; wy[zzz] = i; - i = wx2[zz+1]; wx2[zz+1] = wx2[zzz]; wx2[zzz] = i; - i = wy2[zz+1]; wy2[zz+1] = wy2[zzz]; wy2[zzz] = i; - i = picindex[zz+1]; picindex[zz+1] = picindex[zzz]; picindex[zzz] = i; - i = linindex[zz+1]; linindex[zz+1] = linindex[zzz]; linindex[zzz] = i; - } - } - point2[zz] = zz+1; - } - if (j == 0) point2[zz] = startpoint2, startpoint2 = zz+1; - } - - sector[z].wallptr = startnumwalls; - sector[z].wallnum = numwalls-startnumwalls; - } - - //Collect sectors - for(z=0;z>3); - if ((sector[z].ceilingstat&1) == 0) sector[z].ceilingshade = j; - if ((sector[z].floorstat&1) == 0) sector[z].floorshade = j; - for(i=startwall;i>1);gap>0;gap>>=1) - for(z=0;z=0;zz-=gap) - { - if (wx[slist[zz]] <= wx[slist[zz+gap]]) break; - i = slist[zz]; slist[zz] = slist[zz+gap]; slist[zz+gap] = i; - } - - for(z=0;z>= 1; - if ((zz+zzz < numwalls) && (wx[slist[zz+zzz]] < x2)) zz += zzz; - zzz >>= 1; - } while (zzz > 0); - - do - { - zzx = slist[zz]; - if (wx[zzx] > x2) break; - if (wy[zzx] == y2) - if ((wx[point2[zzx]] == x1) && (wy[point2[zzx]] == y1)) - { - wall[z].nextwall = zzx; - wall[z].nextsector = sectorofwall[zzx]; - break; - } - zz++; - } while (zz < numwalls); - - if (wall[z].nextwall < 0) - { - wall[z].picnum = sidemidpic[picindex[z]]; - wall[z].overpicnum = 0; - } - else - { - wall[z].picnum = sidetoppic[picindex[z]]; - if (wall[z].picnum <= 0) wall[z].picnum = sidebotpic[picindex[z]]; - if ((wall[z].picnum <= 0) && (wall[z].nextwall >= 0)) - { - zx = picindex[wall[z].nextwall]; - wall[z].picnum = sidetoppic[zx]; - if (wall[z].picnum <= 0) wall[z].picnum = sidebotpic[zx]; - } - wall[z].overpicnum = sidemidpic[picindex[z]]; - if (wall[z].overpicnum >= 0) wall[z].cstat |= (1+4+16); - } - wall[z].xrepeat = 8; - wall[z].yrepeat = 8; - wall[z].xpanning = (char)((-side[picindex[z]].xoffset)&255); - wall[z].ypanning = (char)(((side[picindex[z]].yoffset<<1))&255); - - if (line[linindex[z]].flags&1) wall[z].cstat |= 1; - //if (wall[z].nextwall >= 0) wall[z].cstat |= 4; - //if ((line[linindex[z]].flags&24) && (wall[z].nextwall >= 0)) - // wall[z].cstat |= 4; - } - - for(z=0;z= thingnum[i]) && (thing[z].type <= thingnum2[i])) - for(j=thingoff[i];j tagnum2[i])) continue; - - for(j=tagoff[i];j= 0) - if ((tagfield[j]&128) ^ (picindex[zx] == line[z].side1)) - l = wall[zx].nextsector; - - zzz = sectspri[l][(tagfield[j]>>8)&7]; - if (zzz < 0) - { - zzz = dnumthings++; - sectspri[l][(tagfield[j]>>8)&7] = zzz; - zzx = sector[l].wallptr; x1 = wall[zzx].x; y1 = wall[zzx].y; - zzx = wall[zzx].point2; x2 = wall[zzx].x; y2 = wall[zzx].y; - sprite[zzz].x = ((x1+x2)>>1) + ksgn(y1-y2); - sprite[zzz].y = ((y1+y2)>>1) + ksgn(x2-x1); - sprite[zzz].sectnum = l; - sprite[zzz].z = sector[l].floorz; - sprite[zzz].clipdist = 32; - sprite[zzz].xrepeat = 64; - sprite[zzz].yrepeat = 64; - } - - switch(tagop[j]) - { - case 0: setspritefield(zzz,k,zz); break; - case 1: setspritefield(zzz,k,getspritefield(zzz,k)+zz); break; - case 2: setspritefield(zzz,k,getspritefield(zzz,k)-zz); break; - case 3: setspritefield(zzz,k,getspritefield(zzz,k)|zz); break; - case 4: setspritefield(zzz,k,getspritefield(zzz,k)&zz); break; - case 5: setspritefield(zzz,k,getspritefield(zzz,k)^zz); break; - } - } - else if (k < 64) - { - l = sectorofwall[zx]; - if (wall[zx].nextsector >= 0) - if ((tagfield[j]&128) ^ (picindex[zx] == line[z].side1)) - l = wall[zx].nextsector; - - switch(tagop[j]) - { - case 0: setsectorfield(l,k,zz); break; - case 1: setsectorfield(l,k,getsectorfield(l,k)+zz); break; - case 2: setsectorfield(l,k,getsectorfield(l,k)-zz); break; - case 3: setsectorfield(l,k,getsectorfield(l,k)|zz); break; - case 4: setsectorfield(l,k,getsectorfield(l,k)&zz); break; - case 5: setsectorfield(l,k,getsectorfield(l,k)^zz); break; - } - } - else if (k < 96) - { - l = zx; - if (wall[zx].nextwall >= 0) - if ((tagfield[j]&128) ^ (picindex[zx] == line[z].side1)) - l = wall[zx].nextwall; - - switch(tagop[j]) - { - case 0: setwallfield(l,k,zz); break; - case 1: setwallfield(l,k,getwallfield(l,k)+zz); break; - case 2: setwallfield(l,k,getwallfield(l,k)-zz); break; - case 3: setwallfield(l,k,getwallfield(l,k)|zz); break; - case 4: setwallfield(l,k,getwallfield(l,k)&zz); break; - case 5: setwallfield(l,k,getwallfield(l,k)^zz); break; - } - } - } - } - } - - for(l=0;l= secnum[i]) && (sect[l].type <= secnum2[i])) - { - for(j=secoff[i];j>8)&7]; - if (zzz < 0) - { - zzz = dnumthings++; - sectspri[l][(secfield[j]>>8)&7] = zzz; - zzx = sector[l].wallptr; x1 = wall[zzx].x; y1 = wall[zzx].y; - zzx = wall[zzx].point2; x2 = wall[zzx].x; y2 = wall[zzx].y; - sprite[zzz].x = ((x1+x2)>>1) + ksgn(y1-y2); - sprite[zzz].y = ((y1+y2)>>1) + ksgn(x2-x1); - sprite[zzz].sectnum = l; - sprite[zzz].z = sector[l].floorz; - sprite[zzz].clipdist = 32; - sprite[zzz].xrepeat = 64; - sprite[zzz].yrepeat = 64; - } - - switch(secop[j]) - { - case 0: setspritefield(zzz,k,zz); break; - case 1: setspritefield(zzz,k,getspritefield(zzz,k)+zz); break; - case 2: setspritefield(zzz,k,getspritefield(zzz,k)-zz); break; - case 3: setspritefield(zzz,k,getspritefield(zzz,k)|zz); break; - case 4: setspritefield(zzz,k,getspritefield(zzz,k)&zz); break; - case 5: setspritefield(zzz,k,getspritefield(zzz,k)^zz); break; - } - } - else if (k < 64) - { - switch(secop[j]) - { - case 0: setsectorfield(l,k,zz); break; - case 1: setsectorfield(l,k,getsectorfield(l,k)+zz); break; - case 2: setsectorfield(l,k,getsectorfield(l,k)-zz); break; - case 3: setsectorfield(l,k,getsectorfield(l,k)|zz); break; - case 4: setsectorfield(l,k,getsectorfield(l,k)&zz); break; - case 5: setsectorfield(l,k,getsectorfield(l,k)^zz); break; - } - } - } - } - - for(z=0;z= 32768) || (klabs(y) >= 32768)) - wall[z].xrepeat = 255; - else - { - zx = mulscale10(ksqrtasm(x*x+y*y),wall[z].yrepeat); - wall[z].xrepeat = (char)min(max(zx,1),255); - } - - wall[z].picnum = texturelookup[wall[z].picnum]; - wall[z].overpicnum = texturelookup[wall[z].overpicnum]; - } - - mapversion = 7; posx = 0; posy = 0; posz = 0; ang = 1536; cursectnum = 0; - - //WATCH OUT THAT FOR DNUMTHINGS BEING HIGHER THAN NUMBER ON DOOM MAP! - for(i=0;i -#include -#include -#ifndef DIK_PAUSE -# define DIK_PAUSE 0xC5 -#endif -#include - -#ifdef _MSC_VER -#include -#endif - -#include "dxdidf.h" // comment this out if c_dfDI* is being reported as multiply defined -#include -#include -#include - -#ifdef USE_OPENGL -#include "glbuild.h" -#endif - -#include "compat.h" -#include "winlayer.h" -#include "pragmas.h" -#include "build.h" -#include "a.h" -#include "osd.h" -#include "rawinput.h" -#include "nedmalloc.h" -#include "mutex.h" - -// undefine to restrict windowed resolutions to conventional sizes -#define ANY_WINDOWED_SIZE - -static mutex_t m_initprintf; - -int32_t _buildargc = 0; -const char **_buildargv = NULL; -static char *argvbuf = NULL; -extern int32_t app_main(int32_t argc, const char *argv[]); -extern void app_crashhandler(void); - -// Windows crud -static HINSTANCE hInstance = 0; -static HWND hWindow = 0; -#define WINDOW_STYLE (WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX) -#define WindowClass "buildapp" -static BOOL window_class_registered = FALSE; -static HANDLE instanceflag = NULL; - -int32_t backgroundidle = 1; - -static WORD sysgamma[3][256]; -extern int32_t curbrightness, gammabrightness; - -#ifdef USE_OPENGL -// OpenGL stuff -static HGLRC hGLRC = 0; -char nofog=0; -char nogl=0; -char forcegl=0; -#endif - -static LPTSTR GetWindowsErrorMsg(DWORD code); -static const char *GetDDrawError(HRESULT code); -static const char *GetDInputError(HRESULT code); -static void ShowErrorBox(const char *m); -static void ShowDDrawErrorBox(const char *m, HRESULT r); -static void ShowDInputErrorBox(const char *m, HRESULT r); -static inline BOOL CheckWinVersion(void); -static LRESULT CALLBACK WndProcCallback(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); -static BOOL InitDirectDraw(void); -static void UninitDirectDraw(void); -static int32_t RestoreDirectDrawMode(void); -static void ReleaseDirectDrawSurfaces(void); -static BOOL InitDirectInput(void); -static void UninitDirectInput(void); -static void GetKeyNames(void); -static void AcquireInputDevices(char acquire); -static inline void DI_PollJoysticks(void); -static int32_t SetupDirectDraw(int32_t width, int32_t height); -static void UninitDIB(void); -static int32_t SetupDIB(int32_t width, int32_t height); -static void ReleaseOpenGL(void); -static void UninitOpenGL(void); -static int32_t SetupOpenGL(int32_t width, int32_t height, int32_t bitspp); -static BOOL RegisterWindowClass(void); -static BOOL CreateAppWindow(int32_t modenum); -static void DestroyAppWindow(void); - -// video -static int32_t desktopxdim=0; -static int32_t desktopydim=0; -static int32_t desktopbpp=0; -static int32_t modesetusing=-1; -static int32_t curvidmode = -1; -static int32_t customxdim = 640; -static int32_t customydim = 480; -static int32_t custombpp = 8; -static int32_t customfs = 0; -static uint32_t modeschecked=0; -int32_t xres=-1; -int32_t yres=-1; -int32_t fullscreen=0; -int32_t bpp=0; -int32_t bytesperline=0; -int32_t imageSize=0; -int32_t lockcount=0; -int32_t glcolourdepth=32; -int32_t vsync=0; -uint32_t maxrefreshfreq=60; -intptr_t frameplace=0; -char modechange=1; -char repaintneeded=0; -char offscreenrendering=0; -char videomodereset = 0; -char silentvideomodeswitch = 0; - -// input and events -char quitevent=0; -char appactive=1; -char realfs=0; -char regrabmouse=0; -uint32_t mousewheel[2] = { 0,0 }; - -static char taskswitching=1; - -static OSVERSIONINFOEX osv; - -#ifdef NEDMALLOC -extern int32_t largepagesavailable; -#else -static HMODULE nedhandle = NULL; -#endif - - -//------------------------------------------------------------------------------------------------- -// DINPUT (JOYSTICK) -//================================================================================================= - -#define JOYSTICK 0 - -static HMODULE hDInputDLL = NULL; -static LPDIRECTINPUT7A lpDI = NULL; -static LPDIRECTINPUTDEVICE7A lpDID = NULL; -#define INPUT_BUFFER_SIZE 32 -static GUID guidDevs; - -char di_disabled = 0; -static char di_devacquired; -static HANDLE di_inputevt = 0; -static int32_t joyblast=0; -volatile uint8_t moustat = 0, mousegrab = 0; - -static struct -{ - char *name; - LPDIRECTINPUTDEVICE7A *did; - const DIDATAFORMAT *df; -} devicedef = { "joystick", &lpDID, &c_dfDIJoystick }; - -static struct _joydef -{ - const char *name; - uint32_t ofs; // directinput 'dwOfs' value -} *axisdefs = NULL, *buttondefs = NULL, *hatdefs = NULL; - - - -//------------------------------------------------------------------------------------------------- -// MAIN CRAP -//================================================================================================= - - -// -// win_gethwnd() -- gets the window handle -// -int32_t win_gethwnd(void) -{ - return (int32_t)hWindow; -} - - -// -// win_gethinstance() -- gets the application instance -// -int32_t win_gethinstance(void) -{ - return (int32_t)hInstance; -} - - -// -// win_allowtaskswitching() -- captures/releases alt+tab hotkeys -// -void win_allowtaskswitching(int32_t onf) -{ - if (onf == taskswitching) return; - - if (onf) - { - UnregisterHotKey(0,0); - UnregisterHotKey(0,1); - } - else - { - RegisterHotKey(0,0,MOD_ALT,VK_TAB); - RegisterHotKey(0,1,MOD_ALT|MOD_SHIFT,VK_TAB); - } - - taskswitching = onf; -} - - -// -// win_checkinstance() -- looks for another instance of a Build app -// -int32_t win_checkinstance(void) -{ - if (!instanceflag) return 0; - return (WaitForSingleObject(instanceflag,0) == WAIT_TIMEOUT); -} - - -// -// wm_msgbox/wm_ynbox() -- window-manager-provided message boxes -// -int32_t wm_msgbox(char *name, char *fmt, ...) -{ - char buf[2048]; - va_list va; - - va_start(va,fmt); - vsprintf(buf,fmt,va); - va_end(va); - - MessageBox(hWindow,buf,name,MB_OK|MB_TASKMODAL); - return 0; -} - - -int32_t wm_ynbox(char *name, char *fmt, ...) -{ - char buf[2048]; - va_list va; - int32_t r; - - va_start(va,fmt); - vsprintf(buf,fmt,va); - va_end(va); - - r = MessageBox((HWND)win_gethwnd(),buf,name,MB_YESNO|MB_ICONQUESTION|MB_TASKMODAL); - if (r==IDYES) return 1; - return 0; -} - -// -// wm_setapptitle() -- changes the window title -// -void wm_setapptitle(char *name) -{ - if (name) - { - Bstrncpy(apptitle, name, sizeof(apptitle)-1); - apptitle[ sizeof(apptitle)-1 ] = 0; - } - - if (hWindow) SetWindowText(hWindow, apptitle); - startwin_settitle(apptitle); -} - -static int32_t setgammaramp(WORD gt[3][256]); - -// -// SignalHandler() -- called when we've sprung a leak -// -static void SignalHandler(int32_t signum) -{ - switch (signum) - { - case SIGSEGV: - OSD_Printf("Fatal Signal caught: SIGSEGV. Bailing out.\n"); - if (gammabrightness) - setgammaramp(sysgamma); - gammabrightness = 0; - app_crashhandler(); - uninitsystem(); - if (stdout) fclose(stdout); - break; - default: - break; - } -} - -// -// WinMain() -- main Windows entry point -// -int32_t WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int32_t nCmdShow) -{ - int32_t r; - char *argp; - FILE *fp; - HDC hdc; - - UNREFERENCED_PARAMETER(lpCmdLine); - UNREFERENCED_PARAMETER(nCmdShow); - - hInstance = hInst; - -#ifdef _MSC_VER - _CrtSetDbgFlag(_CRTDBG_CHECK_ALWAYS_DF); -#endif - - if (!CheckWinVersion() || hPrevInst) - { - MessageBox(0, "This application requires Windows XP or better to run.", - apptitle, MB_OK|MB_ICONSTOP); - return -1; - } - -#ifdef NEDMALLOC - /* Attempt to enable SeLockMemoryPrivilege, 2003/Vista/7 only */ - if (Bgetenv("BUILD_NOLARGEPAGES") == NULL && - (osv.dwMajorVersion >= 6 || (osv.dwMajorVersion == 5 && osv.dwMinorVersion == 2))) - { - HANDLE token; - if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &token)) - { - TOKEN_PRIVILEGES privs; - privs.PrivilegeCount = 1; - if (LookupPrivilegeValue(NULL, SE_LOCK_MEMORY_NAME, &privs.Privileges[0].Luid)) - { - privs.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED; - - if (!AdjustTokenPrivileges(token, FALSE, &privs, 0, NULL, NULL) || GetLastError() != S_OK) - { - // failure... - largepagesavailable = 0; - } - } - CloseHandle(token); - } - } - - nedcreatepool(SYSTEM_POOL_SIZE, -1); - // atexit(neddestroysyspool); -#else - // don't want to mix msvcrt with msvcrtd! -#ifndef DEBUGGINGAIDS - if ((nedhandle = LoadLibrary("nedmalloc.dll"))) - { - nedpool *(WINAPI *nedcreatepool)(size_t, int); - - if ((nedcreatepool = (void *)GetProcAddress(nedhandle, "nedcreatepool"))) - nedcreatepool(SYSTEM_POOL_SIZE, -1); - } -#endif -#endif - -#ifdef DEBUGGINGAIDS - LoadLibraryA("backtrace.dll"); -#endif - - hdc = GetDC(NULL); - r = GetDeviceCaps(hdc, BITSPIXEL); - ReleaseDC(NULL, hdc); - if (r < 8) - { - MessageBox(0, "This application requires a desktop color depth of 256-colors or better.", - apptitle, MB_OK|MB_ICONSTOP); - return -1; - } - - // carve up the commandline into more recognizable pieces - argvbuf = Bstrdup(GetCommandLine()); - _buildargc = 0; - if (argvbuf) - { - char quoted = 0, instring = 0, swallownext = 0; - char *p,*wp; int32_t i; - for (p=wp=argvbuf; *p; p++) - { - if (*p == ' ') - { - if (instring && !quoted) - { - // end of a string - *(wp++) = 0; - instring = 0; - } - else if (instring) - { - *(wp++) = *p; - } - } - else if (*p == '"' && !swallownext) - { - if (instring && quoted) - { - // end of a string - if (p[1] == ' ') - { - *(wp++) = 0; - instring = 0; - quoted = 0; - } - else - { - quoted = 0; - } - } - else if (instring && !quoted) - { - quoted = 1; - } - else if (!instring) - { - instring = 1; - quoted = 1; - _buildargc++; - } - } - else if (*p == '\\' && p[1] == '"' && !swallownext) - { - swallownext = 1; - } - else - { - if (!instring) _buildargc++; - instring = 1; - *(wp++) = *p; - swallownext = 0; - } - } - *wp = 0; - - _buildargv = (const char **)Bmalloc(sizeof(char *)*_buildargc); - wp = argvbuf; - for (i=0; i<_buildargc; i++,wp++) - { - _buildargv[i] = wp; - while (*wp) wp++; - } - } - - // pipe standard outputs to files - if ((argp = Bgetenv("BUILD_LOGSTDOUT")) != NULL) - if (!Bstrcasecmp(argp, "TRUE")) - { - fp = freopen("stdout.txt", "w", stdout); - if (!fp) - { - fp = fopen("stdout.txt", "w"); - } - if (fp) setvbuf(fp, 0, _IONBF, 0); - *stdout = *fp; - *stderr = *fp; - } - -#ifdef USE_OPENGL - if ((argp = Bgetenv("BUILD_NOFOG")) != NULL) - nofog = Batol(argp); - if (Bgetenv("BUILD_FORCEGL") != NULL) - forcegl = 1; -#endif - - // install signal handlers -#if !defined(_MSC_VER) || !defined(DEBUGGINGAIDS) - signal(SIGSEGV, SignalHandler); -#endif - - if (RegisterWindowClass()) return -1; - -#ifdef DISCLAIMER - MessageBox(0, - DISCLAIMER, - "Notice", - MB_OK|MB_ICONINFORMATION); -#endif - - // atexit(uninitsystem); - - instanceflag = CreateSemaphore(NULL, 1,1, WindowClass); - - startwin_open(); - baselayer_init(); - - r = app_main(_buildargc, _buildargv); - - fclose(stdout); - - if (r) Sleep(3000); - - startwin_close(); - if (instanceflag) CloseHandle(instanceflag); - - if (argvbuf) Bfree(argvbuf); - - return r; -} - - -static int32_t set_maxrefreshfreq(const osdfuncparm_t *parm) -{ - int32_t freq; - if (parm->numparms == 0) - { - if (maxrefreshfreq == 0) - OSD_Printf("\"maxrefreshfreq\" is \"No maximum\"\n"); - else - OSD_Printf("\"maxrefreshfreq\" is \"%d\"\n",maxrefreshfreq); - return OSDCMD_OK; - } - if (parm->numparms != 1) return OSDCMD_SHOWHELP; - - freq = Batol(parm->parms[0]); - if (freq < 0) return OSDCMD_SHOWHELP; - - maxrefreshfreq = (unsigned)freq; - modeschecked = 0; - - return OSDCMD_OK; -} - -static int32_t set_windowpos(const osdfuncparm_t *parm) -{ - if (parm->numparms == 0) - { - OSD_Printf("\"r_windowpositioning\" is \"%d\"\n",windowpos); - return OSDCMD_OK; - } - if (parm->numparms != 1) return OSDCMD_SHOWHELP; - - windowpos = Batol(parm->parms[0])>0; - OSD_Printf("r_windowpositioning %d\n",windowpos); - - return OSDCMD_OK; -} - -// -// initsystem() -- init systems -// - -static void win_printversion(void) -{ - const char *ver = ""; - - switch (osv.dwPlatformId) - { - case VER_PLATFORM_WIN32_NT: - if (osv.dwMajorVersion == 5) - { - switch (osv.dwMinorVersion) - { - case 1: - ver = "XP"; - break; - case 2: - ver = osv.wProductType == VER_NT_WORKSTATION ? "XP x64" : "Server 2003"; - break; - } - break; - } - - if (osv.dwMajorVersion == 6) - { - switch (osv.dwMinorVersion) - { - case 0: - ver = osv.wProductType == VER_NT_WORKSTATION ? "Vista" : "Server 2008"; - break; - case 1: - ver = osv.wProductType == VER_NT_WORKSTATION ? "7" : "Server 2008 R2"; - break; - } - break; - } - break; - } - - initprintf("Windows %s (build %lu.%lu.%lu) %s", ver, - osv.dwMajorVersion, osv.dwMinorVersion, osv.dwBuildNumber, osv.szCSDVersion); - -#ifdef NEDMALLOC - initprintf("\n"); - - if (largepagesavailable) - initprintf("Large page support available\n"); -#else - initprintf(nedhandle ? "\nInitialized nedmalloc\n" : "\n"); -#endif - -} - - -int32_t initsystem(void) -{ - DEVMODE desktopmode; - - // initprintf("Initializing Windows DirectX/GDI system interface\n"); - - mutex_init(&m_initprintf); - - // get the desktop dimensions before anything changes them - ZeroMemory(&desktopmode, sizeof(DEVMODE)); - desktopmode.dmSize = sizeof(DEVMODE); - EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&desktopmode); - - desktopxdim = desktopmode.dmPelsWidth; - desktopydim = desktopmode.dmPelsHeight; - desktopbpp = desktopmode.dmBitsPerPel; - - memset(curpalette, 0, sizeof(palette_t) * 256); - - atexit(uninitsystem); - - frameplace=0; - lockcount=0; - - win_printversion(); - -#ifdef USE_OPENGL - if (loadgldriver(getenv("BUILD_GLDRV"))) - { - initprintf("Failure loading OpenGL. GL modes are unavailable.\n"); - nogl = 1; - } -#endif - - // try and start DirectDraw - if (InitDirectDraw()) - initprintf("DirectDraw initialization failed. Fullscreen modes will be unavailable.\n"); - - OSD_RegisterFunction("maxrefreshfreq", "maxrefreshfreq: maximum display frequency to set for OpenGL Polymost modes (0=no maximum)", set_maxrefreshfreq); - OSD_RegisterFunction("r_windowpositioning", "r_windowpositioning: enable/disable window position memory", set_windowpos); - return 0; -} - - -// -// uninitsystem() -- uninit systems -// -void uninitsystem(void) -{ - DestroyAppWindow(); - - startwin_close(); - - uninitinput(); - uninittimer(); - - win_allowtaskswitching(1); - -#ifdef USE_OPENGL - unloadgldriver(); -#endif - -#ifndef NEDMALLOC - // if (nedhandle) FreeLibrary(nedhandle), nedhandle = NULL; -#endif -} - - -// -// initprintf() -- prints a string to the intitialization window -// -void initprintf(const char *f, ...) -{ - va_list va; - char buf[2048]; - static char dabuf[2048]; - - va_start(va, f); - Bvsnprintf(buf, sizeof(buf), f, va); - va_end(va); - - OSD_Printf(buf); - - mutex_lock(&m_initprintf); - if ((Bstrlen(dabuf) + Bstrlen(buf) + 2) > sizeof(dabuf)) - { - startwin_puts(dabuf); - Bmemset(dabuf, 0, sizeof(dabuf)); - } - - Bstrcat(dabuf,buf); - - if (flushlogwindow || Bstrlen(dabuf) > 768) - { - startwin_puts(dabuf); - handleevents(); - Bmemset(dabuf, 0, sizeof(dabuf)); - } - mutex_unlock(&m_initprintf); -} - - -// -// debugprintf() -- sends a debug string to the debugger -// -void debugprintf(const char *f, ...) -{ -#if 0 // def DEBUGGINGAIDS - va_list va; - char buf[1024]; - - if (!IsDebuggerPresent()) return; - - va_start(va,f); - Bvsnprintf(buf, 1024, f, va); - va_end(va); - - OutputDebugString(buf); -#else - UNREFERENCED_PARAMETER(f); -#endif -} - - -// -// handleevents() -- process the Windows message queue -// returns !0 if there was an important event worth checking (like quitting) -// -int32_t handleevents(void) -{ - int32_t rv=0; - MSG msg; - - //if (frameplace && fullscreen) printf("Offscreen buffer is locked!\n"); - - RI_PollDevices(TRUE); - - if (hDInputDLL) - DI_PollJoysticks(); - - while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) - { - switch (msg.message) - { - case WM_QUIT: - quitevent = 1; - continue; - case WM_INPUT: - // this call to RI_PollDevices() probably isn't necessary - // RI_PollDevices(FALSE); - RI_ProcessMessage(&msg); - continue; - } - - if (startwin_idle((void *)&msg) > 0) continue; - - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - if (!appactive || quitevent) rv = -1; - - sampletimer(); - - if (after_handleevents_hook) - after_handleevents_hook(); - - return rv; -} - - -// -// initinput() -- init input system -// -int32_t initinput(void) -{ - int32_t i; - char layoutname[KL_NAMELENGTH]; - - moustat=0; - memset(keystatus, 0, sizeof(keystatus)); - - if (!remapinit) - for (i=0; i<256; i++) - remap[i]=i; - - remapinit=1; - keyfifoplc = keyfifoend = 0; - keyasciififoplc = keyasciififoend = 0; - - inputdevices = 1|2; - joyisgamepad = joynumaxes = joynumbuttons = joynumhats=0; - - // 00000409 is "American English" - - GetKeyboardLayoutName(layoutname); - if (Bstrcmp(layoutname, "00000409")) - { - initprintf("Switching kb layout from %s ",layoutname); - LoadKeyboardLayout("00000409", KLF_ACTIVATE|KLF_SETFORPROCESS|KLF_SUBSTITUTE_OK); - GetKeyboardLayoutName(layoutname); - initprintf("to %s\n",layoutname); - } - - GetKeyNames(); - InitDirectInput(); - - return 0; -} - - -// -// uninitinput() -- uninit input system -// -void uninitinput(void) -{ - uninitmouse(); - UninitDirectInput(); -} - - -inline void idle_waitevent_timeout(uint32_t timeout) -{ - // timeout becomes a completion deadline - timeout += getticks(); - - do - { - MSG msg; - - if (PeekMessage(&msg, 0, WM_INPUT, WM_INPUT, PM_QS_INPUT)) - { - RI_PollDevices(TRUE); - return; - } - - Sleep(10); - } - while (timeout > (getticks() + 10)); -} - -inline void idle_waitevent(void) -{ - idle_waitevent_timeout(100); -} - -inline void idle(void) -{ - idle_waitevent(); -} - -// -// setjoydeadzone() -- sets the dead and saturation zones for the joystick -// -void setjoydeadzone(int32_t axis, uint16_t dead, uint16_t satur) -{ - DIPROPDWORD dipdw; - HRESULT result; - - if (!lpDID) return; - - if (dead > 10000) dead = 10000; - if (satur > 10000) satur = 10000; - if (dead >= satur) dead = satur-100; - if (axis >= joynumaxes) return; - - memset(&dipdw, 0, sizeof(dipdw)); - dipdw.diph.dwSize = sizeof(DIPROPDWORD); - dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); - if (axis < 0) - { - dipdw.diph.dwObj = 0; - dipdw.diph.dwHow = DIPH_DEVICE; - } - else - { - dipdw.diph.dwObj = axisdefs[axis].ofs; - dipdw.diph.dwHow = DIPH_BYOFFSET; - } - dipdw.dwData = dead; - - result = IDirectInputDevice7_SetProperty(lpDID, DIPROP_DEADZONE, &dipdw.diph); - if (FAILED(result)) - { - //ShowDInputErrorBox("Failed setting joystick dead zone", result); - initprintf("Failed setting joystick dead zone: %s\n", GetDInputError(result)); - return; - } - - dipdw.dwData = satur; - - result = IDirectInputDevice7_SetProperty(lpDID, DIPROP_SATURATION, &dipdw.diph); - if (FAILED(result)) - { - //ShowDInputErrorBox("Failed setting joystick saturation point", result); - initprintf("Failed setting joystick saturation point: %s\n", GetDInputError(result)); - return; - } -} - - -// -// getjoydeadzone() -- gets the dead and saturation zones for the joystick -// -void getjoydeadzone(int32_t axis, uint16_t *dead, uint16_t *satur) -{ - DIPROPDWORD dipdw; - HRESULT result; - - if (!dead || !satur) return; - if (!lpDID) { *dead = *satur = 0; return; } - if (axis >= joynumaxes) { *dead = *satur = 0; return; } - - memset(&dipdw, 0, sizeof(dipdw)); - dipdw.diph.dwSize = sizeof(DIPROPDWORD); - dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); - if (axis < 0) - { - dipdw.diph.dwObj = 0; - dipdw.diph.dwHow = DIPH_DEVICE; - } - else - { - dipdw.diph.dwObj = axisdefs[axis].ofs; - dipdw.diph.dwHow = DIPH_BYOFFSET; - } - - result = IDirectInputDevice7_GetProperty(lpDID, DIPROP_DEADZONE, &dipdw.diph); - if (FAILED(result)) - { - //ShowDInputErrorBox("Failed getting joystick dead zone", result); - initprintf("Failed getting joystick dead zone: %s\n", GetDInputError(result)); - return; - } - - *dead = dipdw.dwData; - - result = IDirectInputDevice7_GetProperty(lpDID, DIPROP_SATURATION, &dipdw.diph); - if (FAILED(result)) - { - //ShowDInputErrorBox("Failed getting joystick saturation point", result); - initprintf("Failed getting joystick saturation point: %s\n", GetDInputError(result)); - return; - } - - *satur = dipdw.dwData; -} - - -void releaseallbuttons(void) -{ - int32_t i; - - if (mousepresscallback) - { - if (mouseb & 1) mousepresscallback(1, 0); - if (mouseb & 2) mousepresscallback(2, 0); - if (mouseb & 4) mousepresscallback(3, 0); - if (mouseb & 8) mousepresscallback(4, 0); - if (mousewheel[0]>0) mousepresscallback(5,0); - if (mousewheel[1]>0) mousepresscallback(6,0); - } - mousewheel[0]=mousewheel[1]=0; - mouseb = 0; - - if (joypresscallback) - { - for (i=0; i<32; i++) - if (joyb & (1<dwDevType&0xff) != DIDEVTYPE_JOYSTICK) - return DIENUM_CONTINUE; - - inputdevices |= 4; - joyisgamepad = ((lpddi->dwDevType & (DIDEVTYPEJOYSTICK_GAMEPAD<<8)) != 0); - d = joyisgamepad ? "GAMEPAD" : "JOYSTICK"; - Bmemcpy(&guidDevs, &lpddi->guidInstance, sizeof(GUID)); - - initprintf(" * %s: %s\n", d, lpddi->tszProductName); - - return DIENUM_CONTINUE; -} - -static BOOL CALLBACK InitDirectInput_enumobjects(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOID pvRef) -{ - int32_t *typecounts = (int32_t *)pvRef; - - if (lpddoi->dwType & DIDFT_AXIS) - { - //initprintf(" Axis: %s (dwOfs=%d)\n", lpddoi->tszName, lpddoi->dwOfs); - - axisdefs[ typecounts[0] ].name = Bstrdup(lpddoi->tszName); - axisdefs[ typecounts[0] ].ofs = lpddoi->dwOfs; - - typecounts[0]++; - } - else if (lpddoi->dwType & DIDFT_BUTTON) - { - //initprintf(" Button: %s (dwOfs=%d)\n", lpddoi->tszName, lpddoi->dwOfs); - - buttondefs[ typecounts[1] ].name = Bstrdup(lpddoi->tszName); - buttondefs[ typecounts[1] ].ofs = lpddoi->dwOfs; - - typecounts[1]++; - } - else if (lpddoi->dwType & DIDFT_POV) - { - //initprintf(" POV: %s (dwOfs=%d)\n", lpddoi->tszName, lpddoi->dwOfs); - - hatdefs[ typecounts[2] ].name = Bstrdup(lpddoi->tszName); - hatdefs[ typecounts[2] ].ofs = lpddoi->dwOfs; - - typecounts[2]++; - } - - return DIENUM_CONTINUE; -} - -#define HorribleDInputDeath( x, y ) \ - ShowDInputErrorBox(x,y); \ - UninitDirectInput(); \ - return TRUE - -static BOOL InitDirectInput(void) -{ - HRESULT result; - HRESULT(WINAPI *aDirectInputCreateA)(HINSTANCE, DWORD, LPDIRECTINPUT7A *, LPUNKNOWN); - DIPROPDWORD dipdw; - LPDIRECTINPUTDEVICE7A dev; - LPDIRECTINPUTDEVICE7A dev2; - DIDEVCAPS didc; - - if (hDInputDLL || di_disabled) return FALSE; - - initprintf("Initializing DirectInput...\n"); - - if (!hDInputDLL) - { - // initprintf(" - Loading DINPUT.DLL\n"); - hDInputDLL = LoadLibrary("DINPUT.DLL"); - if (!hDInputDLL) - { - ShowErrorBox("Error loading DINPUT.DLL"); - return TRUE; - } - } - - aDirectInputCreateA = (void *)GetProcAddress(hDInputDLL, "DirectInputCreateA"); - if (!aDirectInputCreateA) ShowErrorBox("Error fetching DirectInputCreateA()"); - - result = aDirectInputCreateA(hInstance, DIRECTINPUT_VERSION, &lpDI, NULL); - if (FAILED(result)) { HorribleDInputDeath("DirectInputCreateA() failed", result); } - else if (result != DI_OK) initprintf(" Created DirectInput object with warning: %s\n",GetDInputError(result)); - - initprintf(" - Enumerating attached game controllers\n"); - inputdevices = 1|2; - result = IDirectInput7_EnumDevices(lpDI, DIDEVTYPE_JOYSTICK, InitDirectInput_enum, NULL, DIEDFL_ATTACHEDONLY); - if (FAILED(result)) { HorribleDInputDeath("Failed enumerating attached game controllers", result); } - else if (result != DI_OK) initprintf(" Enumerated game controllers with warning: %s\n",GetDInputError(result)); - - if (inputdevices == (1|2)) - { - initprintf(" - No game controllers found\n"); - UninitDirectInput(); - return TRUE; - } - - *devicedef.did = NULL; - - // initprintf(" - Creating %s device\n", devicedef.name); - result = IDirectInput7_CreateDeviceEx(lpDI, &guidDevs, &IID_IDirectInputDevice7, (void *)&dev, NULL); - if (FAILED(result)) { HorribleDInputDeath("Failed creating device", result); } - else if (result != DI_OK) initprintf(" Created device with warning: %s\n",GetDInputError(result)); - - result = IDirectInputDevice7_QueryInterface(dev, &IID_IDirectInputDevice7, (LPVOID *)&dev2); - IDirectInputDevice7_Release(dev); - if (FAILED(result)) { HorribleDInputDeath("Failed querying DirectInput7 interface for device", result); } - else if (result != DI_OK) initprintf(" Queried IDirectInputDevice7 interface with warning: %s\n",GetDInputError(result)); - - result = IDirectInputDevice7_SetDataFormat(dev2, devicedef.df); - if (FAILED(result)) { IDirectInputDevice7_Release(dev2); HorribleDInputDeath("Failed setting data format", result); } - else if (result != DI_OK) initprintf(" Set data format with warning: %s\n",GetDInputError(result)); - - di_inputevt = CreateEvent(NULL, FALSE, FALSE, NULL); - - if (di_inputevt == NULL) - { - IDirectInputDevice7_Release(dev2); - ShowErrorBox("Couldn't create event object"); - UninitDirectInput(); - return TRUE; - } - - result = IDirectInputDevice7_SetEventNotification(dev2, di_inputevt); - if (FAILED(result)) { IDirectInputDevice7_Release(dev2); HorribleDInputDeath("Failed setting event object", result); } - else if (result != DI_OK) initprintf(" Set event object with warning: %s\n",GetDInputError(result)); - - IDirectInputDevice7_Unacquire(dev2); - - memset(&dipdw, 0, sizeof(dipdw)); - dipdw.diph.dwSize = sizeof(DIPROPDWORD); - dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); - dipdw.diph.dwObj = 0; - dipdw.diph.dwHow = DIPH_DEVICE; - dipdw.dwData = INPUT_BUFFER_SIZE; - - result = IDirectInputDevice7_SetProperty(dev2, DIPROP_BUFFERSIZE, &dipdw.diph); - if (FAILED(result)) { IDirectInputDevice7_Release(dev2); HorribleDInputDeath("Failed setting buffering", result); } - else if (result != DI_OK) initprintf(" Set buffering with warning: %s\n",GetDInputError(result)); - - // set up device - { - int32_t typecounts[3] = {0,0,0}; - - memset(&didc, 0, sizeof(didc)); - didc.dwSize = sizeof(didc); - result = IDirectInputDevice7_GetCapabilities(dev2, &didc); - if (FAILED(result)) { IDirectInputDevice7_Release(dev2); HorribleDInputDeath("Failed getting controller capabilities", result); } - else if (result != DI_OK) initprintf(" Fetched controller capabilities with warning: %s\n",GetDInputError(result)); - - joynumaxes = (uint8_t)didc.dwAxes; - joynumbuttons = min(32,(uint8_t)didc.dwButtons); - joynumhats = (uint8_t)didc.dwPOVs; - initprintf("Controller has %d axes, %d buttons, and %d hat(s).\n",joynumaxes,joynumbuttons,joynumhats); - - axisdefs = (struct _joydef *)Bcalloc(didc.dwAxes, sizeof(struct _joydef)); - buttondefs = (struct _joydef *)Bcalloc(didc.dwButtons, sizeof(struct _joydef)); - hatdefs = (struct _joydef *)Bcalloc(didc.dwPOVs, sizeof(struct _joydef)); - - joyaxis = (int32_t *)Bcalloc(didc.dwAxes, sizeof(int32_t)); - joyhat = (int32_t *)Bcalloc(didc.dwPOVs, sizeof(int32_t)); - - result = IDirectInputDevice7_EnumObjects(dev2, InitDirectInput_enumobjects, (LPVOID)typecounts, DIDFT_ALL); - if (FAILED(result)) { IDirectInputDevice7_Release(dev2); HorribleDInputDeath("Failed getting controller features", result); } - else if (result != DI_OK) initprintf(" Fetched controller features with warning: %s\n",GetDInputError(result)); - } - - *devicedef.did = dev2; - - di_devacquired = 0; - - return FALSE; -} - - -// -// UninitDirectInput() -- clean up DirectInput -// -static void UninitDirectInput(void) -{ - int32_t i; - - if (hDInputDLL) initprintf("Uninitializing DirectInput...\n"); - - AcquireInputDevices(0); - - if (axisdefs) - { - for (i=joynumaxes-1; i>=0; i--) if (axisdefs[i].name) Bfree((void *)axisdefs[i].name); - Bfree(axisdefs); axisdefs = NULL; - } - if (buttondefs) - { - for (i=joynumbuttons-1; i>=0; i--) if (buttondefs[i].name) Bfree((void *)buttondefs[i].name); - Bfree(buttondefs); buttondefs = NULL; - } - if (hatdefs) - { - for (i=joynumhats-1; i>=0; i--) if (hatdefs[i].name) Bfree((void *)hatdefs[i].name); - Bfree(hatdefs); hatdefs = NULL; - } - - if (di_inputevt) - { - CloseHandle(di_inputevt); - di_inputevt = NULL; - } - - if (*devicedef.did) - { - IDirectInputDevice7_Release(*devicedef.did); - *devicedef.did = NULL; - } - - if (lpDI) - { - IDirectInput7_Release(lpDI); - lpDI = NULL; - } - - if (hDInputDLL) - { - FreeLibrary(hDInputDLL); - hDInputDLL = NULL; - } -} - - -// -// GetKeyNames() -- retrieves the names for all the keys on the keyboard -// -static void GetKeyNames(void) -{ - int32_t i; - char tbuf[MAX_PATH]; - - memset(key_names,0,sizeof(key_names)); - - for (i=0; i<256; i++) - { - tbuf[0] = 0; - GetKeyNameText((i>128?(i+128):i)<<16, tbuf, sizeof(key_names[i])-1); - Bstrncpy(&key_names[i][0], tbuf, sizeof(key_names[i])-1); - } -} - -const char *getjoyname(int32_t what, int32_t num) -{ - switch (what) - { - case 0: // axis - return ((unsigned)num > (unsigned)joynumaxes) ? NULL : (char *)axisdefs[num].name; - case 1: // button - return ((unsigned)num > (unsigned)joynumbuttons) ? NULL : (char *)buttondefs[num].name; - case 2: // hat - return ((unsigned)num > (unsigned)joynumhats) ? NULL : (char *)hatdefs[num].name; - default: - return NULL; - } -} - -// -// AcquireInputDevices() -- (un)acquires the input devices -// -static void AcquireInputDevices(char acquire) -{ - DWORD flags; - HRESULT result; - - if (!hDInputDLL) return; - if (!hWindow) return; - - if (acquire) - { - // if (!appactive) return; // why acquire when inactive? - - if (! *devicedef.did) return; - - IDirectInputDevice7_Unacquire(*devicedef.did); - - flags = DISCL_FOREGROUND|DISCL_NONEXCLUSIVE; - - result = IDirectInputDevice7_SetCooperativeLevel(*devicedef.did, hWindow, flags); - if (FAILED(result)) - initprintf("IDirectInputDevice7_SetCooperativeLevel(%s): %s\n", - devicedef.name, GetDInputError(result)); - - if (SUCCEEDED(IDirectInputDevice7_Acquire(*devicedef.did))) - di_devacquired = 1; - else - di_devacquired = 0; - - return; - } - - di_devacquired = 0; - - releaseallbuttons(); - - if (! *devicedef.did) return; - - IDirectInputDevice7_Unacquire(*devicedef.did); - - result = IDirectInputDevice7_SetCooperativeLevel(*devicedef.did, hWindow, DISCL_FOREGROUND|DISCL_NONEXCLUSIVE); - if (FAILED(result)) - initprintf("IDirectInputDevice7_SetCooperativeLevel(%s): %s\n", - devicedef.name, GetDInputError(result)); -} - -// -// ProcessInputDevices() -- processes the input devices -// -static inline void DI_PollJoysticks(void) -{ - DWORD dwElements = INPUT_BUFFER_SIZE; - HRESULT result; - DIDEVICEOBJECTDATA didod[INPUT_BUFFER_SIZE]; - int32_t i, ev; - - if (*devicedef.did) - { - result = IDirectInputDevice7_Poll(*devicedef.did); - - if (result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED) - { - if (SUCCEEDED(IDirectInputDevice7_Acquire(*devicedef.did))) - { - di_devacquired = 1; - IDirectInputDevice7_Poll(*devicedef.did); - } - else di_devacquired = 0; - } - - if (di_devacquired) - { - // use event objects so that we can quickly get indication of when data is ready - // to be read and input events processed - ev = WaitForSingleObject(di_inputevt, 0); - - if (ev != WAIT_OBJECT_0 || !lpDID) - return; - - result = IDirectInputDevice7_GetDeviceData(lpDID, sizeof(DIDEVICEOBJECTDATA), - (LPDIDEVICEOBJECTDATA)&didod, &dwElements, 0); - - if (result != DI_OK || !dwElements) return; - - for (i=dwElements-1; i>=0; i--) - { - int32_t j; - - // check axes - for (j=0; j0; n--) usertimercallback(); -} - - -// -// getticks() -- returns the windows ticks count -// -uint32_t getticks(void) -{ - int64_t i; - if (timerfreq == 0) return 0; - QueryPerformanceCounter((LARGE_INTEGER *)&i); - return (uint32_t)(i*longlong(1000)/timerfreq); -} - - -// -// gettimerfreq() -- returns the number of ticks per second the timer is configured to generate -// -int32_t gettimerfreq(void) -{ - return timerticspersec; -} - - - - -//------------------------------------------------------------------------------------------------- -// VIDEO -//================================================================================================= - -// DirectDraw objects -static HMODULE hDDrawDLL = NULL; -static LPDIRECTDRAW lpDD = NULL; -static LPDIRECTDRAWSURFACE lpDDSPrimary = NULL; -static LPDIRECTDRAWSURFACE lpDDSBack = NULL; -static char *lpOffscreen = NULL; -static LPDIRECTDRAWPALETTE lpDDPalette = NULL; -static BOOL bDDrawInited = FALSE; -static DWORD DDdwCaps = 0, DDdwCaps2 = 0; - -// DIB stuff -static HDC hDC = NULL; // opengl shares this -static HDC hDCSection = NULL; -static HBITMAP hDIBSection = NULL; -static HPALETTE hPalette = NULL; -static VOID *lpPixels = NULL; - -static int32_t setgammaramp(WORD gt[3][256]); -static int32_t getgammaramp(WORD gt[3][256]); - -static void ToggleDesktopComposition(BOOL compEnable) -{ - static HMODULE hDWMApiDLL = NULL; - static HRESULT(WINAPI *aDwmEnableComposition)(UINT); - - if (!hDWMApiDLL && (hDWMApiDLL = LoadLibrary("DWMAPI.DLL"))) - aDwmEnableComposition = (void *)GetProcAddress(hDWMApiDLL, "DwmEnableComposition"); - - if (aDwmEnableComposition) - { - aDwmEnableComposition(compEnable); - if (!silentvideomodeswitch) - initprintf("%sabling desktop composition...\n", (compEnable) ? "En" : "Dis"); - } -} - -// -// checkvideomode() -- makes sure the video mode passed is legal -// -int32_t checkvideomode(int32_t *x, int32_t *y, int32_t c, int32_t fs, int32_t forced) -{ - int32_t i, nearest=-1, dx, dy, odx=9999, ody=9999; - - getvalidmodes(); - - // fix up the passed resolution values to be multiples of 8 - // and at least 320x200 or at most MAXXDIMxMAXYDIM - if (*x < 320) *x = 320; - if (*y < 200) *y = 200; - if (*x > MAXXDIM) *x = MAXXDIM; - if (*y > MAXYDIM) *y = MAXYDIM; - // *x &= 0xfffffff8l; - - for (i=0; i= 6) - ToggleDesktopComposition(c < 16); - - if (!silentvideomodeswitch) - initprintf("Setting video mode %dx%d (%d-bit %s)\n", - x,y,c, ((fs&1) ? "fullscreen" : "windowed")); - - if (CreateAppWindow(modenum)) return -1; - - if (!gammabrightness) - { - // float f = 1.0 + ((float)curbrightness / 10.0); - if (getgammaramp(sysgamma) >= 0) gammabrightness = 1; - if (gammabrightness && setgamma() < 0) gammabrightness = 0; - } - -#ifdef USE_OPENGL - if (hGLWindow && glinfo.vsync) bwglSwapIntervalEXT(vsync); -#endif - if (inp) AcquireInputDevices(1); - modechange=1; - videomodereset = 0; - OSD_ResizeDisplay(xres,yres); - //baselayer_onvideomodechange(c>8); - - return 0; -} - - -// -// getvalidmodes() -- figure out what video modes are available -// -#define ADDMODE(x,y,c,f,n) if (validmodecnt 8) - { - for (i=0; i modes[i].freq && maxrefreshfreq > 0) || - (dm.dmDisplayFrequency > modes[i].freq && maxrefreshfreq == 0)) - { - if (i==nmodes) nmodes++; - - modes[i].x = dm.dmPelsWidth; - modes[i].y = dm.dmPelsHeight; - modes[i].bpp = dm.dmBitsPerPel; - modes[i].freq = dm.dmDisplayFrequency; - } - } - - j++; - ZeroMemory(&dm,sizeof(DEVMODE)); - dm.dmSize = sizeof(DEVMODE); - } - - for (i=0; iddpfPixelFormat.dwRGBBitCount == 8) - { - CHECK(ddsd->dwWidth, ddsd->dwHeight) - ADDMODE(ddsd->dwWidth, ddsd->dwHeight, ddsd->ddpfPixelFormat.dwRGBBitCount, 1,-1); - } - - return(DDENUMRET_OK); -} - -static int32_t sortmodes(const struct validmode_t *a, const struct validmode_t *b) -{ - int32_t x; - - if ((x = a->fs - b->fs) != 0) return x; - if ((x = a->bpp - b->bpp) != 0) return x; - if ((x = a->xdim - b->xdim) != 0) return x; - if ((x = a->ydim - b->ydim) != 0) return x; - - return 0; -} -void getvalidmodes(void) -{ - int32_t cdepths[2] = { 8, 0 }; - int32_t i, j, maxx=0, maxy=0; - HRESULT result; - -#ifdef USE_OPENGL - if (desktopbpp > 8 && !nogl) cdepths[1] = desktopbpp; - else cdepths[1] = 0; -#endif - - if (modeschecked) return; - - validmodecnt=0; - // initprintf("Detecting video modes:\n"); - - if (bDDrawInited) - { - // if DirectDraw initialization didn't fail enumerate fullscreen modes - - result = IDirectDraw_EnumDisplayModes(lpDD, 0, NULL, 0, getvalidmodes_enum); - if (result != DD_OK) - { - initprintf("Unable to enumerate fullscreen modes. Using default list.\n"); - for (j=0; j < 2; j++) - { - if (cdepths[j] == 0) continue; - for (i=0; defaultres[i][0]; i++) - ADDMODE(defaultres[i][0],defaultres[i][1],cdepths[j],1,-1) - } - } - } -#ifdef USE_OPENGL - cdsenummodes(); -#endif - - // windowed modes cant be bigger than the current desktop resolution - maxx = desktopxdim-1; - maxy = desktopydim-1; - - // add windowed modes next - for (j=0; j < 2; j++) - { - if (cdepths[j] == 0) continue; - for (i=0; defaultres[i][0]; i++) - CHECK(defaultres[i][0],defaultres[i][1]) - ADDMODE(defaultres[i][0],defaultres[i][1],cdepths[j],0,-1) - } - - qsort((void *)validmode, validmodecnt, sizeof(struct validmode_t), (int32_t( *)(const void *,const void *))sortmodes); - - modeschecked=1; -} - -#undef CHECK -#undef ADDMODE - - -// -// resetvideomode() -- resets the video system -// -void resetvideomode(void) -{ - videomodereset = 1; - modeschecked = 0; -} - - -// -// begindrawing() -- locks the framebuffer for drawing -// -void begindrawing(void) -{ - if (bpp > 8) - { - if (offscreenrendering) return; - frameplace = 0; - bytesperline = 0; - imageSize = 0; - modechange = 0; - return; - } - - if (lockcount++ > 0) - return; // already locked - - if (offscreenrendering) return; - - frameplace = fullscreen ? (intptr_t)lpOffscreen : (intptr_t)lpPixels; - - if (!modechange) return; - - modechange=0; - - if (!fullscreen) - { - bytesperline = xres|4; - } - else - { - bytesperline = xres|1; - } - - imageSize = bytesperline*yres; - setvlinebpl(bytesperline); - - { - int32_t i = 0, j = 0; - for (; i<=ydim; i++) - ylookup[i] = j, j += bytesperline; - } -} - - -// -// enddrawing() -- unlocks the framebuffer -// -void enddrawing(void) -{ - if (bpp > 8) - { - if (!offscreenrendering) frameplace = 0; - return; - } - - if (!frameplace) return; - if (lockcount > 1) { lockcount--; return; } - if (!offscreenrendering) frameplace = 0; - lockcount = 0; -} - - -// -// showframe() -- update the display -// -void showframe(int32_t w) -{ - HRESULT result; - DDSURFACEDESC ddsd; - char *p,*q; - int32_t i,j; - -#ifdef USE_OPENGL - if (bpp > 8) - { - if (palfadedelta) - { - bglMatrixMode(GL_PROJECTION); - bglPushMatrix(); - bglLoadIdentity(); - bglMatrixMode(GL_MODELVIEW); - bglPushMatrix(); - bglLoadIdentity(); - - bglDisable(GL_DEPTH_TEST); - bglDisable(GL_ALPHA_TEST); - bglDisable(GL_TEXTURE_2D); - - bglEnable(GL_BLEND); - bglColor4ub(palfadergb.r, palfadergb.g, palfadergb.b, palfadedelta); - - bglBegin(GL_TRIANGLES); - bglVertex2f(-2.5f, 1.f); - bglVertex2f(2.5f, 1.f); - bglVertex2f(.0f, -2.5f); - bglEnd(); - - bglDisable(GL_BLEND); - - bglPopMatrix(); - bglMatrixMode(GL_PROJECTION); - bglPopMatrix(); - } - - bwglSwapBuffers(hDC); - return; - } -#endif - - // w = 1; // wait regardless. ken thinks it's better to do so. - - if (offscreenrendering) return; - - if (lockcount) - { - initprintf("Frame still locked %d times when showframe() called.\n", lockcount); - while (lockcount) enddrawing(); - } - - if (!fullscreen) - { - BitBlt(hDC, 0, 0, xres, yres, hDCSection, 0, 0, SRCCOPY); - return; - } - - if (!w && (IDirectDrawSurface_GetBltStatus(lpDDSBack, DDGBS_CANBLT) == DDERR_WASSTILLDRAWING || - IDirectDrawSurface_GetFlipStatus(lpDDSPrimary, DDGFS_CANFLIP) == DDERR_WASSTILLDRAWING)) - return; - - // lock the backbuffer surface - Bmemset(&ddsd, 0, sizeof(ddsd)); - ddsd.dwSize = sizeof(ddsd); - - result = IDirectDrawSurface_Lock(lpDDSBack, NULL, &ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_NOSYSLOCK | DDLOCK_WAIT, NULL); - - if (result == DDERR_SURFACELOST) - { - if (!appactive) - return; // not in a position to restore display anyway - - IDirectDrawSurface_Restore(lpDDSPrimary); - result = IDirectDrawSurface_Lock(lpDDSBack, NULL, &ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_NOSYSLOCK | DDLOCK_WAIT, NULL); - } - if (result != DD_OK) - { - if (result != DDERR_WASSTILLDRAWING) - initprintf("Failed locking back-buffer surface: %s\n", GetDDrawError(result)); - return; - } - - // copy each scanline - p = (char *)ddsd.lpSurface; - q = (char *)lpOffscreen; - j = xres >> 2; - - for (i=0; i 8) return 0; // no palette in opengl - - Bmemcpy(lpal.palPalEntry, curpalettefaded, sizeof(lpal.palPalEntry)); - for (i=start, n=num-1; n>0; i++, n--) - curpalettefaded[i].f = lpal.palPalEntry[i].peFlags = PC_NOCOLLAPSE; - - if (fullscreen) - { - if (!lpDDPalette) return -1; - result = IDirectDrawPalette_SetEntries(lpDDPalette, 0, 0, 256, (LPPALETTEENTRY)lpal.palPalEntry); - if (result != DD_OK) - { - initprintf("Palette set failed: %s\n", GetDDrawError(result)); - return -1; - } - - return 0; - } - - if (num > 0) - { - rgb = (RGBQUAD *)Bmalloc(sizeof(RGBQUAD)*num); - for (i=start, n=0; n0; i--, start++) { -dapal[0] = curpalette[start].b >> 2; -dapal[1] = curpalette[start].g >> 2; -dapal[2] = curpalette[start].r >> 2; -dapal += 4; -} - -return 0; -}*/ - - -// -// setgamma -// -static int32_t setgammaramp(WORD gt[3][256]) -{ - if (!fullscreen || bpp > 8) - { - // GL and windowed mode use DIB method - int32_t i; - HDC hDC = GetDC(hWindow); - i = SetDeviceGammaRamp(hDC, gt) ? 0 : -1; - ReleaseDC(hWindow, hDC); - return i; - } - else if (appactive) - { - // fullscreen uses DirectX - LPDIRECTDRAWGAMMACONTROL gam; - HRESULT hr; - - if (!(DDdwCaps2 & DDCAPS2_PRIMARYGAMMA)) return -1; - - hr = IDirectDrawSurface_QueryInterface(lpDDSPrimary, &IID_IDirectDrawGammaControl, (LPVOID)&gam); - if (hr != DD_OK) - { - // ShowDDrawErrorBox("Error querying gamma control", hr); - initprintf("Error querying gamma control: %s\n",GetDDrawError(hr)); - return -1; - } - - hr = IDirectDrawGammaControl_SetGammaRamp(gam, 0, (LPDDGAMMARAMP)gt); - if (hr != DD_OK) - { - IDirectDrawGammaControl_Release(gam); - initprintf("Error setting gamma ramp: %s\n",GetDDrawError(hr)); - // ShowDDrawErrorBox("Error setting gamma ramp", hr); - return -1; - } - - IDirectDrawGammaControl_Release(gam); - return 0; - } - else return 0; -} - -int32_t setgamma(void) -{ - int32_t i; - WORD gammaTable[3][256]; - float gamma = max(0.1f,min(4.f,vid_gamma)); - float contrast = max(0.1f,min(3.f,vid_contrast)); - float bright = max(-0.8f,min(0.8f,vid_brightness)); - - double invgamma = 1 / gamma; - double norm = pow(255., invgamma - 1); - - if (!hWindow) return -1; - - // This formula is taken from Doomsday - - for (i = 0; i < 256; i++) - { - double val = i * contrast - (contrast - 1) * 127; - if (gamma != 1) val = pow(val, invgamma) / norm; - val += bright * 128; - - gammaTable[0][i] = gammaTable[1][i] = gammaTable[2][i] = (WORD)max(0.f,(double)min(0xffff,val*256)); - } - return setgammaramp(gammaTable); -} - -static int32_t getgammaramp(WORD gt[3][256]) -{ - if (!hWindow) return -1; - if (!fullscreen || bpp > 8) - { - int32_t i; - HDC hDC = GetDC(hWindow); - i = GetDeviceGammaRamp(hDC, gt) ? 0 : -1; - ReleaseDC(hWindow, hDC); - return i; - } - else - { - LPDIRECTDRAWGAMMACONTROL gam; - HRESULT hr; - - if (!(DDdwCaps2 & DDCAPS2_PRIMARYGAMMA)) return -1; - - hr = IDirectDrawSurface_QueryInterface(lpDDSPrimary, &IID_IDirectDrawGammaControl, (LPVOID)&gam); - if (hr != DD_OK) - { - ShowDDrawErrorBox("Error querying gamma control", hr); - return -1; - } - - hr = IDirectDrawGammaControl_GetGammaRamp(gam, 0, (LPDDGAMMARAMP)gt); - if (hr != DD_OK) - { - IDirectDrawGammaControl_Release(gam); - ShowDDrawErrorBox("Error getting gamma ramp", hr); - return -1; - } - - IDirectDrawGammaControl_Release(gam); - - return 0; - } -} - -// -// InitDirectDraw() -- get DirectDraw started -// - -// device enumerator -static BOOL WINAPI InitDirectDraw_enum(GUID *lpGUID, LPSTR lpDesc, LPSTR lpName, LPVOID lpContext) -{ - UNREFERENCED_PARAMETER(lpGUID); - UNREFERENCED_PARAMETER(lpName); - UNREFERENCED_PARAMETER(lpContext); - UNREFERENCED_PARAMETER(lpDesc); - // initprintf(" * %s\n", lpDesc); - return 1; -} - -static BOOL InitDirectDraw(void) -{ - HRESULT result; - HRESULT(WINAPI *aDirectDrawCreate)(GUID *, LPDIRECTDRAW *, IUnknown *); - HRESULT(WINAPI *aDirectDrawEnumerate)(LPDDENUMCALLBACK, LPVOID); - DDCAPS ddcaps; - - if (bDDrawInited) return FALSE; - - initprintf("Initializing DirectDraw...\n"); - - // load up the DirectDraw DLL - if (!hDDrawDLL) - { - // initprintf(" - Loading DDRAW.DLL\n"); - hDDrawDLL = LoadLibrary("DDRAW.DLL"); - if (!hDDrawDLL) - { - ShowErrorBox("Error loading DDRAW.DLL"); - return TRUE; - } - } - - // get the pointer to DirectDrawEnumerate - aDirectDrawEnumerate = (void *)GetProcAddress(hDDrawDLL, "DirectDrawEnumerateA"); - if (!aDirectDrawEnumerate) - { - ShowErrorBox("Error fetching DirectDrawEnumerate()"); - UninitDirectDraw(); - return TRUE; - } - - // enumerate the devices to make us look fancy - // initprintf(" - Enumerating display devices\n"); - aDirectDrawEnumerate(InitDirectDraw_enum, NULL); - - // get the pointer to DirectDrawCreate - aDirectDrawCreate = (void *)GetProcAddress(hDDrawDLL, "DirectDrawCreate"); - if (!aDirectDrawCreate) - { - ShowErrorBox("Error fetching DirectDrawCreate()"); - UninitDirectDraw(); - return TRUE; - } - - // create a new DirectDraw object - // initprintf(" - Creating DirectDraw object\n"); - result = aDirectDrawCreate(NULL, &lpDD, NULL); - if (result != DD_OK) - { - ShowDDrawErrorBox("DirectDrawCreate() failed", result); - UninitDirectDraw(); - return TRUE; - } - - // fetch capabilities - // initprintf(" - Checking capabilities\n"); - ddcaps.dwSize = sizeof(DDCAPS); - result = IDirectDraw_GetCaps(lpDD, &ddcaps, NULL); - if (result != DD_OK) - { - initprintf(" Unable to get capabilities.\n"); - } - else - { - DDdwCaps = ddcaps.dwCaps; - DDdwCaps2 = ddcaps.dwCaps2; - } - - bDDrawInited = TRUE; - - return FALSE; -} - - -// -// UninitDirectDraw() -- clean up DirectDraw -// -static void UninitDirectDraw(void) -{ - if (bDDrawInited) initprintf("Uninitializing DirectDraw...\n"); - - ReleaseDirectDrawSurfaces(); - - RestoreDirectDrawMode(); - - if (lpDD) - { - // initprintf(" - Releasing DirectDraw object\n"); - IDirectDraw_Release(lpDD); - lpDD = NULL; - } - - if (hDDrawDLL) - { - // initprintf(" - Unloading DDRAW.DLL\n"); - FreeLibrary(hDDrawDLL); - hDDrawDLL = NULL; - } - - bDDrawInited = FALSE; -} - - -// -// RestoreDirectDrawMode() -- resets the screen mode -// -static int32_t RestoreDirectDrawMode(void) -{ - HRESULT result; - - if (fullscreen == 0 || /*bpp > 8 ||*/ !bDDrawInited) return FALSE; - - if (modesetusing == 1) ChangeDisplaySettings(NULL,0); - else if (modesetusing == 0) - { - // restore previous display mode and set to normal cooperative level - result = IDirectDraw_RestoreDisplayMode(lpDD); - if (result != DD_OK) - { - ShowDDrawErrorBox("Error restoring display mode", result); - UninitDirectDraw(); - return TRUE; - } - - result = IDirectDraw_SetCooperativeLevel(lpDD, hWindow, DDSCL_NORMAL); - if (result != DD_OK) - { - ShowDDrawErrorBox("Error setting cooperative level", result); - UninitDirectDraw(); - return TRUE; - } - } - modesetusing = -1; - - return FALSE; -} - - -// -// ReleaseDirectDrawSurfaces() -- release the front and back buffers -// -static void ReleaseDirectDrawSurfaces(void) -{ - if (lpDDPalette) - { - // initprintf(" - Releasing palette\n"); - IDirectDrawPalette_Release(lpDDPalette); - lpDDPalette = NULL; - } - - if (lpDDSBack) - { - // initprintf(" - Releasing back-buffer surface\n"); - IDirectDrawSurface_Release(lpDDSBack); - lpDDSBack = NULL; - } - - if (lpDDSPrimary) - { - // initprintf(" - Releasing primary surface\n"); - IDirectDrawSurface_Release(lpDDSPrimary); - lpDDSPrimary = NULL; - } - - if (lpOffscreen) - { - // initprintf(" - Freeing offscreen buffer\n"); - Bfree(lpOffscreen); - lpOffscreen = NULL; - } -} - - -// -// SetupDirectDraw() -- sets up DirectDraw rendering -// -static int32_t SetupDirectDraw(int32_t width, int32_t height) -{ - HRESULT result; - DDSURFACEDESC ddsd; - int32_t i; - - // now create the DirectDraw surfaces - ZeroMemory(&ddsd, sizeof(ddsd)); - ddsd.dwSize = sizeof(ddsd); - ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; - ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX; - ddsd.dwBackBufferCount = 2; // triple-buffer - - // initprintf(" - Creating primary surface\n"); - result = IDirectDraw_CreateSurface(lpDD, &ddsd, &lpDDSPrimary, NULL); - if (result != DD_OK) - { - ShowDDrawErrorBox("Failure creating primary surface", result); - UninitDirectDraw(); - return TRUE; - } - - ZeroMemory(&ddsd.ddsCaps, sizeof(ddsd.ddsCaps)); - ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER; - numpages = 1; // KJS 20031225 - - // initprintf(" - Getting back buffer\n"); - result = IDirectDrawSurface_GetAttachedSurface(lpDDSPrimary, &ddsd.ddsCaps, &lpDDSBack); - if (result != DD_OK) - { - ShowDDrawErrorBox("Failure fetching back-buffer surface", result); - UninitDirectDraw(); - return TRUE; - } - - // initprintf(" - Allocating offscreen buffer\n"); - lpOffscreen = (char *)Bmalloc((width|1)*height); - if (!lpOffscreen) - { - ShowErrorBox("Failure allocating offscreen buffer"); - UninitDirectDraw(); - return TRUE; - } - - // attach a palette to the primary surface - // initprintf(" - Creating palette\n"); - for (i=0; i<256; i++) - curpalettefaded[i].f = PC_NOCOLLAPSE; - result = IDirectDraw_CreatePalette(lpDD, DDPCAPS_8BIT | DDPCAPS_ALLOW256, (LPPALETTEENTRY)curpalettefaded, &lpDDPalette, NULL); - if (result != DD_OK) - { - ShowDDrawErrorBox("Failure creating palette", result); - UninitDirectDraw(); - return TRUE; - } - - result = IDirectDrawSurface_SetPalette(lpDDSPrimary, lpDDPalette); - if (result != DD_OK) - { - ShowDDrawErrorBox("Failure setting palette", result); - UninitDirectDraw(); - return TRUE; - } - - return FALSE; -} - - -// -// UninitDIB() -- clean up the DIB renderer -// -static void UninitDIB(void) -{ - if (hPalette) - { - DeleteObject(hPalette); - hPalette = NULL; - } - - if (hDCSection) - { - DeleteDC(hDCSection); - hDCSection = NULL; - } - - if (hDIBSection) - { - DeleteObject(hDIBSection); - hDIBSection = NULL; - } - - if (hDC) - { - ReleaseDC(hWindow, hDC); - hDC = NULL; - } -} - - -// -// SetupDIB() -- sets up DIB rendering -// -static int32_t SetupDIB(int32_t width, int32_t height) -{ - struct binfo - { - BITMAPINFOHEADER header; - RGBQUAD colours[256]; - } dibsect; - int32_t i; - - if (!hDC) - { - hDC = GetDC(hWindow); - if (!hDC) - { - ShowErrorBox("Error getting device context"); - return TRUE; - } - } - - if (hDCSection) - { - DeleteDC(hDCSection); - hDCSection = NULL; - } - - // destroy the previous DIB section if it existed - if (hDIBSection) - { - DeleteObject(hDIBSection); - hDIBSection = NULL; - } - - // create the new DIB section - memset(&dibsect, 0, sizeof(dibsect)); - numpages = 1; // KJS 20031225 - dibsect.header.biSize = sizeof(dibsect.header); - dibsect.header.biWidth = width|1; // Ken did this - dibsect.header.biHeight = -height; - dibsect.header.biPlanes = 1; - dibsect.header.biBitCount = 8; - dibsect.header.biCompression = BI_RGB; - dibsect.header.biClrUsed = 256; - dibsect.header.biClrImportant = 256; - for (i=0; i<256; i++) - { - dibsect.colours[i].rgbBlue = curpalette[i].b; - dibsect.colours[i].rgbGreen = curpalette[i].g; - dibsect.colours[i].rgbRed = curpalette[i].r; - } - - hDIBSection = CreateDIBSection(hDC, (BITMAPINFO *)&dibsect, DIB_RGB_COLORS, &lpPixels, NULL, 0); - if (!hDIBSection) - { - ReleaseDC(hWindow, hDC); - hDC = NULL; - - ShowErrorBox("Error creating DIB section"); - return TRUE; - } - - memset(lpPixels, 0, width*height); - - // create a compatible memory DC - hDCSection = CreateCompatibleDC(hDC); - if (!hDCSection) - { - ReleaseDC(hWindow, hDC); - hDC = NULL; - - ShowErrorBox("Error creating compatible DC"); - return TRUE; - } - - // select the DIB section into the memory DC - if (!SelectObject(hDCSection, hDIBSection)) - { - ReleaseDC(hWindow, hDC); - hDC = NULL; - DeleteDC(hDCSection); - hDCSection = NULL; - - ShowErrorBox("Error creating compatible DC"); - return TRUE; - } - - return FALSE; -} - -#ifdef USE_OPENGL -// -// ReleaseOpenGL() -- cleans up OpenGL rendering stuff -// - -static void ReleaseOpenGL(void) -{ - if (hGLRC) - { - polymost_glreset(); - if (!bwglMakeCurrent(0,0)) { } - if (!bwglDeleteContext(hGLRC)) { } - hGLRC = NULL; - } - if (hGLWindow) - { - if (hDC) - { - ReleaseDC(hGLWindow, hDC); - hDC = NULL; - } - - DestroyWindow(hGLWindow); - hGLWindow = NULL; - } -} - - -// -// UninitOpenGL() -- unitializes any openGL libraries -// -static void UninitOpenGL(void) -{ - ReleaseOpenGL(); -} - - -// -// SetupOpenGL() -- sets up opengl rendering -// -static int32_t SetupOpenGL(int32_t width, int32_t height, int32_t bitspp) -{ - PIXELFORMATDESCRIPTOR pfd = - { - sizeof(PIXELFORMATDESCRIPTOR), - 1, //Version Number - PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER, //Must Support these - PFD_TYPE_RGBA, //Request An RGBA Format - 0, //Select Our Color Depth - 0,0,0,0,0,0, //Color Bits Ignored - 0, //No Alpha Buffer - 0, //Shift Bit Ignored - 0, //No Accumulation Buffer - 0,0,0,0, //Accumulation Bits Ignored - 32, //16/24/32 Z-Buffer depth - 1, //No Stencil Buffer - 0, //No Auxiliary Buffer - PFD_MAIN_PLANE, //Main Drawing Layer - 0, //Reserved - 0,0,0 //Layer Masks Ignored - }; - GLuint PixelFormat; - int32_t minidriver; - int32_t err; - pfd.cColorBits = bitspp; - - hGLWindow = CreateWindow( - WindowClass, - "OpenGL Window", - WS_CHILD|WS_VISIBLE, - 0,0, - width,height, - hWindow, - (HMENU)0, - hInstance, - NULL); - if (!hGLWindow) - { - ShowErrorBox("Error creating OpenGL child window."); - return TRUE; - } - - hDC = GetDC(hGLWindow); - if (!hDC) - { - ReleaseOpenGL(); - ShowErrorBox("Error getting device context"); - return TRUE; - } - - minidriver = Bstrcasecmp(gldriver,"opengl32.dll"); - - if (minidriver) PixelFormat = bwglChoosePixelFormat(hDC,&pfd); - else PixelFormat = ChoosePixelFormat(hDC,&pfd); - if (!PixelFormat) - { - ReleaseOpenGL(); - ShowErrorBox("Can't choose pixel format"); - return TRUE; - } - - if (minidriver) err = bwglSetPixelFormat(hDC, PixelFormat, &pfd); - else err = SetPixelFormat(hDC, PixelFormat, &pfd); - if (!err) - { - ReleaseOpenGL(); - ShowErrorBox("Can't set pixel format"); - return TRUE; - } - - hGLRC = bwglCreateContext(hDC); - if (!hGLRC) - { - ReleaseOpenGL(); - ShowErrorBox("Can't create GL RC"); - return TRUE; - } - - if (!bwglMakeCurrent(hDC, hGLRC)) - { - ReleaseOpenGL(); - ShowErrorBox("Can't activate GL RC"); - return TRUE; - } - - polymost_glreset(); - - bglEnable(GL_TEXTURE_2D); - bglShadeModel(GL_SMOOTH); //GL_FLAT - bglClearColor(0,0,0,0.5); //Black Background - bglHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); //Use FASTEST for ortho! - bglHint(GL_LINE_SMOOTH_HINT,GL_NICEST); - bglHint(GL_TEXTURE_COMPRESSION_HINT, GL_NICEST); - bglDisable(GL_DITHER); - - { - GLubyte *p,*p2,*p3; - int32_t err = 0; - - glinfo.vendor = (char *)bglGetString(GL_VENDOR); - glinfo.renderer = (char *)bglGetString(GL_RENDERER); - glinfo.version = (char *)bglGetString(GL_VERSION); - glinfo.extensions = (char *)bglGetString(GL_EXTENSIONS); - - // GL driver blacklist - - if (!Bstrcmp(glinfo.vendor,"Microsoft Corporation")) err = 1; - else if (!Bstrcmp(glinfo.vendor,"SiS")) err = 1; - else if (!Bstrcmp(glinfo.vendor,"3Dfx Interactive Inc.")) err = 1; - else if (!Bstrcmp(glinfo.vendor,"Intel")) - { - if (!Bstrncmp(glinfo.renderer,"Intel 8", 7)) // 845G and 865G confirmed to work - err = 0; - else if (!Bstrncmp(glinfo.renderer,"Intel 9", 7)) // 915G, 945GM, 965/963 GMA confirmed to work - err = 0; - else if (!Bstrcmp(glinfo.renderer,"Intel Cantiga")) - err = 0; - else if (!Bstrcmp(glinfo.renderer,"Mobile Intel(R) 4 Series Express Chipset Family")) - err = 0; - else if (!Bstrcmp(glinfo.renderer,"Intel Brookdale-G")) - err = 0; - else err = 1; - } - else - { - if (!Bstrcmp(glinfo.vendor,"ATI Technologies Inc.")) - { -#ifdef POLYMER - pr_ati_fboworkaround = 1; - initprintf("Enabling ATI FBO color attachment workaround.\n"); -#endif - if (Bstrstr(glinfo.renderer,"Radeon X1")) - { - r_vbos = 0; -#ifdef POLYMER - pr_ati_nodepthoffset = 1; - initprintf("Enabling ATI R520 polygon offset workaround.\n"); -#endif - } -#ifdef POLYMER - else - pr_ati_nodepthoffset = 0; -#endif - } -#ifdef POLYMER - else - pr_ati_fboworkaround = 0; -#endif - } - - if (!forcegl && err) - { - OSD_Printf("Unsupported OpenGL driver detected. GL modes will be unavailable. Use -forcegl to override.\n"); - wm_msgbox("Unsupported OpenGL driver", "Unsupported OpenGL driver detected. GL modes will be unavailable."); - ReleaseOpenGL(); - unloadgldriver(); - nogl = 1; - modeschecked = 0; - getvalidmodes(); - return TRUE; - } - - glinfo.maxanisotropy = 1.0; - glinfo.bgra = 0; - glinfo.texcompr = 0; - - // process the extensions string and flag stuff we recognize - p = (GLubyte *)Bstrdup(glinfo.extensions); - p3 = p; - while ((p2 = (GLubyte *)Bstrtoken(p3==p?(char *)p:NULL, " ", (char **)&p3, 1)) != NULL) - { - if (!Bstrcmp((char *)p2, "GL_EXT_texture_filter_anisotropic")) - { - // supports anisotropy. get the maximum anisotropy level - bglGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &glinfo.maxanisotropy); - } - else if (!Bstrcmp((char *)p2, "GL_EXT_texture_edge_clamp") || - !Bstrcmp((char *)p2, "GL_SGIS_texture_edge_clamp")) - { - // supports GL_CLAMP_TO_EDGE or GL_CLAMP_TO_EDGE_SGIS - glinfo.clamptoedge = 1; - } - else if (!Bstrcmp((char *)p2, "GL_EXT_bgra")) - { - // support bgra textures - glinfo.bgra = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_texture_compression") && Bstrcmp(glinfo.vendor,"ATI Technologies Inc.")) - { - // support texture compression - glinfo.texcompr = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_texture_non_power_of_two")) - { - // support non-power-of-two texture sizes - glinfo.texnpot = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_fragment_program")) - { - glinfo.arbfp = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_depth_texture")) - { - glinfo.depthtex = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_shadow")) - { - glinfo.shadow = 1; - } - else if (!Bstrcmp((char *)p2, "GL_EXT_framebuffer_object")) - { - glinfo.fbos = 1; - } - else if (!Bstrcmp((char *)p2, "GL_NV_texture_rectangle") || - !Bstrcmp((char *)p2, "GL_EXT_texture_rectangle")) - { - glinfo.rect = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_multitexture")) - { - glinfo.multitex = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_texture_env_combine")) - { - glinfo.envcombine = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_vertex_buffer_object")) - { - glinfo.vbos = 1; - } - else if (!Bstrcmp((char *)p2, "WGL_EXT_swap_control")) - { - glinfo.vsync = 1; - } - else if (!Bstrcmp((char *)p2, "GL_EXT_gpu_shader4")) - { - glinfo.sm4 = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_occlusion_query")) - { - glinfo.occlusionqueries = 1; - } - else if (!Bstrcmp((char *)p2, "GL_ARB_shader_objects")) - { - glinfo.glsl = 1; - } - } - Bfree(p); - } - numpages = 2; // KJS 20031225: tell rotatesprite that it's double buffered! - - if (!glinfo.dumped) - { - int32_t oldbpp = bpp; - bpp = 32; - osdcmd_glinfo(NULL); - glinfo.dumped = TRUE; - bpp = oldbpp; - } - - return FALSE; -} -#endif - -// -// CreateAppWindow() -- create the application window -// -static BOOL CreateAppWindow(int32_t modenum) -{ - RECT rect; - int32_t w, h, x, y, stylebits = 0, stylebitsex = 0; - int32_t width, height, fs, bitspp; - - HRESULT result; - - if (modenum == 0x7fffffff) - { - width = customxdim; - height = customydim; - fs = customfs; - bitspp = custombpp; - } - else - { - width = validmode[modenum].xdim; - height = validmode[modenum].ydim; - fs = validmode[modenum].fs; - bitspp = validmode[modenum].bpp; - } - - if (width == xres && height == yres && fs == fullscreen && bitspp == bpp && !videomodereset) return FALSE; - - if (hWindow) - { - if (bpp > 8) - { -#ifdef USE_OPENGL - ReleaseOpenGL(); -#endif - } - else - { - ReleaseDirectDrawSurfaces(); - } - - if (!fs && fullscreen) - { - // restore previous display mode and set to normal cooperative level - RestoreDirectDrawMode(); -#ifdef USE_OPENGL - } - else if (fs && fullscreen) - { - // using CDS for GL modes, so restore from DirectDraw - if (bpp != bitspp) RestoreDirectDrawMode(); -#endif - } - - - ShowWindow(hWindow, SW_HIDE); // so Windows redraws what's behind if the window shrinks - } - - if (fs) - { - stylebitsex = WS_EX_TOPMOST; - stylebits = WS_POPUP; - } - else - { - stylebitsex = 0; - stylebits = WINDOW_STYLE; - } - - if (!hWindow) - { - hWindow = CreateWindowEx( - stylebitsex, - WindowClass, - apptitle, - stylebits, - CW_USEDEFAULT, - CW_USEDEFAULT, - 320, - 200, - NULL, - NULL, - hInstance, - 0); - if (!hWindow) - { - ShowErrorBox("Unable to create window"); - return TRUE; - } - - startwin_close(); - } - else - { - SetWindowLong(hWindow,GWL_EXSTYLE,stylebitsex); - SetWindowLong(hWindow,GWL_STYLE,stylebits); - } - - // resize the window - if (!fs) - { - rect.left = 0; - rect.top = 0; - rect.right = width-1; - rect.bottom = height-1; - AdjustWindowRect(&rect, stylebits, FALSE); - - w = (rect.right - rect.left); - h = (rect.bottom - rect.top); - x = (desktopxdim - w) / 2; - y = (desktopydim - h) / 2; - } - else - { - x=y=0; - w=width; - h=height; - } - - if (windowx == -1) - windowx = x; - - if (windowy == -1) - windowy = y; - - SetWindowText(hWindow, apptitle); - ShowWindow(hWindow, SW_SHOWNORMAL); - SetForegroundWindow(hWindow); - SetFocus(hWindow); - - SetWindowPos(hWindow, HWND_TOP, windowpos?windowx:x, windowpos?windowy:y, w, h, 0); - - // fullscreen? - if (!fs) - { - if (bitspp > 8) - { -#ifdef USE_OPENGL - // yes, start up opengl - if (SetupOpenGL(width,height,bitspp)) - return TRUE; -#endif - } - else if (SetupDIB(width,height)) // use DIB section - return TRUE; - - modesetusing = -1; - } - else - { - // yes, set up DirectDraw - - // clean up after the DIB renderer if it was being used - UninitDIB(); - - if (!bDDrawInited) - { - DestroyWindow(hWindow); - hWindow = NULL; - return TRUE; - } - -#ifdef USE_OPENGL - if (bitspp > 8) - { - DEVMODE dmScreenSettings; - - ZeroMemory(&dmScreenSettings, sizeof(DEVMODE)); - dmScreenSettings.dmSize = sizeof(DEVMODE); - dmScreenSettings.dmPelsWidth = width; - dmScreenSettings.dmPelsHeight = height; - dmScreenSettings.dmBitsPerPel = bitspp; - dmScreenSettings.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT; - if (modenum != 0x7fffffff) - { - dmScreenSettings.dmDisplayFrequency = validmode[modenum].extra; - dmScreenSettings.dmFields |= DM_DISPLAYFREQUENCY; - } - - if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) - { - ShowErrorBox("Video mode not supported"); - return TRUE; - } - - ShowWindow(hWindow, SW_SHOWNORMAL); - SetForegroundWindow(hWindow); - SetFocus(hWindow); - - modesetusing = 1; - } - else -#endif - { - // set exclusive cooperative level - result = IDirectDraw_SetCooperativeLevel(lpDD, hWindow, DDSCL_ALLOWMODEX|DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN); - if (result != DD_OK) - { - ShowDDrawErrorBox("Error setting cooperative level", result); - UninitDirectDraw(); - return TRUE; - } - - result = IDirectDraw_SetDisplayMode(lpDD, width, height, bitspp); - if (result != DD_OK) - { - ShowDDrawErrorBox("Error setting display mode", result); - UninitDirectDraw(); - return TRUE; - } - - modesetusing = 0; - } - - if (bitspp > 8) - { -#ifdef USE_OPENGL - // we want an opengl mode - if (SetupOpenGL(width,height,bitspp)) - { - return TRUE; - } -#endif - } - else - { - // we want software - if (SetupDirectDraw(width,height)) - { - return TRUE; - } - } - } - -#ifdef USE_OPENGL - if (bitspp > 8) loadglextensions(); -#endif - - xres = width; - yres = height; - bpp = bitspp; - fullscreen = fs; - curvidmode = modenum; - - frameplace = 0; - lockcount = 0; - - // bytesperline is set when framebuffer is locked - //bytesperline = width; - //imageSize = bytesperline*yres; - - modechange = 1; - OSD_ResizeDisplay(xres,yres); - - UpdateWindow(hWindow); - - return FALSE; -} - - -// -// DestroyAppWindow() -- destroys the application window -// -static void DestroyAppWindow(void) -{ - if (hWindow && gammabrightness) - { - setgammaramp(sysgamma); - gammabrightness = 0; - } - -#ifdef USE_OPENGL - UninitOpenGL(); -#endif - UninitDirectDraw(); - UninitDIB(); - - if (hWindow) - { - DestroyWindow(hWindow); - hWindow = NULL; - } -} - - -// -// ShowDDrawErrorBox() -- shows an error message box for a DirectDraw error -// -static void ShowDDrawErrorBox(const char *m, HRESULT r) -{ - TCHAR msg[1024]; - - wsprintf(msg, "%s: %s", m, GetDDrawError(r)); - MessageBox(0, msg, apptitle, MB_OK|MB_ICONSTOP); -} - - -// -// GetDDrawError() -- stinking huge list of error messages since MS didn't want to include -// them in the DLL -// -static const char *GetDDrawError(HRESULT code) -{ - switch (code) - { - case DD_OK: - return "DD_OK"; - case DDERR_ALREADYINITIALIZED: - return "DDERR_ALREADYINITIALIZED"; - case DDERR_BLTFASTCANTCLIP: - return "DDERR_BLTFASTCANTCLIP"; - case DDERR_CANNOTATTACHSURFACE: - return "DDERR_CANNOTATTACHSURFACE"; - case DDERR_CANNOTDETACHSURFACE: - return "DDERR_CANNOTDETACHSURFACE"; - case DDERR_CANTCREATEDC: - return "DDERR_CANTCREATEDC"; - case DDERR_CANTDUPLICATE: - return "DDERR_CANTDUPLICATE"; - case DDERR_CANTLOCKSURFACE: - return "DDERR_CANTLOCKSURFACE"; - case DDERR_CANTPAGELOCK: - return "DDERR_CANTPAGELOCK"; - case DDERR_CANTPAGEUNLOCK: - return "DDERR_CANTPAGEUNLOCK"; - case DDERR_CLIPPERISUSINGHWND: - return "DDERR_CLIPPERISUSINGHWND"; - case DDERR_COLORKEYNOTSET: - return "DDERR_COLORKEYNOTSET"; - case DDERR_CURRENTLYNOTAVAIL: - return "DDERR_CURRENTLYNOTAVAIL"; - case DDERR_DCALREADYCREATED: - return "DDERR_DCALREADYCREATED"; - case DDERR_DEVICEDOESNTOWNSURFACE: - return "DDERR_DEVICEDOESNTOWNSURFACE"; - case DDERR_DIRECTDRAWALREADYCREATED: - return "DDERR_DIRECTDRAWALREADYCREATED"; - case DDERR_EXCEPTION: - return "DDERR_EXCEPTION"; - case DDERR_EXCLUSIVEMODEALREADYSET: - return "DDERR_EXCLUSIVEMODEALREADYSET"; - case DDERR_EXPIRED: - return "DDERR_EXPIRED"; - case DDERR_GENERIC: - return "DDERR_GENERIC"; - case DDERR_HEIGHTALIGN: - return "DDERR_HEIGHTALIGN"; - case DDERR_HWNDALREADYSET: - return "DDERR_HWNDALREADYSET"; - case DDERR_HWNDSUBCLASSED: - return "DDERR_HWNDSUBCLASSED"; - case DDERR_IMPLICITLYCREATED: - return "DDERR_IMPLICITLYCREATED"; - case DDERR_INCOMPATIBLEPRIMARY: - return "DDERR_INCOMPATIBLEPRIMARY"; - case DDERR_INVALIDCAPS: - return "DDERR_INVALIDCAPS"; - case DDERR_INVALIDCLIPLIST: - return "DDERR_INVALIDCLIPLIST"; - case DDERR_INVALIDDIRECTDRAWGUID: - return "DDERR_INVALIDDIRECTDRAWGUID"; - case DDERR_INVALIDMODE: - return "DDERR_INVALIDMODE"; - case DDERR_INVALIDOBJECT: - return "DDERR_INVALIDOBJECT"; - case DDERR_INVALIDPARAMS: - return "DDERR_INVALIDPARAMS"; - case DDERR_INVALIDPIXELFORMAT: - return "DDERR_INVALIDPIXELFORMAT"; - case DDERR_INVALIDPOSITION: - return "DDERR_INVALIDPOSITION"; - case DDERR_INVALIDRECT: - return "DDERR_INVALIDRECT"; - case DDERR_INVALIDSTREAM: - return "DDERR_INVALIDSTREAM"; - case DDERR_INVALIDSURFACETYPE: - return "DDERR_INVALIDSURFACETYPE"; - case DDERR_LOCKEDSURFACES: - return "DDERR_LOCKEDSURFACES"; - case DDERR_MOREDATA: - return "DDERR_MOREDATA"; - case DDERR_NO3D: - return "DDERR_NO3D"; - case DDERR_NOALPHAHW: - return "DDERR_NOALPHAHW"; - case DDERR_NOBLTHW: - return "DDERR_NOBLTHW"; - case DDERR_NOCLIPLIST: - return "DDERR_NOCLIPLIST"; - case DDERR_NOCLIPPERATTACHED: - return "DDERR_NOCLIPPERATTACHED"; - case DDERR_NOCOLORCONVHW: - return "DDERR_NOCOLORCONVHW"; - case DDERR_NOCOLORKEY: - return "DDERR_NOCOLORKEY"; - case DDERR_NOCOLORKEYHW: - return "DDERR_NOCOLORKEYHW"; - case DDERR_NOCOOPERATIVELEVELSET: - return "DDERR_NOCOOPERATIVELEVELSET"; - case DDERR_NODC: - return "DDERR_NODC"; - case DDERR_NODDROPSHW: - return "DDERR_NODDROPSHW"; - case DDERR_NODIRECTDRAWHW: - return "DDERR_NODIRECTDRAWHW"; - case DDERR_NODIRECTDRAWSUPPORT: - return "DDERR_NODIRECTDRAWSUPPORT"; - case DDERR_NOEMULATION: - return "DDERR_NOEMULATION"; - case DDERR_NOEXCLUSIVEMODE: - return "DDERR_NOEXCLUSIVEMODE"; - case DDERR_NOFLIPHW: - return "DDERR_NOFLIPHW"; - case DDERR_NOFOCUSWINDOW: - return "DDERR_NOFOCUSWINDOW"; - case DDERR_NOGDI: - return "DDERR_NOGDI"; - case DDERR_NOHWND: - return "DDERR_NOHWND"; - case DDERR_NOMIPMAPHW: - return "DDERR_NOMIPMAPHW"; - case DDERR_NOMIRRORHW: - return "DDERR_NOMIRRORHW"; - case DDERR_NONONLOCALVIDMEM: - return "DDERR_NONONLOCALVIDMEM"; - case DDERR_NOOPTIMIZEHW: - return "DDERR_NOOPTIMIZEHW"; - case DDERR_NOOVERLAYDEST: - return "DDERR_NOOVERLAYDEST"; - case DDERR_NOOVERLAYHW: - return "DDERR_NOOVERLAYHW"; - case DDERR_NOPALETTEATTACHED: - return "DDERR_NOPALETTEATTACHED"; - case DDERR_NOPALETTEHW: - return "DDERR_NOPALETTEHW"; - case DDERR_NORASTEROPHW: - return "DDERR_NORASTEROPHW"; - case DDERR_NOROTATIONHW: - return "DDERR_NOROTATIONHW"; - case DDERR_NOSTRETCHHW: - return "DDERR_NOSTRETCHHW"; - case DDERR_NOT4BITCOLOR: - return "DDERR_NOT4BITCOLOR"; - case DDERR_NOT4BITCOLORINDEX: - return "DDERR_NOT4BITCOLORINDEX"; - case DDERR_NOT8BITCOLOR: - return "DDERR_NOT8BITCOLOR"; - case DDERR_NOTAOVERLAYSURFACE: - return "DDERR_NOTAOVERLAYSURFACE"; - case DDERR_NOTEXTUREHW: - return "DDERR_NOTEXTUREHW"; - case DDERR_NOTFLIPPABLE: - return "DDERR_NOTFLIPPABLE"; - case DDERR_NOTFOUND: - return "DDERR_NOTFOUND"; - case DDERR_NOTINITIALIZED: - return "DDERR_NOTINITIALIZED"; - case DDERR_NOTLOADED: - return "DDERR_NOTLOADED"; - case DDERR_NOTLOCKED: - return "DDERR_NOTLOCKED"; - case DDERR_NOTPAGELOCKED: - return "DDERR_NOTPAGELOCKED"; - case DDERR_NOTPALETTIZED: - return "DDERR_NOTPALETTIZED"; - case DDERR_NOVSYNCHW: - return "DDERR_NOVSYNCHW"; - case DDERR_NOZBUFFERHW: - return "DDERR_NOZBUFFERHW"; - case DDERR_NOZOVERLAYHW: - return "DDERR_NOZOVERLAYHW"; - case DDERR_OUTOFCAPS: - return "DDERR_OUTOFCAPS"; - case DDERR_OUTOFMEMORY: - return "DDERR_OUTOFMEMORY"; - case DDERR_OUTOFVIDEOMEMORY: - return "DDERR_OUTOFVIDEOMEMORY"; - case DDERR_OVERLAPPINGRECTS: - return "DDERR_OVERLAPPINGRECTS"; - case DDERR_OVERLAYCANTCLIP: - return "DDERR_OVERLAYCANTCLIP"; - case DDERR_OVERLAYCOLORKEYONLYONEACTIVE: - return "DDERR_OVERLAYCOLORKEYONLYONEACTIVE"; - case DDERR_OVERLAYNOTVISIBLE: - return "DDERR_OVERLAYNOTVISIBLE"; - case DDERR_PALETTEBUSY: - return "DDERR_PALETTEBUSY"; - case DDERR_PRIMARYSURFACEALREADYEXISTS: - return "DDERR_PRIMARYSURFACEALREADYEXISTS"; - case DDERR_REGIONTOOSMALL: - return "DDERR_REGIONTOOSMALL"; - case DDERR_SURFACEALREADYATTACHED: - return "DDERR_SURFACEALREADYATTACHED"; - case DDERR_SURFACEALREADYDEPENDENT: - return "DDERR_SURFACEALREADYDEPENDENT"; - case DDERR_SURFACEBUSY: - return "DDERR_SURFACEBUSY"; - case DDERR_SURFACEISOBSCURED: - return "DDERR_SURFACEISOBSCURED"; - case DDERR_SURFACELOST: - return "DDERR_SURFACELOST"; - case DDERR_SURFACENOTATTACHED: - return "DDERR_SURFACENOTATTACHED"; - case DDERR_TOOBIGHEIGHT: - return "DDERR_TOOBIGHEIGHT"; - case DDERR_TOOBIGSIZE: - return "DDERR_TOOBIGSIZE"; - case DDERR_TOOBIGWIDTH: - return "DDERR_TOOBIGWIDTH"; - case DDERR_UNSUPPORTED: - return "DDERR_UNSUPPORTED"; - case DDERR_UNSUPPORTEDFORMAT: - return "DDERR_UNSUPPORTEDFORMAT"; - case DDERR_UNSUPPORTEDMASK: - return "DDERR_UNSUPPORTEDMASK"; - case DDERR_UNSUPPORTEDMODE: - return "DDERR_UNSUPPORTEDMODE"; - case DDERR_VERTICALBLANKINPROGRESS: - return "DDERR_VERTICALBLANKINPROGRESS"; - case DDERR_VIDEONOTACTIVE: - return "DDERR_VIDEONOTACTIVE"; - case DDERR_WASSTILLDRAWING: - return "DDERR_WASSTILLDRAWING"; - case DDERR_WRONGMODE: - return "DDERR_WRONGMODE"; - case DDERR_XALIGN: - return "DDERR_XALIGN"; - default: - break; - } - return "Unknown error"; -} - - - - - - -//------------------------------------------------------------------------------------------------- -// MOSTLY STATIC INTERNAL WINDOWS THINGS -//================================================================================================= - -// -// ShowErrorBox() -- shows an error message box -// -static void ShowErrorBox(const char *m) -{ - TCHAR msg[1024]; - - wsprintf(msg, "%s: %s", m, GetWindowsErrorMsg(GetLastError())); - MessageBox(0, msg, apptitle, MB_OK|MB_ICONSTOP); -} - - -// -// CheckWinVersion() -- check to see what version of Windows we happen to be running under -// -static inline BOOL CheckWinVersion(void) -{ - ZeroMemory(&osv, sizeof(osv)); - osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); - - // we don't like anything older than Windows XP - - if (!GetVersionEx((LPOSVERSIONINFOA)&osv)) return FALSE; - - if (osv.dwMajorVersion >= 6) return TRUE; - if (osv.dwMajorVersion == 5 && osv.dwMinorVersion >= 1) return TRUE; - - return FALSE; -} - - -// -// WndProcCallback() -- the Windows window callback -// -static LRESULT CALLBACK WndProcCallback(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - /* RECT rect; - POINT pt; - HRESULT result; */ - -#ifdef USE_OPENGL - if (hWnd == hGLWindow) return DefWindowProc(hWnd,uMsg,wParam,lParam); -#endif - - switch (uMsg) - { - case WM_SYSCOMMAND: - // don't let the monitor fall asleep or let the screensaver activate - if (wParam == SC_SCREENSAVE || wParam == SC_MONITORPOWER) return 0; - - // Since DirectInput won't let me set an exclusive-foreground - // keyboard for some unknown reason I just have to tell Windows to - // rack off with its keyboard accelerators. - if (wParam == SC_KEYMENU || wParam == SC_HOTKEY) return 0; - break; - - case WM_ACTIVATEAPP: - { - appactive = wParam; -#ifdef USE_OPENGL - if (hGLWindow) - { - if (!appactive && fullscreen) - { - if (mousegrab) - { - grabmouse(0); - regrabmouse = 1; - } - realfs = fullscreen; - silentvideomodeswitch = 1; - setgamemode(!fullscreen,xdim,ydim,bpp); - ShowWindow(hWindow, SW_MINIMIZE); - } - else if (appactive && realfs) - { - if (regrabmouse) - { - grabmouse(1); - regrabmouse = 0; - } - ShowWindow(hWindow, SW_RESTORE); - SetForegroundWindow(hWindow); - SetFocus(hWindow); - setgamemode(realfs,xdim,ydim,bpp); - silentvideomodeswitch = 0; - realfs = 0; - } - } -#endif - - if (backgroundidle) - SetPriorityClass(GetCurrentProcess(), - appactive ? NORMAL_PRIORITY_CLASS : IDLE_PRIORITY_CLASS); - - if (appactive) - { - SetForegroundWindow(hWindow); - SetFocus(hWindow); - } - - Bmemset(keystatus, 0, sizeof(keystatus)); - AcquireInputDevices(appactive); - break; - } - - case WM_ACTIVATE: - if (appactive) - { - SetForegroundWindow(hWindow); - SetFocus(hWindow); - } - - Bmemset(keystatus, 0, sizeof(keystatus)); - AcquireInputDevices(appactive); - break; - - case WM_SIZE: - if (wParam == SIZE_MAXHIDE || wParam == SIZE_MINIMIZED) appactive = 0; - else appactive = 1; - AcquireInputDevices(appactive); - break; - - case WM_PALETTECHANGED: - // someone stole the palette so try and steal it back - if (bDDrawInited && bpp == 8 && fullscreen) - { - int32_t result = IDirectDrawSurface_SetPalette(lpDDSPrimary, lpDDPalette); - if (result != DD_OK) - { - initprintf("Palette set failed: %s\n", GetDDrawError(result)); - break; - } - setpalette(0,256); - break; - } - if (appactive && (HWND)wParam != hWindow) setpalette(0,256); - break; - - case WM_DISPLAYCHANGE: - // desktop settings changed so adjust our world-view accordingly - desktopxdim = LOWORD(lParam); - desktopydim = HIWORD(lParam); - desktopbpp = wParam; - getvalidmodes(); - break; - - case WM_PAINT: - repaintneeded=1; - break; - - // don't draw the frame if fullscreen - //case WM_NCPAINT: - //if (!fullscreen) break; - //return 0; - - case WM_ERASEBKGND: - return TRUE; - - case WM_MOVE: - // windowx = LOWORD(lParam); - // windowy = HIWORD(lParam); - return 0; - - case WM_MOVING: - { - RECT *RECTYMcRECT = (LPRECT)lParam; - - windowx = RECTYMcRECT->left; - windowy = RECTYMcRECT->top; - return 0; - } - case WM_CLOSE: - quitevent = 1; - return 0; - - case WM_ENTERMENULOOP: - case WM_ENTERSIZEMOVE: - AcquireInputDevices(0); - return 0; - case WM_EXITMENULOOP: - case WM_EXITSIZEMOVE: - AcquireInputDevices(1); - return 0; - - case WM_DESTROY: - hWindow = 0; - //PostQuitMessage(0); // JBF 20040115: not anymore - return 0; - - default: - break; - } - - return DefWindowProc(hWnd, uMsg, wParam, lParam); -} - - -// -// RegisterWindowClass() -- register the window class -// -static BOOL RegisterWindowClass(void) -{ - WNDCLASSEX wcx; - - if (window_class_registered) return FALSE; - - //initprintf("Registering window class\n"); - - wcx.cbSize = sizeof(wcx); - wcx.style = CS_OWNDC; - wcx.lpfnWndProc = WndProcCallback; - wcx.cbClsExtra = 0; - wcx.cbWndExtra = 0; - wcx.hInstance = hInstance; - wcx.hIcon = LoadImage(hInstance, MAKEINTRESOURCE(100), IMAGE_ICON, - GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR); - wcx.hCursor = LoadCursor(NULL, IDC_ARROW); - wcx.hbrBackground = (HBRUSH)COLOR_GRAYTEXT; - wcx.lpszMenuName = NULL; - wcx.lpszClassName = WindowClass; - wcx.hIconSm = LoadImage(hInstance, MAKEINTRESOURCE(100), IMAGE_ICON, - GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR); - if (!RegisterClassEx(&wcx)) - { - ShowErrorBox("Failed to register window class"); - return TRUE; - } - - window_class_registered = TRUE; - - return FALSE; -} - - -// -// GetWindowsErrorMsg() -- gives a pointer to a static buffer containing the Windows error message -// -static LPTSTR GetWindowsErrorMsg(DWORD code) -{ - static TCHAR lpMsgBuf[1024]; - - FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, code, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR)lpMsgBuf, 1024, NULL); - - return lpMsgBuf; -} - -// -// makeasmwriteable() -- removes write protection from the self-modifying assembly code -// -void makeasmwriteable(void) -{ -#ifndef ENGINE_USING_A_C - extern int32_t dep_begin, dep_end; - DWORD oldprot; - - if (!VirtualProtect((LPVOID)&dep_begin, (SIZE_T)&dep_end - (SIZE_T)&dep_begin, PAGE_EXECUTE_READWRITE, &oldprot)) - { - ShowErrorBox("Problem making code writeable"); - } -#endif -} - diff --git a/polymer-perf/eduke32/buildlic.txt b/polymer-perf/eduke32/buildlic.txt deleted file mode 100644 index 3a3985bb6..000000000 --- a/polymer-perf/eduke32/buildlic.txt +++ /dev/null @@ -1,71 +0,0 @@ -BUILD SOURCE CODE LICENSE TERMS: 06/20/2000 - -[1] I give you permission to make modifications to my Build source and - distribute it, BUT: - -[2] Any derivative works based on my Build source may be distributed ONLY - through the INTERNET. - -[3] Distribution of any derivative works MUST be done completely FREE of - charge - no commercial exploitation whatsoever. - -[4] Anything you distribute which uses a part of my Build Engine source - code MUST include: - - [A] The following message somewhere in the archive: - - // "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman - // Ken Silverman's official web site: "http://www.advsys.net/ken" - // See the included license file "BUILDLIC.TXT" for license info. - - [B] This text file "BUILDLIC.TXT" along with it. - - [C] Any source files that you modify must include this message as well: - - // This file has been modified from Ken Silverman's original release - -[5] The use of the Build Engine for commercial purposes will require an - appropriate license arrangement with me. Contact information is - on my web site. - -[6] I take no responsibility for damage to your system. - -[7] Technical support: Before contacting me with questions, please read - and do ALL of the following! - - [A] Look through ALL of my text files. There are 7 of them (including this - one). I like to think that I wrote them for a reason. You will find - many of your answers in the history section of BUILD.TXT and - BUILD2.TXT (they're located inside SRC.ZIP). - - [B] If that doesn't satisfy you, then try going to: - - "http://www.advsys.net/ken/buildsrc" - - where I will maintain a Build Source Code FAQ (or perhaps I might - just provide a link to a good FAQ). - - [C] I am willing to respond to questions, but ONLY if they come at a rate - that I can handle. - - PLEASE TRY TO AVOID ASKING DUPLICATE QUESTIONS! - - As my line of defense, I will post my current policy about - answering Build source questions (right below the E-mail address - on my web site.) You can check there to see if I'm getting - overloaded with questions or not. - - If I'm too busy, it might say something like this: - - I'm too busy to answer Build source questions right now. - Sorry, but don't expect a reply from me any time soon. - - If I'm open for Build source questions, please state your question - clearly and don't include any unsolicited attachments unless - they're really small (like less than 50k). Assume that I have - a 28.8k modem. Also, don't leave out important details just - to make your question appear shorter - making me guess what - you're asking doesn't save me time! - ----------------------------------------------------------------------------- --Ken S. (official web site: http://www.advsys.net/ken) diff --git a/polymer-perf/eduke32/eduke32.sln b/polymer-perf/eduke32/eduke32.sln deleted file mode 100644 index 21e3be812..000000000 --- a/polymer-perf/eduke32/eduke32.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "eduke32", "eduke32.vcxproj", "{8E7A6179-0B72-4073-8A4C-E8682D481DAE}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8E7A6179-0B72-4073-8A4C-E8682D481DAE}.Debug|Win32.ActiveCfg = Debug|Win32 - {8E7A6179-0B72-4073-8A4C-E8682D481DAE}.Debug|Win32.Build.0 = Debug|Win32 - {8E7A6179-0B72-4073-8A4C-E8682D481DAE}.Release|Win32.ActiveCfg = Release|Win32 - {8E7A6179-0B72-4073-8A4C-E8682D481DAE}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/polymer-perf/eduke32/eduke32.vcproj b/polymer-perf/eduke32/eduke32.vcproj deleted file mode 100644 index 23febdbe7..000000000 --- a/polymer-perf/eduke32/eduke32.vcproj +++ /dev/null @@ -1,848 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/polymer-perf/eduke32/eduke32.vcxproj b/polymer-perf/eduke32/eduke32.vcxproj deleted file mode 100644 index 49ecf215a..000000000 --- a/polymer-perf/eduke32/eduke32.vcxproj +++ /dev/null @@ -1,281 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {8E7A6179-0B72-4073-8A4C-E8682D481DAE} - eduke32 - MakeFileProj - - - - Makefile - - - Makefile - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(Configuration)\ - $(Configuration)\ - nmake /f Makefile.msvc DEBUG=1 - nmake /f Makefile.msvc veryclean all DEBUG=1 - nmake /f Makefile.msvc veryclean - eduke32.exe - WIN32;_DEBUG;SUPERBUILD;POLYMOST;POLYMER;USE_OPENGL;NOCOPYPROTECT;RENDERTYPEWIN;$(NMakePreprocessorDefinitions) - $(NMakeIncludeSearchPath);build\include;source\jmact;source\jaudiolib\include;source\enet\include; - $(NMakeForcedIncludes) - $(NMakeAssemblySearchPath) - $(NMakeForcedUsingAssemblies) - $(Configuration)\ - $(Configuration)\ - nmake /f Makefile.msvc - nmake /f Makefile.msvc veryclean all - nmake /f Makefile.msvc veryclean - eduke32.exe - WIN32;_DEBUG;SUPERBUILD;POLYMOST;POLYMER;USE_OPENGL;NOCOPYPROTECT;RENDERTYPEWIN;$(NMakePreprocessorDefinitions) - $(NMakeIncludeSearchPath);build\include;source\jmact;source\jaudiolib\include;source\enet\include; - $(NMakeForcedIncludes) - $(NMakeAssemblySearchPath) - $(NMakeForcedUsingAssemblies) - u:\SDKs\oggvorbis-win32sdk-1.0.1\include;$(IncludePath) - $(SourcePath) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/polymer-perf/eduke32/eduke32.vcxproj.filters b/polymer-perf/eduke32/eduke32.vcxproj.filters deleted file mode 100644 index 0a92d2d8e..000000000 --- a/polymer-perf/eduke32/eduke32.vcxproj.filters +++ /dev/null @@ -1,653 +0,0 @@ - - - - - {be808922-2ddf-4835-a57d-42e2f8d6e6d1} - - - {6b639a6d-6609-479e-bf61-3e2d3e4323e6} - - - {84e51a60-037b-40c6-933a-7001d46906ab} - - - {eb6a8145-04f6-4b81-b8eb-508836cfdc91} - - - {7f1918c8-1b71-43db-b2af-aefaf13d21ac} - - - {447f3e7e-c01b-4ec3-8427-36441da24049} - - - {da5afe7a-2de4-4594-b07f-69cd3d29cc1b} - - - {4386b181-dad1-4aaa-9395-b5b57e49bca1} - - - {647e88f0-5d39-46cc-9822-460f2db9dfe6} - - - {766da152-470f-4b3b-8c8c-8289206d0d4e} - - - {df162924-c116-4c59-a0f3-589ebfb0ca27} - - - {dd93df66-1ed9-4b54-bd54-18abf46d2773} - - - {82d4000f-cd8c-4737-88dc-4ada5775a68e} - - - {65030203-c837-4739-a552-281c7535372f} - - - {607ab16a-c3a5-4dad-b6ba-3393e6309d23} - - - {8a6aad55-a3bc-4e4f-a61d-4652c29d8b92} - - - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers\MSVC - - - build\headers\MSVC - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - jaudiolib\headers - - - jaudiolib\headers - - - jaudiolib\headers - - - jaudiolib\headers - - - jaudiolib\headers - - - jaudiolib\headers - - - jaudiolib\headers - - - jaudiolib\headers - - - jaudiolib\headers - - - jaudiolib\headers - - - jaudiolib\headers - - - jaudiolib\headers - - - jmact\headers - - - jmact\headers - - - jmact\headers - - - jmact\headers - - - jmact\headers - - - jmact\headers - - - jmact\headers - - - jmact\headers - - - jmact\headers - - - enet\headers - - - enet\headers - - - enet\headers - - - enet\headers - - - enet\headers - - - enet\headers - - - enet\headers - - - enet\headers - - - enet\headers - - - build\headers - - - build\headers - - - build\headers - - - build\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - eduke32\headers - - - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - build\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - eduke32\source - - - jaudiolib\source - - - jaudiolib\source - - - jaudiolib\source - - - jaudiolib\source - - - jaudiolib\source - - - jaudiolib\source - - - jaudiolib\source - - - jaudiolib\source - - - jaudiolib\source - - - jaudiolib\source - - - jmact\source - - - jmact\source - - - jmact\source - - - jmact\source - - - jmact\source - - - jmact\source - - - jmact\source - - - enet\source - - - enet\source - - - enet\source - - - enet\source - - - enet\source - - - enet\source - - - enet\source - - - enet\source - - - build\source - - - build\source - - - eduke32\source - - - eduke32\source - - - - - eduke32 - - - build - - - \ No newline at end of file diff --git a/polymer-perf/eduke32/eduke32.vcxproj.user b/polymer-perf/eduke32/eduke32.vcxproj.user deleted file mode 100644 index 695b5c78b..000000000 --- a/polymer-perf/eduke32/eduke32.vcxproj.user +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/polymer-perf/eduke32/eobj/keep.me b/polymer-perf/eduke32/eobj/keep.me deleted file mode 100644 index e69de29bb..000000000 diff --git a/polymer-perf/eduke32/eobj_win/keep.me b/polymer-perf/eduke32/eobj_win/keep.me deleted file mode 100644 index e69de29bb..000000000 diff --git a/polymer-perf/eduke32/installer/eduke32.nsi b/polymer-perf/eduke32/installer/eduke32.nsi deleted file mode 100644 index fe1119087..000000000 --- a/polymer-perf/eduke32/installer/eduke32.nsi +++ /dev/null @@ -1,179 +0,0 @@ -; Script generated by the HM NIS Edit Script Wizard. - -; HM NIS Edit Wizard helper defines -!define PRODUCT_NAME "EDuke32" -!define PRODUCT_VERSION "1.4.0 beta 3" -!define PRODUCT_PUBLISHER "EDuke32 Team" -!define PRODUCT_WEB_SITE "http://www.eduke32.com" -!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}" -!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" -!define PRODUCT_UNINST_ROOT_KEY "HKLM" -!define PRODUCT_STARTMENU_REGVAL "NSIS:StartMenuDir" - -SetCompressor /SOLID lzma - -; MUI 1.67 compatible ------ -!include "MUI.nsh" - -; MUI Settings -!define MUI_ABORTWARNING -!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\box-install.ico" -!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\box-uninstall.ico" -!define MUI_WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\orange.bmp" -!define MUI_UNWELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\orange-uninstall.bmp" - -; Welcome page -!define MUI_WELCOMEPAGE_TEXT "$(MUI_WELCOMEPAGE_TEXT)" -LangString MUI_WELCOMEPAGE_TEXT {LANG_ENGLSH} "This wizard will guide you through the installation of ${PRODUCT_NAME} ${PRODUCT_VERSION}\n\nClick next to continue." -!insertmacro MUI_PAGE_WELCOME - -; License page -!insertmacro MUI_PAGE_LICENSE "..\GNU.TXT" -; Components page -!insertmacro MUI_PAGE_COMPONENTS -; Directory page -!define MUI_DIRECTORYPAGE_TEXT_TOP "$(MUI_DIRECTORYPAGE_TEXT_TOP)" -LangString MUI_DIRECTORYPAGE_TEXT_TOP {LANG_ENGLSH} "Please select your Duke Nukem 3D directory." -!insertmacro MUI_PAGE_DIRECTORY -; Start menu page -var ICONS_GROUP -!define MUI_STARTMENUPAGE_NODISABLE -!define MUI_STARTMENUPAGE_DEFAULTFOLDER "EDuke32" -!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}" -!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" -!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_STARTMENU_REGVAL}" -!insertmacro MUI_PAGE_STARTMENU Application $ICONS_GROUP -; Instfiles page -!insertmacro MUI_PAGE_INSTFILES -; Finish page -!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\ChangeLog.html" -!insertmacro MUI_PAGE_FINISH - -; Uninstaller pages -!insertmacro MUI_UNPAGE_INSTFILES - -; Language files -!insertmacro MUI_LANGUAGE "English" - -; Reserve files -!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS - -; MUI end ------ - -Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" -OutFile "eduke32-${PRODUCT_VERSION}.exe" -InstallDir "" -InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" -ShowInstDetails show -ShowUnInstDetails show - -Section "!Game" SEC_GAME - SetOutPath "$INSTDIR" - SetOverwrite ifnewer - File "..\eduke32.exe" - CreateDirectory "$SMPROGRAMS\$ICONS_GROUP" - CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\EDuke32.lnk" "$INSTDIR\eduke32.exe" - File "..\GNU.TXT" - File "..\buildlic.txt" - File "..\ChangeLog.html" - File "..\ChangeLog" -SectionEnd - -Section "Level editor" SEC_EDITOR - SetOutPath "$INSTDIR" - SetOverwrite ifnewer - File "..\mapster32.exe" - File "..\STHELP.HLP" - File "..\SEHELP.HLP" - File "..\names.h" - CreateDirectory "$SMPROGRAMS\$ICONS_GROUP" - CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Mapster32.lnk" "$INSTDIR\mapster32.exe" -SectionEnd - -Section /o "Dukester X 1.5 support" SEC_DX - SetOutPath "$INSTDIR" - SetOverwrite ifdiff - File "..\duke3d_w32.exe" -SectionEnd - -Section /o "Samples" SEC_SAMPLES - SetOutPath "$INSTDIR" - SetOverwrite ifnewer - File "..\duke3d.def.sample" - File "..\enhance.con.sample" - SetOutPath "$INSTDIR" -SectionEnd - -Section -AdditionalIcons - WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" - CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\EDuke32 Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" - CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk" "$INSTDIR\uninst.exe" -SectionEnd - -Section -Post - WriteUninstaller "$INSTDIR\uninst.exe" - WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\eduke32.exe" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\eduke32.exe" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "${PRODUCT_STARTMENU_REGVAL}" "$ICONS_GROUP" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" -SectionEnd - -; Section descriptions -!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_GAME} "The main EDuke32 game components (required to play EDuke enhanced mods)" - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_EDITOR} "The enhanced Mapster32 editor (optional)" - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_DX} "Support for Dukester X 1.5 (optional)" - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_SAMPLES} "Sample enhancement definition files (optional)" -!insertmacro MUI_FUNCTION_DESCRIPTION_END - - -Function un.onUninstSuccess - HideWindow - MessageBox MB_ICONINFORMATION|MB_OK "EDuke32 was successfully removed from your computer." -FunctionEnd - -Function un.onInit - MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove EDuke32 and all of its components?" IDYES +2 - Abort -FunctionEnd - -Section Uninstall - ReadRegStr $ICONS_GROUP ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "${PRODUCT_STARTMENU_REGVAL}" - Delete "$INSTDIR\${PRODUCT_NAME}.url" - Delete "$INSTDIR\uninst.exe" - Delete "$INSTDIR\duke3d.def.sample" - Delete "$INSTDIR\enhance.con.sample" - Delete "$INSTDIR\mapster32.exe" - Delete "$INSTDIR\ChangeLog.html" - Delete "$INSTDIR\ChangeLog" - Delete "$INSTDIR\GNU.TXT" - Delete "$INSTDIR\buildlic.txt" - Delete "$INSTDIR\eduke32.exe" - Delete "$INSTDIR\duke3d_w32.exe" -; Delete "$INSTDIR\datainst.exe" - -; Delete "$INSTDIR\duke3d.grp" -; Delete "$INSTDIR\duke3d.cfg" - - Delete "$INSTDIR\STHELP.HLP" - Delete "$INSTDIR\SEHELP.HLP" - Delete "$INSTDIR\names.h" - - Delete "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk" - Delete "$SMPROGRAMS\$ICONS_GROUP\EDuke32 Website.lnk" - Delete "$SMPROGRAMS\$ICONS_GROUP\Mapster32.lnk" - Delete "$SMPROGRAMS\$ICONS_GROUP\Setup.lnk" - Delete "$SMPROGRAMS\$ICONS_GROUP\EDuke32.lnk" - Delete "$SMPROGRAMS\$ICONS_GROUP\Game Data Installer.lnk" - - RMDir "$SMPROGRAMS\$ICONS_GROUP" - RMDir "$INSTDIR" - - DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" - DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" - SetAutoClose true -SectionEnd diff --git a/polymer-perf/eduke32/libiconv2.dll b/polymer-perf/eduke32/libiconv2.dll deleted file mode 100644 index 747073f1b192ee74ba8612cb7ea58d908e6e7734..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 898048 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%0DI0m1qIKnk`}jJOuz?W;@^j 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

4hSI1e4&>{2)L-9JBpSQCe{?5+- zpz&OIKF{ASuICTo_xwG?$8X%{PZ2-<(trLr;ur9N{sQr<$y`yq%+>H_u7y8y{qtyU z{8&b!FH;&nbm9u>bc5+2Vd&*%9Z zUeA|E3_PE)$ZI4H{?7#D&C7wlN0N~b#R*MC(%=mZ!XNsb;)s49`8DL%;TQdce1)VV z8Av9Qg=8Z+NG_5GUugkSSp3owq!cN8UehY1x;UqG#XD^*?r96s3J+>K(t&g$T}U_5 z18-^{(vJ)vgUAs4sw2o~@m430N%&W%kr`wbnM3B01>`r8A0WT=@~uBY{{FcB1U}b4 zME(f*De}k2pCEsV{2B5y z29N5FH%@gQsvk7~&*~x6Flq!f3J>dX)C6i0HHDf+&7fvcbEtXL0%{Spgj#;pz zivM~ab$~jA7xwYX!9GQyix2zaWny1HU+f#y?aRj|7f1FZiVCl60DjpJ>K)X(Z_Ml` z)GHJn#XvDpEEF5XL2*$$6dxr(2~i@H7$reTQ8JVqr9dfBDwG~45w_n!2f^q&m84DC_)Xpg_Kv}aG|PUcS*P8Ls= zPL@wrPF7FWPS#I0PBu@rPPR{WPIgcBPJT7FkKwnCe3{#4C+8;@@ZZLqT)~I?`qvis zJ^Z*Iij$lAa=G9612#9O___J;=oUVoZt02aL|&ZTD)@G5;N7h&{%+&T@V1@Ui_6

Nw&OK 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 z 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 P40!s_t4cr`a#qgovK_^ox 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%0D^wd+N0L+pJ%NBCx6r0yVgFm_N}!at^KOKr1rAf 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 z�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 z�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 diff --git a/polymer-perf/eduke32/libintl3.dll b/polymer-perf/eduke32/libintl3.dll deleted file mode 100644 index ec11e6b19911c2714181f57f8c2f05bee40958b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103424 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

`vu%HaL>c7hkFg~ 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 Slowly rotate sprite/selected sectors - -SCROLL LOCK Set starting position -F5 Show item count -F6 Show actor count -F6 Show Sector Effector help when pointed at sprite -F7 Edit sector data -F8 Edit wall/sprite data - -T Set sector lotag -T+ALT Set wall/sprite lotag -T+CTRL Toggle show tags - -H Set sector hitag -H+ALT Set wall/sprite hitag -H+CTRL Toggle hitscan sensitivity - -P Set sector palette -E Set sprite status list -TAB Show sector data -TAB+SHIFT Show wall/sprite data -TAB+CTRL Show wall/sprite data - -LCTRL+RSHIFT Select all walls of the current sector - (point at a wall and, holding CTRL, press SHIFT) - -A Zoom in -Z Zoom out -L Toggle grid lock -J Join sectors -S Insert sprite (see samples/tiles.cfg for customization) -S+ALT Make inner sector -C Duplicate sectors/sprites -C Start circle attached to a wall -KP_+ Increase amount of walls in circle -KP_- Decrease amount of walls in circle -SPACE Start/end drawing of sector, end drawing of circle -LENTER Check all pointers for the current sector -LSHIFT+LCTRL+LENTER Check ALL pointers (manual attempt to recover map) -BACKSPACE Remove the last wall during drawing sector -DEL Delete sprite -DEL+CTRL Delete sector -INS Duplicate sectors/sprites -INS Start circle attached to a wall -INS Add vertex to wall -RENTER Switch to 3D mode -ESC Menu - -' A Toggle autosave (every 3 minutes) -' N Toggle clipping -S+CTRL Save map -L+CTRL Load map -^P -^3The mouse pointer always points at one of these objects: -1. wall -2. ceiling of sector -3. floor of sector -4. sprite -5. masked wall (non-transparent or semi-transparent wall between sectors) - -It's important to understand this concept. -Some commands work differently depending on the "current object", -the object the mouse points at. -Some commands only manipulate the "current object", but other commands -manipulate the sprites and sectors which are "selected" in 2D mode. -Other commands work globally. - -^3Mouse buttons: -^14LEFT^O Lock the current object. The current object won't - change as long as the button is pressed. -^14LEFT+MIDDLE^O Toggle mouselook -^14WHEEL^O Change shade/visibility -^14LEFT+WHEEL^O Change tile -^14RIGHT+WHEEL^O Move object up/down - -Additionally, there is UnrealEd-style mouse navigation in 3D mode -(toggle it with ^14F5^O) with the following bindings: -^14RIGHT^O mouselook -^14LEFT^O x: turning, y: move forward/back -^14LEFT+RIGHT^O x: strafe left/right, y: move up/down -^14MIDDLE^O y: move in viewing direction - The console variable 'pk_uedaccel' changes the speed - of navigation exponentially (valid values are 0-5). - -^14LEFT+ALT^O Move object up/down -^14LEFT+SHIFT^O Pan ceiling/floor/wall -^14LEFT+SHIFT^O Move sprite in horizontal plane -^14LEFT+CTRL^O Scale wall texture or size of sprite -^14LEFT+CTRL^O Change slope of sector -^P -UP Move forward -DOWN Move backward -LEFT+RCTRL Move left -RIGHT+RCTRL Move right -A Move up -Z Move down -F4+ALT Toggle showing the first wall -+LSHIFT Speed up movements - -LEFT Turn left -RIGHT Turn right -A+CTRL Look down -Z+CTRL Look up - -' V Set sector visibility -; V Set sector visibility on all selected sectors -V Choose tile -3 Toggle "sector over sector". -F3 Toggle mouselook -' BACKSPACE Clear all flags for wall/sprite -' P Paste palette to all selected sectors -; P Paste palette to all selected sectors & sprites -DEL Delete sprite -F6 Toggle automatic Sector Effector help -F7 Toggle automatic sector tag help - -, Rotate sprite -. Rotate sprite -< Slowly rotate sprite -> Slowly rotate sprite -. Search & fix panning of the wall to the right - -' L Change the coordinates of the current object -CAPS LOCK Cycle zmode -' Z Cycle zmode -' M Set the extra of the current object -1 Toggle one-sided flag of sprite/wall -2 Toggle bottom wall swapping -O Set top or bottom orientation of wall -O Ornament sprite flat onto wall -M Toggle masked wall -H Toggle hitscan sensitivity -H+SHIFT Toggle one side hitscan sensitivity for the wall -' H Set hitag of the current object - -KP_MINUS Darkens shade of individual sector/wall/sprite or selected sectors -KP_MINUS+ALT Decreases visibility of sector or selected sectors -KP_MINUS+ALT+SHIFT Slowly decreases visibility of sector or selected sectors -KP_MINUS+ALT+CTRL Decreases global visibility -KP_PLUS Lightens shade individual sector/wall/sprite or selected sectors -KP_PLUS+ALT Increases visibility of sector or selected sectors -KP_PLUS+ALT+SHIFT Slowly increases visibility of sector or selected sectors -KP_PLUS+ALT+CTRL Increases global visibility -^3Note: ALT, CTRL, SHIFT are modifiers so they work with mouse too. - -+/- Cycle tile -E Toggle sector texture expansion -R Toggle sector texture relativity alignment -R Cycle sprite aligment between: wall aligned, floor aligned, view aligned -'R Toggle framerate -F Flip the current object -F+ALT Set the first wall of sector - -PAGE UP Move selected sprites or sectors up -PAGE DN Move selected sprites or sectors down -PAGE UP+CTRL Move selected sprites to ceiling -PAGE DN+CTRL Move selected sprites to floor -+CTRL Speed up movement -+END Slow down movement -+HOME Slow down movement even more -^3Note: CTRL, HOME, END are modifiers, so they work with the mouse too. - -' D Cycle skill level -' X Toggle sprite shade preview -' W Toggle sprite display -' Y Toggle purple background -' C Copy shade from the clipboard to all objects in the map which are the same - tile as the tile of the object in the clipboard. It works separately for - sectors/walls/sprites depending on the current object. -' T Set lotag -' H Set hitag -' S Set shade -F2 Toggle clipboard preview -TAB Copy to the clipboard -F1 Toggle help -G Set picnum -B Toggle blocking -B+SHIFT Toggle one side blocking for the wall -T Cycles translucence for sprites/masked walls - -LENTER+CTRL+SHIFT Autoshade wall -' LENTER Paste picnum only -LENTER+SHIFT Paste shade and palette onto the current object -LENTER+CTRL Paste picnum, shading, and palette onto the current object -LENTER Paste all properties onto the current object - -' A Toggle autosave. The interval is configurable in the .cfg. - (by default: every 3 minutes) - -' N Toggle clipping for the camera -N+CTRL Toggle clipping for sprites - -S+CTRL Save map -L+CTRL Load map - -ESC Quit -F11 Brightness -F12 Screenshot -F12+SHIFT Inverted screenshot -F9 Reload and activate maphacks -F10 Disable maphacks - -C Toggle center sprite (cstat 128) -ALT+C Replace all tiles in the map with the clipboard - -[ Increases slope quickly -[+RSHIFT Increases slope with medium speed -[+LSHIFT Increases slope slowly -[+ALT Align slope to the floor of an adjoining sector -] Decreases slope quickly -]+RSHIFT Decreases slope with medium speed -]+LSHIFT Decreases slope slowly -]+ALT Align slope to the ceiling of an adjoining sector - -KP_4 Pan floor/ceiling horizontally -KP_6 Pan floor/ceiling horizontally -KP_2 Pan floor/ceiling vertically -KP_8 Pan floor/ceiling vertically -KP_4 Scale wall/sprite horizontally -KP_6 Scale wall/sprite horizontally -KP_2 Scale wall/sprite vertically -KP_8 Scale wall/sprite vertically -+SHIFT Force panning (for walls) -+KP_5 Increase speed - -/ Reset panning, size and flags to defaults -/+SHIFT Make square - set xrepeat to yrepeat - -P Enable/disable parallax -P+CTRL Change parallax type (only in 8-bit classic renderer) -P+ALT Change palette of sector/wall/sprite -D+ALT Adjust clipping distance of the sprite -T Translucence for sprites/masked walls -S Insert sprite -KP_ENTER Switch to 2D mode -^P -After pressing V in 3D mode, the editor enters tile browsing. - -^3Keys: -KP_/ Zoom in -KP_* Zoom out -UP/DOWN/LEFT/RIGHT/PAGE UP/PAGE DOWN movements -G Go to specified tile -U Go to start of user defined art (3584) -A Go to start of Atomic edition's art (4096) -E Go to start of extended art (6144, 9216) - -V Select from all tiles -T Select from pre-defined tileset (tiles.cfg) -Z Tile zoom -ESC Cancel -ENTER Accept - -^3Mouse: -LEFT select -CTRL+WHEEL zoom -WHEEL scroll -RIGHT smooth scrolling -^P - 0 : Rotating Sector - 1 : Pivot Sprite for SE 0 - 2 : Earthquake - 3 : Random Lights After Shot Out - 4 : Random Lights - 6 : Subway - 7 : Teleporter - 8 : Up Open Door Lights - 9 : Down Open Door Lights - 10 : Door Auto Close (Hitag = Delay) - 11 : Rotate Sector Door - 12 : Light Switch - 13 : C-9 Explosive - 14 : Subway Car - 15 : Slide Door (ST 25) - 16 : Rotate Reactor Sector - 17 : Elevator Transport (ST 15) - 18 : Incremental Sector Rise/Fall - 19 : Explosion Lowers Ceiling - 20 : Stretch (ST 27) - 21 : Drop Floor (ST 28) - 22 : Teeth Door Prong (ST 29) - 23 : One-Way Teleporter Destination - 24 : Conveyor Belt or Water Current - 25 : Engine Piston - 27 : Demo Camera - 28 : Lightning - 29 : Float (for Waves) - 30 : Two-Way Train (ST 31) - 31 : Floor Rise/Fall - 32 : Ceiling Rise/Fall - 33 : Earthquake Debris - 36 : Projectile Shooter -^P - 1 : Above Water (SE 7) - 2 : Underwater (SE 7) - 9 : Sliding Star Trek Doors - 15 : Elevator Transport (SE 17) - 16 : Elevator Platform Down - 17 : Elevator Platform Up - 18 : Elevator Down - 19 : Elevator Up - 20 : Ceiling Door - 21 : Floor Door - 22 : Splitting Door - 23 : Swinging Door - 25 : Sliding Door (SE 15) - 26 : Splitting Star Trek Door - 27 : Stretch (SE 20) - 28 : Drop Floor (SE 21) - 29 : Teeth Door Prong (SE 22) - 30 : Rotate and Rise Bridge - 31 : Two-Way Train (SE 30) - 10+++ : One-Time Sound - 32767 : Secret Room - 65534 : End Of Level with Message (sector hitag: sound #) - 65535 : End Of Level -^P -^3SE 0/1: ROTATED SECTOR - SE1: pivot - Ang: up--clockwise, down--counterclockwise - SE0: a sector to rotate - Hi = SE1 Hi - -^3SE 2: EARTHQUAKE - In quake sector, modeled as after the quake, insert additionally: - MASTERSWITCH - Lo=X - In other sector: - TOUCHPLATE - Lo=X - Anywhere: - SE33: scraps - Hi=X - -^3SE 3: RANDOM LIGHTS AFTER SHOT OUT - Light is wall: - 2-way, blockable? - Lo=X - Light is ceiling: - sector Hi=X - SE 3 in affected sector: - Hi=X - Shades: - sectors/walls: when off - SE: when on - -^3SE 4: RANDOM LIGHTS - Hi: random blink num. ^0(research!) - Shades: - sectors/walls: when off - SE: when on - -^3SE 5: ? - -^3SE 6/14: SUBWAY - subway sectors: - Hi=unique per train - SE 6: SUBWAY FRONT CAR - Ang: direction of first movement - GPSPEED: - Lo: speed (default: 256) - SE 14: SUBWAY PULLED CARS - Locators: - starting with Lo=0, ascending - Hi=1: train stops here - -^3SE 7: TRANSPORT - Hi=X link - -^3SE 8: UP OPEN DOOR LIGHTS (with ST 20) - SE 8 also in door sector - Hi=X links with other SE8 sprites - Shades: - sectors/walls: when closed - SE: when open - Walls: - Hi=1 means exclude this wall from changing shade - -^3SE 9: DOWN OPEN DOOR LIGHTS (with ST 21) - analogous SE 8 - -^3SE 10: ? - -^3SE 11: ROTATE SECTOR DOOR - Ang: up--clockwise, down--counterclockwise - Hi: link doors to be opened simulataneously - ST=23 - -^3SE 12: LIGHT SWITCH (preview with 'X) - Hi=X - Shades: - sectors/walls: when off - SE: when on - [switch]: - Lo=X - -^3SEENINE: C-9 BARREL - Hi=X - Lo=delay ^0(>0? game ticks?) - In all sectors with SEENINEs: - MASTERSWITCH Lo=X - [switch]: - Lo=X - -^3SE 13: C-9 EXPLOSIVE/BLASTABLE WALL - CRACKs/SEENINEs: Hi=X - SE 13: Hi=X - other SEENINEs: - Hi=X - Lo=delay - -^3SE 15: SLIDING DOOR (ST=25) - Ang: opposite of direction of first movement - GPSPEED: - 2*Lo: how far (BUILD units) - -^3SE 17: ELEVATOR TRANSPORT - Shade: darker on SE of starting sector - Sectors: - ST=15 - Top floor sector Hi=1 - -^3SE 18: INCREMENTAL SECTOR RISE/FALL - Hi: units moved per activation (min: 1024?) - Ang: - up--floor affected - down--ceiling affected - Pal: - 0: start at floor/ceiling height - not 0: start at SE height - [switch] & ACTIVATOR ^0(in same sector as SE?): - Lo=X - -^3SE 19: SHOT TOUCHPLATE CIELING DOWN - -^3SE 20: BRIDGE/STRETCH SECTOR (ST 27) - Ang: direction - ACTIVATOR - Hi = SE Hi = [switch] Lo - GPSPEED - Lo: how far (BUILD units) - -^3SE 21: DROP FLOOR (ST 28) - Ang: - up: drop ceiling - down: drop floor - z: end z ^0(()) - Sector: - z: start z ^0(()) - GPSPEED - Lo: rate ^0(units?) - ACTIVATOR - Lo = [switch] Lo - -^3SE 24: CONVEYOR BELT - Ang: direction - GPSPEED: - Lo=speed - -^3SE 25: ENGINE PISTON (CRUSHER) - z: starting z - Sector: - piston travels between ceiling z and floor z - -^3SE 27: CAMERA FOR PLAYBACK - Hi: radius (BUILD units?) - -^3SE 28: LIGHTNING - Hi = tile #4890 Hi - -^3SE 29: WAVES - Hi: start height (phase) - GPSPEED Lo: amplitude (default: 256) - -^0 Based on -^0 * MAP EDITING FAQ v1.3 BY JONAH BISHOP -^0 * The Duke Nukem 3D Informational Suite by Ryan Lennox -^0 * code research -^P -Foreground colors: -^0,15 0 ^1,0 1 ^2 2 ^3 3 ^4 4 ^5 5 ^6 6 ^7 7 -^8 8 ^9 9 ^10 10^11 11^12 12^13 13^14 14^15 15 - -Background colors: -^15,0 0 ^0,1 1 ^0,2 2 ^0,3 3 ^0,4 4 ^0,5 5 ^0,6 6 ^0,7 7 -^0,8 8 ^0,9 9 ^0,10 10^0,11 11^0,12 12^0,13 13^0,14 14^0,15 15 - diff --git a/polymer-perf/eduke32/names.h b/polymer-perf/eduke32/names.h deleted file mode 100644 index 2d794ee29..000000000 --- a/polymer-perf/eduke32/names.h +++ /dev/null @@ -1,765 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 1996, 2003 - 3D Realms Entertainment - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -Original Source: 1996 - Todd Replogle -Prepared for public release: 03/21/2003 - Charlie Wiederhold, 3D Realms -*/ -//------------------------------------------------------------------------- - -#define SECTOREFFECTOR 1 -#define ACTIVATOR 2 -#define TOUCHPLATE 3 -#define ACTIVATORLOCKED 4 -#define MUSICANDSFX 5 -#define LOCATORS 6 -#define CYCLER 7 -#define MASTERSWITCH 8 -#define RESPAWN 9 -#define GPSPEED 10 -#define FOF 13 -#define ARROW 20 -#define FIRSTGUNSPRITE 21 -#define CHAINGUNSPRITE 22 -#define RPGSPRITE 23 -#define FREEZESPRITE 24 -#define SHRINKERSPRITE 25 -#define HEAVYHBOMB 26 -#define TRIPBOMBSPRITE 27 -#define SHOTGUNSPRITE 28 -#define DEVISTATORSPRITE 29 -#define HEALTHBOX 30 -#define AMMOBOX 31 -#define GROWSPRITEICON 32 -#define INVENTORYBOX 33 -#define FREEZEAMMO 37 -#define AMMO 40 -#define BATTERYAMMO 41 -#define DEVISTATORAMMO 42 -#define RPGAMMO 44 -#define GROWAMMO 45 -#define CRYSTALAMMO 46 -#define HBOMBAMMO 47 -#define AMMOLOTS 48 -#define SHOTGUNAMMO 49 -#define COLA 51 -#define SIXPAK 52 -#define FIRSTAID 53 -#define SHIELD 54 -#define STEROIDS 55 -#define AIRTANK 56 -#define JETPACK 57 -#define HEATSENSOR 59 -#define ACCESSCARD 60 -#define BOOTS 61 -#define MIRRORBROKE 70 -#define CLOUDYOCEAN 78 -#define CLOUDYSKIES 79 -#define MOONSKY1 80 -#define MOONSKY2 81 -#define MOONSKY3 82 -#define MOONSKY4 83 -#define BIGORBIT1 84 -#define BIGORBIT2 85 -#define BIGORBIT3 86 -#define BIGORBIT4 87 -#define BIGORBIT5 88 -#define LA 89 -#define REDSKY1 98 -#define REDSKY2 99 -#define ATOMICHEALTH 100 -#define TECHLIGHT2 120 -#define TECHLIGHTBUST2 121 -#define TECHLIGHT4 122 -#define TECHLIGHTBUST4 123 -#define WALLLIGHT4 124 -#define WALLLIGHTBUST4 125 -#define ACCESSSWITCH 130 -#define SLOTDOOR 132 -#define LIGHTSWITCH 134 -#define SPACEDOORSWITCH 136 -#define SPACELIGHTSWITCH 138 -#define FRANKENSTINESWITCH 140 -#define NUKEBUTTON 142 -#define MULTISWITCH 146 -#define DOORTILE5 150 -#define DOORTILE6 151 -#define DOORTILE1 152 -#define DOORTILE2 153 -#define DOORTILE3 154 -#define DOORTILE4 155 -#define DOORTILE7 156 -#define DOORTILE8 157 -#define DOORTILE9 158 -#define DOORTILE10 159 -#define DOORSHOCK 160 -#define DIPSWITCH 162 -#define DIPSWITCH2 164 -#define TECHSWITCH 166 -#define DIPSWITCH3 168 -#define ACCESSSWITCH2 170 -#define REFLECTWATERTILE 180 -#define FLOORSLIME 200 -#define BIGFORCE 230 -#define EPISODE 247 -#define MASKWALL9 255 -#define W_LIGHT 260 -#define SCREENBREAK1 263 -#define SCREENBREAK2 264 -#define SCREENBREAK3 265 -#define SCREENBREAK4 266 -#define SCREENBREAK5 267 -#define SCREENBREAK6 268 -#define SCREENBREAK7 269 -#define SCREENBREAK8 270 -#define SCREENBREAK9 271 -#define SCREENBREAK10 272 -#define SCREENBREAK11 273 -#define SCREENBREAK12 274 -#define SCREENBREAK13 275 -#define MASKWALL1 285 -#define W_TECHWALL1 293 -#define W_TECHWALL2 297 -#define W_TECHWALL15 299 -#define W_TECHWALL3 301 -#define W_TECHWALL4 305 -#define W_TECHWALL10 306 -#define W_TECHWALL16 307 -#define WATERTILE2 336 -#define BPANNEL1 341 -#define PANNEL1 342 -#define PANNEL2 343 -#define WATERTILE 344 -#define STATIC 351 -#define W_SCREENBREAK 357 -#define W_HITTECHWALL3 360 -#define W_HITTECHWALL4 361 -#define W_HITTECHWALL2 362 -#define W_HITTECHWALL1 363 -#define MASKWALL10 387 -#define MASKWALL11 391 -#define DOORTILE22 395 -#define FANSPRITE 407 -#define FANSPRITEBROKE 411 -#define FANSHADOW 412 -#define FANSHADOWBROKE 416 -#define DOORTILE18 447 -#define DOORTILE19 448 -#define DOORTILE20 449 -// #define SPACESHUTTLE 487 -#define SATELLITE 489 -#define VIEWSCREEN2 499 -#define VIEWSCREENBROKE 501 -#define VIEWSCREEN 502 -#define GLASS 503 -#define GLASS2 504 -#define STAINGLASS1 510 -#define MASKWALL5 514 -#define SATELITE 516 -#define FUELPOD 517 -#define SLIMEPIPE 538 -#define CRACK1 546 -#define CRACK2 547 -#define CRACK3 548 -#define CRACK4 549 -#define FOOTPRINTS 550 -#define DOMELITE 551 -#define CAMERAPOLE 554 -#define CHAIR1 556 -#define CHAIR2 557 -#define BROKENCHAIR 559 -#define MIRROR 560 -#define WATERFOUNTAIN 563 -#define WATERFOUNTAINBROKE 567 -#define FEMMAG1 568 -#define TOILET 569 -#define STALL 571 -#define STALLBROKE 573 -#define FEMMAG2 577 -#define REACTOR2 578 -#define REACTOR2BURNT 579 -#define REACTOR2SPARK 580 -#define GRATE1 595 -#define BGRATE1 596 -#define SOLARPANNEL 602 -#define NAKED1 603 -#define ANTENNA 607 -#define MASKWALL12 609 -#define TOILETBROKE 615 -#define PIPE2 616 -#define PIPE1B 617 -#define PIPE3 618 -#define PIPE1 619 -#define CAMERA1 621 -#define BRICK 626 -#define SPLINTERWOOD 630 -#define PIPE2B 633 -#define BOLT1 634 -#define W_NUMBERS 640 -#define WATERDRIP 660 -#define WATERBUBBLE 661 -#define WATERBUBBLEMAKER 662 -#define W_FORCEFIELD 663 -#define VACUUM 669 -#define FOOTPRINTS2 672 -#define FOOTPRINTS3 673 -#define FOOTPRINTS4 674 -#define EGG 675 -#define SCALE 678 -#define CHAIR3 680 -#define CAMERALIGHT 685 -#define MOVIECAMERA 686 -#define IVUNIT 689 -#define POT1 694 -#define POT2 695 -#define POT3 697 -#define PIPE3B 700 -#define WALLLIGHT3 701 -#define WALLLIGHTBUST3 702 -#define WALLLIGHT1 703 -#define WALLLIGHTBUST1 704 -#define WALLLIGHT2 705 -#define WALLLIGHTBUST2 706 -#define LIGHTSWITCH2 712 -#define WAITTOBESEATED 716 -#define DOORTILE14 717 -#define STATUE 753 -#define MIKE 762 -#define VASE 765 -#define SUSHIPLATE1 768 -#define SUSHIPLATE2 769 -#define SUSHIPLATE3 774 -#define SUSHIPLATE4 779 -#define DOORTILE16 781 -#define SUSHIPLATE5 792 -#define OJ 806 -#define MASKWALL13 830 -#define HURTRAIL 859 -#define POWERSWITCH1 860 -#define LOCKSWITCH1 862 -#define POWERSWITCH2 864 -#define ATM 867 -#define STATUEFLASH 869 -#define ATMBROKE 888 -#define BIGHOLE2 893 -#define STRIPEBALL 901 -#define QUEBALL 902 -#define POCKET 903 -#define WOODENHORSE 904 -#define TREE1 908 -#define TREE2 910 -#define CACTUS 911 -#define MASKWALL2 913 -#define MASKWALL3 914 -#define MASKWALL4 915 -#define FIREEXT 916 -#define TOILETWATER 921 -#define NEON1 925 -#define NEON2 926 -#define CACTUSBROKE 939 -#define BOUNCEMINE 940 -#define BROKEFIREHYDRENT 950 -#define BOX 951 -#define BULLETHOLE 952 -#define BOTTLE1 954 -#define BOTTLE2 955 -#define BOTTLE3 956 -#define BOTTLE4 957 -#define FEMPIC5 963 -#define FEMPIC6 964 -#define FEMPIC7 965 -#define HYDROPLANT 969 -#define OCEANSPRITE1 971 -#define OCEANSPRITE2 972 -#define OCEANSPRITE3 973 -#define OCEANSPRITE4 974 -#define OCEANSPRITE5 975 -#define GENERICPOLE 977 -#define CONE 978 -#define HANGLIGHT 979 -#define HYDRENT 981 -#define MASKWALL14 988 -#define TIRE 990 -#define PIPE5 994 -#define PIPE6 995 -#define PIPE4 996 -#define PIPE4B 997 -#define BROKEHYDROPLANT 1003 -#define PIPE5B 1005 -#define NEON3 1007 -#define NEON4 1008 -#define NEON5 1009 -#define BOTTLE5 1012 -#define BOTTLE6 1013 -#define BOTTLE8 1014 -#define SPOTLITE 1020 -#define HANGOOZ 1022 -#define MASKWALL15 1024 -#define BOTTLE7 1025 -#define HORSEONSIDE 1026 -#define GLASSPIECES 1031 -#define HORSELITE 1034 -#define DONUTS 1045 -#define NEON6 1046 -#define MASKWALL6 1059 -#define CLOCK 1060 -#define RUBBERCAN 1062 -#define BROKENCLOCK 1067 -#define PLUG 1069 -#define OOZFILTER 1079 -#define FLOORPLASMA 1082 -#define REACTOR 1088 -#define REACTORSPARK 1092 -#define REACTORBURNT 1096 -#define DOORTILE15 1102 -#define HANDSWITCH 1111 -#define CIRCLEPANNEL 1113 -#define CIRCLEPANNELBROKE 1114 -#define PULLSWITCH 1122 -#define MASKWALL8 1124 -#define BIGHOLE 1141 -#define ALIENSWITCH 1142 -#define DOORTILE21 1144 -#define HANDPRINTSWITCH 1155 -#define BOTTLE10 1157 -#define BOTTLE11 1158 -#define BOTTLE12 1159 -#define BOTTLE13 1160 -#define BOTTLE14 1161 -#define BOTTLE15 1162 -#define BOTTLE16 1163 -#define BOTTLE17 1164 -#define BOTTLE18 1165 -#define BOTTLE19 1166 -#define DOORTILE17 1169 -#define MASKWALL7 1174 -#define JAILBARBREAK 1175 -#define DOORTILE11 1178 -#define DOORTILE12 1179 -#define VENDMACHINE 1212 -#define VENDMACHINEBROKE 1214 -#define COLAMACHINE 1215 -#define COLAMACHINEBROKE 1217 -#define CRANEPOLE 1221 -#define CRANE 1222 -#define BARBROKE 1225 -#define BLOODPOOL 1226 -#define NUKEBARREL 1227 -#define NUKEBARRELDENTED 1228 -#define NUKEBARRELLEAKED 1229 -#define CANWITHSOMETHING 1232 -#define MONEY 1233 -#define BANNER 1236 -#define EXPLODINGBARREL 1238 -#define EXPLODINGBARREL2 1239 -#define FIREBARREL 1240 -#define SEENINE 1247 -#define SEENINEDEAD 1248 -#define STEAM 1250 -#define CEILINGSTEAM 1255 -#define PIPE6B 1260 -#define TRANSPORTERBEAM 1261 -#define RAT 1267 -#define TRASH 1272 -#define FEMPIC1 1280 -#define FEMPIC2 1289 -#define BLANKSCREEN 1293 -#define PODFEM1 1294 -#define FEMPIC3 1298 -#define FEMPIC4 1306 -#define FEM1 1312 -#define FEM2 1317 -#define FEM3 1321 -#define FEM5 1323 -#define BLOODYPOLE 1324 -#define FEM4 1325 -#define FEM6 1334 -#define FEM6PAD 1335 -#define FEM8 1336 -#define HELECOPT 1346 -#define FETUSJIB 1347 -#define HOLODUKE 1348 -#define SPACEMARINE 1353 -#define INDY 1355 -#define FETUS 1358 -#define FETUSBROKE 1359 -#define MONK 1352 -#define LUKE 1354 -#define COOLEXPLOSION1 1360 -#define WATERSPLASH2 1380 -#define FIREVASE 1390 -#define SCRATCH 1393 -#define FEM7 1395 -#define APLAYERTOP 1400 -#define APLAYER 1405 -#define PLAYERONWATER 1420 -#define DUKELYINGDEAD 1518 -#define DUKETORSO 1520 -#define DUKEGUN 1528 -#define DUKELEG 1536 -#define SHARK 1550 -#define BLOOD 1620 -#define FIRELASER 1625 -#define TRANSPORTERSTAR 1630 -#define SPIT 1636 -#define LOOGIE 1637 -#define FIST 1640 -#define FREEZEBLAST 1641 -#define DEVISTATORBLAST 1642 -#define SHRINKSPARK 1646 -#define TONGUE 1647 -#define MORTER 1650 -#define SHRINKEREXPLOSION 1656 -#define RADIUSEXPLOSION 1670 -#define FORCERIPPLE 1671 -#define LIZTROOP 1680 -#define LIZTROOPRUNNING 1681 -#define LIZTROOPSTAYPUT 1682 -#define LIZTOP 1705 -#define LIZTROOPSHOOT 1715 -#define LIZTROOPJETPACK 1725 -#define LIZTROOPDSPRITE 1734 -#define LIZTROOPONTOILET 1741 -#define LIZTROOPJUSTSIT 1742 -#define LIZTROOPDUCKING 1744 -#define HEADJIB1 1768 -#define ARMJIB1 1772 -#define LEGJIB1 1776 -#define CANNONBALL 1817 -#define OCTABRAIN 1820 -#define OCTABRAINSTAYPUT 1821 -#define OCTATOP 1845 -#define OCTADEADSPRITE 1855 -#define INNERJAW 1860 -#define DRONE 1880 -#define EXPLOSION2 1890 -#define COMMANDER 1920 -#define COMMANDERSTAYPUT 1921 -#define RECON 1960 -#define TANK 1975 -#define PIGCOP 2000 -#define PIGCOPSTAYPUT 2001 -#define PIGCOPDIVE 2045 -#define PIGCOPDEADSPRITE 2060 -#define PIGTOP 2061 -#define LIZMAN 2120 -#define LIZMANSTAYPUT 2121 -#define LIZMANSPITTING 2150 -#define LIZMANFEEDING 2160 -#define LIZMANJUMP 2165 -#define LIZMANDEADSPRITE 2185 -#define FECES 2200 -#define LIZMANHEAD1 2201 -#define LIZMANARM1 2205 -#define LIZMANLEG1 2209 -#define EXPLOSION2BOT 2219 -#define USERWEAPON 2235 -#define HEADERBAR 2242 -#define JIBS1 2245 -#define JIBS2 2250 -#define JIBS3 2255 -#define JIBS4 2260 -#define JIBS5 2265 -#define BURNING 2270 -#define FIRE 2271 -#define JIBS6 2286 -#define BLOODSPLAT1 2296 -#define BLOODSPLAT3 2297 -#define BLOODSPLAT2 2298 -#define BLOODSPLAT4 2299 -#define OOZ 2300 -#define OOZ2 2309 -#define WALLBLOOD1 2301 -#define WALLBLOOD2 2302 -#define WALLBLOOD3 2303 -#define WALLBLOOD4 2304 -#define WALLBLOOD5 2305 -#define WALLBLOOD6 2306 -#define WALLBLOOD7 2307 -#define WALLBLOOD8 2308 -#define BURNING2 2310 -#define FIRE2 2311 -#define CRACKKNUCKLES 2324 -#define SMALLSMOKE 2329 -#define SMALLSMOKEMAKER 2330 -#define FLOORFLAME 2333 -#define ROTATEGUN 2360 -#define GREENSLIME 2370 -#define WATERDRIPSPLASH 2380 -#define SCRAP6 2390 -#define SCRAP1 2400 -#define SCRAP2 2404 -#define SCRAP3 2408 -#define SCRAP4 2412 -#define SCRAP5 2416 -#define ORGANTIC 2420 -#define BETAVERSION 2440 -#define PLAYERISHERE 2442 -#define PLAYERWASHERE 2443 -#define SELECTDIR 2444 -#define F1HELP 2445 -#define NOTCHON 2446 -#define NOTCHOFF 2447 -#define GROWSPARK 2448 -#define DUKEICON 2452 -#define BADGUYICON 2453 -#define FOODICON 2454 -#define GETICON 2455 -#define MENUSCREEN 2456 -#define MENUBAR 2457 -#define KILLSICON 2458 -#define FIRSTAID_ICON 2460 -#define HEAT_ICON 2461 -#define BOTTOMSTATUSBAR 2462 -#define BOOT_ICON 2463 -#define FRAGBAR 2465 -#define JETPACK_ICON 2467 -#define AIRTANK_ICON 2468 -#define STEROIDS_ICON 2469 -#define HOLODUKE_ICON 2470 -#define ACCESS_ICON 2471 -#define DIGITALNUM 2472 -#define DUKECAR 2491 -#define CAMCORNER 2482 -#define CAMLIGHT 2484 -#define LOGO 2485 -#define TITLE 2486 -#define NUKEWARNINGICON 2487 -#define MOUSECURSOR 2488 -#define SLIDEBAR 2489 -#define DREALMS 2492 -#define BETASCREEN 2493 -#define WINDOWBORDER1 2494 -#define TEXTBOX 2495 -#define WINDOWBORDER2 2496 -#define DUKENUKEM 2497 -#define THREEDEE 2498 -#define INGAMEDUKETHREEDEE 2499 -#define TENSCREEN 2500 -#define PLUTOPAKSPRITE 2501 -#define DEVISTATOR 2510 -#define KNEE 2521 -#define CROSSHAIR 2523 -#define FIRSTGUN 2524 -#define FIRSTGUNRELOAD 2528 -#define FALLINGCLIP 2530 -#define CLIPINHAND 2531 -#define HAND 2532 -#define SHELL 2533 -#define SHOTGUNSHELL 2535 -#define CHAINGUN 2536 -#define RPGGUN 2544 -#define RPGMUZZLEFLASH 2545 -#define FREEZE 2548 -#define CATLITE 2552 -#define SHRINKER 2556 -#define HANDHOLDINGLASER 2563 -#define TRIPBOMB 2566 -#define LASERLINE 2567 -#define HANDHOLDINGACCESS 2568 -#define HANDREMOTE 2570 -#define HANDTHROW 2573 -#define TIP 2576 -#define GLAIR 2578 -#define SCUBAMASK 2581 -#define SPACEMASK 2584 -#define FORCESPHERE 2590 -#define SHOTSPARK1 2595 -#define RPG 2605 -#define LASERSITE 2612 -#define SHOTGUN 2613 -#define BOSS1 2630 -#define BOSS1STAYPUT 2631 -#define BOSS1SHOOT 2660 -#define BOSS1LOB 2670 -#define BOSSTOP 2696 -#define BOSS2 2710 -#define BOSS3 2760 -#define SPINNINGNUKEICON 2813 -#define BIGFNTCURSOR 2820 -#define SMALLFNTCURSOR 2821 -#define STARTALPHANUM 2822 -#define ENDALPHANUM 2915 -#define BIGALPHANUM 2940 -#define BIGPERIOD 3002 -#define BIGCOMMA 3003 -#define BIGX 3004 -#define BIGQ 3005 -#define BIGSEMI 3006 -#define BIGCOLIN 3007 -#define THREEBYFIVE 3010 -#define BIGAPPOS 3022 -#define BLANK 3026 -#define MINIFONT 3072 -#define BUTTON1 3164 -#define GLASS3 3187 -#define RESPAWNMARKERRED 3190 -#define RESPAWNMARKERYELLOW 3200 -#define RESPAWNMARKERGREEN 3210 -#define BONUSSCREEN 3240 -#define VIEWBORDER 3250 -#define VICTORY1 3260 -#define ORDERING 3270 -#define TEXTSTORY 3280 -#define LOADSCREEN 3281 -#define BORNTOBEWILDSCREEN 3370 -#define BLIMP 3400 -#define FEM9 3450 -#define FOOTPRINT 3701 -#define FRAMEEFFECT1_13 3999 -#define POOP 4094 -#define FRAMEEFFECT1 4095 -#define PANNEL3 4099 -#define SCREENBREAK14 4120 -#define SCREENBREAK15 4123 -#define SCREENBREAK19 4125 -#define SCREENBREAK16 4127 -#define SCREENBREAK17 4128 -#define SCREENBREAK18 4129 -#define W_TECHWALL11 4130 -#define W_TECHWALL12 4131 -#define W_TECHWALL13 4132 -#define W_TECHWALL14 4133 -#define W_TECHWALL5 4134 -#define W_TECHWALL6 4136 -#define W_TECHWALL7 4138 -#define W_TECHWALL8 4140 -#define W_TECHWALL9 4142 -#define BPANNEL3 4100 -#define W_HITTECHWALL16 4144 -#define W_HITTECHWALL10 4145 -#define W_HITTECHWALL15 4147 -#define W_MILKSHELF 4181 -#define W_MILKSHELFBROKE 4203 -#define PURPLELAVA 4240 -#define LAVABUBBLE 4340 -#define DUKECUTOUT 4352 -#define TARGET 4359 -#define GUNPOWDERBARREL 4360 -#define DUCK 4361 -#define HATRACK 4367 -#define DESKLAMP 4370 -#define COFFEEMACHINE 4372 -#define CUPS 4373 -#define GAVALS 4374 -#define GAVALS2 4375 -#define POLICELIGHTPOLE 4377 -#define FLOORBASKET 4388 -#define PUKE 4389 -#define DOORTILE23 4391 -#define TOPSECRET 4396 -#define SPEAKER 4397 -#define TEDDYBEAR 4400 -#define ROBOTDOG 4402 -#define ROBOTPIRATE 4404 -#define ROBOTMOUSE 4407 -#define MAIL 4410 -#define MAILBAG 4413 -#define HOTMEAT 4427 -#define COFFEEMUG 4438 -#define DONUTS2 4440 -#define TRIPODCAMERA 4444 -#define METER 4453 -#define DESKPHONE 4454 -#define GUMBALLMACHINE 4458 -#define GUMBALLMACHINEBROKE 4459 -#define PAPER 4460 -#define MACE 4464 -#define GENERICPOLE2 4465 -#define XXXSTACY 4470 -#define WETFLOOR 4495 -#define BROOM 4496 -#define MOP 4497 -#define LETTER 4502 -#define PIRATE1A 4510 -#define PIRATE4A 4511 -#define PIRATE2A 4512 -#define PIRATE5A 4513 -#define PIRATE3A 4514 -#define PIRATE6A 4515 -#define PIRATEHALF 4516 -#define CHESTOFGOLD 4520 -#define SIDEBOLT1 4525 -#define FOODOBJECT1 4530 -#define FOODOBJECT2 4531 -#define FOODOBJECT3 4532 -#define FOODOBJECT4 4533 -#define FOODOBJECT5 4534 -#define FOODOBJECT6 4535 -#define FOODOBJECT7 4536 -#define FOODOBJECT8 4537 -#define FOODOBJECT9 4538 -#define FOODOBJECT10 4539 -#define FOODOBJECT11 4540 -#define FOODOBJECT12 4541 -#define FOODOBJECT13 4542 -#define FOODOBJECT14 4543 -#define FOODOBJECT15 4544 -#define FOODOBJECT16 4545 -#define FOODOBJECT17 4546 -#define FOODOBJECT18 4547 -#define FOODOBJECT19 4548 -#define FOODOBJECT20 4549 -#define HEADLAMP 4550 -#define TAMPON 4557 -#define SKINNEDCHICKEN 4554 -#define FEATHEREDCHICKEN 4555 -#define ROBOTDOG2 4560 -#define JOLLYMEAL 4569 -#define DUKEBURGER 4570 -#define SHOPPINGCART 4576 -#define CANWITHSOMETHING2 4580 -#define CANWITHSOMETHING3 4581 -#define CANWITHSOMETHING4 4582 -#define SNAKEP 4590 -#define DOLPHIN1 4591 -#define DOLPHIN2 4592 -#define NEWBEAST 4610 -#define NEWBEASTSTAYPUT 4611 -#define NEWBEASTJUMP 4690 -#define NEWBEASTHANG 4670 -#define NEWBEASTHANGDEAD 4671 -#define BOSS4 4740 -#define BOSS4STAYPUT 4741 -#define FEM10 4864 -#define TOUGHGAL 4866 -#define MAN 4871 -#define MAN2 4872 -#define WOMAN 4874 -#define PLEASEWAIT 4887 -#define NATURALLIGHTNING 4890 -#define WEATHERWARN 4893 -#define DUKETAG 4900 -#define SIGN1 4909 -#define SIGN2 4912 -#define JURYGUY 4943 - -// These tile positions are reserved! -#define RESERVEDSLOT1 6132 -#define RESERVEDSLOT2 6133 -#define RESERVEDSLOT3 6134 -#define RESERVEDSLOT4 6135 -#define RESERVEDSLOT5 6136 -#define RESERVEDSLOT6 6137 -#define RESERVEDSLOT7 6138 -#define RESERVEDSLOT8 6139 -#define RESERVEDSLOT9 6140 -#define RESERVEDSLOT10 6141 -#define RESERVEDSLOT11 6142 -#define RESERVEDSLOT12 6143 diff --git a/polymer-perf/eduke32/nedmalloc.dll b/polymer-perf/eduke32/nedmalloc.dll deleted file mode 100644 index 4952fe2bfe391f9f9a1f800b74eace7df6093792..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88064 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�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ΞreTWkEa^cjtbGBn9eSA@kS;-GvO&%=)^ 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

_-UU372TUF7Omp=eR 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

KC%)(5Wtc?lG?^<4) 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 W*)aN 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

1yQtWP|6uYVUv!67lK5H?ZB1i(yoUB%<$bchp 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 qxAMR*l@ zWkVmii-nv|P$Txq%$2|Z6p&3GKt?lUu{CYtLYkPcq$zy?ctsr@1-UT{H|_t3bA=;Vqn3en zLeTmT83SVU;T&ATi)SzUSBr1TAkLNljpNw|I~(h(v-Hbfb-wEFEe>^e_Tt5)J~l8e zu|HseEU|$ml9LbHNWgct%P*Mrq#wsUXxt^7z-UkG1m5_hkS-~*Mm{FWLQ>Kbpt*%v z%H;$up;#WO=dWhq(b_;0r}P*RgEh$AEKTbl6~br`=75*R;N`Ng+oF<14dokaw& zivS{N`>`(!8H6uRjv&MMg!7f*oYIBDd~;L_OOYu+Ose(pgX$9Y6$t9Ag#;x9ZZJ2K zPX3M&N~#HefJTh@EMH!J^7>e)@S;xvp;UOcZ0QCFAFHfG<+NgeCuaY{G{yF6x#fVe zqiq5{!TcB>5G*mICYib)8N%*@7XqC8%-02+@aQU34SQJsQT3lGiuu&=RTd(M_D;88 z80+g}k6pdw7kBj1jq`csyf8B{#A`CZUJ`G;0Wq4SArWm8;xY5=X+2AIxo!R|eO?b_ zI_u)AS70OpE(KakWJ7*QiU=)$O1xr3q|andd@fGuM0%vujMNe)Rm_Gtb@Uq9gwyJ0 z$@XZ2!O;9Iu+!)nG)J;UL@+Pdigh9iwhaLsgf-EM``A7NEpj41%szif1NMGPSNBN| zCJ!e=?4@n1#ihmfd5ltlgFrYQVpMrl5xsg3pO5mn_WTU0jAD6Zd~x&e_Yd|c8+La$ z%Bvb?f9I<~&VxRG`KH8Fqa za)>evi{iv69b9txE&E`zZYP5J#O^U9teMCVRoCbI-BafT0`aizDHs)a{s`o>Z^l|p zki-^sl1YiXql%Ym#Y;wwJO$*c3{3x$-*1tyL-!MtR}?T^H-%24uz(#4avWEG;Y^=t(bRix>DH37W#42dnyN@_UpodH|0&+|S757lInIZeGXOwzg6h zX6#Wov=Bu^>~TF>by8H!!SATH1`A=e)C!6*{JnA*X+W-&8UXum65>>-sBKW|3Ngwb zrNSY7i2t5hKJR$|j0M=$Ewvk!UxA0r3P|~wd-&$K(ZYna+Z@qFAL2sy-?&D`CBFPV z_PbJgI34^DW(La&Yu5u&D~@TmBEo>=8+G?@`U#?=A?CkgJd|32*)Ba9NyvHVpQ zmy*(fv!qXXDPAYnhJ92VhT{c=;uu0B91`6U74zabY69f-^rh{HMk^Yr61a$Jn^dvz zo_|h3K~A7)x&Z$)JCjVe@SNx*ynN}zXS~cj#XQe=NBH3|tkMeJ!QRxZ9U9Zl{kTfT z*0c*_lyv8_2;X3>%ecZ3wq89xAQjXo5~47mHxUj1`nN1Vx{Vw|NyabngZ!;s0Ft}E zV!gXpWGanl^xgxuPC_;Djwjx3g}&-06_7p+sYWyNLl;2)ybm1cg+`0S)rU zdsGI*GZH%i&g@Qd=j9%4Kt7=4Y;>erYQR`a0AvCVU>85A2YPYl*$t85amb_4oyXvs z6&9|Bsu=qvV(dl9vDh*l>kusP7vY-Y+rSl)?ICBdY z(tHHILmyx$v^L(r%Ly(h3~@5s6oEoxY;s;Fkid)#;gPVD82Dsk7>mQm0>5@bGvT)a zi(ph`xKFDZOvnqzl!3|@i0#?ZY zq$=z|b!8s)1&M+Mk?bNn{h3S0-Q5(Y7!a9}fy_2l`DXVnmrpCb&YWRq^ z_ywX27Yzxe8>lFsrjIXhVARzT)XuU^&+A!=o4z{300Foi3Wpm(`E+yvd0yQROcUc! z{O{x1c~Q3GomRaK$Z1j=S+v`|m`*EL2yxkSJPs zdxca+2IE8l=keGb8A6h@vsDflId?ZAjO^u~xWOFB%Q19sW*;dZ}Y)DNXeb zJI3&vKq(kafzoI;+G^wnc|lZjAnyx3Ao4^m8r4YCXqX;8Pq807hUUBsotD(GTaXMV)VBKQ4bHs9H*vFX|(LD#RN+M7nzO z+0wTmq~@fX>_Sjh`>>;y;j!?5$X6v4=#%ryxt}yyMC>v3!2JT0)~c;f7X|1nQ^2Ks z4w`{AN??Ewo{={YD!d>14L%xagWqjivp0iM+R;!1t&B6I+5er@<1CaEu2{ugqCF8H ziVxx^|HMysjAanAeg>L#=xc#fW)FuSbdV-Sj*mnM+# z644aa`22Bu`=f{V@3#Y~uuM;AJb%GiBiN;;05Ws{(9p#zA)i5Iox!A>iI*rce5H8) z^o8aHrbQ=L!n6bQ5=fbi*)IIkTKycZhy*nZr$fy;3HIv}M%FY^7@zk8`f=w=oi%;> zdvVl5wwQFM&I&9@wV?9=_~dZ?UW9#AEH?B8tNmB~Du}AYB81>!(m!973d^eeVoxW^ zjweqjSC*F6XIA$w9y8`Z{eYTjWqce?FEAxlGP8^w%PAbw%?n% z|Fh$XKW%^ds;{@ZlY_zMWgq(A77YWqelqgA#C)G@0|8hFtuM9*MwwxHmJp5w@-_x+ zj%(wT3vR_T2DTc`hAt6jP_&u=g+!PprNYc)I?kjOK0yG$d2vMkGN*I$%A3Ry&?X&Z zeo^3CPiErJdCvJaqvOeB%M_&p(Q)!EJ@#GHNLV(4s5dhX?I7i$a!4<46Odp)& ziMLr(8Jop&=K!vmJ-nrAts&(^84j|_lSj6CS$$o&yo8R!0}jr36dH=@>3dI}K74S$ zz5RjEirj%$u#wB%>-H!#JNJDxfH$a*^Fi8{qH&DiQ7ty{B;hL3gFhm^0g)AS0F@Cs z@v9jmSZ;|$gofq{)TvxZRW=J;gL(RQKqG-N)i^gHdfDID`I7#ck0n2_`a;zSc*=oR z(q5iVUN$%o>LNjpv44?k|MFRmq_ukz%Sz2Ft zvGtco^HoT$lRqZ&5!bb~<;CgAfx)r)m8F%n&CT*M^~UD*0m|2EiSD5P_jXzi3LUJ;QL%2bf9fY9mUd;riZbmOJ~g{v#5yRrN++S1~`eo zrehbhX4-V4BT{tZoC&@vPc54|InFaG2q=adjpRckD4+tJaT?B-!obBZ7F@hxt0aN0 z;?wgeREJYZz&b5uD_5MfR^p-0K*yp=MsTy#yg)X=H`0YOi+BXg6-83I&}d(esnTrf zimeOP=uAnFV|g$DT1N0C)6GH?mh5| z`=h7a{M8_7ZeI{RU{F$|L5;Ffs}VdzjZh@aGuKl;I3yQeI`50&>xR={mbrD5ew&w! zQj{PFIKW1&S-do+lPWjYC#dq>)K%~ZTi<(;)~vX>4f5hS59`t6o%;XluZL^p>a@C3*NCb2j5^_bJ(IzGVlQ%KuRe}=$_X&*t5sa zCq`#C%j`bCdPO@@z?T@n2Om*i&glHz5P81*?xh;tL5EU-TvgLJuRiCynAleO`}ShMVH zI7b2Zs^_1kqpbD`hhZb-B)K=6O2_%bVZ`CiQrRK5-b+gt%_nf&p=g7PpaYt5x(E;T zn>UQbiAzWz8zN4X#yeCy+_s@o1z*KW?7O){-`1ocOku{NG4hJPk4xhxNQhC1<(f* z7FPKY6dk;$st>^|g$12B?l9;I98G7?RV<+$Q%s-#AZQ?id^237~}{_#6SWTh|ERNS|DI)c)}PJy6xdM@;3v z@V;qxmpcI%h;Pkd3qf7YnwmTkX$#M|FMyRAFB604fhK&b4EV$+)(|^wZ1VDMu)fR>Z0>HXZm{BW=g2zncyD8M?6beE>~=otV2Uoh z0(X21u!&S@Z|>W;h6N8TBH}u>gA57uPw9b;!3{C+zqp8Bq~rDYL^f7MMOhoo##!G0 zutzG!CK!nBbgUT|1Nef`z#ot(i>J8Dk`ptWq-n z%rNafkJy8wYYt10C!msNn5p; zR&9%RUErupAe9f#{i8m?;(;35TG`!%%bdDRyd5nNCRBAUUCt~~!42Fb`y1W3<3rhc zw zFm^&-92+tEtLQ&{dvF=RTs;Wk}f_VX+U1Z4m77#}P)FEiZ7L>e%Ph+sLK>JeC!w zjWczCq!9ncaE-xr>U9%?!FhP3N(^#TdQI#HEVMZ@wg)^>5c7CC5!BzzV z*rwbalKB=Po$x80yGjA!nG=uJ0S=78Mjk1_B}}?R4xDV;=>z;7ESieEdd7;H6aaEc(>75P z9-tE>=|2W_dk_<)3H3tRh2DH(chGPu3z3r()j2k50L4WUPXa1i{m5B0PkjhaMA2Nc zCg37&N}rzvhdgM%_u&4$_D4_CXRS&AiLTvr1fqhdaZJJ9F~K$MJ3}i0%NDBAM-^}p z6w*>sYy%462t!Ib5Np=p#A>+2NpKu15y;YjcQ+~1RK@pIi9tou(PfM)q2iCIY))-hVOLX{Xt$OY{&(^ zXbg$1B|rZ5BI6l-oFVD@ZlQl`m3h(Y2RmEX^)7Y~ELvTd7$1ByY@2##dvm?KzI{;J zgQTF(N4pda&gkIZe*F37?q5B6`l5e$fYq3yqP_vaJ}onr?6By^uFPm@#L(=wk0VSA zL*`}|Yb$NC9Eh$lH3xB|stDC8UHIAPJ2V5b@sD}v*47d}HbeP41QcKpJ)Yrzq|y7IlH zMGGAZ3qh0rmLl5+IPLvDP;AW4G9A`_}y_YxX z+_-cY5jqe4r=t=%Hp*gjNI0VtxOLbC^%Mj_E&+eAe4!Bw2oU+zWjsGt6({5f>Doe2 zwl?z)$N&yng4NOf4;Bm-I=4IAf$;YzX9&zoIv66+^4tyC!r@o_r7H>+!>f5ANNg-fw?! z|H1wHRyFO9z)1>DkYv24!3vJ9~>QQjePgdb`Hx7VDyb~<%*mHARAIl0Sh{37mU^L(YAqP@W~J|(NNRg zFumGJE4ZD9L=%~!VB-B#0T?9*1}$OBPxdV}qQ9g0FwVUPy35Qh7-?`4Y?Hr-Cy|zm ziKDxu2Nn^qB9X6#^`f}RcLhd{s4G%#G>y_n!B5NvU?C7uGJhTw2RT5xm>fsZ&! z7o9p49W}`&Ttzc(JSHz-$^nk}GpmQ7Y5Ay=MDHf8aSD8+fU;=YmZi8p zVt>8k7s>H1UrdO^5Cv5|twh!zR6^q<8(WPr>x@pG>Ea9}!>kPp`N-_`w<$rPFa_XH zI?wQmN5FK;1?p=AAl`xM=Afm24U?;LRDKjC2EhcKu#O7fWu3gee;c%?;xRYLmkj~}()zjyEM{Rj6R;1zcx zX^<=+h<%{=#LH)(BytCy;UXJqhQuQYW)0opvQ(3VFU}j&H1msa?z11y&1!bh*JI}H z&6|m}_0r^i<#509cZU;YpwZguWMAJvacp|L|50o|bX}wwLIW3^$oTMtFnvQL&y_ z1m_oxZvMc=a|&KO=N3?`)<-utU(eTMWzE7FT-KU^AL(2j+VF6OGpwZXL-R}Y^xA@k zwZ+HyHsePv=C^UUr*!%|HY^+t4oZub-YAXjr8xMO%bjwT$;I9fu@=+VD1|f~ZMA-t z^@!=IH^;*X6nx~)5jTFUk25ks&MRsEh1x%4zoux`L+Il{y23E&GI7zIg?*4rd?D%- zuD+2q4oMF+P*ZIyAv2_~B6`536%Rbi`~#Q7OWg^VZ0TfUkI$YwdYnGG^cW(^;xs?z z6ruL2L_Y;79E>CkCI%j-^<4a{1PnDKVC9fTFy!!Uye^RpNDiE7Dhg-yiwrSa#*8X- zCt0C}#IONncF3z5pFX3*5c5jUzIgJe{lSB~ckkT0A7+2=?%jL*fA{|VyST&yKAJwv z9%oN7632PK6SX~k#%DZ!=0^+NNnCC*ap?z)Yx3Zdf!~7N;uV?(1c;007UmH)apMXk z|C-wjV++%-y2_O#``;_e^ZlzEOVeX(TdZY*eb`xB8SVfT&CXAfc(d*Cy;^p>Iy*&L+df)V8mYOX!CtoU7A%TmqvMJiq;2ufmiDb4ZqA`2&3ar&W z!{6X9DF6F-YKDOm`eAhOn8*n&c&G#2rrL&93=F0ppaN_P2#VdOBOj5GNe5ITWC(tf zU*$F7Rj3v}lB1BO5I-Ua;~nzjWRR!X;$^4l9Hw(sja9V?;T+aa`<)&HAA@1a=FfTv zn&*viZPys2bKfJ?xs*d3$G6KXjvLqyp(>kn&5#AO*WXxL!pgkdDBX6i6L|Uj8@wRl zC&9bIj(ftm7%ocX*^Ikvq$XlLZ zootvi_)oRq3`*@L(&=WDMk-~~@iw=aAiYCT2xassBvOPzJ&z)nW&ymWq$J%$vhyO0aI_~VXKL9wl15+7swjA0uNkY zV9a6;(Ni|{ZGAzgMmAKB&dY0ol)J({dtg>w=n4a0t{$1dr<4$p>}q4=<1z?%lq1^XBcFH}BlIb|by{A@AI} zefJIyVh*9|rl5FCsX@tsf*r0YeeqF%CwV3wn7NJ2=ClG!xCeg#!f>pQ9x|OMx>0B~ zICnsiJ3TU1dfwi(b$E0*b#D~$J;y~;Ko2it_=Q`yXgDS8VKM`VH1 z)^s-Wh3;c14Qleqc-`41#LiW17 zY_5@h^oqjog(hGcevr;5!X9LZctJXQexAc8^NTL;BZ)GT-GV>Be$7rZT4zc~C+j9g zL21R0@HQQ<#IkR10HFiRW#Ew!8jcPR;g6hpP_FG&hUhcwVc+g<)wc5*A#RnZ>X2W` zHxMx1LkZy7hYTwRC7rG%b3Dj0VO-Sojnx9XlJhNPC!~^~s`z5Z_N9->?nfj6R^!C< zToU%~C}}fX#=^|xC=}?xU>}64G)@;y-Ht0BOH)4NpbSMq2Slpp;a=5a=d2n~NWt~+ z=Fk(pg2exji|1IouLQ3O5R|CkivSwBz>7i(2Nm!K)OP96d0r62sL^IK0d#)C=@GsJ zj42eZr2*BzeX!8I`*-g(-n)DI)~)nL;d*-GTi3q6e&af}&yO27Z{55DR0?x{h_ydT zpR{tCP0faN{$;)c1hUi%?v29WowNRSNI?My-+lUgt&$PFNVR)eJ!D6sA`9nq$w=~{0mS$Q^zKbDe-0a45KQ5d{D}dvBru%0&Dc??_yOv zg+ph7TDfiWR3^jC5mDstcqVJ)L?jjge*dx^>jA%=Xx zTx~X;F0j}#n`vW-KpyDzf!bVQKAGh)F+Yj}rjreHnM+CWLz)Km5yod?*ug7TG3pRD zp5JdEa-WX-2z1nV|GyE>^LjXs<2k(}*-r_;|2dhO9)A;t&Xp?yJDp?$eC@wt*@+cE zjUx>z_u{N#0*rDmrLYP~4Rg}0F#zGzajp@NlWx_bU7&sQDlBh)7Jy;g@6mvCJ&~OgKpiIH_MJ@wwQ|U*oX*3tSoDCz^ya_OLncbj*ZQE|7 zfrfD#$KSee4(zXz0?SrHgl)t8)Y=R8(!0$>>RY$&+&Odi)~y>iu4B^IlIzXac;m*+ z+v&~oH!$$K_dq%H^d3J+AD(%Hc~c8hsw5qkI?WDN>9mOE#DB5FzGCC9gY30pFQ0u5=Vcoiy`GxQW*e+B61H*Ykj2Wz zjxUDnA{n?G(h3hMnL9@Y^F3i0fqeQ5gD3bo(FbPrQ(mlxig8iGs+O>X6`=1#A2_#PLArq5`#d>iDWKm6wHIo#oV35<=dTIS``B>YzQu?S zqCub>B9>6bT#y^R6KGCwNfoA3m3T8F*z5xhd*+ZzbOBQCH8v4JW+#SOLgdsh6bP6c zTSz-Uu%U{9G5AZgW)YC*+Mr6}!1J4W&EZTFe8b4-~0jaoLM56 z`eP-(O|vrmY<_d-HFU&A=hJeU{X_OXLyN;mSJmtwgqx>Eqah|M;5Aqe-zNZb4`J4= zc^@P{b8C3+;lwq)d@q>Mtf{CPu& zMK?W{K}4BTqOa=&LjOQGDshNIFOZel+-1l|Jc%qJ9+ImBch}9%)$-j6yd!m!Ef!#B zE?H&!$f5xZFq?|qx9@PHFCRYT1wt%3AI7vG)uJ;h&qYjCIPF-y^!z*i#nE9qSNXsh z+$DbtbY8(a{h1x_Dp&wxtI91lmrDO_FMTZ1fjU1A5aJEXR8Ogih8)A|8xn7nWf$_vX#V zVppQE_!@<##Cj)8jn8k&Q~zCF3-|Zh!r~ z)Z1D6IV~AF=Kj4~x2|7HuNSVJ#d@#ZxbgMZH?Dup2eKP=H*Y03n{M2?12#z?WbHqE zM70XkRzxaFlAk0p``KZUq>kKm!Il?-^A#*P{x@Yqngbf9m$<_nCs{9yJ}n ze}-I8!89Lc2SS^m0)s}U!2ApfqPfetVA|HKJd|Z7nuPg3QSTOebY|t^U5(A?ofEOl zkMqpr$-v$ettm9Ir$QZ+o&~fCft*RLC}B?BLZhuiu}~DRVirp>G7|_ zj^!3pIQC}vb}X4+CfvpnZvmrYu@}JO7@Iy4cI@Rd_W&6Vw4Dxi!nVQRbcR1xPKD05M~09!7vzVdJ4xHcBzBM=2{7W%PQl6{4~7`T~Mv zpm*0RL|#Oe*XXy<_R)`@>4uL!XXCH%>`tTd=cel{9qX2$z@w#Heh8- zh|M={5|!(|`m*7xuQlbm8`slomu_4$K40h0ZfepGC@>oyL;Ix9+Q1tUK^<6h^6H}Q zCeMSLa`StjKXIE9)hcFvk>6u&E&?*ggbA+c+Er@lH3IM0!?CqDZ)eb5_1x+%Z?ny# z%7)+nGdr_6G(0diF-zc0XA9m`DzBaJ{1v!GT)`o#9;JjOY03?{ZXOlP#pveDGrI_= zGem}-ln1=$fLc2DeYj4*GVg2A*meF>Edrbm5gPhXlTML(e&)s%yhFb+ zKvNx}@}}2H6UiZAyGXQhq9(MDgxT`zKVz`Drp8XIREYa_w|P6HHpdaL*)9j&!Llt| ztD3adt8Dq5LFeZ_j-zT+VutB!%!i^D-cKRWStcJHr0PC=4ZCxg-bdB%y53xQmaKhG zLWB@9>EaL&Eym25Uk;#Y7C>ld^v6%r7g@*o&S+FBne^Gr-hSWb6pL|)Ou)dFomlJ? zY?0kPUIfbtUN0#u>qe95zh_*C_nrO?<~%H#0G+SQg^;9UN>zCO4m{vZ4fpG>z9ul& zef?$nb;0-?zkZHEU%!6y1_=A^eOb)sk00AeqL5`F5*Y?UzNdw$mmot@Hb7$;-befQ zvB*>Aj47X9=ey8mj?ZAy0U_2^((rR_{>l6Xzv zvYDOVob4YUN4HDlWuPjoySAQe)DyI=4Ufx>e8$z)TKND{BwH;2vg?)+1+(C4fg-eC zc6z#L%1$YYd zh(Yt*;O(rSR6Kw^!!?ud4{I=d+OZ{IPT{#&G1tlnm2>=Im^M7;*dt;0Nf`Pu9~MMd zABwpP)P5_)okMqt6oVfG|3^|b8{fkb2RUyUsV$gpH)_w@E28&ep zE72zMYDcnJ2ogM7J-4zv&vZP2)xF3mXXQZ0idh`(iV{)5qT98)TYHoQo6@fuE{Gbv zlHWpN5#WuP(AUkl%}b@J^AchE5`DsPtPwxLz6H|=6=;Dbce6X$ z?X!U9TOjDKuU-54tL&@n>vK>aUkCjGrv5s)c7ak6F8skmdRWZTK!0b?&gF^$P(Gdq zZX>KojOj%B|67O~rCP15kubHkXJI64)FSH#HK+7&H)edXzD`RfP6Q;Qn|Uv^E6 zG%v4j(H}b8?l@9?422~tG+5u<+2@WhFke?l!h|Ct^U2Gj&KEv}CQG0B(Mz~1WnPRA*Gm3Hx zw+$tEG)al>FoFOR z#>-GGp#F*ctyCssu;TpKG-D_444vD??iXQZG36|uw$4wvZ5J}+8+yba$mqkUc_T;J zj<=sci~K9~;a_^E3PwW@?r<85`Y~i;-=vKZ)yF|76?wi&Sb8O>ZuSB3H%}RFBD>O= za5NZ^M#Ph%lh>h_8Z+1dN@8|ox2y;_NoUnRK1Y^V;!LBc#GZFQKwam{T zEdb+bcdPuFmy-H9SFP2fb$rcI_Iw(IXP!UdrGWiJH^~tW7(Tez;j)!O$r?4UcyU8C9l`aFO@4#N)k-$!GB-iV&efed>mtTGPReG)E>#qPT*KZKr znE|ytwz6}_3rjO2b90P4 zF3x!sxD36-c8zR3^CxyrKnIXZ{WXv!i0qzJ&6XOZ1m#b#c46ek;?DLvWIW5iKm~;d6fk#!t5p2 zJ1jxb1VmY30L%4>ONZR95l1nL#UAPeUhuoXaB&Nre%iylawR`Mz?DZa?vXxsUa&kj zw|B-i!`Ou?+sCKt4OOyBkL-oP8_}CjBYAkjG4VUCHXyx*JdIhyXzJVXM;VV@w}gfB z?mrOVkNIhwKfuC`;~D=bK#Tq*Cu4u}gylXVfB`*4P_NtLkVLloPB?jzK zscdJ>>CX0Yv1fBD`*0tf;20qt{Fmnj9R-JRq%B>ml#{iH^M$p;a-D;Wv^tle2AApK za7lH!fxafV{(aXh_`|jh8p*s1raXdj28-sD01+NCo9Awrby(R@0~wMJodvN23Z?4U ztKN4}P>H3xVA@1FLQhnB6QlO4T_TqN!`+NaMxlGPP;=9II{)uL@e$*9?p~eG9^GInq->$2|z}37rF>p3Ya@I_^}6=($lj`^xfc65=d@%MA($t zUL`Gb6-TlDbR^6R6ym0l{>-Lpi11MB9bUVBp$|=Ng1N_yZV( z>+h~eh#tOJe0Y>rn!s`tN$Uj{`3PJrpLl~NKcST`BmV+3(;;?A9=8Bq=+zUyZ`a?v zeLKCA-74HkZ#H7#Uw)nbBK`6c!3)*qbtrHC0_?Y)%7;|Ls9Dg$)3(RWI=iGO(Gzgm z67Z687mw9C$-sXQvrwSrO>NSZ-zYlfQRanQLZ*RlZ7~70zFuCO>izl6m5sI4y+tl_ zzijCpTHjb*dNH$|wd{;-m5Z-87_VvGVzzH8E?qAxpnIrbs1p1a#!3B+K=B zApdcMb`8BjDx5`}aO>GJ+??}9kQY#skSjE4jN63J6378a?(~zbufTqSKUG}?1n+f2 z!&NT3WX0CVi`sX-2N!;j{H2EsH)`hCaXkPlVG%dQsCLfp(k2P`g1|*Citw%Sr(Ue4pn4!$g(tn_96A~_{Z@ZEH2-@3F?vNCGiYP_%Rve>H#pNe< zj!q7a3E{QfCOB^tsjj-surNb&T7X z(a)mg7!TnHch7llP!cu`nsoh`eXEBYAem~@61oH)Meh<^h87kR+ky{h&h4Tv?0}vs zh#>}v+BVuT-8;0~Z(S#Vr(Y$%$iDgnlJJ&X_f3k{jg0@X>2I9u1rSnK3+vPx81iZ2o5v?DvM~#{8>wGt=bCo%zYGuU>7GU-fQnObkA~ z+uAuW&q~LM{{3HPXKJgxo2x^E<-^KOcCJiAW^M`Ra8?77ah-U<^9mTR@x*3p&3Fy| zvUXCgf?6VsH;NlptVI#=zK<3HX%vP{{H7BaqxC?%Gny2DgDy^laAa96m^|Iys6DZ5 z5lw64N19|jvq%>4FI!>Qxu60JR0?UJH^Rjvq0G2=;?IawFXl4F0 z-o(UV7SScptK=6z3$q-wU2!!%jgZDQdZY&SCaFh7E&tZSo!&cw&5qhKcJmv|Ww_JI zrC5#-_KH2H@srzMe1LHQg7vo0`yT|~V3tNlUWwQ#%y&!v4CN|V+{6d4?g#KHN=#@t5xqO> zx}0b4`S>-DT#C?o!GZ#2leZ;QTyXiBk&YaWC%^5(2-qKq%p}Hc+#rU>U&b7lW{Vv! zR@VmF?{>ercm2yV54ww(@MgKZzn8UDH^++Qwf=$fFB6|_!6O%bkXVa~mYIO{_$jd~*ehvm|#QixUafDSu@r}FT}P3J3G}_2O@FUWRNOD-e$|^WDen{r5xU(rTSc=gx*MZN0&4; zX&<8|)xQC%hEZqz_4Y~nSfMYgVzd;+!hQdM7ll_Ll4zb!!ISE&13J>ZWQm4h8)f(> zl(6h?Vj!wLmy`oD02}ayRE~G+?f}7?krLjzdHt)VudYF`Tu*OhHye@Q-oKZ$H!?!| zm|^a7ih{e1*r?_~A#HCM7bSzxcBR5>vaRDFGa^P2DiPcs`~XJ=2ENatGcE;CW5#S{ zEJ%qkyE^n@=t=L^_Snsb&;I_e{;KWkM?=dDt8T1pa3tzH$D$^ChnC^WR}ZTY!{@38 zOQp$q#3{`45xwawK(1)pa)=T&wes;AZxg&vux^|674@~0I<7SyO-C-ct&&+c%r*ME zQW-FWpt*FYLD^t3dInU^pZYgOGim^?mJ?@k{EU>RHVy=5QtuB$=a4L?$}i9fT1U=yl0V?V(4NY&o>rR>iNwg? zn7Cpo&hiGcK@&zpJdNNiqybhOA_~u9s9JSk-ggI36SGe;DU%uopYhf<;rq~qfqH@H z!SE2?8aaf1dFlt(c&u*%Ykx4)npe zQ7I}oB5Zd$$piYvh%lh2DmkPBiNbRT$9Tm86ziti6nB8D&7E8^<;kUxXXV5do**S| zW=dW_c@x&X_Hd7g4d3(|AGN1<&m)WiL)+W2fs@{DriBAaxt-i9T+gm&*DlhhR1t`} zT8% zGGA?6AQm7X$I`71iwQz}0w^D6&<=1%lrRZm_n3NZ_yTWQaPkcWWT}KK;*9 zE=zLYi$}))LKJgO95*xz6P?o0OY$f|aZ@EyYOd2exKMuk^~V16wI|!fzrOv8AOG}w ze|M*Q)e;gkUf$f8pPX4)+1T6OTp4*iI@VX5f6}?Ww|$tsM_79J=1Q>g|zKyZhW9c9kQYq`_Gxb?{lAdMTy+3;sBBXI=6Zoc&<)Jk;g zgGvFVFMO7VcOf~5oH(y=QmzqaMsYKi4qfHT>x$s~k&&4|FGTi0FLejlzI7+!s{Lbk zUY^+3Da{1Ba5(x&gW9 z13|ak9Odw6i*XU4OEC&Gu*U`vEb??-He53t#{8h1iC`riW&4jyn0VH?q|B=CH%ZUA z;2#a;0O|Yb-K%-%zH^K662rcGmrf9-4Vj|Q~ zvBhux7jp;2|LFlZX7Jk2e)8u({p#^NhRPmTS2>m~)3$f%5{=Extd6Zrza8Az-6qpQ ze<9qgRkt^*9ZfGfC&u{q(9xV)r3FOJfLNjGsbJnm0bv^ag7!o04QWfPtoVp-qwPkg zZHNdMD>#8Id?VPoYf4};cv_jn;W_4yDL%8&e2EE+m4MK7abyB`7YfvTj|m}1mlmlx z6vUgn5<`vTh4CpAgbQb5X9gf#9Fxv}%rk;gH;h}@qKUIzMq6h;^4xboJamf~5RGS5 zyu@4Y3_V(*C*TIJYO&F>vU2>cm6?--mYh*J8rhGG%C>+A@nV?_fI>Le(j&xY={Jxp zzC*$J|1ud2T|QaUeJcng@*xM4CVHIgf2<>`>KST)I#`eK!9oM z>C)N><#zU2Sk%D;O;Udr)|oJ}Rg! zp#IG|>KPtQJ3k~9cnBRP-c*99iZJdTGgjNYEg+_JhQN+jBq_2s5FVb#IgC-X zFzY@&4ObQsH7JnF5~t;!>zy}lF03vuO}+T}AO6Kpes*`3=Vzw$b^^Oyf*D-lEX3~C z@(Nn2wT02S&9&JKj9EKALR4Qpc(rl($B$nX5ea~D`4>QSmmzL6nI(KfGO+>Y!sN5{ zJl<^B7scoowRu|X+(ev;I~Y_njuSw!_@s`69?EpcmQYO{M98yCJOL-h5+)}>Q{Jv} zc8+K>QggDZR7K&&oeuZ&5#)I)0R8Olpy4xL4}3`$vZYUiEhLoCipiRbWOyGch5%1Z zsw7@H;%9_JyZ+jE9Az0|P1JaPM@~!kczq>UM1@#|qr(ua$g9{8B8u}&#oRxV*Ji9- z4iQ!yyG0*v#D@T91pwCl>r*=yyL)ofz%HY*ALKZ}9SDSc7A6uC&qqwZLBP^PqZ8o5 z#oxUXicl||oQ8Fu;@GjqcY-1mAr6#;faO(Ojk}5-s}oX=&JJiy(i zcE81ef7Gv!lJ*9$_~R=vVaMMCi~ArL-1~a9{P%y@@bf>txs;aw z!^GR}KEAW!B%4Rqm}uBqTVS8->hj?1*2eQ~nS`T*y`9~|tp6A5w_d*PnE(&4rV%@* z$4|OoKd$K9@hR{-CZ0grf@Me|l%z{6t(%>mo0({HK7xQis07~C88|+}DS6f~R}35L z^0@`T$Js^xGR>fR3_j&|gZpJdy~&iIjwfJ?q8`t$V(M;BO@|s|2901oU#Gg|JSs6{ zkaG$Q+>3$2m+-z+U8EHYTHz1VrSFJr&{WFW>n0Wre0JK`qm%4(R!8g3?phAkYlqD7 z9MKQ@<#A59*zk#ZGQ*s$EMZosoGg68;+@fA=`Cs%fr@YitrZ=gP=udj zmH`tAm8OeN3vAC~f!*r{pe|MXpBcFMetA;4R00n7{u}u)#;Xk8T=U^+wwWlY2NeQo zgCy6%eazY!orh_A_TZ|sW)B~_2T$sRUoh>bPv67-WAU(r50$QELh86O?Mu9>ugbAM zX+f`&NO^o2H(&;MdJp$@_iGzJ z{`&TtV*iM&RJ)HjB7NzFa_EEX8p1GXu%+CJt)_?xt-QKsw>J%crxpd{M z)QPQ6*#c>jo;eltW;sY!Z`8&$JD!k z)^%s;o=0!_{dS(^RHdp?>8?&?(oL(s+JiUgA(BYXx0QoVy`2))B! z1EKLHvA!xSwapN`T-Wpv$AVTaj{(1*! zFK4Ec^6nPYjp2=JpI-U4voEJcH%b>d)J27nc#Yb9Xdn)0OL^&p*!B&1#rgs*?8#gs zz57mqXa5|*5{@^_dNLv&QI9euaRP)3sv4VulcCF8a!$5kGfKbU5u?agiPh%BN3ofJ zoXZ|UFd!MQXRZo=-Vm}*Y~8iAGsm-+phEr+y9@>RMGNrI3Mx#sd=GKyl5KZJYs!^$ z5Sb2n}x1VHE(jcvh^LAbUH9)`|*Nh&_lHW_u5gg{(JbxPIv$W`=5d+0>bx$BlZV4b3nKpC)%nL z5IHvNGt-inZO3&bq6EF1Ob6&~3g=we`wG3}3K^w=O zBYU8Y#l`8B($}q}<+YWKZ~pM^-@bA6&LSeo^vuBU>>77Z^Y_x=Do%*43XyvMU}tw@ ziI4WyHpA-DwU6Jr)8044!4BCqQv@FY;;VLIXVxl5iFs107u{BS?6D+xYp!(~Lj&zU z=pl7nvT&xe9u9Q#Ki`IL@Q4JtIpKl>W7TeuEWWMl)B@{h)xo&07fuZ3BhPLn+R;QDhdU%K9gGdM$ntkfIKJ$y!;uH9Ic}7F$8i^xX_asKf zAhsmj@3SgRK4U$)XTxG7!JRzE(=1)QcRn!dUAT)>A@(GV*2l z2>ZD^*dgOF(sha;%}WibD%fTBAi8bR{{&w|!ei;3{4kuyW>rM3zb5Lad7<_(6UZL- zVsXx1+3<8z#$cwQs@&nCj96&o*)WoyV$lgRRuM*Q?kU5s!-%SSs^$kEKV1Wx zA|JCh!T!iZYbyl9(^>qKRL+Zip)dN6ew6L>se<;n0&xjXfcfO#qlEjnA?-XLC$Z`)Smwr(pnw;>Ih@T6|56MWZBnuXlB7dz^J zP_);F43oKQ1X0E`y8+`kMnkX-uVMLJ_N5TrxH}efxH;iul?QWMAvP(uAu0^gN=UaS zPa0bUP`{(wnLG5v--z!#OTedOL*ZRAPR*u;x(~hc^i=Yrf&7+?HtJ^A0GqnID@?pf zx@++VMEzG77LDPXdl4iYxDF34Tq|@0_@It7GCzmlhoj;$9t~F#NMl@g<)ffl5-&bs z>#y!29+KkZ5?eZ!XFt7h=i7IG_WB2%bC|>#aI?;h-P%|kLtUFJj4!V4BVz6Ez$u&#Q7ZxbD#PiMY1e9+~ zgb_m^F4%1>8!^E1e@GGI+zaV*0Q4CLl=o5KLKEqsG(HMJp;F7J=1=$?^Y6%z%rfgi zs!Ic5{6keb>;Wxuxs_AaGV(Q1ji_>JHRKV%h$XX=sxO8b5Z7lx*|b{x4LYe00NaUJ z!p2t$PXH002bHgQ#Mw8(6M!xUtEocU8Fh6O_K*5Djrn2Oz`+6gz7alR&~C-Y-W?4n zu=r|(*~*h(k3W{uSmFFW`7h+5=Ba9j8Vfb6#MKQ5&H>$RvYSJ)&_l}iteJwqKaTu@ zT<@}n>uH{Cc-dqDklWWD+ec3?rt?i|EQ%*xfywl{bnG%`fU#e=gD=x_zVAV<;04j{ zo$(ep!VHwtDgHb+j-V^~hocbAA?b*K4mG*OP+SBO=3L!92hao3t(qdO@Il;G+uGK_ zP+ja?uo(-LjBf0?7&w-VM?o?n?hE%gS2KX5ldvg)JXby3%)+QC!zE4%93&QsQDaOv zp=aTj%nkrwL^&ucx-&x&Ld)0uLTPpqfX+=`zuk5Hqi5c|W(}Wqm-UV9ovr1`uC{>@ z8W&5&*|mei=3pCV?U%avjda)o@mZfQ2noI!$ZPxLGK&EJGG>2fn^6)AxFYwtmi~)HLIb6 zjV(e}s%9ON51K=!7j;~;GA~KySJZ7~V{%W}c~4DWZBkE(sj| zGr$9V8BgnL)QE$UViro5yZvd3*f&T$Z`_RU)XUA84VSc>2ueCQZb3!i$WUVMObGMU z?gq6Kw{|<9MDICfO?0kW#yCek#}yZ$Rm$upZWqY`wI*?sm9~eR(_}-j*kvO%rhf43SUD$9yv$c)LP}s zU=fSy3`Q!Bwt(U&hxJtW4wmMum#utTet1iXNR)n(%Wj1?*;%Kq4sJReB3L0rt{EJ0IK|&o5 z-bAoh&~nQe$xj9@3mCJ(4<1UEfv}(nDzmr@qpCaP-~gJkc~sM}2_gwQ=VNyv5qoP` zGeRhK21Hf%Q6(x@LkjwR@~31XL3iP;M&`00uHiT7=i)S=yAuNB*9e>Us(Xy*4n!Tj zJCrLOqBxz2{GlQ>)iUV8+9>>-mo+rxu^+ayk>8GNZXKig@C5<#4 zU4{R7CX2qmfHy~io-BsgeNqO?tMza;thh1JGb2AXJ+C({-TV>&UrU;Znbi@2P;}z= zvTl^rBSoTWm%ZWJ^^xG+L4#@NPL4Kn>o2s(^QUBr@hH|cA&gJys&-R!x3Cn}A5*txeY=klEd8W}fQP}y zFH3-PtXVR8%5~Dnb&M6(AgdLD@pDexCW_Gl>;Nh4c1LsTIn-uHZvL^q=j;FJgKkPW z0+gQ3<}ob}G&f~?14q4E;~Dk?YPnXr7@8e|WV}QbO>%bMUuKjH9|mrs?E#eX zHad<1P&fo&?mrqMJR z9c^urlpvnFnAYV(Q5OwHRT1@EK5iO)mTF44dfa9>AM`ZJogvuC0_o1?f{~9>hN0$D z-DNf`aJTiQ%vdWxX&M^w_G3S%9c&5VozQ+*Z3tiwbeyK+xPe$7>iO&7{hz=)>U!Yd z8L~<0{SY3DqSXVo?)g0JJE=L$p-o5x%Bd1#mHsi@?SQadoYBAwOx$n-)(};CqB$8H z``_6NL9*8g{Hopc3g|tJA>h+!-`AXio$puLXuvfPg-By`zY<6|T2|QNiP8wGYx2M{h>DPuNxoilf zAfAYXzh>o<5wpP%PG(kMrg1cu6pj+)TP&ibm7j}G|WVkq@YTV zbJMxIANO@%YyM;`44Nn{$E*KwZMnF%w^CTyt(Lb}XC~-EU!7gw-8zVOm)23aDmy!S zQ}2KJuody&;dbr1jr#_;{U&wt{=|VS&KLqQ&q-qtHrQng2H_TjNRbKncr3v@MNO2H zi-BSTd@iWCfrvN| zOy3f=PoWQDNSSVCTpSW3Q`8x76@+wnEaIqq+<+bz8;}}##ubdB(uve0#xxRMbQ!Xk zWKSzJjZ)Y|n@x9YYp$*C8rGvgWJm_-UWhTKWGHpA?(t{<+rNfj4$2kI4}M&3_ZZo+ z*jIkps;m;k+1aIX$>-W9elw`;2d=vvMi~n9ZfntB6*1K63^7X1rG&z=K-vPjpH(-9 zWE#MO)E(ZVmI+zu?m7+XgqGw5*&6N;6BB}kN#&}B*7@P5L(q0#HW!=Y7`6fp>OwPr za4)8&ncO&Ua;dijQ4#&bri!j=2UQ(Q?;H(X;Fv9qHtuJ-55jE!;B=u;j>DGRhPWZo zCt)?0v?C*!<-qf?K>}J3ahOzD!>yXC#RLwjXi0cssaS-VVULDmvfb7xPC^>M&$@!JMP|Xfoiq2b--3Id6~vej30G|sh=aKI8Q*~oOlShf9|YdT^3SB zjwl`rwmS1!3Y5)47aK!l@nVB#HYe^gScQPSpDO22XD3e7mr2GE4vpGTIvo@56?#fY zH{mF1BYFf)GyjxK6SK=fXK^4Yrj8@efJ@)`YNKGIS3RM$uFHm^esO1W2r_I~|CCxn_`G37)Po_b}9x+yJ;q z@}r@@AvrQ!o1)M?hFwtMgc^{GQjpCp2Ek3}f#>s@0Vs}(Z>19F9HLEz3J@RES@Dd! zF2X`WIS9>0ZBUCp^C!BR;05hSEUe3RA9s{JmgC%phOqyG1)H-C`a!sN0pyp#newol z(;Rec)CkVOJb4nujD1s+xqMsOy?1~1^{m~L?44U$+gQb>L$bNIoL|{QzuMp1q}7}0 zvCmXjOY6JaYy10cjW@d6AKs--E69CFNs50%z%4kUt-#1i2s)P=p$frG-v>|+d62dr zShub;n}lPFKZBvQhj<<5>jK%f;GcaU?giG{h!z$5go0z-U~VFGMq$&S0O)cQ8^^@bOzSJZXJgO9xug0 z$GN4>@OZV6++WIRsre~VGAlV$K_SKv@h%4cKy-N*-?ajU)%|V}h)(C6VHcO#drfui z1Th1RitnF`7!Cc@%MQ^rvJhps;)Y)4YCXDt-#HO?ZdPuc#u^x;aC-JBOtC?tfiDHT zBP8#xZaQ`%_MVvZ%9MNr!s!tYV3p#_2y~u1o)XT8HeM}#7#uAFEU0B=5GSwr4cmIA zCsBEwLlrOoa><6KaP-cZcuoL%k?vY)OmgGXgA=zOwp^=uG#f8JwM3i!^2+*3X#YN)#47MAf=vEnj2;_!0{pQ$yBsO z6iMdK^MvvBiIwqe122*BR~q|7PGHFJh#_zaq3|DY&#^!-AL5~E@`%t8my9=nb=r;NnPmPL zXh&vIQK=RgM!PV_%!|OBj8Hb}QgqY0&PwMu^MH#vZNFt-FC1oObt7Y`of+Yeq zZit#J^#dX|GsL)nGP#lG3^iOR&c^^_Id*3&WgWb)!4MeZ6+EHKswJ3F97$!mnshe@ zMV&0P=VU-GTnGxJPrNpSwL@>s$MqS6{o+`XEgDV&V`1+cxJo`;;w0mSqNVT!(Q@ zPdMwD)u{?+g&F+tFcEbjAnc59G$V%2z&_v?0mtk($+JC_3B_y=W!J8?PzP@(Y#3$d z;y7bepd?Tk;srq)dDLuDZ!C+K2CZXy3Oq&j1KF0c6L2II9I}e%h4FJd!?w&jT#oZ3 z@DgSd!AhV`F`E?ql?g6&rpJ}y$+^if#T+iQ#<#u;aKVr&j8EZv(31v`tJ^g!=yXpf zwP8Xw?Q4KAI%qUv^TWyZPDvKcoO}VzNvP<^xg-6B7_>sL{=Wzt8SLIiB^?FB2+rdQ z>6HNQn9rVCzSH49byTCtV}GEVCoS#Q>(B~7Ppg>6i;hD(*<5o)DpgB8rj3oTxr59jy=x5zV**BAg!+eIj(Kv-zG;IELG zjWJA{;nwt3Nhm|0PL?kPga_8k?-ZGX;GZ(*`V78QR>qFy$ENaAcdyNrUds*?msXJo z>F8Oeh+hIBtDCDEtBb{s{KDKS1&qz@>UvLkb7p^MySn)NXAd8=J`5thNebVCW`co3 z(tsrQt6{PLtsba1R8E*&EVz~9$#lS(k7c;1xDxP^ptlhw@)B%}U8amMYbi+sI?wpT zctp59X%-3A3FVMLWfyrm6a=dwG5Rd;Q^+Sc^XVasL-~04xP+U(;*BCmkm?WD(%A8H zTIYGtU}>pSmUD!>0M;~*AdVugKE6;6JBVH|17=&EpD`dDdg{ucFj{DI5`?F7-pYY_ zyEX)#E%Dwj1xS}6AOzm+@((Z$J9b!06_|$(Lpe74t0?EIgjdl;bjNPNv(Z|DrXGRh z14dXy;Y|pqoeODAN58Q)iI}m3Y6N&wLS&99r4W|Q;CfC7m{8C`5Xtma82zqOE!M5Z zYV9y}nn4B}d)x%aD|tbQ7g~ex#=>KO99^3a;`<4U2IG5|^bS(VvE?1U0n70VV5>SN zgxxdP-^Vyf2Y@Q5J8>Rrp*g0X3s^OKR0|;uz_)^1k?Cb=pN|JuIC|z z1jwezG-k4E3+%^(4GiKJ*TZ!xAXeCpWLbL8I01&qfEocZ&pA8?6i*#Lnmo?bP)uL- zVAg^6IvtNmwaq{X(>RGu!-V(j>{u9H!?NnQzlP2}4kVpn6|9Cewi&bIDAXs*3L(fI%6jD^I9HLljm@r|vJaEgk$ngCOexqw`LW5!__>o$X;F%acARTCL1! zP-6&NR+!-2_?SNw;w)z4AM(yIb4I8KcZ3!P<*E?KK_ZnR)t08krp_1tyK9i&{N%jn%wLs06V=WL7 zu$|(24~1m^pxICz!gacA&82H)yxoLs%a^R!p=}2US3~5kR{!|&YYz@e8$vO5X@EXIf0V!nAdp*z}Qqo8g8bHn>H)}Y3&A^`jK~3EA zbL{Lb4{=|G(}1Ute+roJ_n=DX^|Wvp&*A5H=m;opq`5KJR*Tir)9BdXoMH1+%2Bew zS|1yv28TX)``&-pTrZU9RKQz8>c76ZMsp5Ka${#>V<&Zd(m}lSS>}WFa=f>G{msv> zv!a>JjCf+Oive$xrHB_C-tF$L_FSgd85U0N-H%gX3Q97A;4n|S!8sT>V|}=ckUO#k z$pSE>a8F-6*@{jAm3cBmwwY1g$B)ruj-=P1oQwLGhY*7YsP-HlNc+cFnNH0iIJS~5NlT-09TLcF+lEQ@A zO@4HGQ5NFJADo0VA}CK}KzEh04Jrmei~%A$VS#!=-sm)xL%{t#zfz1x@1q!R4Bx@? zXY;T#2bYq6L=;i(w&~#q;kse8PGk8{QMwVHwFb8lYLEl1Q3G)+29OuL;m* zD7YP!hHe0DrRFSr#7Ja72X)|%*>*w?o@Kb^7eWL?#r$YSZc_CLEpcSw>aNOW+B8foA-|20VkLn4C zdVYmsh>3+3OEOVF4JL>wIYQbfg%a5Zy;VdcYYm7YtfvSby$aL02tw%E(h|HHlu5EZ zy?Dp7{hz*htzmh0xwN{@R08)eF!g~LzPgR2Ev`I?H=?XfZ6}|3YVjbBw_0BP=sW!E z597A~(NhSL1kDOe%d5uAhNEyH(YsZ4_$Daij7$QVS^amj0?Mk91A9n0)r$vnCqsxG zCjCZCLZDA3>Lk=mpC7NYy2JvB@nbxTVBR1eA#vC9U|1VYu#-4*lQ+lY6KTS4*KmU% zCZ|k-)Xe$0Fv-%t6M^-UI+7_CV-%3MOL~;foO(q*x~*U4HbAa z!w`tH`78wN7)U2h+R>~>Om)uvKLh4;dMs`1q>N5R&VW?K?9c!l0cZ!_Z@{zvDFAyL zFbinowZk*FBqad)&|DPzL&9_OgXUM&J*S#D`#Yh{fl<}VN$IDU(ne`=>|ss_)yCsm;IdH@S2Y<5^>6Ih!6Sg+mQ4K3I2J*a zcqlb-n0Eso;dM*8A=m)f$Q&jX8$J}KWge)iLww>!n2bS%hBS^)SA{cv$G;c&&BVkd zo(t7{vOuhIi5;jJJ3YaRCW3MQVH`A8%ZIuBHAA;%I1y> zZ*Gu9K@*|OzyajCPHMpU2)SxDD2MF2s?Iueh4{i17Vk<=Tvp<;{W{$Lb~}L{HPP$t z^kn4S3L^zAq%(trWSS68Mv4yJuV{$;+}q3-4=Og^l_yQe@yDf26+alT7Rqk)T7 zW5y{mx$*|YX!%(rXABOdXr(FCp_Z1oODD{c^#_4#j_2b8e7-*H8LfYOzwU$l{#&v{E%nU%)l`9;C#FQ=yM<-=bI`dO+6&>%)VGVS_GbX%)YwIM+f(On=Iq zvWSl0S@;s41D-7%*(`lf`VCv>fA6N%`k+Ua9JZvkcq0B^wz*np*m zAMR1GeW!Q;iAJlY$sJTW;W!X#q-Zs}I92sH^?&qA0c@`2BE-6fUX87 z)DG}<>Xg=2cT*~XR4Fw+3C-Xhdz%ScSVCOV0+L-i8FioF9)mGK+(klP$7nJZ-_{IJ zkPVYbgOI}+7Uh@;0CXi~Jhxm#PC43JWgA(5Lenv^nc&QbP1ZmGVm=~;YUUHOlal(N z`WM%Su#TgcV%xwKNsWBM7ZY@u&CAb(t>t} z)g_We`X?FVy|G$a!%wzy?fg`-lbag9_0?C`@7--_i66276aLhSZtiJ9MDF8c|4R;L zp1hEKAn%17wtrxfCS)>DnV-L}X`WG=7@EY-I?Jfod}| z8IPTXc-UqvqoSNn_>M3nzDStz`a)j=Rg{z8F~c~K&oX;NT0-4G?`m?Y!lxA#f;{uTZV>j1~q z@MtLM#e3g}2AdSm)lErropaZtA#&T$(8StdEuq>ZB1pxidl z&$e1}JX7ZrW`>}T=_|Rx^3a)K5(Y3SIpa`6#Tq1Ld+MT1L~RXDLvCq{=mL&{lPO9Y zBu|hciTm(Y3wezCopjP1$}aMYxUZhL=5B{Sm%kr@o99jmgg+n1TIR7v9(u({^Y9k2 z;sX#vm(lV>bOO@=>T@%!-ea8?6%Sr%mdIb9&EI|Z+HXJqxPNQsU>m7E0NHpox8ypc zRg^sn=d0U$2M05kKiphf-Ru10H|#gL;S#vy-sK0FwAwp49>`m5viE|JuExC=(#MP` zMuxP(F&rke_Z2TNx(C7oIw=lv_De~#XT-8_*3*h@iRIc&j`)-P$5W>W${_$lq!9Ar z(Vydcfo7ZO%3LK5x4Y{AuS=KSM7oc3{@96Za<%^va{gYEX&rXz}X3wyO4EtXb zI7V0s%PgU2>NK%Gc-$d;13i}AE-^!lTU~I{mM+y`%if`LayOkwDN81LMhE`_Pfkes z(!`JL3yxm^x8E~vJ`6r{io?I5_8-`ynh=|-z&8EM3F5uSzyi{Qe_&V^?Rl%uC z&v2ZMLvO;EJcT&QS$Gn$R}vAROH4+XCT>#J(^ypJ2m~CVgiF-ZiqE|Wb=nw$bTssv zaM={6r5gMUso*+NwodIw1mwrFGh4{~X(V_;QxZYh_C`V~VMq$jrD6tEaNPwk*Agx{ z4J6$W>0zC(FYcj@r>jXroZ&7Wxa2lKGbQ31lPBqCh3{zx%|I`zW_-LKml~V}2bG?@ z5C%*_D2I8%Iy(CX$NR2b{r1zZz8Kx3>b)V5nGH{C7(uP>X5i@i54q zYfeAH6uv4;EcDKy@(wVCHOZd$5 zuwB~cv|_5?g~Au0ddP@}cP$Kzto>5P7~C_APO4MazgXLcTt;hlkA!+5ji2F`B2#s*dJslg5CYwmLs23C&l|w5? z*u-=I%W!lZ;SOb&_ytEt1OeClvz||{p8V|VFFRNEXhWqe$kA1^x(qR)8;0pQi>2-I z#xmJPT<&-a&&T>_pTC%?yA)^shg0X@{_@_v8`tl3bo5V`#z!Uxv0b;e26{2j$5mlL zp@8r1r$21MzWL?S+#-`~=BElHvqi2tFF8kdP!EImIcE@mh%rNSXQ;+0)X6cVMO48t zd+_k`Cdq(TC1bV7)zMfZ%8aL>`=KI~Ia2A|+2Bnu?+eu){`@eX8B6kK_?*tSLo72)t z8AvlU8qZWYQ0ElRy7Zh@bP@Xlt}9Ae;4a9#!X)l)3ak_;2NMQ%(4?orZlnM-qCspk zyO|yt0qz)#r$?@Js9GqM33uW(!Tl5mfYJs_w8{Khqn28_bMYvlY5~l+r`fZZL6cfb z30D0Xl+7Bke2G98I(T5DAeTB1FQ=>9=|0UWA21C)6(^Aef)SF?Gs*mcdVvhhNJ5-W z!mw+0Z*ZPI>vtOPfjGdotG?LJio*U}fBUB&UHPtuj5gaSS12pvk<*d=I_=gIYLt-u9wYChmizRN0?D;r33dV z4gWR_(6EK?v@C5tAeq~EJayhKM}-aAWWX(J_yXZbfVd^`F|t7Hru2#Z2yOrRZW;Aj zPiuUDyLCJC;4opW5~8-f3VVT$IEVW&%pE0_!u(K})3z~Y2p;euMYn@Yms2lOaOrhY zEI)UY=W_jtjs^)-jpKwqBPEYGA5j+P2BB}ja4BmML{7^XB^OyfBikPw_A8*Wir^ zl_&9G!Wp+P1Z~osrE=-a(VfIaImIA7X6xq9cyiMli5k&2*x&x;wg2_gYo9-AE3IiT z-QV9`Uxi$+kj$;H3}hyZJL}5S39x33dmczJ3x^HEiOzZ;@>h4mIrO=hIm*QNE?-R-u^3ri>loV`^ zL8U%{aJ8VcL^+FuhjJZ;rdpIVy&%m<4KM-X=xHbY!UT>~cVrJO3%KBOOhX-J*O0c! zKch&Fo=;PAdMJt{R4O@-^^sQQuTdgV+(X)>S3p|d!^vj?D5QOu2697JL@ob|dG!#> za6Ew!99{^oC&s7eyg{@X)@`HcoetvpFa(Rp2Q8^`*Q#v#g>ciD@-rPd!79wYb|q@Q z*FhTJvRV2OdI|#_-+uVQwGTh|u4}fmvCr{YsqAitkz8a*I|QtKI%BqIbv#(!ijue2 zCpS0P_cXUKGnAX{>Fc_C^Y(J3JeptH+E|&K>qHs3-r8fLMaJkbmG(zBKmX{}-@Wn1 z>uuKWZo zlHl1h!2iKF-%6euQny^iO{Io0_i3_JjCkO%-$O+|GmP*H< z*g~7PsC16#K!oQa!ni$)Ibr)7xbA!(S{k@fgX4%pAp2;fluit5)r@(ky2svZQ4JoE zJJLDu6sdsnAuu+0??AbooDGzJ2vGh%pePY!x&{VLrG+{z77&Oz>R%b@w~tP z1J94nk1!UNG%}$so@~^t2iFH<&26OS;UqK9qd509@WSB$75057QK4bjN6=mG+37bX z%nJ@dmlVr*Mu2nNudmu@0W|^9ypn#ryidYSc+bCgq`qLX3;DhK+r#dp+K@;l zr1+sV1vh*%R!axlAtvPO$hn+T+|w{HlI{5JgOeX!efNu=2`nEww7!t8?=u^1J>ERE zyRm7nozxQJLN&RtvBZ3-t<5z?@f1sIE99#yG!p!G+@b2;!S?*audjXf5US-ixAt2f zzy91We)0QHzGBkEy$83y_~f1UKltS8TOZz}mfsl)H1d+1WGos$&;!xY@Xv54%c-#r zPEFXZo6iR&S_zs0xRXZW(G11KIuLCE5vqmIJ=~yD&7Y0%4!43>Q)k*!9%dCcnUrE* zVe|r@7wUe*x1rl}Xd6e0 zP(5Ef?co=&4C~;~gzAzb+OKI-l8N{QEYHX9Yp3fY)5tO5{Wt!rYlssj=@H` zP=MBE1E@94aG+Cx%(zUb&NA#_pb;?BNeTQLsrW!>h-pZFs-=2Q&Vm2jpwgD!C2x)T z>e6-?(gaJk>I^0bXueb)5yCxBNAFOs@7t>pZ%K{M%;BE4-? z1XX#**g2yyCO(3hr34P`>Qu!% z7Zk`a)&g6gnq6HDhP4CZMz=TpGRF_|WNJJcch zg8c7Pg|zY=ZMy!qIc0{StK}kEj=BwIIepT^JHQ*%JXK))|Dcz_1?t3H@i0mS37>)Q zTzj5&-a?w)jBgC32u=}?oC&`Ra0Mbd5IwZV-7!XW(29yH!s4!zL0jfxK^_q^P`s%c z4?vvxG6Tn9!yy77YvA#)k*f=UHw49(fSrU1tZ9~*|X)1mBXaA zy0aT4C#we}J$qZ*TU*r0car~>pi|vm9_nhPOY#1FJS9CnEfbWB=V#%xlZbma-hcbk zFF$_&gRk#C(#l9hG>oJ1xIV#Y!?jCO5H`kYGy<^-8Z-ioT;Vw59YO%XH0T^a*AbVa ziXYO4c!b`?d?Z~Mp-RBVHN*Jp5@v|VBlvNgzYX(d|2)t0!m*%q_-y0tcP>aB?_#%m z+NKDk4k64fGdO@@u*>D;W%gw!=fk*Qm_)qm$qqYC>vmu*?LTzM*!OZ^d`A&;tjkOk zUIwaZlm(`0b^4L?XE58zF|GVs5$*eRBzu0wy{-K%`r~YJfFE|FN@BhGJ}|#Sl`PWHSSlWI1G*}Af?GR$o}u1+$-aK- z&wZW!`CP|m@11`CyU*UcIk>n`T3uUSqxCzfEAOJCG82n_P!{*nD^%Ip|2}zzO+FiU zZ)Q=8dAR9!nH`@g7H4L?iuRrt`tWGq_~`XlUj691d+lvqSm&rXd1SEWE0vVhgNKvC zWoUqUaY}DPah!KeMt@)xET=!BCHfJm*MgjUewq>QBR zw4ktGD9yUqrFJ|GrTkNu+CR$yRp6o$QMvM{MwIqEasi;9x3kVEc=&$XkCU>4QHHDQ z`mIBZ;;Ys{SP7OvZ*#^kWFU>Gh;2dYF>{1Cpkw(WFdV&LpiX&&mzn7o!z1HUZs4Rk zLdjKMF86Dp5+pZbsyH&awgr_b7Th0o7j0|3ROfOJK7Q}awcEF^e%v{>NFlCN+Bm5G z3&&OE|4W`J$GclFfYK!WClvQlftld3LRUD&e#UT68Xxby{n2l)JoVxqzHDg+{B$26 zvy*tb$>Qf&?oxqU&S@m%@dcoO)L5r&lM{%Js-}WRKY*+f9vgVjdFG=q*5GNNO44Ma z07z4H*s_I0tl2V$Q%M*D)~Eu*HySV2o0kI5DhGZYlg%*YH#3}LVv6H1ub8}Ru9zzk;1bWOm&Ve>zS*eMf; z!v6FSJ~I_au4fT7Xn^Sk-F3yeEesn*PhH5K^Qs4QSRe#*BtFe|K^_7pV%V-N{^m8@ zF_|mU0W|=de_;&gGUE3}P72V6n5dJf zIU8VjvSAw$tqVV*(&XIfUUne4ce#2LI!l3jveul_nUIJYkZu*)t^81}BU-YAh-E_| zV4}XTh@8QU6fzu4KXzUS~mx}Wa z6CkM^aSXKDkwFvNjZ73!vtvlwN&Cze@)a#l`U05B$kfoOgvrW_~f15$fk*68Ym-V*J|*WF>Q-OoCUVHa>7`PgA&1#0WA!yKwSL+ zNSehn4ivd$J75vZ*%86S1WY`&3XzuI_)OS;QNH%S-!GAP)ltznG5|MI;z$Sj$8OtW ze=1?)EJt`~T%cV8&7aE%0p`eshIyZRd#Ig3GZBz1Xf;aUIhtdqR8|$M!&`&N{cyfI zdd_@E90C$P2ND-Y_Zd}M6ju5wS{V7sW@jqE)edGl1F(SiG|<(D6Il*PU4j3Duo`#$ z4N;WWU_+iKj^T!o$VWUVebiU^c!Vs6GtA~Ou0C~B`_d*D*0NY}N|a?G?hW81>l-Fx zO$N^DiqZYt*_G|+Y{`A{*7^6pyFEL4_jb<`_lNU)eS5e1cgYjgy`6&t%)k`S8Cgbf zBqZVwMmj%_3xbb%q^EN?K7H%O%>ooNVdPCTWo8bylIoRXw=&gNQ{aPGz)?&9tEJ z3}xtWpo2msJm_U+v|6}A{NoZr(fwn!2h6(|$+@oTfQ4u@lRwX4z+)y3H8{dcY+-iD zQN2_WW?9D}VW)}{%xBI`p`q)k}ap^d``nk|U0gWoAF@u9bO2YXHkq#z;PzNBc zshg_c?}zvP1UAt;kdb}>c&WrB8)qOt(ELX;^oRp~i`|6$Jq~e~OGGqjc!G;fmTnq} ze;`sy6fi2F5Kx2wrD@-Oyq;mZQU;|-$D1?Py?KZ+=!n3=J15DEd+UjnEcod;2|@vg zhb0t$=Y{t&6?PQ*V? za1_)go(tVK;D#v^1U`S5k^hCy2m}*+!gdu=MP~?=fgOQhx0dr;3Q4XZtDkY|Q#8>q zR+yNZ$8ViDTif8lDJHdKgoQA-^X@p$PftIu=iYm7pa1CYt+B=an~xS&*0{37QnB5QwSArVEjQW(IlRV%0x;7$eoEZ$DI6p&43{F%dX4e2Jf<d~Y*|ede99+Bh-pe>2PwUhJ2v&b4F_E6J zoflS4^e0jRmrybfHd(wuHJp_39G%_@|5^pw=_N?ue^e22c5f3}baHD0 z)b0V>1AI4D|1NFraIN=tw>GVDEth6SZru3jQl|N(Z|=8tB8QVSvLJ`kG@JlDiGu{q z1fe}>o*|5SP^%UB2M9$%)#@MG0>3R_Ns;)DpiTg`s-XakH-vP4v^v%_Htx2Uxj807 z$Xpm?u~eTiYgV&*aqP9)&y1RiyuX;2cl7E5*j(G6AlRYH-eL*fi|B zbylL7`l?~e>}WX@q%2CAcW;AVj{UT!-mr;jzz@kE0qs`urvTnPSZRdsMR^G=E|_i{ z|4kPgpOy3|oc>i3BnK#0AQ^123$-b%?SYU+L1$vS%)h~w;sia(G|7&t&T)b4b|CD* zP5CM5ap>knbabD`pqvNTayku0xhnmczahUwIu6ssxWGhe>ZR8`5?iL30v z#HRa@oym>ZXWUDSyNr4+4lm^adU9>#PmF$?^;92q%K%t3e7-oeo-3X8kRw3cxH*-VZS=uB=hT6Hw~u*m1NH_-*`_hz)_XST?p1hqf9{@FXXKfiL} zy;~2v7N|GPEz^Lwxmv|*7%%njF}urWONSu)GhT8K8w~1v<&7|k?QxV% zoi8EEDs#sr&JPX{41L%wIB__bLL~~Mat`}T+6cR-|;t@#?OQKAM>Cv_EUU@xf z*dvwS*ofE8P@ckIj`x(bieEXvF2HEv2d+2ST4S~>RfDm6C*M8a@aFxluD)zPjpuQ; zneU1#!zGNE-x@OWpx38}JqDLbD|v+4*j>bhnvr2_S|B=72gTGJr7xJNW0GzF%kx+DJq&z!EOD20dI>lB^^^6+`C*oE_j?f%jrfDks9e* zN)5oQJ?cL=Z#Wc|Vs@pmXGGYFR&C>(AXWBCrQZO%PpJtFiZR^;RkhLY6aGUPaV*bN z__>@`ol+lHb8x#5ld%j?yrMbH!GUyff?b~&JK@${!GOCZ)umMR?d@S?eN4ht?{`L< z_9ZI6T9oN&lD3+bM{&#ZL|DTtZSih;ZB;T=j^$0>t8bRs2Z6~N1^J&?%MV^eNXWQN1Vk$#jTLT|~p2B|LUkP0uYH!DEsPm^MZxQp(hQ27L(hB6YXk zefy=i?~i}`%B3%Eef4OP<&<+2QSq|SoyNrO_+L=;kz()~p$hJ3o~eGE<;pO4F(0sUV`TL4L&KM8m8h zHch~cyN&{+@S~Xbs!F!uQCxPLCqC9H_hP*@#E_ zS3;mWMD(|N)Lj&YkK;m^AA%?vdG zwzR4jFg(q%AI%}U`j9vkgFLqHrzyYynskLnA#e$9w`Z| zL3G;RjkeBu_xCwt3CB!~p<3NM+xgjxjlcf#VMmonOdXhS1W6$o{3Wt9PhqH?T8<(j z+tq{l3UUL0DG?B#kqCbp_C}f0h0KhS!&R)-hGqFu#(sHKB|gIko{b zrxAF5zOrzP3&U7$GMj?teq{07C2Anh86K(8Nfvo>1oZsGq#eQi` z09YR$ZS^|%1T$Pg=swuBE}#T!cd%tu>s8JLbTsicfwydm21+fYhHXMWNb# zOd8+#15fi6!7YExZ&Dlx4~g;tQ7gtVtI{y=^DKrWH?o*mQ-UF^QG4QZ_Oj1_ zwllaNqe*5@&&}%1gAb`p_)W$Am}9#8+V8yc+9x;ew2$0)`QpvtYab6Xj%1mZg!Szm zlC7;W2O#GlSG#X(SQQol~*dJq~ zQT{X^lgSa9jkt`GXJj!11DALmV5X{-AWDS49E^yQ^n z?l8paOsdV&2;vBEK5abAp z99h<)!8g?SHBNv}Ybx8Y@C?n*=wcKN6eJ=xlr`|TIou8dcr*KJ1X&rcrHSZhB7`%f z#IKEL^ihWK+6{zUx(rk2)zjQ)o<($qnVCtPu^96Sx#mJjVQ1u?Aj68h2m-@SaR5TR zH9<$Y@_gf?f37n*wA`l57fLHkRsCVVh_r21Sf#&@+G1>1RH@p}@@K*rO^hG@&EHT^ z>j!7d1qtGtoLecZ7cHKC7LMMbVdXGlepcEMGs1{~q0!DMi!z%Sox(y@+;y(UEi?<` zbiB{8t_elR5jB(ztb_5HNz?cqb3pm^OMkrcFgHAX=f#UR^0z5V)w&WSo97Vw&>6{wiN;QI zz<>pD;|DQU*v2dp!StqF9)3%8P}zlUwP^h0B+ZissZfhO1k27oix-at89Ru+5qtSS z^$SQ4L4%OR82E?y3cQ@L@tGf;utM1Zl@X%uK^ltjPJ-!(7@Wv3%4sXZ0U~WuUQvKZ z>kX>7Dh)|65A47e63kec_8?R`M;$F+s?|%H--+tH0w`~rAZm2k+MchiPPHw&2BeVmft?=577*txN z&Q=_u8-O~rOfhRf9mDr^9_H&fr}FXGacGI&7y2Q_j}fF%Vdj}S7!}_Pe3@V^(j_0h zhv7miCg|rE^e7%3o*W(;&>c7p;HC&S2it%yZ}Z(rRZ$UKWRnhHHMGVAYFt`qVU#Vf z$!-P4{Maw3A!{!rflm5!K9nTGxeW$xue2!tyL5g7k(-$QeSmmWt|xl)ypZzk@6~%D zgEXu>oI<^d%*M#73TSusU$n_|Rw`~0v(X6P)I{rimR(?ff}PU%d_oT_wdz{9D`s}` zFFJV{JdDbv(iP_#vH|1K@D&eCG#_qCFareXQHVo$3B@?KnxG%V><*k-y-z>5{GhLJvvqlu zlI}V`6J<&I;L36G9NEnN`a<`k)?BVT%VySv;?msA!YtEEmP*<6GW6pF7rqSL*jz`( zV4KTMEhHq~ZT3ch`>m~b;}lt9kmmRu%5~@0IRO^%hQIvQoz5<*eT0xWdxGzi5wk=O z!gVwnPd?2<8M=1FILRJN#Awci9viFVj}uZsyzv!y2Q|5HoH6u9b;M*QLL?I?Jc~r-@*-$arCKeH5;lO|+PyDt8WG)0S-d9F!5tddyOCJu=QAx`n|ZT{#eE*@6AM zju)1C=yOFn{vjlU!~=c}>M*2&X{_bO&_%2tLBC-cnA_735vW193HR1rlOMGT|aa;h3%ka<2F8?t%&Fg+j{z{WFYFS7%Qd5|12MT;>5bL+#2cg?dFxQ~mqUr`#jB^VboXM55=M6t5h+LN;ev$>o zV<)^=l3%*OISlHJ=K=4`NYfP-x1FIOvxU)6jutbVvp_h(aa#u!3Cx8Rs{9j9Zda%# zy-jK$z@Ds5Vst`{Kuqw1XOT^*Sw(!aCKXbWNOfpHA9o%L)31lsmE+lDrpYote~$)$ zrbY&K#d1a|}A2{MtP`=Qxc#%8|Lyfe3bU zv(W+@C1;tV&+1@K11d1_229EH zCx~_l(gz(pL}CpOcJJ(Bl(6WRqC8ddsv(&Fa|q-qwh!@@lWp=zLu>Iq(_0PPdnr}f z3}Ci>CkeYh(!Dn9{y^){CQ)5DOIy_hZXJm=7ZgZ5Yue@+Z)Ou@rT||M43a40CAcG+ zl<-a6;;}QFV1-dlI~E=Y$c#8c>Zo?q;m@J|oU}jH0Y4F_uoO8(+_C|!6DWrAR1tPT;Et@B*b`OZ;z_p$-TAJ&2_X9I*~oD>-17ocg~AsLiOGr z5MDQ>v>nlTVwueg>r5D1Ssd>C@};NV#;Y52^EmrUzRh9C(=e1OKghI6rgAc-j36;J z%QPsyTP*0b=@gjKGkO-RaUO{xkWS}IRJ%~CM9-x09Y>~!VRsttsl${Ji0u9e@Xym#c> z;G<2XXU9racj~B1{W!of!Bfs0U7*Z>583u2#h}J{rkWIn@XOh{Ta%@=Jp?(hOcJLt zEXlnBjsUZG0#2y~je|3o^TTu)Agx)E+C<*0u~y^T&{iz;{yDsh;TT8Gml z#c#a7e!zMY>L;mY2Tg-*2;FqH!)98ej*j$bCrU@3?oW={>odlRrn zAr?!{Dg4>ALm-e^u$v|bB6uh%O|csX5N9A24wPyPEj&w0hip{lVa3`z$plL?ML^0i z&6F~rt4d(52zFG`#4n|XfZudVC8uC2HU&zj02C@8)viklAZfBl&~-Nv5bJ6uNO#oo zCv^0Hxe$(t$Qd|>$VRuY8mI%w1XV(x%SG7}$hFpb4aUIvU50y@!EpYDVvCO&(jmbf z`pya6Lj{HGhmUB{R%iFzL_eJ#%+m$O0vRvw(lQ|!Aa6{qFl2`+HZ~W; zzJ@(xv7VNlCwY&Ei~u3u=jt755Q7@E= zO2wNW++}a)Za2xI2(P8m9W6BCH${$Skkyk6lfsmU4&zx%vN`L-RYv0nFk6u;2Ou8; zv=!F9tZ|y(RaOpnZg0+)rGBQPaT+bDwa{{G*c_x$?owj8>P_($Ij1D z)g1p97#t8*GR^{PeO3&^xGOqq+FGObYG*Sj26FsB z(rYUdog3T2hoCrv0(V9Xs~?gW1`c5k*q9B?LIaiTS>_`Uk_=P|7*q?HN!|I|5c$y@ zdj|`wFwkQGh65y+`!Ph91fQ@c*W3BcH_l z(8X~P9DZR7d|YfyYbr41mxJ0xa)`(oTyL7!HP%8?_%x_33(nf%^#_?99z{UbkHPR$ z-bdenVwe$9>4PVSGGTCIr2P_Ggy+Lb>Qs*^^(Kj-u#$2Mbbiu8qH>g$s;VOVzwmJ- z%;AZFIe(7iWI|~rHiT*xoANc`8>w8aWPQk6Vor!y&QrF{8*}=RKq5Veq~98kISg@j zRSDnBhv#-zL;G;0)XYk`$qChA)sF#y)(rLotZ-I5&D=6$w$r9~5;!f%7ktD4d^CDm z0m_&{aR4Mz-E%>RIbTgXXs_=wNXPB9aEqwx1Wa4859qhGSKDgI66*u+h~3Ywl%XH5 zua{*at}SCeAfsSuj|*v^Wj_jrs=Gd0928IvdXS%WmrY;aV4fj8>K}CQVCrR#8Gosd zS8}O~$#%V8zV+p!k$it)bgsl?JJv5<7%lWZ?CT$61xt6=z{Gr5;TvzAFSdRA&L2N( zy+ed=?;f6*LcNVwjx&-5e{qRI?%HN@VP|%E39&C2S3-zkb+3FNnf?jxi^L!vlql&6V}}o^M{ty!5DV$Ol&C zI1Dcd^BuswV@hBcXe9dRl=B$+AjrKSXdyOsj5VOhP0ts@{%MfDpE3_JfBVE8mR4Q- zIr$%PAz+=FyWAP1b1xAG$LIK-;QvJHi0}BQUgJ$mO&#|5V#uv zHGw+t4g@+@eiM})(Ljt=^dNLwKnx=W_*E+6LQrM>A~N{tYLx;`Qux2NUBCth7|K4e%j&Nu?jR5nqlQKpV*rM@+BF1zb<| zR~FCvncO?cU|bAybY`+moQV}#+WVLf+}oR*$X|c=!#kZLxrxP@<)yKK_Um7M``34G zfA;Zr_eg~w-s;cK6ph#9aLb*az5mu9uHC=h-HIewKoxUDC4qcvqg2|gBw#kVyk1%{ zzQdDu)B+RE;XRCW(bjP*ibQg-z2k-EVu{UwQ?;BjwXvg{zC% zK%?7CN}1~J9Y#(+|J&=FlGC;bFkPFOmq^&rM27V5bXau&m|+f@JmT@oFct!^B}X-G zxC;LQiKCWNx)K;k>>ks_1}*oC^R{t5!LKeg<}Y$uVA)bQQM`(o=}I+%hk3=<9U{3c zA4YPxhQ;wRi6KAlLa!5$T>;P$=mnXi%Q!R$(?{FFP@^4}_Mh2fU`GhVnYRogomzL* z(K;#XknY4hHXaiKRzJtq-aZk*kt9)&=c=TG@p2h;?kvfm3wy`0L>g$BzUNQIzNjy8 z2Ntn69(+m_3@uEG#mOkufI@3IATXSOd~kBfbQ#Fd6}7{Pd4n~#C!~264=Y^_X{r~Y z)zxF`=vOnl(jdtvv#ePOkm{V@12#Ix*3ewO%(V(&EqTx72 zDzzEGI?I9Nh7$ESWAMQdM#&Df)X}(vMZhWCeC|SovY$9@N?~sbDGvQv-ps^E4tkS7 zB3^{Mg7@?;V?o+J*d=>&7*V=)ROct57XOiGCOIuG0@*WuP$pp^O|yZZKCru0 z{(&GtfM`Y9XZah;=O{DjrcOa$gD0CpF6Mo{{1h$zV=n}?QdH; zd2yZn1BHo2nusS$t1FY=y!N|SUw`w1&+b3$f`Lylbd-hDEOo?vQ6$F3mDSCJoM!nL zI3{XR9)S4O5@q9^W4lOk^w*K{G4T#vnV3t;rzs!qd?85A2QY}ak_VdAG+8)GV)-0KUQAjY1y z+QRqC2Q-JUO?aw~0e*9tg+l@?BN}AM3{ys~!Cz+CU`}ZR2|1qr$rS!=Poz-o)(kVu zPFHqDr;YLAmTE*yaD^;{k~dSI2&@K4z-)s%KQrzoOlC;p20#pqg|F-Ev>w46=%x$Y znU8F1+5x$mY7dCNqnJ5TC_4zs_D@D-_^I)Ln*14ZrN(TM0nQA^1lnBlGyx2LjtoG? zLdSHoLjv##oUXW0gvg)+UI=`D2~9A$(!r6+Z@>ov3}T7BLV4Io00VY^U&vOsOB2Xq=$3W zflIssOk~_RNE=53!55{kJ!<_A;xI(t9Emg-drzj9#Ev+*i6n=`3;7@udSOUY7vc-V>ofOFq3V>Tg_Gwc%Ks5W*sbH zi>@}L=PMiA1Ydx>UL5NB_~k2qyxp#Tu24g>!xC#wpI#ZC%ys3udijoSUw!4$??3$R z(EwZN*!MU|%wX7RBQ)6Vf_U;d-s7qV<&7{rHc=Sk+=o|?_F}`DovYE)oFU7LN;O5A zox*YrAUqe(%N5*4028LR&8M)q&6TFSaw3n7OWh(3z)_&W6|5V(fd+q%ks0u6)x^q- z^oENF+-4BgfG94EIBux&UKO7a>YTPvRpc!WC~eI)KpleLLiqS`I5x*S45jT9!**7Q zTMczKO4~_N#!@GKYY7bcky0>d$ zmfM8S_9cqhgj7WfUcxYST0Dw;S%Q@^$q0(+Nt;q29dhOc#?|=B=7oRkL@$KD*54&=s^Kt3Vi>xYN zntAl%nHOJs?U}dV{OZnkePoJbMW#K`C_)@A&JaL$R(Cg$EsmGhRv-}6J9g4`U2a)z zg)yMy6f~4_iFW}oSXRA27ulc|T#FD#Wp$gd_QdYy;&Atkx6i+H{UIHE7WD=OduMi$ z{eHeum?}*((wOP21MG+^eA?dq@uLz@othT8klu;W>UahK*UKZQTE`QOrgwbn)u~1v zV5q^o%@tIuRiu*Q2`w7@2)rSlKZZ326^`bwnP~bMT5RE3L9Q4YAw6e$hV)@={fIv> zR+3d((o!=yy%@pTEFG2Y!grOF9sC513bF<4fzV6xs#lJQz|^EOPJjT&OfsuU^ycGd z{!{Y5;R9^~@FCN4usb78NZu?|LsXWD`?l_t(Y6UiYJ^rxA!=*Uu4+WrQo41ks;jE&k*ab%RP}%C=llE1x946vwq;qi zO6Pyh_k7Ryd=DP4Y@kV;A%y_11M@b`<_sS}EEBbw?VZ8}${+}uBm&Sj;p``elAX;| zdZA-}$y&sdVji{qho(!U(2}B1H}PF`GLZ}fHyU>MBA7y?%WU~0(?j#$H-%`4!A-!~ z_)9@SzRG-UBca{U+QMvGapFH_I-I=-%3nNq9b9}effG>b@vgimr{M62!5Pc`xO1<%Q(sGpdEhXg z=gP`-ifa6NTh|2H@((Z1&p?&0rV91c)8S1%EnVUxDTmIGd`Y1u2Lmnm0x&Bvz&PUU zGN{u{C^l;7-Uw1xMC(mO|%uW&!nt?t`OG-uMF6bqnQ`S|JBeC zh+lYj-ILJ>kirJlfte4hSDNby#mI)o*T_Jtd5~Dfl5&(#+}gygmFkxWY=1|hH=Dri zr-374C747wPC5o$*s_oi<08zD*CwEopBpw;>GwEbT4NK%BT{?+Yf~g!^!LEk8G_Vw zT!uR~VXU1!YyO;+LqY_6Q~SNJ#PcD|w60DuT@u13gq`(Ql^_f~Z5Bd^S(F?8N%pL# zghH-hPN^I%r6kW#WIwzUm|sp*kpZ|%w;m4rLxI^lcYpls^DCc!dgbyLpWV1~r*H87 z7_y0dcw{&JUNT>JI`F~gpS*eLi;q6|@!tK#1)xY03t*HGlC@$YFK2TL=Rz0yfV})mtH3=gQ6SF zO6FjDY4Fk;w}$=8l(uc0t9EK_eAM!(S}l*-F86AT76e3*ZtSeAt?%RO#5DnVViLo^ z;1@~BT2}Y$i!k9Koal|2gfC?5P6KW!Z|pPx`GRR zAYjN)=?cLTY+;kPHp9fOp0?-BoCL-qj&(+hT&&PiD3dRBVcbi_kZVnvJ2EQCHEB?T znm3lETrSQ3!TqnAg76k_#i7B=mPa=?r5UY}(RHK4Q4T&7QEk3+JxNu-`z5w#by_u6+L0?Yo2TJb5%czOb8sXyDFaGV6c&%IELD`oY!f-(CCl z-rcD=up)UEPa{ai^hFk;XP%5rjLnTadhpAQk6-njy1kIh%Q5v8bk4;p6^}U9N)QH= zI$Z}YW~f*00Y8v+ZDRTafCTQ%ghlxcB3bKG%~~P7xB2jW-iA+1e%`0?+_BAT@9ahX3Pb$S)%%f~CjTwE@9prD=LS^>BEkl6sBu z$jnqozyz=dy&YWo{)q%E4Dpi6a(i&k@oDvdJ-xC{JB8;6FJ;R!&P+$+dUQ6-MGs=cmV3S|gllg9*R1EoJ(D$4SF z6y|hh?#ymHhf^n5Ivv04`{2sQAAj-P4-W^2CKnQ+66PEuGgE5 zN-nlFbj|nG(`i7x3fkIEgL3QEX9mj_(rB0SR#Io=PM350={SC8vMM4-api~z7Q3Ny zJ8V>djR{(k5OIvW9@60$gc^hAWFmzZoZ*1INbZD_u#=sHFv;@3O`PHVkS*^isVj&# ziDBrbbtia={vyR5u3>@U3W;Jltn|@hDI*fbD)4OZlYcedkg!5f;+UDf87x7j1@Nll z6?U*qLzgx`|AQOky*qi$EOBuBF$R9LhY}bW%e3cFEm%Qr{*6EuSIlz*ATE)O1&C!o ziCwh-u?4WOPzxPOEyO2|FUbXP0_f9lTv9Y>Of6Vp8Z5CBV!Pjh52lm>$w-oV0mRg7 z(4)u;KsbRL#v0Kvi=OP5zyzq%KVu@ewssSUt?QSTpP1GyD7_0 z=5?omzY@DuL<`g7+4(+!XV$k%?-n)ig)M5;@~P01uY6aZ$hbNXTv^{Z!1SS#Tm5z$ zG$}dF{{Wo|yHw1U>Y0^XDg^N$@rVw_pzGvluMT;^NsyN@x8?^C6!Dm)`=~NOO&RM= zjj9BUIRkU>SJEtVLYn`Gcw?#4a5}WaqSS>P^^HsdPr<&8J_W|RP%k>5OjtFEVVA?q zZj1ksgPrzqHEv3=`et@WgdXyI{|7z?HFAH?&kbSBM5EU*I&!gwUIu2Pb3Qr%b0k0} z8w(C+_*?L{I11Wc9x0hx*@d=o{*!O2lj>ksD%lCM>V`XZHnb^D48jc)xE`kl?`y5S zL(~d8(8bXni$@cVplL!}sL?as)e?Rw=Vm=Erk^frauQV#+0vW{a2Aehh+){Z`MHY* za|l2PK^W17V6pV(?|@@yZ6MMJSmk2=9-bxrb({>=(luDZp6-Mh7O-~aJHb58%4Iq{ z06o9G94?R-TDr-X-JJjK+ne9t{`uz{KYaho-8)Z5hVDJOKXm_Zp3W`?IqSv!n{BTwdxvU0?>{Nq z>SRFlIrMPaPNjh}2I`tnz@VJ+{Ah7M6G})H$Ho;v|@E(P)3-8R+ zK-(rs5Z|TUFq#czcoJ?Ag@k8yC1R&d0n z&Qpe85#+?|!rW%bX}{j6L;6^S;GL^qT>tUG&$oX3>DOQHJ{)@TWbo1Br;oeFXI6Hs zE;N<(o$Qj^J?!cVA@CwIpYsKvT`q;N`e?B~i z{Dg-dJ!aWqbvWCfgMC(5S7~lO1PRkJA`8{3l5(ZgJ4`2{bYOzO5Qv(o;m--!1=>0Z z`WZT!X6kj`H^D9oe@ath_y)d-2G*b5+qEL@j=4F<1>F;bES4@v;u$6qCOjuDXn_vu znSr`B0v0~4Rbds0Fs0@T=@P6)=0G1tyWqk}DYvrIOP3}WHjxrq5YczJD@b`PRB&iM zro(3_$)|Nho1us|QK}tkhC-ss?4r-(8;p?H$&g?z<=N!H33O|qe!u{QR%;wC@?G6= zV~T)TAn;u=3N0f%AlAkenGUemfX-U@3p2?jLZ@WDHjY~bB^XvrQwswD1O@mxfS4m* za9v8U&cc9FGu;{>K}lUe`Z1O(lmb`peskm7TMzI4diUPL!FxlGoF`p_kH=>Jd}T4Hi7<=q>HAl& z-Manr!;z8E;ROyEvd*gXnnC%FV}hn@xc;)ORAXXXDeUKYeHqrjV!`t=0_F;+M!{tq z11O-z+|rmT(gKemyKy4@yI=%{4`_}YL}@;w&Y?x3C9~}m^LQdjCw1$L`i2Y)5Wokj*&#EI6@3owR$({yL2 z8`O`aH1rZkhj+$@oK}nwl-hum{_&{^XS|b0Wx6(f*3e=^ArY#~ryb>&Nr)Z%d;Bk_0y&w(`-=VzFDfG+s3(yNh2uV`OwVP#Pd!}QdA zhE{=GRIR`#rYG;-z4i00+YcW+eDwG+&DQXUe|%zY?RR`}k{n4+q|*~uu6+B;(D3-< z$K(Fhh2UB+62=Q%OYU-5^MLIrkpx65H)hm%*_8iI9ziF`%*iBR zEg3lnCls@UI~xE|K9(Cft!uWR08$TH)phu=W32aMvBD?88Zwi$8vkOgM58|-4Z?pJ zF;2T#CG-@nGFJ0IfE@felMZ102SQYbz5gB|unld1D}a#ztJmVY+w28M=o_lcMwZsj z&|Xc9tSUzXV7uJL{-Z&Zau=BZm2dMY02`(no3u%4s;t#+7%!y13?Nv9;775x%AH(# zWa1)7FU{$@_y#MlQLdE+5f+d@l|je&4~Ge<@}y52_)vEa$l>=f|!lElx}hKDtj}4m})vH27#}=*iQu>AAq%;$H^BOc#)4r>8#s{Kl=@k4O23KAi{! z_zR_sTn%Rk7G6i!O+RS=liOdMsWwxQSoQ$=4E~Yh9<_HR?gh584Xv#W^-Sgz7IQW) zEa4dnrFQXe0JQZ|Cg%U~@>e5xUrS|!%NhFmc(L5TP2|A;<|&`A=h|Sb0;0CqsmtM- zfjiGW;{rKJD+CRigdd=x;%K>dU_?=pjmF z?}5}IZQAn23ij(uDL^Bwqja+7LY1k#QrifWvhPOftTL5V*tu4>q4NYZp;(uQzW>b3 zKqn`f=AMLT63rl3mBUljXmJ~6g#rNteNvBM7vLIf{wh>qAPFhLESe`Ddlj8DPco#T zSTWo&OPi9V+Xjfbsq;FA&M-`kJ}6NCmBy=$PGODU#9vuHP@x?w>_%S3{ztpwyIV9` z3kxU!#9>i({nK0!96vrr>hzAG5P03R^@|IZ@m*P3?$9NabLN^nZ&f-~yfW4?h`tIy$y6HMh1A*nyGU z-P}#*QJCvUf*YU9xyQ?pE|y!%6dDX&Ux0EEaG8`GgGa1)-Y0$T;FKh7az9(9Fh z>9W!C8UhFkb?K)MZ;oMiA!N@dik?1*3IdDFR=b#*f7AAzy>PeUwsO^aYA-5O86_&Q zi;E8EJOsqb-X0l}Q)zM3wW)3sgsSPP=895`PY6qVj0nw>AWjTc2};;l4kf#gto?Y` zKn4meS;1q{&?MQYCplU~B^%WyZfLjbznO^CT?q%wsS%Y_w($NmhMonL^Y4kufYyB+ zBlBW`nA%; zu_HCEx+7@(Dfv>WN1F6c+jGZAsfL2p5*#+aHdYO&8J2Jea`A2G<8K63db6&#^mlWH zO{r7Ro!2-7`AagF0VV}qEG|tJqqwfIy28mH1rp--ROZIk%qQ{jkgTrPa)ZD&=^TrW5Z%?gE~JPK9dH zT#NdxyDs!Qn!T1yY+87RDP8ItJ-uO?__-P)xGQe9U^n|ab~r(s>w55cGFZ+EAdh}N z12FnZh&4JpjkEd`M*>CUK=@RQdf8Fao|=SNEeTuL`PB@-0v6cLABoie$UdpUBtUCP~cfbsA@`PEqC$90hwL;TddVn(Ekv3q-8=Ad>j6^(wS+)g6Wvn zi4lc8&$x(b5%sPNy5Y!%LZbX6fnBV`b36$B)@-_s<8ziLMx8 zLnr;p-cL6_dH>sQu3h{2F(*`m>xo=sWF`*nuSInqO>n0(o3-7ph5i&d^HomeGGeVz z!WFngDDAbFe@eR8d3Y+Vs|jWbTq-Q{@Hc0P;6gh5^Sk$zH%(Xqjz~PK|2ly9C=~JF zCAL*fcj@zqVlIIuO@LD0`A>M84pged{bV$jiiHyBB#A{EhTHt)Fy-+}h8wk#Z8+2+_6b0yZcG42#D;bsg{E0uV8H57(xEFzgRRz~2CJ>I zMy5)gGWK=;8@~>+Vfy}A&S*g;)H?&_BAu{meI1W*gTD=pd#3F39f7%Bp?WE_r0yNKjkv4%X6uK zA(IiRC`w~=>NMSZ2m2w^9IWoDlyeE$n>q0-x*wfv*V|c4PZ`?&RGds|>O0k)D_Y2r zy5&jD!@+?xgrTQ+QBgjFI>mcY;FZffnJSyNCT}Wtf(uQ=Js&|eMTqK>lsa_ zIi3HHGM^%5mkDc)O_fFEt6*Z42FS!b$yq?ONzQymz@qME1A)KSOqyJx5|4j6As3&2 zEvBEtK%J+NTfY$FBz+R4wgCDGNCHznjvOpiK=D#CnUksqSY+>>Cw&43jrp%ho8(RE zxii^`|EV+KPPwq^@SUpYRD5EN59F>Pi6MDX)=di}#R{7-{4MCVFB76X5L(t1co3Tu zLR|sDg`!3gDGrK2hDDgu)+B_|hh}z44|dRQ=O0};c|8po?zqX-64|KMEG|t?j}MK{ zPQn(gEUt6o_HrUhM5f|HAASAxx8MKz!w=)5Bhgf9dvI_YB^3jW9D^mnf49Dz&$+aq zZdWy3q@uep%_`^>_6=SuSHYn0_q0XohX9(mor#E&^w7z5KzJ5T^XSVSq*lzt9$$Yv z&6B&_E6R*l*$Mt$Y$Fx`%WGT6WiU>w?kwiBvCZ8B8X-PyH9_XP^sU?5v0eK0{eyHI z%-P8!)iB62O*&zTm1`)(rw*KUQPJ^E_#JII~Ug#zPQoY3)pi z-m*83q9vN0UYJ{)S@Nd}j3eKg%xf3Zb$0S?7@cyno?e)lA0MCQXaKY#MjFv~;%vvj zMBM-K<`-ALcrd)MzOa#r58d8iFH6)~-kjwj08cFVd~c|I{%k&3myqo}4N0it5}TM@ z$p#E8XcJEa(-q+@t?LLWE7Oa~G>Nm|7XO-Zq_8BHX7@+04^E54MJpvLmv#?dP0W>e z=r*@lp-7afg>tjF89*4e8&MesEWss52Etp>SZIBhM+dr#3~!<``Ao5ydPZzQh9WiT zMn=Qh`2Ho5t*C0`^P8xZ0hWA)$S$BvsG{uy8Xz7eAdAlI%2CX2REQYnI3zbVZ0Ym} zM7LEGu54ArwIA^L%RkHuzb3R03NQ)y0F;EBrIncmY>>8MwGklcptfYq_Lm?fQLp>w ztQbJEBl0a4BrMSxbRQ#4?PeBWhe%X3+9n;kMB_0y zOPMsT2U& z_uj!2KI~;Ot$%Uq!OOmnA_Zyhksae+nO3%fOl+1{*Rd{|7+Ii+z+A!?^~Id@xnz9p z*Pn1Uy7lWwX!Frm->T6C4QlVCoCoc7qhq#}axvm!w zHCjV?OQ{~B2A%)!#OWQr~e7|_UeYC_9;zqME`?WQjJv1g5%n>5eQD*^4|jfo3L3nA`Kwu6Z52dm z`Gq>QOW1M&8?%*oyus2ctJT>uLOX=?*}9hiAh zwgM=SNTZZ(sx{(%zGZoVeff(=Z6r@XwNZtSdOQKhSizD{iF5h2B>^IyBJQW6#z*dD73Qc$VM5sT@qfv{_BD!9DlY|lRc z4a!lds=aZI;91V&KKu}S_3HCYWnG>5vecq<>Co?@jl5jS?yBaTFh@jd-N-u1BvP?O z2EbD0^>(pD4A5H`1)MNErs^2~Zxg_(?mlXfbRVbq^if>x(*FvMs6$bZo%fcimG!V} zV5>>356*iLd-pB*UF{l@iCCxNDxYdym7toLXNlAkJKH2xfhr|cpd>NN2R^~8rPoXH zQ2wsh)MI&l_$r{>OeCrDQ29cz?PVtU_S$Q!!8I6q*~jr00A0uKp7r@&9bePpWzA`I zvT{cBw5tF?pkQh}iZRCS7IzKcS@xq0x-ze%l5=-|y7SGg+i#yb`+%6GUEvFD+yI=~ zd+;R0Z7$E@$YP_NFBkIA9#z?DHL8Ww#Ep+9GR1PbK=p6(wXODR97!{-eOC88%dB`% zG8j^=Cz)bx&VNY?IUnsgEuX;0(xUl9Xzh(U8jm5kboYJx)qR z6B_H6PMREp9}ZV!g>12PUAqY4mmGIfhM##aX8BZL!|HtyJ7OQ{ex#_U&MV|d1<(6& z?mm!d#l-9OICK&UfTL-y%hrK-c=JnTT?Ma}Pmnb!c&(#@X*%!hQ}X@I%$_ifGqk6Y zF1grH@{;Jgm?3sl(1q$`0nijbN^{FZZnjD}Hb8(QJSJ>y6SJz&;6?mc@UJoQ{#N6=)PK zwGinm5Ys&TyoRVe=!`({98@urA#%|rWq$r4>$)*Y5~pilVdZ3mYoTwfho`3SQK|8e zYY1++7n;28VDe%tiOVq;BKKpvkT8*dNlwZn<8$Brc<;vLp7W0&ix6MrDcA%(jcXM< zL!g99jN-z@RGy^aI>txDl=(vB?j_4d^>TY9MPjGVsq|{wnu!NV+Uh1FVIxxJr9I5` zk_j>dgPVIvADk>fFlQE?+&TX#vU~;spc{+Jw!9=x;P*^~sbqWm5l|4>bQ9wx8g--c zREGror@&>>yYPDHI>M{?jwevD&8=V`4r&&SI`k44z>T?a_h5i--3-vFin?sD!2$DN zz>J^+r>SrB@N!+I?0UK+UC^bW2Jc`sgx15vr{_z7K#S@x0}EbZc14s*<*ck%J7%I1 zDYLYI{Ju?Cddnxms504io5!T>Zwk_*0;QgjS>fF|D-GXankW=@@)lR;&O!ii6-&vA zX6wL%Zgr~#%NP#zsD^oQik=0(fB=2_8HI+328Ky ziS~%uoiM!18ZZKmi~FVPtkmPqd|v5wZhCgH zJ~wf@>+4a3%JhL4>Y@O9i_eSCmYpar=x%b9ZF3{MgX1g;O|z&(HgIU)&xbMH$fs6j zXJZKT>zM=dIi!C>Wp5N7zySJoz7kH{+CRSMnR`HO!n(i0SCUs-Jv^bgzRgF{PVEsu z^}2Vi;SoZbKicfz*rZTlRL|s%%n3mRU&MD!*?lOI%y;5Z)n6w^@BtuR|KU$rRBuNT zOMB0FiQ>;kmPXkE1L%Z<46tfMY0KO-?KLU9PGU7PPIdTrS(r{=mQAh+Rkzry2c1UL z@+3>`%telH0boUusp@-`TUpRy@aWPEk?=%T*rDG^CyU<2*vdoY^Fk<~)p$#-1PdzM z%2)@_V!eSzA0&X)7Ic&GmIK=BC8P|IT9r4Mb@m7;NPN-aJePXLc zTjizD6Gn=tF$W0B6Djc`!h&}5qGrv&y+0L~O)z0XM)N3=D;m;B!00H)TNspGh8)}{P_ zV5&A{`C2LID+*siQ>sUrFEGoZrB?`Y6!$wb_ddQq4#1{?WNg6a$Uof){uM$!7^JNr zdqSJ)LSfj!o{Te?*V3WV-S4K0`C@W$HJ0OPC`H046pg;PO1Ks!U8qfdp0p26(irdVW{mfB|4!N%sWHxwr!5$%md88ywkKd$i5xUU&NeGY-yU>PFnt zr3_sy$_>r7(wW3SX!zFqA3faKOEI3IOJ!!*V>oagS3>h=jy6_Er65P1m)9XgQV_krZC(%kI7EV{o)Z^6y&Jt0N(KPe#H_8ofzGIf?Np&Zc z_+)xUvfG1m>I#R16nl7KcyjHayLJYaB?jTDTxY@!o*T0mrbhWK?|VwBWPwyWkc zfu)kc%c!!8nh5yK>*W-C0X5_{WAE;!x(@{Q6lcC=5j*Z;j{-$Io7@{VN7NW$L1gSk ztynKxRyfY`&PX*GN6X>?wJr?1JJ*TW(q8Bn)uYfNS&}Y0L|M9lQ@l77T;Lv9UUm}w zoC@ZP!dC(9@q3$$9QC9Uhk8fKu8a62V@u)aN~-0)&~B2EoL0HiN(ZX| z4KCEWP_^{feIP$5=#?K|x%TPZr;7)gwvd~oi&Sn`?UcVpXX|kx=N>DSnTNFlcZ#q< zEO|1#Mn2Gf=Dv&$fs5ia-=-vxN|`Q_%=l)4jdb}9H^`~t;M4WHAKe)77AN?mA-YI7 zYSpl^UK)BZEo&U@MIggcW!>D|LA%D`s)PMZy`D=17Q#915Vi{fvPov$Etys)29g?T z6J$msga`vF#+*(;-rFnAj)=2)BHaL+UBEztVHjb`K8I_Y>?Z+wWgLlLgO}YBWHzgn zp}s1!S?w}LBd%e}WjCU-`gi)3>7BI(;Ban$(4;maOC_cxt8f`*n^uJS>M7CHmUyuy zIZ!XJpk@%3wxpQn^dRKtMS96VJkSX=m)R6X9E3p~U*XpBG1j|8S~Emkd0Ul%dPW@Z za7uj-#E0kcGo)eQB6D~~q-Cz$%UmQHD3)1Dv@73xk zg1K=?r^sdmnSjBNQW-osZIEE#0@Ts8e|Bbk_{q3`Jr&!}kbqun=i^2CVj9t=lgObS zrRI_NJDozNo$Jk{wnlGV`?7l^1)J^U&J@Z;c{>tsybKsi)AM!Kqiq6h7R_XJ#pmNx zbstQPq!j$-faEUn%#*;603)CEGH1-H9v6Pk2cpYRNhp=_sp#abH-DL$lY&I9n0huu zVQoj2#s`17x3Curh4%KO9NV%(ugNekV#>k6L8VnlZ7niZZ@8^8$(Ws-el8-T)fKhq z9Gn8S5of8?0Zwc&rq)7s?*6g37ITma2CTI%(TsM$U4MbUFbrXXSWa2ZBN{bG7RGP7 z&$&fvBCQr~AO_MY+)65tS<;;36CK*v(1<4Vr$krQ+*$xwV{KtSNB(0l={i_jMxf4d z3e#W^hlt5FKa|zKz?=ASw{~dk{>gDYJnOuYoxE(uZ-R>*Xe90fDswz27KxWV)Mwow3>+RF>7Lc6l)_)ksF_{WEaCZ~ei*#d|1 z-1A(rishP(GCeHrRfuAVmj(`C1MQ-?y<{l3Hgo^>ax!yKB1Rxwxs-*Jk%$qm8Fp=W z{-DiNO?!7-r#aCZqR;E*`b53`8;t{t1>@I zhJ!A#L4gDh@*4)I?-=d(iYNwUqWN`^J(Xe0Yaqm)!Ip&r*CMG)`4Fy+Q zK(;0PjA&ayWAL3)eu3>hs}oi`qdsQUr$~jOK^TZ=i>5u(gSrbJ4#7Nksoz{|#YSUw zZ9pi7;;5eAd}p18P_}7V`Q<7z>5FO%yx$`=2&$p2=Cz|)cymp{h>6kZ>CwUA*`?i7 z1rDUN8p-F_pn~5hl8t~H+|+3kKWg-=aMPjHnTJDxom7e2#K)M=@nfNoYv=nl0tD>R zD)7EMUdPZtazI^@?yN^?hz{n(B?0i^+cpA_Kqx|v>fZ^&sR%MM8zPgM$p^ZMZR z8&kYM=-1uli&Xvq$NPwVZ#4`+x3_nIa(VL@O)9%w^aXb8#ZWBYs^l{4`sTD>iz!|_ z#_YsLt9?jpb+TCFB;Hg7C8$`W(UvWgAd4m_O=&oIrKmI(xTK%DfYq-OH~(}HWhY-; zp*2sQ%_@SATdOkZ`lD75@@A2%<^1oaVkW7SoW4}gYNQeFQ3MI_L)*~=nB=I7fKtwi zBWZg#qz?5%jd#$51a_obu-1&7wPDQInHR|$j<~6F4D}Em3KI!AfxQ_N+f+9j%Hjg4 z26ocW%tk(EvKMT705V!y1heAG5YL`}L72|Kx>Z6$7!0UqmKDkGhTqWc&9V?1rbU6% zD#WZan7~s-UF}infk8lY`VNksvy;ekCnlae_4_yXGgdV{=zC+n06K?$L*Y=b+Abm0 zr01qBaI1W&@gwHaGx38v=f#rNtAq`N5*QDeSq5A^8(69n)JV6BYf(*((KTakAKQaf zl&~;yPX4&UiJ&4KO3(?6&0iHM$Hy`aZDx1s^OFxImgtIkt%Nn!_tOO>$2!+u=@;@D z?#tuANw+S8fbeb%mhJp@7S&FAV;2E7(oKpE3`HS@} zfQq(c(Ab8gv8738muO?d3Jib);iz>+g?}40)7EAL!6j3{b~EcmR+|e>R=!<@c+)6@ zqv_&{{|^&ia_Y`w)S}me_d)Ss0!&ng2`q1kOHC$M(ulc+7hH~aO~hm0q@iHvpmxkl zUF0r{uF05P=t-2m=A5!tk|CwJyFp~gfJJqZP+R2oG7#%!g&0H;kB`oHgKD>wWvGO# zQuQ!*gAlgneTZ#XZULWI&`nyCk#y#)Fh8k_>8MBO@q>_>tAWrunnQUm6O7FH7vJYS zz+-~{D+_*vwIfd-4~Lg4o;-TsN*zRW9W1=#ggU~o z>F&Y#_-=|r&CH?ESkd2>c-K_?pqc8`!8|G-l~IVFp91xdf%;iN1(G?DjxfDZKd-&F z(YtO3jsqmNcK9>sChS57G64EIku#tnjbj_IX(VGNWV(CMYX8xgy=T-=kQrZtXw>ljO=ICOXj^@x;R>Dwv=2NcfV+wc`WCuJiyD z+^u_GzdJZHXa3Qo;q|RJd)e4n6*GIAA-K9iHkH_8a zgkfUaYgd(>y=hpfdnF&Gp`mP@2WI;O6XjkRFVUhe^(nwb2M0eHL;m5NL$N4W-H@Bi}VsRukn^;|>PNGsxalQc*PMSwisSBQvD(Q5A{olyaVkl8) zx2xH?Fi}QHROw*Qm7?gy;Wj(qaoR7bLtwL~sc zaqQ-!h}b3KR!&MDwSib%595Xtc!8S8TO=iu^w z-J84nfx4fJhxLky1k)Hs{sPQMk1=4Nh_d8|RcNtG7*hcz z^kt;*5U~}Kkv5Ll$dX&BAt=-oBI7gZNZL*#q3h8#<>SL`;J@#VxMeRJ+6u=egZ1>4C5jKGRLY0l07u2^j&W??$B} z))eJ`WwNB5!_*X+a0YA=(I z#`q=Ayn$n%5Oz>7t@IBoDKHtf=Eo2?!Jbh^dyydQ!=E_^FVY6U>TZtR`SRN1$R4km zx^ySdp-?v_cMdOWVvC%JNdd0SE=q+IY|7>#41Nkh=5uW6;( zD4l}Dr)XwaI>MrY!RK)&Q!d17<($$1pyh=ob~6;sN`8C(VB^Ox-}UXJ+!IKCT=XKa z7dci6+eBSA^7;d`#m6AH)tSOR<_73hi%=)YmBE{rKYuiZydG87GJ%kiw^6x}-dbMW zOd`r>7nriicM>AFo^1CbAE($N+v+wPGYov3)`!#P94kut{a%7p(h&J7(Tk!m+}%eT z%k7Ei=HMr<-dGQO?VIK@6g`KaLp}wbgp*ab;7le1IsZi>c~G>C)msV zCIeC>@flryL)BS?EST0r9%?Qbi>fsskmxWkh!YUY<|RV-5ZVOVIXRRfou^MwCu%~k zM;~ex;o@=rJe(1JI4ijAcX5xB_0L|j=fQH_{Ds98^wN`)qmS;~e>@ckB@S}+%vPrU zj7d|4S4oatXDs>zfIj?Tol|{$MWK0e{i4!IEdWWJ1+xtNIrmf3%Urv(^@EMo~Xx~~&D=|5wwI2YX|!{Wfe{qAaR zDb0~%M4sAMF+51zP5vud3Tcy}*w~9W$nr>~macyp*j?wP;?bomV}+iAOb!$*73ORI zcY)}bjU%Hb0>vGrLQEILcpU9_@E8+*06}xfkD{w-f-)jqm*M1UPz`@@|C4v9Qf{Da z^V|FhZEy0&$)~oeGkrd|&w9R3td-%~Q59A#R#mp(Q~1~DHmjE~UG2oHL?5M1`eP}Z zZI7|j$`Y^hX;@AP(NmO$z3m|3)UgDO(n-2vV+k~<#o^bL97$&)*BEmVo+49d@5OYJ z_bA8QXD2(VCBdSOyu9-Z+51LzNt5xPU)R zR3D05m>PVz5!hlFOpbS0tjRT{+YnHImQ;U=?^iMzeeb0u3eX-TSk&!KLCYs7g+h zZ@8#r<!z!(mRqCoZJ>fiY#=NDMp9mm&ydW@f=>_sEd6j`}NRxYd=~-vt z6n}saSLcHk&)n=g4@8{CmTBnrgQ1DV4Mdxz2BWTL?kUv2-2Dn<2r&8!tg*!U^4zhS zQ7!OA$}$Oc^B2pKZz?U~QpdoQq$jC3z=+J6f~Kj`GE^$wF;AfRtE~p_M}6jt$Y{&6 z`Jm@X@&9Nap#ZqU_apxzk*DUfT*^fz?|$;Z?Gd^(5llRr+w|5fv**&$_3fm?ZcUQa z8d<^$G|R@YCWmkdUM0!>>O{Jb-%0SwC$aK!qrDU<1?uZqbE>$$U{AKG>i~HbiCC`dWtseWkZs9=EiNC*G$L|3lGYM z4mwF|%o#H0Z^?s-II|4Q?_mDT?Pa+nyhSqjwpqAChiFRm zQJ$002hs-sjnTxJ*4W4OroIDl#)J$P6}=dnC&qdKg9Hr5ujt5e<%{nA3P|UcezrWD7m26wu{ z4{P|s+|Dl!?PQB9%S=%>h8HVD8h9bWgu~7p5~9Vq{#vsFw}^C_QxfgES3r^ z`jt*%1B->PLHszz*Lw&|UObwZ@OqYcYMCU-fIzVemCExhWoDhb2t_y+mIAyaM{6s3 zH{7#_ej`O8zCf-aqsYX)TF&jw4PATp$ESP-_UZsap^ao7{{>tXa>*DO4MQ}wxdfVW z5xTv%)!*Q6m|mZz-ljqa?4pssWXVkp#>E?@p&fm1A2)AB80&DnLoU55LnV0f^2`zf zWEfgA6NM_HMEXO*pz!6zw=O`C};e- z$Zeof{xy|jQY&dNM9@L?6@13O!8xo?b zs<;&To$0@lvTkl-c=*Y~UmuN4lK~+2XziO4s@D^1NG0mkTqcrXV~0Imc^yeue!NvB z=1LWs4&1Wb@`<`;{Wxh$TB+BvlU&z8B9RJY-D6GQAB-z63;m0VwERphIu$Y^SrCDG z$;w;VezGM}c)(w@hx$$%;bcA#WlY#fVqD547RSH4^yOnNn9`adPLFIQa%^QbXi*Gf z$m5K00Y~Pdox~ku-OQyV3!0T$A@$9J=j4FVL#2Xd$T>%)l2F#3E z63%AgdtA%GVzJ#w2lv)Pn-K>0EC|Uhgs{W)lAT(csReQvL-(oC^l}^Eto?lB$9Nd2 z?Ip#DQg+)l!?mcvz$=C~J`ce|gY$gwgGFp$g%~k2)<<%*elCrt%BX@7yF2rvC`KIs zk^ESBPGf!rAtT>r9pRH|F1nIFCLAiQILNs9c22#=NgX)YT%}>4#=#ToKqv!I1)}+W zj$f+z0O>-&gmFxu^*~p*dP3BLsftj6x;tlcK5=2*UHs6?n`YcWN+X$4n?(V_1ETCz zj+2UA4GVcs6?Mu-?0vwzZF+WMc!V zAiw)gRF-Y`WV>d#mlDy|M9n~tN_4=%kmp+X4tA7lS=VJ9p`(OV9_G0szFP1KX1FoX zlBWUmjNlO|jR{#VXg3C;JB7io6pw%plp%bbT?V|xd}?{@mrt)f^7B|J=z=?2(QLsf z_cMUy{WxC>=hrW6hR_Strl@;41%4?ti|MiVuP;RW?_Sw2QHJSCqR5qw5nS?^*p0j= zy}HIn)Me(+O`}a6Y2F7%<9XXm_yJ(l%jkv6-fE4Mt01X3)y}smjVXi2913kVGZE#eUil59N{jkP?&b-e&QU zc%#SNz-gDU34excr^u6w!L+U*5pvwfn4TFO8M%As;l%pdUK;n3T*a+j;$CYk%HTDZ z4wKgKbc1|BvrrzD zM*Rc|IR7gs%ee>ZhK{G~UqP7^uMztx;^@q@(t5>6* zME2p$kr?moagB>FeJjt3@m`d&3ZOKpR@)csUipevsa3XMn;o#aghe`b45X*1D&G3k zEbsvguLnm$beSDRVvZmakLM%kmQ6!jlVpyP!h7ZLY6ZBEv> zMP0}=N=ZmP=?u9#WavC+^|%rn>5Iz9^tNLGS0N2-MW-yiNAJMz5QStl(J~Oq&$h@WYy+o=Nnor^N&v5zjJSRay`TmE55Lm=2M?cD*r|X2IR{HOtVeL5vwca^PDh@W}XWmbq?Cv>9Rz9IuO3TCH)KNACWb zrilsFR)cO=3H-ViR;sAs)Gz!es-Q>{bT2S>MOJf=1(2(tO$nvi^A1#S&d_(Jdb&mi zj3m9uvKdj;zg#I?vSqZDiTA=YD!HgdNnA+ z)o%&??ny@b^1Nc40gdMb*)r6NE&>kIeq8!F7|8kdrE|0c+NEL53%*3}f~hZ?3miQD zYdnyNXmz9}7NJN$Zqw6#zWMo)WH&i7c>mte^x|5SeM2O-)yUN2udu}QCvpWr8D5za zE$*bsX_ozNX{RYA#}S@0EvjjYK@2<9Ck^G-U;xoUCUZLrTdij#ISG0!QT9C7LUeE% zLeyjM7@HC>?-MrqO4Cg6#b!++mzcTz_!+XWAyl!!xP zCIolaEb(274jR|GQ2KIH^DY8P&(x>D+9NwTE2q?(ny6C6W0>$Sg|@`*s(KP69#0HI ztg=aGiuIYA3F@V$5o%-YMKW0z(StJJ5&U9t`v62~_l?pPQf<4Va zpP6^C(O?=e`pf-$kNg`!Z$qmN}J{NngJm&(k`Ad`qG-o#7FZ}zwGu%M0OV6bs9re7qbcaghNA0)wL zNK#`!bLBO{1)B}-l+1m1_0w<0{nOkma}`+ewB>HSLVFqAW1%%2-`q^*_{SsN&Sn`EBgNEUgdUiB z^W5L5bXY!WJf-Mx*v2AXAiX7LHM#Ul^C|WBAxOZY=M<&(o9T;G5`*TEYMNiyafs$! z_-^=M-d{fo&MB@AnLT)^Nq2Ju^_7}<#pO<$6v1cw(4{1H8C&!=s@ayA|xk&VAt*D$X z7g9;ig0gA_vO@BWwIbQRPK$Yhq{Qf+I!We2S7?S=%`RGe@JI(cR&Hl*_`K!o>K)HC zVg#2B+I@@1mM4?N?Sn#Y$7C%#re8Jqf)#wZ}IOSd!&n`sPytLSKs`6 z)ITeRkPJmIDM7X1=CD7L-)0Z7NQ!HxFJeSRrwW4N!)D`1dlBBNjdXU8O9|#B`t3j8 zL4*|Npl&(KO5h%$sd&mGPspYA!GA{nrhr0KX&l3R;4Q5c+Z7a)qIu};#BvFB!O)Vk z+ifpYnj*v?F;oD5!)@R|%cX373SzXo=5<)fRFq$3P{X z3#qZs1{`1SSKG;KwPhuUAr1dT5}l+BqREE2VL!QOkAemtDXj{{Z%J+Z(7?VP@~$VoIskYp+6 z;9P8f2V+2BIvt;!M2V*D_Rgi~?l$HCbeI_(lPS^QAre`W;S9ZlaolMz9u{{YMqJa4Nl)SO-~LX+TWiG~n> zg3>l~Bx%4QhbU%;yiMS$MWK^R?mz!rg-*p!EhI`1(;8|9isci4UD0K3eB@5)C81T( ztu7^#RZYt+Gi(y&&m44>Z>Gcr;j;zUp-Jc{Nh_i>e{%FDjlD`}5<>iz-i5Yj zS7%w7ALv6!^TvBp;trZHLl)9&nhyp?JbR9>)dRneqn0gUj%>{}qwJFXQ;Qsi1sF~u7N$Bir*JZ}HT=Wu z29zdnm>DPHaGp(GSDO<+;EK9V-7`*Y=X(v1(tQkH>VpF<6LVFRG?Nv*t7Hb%Uq}US zU-@zZVG>iaRXB;=6#n)U*^{U!m8(pkf!bxp#P?(`$3)_EeonZ17r$Dqds6cd<+@v) zAgGrxbOElzWF#X8shs8+%_2+vdB`F=)k}_3l0vlx|8Pihk^qS>Es4WS7!P%iRwfGC z3-!Kh16ho#>Ym{nNKJaUS_Ve`Zv@=mf~O9(xne3E_u~wj0$iHdJ5(_sY`w8Q$xA{@ zZ~s777ujSWD=O|3gLUy>WCD>89t~kr2Q~FFT`U0gg1{+HZdA^+AS5Amvb^dcDT)m{ z=ze7%Nh4p=D~ixkjx?en&|kB=&`LM)SSteF>J&xe)!R^cLzu3cOpqZMPBmAROydEqtl!$uAAnDt_~KxS3Z`s z`c7$}pq`wsJ<>1qK4`PR;EgJf{A9ZrUiL5T2FHHzAy%UY0>U<(I?gLRv4o!Hy4B+Z zw7z^^1?x&cu)h<=W(O946arM1NK>;-*xP*g@kgIN^@9U7_vi~mDS&989OoD#eMOcQ z(YWK{?WhRn`w~{_HApi|*kb!EAh2@=j|yoB9AHlrboq94CtfJ$ika{ZA|;jwS>fZ* zElc%897UA0indKugTBLVk-p46rgvY!oDgJm#-q}}D@oDRB+zC|1PN#Aw2QubXi2JF zU}f8+y2B%*y_jc^!eb_v%hMTeh2=J_WR}8!FOEk<(1Q2OEJ9*OWfkfHZ;&6j)4fS!%-ahzrD9jAFx~ z*TZ|9;0B3rMCc!-2CWuylw-Ni0_E&1=!CGTm)vsG%ojC!q1mG5l}r+9l34`=pjjw+ zqCMH*(Qf+xO6>d{=v$geK37n;G(kl(AF^876jrLy){~wkLWbO?^deIPg$lpqH3EjK zixY_@NUn$y4T>5Ga!OFjEpg6DCPqMyypvT|%O}oKpj4hlrbs(a@nV74w}d|ySjt_- z*C?>gsRY@5ZxThppcU|~HCb>HaK}bt^)jJ`c$;M)*>o@%f<0!hil~%}K)r6Foe4k3#W zQjXKv;_M`O2Oyqv-(!AD8PpXY0d2RA`bOs|2$KTe8Mkl=du>1b$$Ds=bP(E%f{~#$ zVI+#_%*N={;7^Z#yn1hD8J!0qzOu9)P3BpFmuyeU?mUdVn|_vhhq{+w78GY-$o!eJ zz8vL6%nfhOP=cS~Y9Bkpo}G45U{@<@6Tr=dE{WPi-s?mYFczYTBRPuriag}>Ajsxl zBqPTBqyS0Bjtn%gYon1TeY6bFR-H#PX2M6+>wh73mXG2_o*CRf10yMFy!)oct&o;X zn@oa8MZRPF0UXk=4G-mU0_>hhAgi-{?49TzsAXR_ciIDqDJnAaPWcmbEF-OEFfClH z`s4z8B(FJ*M$z=V0queZB}ZR(gB^jjcEEV6$#Cs=6eucJ5N;jAWQ=f$7i|s#wzX6V zqUW@|Xe8U;fwT40i_?=M_rLz;;Zu5KQAm8l3^h&^u=LHOjTG4Y=dW5*-dptHn%tWG1A)# zLEf{po;#c83y91+8=v|1>eWwge0FHy#6W{G-pO9TNr2du+Np1G@i$ ziyF2m^e|XVI)opnSt-TxyOS3trp8BZUBCHgXlg5FqNG?TwJP=hW|D>c7tUDN4bX-) z5T2UB9DxtX!%Z6y37wbQ*-V!dA6c)-r)N>oMIdvbR;It_vIt)l4d3m&k;ITc3=8HIO?v5s5~#>BJhl#YIv{e=+O9lsvtaxv34Dq(K)+jaq^g zM05TN6iO1&^|`jkQ&){%RQ;1wEj$!_H^UI3#7}sv8{+^`U-nU;NR?{#L(*;hVHm<0 zVh0mqgI2^KYP8!#08QM;tIX@UoW^lgCzU8_k?NlhUA}ZNik(9kp|%npu$_NBf^A+- z17w`k8Jq-=I|-+%Wg=kge$P)ArxO;eTOR)^Xs##tnufN-|J=)26!-h$+@8)KK=6P>>N*xvv!)#6AZSO zOrb>4>2N})fxYtER39WN?8xHz&3-HgE4Fk-VF#au2);S2VeP*Z-6twji}$BzH+0nz zR8~k!Bv07*cxu%%fhU=c;(~0*XRXev7I@?i6WmIRdyU2&$3wG*hVbG><=3Yw%;Tcu z^7p(zVpC06dAyf z{_W%8g{amE4M45bOGt{S-F+68O1IzN!GK?cvpS`6Ki&Xx%R=!9M{%SA(Duu*YK|r! zgD@H0)jO+YRNT0RG0kPfUh3x$K_4-ovz*FV<|m9J6tjTg#LoKm+`_+rGxx8~t?wqX zq&byApg5JJkPj~n-@5r|a*ljO2F0HiY3ojmW9F=0JE=Nmv!~^ZBbjnMriztxqAyaj z_{8bPX`is5*wrf$cK0ualG%K6b?(s*J7w0}2w&i~L|AfdkOHNF0;Nmrovsn`;5YuU zS)}jQMRrq~lz|*)g3vLtVnvcbujd(|zDbMQE_;w|VHlHMp7-{0t#2FLqWQmP1?Jrs z7UcC*0!EfXN>T!Jn>~s$R6YcecU#Lbow(RUSF58$&xsf}vB4`F`r4X?i65c;L?(J5 zxW|hf**0|&J;s$bz;zB0Kv;CJ_}HfyA!gRCjh;;a%{C`ufirqk#lDE$G*BdpJlGXKY#&-(Pp&i zwA~6W5oAmh)b%cbZ;vf38V?eh848%CaTkH4%w(Uu^Nx1y z(7|noHpn*O`ILU3lQrcs&`0saF(9A}L?XY(!M1=MJg#<9i=fnbji|Z2>f3TQ-jr_w zvQCXHFyt0x&vgUHLY--rB-5GkO;fL@UB5f^s(8*nWsX-GMWN(mQ2hL-|#B-GsKpXvsL7T(tB__ zZHZ?D_)JB!Kt{Uz1Nwt6$>q|KP+&K3X>o0K7B*l5ECfQyrgQK@6caW6>7_eEQ~m{V z?y4Q=3vS~A6xmJ4C%6rj_Zrc2fY5`DYB)s*vDDsfjIu`b@Nn5XeH1i7zfE7n*?UoU zwQ`aBH@{uNC`?qd1{LA}+h8E@k3#3@WEuC`%-D;D8kU9!L#-Hu9{|TQ=o)*Tf9gb) z8DUrn!_@Y#@ zfFH|@!vK;_{w=_d7<{9u2dZGy2)jqF;Jdm|rdA?#@KVxn%e>X7#8>6>z(sdXrI^+; zvUf}`7`wFEmpw(;7@~{W7YWG;y{HYbRmeqA%{r~-7x8EN-yj9ejD7Rp(gXm6p> zYma7CPnRkh|Ki1u-QoQK`HL;WnJf*B%`HdQ8uIM5&bs5lujSc}u zS|OCYh)zrOOUcMfNRssZ&nC3IU;`u8f&D;lNI)#s8J;q}V1#%il_b8N!)Y7d*c>A_ zZ&8>@7vdOb#?MJ*LfT@Lkx?>VMIEe`P`onuQnRu1W*mfoIm#Fr##0;&35okpD}Cbb zC~Ls!9x@7enJT8a2AxG_=kI$azeWH8N_o3Awk#S<8p>!D#i zUZvTszkvFYuW~Mnrk36v;Mukbp3Zh5+n`5lWDA60mv$J^Y%}muTVQLctjI;AeBM!~ z%TBQlTWMA$yhTqNc_%o0;N9 zC`u+;sKq&EXhZj~qYoN7P=ElZim7ET_GI=Wn5z;-S_WpzBjk&mgC|8I&Mmw`YJNT` zr6xv9nwpk66h#(*=*W;rb1;~7LP^u9vYEDcF#CB#dB*0$gwTIv3x$m!Lj{W3QS@*_ zgV6D0kJ><`34{5AC*^GpFDVGxI}xS3JQ5X=o_J3A&WMBxW|dAFb((qHK>(=eP5$9| zp?Sc%)3C`DEG*5BYL*eKb@CQl4$siUxH#L}J(MSk81k10lbcZ3**psz(u{&}J@AJo z46|Z_W%2i@KD^rz2yOvBlLQP~Q`5tr{xmc;?hk1h6Xq7{v|?%blb>RRa;s6uLYYDx zJ31kPR{IpGht~lT17@R9Kcj3=#Yjk$uLc4HL$2gl4+m~Qd z|9`ID1vbiiP4g_@jWL0cgoKj|IZ5bdl#^wcNz)8H44Xv)31vI%BBUT8Bv>JVkXV6` zkb;CfYiliADyhaQm1J3#wYFp-;T|_T_N?Vzd&leX)UL zRn*0G`M&)<|F6i&u7ZIWW2(OQ|9>yf`@GL<7XXc=2~EF(<0I949E(yavBo1zQiT3& zb$M-JZc#d_=*XmC0Hwhcd1(czzf^4M;o#_V%7~f8g+=gY=(1pdq|EF>CXyj9xl<3Z zuA5YdBr1n9Ea#&)UdEz3+tx-GU@|ht#`{?Q18M}q-3Bd4Al+3L9+*K5#AHBw!m02% zA{|lyu|bk`VGhg#AjrLdy`e!U$J_jm9FuuGj-ej`-x{omYvIykx#(o#Z}8;IHyeXvg5gEFaEbf}15 zuyU?)jwhs`R4EqT5>6~2N6jo;(kmNHZ)N~QT(H{<%l9rub?|WOF=ThG8aK7d-b8i* zpgqYSG*i+eu}1St4i4#Vg(OnM}>3&&+7*=#U60iFR54!~f^xh>5K} zXGU`nx@e|TTBs2IO)0MagR*CyrISJHf1OW>6Jk64);veX%%m`YT&Og_WLLVviLn#= zoR$^$1lF7dMge3&>MWv@=7`Nw8qm^~iwf*eLa3G(neBcsD3!=yR1IEQ*J-+lOOY&&8lk2x7mDHVl|X=UTIs*E!L zr;+xOU>&EBXs+bbQo-5Bp-QKCFKc6k9w1YMn4zjb;9)fV_KJ@^Vv)l*gd)IuLj}ehlE2}t)`>)Q z>2ctC_>tzMNIRJfj`L-95`x~~PK50^6CkwR8@P`6V2q5&xd`47cmFj9#*m0ijjl{u zH5qGR91^wIBN|X_QGr^Am-4|5(+GMPtRoXdDt&0mO19k9XWO|~cp1WyHP=dKVV=`q z8?|>afS5S6R$EDpaWMW*^$9r_aW%~JG|eeBG?7bCU>Y5%Yqjg}!Le};P=C+$Cy$?v zhodP(7wu##Wac%7dfzGY2=fq|Ou<>qFzQnQN@#;0O{{1pf2^gNGki`UVJ4kNi|F}W zj59$ZT!pTI=E@iPg=JdEbU^u$;~~RlRxO{P#Q5YPtsx9q< zgQyB)sH8+uYXz$XMu;>+#JP5WSScV!W}>mQ~+#?4ZS5LL2^5-i=}r7x8hwT zH^dd46|!Jx(qzUAH6SXou++>V00Oi;(;7P)(EfxqWzBTWlK4`FYgI40+>>LY)`*L} ztM7V8M%cVMKJ4`k4%~hGbYKjsCdcJ1>eNbVx&%ofLm!dMcfYDn^grRtm4N~QW-0|7 zLu#L>??fZ2A>d|=jJk1kt6aA`N(3AVg6fYf1<(QEn`xen3|hQtyMxWBjKL{1A#W@~ zMe8w zMl4f8vT-HO;&LYMsJknQO7k0W0fufx>3St4&e}F zX#OK{(eJ82eiAa)Mq{cZ1uXv(U#m#PU-)Oz3^K&`F&Kd(KCjOUEdp4W9s~d9ao^Jj zV*u-r+|s(NCez?6G-@DniM|Erk=mI2wFbAN4fPXFHG7KzxoL@$?icVfRFD9CwY2uT z5pwfwcuj^<7$~C%I>=vVf03Q%9HD?_P6p*VdO#4L^QPmUO8f-@h(wt~k`=BjabvVv zVr@sqQc9vj!)H%D8m8n{tKToY#lfbS)Iop33LWBsIsP|@#C1Gd;`MYDMt9R15(4hF zV9k*Sk^%u~ZEuId3?nJG6`mj#pkR+Zz+j^VCN@hEXJ4VLRe%2{wWu^!$P5oBLm;qP z_!`#iGbxHf@@qqKFEUh}Jj{xuz2Vc^WHALAS0CK}ic`qpGYbT!OzF`)@p zQ!llfUMHuA<0Ftyoe%BQbo$>-nMO@rCu@-imr?(a8c`=9c!#(g*sO0H74k>A%M9!c zU=58U2R>rlLT5C(u^h=1G85gG#jJ?0ed9X*bmGN}*(ow!%0W3B z?N-MV2Z-XTnwak)rZ~P_g!naog_#_+;bPmsWAO+84qvZf?Pv$h)y8qEgDS9> zOB+M$L;@+%F$0DPnVi78U`m`u4UeO2m+JW!XX$@2=^fR7qZ96&Hb(wUGNTFCJ%AZ! znJpO}M@61S2@7p-l}pZPVLXH1qaeW_(BCjx5n>|RsWxF~5~O5AAV#CNi+r9TOtyk< zty^2~s3i6;(5u9;5K81^Aia0f7$ECY5F(GUXZ{H(jM$=!OZ-H0la7;gNkH$Wkek-j z>WJ4f#AzAw4s&R9aD3LtdqbYS$9?_oaU>C`qyak0a3z^OZC2Bc+J{3x^8VPH3 zXc$Zc)1Xy)5FLIh>Qsv4*QnyzssD~n1NST6FfmY~(IAe9mh_0VQ+7 zJ=Z1sYVa3v-(TS{Oe4W1RdXDgP+=Vy7MPlpMv#oohMESDK2@Eu#z(p=WQf$wY}{es z-j22l`=ygx3m!plV3UnA>k!ZJ8Z;ElzIMarYiGiFN?qZZrfKxcRUjSH$>5yuADau{ z0F3(!?)x6;7FiUoe`IZo>x{q2YIvtT?0~3#$6+8eOGSZJbm)y<^J&( z&l#{~oCu+ zSXxyEf#)(DpDW@#NESE@41PNE%5cZI`vrVPo#xP+b0A;^t~GEA^UEf0aUo2ud4{@B zaq?g1EGRGi&l~_T@Z^nND=#tLL&VVahUuR5jgc2=`Rks zhj0>>_n2pB$b+x&V1Ez7slCJF6H8Pzn#U_uf(Xl7`%syu!c~33jC!@4Ave(>;8v57 zq|@)x709DlBs#ya-JHfgc#F*isNW>B4Xvo~D3EH@ znWU?k>pllhS#yVSl;8md+Si^*6)c(y7IR!E+D{l&LN35Xg%rlsT3+>|Q)T57Y5|oR zogT3&RB=N+GjNξ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 @D2y+m~f|&FjEUk!q)c{wrS{& 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 z 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%0D~Nv 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

=6sBk9lxZ#Cyi&C9{sdyJ>zeJP+E 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

TUnHaOG?k;`ZMs62Yq>es0nko+2g+3Tc4gSLs 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

=r@)g@VJo# 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
+Y)W=o@(6)7@&d#ZsxW>oeG!7<*3R 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
-~t+87e64$p9I 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

R~C6`As7@%&jULCxkP_viu9(M@)f$i4{tt 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

$ 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�J=PINY%7-YaRWb~4dy56p_YwenHtjIZ$ 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

)g6(xiXDI1QAxnOeW2AC>M;s==A7& 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 z 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

ZUQ%x%m#C5 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 z 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 TQyBBG;+IpN(kKn~Ce451%LS2g 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

+=q*R^HgjqLvcaaC(H;} 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%0A(>k>+b~V>7JntlYXsUG!>J<9J!VItUlBrtkLHB5 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%0Ac!*6KHQ_oLl6_24GRF9aJ)P0YVEFX_4(XQ)pr|v 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 ^pd|opJ+iT1fz6cmY3%)< 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 z za$^4C=wQUzB1@5P$2{!nXtdYnr=(}4q@<^3rlc84%8cfgmd=6Vzw3U2wM;80GCSA3 zX66bgge6yI_$U7d zppNAusJ}QpWaLkCUgX3PmPYQOSL=ym@IVFNZ|#vN1GUy@CheP>gSG_4VaZZ4%3odm zIrhqe-C$j=@X!2-P+#%J-_I=hitO&GsUpLsLuzYvxIZvizkm4o%V#l1gnZfZ`k2QC z!d;DJiOJ5fG2Btd+ev*N-;RsCr#JkTq|^N}j<1xxxqWEdX|Hvzjf#Q2+vN!iLUZI8 zO0hx7H|U?^U8ApXp?cgtfQ9xBBV*|>6{J3YWooRwtGk?G4Q%YJeVi9-*p+3U!(wb2 z46v$wW!~*zK^WUns>=-TEp>m9F`@Prdy~16QixnmZFdkq4Kf^?F)!^+mcGILi2!_x zGhFOv+N`7!+ED~GE`@KzF<&!hPjyJcS6Z)X(m*O%Ro))cDN;GD2Kbcavdjw!B*7)1 z<{t^YyzyD#9_m=WC0T|gyPz;E5EeVfRN<7#k>y=LhL18fQ3T5HJ;<$?!Xs{rf8Ce; zt(6&ffBz_6G+dJ_NghuBnB(H;%TG*evA2BA=bK-V@mnruK*-_O_7V^FXM0{|dUv3> z$qqQUf~SAx3CP`o*0r(r?lH0T+1lS*p7wbBvvPV-8XTYQwO#(EyP6dHOR2@y*GE@i z91^x#)BRBw@zmODDM?R${rts~CplSZ*{=)B%T2Nm$7PN@)BO;|@%^^Gbz*zG9LkF3 zQC?oK;0LL5sc{iXGN&u^Z*V)Pki>sY>5wE8i^CL?r4ecwrKHK!a6)56!#rEW^$>-I z*cvtj8?VtoL88D5xuHSj($)A`u_j*nt%kg;x2SOcrn_|`r@8@qL4s;njEK3T$cX9B zbOoiTMD+m0+et!A>-O*c7fGw}xa%QUcXnOnrwp>V$&m@SO#QL&dWyB7nm-z|L;rM~ zXWTRC<>#8`KKsjj(*$WO3&+{`3KEezqP6J2tC^t8asuRFVZW_^m`GkNE3M#Q!pfDE z(Sqc2XFSngFf3nRl~0nFBLm?;XlwhO=c*%z)|xMh$qh_aqnv3$>lHcJ_@E7}5@yZ% zuOut{kz@xaIg9j#DK|ur#j$7t(!_E5@Wd>#exmWg;g`?B!+UI3p7AYjZ!S&`*-b^4 zQidlcojvVNXIFPilPSNv)0+Jo=kv2UU$4E%)-^beJ@4SEx4~xb!gXeXPetI;u15PrZ;yMeT)>zGKH1dDUWY{ zk*}8LJbm=181TT@quN;c(n1TV#a34?lV!$6B$kX~b+h4ZxYuqi$x3@wXlnO-qUFLI zjWk@od=b+K&`Wj=JxzF)v7&f>2FV0QmBTVIHHIdQB-7#L*WgSAT-iAraaz7KQnb-Ix5 z57BvEBWB1iAO8B}L2ByDr!N^PszgcC-%%M$-&X(I9B`p}GX}K?U1dYm!A8M;7!6jO8^o zHDhp9S9fl`ED?vYlbIqES5UvPhJu{TC(R$39_w$){S87ZZ^`R`d+zQZ85^=WmY0o&CVQ82?8D46oi6Hf z(w)Q`aWSz;*PlGsMGr2qc2`M4X2v^O`}=JACr=;i?KQt7R}J`AH)eg)3$k~NbO3{3 z{C0L}4Nnc)s69$cP)pKQxK`8H+-$8YFUT*!WTe$@XMcFtb@HNtmdYYjKou=Rz70__ zQ%;5z8lj_$=o3J%yv}7LFidCZ00ep|;@tn9PzVd20jQc6QiJmUsECDgl7R()pi138 z3RLAD!H?wCf?ow`qM?A4Ylcq$fW10s+M`66nZqJZ5GL0WqF7kAYq+Yy9LoW~1?nL< z8$zLAwA^s(@#@-)$K&&}MwIO$TnC(j zsi}`2rKG)0dG+3EvNj{l9rv4(i(kawNv`Xk4$SO$igWXe@)^#RH|hLJ^B2xpEUFkY zIyKx9>Pnl@Ck z3BXrcN#I^9PoOR?DJsl(dNb-o_wZp}rL7ZZq!Dsk5>z3F1r+c@h=rRQn_FbOucJ$I z+`#p$x35p?Va3AFnfucw$F|d({$@UR!=_IKxJ1zYYSqfeP^m=TqD6k0jfCXaw&q6*+W>29G zt){w3%D|PgKrKZesB`+Xwgqh$2*UO9cL1;F^|3OEPY6D@h8m)%k@+H$LgO2Zbd0%H zE@HD&Eu6gwqD?>6xAuEy*SB}rbxBbyQ)pj4Be=UGA#-lp-QQAIUF#U@?}GJp4fNnx zv4l&rwfz1=-R1V_Nk?0&l_kjT;r5=uwmqx5(Q5DS^v(>>DvF7gUUKTq+qdq=JRY1` z+FafG{N-?KeyYE%+u89x?b++{_O{rlcY`0+Rsz21*`-fnhR)h%y2$HWYjblxr;Wn~ ze|*{GRQ#8Ux&~`aSwVII#!6NTsYfeYbcg!v4V4C#7TJdCxHeZj7IioG8>8?b*%C-)5+M8TN{LPtmP4{mPbg#y& zHK}(WK1_Rd_i096+FOaNW(v*r0X%!VtMKh(%j1@(g3eI^#c`2{IixEbllSInrv)3C##GkCToqM`b&tC zxP;!Y07WcUOWzfyJ-u|IyA_9ik44!+B1^fc66sFRfSF9N{-W#xqTCWgxZc0Bh+dqc zTTwg7Xj=ERK5z_!CCRj;%|JCcoggQspZCCrSV%62E&{YRb!D2LNjB}BB%7xBgj+l`~)ttYBS4A0~@bB4jhQ zZG)4u%R7*nyb1`&yykEKmF3gBi!(kq$`t+x14FEb@9J<3<3G1{u(A5F)$-33iSI|o zMtka8n>zX^h#j31d$WdoitzR(d+*$$GyCb?$e=Dg=JvznijL91;^xXa0e@@WIoOA* zYhCuEyo&dZN0&;R9~bglMjVl7-l`>-dlw1Hj_*)OD)(qbKkprWN096Gut69vL~NnDoP zQ<}cf07?*rW2C$Zw9jOPJzr}uV5YfDzGKC8kP*z%3!=G;xVc@#FL z;laoZ8slbn|*{x#>c)s#Pjt+MA6_EKALGZzs;L%N5 z$n=0Io==!|INF<~wzKK)M#Uu2B)pnu9v>i=>KpXJOnhAP{`(`Hj`uEOsUhv&r3WdQ zud@yLPakEL7%aAijt1PxI@`O3-M*Fejmh`fKsb-dA|%hkbQJ>RNW(j_>mQ^#Rx*D+ zOQB4*9W0Mgdrc5Jqs8J?XKfT2QY^5RDmiG;vC%HX{)Fgy39IJ>=!n)9&2|&PEE+sQ zco@$()-lvjoSpt4=0q2JJ*}9%Vob*0A+?r@wMR@;n+a+(WvunQL@*mAxu#33^<2P+ z1{NE%w}P5z8TRe|Nrco&UO7IFAq$B#Ne~>DMv5Kqv-{(BpN_;@^M}B?09tr1#)+>> zuL!b?JEJ_N875t)^78YtpM(Qos<{R_#P>&E&U>GtDlRfSEz0oR7&ysS4_ z*+r$r*!4GP?MWT>CL@l**3SOXkBj^c6u>lAqbZW1e~xq~-;S?J!7Q>TFimX!dJ;s= z#a1s0S^}>CT0q5zaM(-_Ny-~ko~?p%FXcO@ikcPX-Z(M9Zjindb{ruZ$5;4}9y3?srYE1T9c=k0 zyyKYd`n>3^xBz9=lanL=8l>dT*3Q72YS%|7FrGYmPnqNAnZSY*kVPzZw9gu*lO*{W zKiv#Ky*gV`W8$7Xi2SBY9NnGode=QZ<@WeL;+Z?M@b9fUU37fpdqa9g#-rQ!US?)z z78JZlFD*A1n`=!KW;@j41T@ClhNm1+2j#M&xCGG*`D#TM$*@VWp{)7PWLUTud!5oy zMd*DLLd&XiV^B9s2NFtRRaiKp@gxA0v-M`E`~qzHs! zIE}#t!Jh|$!|RM86Gkhdx#OANr3vNrO$YrE0YDw{M+QEA)ciqTJh`_-Zr`+EJB~L7{Mcnz z0CjzPkQg1UzkHoBI$IsCkFFku@Y@Dm6W-x==j!3e+iX*{wH1!pS`Xjgbo*!7I@0f)^!wPefL-Mm zkhPZa%iwrVn_2(tEe&K&v4MeM*;6vNw7k5w#*on#CNQW#=ez?AOg~oDSjyk&b8=$} z@-ouXUupR_48`S~7@f>STT$a$?R}%(kE@%ztTZ7Y$4a7!-TL{_~V91DIF6SldYQEiewMy@4`_1We_-tKdT7v*2GaFM#H}5Fbh< zz>+YX!0ptn&oqMc*)47&&0F$@{jDvQ6zmA4C1X<*?5E_^=qS~l0cr3YiF?*Ln|)P< zEH^zp`pXgf$UjcG`8)dk3zBQoVIs(HF7AC{G=Im3dH&2UKVaxtJNm1FHo5)2{6`Aq zC%O@7c?o;Bb@zrpt?gFplC3s3$@a<$sLon3>Ed9qU#4fi zdGO1x**WQNGg9wAOG{15H(DF*%{J%QJjdmyTlAK)T7k{Z zs)Y;-ro9W5ToUG5gdbRO7)=-$8?Tt_$g>G8yfm8$FF}ew>6+Gu8h!%k(umyFR;^ys9kEvd`hr>68meBsfm3`FvWv1VkG;3RHMd3P0qe~ z*_TUH#3h{=t+mA{kF_+-NCj;I#0x802~ZNewdk!BXZMd_6wqY z5&poLKSmPpG1MYARJJeqJ}EddO)3S#tA$cJh*mR(20D9DG_nyqKq!$l_TGoOFN!IL znlWU~Q0uzFyrCR77z)_rH$I0ABT2CluS1P7lBQTW^CF~3<`^QoIkWyub_1U4XxH&) zY;0_y&R{-+6Oxlrdd)QQtY%2KdYkj(;tGh~-CSG6>ighmcYTYH$_#yAgc2To*+5sD ztp||0`<;WGF3<8F{gTb?z_YPIa68&-YcRDt$0jCRU4u*8OYhQ(^NVX+ySrN1K4Yia zXom?HX0M-jacNE4yN?d|%g(Yfp<%eSp)mDTc6N0~cLxIWK9|?e+AJ24uCH!rTcN$g zh1mt)V3V1xSms)GtiE~v=d_gPuhZYqxGt?~YGIL}t-(@lY_K_8-kJGNyL$(OE>%Lq z1ketm*|xj0#Vq5}@|+((fen=gs0ss>^#w_~rG^DZVZ#myxipeRpC#~<;bFQ&at*Gc zI?usB3HBvVR;c7_!vALyV7aAApXGMy4goJW7r66I2khjZg`E3>-g%ouWM5-p$vU+@ zskb^#065o{;Rwoa(s72KJ3EFYqcE3_+XZeTe+&w%{ov_iMi%L6ZO;TgurR%^rLEIe6aDDz+slvU54X4X zs&u+nFKT9%R#w&*KTJm~+Rt^r-p>TQberd?8)%^r-B+jj5%gxOC ziAqFXt=2g8k`=hybS)CD&um&#sNuRwbK!8Ys^oy+LpoxXRM(nU1P950)$g$ zb5KxWNNKG#{x>`W@W3VSQSB-T>%8-*=K7YQkL&B3c%pAjV;wuU_ho0=!xBxLCE18T za^rUQ+uOQ&hnNgL!7JM@>1$#TIcuAff zFMRr{$z6hT;k8erKruLuQ%X`re$l=Dem-zF!IYxA>ScXVJSMrh6CXF1vWSE+>+S!o%}lRnMNN;fukIww|nHtU#5 zrZq#E$QKFqR?10&H95FVM987mU`wc3C$Y6bXAPRKGA+f%Q0|O%goT;U;!ku}qwc=Z zS6f?J*>hlL6wadjrmC*ff0gxN;GOc7`c+4UP}%yHMX$Y+jdp za{lw@Z67%N^l5tBiTME}%Mfdv9qb7kW(T3Cv(1T*Pm9y{abe{zvjGBtyVKg##BxHH zXSCnR_|vR~)xH=Y$VM{Hq|a}E7IP)JN$dZs!#V9=`MkoKvB1a0&55_gy;W~BpZ}U! z-ZDKf{3gX<8y=fxh1$mY`W8SXgWg$P7$T-(<|pjyWkQTGKs>PEOHR6qgs}mcDtI zo}F7>Y&1HTw)TYb*xGev7nbH_!Fdy@nUcWDQjI)e;#w@^cc>(aoE+2ESlUoB{G?f; z7>OsDMBrq-hO&wOH(Ip>Sb{b$$@2zXAe!Hc%`3T4;Oopv*N0w6O%}l6Z|do9r#&a_dR${6j?GLoo1S8krbu z_$b3pkafboi_}XLCT*?EP1WNbFN{C@UPZZ#9+Gf^Ob#tgn$B%WB+t|#Hrnn~)a*#& zYg@1-*h-dSiv-$1LNq-+pej7L09zf0^}kzhHz?XHT(OYza1U}22!{sS)c98vbq#f< z28VBbcXxYB1XUZ$OP}zIIam$&W|n5yO(d@CPByUj^pCNbaIn3hch1*mMF3_fXqcE^ z{O?P1@P;EjoFQ1RyT-?ddOr}0J(cOXOQQG}?KA(J z@5Relgfx4x@CYe0cTfegR8lTq@%6bZ9#y~te2Odsid4=r7e&D>r7%~MTY+@#?7tEj z`~P@)7m&95?cFm`W71YzcWvLdm%Z!m-nRdCw||d4oVY#a zoH64$UO$6-C9OR1s>a z;7q%_x7PeJpY==Mq2A5a=J~F*p7pF}k%++af8uxFKT~GQCFQDWuFa7m_bLyYGb2K7 zm*4YCze2svMsaBF!`gEY5F?R(6gc4l6QuUoKkKD2!G#VeQ9<8(+5HB{q5| zb&K0`9R-Ff%~NePRO_28dr3-dd0t5^yAhdTC%EsP%$HgU^DQ}2U0Z>&Vl}8aIB+h$ zq^^ejW^{-~54InQJ))*o3OR%mc5C@q>qu62|?#*|xHO=8;UP-R=_wtlH#`o4*D zoD7&6RsctyTyDE4y^aH?G@gVi5B+`7k>6vW=RH0J9lof%4=gFGfpyJ>c5PW%y0^Hr zf*I?gpqn?=4J|B4LOwBm<$H+`8y-G5LxqHe+<>S_b6wp6Cua=f#MLz6r3WwIb>1P& zfBVU?de8?bhUW$jShc3-FmSRkZ^qk)2KM~Y9v#U@QzyUcJVr(Z> z;3CZo6CPYfnQ2^0i-fcJz+}pA&d>l$WWl^ z7WT4|m+}qJ=hdt@ZV-Y%0xxXhwZia*QgchNLc{xAWm!SG@ySi_{O>x!GmbJf)rdo7 zmAJU|!6`|1iRejcjC>e57s^pAF2&8#P!8J37CO4ZMCFayz%Qy_0C~7{xJbO0S60cw zH#Rj({^ii6<<%8siBfwh@Sc`7h$ao6#KuQ9B}!@Ty+gkXC8w%H#Bp$;SPT>%m_^ zB1mWdCc-*y7}5+>^H&pwpW~80a7uGcC6=8XQ(Fi7dsxyw_dK#c$|9&#*Az)0* zFD)&vEiG>;>o+(7P~~lJ?0ooe;y;TM(HqL~V^qE$mX}u@X3reTrrv?hfluC7&ZX_W zk6%vLX)k{FrrX-Qv*GZ){jJWIe$9)p*!zhl#;gjf$n2)pKb^7f^!Q}w;GmmPWibtr zX=U{d{<}yks!*}nP)fAS8WqEum9m+y{2IJ4tA*<7dF?s$O%&CHBvMU3DQ8=o-x&s^ z88vFtI-51k6xZaU6xQ%Yp}gLk{f&W!KdTXm-k1=*=q_r+v=4Y!+HHkdiE)o)VB@bK z+=7F-B-%9CSf(nL8`5Qx;tavWpR|?TPzaLe9?e{zS4ni)h{L*mo}j`Gg-fT*{%@)_MSS&K?Ja1%5oxM> z8&T8=fmSU98gS*1BD_*psta93{jMtS%6X`?|1KOM903xK6~}EUOJKv9t>TIf@dqMs zhjGKz`0s^NaB~VYC{2FkI$3fW*27w;Jn}oc!?St#@nCLp8@ts{M;P2}9332e*xTJ+ z@WCR?&JVXYVDH{HGBMfL-|ckTt@$aIlqZjq;$NAbzMlMz9W0|06P?v1?1f?UY1B7_ zs`&J9d$KCO#P+t0!p7anA8KY{a%N$w3ljnFVEwZvFOrR!_l(Wc>+8!){f^wI=!)7> z??BJs$kYOZMVnjuVrYwaV{dJ7#DOPUsjaHml97vx$zK@zNP7M(E+MDvU314MGQLTl zIC{-3ZGYnRjR@oX+m&n-BtS~D8Hh+M1Vd`rg(TxU!WS5#QRP2-q)I~sj6q0pc>&Y! z-%;fX+Mv@&zx{-7LAZo(=r;OQK?_^ChN^B+;rM%q58-%W5gSPYNdY1NnI8XqDv)PX zLTETn3o+(X!OIe3ZiFO2`Ij2>1DC%ExN#Esgf%F#_szXeoJ?O?(=kbYcw1<0NrY*1Y#gLlyOEOX= z9N90@)4~r#f+X`)C`I^8LrbZW*h({3dbc7HYcZ((R?10IO@kVig)mZFVUS18mVomb zg{MjvNeLck&^DsFcr1a49yiX5ypn5hO{IAa9ZvVCq|jnce12c|56xr!)0CVd1piEN z&@(S(-4m1;teljb^)-x9P$1lvHLN^H!LzNL6ctKF>9_}}#`*@)Y(fu@Nw5aZECU41 z3i)?n&A+N$+fddYtU`@1lYdL7CWg$-PKjC+xv1=A{6!tXKyD^gJghjF#lM*)kG4M} z!4YY@j5i9Xd1I`b&U-NyEQs;)SUqvCkO%#i1IP{^NL;V2MNPt!t*es_i2N}^fi|B| zb|a{zkq|CfJD2d+g%PS7No$m5Ek#UIfIoBw!M>TEKt1GvYnpm(-8;I?TGLgk-WJ#U z-H(R^NhY|l)tYlV+gdxkQ?t|KZ18rJ3L?OrF~%+eRq4o zV|_|tR(FMh_@=H)kIhV ztgv9>uSq=qp$1b(a5*AW#QzR#9kNsT371r$xg@X(pJ(#oy;heSSLM}@&&+w;gU@t+&5fHHjVULsbZ~m@BOQj2 zv(rQ6^JN! z>d4kWTfiA;*AqzPAKAEqGNY}nwME0)GkVN25bUqL%PUbS<7mTafMl7xvzOmu_cn(Rjf_~zxhb`y99)M~ z4UO-ASf2B`dzvg(ud?%R>r*tV$7W_1$Js30)#068n3`T0ug_0TkH7!m-h-HzPhUQ} z7xk?5x9Q2bVV|$NiDf)BjA>!*)92l0z-W81!CGRqwe@zl)>S*&x`){Y<(u&Kc6U_k z^u}~k7PA1RV(%JSi_ZKP`WKe`1|~9ntWw?FKtg&55q`M6Fg`TY?|6sUrna2b?OEyR zi4R`h)yEjqtu-*543+piT_T4cp4r0R`U-Drf*6G|ND8)YCC(CAzX!!8$qlKT6tPfr_rx~{bjhcYcwP$5+1mze0U9TUoCy3%w4Pv3m9_}9R8ap_ zf~h|cf_g};J~XKB*~drPG?Cfu7}csaSaddpHu6ZmO*$vhVa1e<7NbUWf4 zs$+Y7d6BK+a=-as4`@@%qfzfv=yE_zdIK*fN*u&RD8$hjNt6C)eXKb%y=9gb7W)Gb zAZ;!#&Q47FJlPJV|^oJV|`uO2*nh6Q;-dp1}7evGt8>e6hgH!oIJ#} z#RgQyCHs+Kz{|@Rnt9q#BXft~ma8{zmWxPzf#dj&_&RK^p-l z6>|ONp5c-Co#U;k>8)+lWA!zT^3sl#)%C@(N$&^>oGI@xI?@i$^!w%2d56jLBJSBU zrm!Bw+>d^!4|`z!4dT1sH`Uu#U0Pk+Ffig7o$Tvaly24TjJ>qXTIuR_yXxwk?4DSd z8N=ParoBoNospR*4yvXkyKiw~q`x#HG3r%8Sr210q(f^fn_Jrlj9acRj11$$RPTUj ztgo)9v?RtpiHUl2FDB)+&F<`I?;WJFadXT+=$lzPf!7!NXky)Wnec!~Q$0n*GBZtzwoj=${Z)GxgvSrAQ_uK#Ynwq9!^|pvrd)Py;4`H}4uXT~-z4VyYmghIGJT z!MPI!QHucc-{gAy<38o~6Sw)5qKJ-7 zRylIdF+5IU?%o=LsF}H~&qDWI&@xk*0WM355xBfZ`hH5+`}DI|SV)sw1hi)$UOBsc z{^js}YqrfZ((mY)S>YJnUKOsF=~?g0%-CRGi*s5bq&25nwlP+=}5?Z zUP+U59?}+mhu17R zGG67vO_9dQF#;*ZF1ZLkmRMi2tdXgHiQZxNj44@E5B`D($h~3=k4WJ~UAIb@wG7Ab|(`D#~lc41wGR z&7R_XE@eI*e)aOFW+bl0(FM`9@&TS^e{X5p2^EYIp!rTGew8#A|E|?o?2{YdlaK@IMMVlrrzG^Tl;{H3KCGV^62xE zlVdc~yu_skETc`(Xg{;`ACjL-@RcYk4d?GSWCsM76F`H%0G%hnw`A4=Jz>j*L{rD4 zIR~U}N6{?+Cj$@xxlra;7m)%_LA2nKBY|W=6@Js73Spwgf1*1&1;PMQ3UkThRVyU* zJ~$hMNaOk{*4cPYJP!gKEzI}x6U?0yTU&f?n=bk`n)^|4e&& zc5$v@cs!0_?6Z%(uL~MGY-NpI-uWHIYSx$6=8+Umj*pBlEbp!_9i50qJXB-yH2<;R zH#s-cQfkeJ(`d5lSI$n4Fl$zqUy_0-CpXSKFyeW+coM;hmxhDn5*TSH=aL)j0~U!H zgpuUU8dA%EgNjh?VFPLukVv;>B9i?Lu0ZQ;$mt#w+~_u#c@nR!R_8ro!bN9MtG0}o z$OH+n;gSY~5clAl--gLjb9nejihQx`%`nBYGXI_;T3x#;&(8BFAJ!FwX)^kez>!}wY|N$ zu}0ev3Qe8R#Qj8?KLZ1Pnd%q{3`PwN;=J2K&D~D$#KyP$2QsvKl521nk*9-Z%50or zELmBIq?HtHYMPQB$OvQwEMYmhDDM4llzdSJXp4%&=(wvp8F}vE(1p?*_uI8K>ST<5DW{K7R?Ir;nPr~Rdcu@1Wfb)JXmv`HV^8JA`! zhx^dTk4!?mt`FUO6!+kPJ}lIL&1*+Hr9KXEU2ldZALmi4fOhuWL(+~Y{^ z|FkeZ=$&7lM4C?-KRGq*a=QB5&bnetT(~y$<{zJtnM16|w%WcvQXok6;W?zJI|p>A zsf?M0IHK$%DMd9chJn~4P?O4vr=JK?QKP7i+2q-RT`-E=L_#|#61=N0*?Xjq;G7*x5i>O_2J=f#4mpM?xFt3sr9?%E&t+ExYK~SqT|{sC*&5tE0`;02_MDa5I3>z;qCyXji}C8gHz6f4?%}o2Z<<@-F|W)S7BN5*-(X?s5y2IPVc8%<;CJxs zhCbuSfhorljMYv(-Hc(}#@-J!^v%-Fo^JV5^!ZZuou|TZtp1DhOLct zfiohXnd?;8On7^TNxv05qy7DXft&rj3@Nl}uaO5+W0z?pxh~c4)xA)!nM;&Wa3J?r|IQc*~bbM%lP9AExab%=(vvU(8 z1Kl0{NWoCyOqE7If27wdp*KP_p;(@Tgla+znZI=nlopJQdE4oU!*ZZA8};_PeA^%J zBidOUaFmr4*xjB%S3_&xu&2Mfwb3zSj8sdEtjvrIv+<47H$6AeoL==ptBH4XPt7gN zjSuzv=BB!8-7_M$SR8C?cDg&N-xj3BhlT1M{LN^w@roglV^cax7Z+W!Ni2Z3caFc% zxdN>yN~sHFs6~NIlNY}zJ_6tW6^xBQh!&Hi)tHFM7kUb3>3M+>(T1uJ1F14KDG(0_ zs4C1Z|M2|`A-YJy!JYh0ek^(wig8&oBPn@Mo5nB6k?F4eLhvU~pz4(wxzETugI83E zbnc3~^z&%Iq+mTV2yZnwD`XD=QizB0+q2{K*~zJ~$@R~2>PV@sK5{NDWw``vK7IYd zVCHoyY<5q<2MCey7nZ>xUOC&DbUSRNt`28M4^vtE*Q_o0hI`vfjj4|xTxtRw&-XM& z)5w^w%joKIRxTZ$9&B!~tZ!+&87kwm|NL<8WWV=yVIeD}UZX}4c&TF^rF6C)OGYc< zNcPWA1`5j)?9`Ass`QsMSY_cjWb~EGpsq$^y`f9`*#T!L#CWraMkA#8E21&EaoS|z zAdx#NW<0FW$}qPMdX6PeV$%>Q=HB^vmh@!f^SgQ$*xWQcHJY<>gpp#ttf27!RTG)pg82Gd+a>4RNUfGJKFZF3jyG*@PY(&0JcMu)HCq^iE(;*$wO^h@aLvVm&%r z^E0AD5qX)1NGz+5*?-)FYO9wOG$Kb4!mRHFQc{DZsuCL z8s8QaXGLqn49_1V=ap4Enq56qJ%fE+jOg@_%&pShA$$b;#B{i>&I|}Wf-mzQWWuWb zu0%{Qp)ysn4OyyK0V0r43AS?$Hz36_n3B91>!P1m^xqa32QU43cYT{?F#r?n@{w2! zkb(_rprrP~&hK1&6VoIivd-`#p$sMI=dQ`T)tkAJy;TxT*$^jpN%GCj;XlaySKt!Y zBbdKW+Y3wp&Tf7Iwz8{(OUt#n7DO8^WrS{ipqv{}f}<4W{%DV%KlyrzL&O&Zs%MAO zE}PZXM1Np%ZWSR4BHXt2`m&ryp`kd6g@i?Gjj=<6-JaQ{<&(YB)9rN<%6Xr+`hHCE ztHe%Z`{!%L2t=(2e+ncj7F)@0A;u`1wPiN{TYWjvqYBzaoOYgx2m<-OC@0`&kz64E zY;W)6|D5)ftBcn=7GOdW|I4Xqxh{+tWRkq>+2d3ku7XuUJf8c7vgZ}T`d`*SVWhf{ z4jX+_{L|=gQtC);^oyjlEZIUQ{@y`hH_M3Dm^huta27Mrehwd5!5oae zQ0g2uHcS!%LjM=tr`uP^dJuI1d^VvemB`vN<&^jSzg570A?NDVaKA zF?xD7+j1I`%?NfQY;*@jK(Fe^m8vL0vYddD-|zwYUuiT`8@G?N6~vg!t7>ce$B}mI zPz!zB-`oGNyNg6&eQjf7-aC+2y6*K2b@3~?N+Dl)g z*3XP~HaRflbaV{$4$b-c`aG*2_jgbC7N`3ftwry;`!U?Dt#9jORD5VI_EAArYFcta zg2_Z0Ve6ZopBrv@*ODEfiLZ4H%=?g`xYKSKSo+4^ZE3UTct6R!cU?upFASuWYGE2p&%v8z`us9JM zBOeVFl=**Oe|%FeCrDKpD5+HGE^%f5_wA{f^)sqhVYpS)!IoW0fvSG5`2VN|SMqJ9 zp>e;4DEorO^@~b8pMO)my}6ot%j)SshfQvWlKy9WmtS#zyz%2l+}g$W)BTm{+1Z8d zFG0`?a^ZDYM&wn8;8C>OLMsc$?P5<_2!IgNJjEFf z#QBeI!i`KMBta~PaO(wX9G~Wt)5N}SC z)Rc~z7_W$T;SU;Wze*Ne#jBijo|IDxb5WHH^xqGf=ldonaO+ilisl!Pe4I>Oh`!dCn=`zWOGVNT3W_Mx;`yEJu^GYlB<`6Ue;2Ih_VoTLBz6& zmX@53?=V27hgDsxIPR%rmvjset2w=0b%n*W#X7umE6R2pvfw?IXfwvVvn#2?+EibE zu3=}IDN6k7J!4Z+-;bjEa_5JVL9;PIYeX!ly;=QRUA!jBKIL`Q*H%>{vEvUlG&10J z%^Wc%wYTwpVx*;_qOk|3Y+F?u_U8kAi>9YJX7<>a5>w19E3&o{A4Xi2HKmE+y4<$j z#SwRZZ!ZsP`|x0UZFy$MSyzEz!BK4r(M3Mb%(_!hR?V;mk`gSGIvSf=2PRjK&#%74 ztKmuVOJ3u_K*dLJA^-RcWcii6>VY_y5MCQs1c43j;>-J(TcCpGwXYrmzh6$S#svgE z{yTD8QmlUeG&8ht$eqbeUSaGlKbNs+6<K-##vPe?EE@y(uc}p%3oeHH8Udp6b&XBE3A&X$x*ZsB5I_C zBD2!;o<#%^)+k|Fp;aXwoq^8lvaD1(w`6ZhOSmcmbvU#_U+a-uaf2k#MFDHL;DJD_ z4v4fRz%ER`ET*RSEGsaTEPYx^DiPXjQj#=@ zexs6jWeS)BDPiVRBDIonEj^X2TMgOGwr#WL6quMIC=LyFB{ z2!G-KRtGiT+<>>MOR@y#(9F`t9*=n)sr1eczMSX+c{=o_2OC1CwuU=eoL!!gDMamv zxLLY5-eU>HpeQuFv@zPR(LOEtEl;lruj=>qwQ@>T+Z_yNb`N>FTAW*l`)F3y78bni zwT{l#s<%az9o~uY{?3VO&kNFwi3ur|)GSN7rLbXWVtTT-rrcI^H#El9FzRE`*YLvT zE|Q6j#c4)3Z0Lb%YqE7A_v7PptoKW+oiwQs%@1_6HZ`{ojISPv--jfjpn&+Re)eC+ z1t9}A1%bQ?@hty>kW_yd1QcKLE2*M2vRs23^It~E^?;sw2>~>bIs&x^*FImeyVqoY zYEZr+dJy5p_!XDNX@QSF?=qOGgJRaB(;Ze$0;e~qUs+beWq80idIL{!OHqFK@idY% z1oaq@C-D9!K`wFr<2p7LOjW{N^8@Zfo&+}_m&RR19(eF6Ns#`2_3b5(MY`qkghfmz z@)gGC%(^flTn$+36SBd;`}(Wc7PC)?{gl<I2zIBxhac9(yd2S0-kA26@^K-E|E&^uT*kU45K6=HiK(s`O%E2^FmBuNr6f< zYrT&N3G6YL#)HZwgZ-Fz5YA!83?lI)&y?P_UL}dtZC5&wn{CNfAcX?CtmDX4@&d2J zRfR@YrjnsgH=B&H53Z3m>U9s}O&Qdk{+yf8UjUjpAHhPUU8%my<6?qI9)=L;?*2ZJ zj15E$3hRYrY?_to)7T))D~p=lSFnYH{`E_<+9 zardwVU9FNCe0E%~r9r2b_>}bd59Ann19hFlbAa&5q*NwSn@mYbiHcF1@JcZT5|qSH z3g_f2z#X2Nk(Qp8n)<`6Nx7Dqk(KkhfU>#ts@NcC=4REhnP`23NpdP@T6b{&isLUL zH(@t9cDoF()OL=}FKz7NHUekKLkHccgO!aJQ*O7{6_PXOYHx1u1IsfM8#B0(`+T$0 zrBPV5$5%IZm$7(3pI-DjL8FO$*E%%79BZQ-8SO~L`nr3I`?mH@4rwA!Q$#mA8!Gc( z*Y$WO$K0-kn^88SDM6kk{e{;h_5C=f47S#k7sc!J>E%uRp5c+1#U16~&i4CBPa7+$ z-nKMl-wTg2C#PhW*k9JVy4Q`ezFOkUfvEbg8P0u^+~ zt-h%M2qIdwArm}{(nCI}mxL~2!=yxX(sR1dY8EWt+*EtRM8D&Xc<=6aqN%zF=cj{F z(D6u(n#jIEr3zL--uDRZ1JefKv%j33F~H3s^n0g_JsmJy^5~$>qz+cCNiY12Wb;l9 z&SSX6boA-|CIcCt|Nqm=Pf;Of4Ob)e{~6^~116YfY#1yx z|9-qSm~PC;F18oidws(lEUCyc$A^U6kI+SDdOqyG-2EQ#uZ@oPxVo^knV3T}iYma< zIpAA(KjE1lT%31`_DQNlY)%x)T~!}iMCoh8GLt+}_)lhtMCT>5zb*dezsV3YUos<1 zs~0mNJaI7!fHdNhtd-%_sFL3ZKf{rIBFiXM=QbsMWi?ig-x4Y>mmgVy?0_YZ^Q&4h zv%e!pT0I#VbbFAFJ&q3lrul2+vqW=dmIYax1qE?oA?;@nP%R=2vQ=>bVobY(rRHuu z*k-rJz))c5hWMT!?^gZxmH9A+G?teAXuLHW%BF^rIpZseSa-yPYGMlN zs_WXB-I~OSerG-FU!|lD5sm1xuVj8~mfvBlr##D2YKa1L1*jxl0cI1!svhPNk z$mo~EpxfEvZwjS5L>8_C#cds3{_bc}@Xjt?FbF?|r$r@EQ5i0-g52yC`KulUh{U;U z1w=%O!b&B9g#{yKE3W}~mL@|9RPs>a1ev+?Rry8H2Fpa9cEX${p>R!Q#7ks{)e z_BOV@bt+vqdWqHaLeO^)c>*3CJ!f?%d*sX%O)4~FA{$#HV25sOZfyqkH2cbjJG(p5 zd8SB}fK6R0Hf0!!#st+P82!^K<#1xvMj5#b>4p&QR0&Gf4iRkyh; zTD>tYCNeTAKD+48RgH};c&1^1Ngv-kiI0!)*r>WCu_le?wI2aO<+~tQuD~;|{UGKf zdWpKzfAKfLfKZl-Fo2`JoyCCDm1>B3wp6S$f(X-Sqymn*NHbnFLvR zgANZ|{8fUziZT!<DlxCY(?$=t2V%n8+|@@{hFfTD8nXj3HK z^Dra0*f%`88O%7NCg+5aJ0}H@XDDY(z^~%s`elJL}5wAXj!(LVx8+ z!zTl-IE`_@qVnNXEcZD%Mh%*?rLESxlN`D9{ zZofz4WdS74Mc2nBCZM}z_KJB*?aHdM9!BZ8wWZlr2+f*3W&00Xo2x6!_#&X^o|zU` zV62P&j1(LbPNC|X9pce1-6-(OetL9Kqz;*)54o0}L0l%APBDYhq(I`8G31r;)uoDL z#S}=sGzXFu6UB8>1oU@$7MAI14?);|o&1S08McKY3N62~=aX;Oh@O_&(|U>=grL<9 z{7gn?q~ExMNzlRm?mook?jhB}`r6pAyQRZZsfl&NLm``HylHeA)q;0WzVSFqYz;|q z%&a==i=(l3zZH_4UDV=kM=b8BhInu)9sfsH=X9Uu?#{tB+4eF^Ib06=+lnTZh77tL z&PwfDdt&C(d-~9@Yx?I^u0h`nd$e4QrIy5N+VGT`!I_l>rhccqZRKSZZ|faxIbmUs zBErJhGX3C1%AFk66*hGaPc6t4$@uKX!6`y+zq-X$t%N0x%8F)*%t5uZ091e|(OO0( z$yg`T3S6GD#rg;-1h3o1eAP@%s;wCE4yvbF#_StN9>C7ZMoDp{X9*_k{ z7k7T*lH2CuvY%ZN1u;;;VqBOv6k%W(FHeb?>Vx7^!3#?>OoF;3*;o$pOIg4byd@Cs zhtIw^XOT4fPtL_gTxdOwdTglAF^Fm|FUQkAIHnM^%2VKo0>VKDMy&hy3&Ij#=as&7 zbdIktj-!>>IXOK3dLFO2)LhpmC+9Y|&%s zKN5l&E1*2Z|3?goWD5@`Y>P)gyDUNj@KwqPMW|TsdenXT)d7-3TPfyFt%#apy6e~Ag zghstg&d7x@&;JVq!wuO5M4GpJ5Bqink1K3V`LosmVX* z3k26ysx~d<%B+Fg4kY;#H3?Tn%`4ss#RA|c6FfIz+H96Eos^K67%&;kDX7_`kAN1Z zL{sW7dL|7lhD}6d$GD43a-jngYnb|)TJc1O7;|}N7Pe5ggzW9_D~H+xPM-fr%L*L< z0xnyJw_aoD?W8*O`X-Qc0^(tJw`W{9?5_4=V|rbc!&8-|1IWgkdFB+G+a*O3q2Aft z)`eC4ZOC9hTw3b7IqC6$C^-uz$nqQ{iS z5+v>fe(+|&b3>8dGmR{6QT1IQJafw3IuY)$N`!x~qG~2WNpPc3E9&UPf6fx@H#- zk7ZPTeQ9QPVqjomR;)ahHa2N_m5QR1av9kMIksZGCQ>kTi!wWDzlC&Inp5IM(kjl> zO7nH`;UOxE92?fi)!8Fc3;woSScNszl2XgygrHeMaVRWy?v+K8eWm8jfsC+p6jGpB zljF|~yw)IRzMKErk`0Cd3rOd;S*eLnq8N?Vg~ukQ=Q5Xg-CAsWSKETn%MFjM>G!)s zdV6}W++k3xLxkdhS35cqU|)N*tjZ!9i`^I=M54`JU6*m_5Rz*DP8=mCNM2uM7+PS= z!YhQF!feZaVss}xo$byBOp(~oh;oI>UN30^u{ZVqA zG|39sR!rKYgsa3r;w_WZ0&k>LLE=WcT>^0=l)QAQP;yEpt=L~9QtZ zW*}DKu6K8^^ZIabfXyyp7{%q{GF?Qz(h?#@mx%bJ_(Tn(8q ziA6*K{>Q!5#hGz0x%qHMb)6Ic zR!7ads#J|8D&82Ens2RebPRh&iSp9}4P^z^>_-t%*^S=CrAf~~TRji6#@<+!u8X|? z)NFj2k`fVFH}FVcnaLq#5xEy zC^f`kKuCgTP?9MfVD3onjo8b&3);R4Yij*pBPm%W`ckzDZZDbCQgNo{#nPMtf+)tW zRO#5yDjWN6|H*?>F;L)6h|2uqCgclYx+EBj82pFG*yOa5=S<11PJ}8KPcAt$Ks#wP zc4X)03+WMW93!LMjn(aQ>)VWAoy?bLLNz}$e>S}FEgYR3eE4{>>TTf6d|O&r+TudD zJL~K5`a0?>m4fGmOjoE>4w`2f|BXl4+yh1uLzwxR~Q z!z2WYT>)z%s2(e&B@18+3s8Zm;)!SP8#}5U&H?YjlZ5@%jis4ISQ0YwA=D*J)J)ZNXppij_Q76u zvUd%z=VW5SH#IiY@{W;ib4<+Bk}l7TZ=ju8qmG4`O;+=Bv(+xMU{*_pr69J*-qhaj z9hZjS1Tt}ab7TToA{yNn2~P}B08Qqd#U+m^=dX7VZK?>D)lh^b(1f%^t&zE2;NllQ zii@CNN@kJdwzv%eAC;-PeqDYDYyw2`@0WWi8q>n&Cy>P5@_W_AgbGz20`Ed{tNSSB zL7`?L@Pe=N{STDI!aQ-)K$-|Cc;rp4ph`Uh;!}njzx+%MtzcA5s8OkKLF@zhu}oo| zGvjc0qN+?uyd`?$iNNFILZTO!2f(A|qC6W?0RKh2{4LZ21gs0NKMAf8l7Bz{wBW97 zbd;6X)Vf9~OpbQE6-HeMGJEZ!7AZLta-#0XE0vY_2`Q~QNL^wvKyLmk24Bc67_or37I+hk$=>Q} ztKf!$iFID?tz7a_-qhS$u&YoTYcl|_3?bx^dMo)iWuJ!>=yD$9NdX-R`03$T^C9Dn zG5CYt*FR0pV=9}*Y<&w`4g1wi(8JmMlO`6es3A&U20iC75OB0@HN`)mPl1wWJn#4=fE!t8+Ry#3)eD>nfn-gh?9Uvd!guG#;L&b#c3{?IceGfaJTw>Q+lMW8_1fQb*UVYQd(m}X z1}cl+RTR`U+iZ?^c4trbaAtJX*yPg8`xQo@Ca1=S+nAk^QoXjkq9ixs74vP)J$-Iw zGN1yz1FrhI@`?guOiX@7y?dY&GnE=_RC?Qs-&$MTUG&E7*dy3#Ze!<5sRF%CdNlcd zW#{M%q_y(>F?sT5bvw=%e0orc0R@UvB9q`$1-^2A`zvF}L@URLi>8ETHBM~s9A*p6-)}$`9apCY>O4Uns=_HYw3Ua`y&QFN2 z?EC2nJ8aQ{L0)6gsg7z&HXy~lgjw2N>Yb^k!u&*z5aK=86z)t~T_h6zKgea!d@=NR zcnG@(Ri^mW6#?8M`G6b+BJB3dy=cGIqokbaA3Y8$!qv(wD+GBSWT(5J6s94ASq&mp5MRMSmnCEh}a^6L|(v zUUb-KE^NhbGEC2-*xPq2+L(n3qtec5*Iu$j7DKY4c}VLSz8VUUXdB>hNwSH)F%rVm zy*WZ)tB&1BNDz{2Y)Iw2y>+=BNk8iS{480vtiR-DbdqIvQ#Ax!H(2;y_pX9Wn?zf& z=m9l^Tq+=jlLpm_q}3@(sz1e_DuNNAv6UnpxE6i3kl1{_O7feok&q`Ejfp{ICnlK8 z1nyk_n*c5hKZ-+8?kI@Gut2GLP;IxfbC>DoYNl9f>g-kZ&|3@JANDc4-}|qJ7=RM1 z*S9}Hx^J(}&QG}Bnyb4##hTE@IdrY0DE;N>ub#h1wKtU6-_>Y z-@>0Jn4Ua}tsHK&mAo!2&$rc9lvFz$EjSig6AEfl#+Mf4&#^c?eh z6#dlYB!B7U+?c@FWXRpo%=}n(;`4;8g8Ft^&y`ge9d|U@nmW9lb#F_srYo&)XnW-L z&drkoNGD;$$M%k6c1ft1L@^-~d#A>e?e+bStl1R*ZalCK_dX(Yq+BIbVUBya!x9hN zGeNIFSAFHn7n12-$E@cgOQ!I}RRd|@-0^yS3~zJ5}zlSN=I76PnfmmYJ{YR(+Epx^X+;jCueM0@2*UB#se z#MFa?OGs7z_4Cn3bm-^EQ3S<;`bfBH?pRI;?u!FOt{M!_-|xsX1KIqXp=TC-;0r8v z=J)7%fBVuGrAsbw^bL3heJis}j#n01Oi|DDjkt>+uK5~sA3eMut_@f8_oD8FN1I;7 z7_DW^?G?2{L#_6=O>p4FrR;H6ZG8xtq+0BtWNZh6XF{{$d@McPRuMnaaKNk@a1**g zu^OuZvlF?+t$Hb$$y||bs?m+1z>Gk;^qKw(1u+@8yiqk1hef?fwN6s1_P9m8i5tI6 z3X6qLenDwjMRjd$&D)Y3^NYxTYVL+TO0*Q(Y8c38X6N8V)1_)dJ&EG^H+0p#WIeFod2UI8or7lt5x0Kun@d zO!`A&g3*{{GN;ilmx&Q}2BLM9HnXtXB;f2JP}|E4fkS`cf{1llouhMPZF~0v76XjA zogRHW*s-A~yE8+hZEA71Io-a=kr9vjC-17aJ4!QNMn5wZHaih(*LS#DT&+zFHAOe!zzq7> z0^l7zG`b)p<1*zrTh^A?B~QM6`Co)p66ThrAp7ixK`eT9c7%C12i3xdBa}TyACI;c zr>1CRO+exwpME$da;r71^n+9r5{M<@ySQ7DoJ#hrC#8oul9_1f9Rq2;`omd6h{oQ& zEm2-Yi-d17U-basmVmTW=nn;CYG^z^Q`sn3bLoGPg^RKSpJCJ|Tp}D`%Yh(Ta0&2o zGioI*%koI65pxQt?{imzVrdfZ?%`h?JY(b$$W{>bM3V-VdM))cuA#(c9=Ujt^Z9Sc zPO&$TVGLH0;cX!2!^z3F{pK8-qkqV4FYK6{_4Z=_W=s6bIdV}GiUZY{S zMt3tjA}%iCn&EEd+hX&Z_P&mWLR)n$9G2*})lomSFUpIK>Y7Rq4(xWY%ghA2cx*Ld zOd@;hH1vw}qTgaNK00wgEPZOxzp18v~@J(+!}K0>p@JbLNEHyMK^@z z#f+P(+*T}AcEEa*C5W}iz9{l4t*I~d|I|e4Vp9v=HaI(QB%pxy`}ArtOo;sf9gWSn>UJo) zH~4w7jKX~J67tJPg^W9jw#&dr>K0BWm_6F%dJxY5m06lmQe!9TsI5(=q#udGm|c;Q z8;uD@#dz%%IXKc0NCm}mjmZ+}2GYq_O8!suku;kDHcuE@O#akJtsT|%PR}CxmIM0A z`&i2z9UqZ_uN7P8R@cU-=Lei`URfGkEeK4fed8?5m|hs|aMqL*RF;<8-q`E1?}x>u zrlwoUtM5j?ihcInoEm%oVS;0zs<@!gW~Ic+$tkWz;M38W_M*V?ZhUQF$-i!TKR4+e zAmJ*nZf|a-#(Jc&_tSVB@J)|;U}40(%2{9k*77o3_blDvtg5K(aJ%YZ-CjSTo2?HC z4Gn){vAZ&de6t%L*hRg!GB-9hyS#O9Dt%&f%0$9X``bHv2irKV&Mj}U?q_9ncV~kw zSxX+bcgpSb4!LV_uCUY%Hdtzh_DF_R8VSLsNT5k&(RQ=9>i7_gOmHoJ*%YxqX>O5- zkx}0!&z;tXM7Re&P_PDrqr}T#`K@wXMEw6o&@|??1fd|-H4_PKzikh{9Up&zK zmm-Ma$HJ^D$V^nSjHl4)%=w{pj<_ zmNzdn?B@OO5M78?7ao2yMz6hQdU^jvq`{OHpHy1i*xFWGT3(Hhmle_sP!|(H>8;o_ zaNKtV)0Ew6?kyjf8^9z$%zN?qZ2yxCFUSUoX0_d1RR&eYa(T6f3|$?NJ}n>p0t4hB zMwvO1KC`MicV}%Zy@(ymL&F zZlp@0Vngs!uhd3SWQZE8y7Fxa(VD?WdDQ-_8%R1+Ri2v(Drq~*`4r&kgi0q)$qMJ- z5-G`*$soix!cQO#SN6lGO90icUisr=j4G}<6DUA1DgoL2sa3!RmZj_K%kP)hwm+b$piuRHOZ>98 zyn%1%(!vybHb2bf@2Cl?{mFD%`-&)|6Dye*l|mzRiIkL0m3^xcgGrIQ4}1hS+nF2`_Y* zG}`1UuxO;<^y>Id9*sN`RVJfalp+rQ{_kuBlRAU52{Fk27Oo;Eho27k|2{Z9@;VBx zJu0oOXzUwbSeW&WuYbxvKUuQB(uEk}pGSrBFZSWXCpWd)sMwp2jSpiV8uTVa_H|A- z)M$N8Dao)(-_UOoJs8oGDv#F~V*;o~n46*(O|uFqH!Um?a|GJ&V>cqdLtoNV%SbRW z8rE25`Dr(6GBue*=&TS(vVU5xi(Bv;s%QKP#9aHnSb8$4+|H3eud9k75PLo4IZZI7 zJDiqiy)`NNpPKvHN2x`yu(VoLUlAs#&~A;5k$Wp%J=%%!$%)BHWjYKXPfz=20(1A( zK@6sW$+g$lp_#VS8d|=1N#hykwV5f-0z3eT(Wsg66Qv7`qbJMR*g%Vpt&A5v)7IcN zQ=bJhFJu5IH}e%T6DcGgNVn)Dm(HcLbpz)DCa#1TgZ)lWl9;s0VO;E! z1f!)OtKe-+nEtouNaKsUQFredJGx5D>DKImf})pqA7qr-s_Uz9`5Y>-jN!Ppyt%R9 z!=fBVnI1=}qqVWUz0p$M+2!%NnV%XSnO_mEwjE(xu?@b$J@FYYaVEK+215S zp}^DYVvQ*og<00-yIg*9Y5T(wvz{V7-#cV!CB_`zp5SA*!j`)wuLD7;y}h;3vwZMr zbA~RuJt`{8{2<(9F&d*4T|g6Y*O-=P&=rpD5VvS>sVuToq|uibXD8dM%Uf)aQ(;Sl z#37i5mEi2g_rQCNR+l$$bRKjR6^*A_K?6YGk7p*ibpYz5R{RX!@0_k*C7+?x$l;#(k~msqR>O^O7}0aa1+^IAVt z*_+V+|936ZdTF3A zEKK*vm=yEy>2sqg(HO1Qhv{A!G~xFQ*K}b~sfAfdud6$U+DQ4Tpn7?c0c@ftjh8a0 zW-;|6PBVw0&Ra+?nxt4Ah9KW&=aax3MAPnSq^VhHD^}}KX;LZa+O%NtN!Dq}{$bJP zFmxCuRz|e4!U@OhFr_OS3%~AE*JR*JMB@~*ljc?#%%TGgQ7$X0ZG1rHQoi#Vq2S6TOoW(TwA7` zo}NHX<)xY?NJIGH_RWL@iW(YuvT2XjT!}Db!G;{MSVS>?j;Tm-8lf#Gd_Hp`O8ze* zonf*>lx;Fe35N#Hod~e6615Ce8j;x=LqYWOd(U4yfBqsaE}r^Yv?qjYI$fADT9uL; zc!ZLxR0*i7{PskSmKs)i*3|mgWb_fs8!55)>LXrKTa)brR!#HLn75N1`n%7fujzH+PpdjB%*NMZ zmTZnTJkNm!t*mvrdb{4Wd&j2dmR9D+hTMpEItJZkZ=IZZO{Mm}&H-;}6crvG_cDvk8g@tXe{~Ib#uwhRWs@2jr8%SA z(%nMt`R)9}?83ri%TryrA+E5#rl^KYucj<7Hwih5J}jr*o?H>7h?7bv>Xt}t5oz49Us1b`LM$O^%izML28-YoH-_78*v_RYQhZVQzsG}rQlX;ah+3vK!Kqa6LP!6QH6K`%fp5{B2+ajArl`U&%5f!BifoDdGTkA4Dz#E) zTw29AtGsZ&7w=H@kWoF2gu=(yfM>uzzLIQR=sIrU?}B$}=Y9QrjP*YM)q5K|+dCgW zZY-~E($75D6C!Cv9TOMeyyXTSQR(XbWuvKgKqxgMPOXVMr7x&^sShM5N88S z@Kt03Y&J{y8(EEm&3vQ`G5o|fLCz0R7RG0hh-q?^-0OKnIKnnT8_MWbNol#Ad_d+8 zT3LaEek20nw3^b(%sqYSh`}LDWZCClV>R6e-G+OqHWwM;%*@rC9+k+HgzhWRc>;Gy zy=N$@wX<{nIc6<{_a^^V)^BcXZn6M^eiqy}@J?8HzaZA!=!=K?5lgkUG!P?g;!22S z9e}gKkJ(Qf`~tZL1VJuk17KFr%3RWqy9TTgyGeO`WsOjUaf0nMu&pF(V89hqWD+#e5)_qTQ@TI>3C1%o{vr>l%sad}&RTf8QEY5~WFzMdg>eRFq{ zEj~Kcnv)R!^znf2_q*$g>nN~l@b-2zV2RkpR-J{7?Ts~Ge{FG2dOXIBx@eQVv!kuC zrXumdlbD-&{R^`x%UV`d9R7ao`{ARou=|Z0LW~pIfgb_+E=U48LHMwQ5@ZPgaSY?5LQuuVNU&xQ9vU1I zXko9eWKkwJKx0|LG!hnB8h<4TH&h#ywfZ})bf9A)xm5k8NIvCF&As_7q`KOKmPdXS zRCUYD2yZ;V|40#k{^@|tfNU|?UZs0UxplCyzPH8Nz|D{>YH;%ly!i|Bld_f`Zk<+{aO+4+rTb0a*^Q7yMAS-eIFp!I`3+xrt}{?O zGz<@8O^hN?hds$_=o=Z6y*J9dVFBsL6tCYgzb^!COqmLRt@iH-j=J>eymwb5f^y!nE zPoF$}{`@Jsz8T4q?sl>*MObm_Yi`R1Wu~S^c5I!1Lp|064K?+i!{g&qJY_M?J3jn) zd~ooAInb&4f{y&?(zbzCS3#_$prYI3O4EdRwx{OCJ;OdXdbHHLVc~DfOfjaIyRTA` z6W>_PCPVmd_oMM33JKBaAJ}@|re)bX+A6XvS<&HHI5Cu0;zKt$-Yyz23^EMQwm35 zNo8$g*IlaXxkdaI@kn3UVB7pLzFe}pF6#8lzPF{bP@{Pm`}}@HV!WKz;m>T37zGP8 zeAC?1B{ZAkY%fZExZeUt0izJT~C?*eB5TM*#ttp>jp?pY!;--+6kuO%o;Je8zfa&NIF;}&=mYhZz; zV3W6}*m+~0FFiQ9<={ag_k-f~QZ*3flE7WTSX8~HdR0sWm5W!G-*I=`hkn?{_xx~e z>(k!)+ItqnuR}|$?d=_$9uBhbtt?+w!F5iqFLvbry*MX2#`N@oA&kTZ&rhAs5Pi=e z-cmYUMC`-I5A_e@&6a}KwytJdOGisjPhDwVzBmFZCAX=od5wz#1%Wq4+dZ-iYUK8GObG?1&3r$YB)6Hw^q<87Kb)a!WS)ijD! z4acq?W#IAPFx#p;BK`o|gF`YP?;XV=$UB1jfU`2^sqSBzd*MmtU93Fh)W^b4EDD%q z9+TlBWl|sH#%AY~`4CZ?EQA1RWktuLCFEmh$~JDS18#}dl8oPx(i$zrsN~=bK;tIB zJ}vS33zXd=R7-0fT;V2+((Yf#MZyHzudnj{q-GdGamjEtmtpK%m~v@nQ(0fhxQ6+< zj8}=Q8$>HF_0L|AdOv&eSc(11lV?w2pS+A0PFyr8$wG)*M1~9hFYd*3hZTDiip#n> z2Bc9~FO!UY{-T^J$H_qY@ZTU= zrq%A=1=SUzf4(Sb0|j)_i-E4$`#e|E$R)Z zGj3I?YDw8m@_0BdxL0PN4_UT_v(U!Y!QR@|?%LwQ+U63FW_Cyzp~LxhTVZOJ-CkVo z#0jpk@qg6i$HhI1di0oD3PkG-`iF7R;X2SA8m`lYN8NpSGdion@zPjpP0oF1b@cT% zmx-E@EiY8ogpNvHXKJ?^L_?K1iPkaVCr0M2y2>IpgDfU>hH4T-7Ztt+($eXXuB;_d zEj?w}!m5rGBMB2s!wa#FgN_O`nTvrBOgTNn;1}`>KH3AkQHBM4fiY#|nh%b85NU%M z((HD0o)ar-JR5N4WY9uP^8I6h@xX)u-;Q|*vU%XFeZQo<*Rz(5Vdv$wZx|eGZeDFi zzo(1EnijQ`W-&F}cI*|3%zTU2mn^-YhOK7DwM=hIqm4x(09q-~u&v|oBAyj*L}~A_ z_(EKYBt#R;bID7Xy%G}>3T2fp1Ja4FUQtIsf9ii0@-+7G_1Kt4F;9rnFXI{OFeD}= zo28;gZWDqYKq>!K=2J<#?PS|HeOJ}jb+Lf>wl%wO1M=ZJe_+e{x!JU>|=81mX z<8FIrjD3|=;TrNli|5Onm(rJ z3d2)7ZB~b?b--H?o0t@1h^eu$jOd-Cxxa5{j5-8$UdljEyZpCwzH?NUzU!^PB{b&Y zL3qTy=UD~01-8mMjKf`hk4EO!neyCS znu5HWT-svydvNQlNK1}};(usD^iOe4xn_ zrg@&wI=SRq`TRx9^wrp^X3>Pa^X&;HQYI;-fd=T4q2kN)3;p@C(1-DL%V@|%%=l6g8W>YUQmp7^AdH=WP|2+3M2TPFUjv^;Y(7$AlU z20^$WTXJ@Z;oKNd7qL}xCzEr5t^XH+KO(&}1kb))!;<+TJvSMF$*kOe`}g;~_gfqX zRF$wjJVc38`>z)lreD6=*nYjXySBNsdAf6cx?s0C9Ye$IkH(bgpsAsP-Uj+S#kIM{ zY*SoPqCu}WM8}5%Xq_QCSQnC-Y1HbHYT8PQ^4XRvuW=!&I@%$tPAY*B*da?9BV`?X zi)?5JqFL3D{&(NqqY!vc-CbRsO80MF?Hw&b99M_BR#Le#MzNZTu=}YM2dq~dLTM34 zyg1@f8v%$jf!M^3juVxI+lfQ0GOt(T@{2pN>4ioAeAp5@QIkVmwye;9*Zfguc1`+T zu1ZQxq!6h;8sN;dD5AkQaofM46QZ|JO@3?#z1zM+(BKYQs1`MS^6rEEm`%2xX?ru8 zo}HOw)uE4haEoYeHtW$%=@g3p!Gbmt5crz_!ax*z#5f_3)_ z?q#P#)$3)xRU9bN%Ti@=p}!zF-%O)hNe`q2gW+W3pN;XcamJLC)U=GuEK{~A8wIb2 zg+-<1)~d={RgDGL8dB~~e$jlkJKHNH1v4L?QXXBv~wEJM}@~G z7J63}ms!#p9(>eQVNOqpj*1EmODylSl^5ihGxJNUu-|a7XzL#Ij86YDzxqxr(f2kt zR_B)2xA!rVr`|{rm10nC95u&(2`QeBM9dRuMat(}&7R&E<9R!7ILE9KC;h@}9x# z#`f;a$Re9B%P)A}FTX}gV(aYV-mq)LJ30GwZ1(xs)QIQ5U|HzyYP4sh6j>|ElVFjB zghYo02gjr*CK#gAO$Kx#LklX~T?MIZ4fT2k#^!v(t#vXw#VF&xGxlqY_V))3;A^Ew z7YwGTj@`*lk;a#GqMvZ1b3%=R*J<^mLZTPnr^+fF={AB~L3Idv17^ZrpfSYR4xoG7 zN`K4{GD38~gsUxEkU|%sUnQ|wS=21}7sG+;!u*Tbr+ppPjF5lVL`9Z+@D5lPp@OY9 z;ym|bIk2LmRzu@Gu&!5)p|^semF#RQs1M!l1e0WotCfL~DEk`+l+pm72QC9@-!zyW z8lV9sEdy7l(i2Jhozfl+7FA=QTj?=%qp&8F%^s{RL?(q10H|gNfCUdMcgAp!A%3+u z8>yzDhFi+~r9ma7N?8n4GXgg|m5i}6Gt-IB$tlUkjKtXJ=!9e%WPD_0QDc*Svo|e+ zEn1Q!MRea8A$Fs`-+tE?(LTlkJ7x4G9~Yne7yo#Eytlcz_@q9w)H$&*G5Dk_-I`_V z9Gh6^WdpM7Xm|Cw?}@vs)KXlT?`W&b&y0^xjm@fe6xTQkilZr^4L6#GunMoYs@(m; zl^Vwjh%nT();jE#Dn~oo{fw+&@sH7>9QHnbJlNgR;Uu36iik~2ijK@5S)OBRHR9=M zsVp$1C5A^tMMRieo%B#DD{T#Q6WiNG%Lc`_nb^7IjYD4h(eAsASLm?r9m5h)HUIqA z4=x5c!vu%LN5xq)VXK5EmE*gova0$W$_ZAG^A6c{D1{K@VD;E^Q>=tbE$vp(5OrV*Y195`2Y^n&QR6T** zCh-F4@&ns1^s-OR@X%KKc=yl56Uk}f&(c>%!|38{@8oRf_4~ay?=~mBixa*#YXe;) z)5uCKHLo9CUM+Pz9^^MW{Q|k6iNSJazWuJsqUcmhg|)z#R+y5U${aBWU>LHQg{|-!-C_&pJ`E_&kv(lAKG; z-P|O66G=s_B1Wx_d*~%0RZ@ps0DUp^cT!cE@5aU^$>s$e2(OPk8N=oQJ>L0w3Auc{ zT=p*p76QxuCI9jR=F#jAOn5q~6M}Cve+Wu!9G=0ASQIfuY=o}2JYrQMHEwkHL$kK= z7D2IhTEP8dC$I-I)c-!P7p7Lyq8_jx*!&qoN=8~Q(e$N&r=0fm-}UO<%*zK+VG-7M z3})-}0Y%Y4n6XgJWM)U*@y7vr0K=kdhQe*9=Lo|9S}2}Y!p%8}s~ni<5D(x_q- zt@EVkok6cVIVB}IG?5{3yb)Y0X-SmWYUGAyMufMp4K9??#>QrstFsMPFVUs8)0 z&BKhSq>K zFw3$7@Q4Olovu7Z^LM(KxP;V%u<*KB%Af&{yS=fxz+}oyiU>ADnp(Q*9E~=6GfSdm z-dGrpFt(oiWqEbuJ$`H_M|<0E@qT!Jd=9c%&ba;yMzU*0O>jn9LU>xQO{%LP58jFyMmUx4$Jrm!(WuszU5Qo>Ooi#}S~Du(o}8f2O+&l zkuK+!JUO^z0NnZO=g%K@kB-(~Z@!*iUYnnpMhbL(x{t=EcW%bBx^?vJ{o~O=dN=P|=|GaT|@RVtZqSwXC$JJS{ud7?)=+%?H(Cl3Yb58coId#v+fiplx=>qP z#@v!xs;H)&)kY6oY5xtd?tUcQZdswno>Flk8js17zv-7oRQc%>sf-giCn$kc)e@)w zBs@rHCek35x2sBYZYIeD&@6YcY^}y>_9d5?E^C=YDNA?DI&ezYD;ydL4eHs6q1K{E zimiBkPRq!`tF7I=-JLCJV`f&I1=x!Q&dOWe*4wwJ90a}F(Y(92mqng?_x;^|;Qig6 zj^&4a<=_vf9T2M}ahD|n-^|og5knIu9DCS|(R8SOLwZr31V*$>=|sBw4!u+V6D{af z#`Lfmo>dW8ycd$ z(G=+`UCyMq-bIfoDJ9mJV2U%9ld0$B^H*vg8l504_hT@}c(Sh-&U-L1GbAA~Dcu+s zZnX7btkv1lh!c)tPRI+@geRv~4>E0QZtoxQc#xlv(=rNI>!!`Eor9BeD9R%%QTTGm~B)sh)&H8O))10|IqwZw5zT_9~_cv@9b%Ic0RIKW`~ESmUN9y zKb;v*Y}jS98Q^_SQe!lD6Ew)j6$&4|)g#Uk!v4Pg?q7+BiwVnLVz?zBAqX<2R(Y7x z@>13Kr8{*`G7*Cv(cqPT_rq(17^Id~V4Y!|2OI^(I8bt()Y7=jD!dFbYPm&HdO4YJ z1GjQ^x&9x&sw|PFOCF)N*S;byvb8Pew1bn&D@o4j!QVfpdQ{mhy*@oV*kmTKxxNTL zl7Ek!5SHgzteP3C9-5!uIQYEs{0U~mPpA9cPo8@7#wH%IWAEr1X?s{ei_%t9zDii>PgbObTOEx!IOR zzL$jiUY1+4`)@m;q}uokASK}6*D${luMEwBfz=}(wZ5UOg+lfQ&(EK+Td8^KpU_PE zXY?{g6TJR*atdEAq)o+JUUs#{C%HCgVp5sbJo7(~q$5AgJ)THxZgbK<3#zI1R|P6V z&^r``P{sP2@=~(yT%t1_GNN-*aFQ`GE>4Nn#v7CT$$uf!tc+|JWx%?G!E~*7PSa+m zs&5TxZh?O?vaekI^%t>hy!wJDB?IZxgM;1G**1u3*4FWnM=on_dQ4_jr`I=Aq-YYo z7uyT-PaoNBOpqMz#)6uZi0Bk!w$jLKtCCEQRtD2jVwI@Gbfd;# zttrY*D5|b<_P8HI7^d{|ABzvJ&UKll3Rl2s}RuwMrMA}uAZVN1ll1o(m<6+|FhWrqT3uKyt` zj{;vrg70+~{3@r5ftQLn=-_Jj=RqPKCK%-kE~~UMy_C};Q6xP$&FzExS0hwyIS1Uc zQ2rawB6YyU#@g2U-Wi48(cuXTD0CHQlyMuV=QXmNNoJ0A`WB{Yua_72H#0Ij(l|He zWf9@g%(QiAgH6NBlUYxD^N2F58}ked|4R=;PR_vn9d=8lt-x61bd=d#9c9@?Wj5=> zBx7oFD8!E1scIMJz$aVR;6^ha9EQj4zt@kyT9T0 z0%>NmoCDDDQR!6bUbLzMVAC>%zHtOOTa@M`M$w&cxY3jy@OZJ^pv&#^%`ZxbU8h-% zOc0}G$lCr@Wksu!JRgW~&=TImU6qn^|3;f^f3olf%EG}8l~AR8klx*;z8hN=eR5N=`Cj^%@l$pJTKc@(Cl-i%%bp-@l!kaFyibR5Xux-Od72iqU9xKAQ7cse0?q-oKh3 zrD!THEwAsbvsmJzQWEva1x$%u&DPYQFx|gv{>C`;xGE*PYjrS*p0z$KDpsR;SYb|! zOUkoW)YUh6kQD6f!XeD-b+#2Y+e1!(RNbv>-kz$!KyZ zzNppLuV3P1{1nx<(dpUcjUD6h$4{J)KAn;qK`}W#lU;wwI1vm(e&BP5qAAU*tF*@I zBeUb2Zg+bIHG5f|xz1Uf%xI>%F*`CY!yFf#YtO3my_g+fxz^`#E$?4~6XwSf8U>^P zkWb|{3Js6qT=dDn)iaiS_|M+>@`L_um}6e(@SI{0rWmGf$p% zSB|aB^!uKE2e?XnqG;6pSo7oo&4X?hdD`&kb$9AwRRE zw5~EQEjcAEDb?DLs|}8b&91A84>JvVx(A;>_jb2d*Vf-T!kJU6P8$xoT;$vjq{e1F z5-A>=-H&Z5e$$AD{({aCF`8`DO7@K&Aj}L9Z~uGnt(J;R$67?NN66JZr13~D4BZ#h zvR<`J$BSr6IAzUZ?K^>6S=B-dQ(lFk47NBk+)@w?z<;lQ=$c;LIe^M7MKxyxXed08 zcuj}<$NRv(X3xK`B~l2_Boz5Q95ukTa-`+5a-?i)wv@L4sl7Ksc_zkT$nf9Ig(7hz ziy`wbzWMHE{k|VEOqIdaunzw3oX_s?&cimgHcCd*MMV$Ex+$Ks zGE-AD$x4de7#|%Qm!KE}iHh;Bl2X&@iRH0+iC>7dhDQ^gTN#ca6Vv7zSVJyATo>>e zCH4N_KAnHqdHKTksLYg8;+Pm4?Z`L9XXRu!upiqNqtTRXZ@!v;KG;!Xt*)+bw3Zhn z#KfnhQdW{NIwA|UYjr0&kM6c1 zbk;}Qtq$0jf3Jo- z{Q2_6ZuAKz&=P~sP&qs~V#^BNh4S^Uh^w-gaQZx1Q_|?@Xs}z;n55aqhAIiw9nRRw zHiuEsBqxUIbjBu+&FXR%JX%>A$gk>hcremiJ0URzEu^c`OA^tq->KmZVTH4u?SpgT zV&L|xFDJ|#Ykh^gGwAuD=G&@D5Ga9tNu4Y*B%nspVGcp7OKN1QYC^sUfXRp457MT9 zOVV}0v$}C5G5Yr3{W|H0;Zw(>XsLbG%g9!_b$%g z;r&WH=47GV{3kg+hyHfC{c>*&y2aGkG^WcF9-GrMu{hc1>FF35Y;PW#m=ar@r48BQK42ur}=q{!aZKhp1=ogE(R?e)5AZLR#dtFRucus*b8DVq3@l%krv6qBjC zyT9+r?BwG%b_k@-Wj?Dk2b_^ykW`!PX%-6_v9&>~pbk3;xQ{^%ymx?NOLTTCJ%8+lUd9F&3f_}Q+`XXn1xbVj9aVi(wEKjvtw>0ww{^D`w)$#y zZhF9;8%g089#zsm_eN+TyHK;0wV!0Y3Tq5m$50M_?EhdUg`^&U74x~1z^N89C_k4q zM<|()gKyrw2}2@~++2!g|I6@|m+Iojvb53XlzGjZe?Ay-tvTN8xby<6si3Ld)l`rbR4iSu;O71+V{}EI z?@=;V!sNKx&}5CljP+1xVr8kh*xq7q>S^uuvNPLVZ&wis^$6@*~f zu%S0vmJ*#36YE-Ix$5($)1CEYAKA>*%>3GRY9eB^il#6*A~Yt`)HKjOw%(UvpPjDDv3t6vXXl>| zt)E{BBU;567!)M%!FRCuUF32Ro=3o8b~{SD@`ntXeQ z$zXWxZZ+uT%FU{OP4ilM9PcQ5KOJEEB!(}if+^`g=pGk@_Erkw+2}qlTS0a5dy8a|F!ry783DiG#`Bn7fKI4n5 zTm>%wi3#TU(f<5&uQ|n(WNd45*h}(DAojIRzj`y<7_JGP+FfBPKssF2gJf8_wKOX& zCA-j4Zfogq)R=>8awd#*H(Amn3p_rzQOh7Yp#8lbHbS^5G9)@J&y<;4YR$KFqKVY! zal5Lj68xIK3yPr#h>i}`g%#K!{@H5lY>tNJ4#Y|dl9J3O=PH24Vt#)M*V-2gG;mfn zf42{yNub$bJ_pc8gk(-m{+s_Sc)q!sC~j=7ZeX63rim>~5@QcT@o=FoC>*7opxSg} zWGMP5b&k1trq8ijW3RVqbY_|bxve7#=5O?w!KHG`wj_8|u_%Qra+?WN8QXS42t&ntZ1lB#H|QV1JsK=w#@G!>y!0 zko^q0-9}?tW|m@#gkYj-7Fi&3F#%8-9*EhPqp8!gdiC{Exzf@M^V2i=;(7bHPmD$DONa>xItHJm>nENGwnp zM+q7w9IL<;EK9PBmiB%3iIO>RPxIy$0V>FpJE=r2Zj9oJ`^O5N)#%F?EqE5S1N>v9 z-Noy;hxym5tvwa}JjEa7FrN<(Hs>cNR<>8>R@UCE`!+Yvw_j7=T`+>?>2l=YUunl* zY|QZeMVv}>dr;kLHH+Q&Y7!&0B6y{vL>%rmm+`*^wJefq-J>*{IlDD>3l8T7%> zJLA%mg~_c=$+tpA>VMMP+|bxs5|>e4kr|bm9Zx0}5~D}u5|1+b;Ow-=1(IbF>TJ4m zXd9bwsDcDZUdh|2Caks^Au)B;`G-wI_HB@KQ?8JUGT!1HjU8=clhR^PRcw1it}JOl zEN4gfhk%k$NCeVbsQN+5Bqc^L==J}%2C(>yl-`z1mKUE5Ig8_{kM&U&&)f!7uVDIL zGLI6Lh{WQfAIDlCt2;W8GB_4+gK2Ss0?P>AAX3jIBD9udz%R@(KZ1hFmX0hRTq~Op zQD}>=D`W^75`GOknqkr_f5pezD?hU{YIRxKq#LI!1m=DtD_WBfsfHO$%TlTM?EV4^ z6s?8^hF0RFDHCU^=B!LzMp{a$k{*_tm64I2nv|5Beq*vwFeCdbo<3~C&}?9%(b3#J z_=fdZG4~eiiZL-pte?+6?)&C#L7~YObCJ#FaMDG$QYq^Uc_k!QA=Ng$UlXH`&ULy+ z`pQgk5lQKph2{19foqF`9`@d99%!3-?52cVYroHFxYhigY&#@6Dj_x$&RPaFb9}bN zZnHRh+FbTxxEz0{k4wrlCPd;7n_JybW2vy!@T9C;H8InwW9Vc~i`RFl)<@s17+cSh^udDW}~#fFsP z2w`n3GnXW#W;VCR=(LH=-i9nwMeD@Y+!VUSbC4f*56-Tx@0r#2b~3<9Pze@PMkP(| z?e@Izy21D4vSiEZ4Xip!LrFZPA3@u_&Y;YU)$E#J3xsj61FT?`Pf}tX z4+FGtwWWaODLJ5I?>AVo^YoH!HxbQmuGim7_6|i%o}0G&#oqhv`JpGTUU`RRA#hHt zzujJ2IX>Im!GS|PuW&CeTwm-=El&3@);)eP^vKoYcxWr{n(nvgi|y@?T4%n32%s(3#{)gV?%J}%iBvW2=Xjqg18g57s6NiG1lRu)y>S`C2J)ZSGGtCD}WwxDX-w+|!% zC)q@ly1v2hFbO5v)yejss3agjiyRq#S7TE%&&6j-hQzWh!LqVgHE)snDzER>w1i{- zYt8*$1$2RrE_Y@JrG7SvugZO0Broj7Od(wQwQ8R0at zVT;gJ%wXB-&h!^l&XBhm$xBNKJ`Hj)&W>*Hw%9e$@45-a-Howd8L-Qca z)l`}mmSXLla}Or|t5(k5n$wWtcSl&XRph?nq0jH$+WgElBO*NR}T zrOHy_Xz%xWI~{gMc2rEhd-*-Z3+*;B^;p5#|z0eqC2rTSuF-qOmM3BQJ#@lIt2kGI(ZnZF+KH zj;6}o^rOYqw;UU|sBo0RRE@HLic9h%+YURPs?ZMK*$oN3Ac`dTe|d0#ETDI<;t77$ zNi%mb$RpJQkP#!|$$eCXPzkW4@^S0_SRlZF)43%^^Q)Cj9}sQc5mnX<~tS1ybS-}OBVm_VrygR*|@i7a$tCX znS{HoY-*vyQQgw&v^u)%O=SZM&t84opBkGTY#*7Jas6{aRbhNWZf;pcgkB#O8j+Yv zr4k&SlxgjFG~(^3X8qWnlUrpqMMP3v>(g@BTkYuT8ku?K=G@QxSjuEctog*3G6=$^ zT?~N4^w@Qy1W~A(Jh)0e}>6AA0ibPz3 z@hNMzjNO9ETv}D=-$zNk0rR(e4&zN#I?uz?vlc z_rm&=gdX92z6g{hL^CNP#V73#k!iLl53WYQ6Bm6^kt0KPL3#RH(f=KR?CE8Ll#?UL zwWKUnct#f&7UY^T(*G$dBa>-!W;#7>Q)U`q7T&fg6Xv!#C;y=s-f=cws@_Fw)=FDOHl6#n zo^GSw5E06CEO@?n@@Qo4&6~9++J4CubEkY$R6-PG$Cx~QQ>id_? zNAB?P&8z$TSm1O&6Xtfom;_QLMRF}KMvcn%d9&PzLnLTtA(|UF@Hh1;RV!4WF495L zI#YwLYCR`sihyb^$t8{r?oHeQ8Yg#BU!Q#E3Ml2i*>O+Lqjt8+(dn3Y@nUsrV}I+2 zak<*krgtXO=8O5)t1Pi~K6AN{TWz;Ktnf{=J#KEbSGIOEkCc@*p*3~!WoLGxr>^Zu zM@&?7NnV^jA~rQPGBTwgJG%}tKtph>UKgC4Rpl9SHFvgGnsZ951?g!Bn1sL}smd#_ z&TpJRroXF26a%HHEyXWJvmh8wHZ>DJ+8bJ2!u=SW81=YYS%W1g)v<$7Q2}uRS}1-x zn)*Mhk8f^IGIn%&6pDQ3EqSgWsTXEQ&NM47r5+iD7D8eA05>@fd$6WGwP zKE(=i=(e24`f8H(gy*2xqK@gct%LnN>|x-8oG7Qktni$DxH$`!NPKk5XjxB!O|9%d zGmvHzosW+KJHI0jP{A$VBs%kbcUQ!_e@oQf+Ij=2gsh%#!Y&aOc;JnnufgD*mFqQ~ zq}@MOL#d{v2hKctCNQl`8C9>1(I*TUFh6#q=frPHZHBQA{g5m>VA5wHX^@ejm;zZ^ zu74Qr}Ix+;~n;TXxyDG zc8BYcXQ;oc#a!Z&pl6zM8U-BhOGLC<=U zBC}#bZG8iFgDfP5hH7(o+BNAidBH6AD&9IV+S^m;$ z%4&Yx2XC*hy`w1y$Bdq}{hiItwU;C+i|j+bKR7R^q!rt_Yg*d;5%v#JL*u^zP(*I; z%k9^3ePKfqCm%ybX|W|WRBvj?*T6Y-);k-@LlC-))CWZ;M7v)+8O2%Nx1{)f|CGLM zd%4xt(2cP1xe&^L3+qY}S{V?D$ur3?vcM-J-n77(>-VfUIH!dpn_P9yY$i2 zc&oZnfnEIBZy7srrRrewA840H$}CA$@l~DjgzN>Kj6kl!7$`#!<=KDu|EI872+nf0 z;OGKp+@Y7oCkI-pTy=I&6Z<4%GxWdS?W~HWmpZ_{e^IxWn~M+%d)xb*?$MsM<}R0e zrnsyh9k7g|&c3d;p{KL9hiBivtPiv{kBnQ>qaIrGB10niRYjVtb*8u|{!n&(h*l>F zcYbx<;7G57UzXi!Ey*y(8RNtBkx{8hiI$1yeVuN6sSqe(MOj1xh2kl6>l)JNCWpPL znH`G3!HI>n<*j#bUoUu??RMcxpuvk&?JaZW#>RhWXhi0twXGBWCXpGX(4k=>8M+0} z1j>ucC|7NQFC0)M&>lhrq&Y>mSpXdh4@5@ATW|eaLGK`ggmLTo;&g9GOb{JzePXd| zc7wA3;3c8q6;wWw&^oRb`IH<#F-h zX{LvE_y#(?S<(Epmc1*jMxS3>WveYNwv?I@sy*JJ(dm(XSDiWCoK`ln`ELEy(y}re zGPn9>2PutTL^2=ze*NoFuqusD0wBt}ci-#PXf1J_XZ(J-voJpFc3N8tvYRSUTpM&Rt}PRTP~`@$ z+(|u?kcJ=4jg0m5cQ-iQPkJ0~cR@x&hr>BkR?YyS)IK$7Z}Utc$nd7QXKr<-wK~Sx zRGgBRsn;2j6XFs=$fQFeq9T!AstJmWHs@wpoGjVnNZMjaiwccSNzYD9s%o&>JEx`x z(7cw}FGXbfshMLdbU~{^=n&^4hn=uxjnq6I(o?CwPYW>Z|{OCX<1g|=qQWIt) zI?FPJqai{t3r$meV_{tTy?D1iO%Q1jMiz@~GpZT&o)Fpq+A#rD*$I>8wd_8vj0M9rtE zjBiawlS+_=vVJ5U>C9SK%&Sef{#;*XEsBT17%&g`#6~ zePNEs|9nzv^Qq}^5A0Gn_z+aaC%n@Wk6o~QT3M6Hj}K0VA+Bqx9J2d04;rSc^WqGl zb^U!K_1`q{+6Ysv+vBpPCON!W!BOE+oKG^-Y{{BPgJ1KvaypL|nMN!79wqsPqQSAj z@ns%cw*#b7f zp=?n|n3mqPJWenwLG_-VDc@O{0JQ4TgkRl^QhU??OHmA#<~<&T4JH9yWV5Tkovke` zjk>Drz21&m_TJo`?%CDlwavY=k5{6haR0)1(bwk-v(pV;SFPod<6(t+@^Ma?+tpcD zV9K}VtPp|~8ekfF)`8^*EKy6VYwiW&zRGO8Nbw_;GR{H* zc5?1+6b2mj+NyGPD}r(exw@>(%nT(nkd;hP%p6K;VtQPK#UL4xUXpI9Q|cPM`-sfr zNP4Z|^Pj1Vf%UhSj*->%t@qoTJ7-^*&K|yfz0M?zZIF59WAo2ntgdeFk<%})@RFuS zhds!ax3xOztcel&q-tGT_gEK5p7vHIM@Jb@!=7&arb#fAwR&1hu#d}WYBTCXSeeVt z$VjwU@&8W1_bl4lf!a7~Zq~};pm-NL`p;*_A9px1gF}YVOsWZQLug zpHZB@{R89T%k$&+sATM)d<5D+Nm!Y*tWSrU+m#XRBTF#5%La$XSzg`J>GBjRn*SV} zT4u<#+uWH^wK-Xij;@)t`T1qGFB{E7oh(~RgU!BKpE|0#JR_}n&UR)G&i=94jqUe@ zV-?8~;j`Ir{(9k?m}qj<=j;2M?H$hE&LXR;(bHX(9A|a**<4Q?&S}@++0FHvnJ4y) zq9&u$-ER%nMrM{&L#gtj<1vg=NXBw;PO5eZIxj_0>6L<~L7R zl*XKfMh!I?9Eac98|hQ`_6?39bT3A$1Fw6-!@4f|Tp3AbtE(&u6IY$Vn2>2IvFE_MPWEg5CPMb8?Y1&YWmTO;8`t6< zcsh%DWOr9ZM089>%{WxInb~JEzNJ^2`)3z9SL)Ut`w=*k@1teDdkBJwIaGa;Nnam4 z>F#>e?r5w{)N0~u-R+iU4|LoNMWfg0!_7%icbcTcT*ufHO&+gzprh3snj9OMSJ%?j z?;i2Zz1$ahZ33&>V*+BL`Ezr1@T_O)!QmCvC-A(7x4Nk)Tx!9(7%<ICS#Y4MwGG5zMeFzh{eYjTbS311)U%^^E7KkMq|~9o zX*SQ&&gqAbKQ1CZB1ua)7qSOPS5&|TPJR*;t5N>+lt}#H?kupU<;VaR;ULH(>@V*T z?d3$V_k$~c7G(2}YdL$+fZYMrI%$3>J36jrx+Pim`t6#KNc}Ih2>;@62e~sa_Y1_% z=TnGtWAii6*XO3YZ>zDE7XCRu$1DUc;df+twWKE+A`4qb!7?6U zz86ayyT>2@K|-%|YtX+s+2ySFj*S4Y?7zmE@@~sc4vw&UJM2x5SP-|v z<_c8|8A+*G%+0j*lb+ed+4+}C)04dw*~vMjB2zLjJqy6+U+$iM=J0|wm|DO{73YA@ zq4-Z1TzwlsXV)Uwq2lYef>4d+Nvl=g8{n!T63g!K-F>eL=!ODM ziLr7hyx;}tT=7GFjPNrB!h&cSHp!v68O=WBHW^081>yl+WL2ewRmB-u`Gr*t9>j`Y z>>M3_loJ|9^#f%(Ueop6z6wiker|C=RmUTz#g^JqQQ8rfZL@Yhd(l5VGto1%`}ynX z!o;Y%cj*7{wnl5hGNMyhoprjakz$NZDzauo8}xKJ@^VGZfxQ`vPM^s+TN`Z1DJjmc zbmTWNLFr~usngXay3*{rPzk$zQ{&H`J)eFuIivW3XII|7XV99szl&voZ)(oB_!1wY z&DT3`pES3-8by9UTG>A}I$d3CA&*1Gyz>R{f`hIMZyBZ(lN<&~l2DUQfAn8O!OxXN z2Enl)>wrOU>=CT3_YkS^LPaqA)5XV+uw$MyWROyahUYa+tnLts?=FJD@#(SuFj!Da zIMy*hCIB0xET-W8@Z(HNsP+S8@rAwH4Q5Uy7FEi7Kc6g3kynReqa=Qkdt9eM!xP*} z4IKiz1Y-uyCV}mr#LG$;okV5-YMP9mL>Uw}Xe3WWr-&3Axj~sc;T7<>uiMqyfJ|wb zwkRKWNe%UJAWH{=x!^Y&Wm^J?u+lOCGJ|7&UjW(m?1PM%)Y`a6l2KCXqqXIC7&w7r z=pd40Uwr<=Vi6!`H;xTC5!XKA7fF16x$$;`UjM6k{NUJJvSg=5LyigxjtUOe^vqP| zo1VMNjhGpaym4b8wc7_?B!A(S?R{w#{GoK(Oq; zJ>57XqvU@xlb?p1K%vo;S>x_+b$0f72U>y=p^FYnOiZ^l!W`^g-&^zdeT=C09wPl~kGU!lK5o znOa)l%YaI5rMeCxVHV{+H6RPV)aqB38o8SWtg6xke82C6fmZ5lek4vSKV%Jx@0=Qh zrO9ff#M=K@eg3~VPR-gOZ`ry!P zL*WRkGx^R=dr_&~Hf)=msJ1tzS|`1A!&5^O%iHIdpSPzy1Eaozu_jYom8Hn;?JP=+ zj?{%3lS1`O1VdtD3Q8^c`cU)3T5EZBtR;(rB-CJXR@StRbksJFPd@7-Hg|O*gq4o$ zO_i;2VD2?F83`Qvdec+SpD(Yy!R~}=h{~2Nn5kJ7&XtX@y^A*f%t5^42OFqt^yYT8>t$0t%96RST2 z&U8G*xj|qnW%AwLxBVzl(iRj8Y}H)ezyFh@^dKJTck*mmZw@0f;0NZ|oW!7UQYf>z z0i0KtRm%+|5)7(i9eWkZ$OH6-B*zBLH5CR+A!@q}aTL>Uq$Mp;DM- zv0AHy&_!2}6uZVY`x*A4yz_xAtAD`x@@)6@+fxDaC-f|@Lue;meirTNz}LS-&5;Gi zi!YZaB-%%BXJ23xhsfUC;u1YK>YRd1xLUzM2-y>pBMt$kX(hc?b;EBYIR-QC?7M)r2~`(9~Y`4Rp9m z6Vp-*8CEY{`uTadF>l`=p8r3BW=5~PW@Jv*S6AQSR|AqhzTRT@feogsg_xjF#DE^= zINYr+7goeQHDRb-goj6GB$qe$4S0toBF(;96_d*8&JaULytUdnHZl6_`NGob=9{Uu z$@dsCGM)yt5)ai++~96LuKM18(6Y!V08_)|Jy@g=z80-*iLGiBmiCvCoLmmUr(pa3 zu5!h%Cj*Wmw(=5_)m;f5DzFxn0re?mGIg&xz&S%=zG#DqMa{2!lKgP{Cq`A&?;khj zCZAZVoVLsqvpKV*vAn?6)mw|mf^clS;Xm?W;xZ)~r>e6zj2v3E2#)Y;$N-bVYofyIlK?!IBtbj%)KV9|={ z%nMa-b18a--kFd-m|Xx{vT2a(zxb0(jU@9vI261~U+e5d_9Wy!+y#Z4%a6x9FQ;6^ zF*lkpT|)We`K<%)sGR+D0vYq*{eciP70B1eCsK@`(9S*r;y*yPa;^o~ntjw?RZ0m6 z2g6LEf9CWd50mB_|40_z|JaX|AGtwIz6s(YUl1fp20y(A+* z6*w9&+pewgUEQ!^L_7xG0(1a#_7-6Yd_%7<&S7KgVQ^kte(}Qx6TzKCh@Hgk)5B93 zlpDKm-}2|6pFtVm>FcU4&5zECM~PLV$#)cF6lBJy!6xgky3s`G4DqSSanbr9eX6;# zs-Xtq+kd1}3R}0_+0|o(tglV9RAB**u$R?RP-)MIw725@KEFKb>aNd9$cczGS;yyQ z7iobKu1`M|Nhyi)EnT~l{ms?2we3CDnv{>DFT^();`Qg9@{B6CtD~;Ay&1cc)?T;M zNYWSFTWxb`~gq719o(z5Wk)Y1hFtJCD^O{Eds2XMKfrU+8m&( zt#9sz?+nOSxRn#e4I22I2!J>uVk*SdT!4$b0M+T8i|WmC@<>+i^7UwS+BMoyU0;!& zV9c~w+v_b>d%gF~((>DbFZ?RxDFZiuE7kO>*XK3&ds^&O_V(_6?0|Z_4OUN^r|Zcy z`an-H9h=(z{`G^;RT$6^3*pGkvUeo!udB0!z(zgZe>E{eX<81$KqqiefIM0p*C z$RJec*aFP`->MU8!uPSdCM73})4Q{~4}o*d1;|DPETB5th-l~0-GOHRjzmGj5%}>I zx=AqSk^?nCCm}!ZA4W2=mgGU|>30mg6@)#Mjid8FUvA*zQ2>k~{LBKK!orvPAVoEhNwe|JP>}xA#uD&bRe-t!J*cQF0s}I}T z7py-rr4kw^U(|Sg%lPW|qK)_E%hl(L&mYeyT6W)xhW6qdg1Js>d30J*LO8OV#$tVF zZmPMY!PVim-D(0Mk)g>+F`|Fr4 z`QB|QG1+Un*zRrbb=20_TAVht$C!Wj0%QoSmdfIXmZtgTg{R(`x&Hj3fxf}%RM~*%C7{jH=mC?db_G?8tvxPlvtEesw=7+M@Of9FOSttko&H-H2ZIM>=SDq z@615|V|RmdY`{DH%-hsI+%!J)e5P-3>gnq1m5mQq*B5i`)|e=x85&$xNqSUNW?Ga< zl%=dB-0|U-;$VGTY@~r!$p4+^3e{-iYKNaVGZW1@HqR4R_n^z|dxE@IM|*RFY(#XT z1UMs(Zi}KGua1YMrS+C~^!6Ts4H_lAn2n8h2Rr*`Tkp<%-E081x1)_60+;@az(+<&gxjDG=RYpu$;DNc2QEhB-2~^$ zi{st(Ijg~J_Ma#1or)? zei4CDBLJFr=mq(YblmOeWR8vw6tC7$SuVbF`4~eh4|RfN|HEHsXruAL%%@V^ts6*y zY}Of;-mcTX0#Hh56}%UFM_<0l0<(yS;B3TF1vkizyqUlGzw*xd7E8@aW{$4k#l`#W z{f(u?<@x#9*^!p^=<+;sP9hxL@;b;o?e_APj=qLF&2RM)kr9b0NpS|PJ~7@{is%D- zQu%;5I@MI(=%}z%TGO@q0+Ec67J%7QT$Ntj=o*=td^R(}iiou!BRo32pyv7drt~sT zKU@aU3;NzkHE?nAZf%M4`z8u{-!>o3v#7+!_07f0-dw5`sMGolKd(!n*`)Bu?5+u$7 zQR#NEP9cEhGHtL2oG{>q%A=%M{xycn9XP7m3isdspZ@D@-|WQ9P}gu*gVT{6W-{hC z)HHNG>zG(sMXBtX#=jc(f$#12qt?~8<84m|2S+^Z!_$xZy-z*EGed(fMkf|tzyw>| z+&SW1et9rv%Q5|n#gvfQS)P&y4WR*pwvj%u8ZnV)g=b}l84~rOad~}qjjrfnQPty# z(!$1O&$Ef4j{c?&-&7}DSQHyU?_=Ha+gZblt5cLWlf-?=?}J1IQGM9`(MK zpTf982x6R4z$YPIA+h#<2>M9uMS)W?Wb$cMhQP1Ro`LA$(ZTKh-NDViK|-(O*_=F1 z&yi1sQe%vF81tnuL-#hd*v+2v-G^6U*3Iv09Y>$&aWBnu-AL72bfnV4}1;1 zmhxFzCwJfDWs61t&Ti55)%ht(_!|`NtFM-3ebHn6P4hS2z*DHPl~de}j-%4# zYIZqF@+h~nN=6tM(~ms6xC-1f)9s?yb1@aeO{lKT$;`{Qqcv_X)@icx2A({c@y!f+@v(Wk zw!ADex8v)Bg*P8bJb~3+AWR_iVRIM3yD+scEP<2+SoRQq&7dX8R@>VW9o0ft#C`6^ z$$^`H7txUW`%0r)ufi3CvO1wA=Nh?(T3*YY2*Wa|q7^2m3}Q2<1c}jNLqnQ=eS{C* zGq-!ZCEwnan{7#9%cQ2df8gob()y)ePO$e{*f*J9KP_y%TV{WJm&(qy*bI(vd z%+C2Hu&#godTwzKHQ+B_uU~a{xc;@V#5OkDTG0cbN2a~)l?CM$xjB}H(cz9~E`vTg zzNpsO6wgS&6cdzbw|03aM$p+AdOk5dKjUVP*5RzLtm>Lw0c@zAzUJHq-$2L@^Dkbk zEHAMAgYCnH$m^`HuJ7;donCxAyEyrHF)@Hha*wOK=lAZRClj;tvdSw>-dAf(V3%o& zun)-iN!k91Qj^INw&E9`ZY~3#zF!1?qKQNLY#@DBD`e#|oGU(kJl=n^Jl$o9ViP$y z$u_+3W}8+Ndld|Ocl4}Tfc(Jw5U63G54jKn2{XMe>0&D%v>ZQJ?P4jw_2}*pAOdPx zX{0B1gp7!vd|7jFcl2XFO!k?9EycLKx$cuQWT6AY!RCG{|WTswuS2!Eo+)wb?D3z za%XQC)bO|dg0Kc}dr*0K!CHXCTdw8{C=PrNeARsWAy(wPk-rAM>%Nh$`oI4M*7fDb zPv=-4FK(}dQyC9Q7=YEn6pB+ zyu10I!oS>pHAjo&<<7;oiy7}RqFMpQt7PGEi0?SlA9ybSyV zx^8biVqIwBqWDn~0=__80itReO;*hP1-asL!7cI_wP{5&GpIb_`(u{`I(m^a~r;ixjmM= zkV@Ee+Z_L`)mq&|s^jc!D0x_CjSkjFhZ~X_u`_%++mjR(lbxNBR}m2sVKAC>q4~|T zYtP;8vC-+Z^_2zR5WSVQ)>>=J%-k%*A$v%@;a_n? zEdV5_9t0!j=|;`NYkanXiH=@>uu#TH=l2>e|O)_`ug?a0~6UV zl2HTc+iSwkeHa$OsK7V>wf`%3r4FW0#%u7y(TDTRZHTSwe_{u8VanUxk&_e^YS0Cj ztadrf8jZOkzbMC?7GnrzEip7Mx1g@0G3A@)Kk34=@=O++CC~KGXfT&s@R_$1mgJd> za16CI^$kBAA0NR=1{z6PbaHO<^H)1Zyftr#wSk-e_d9ll?>F$Sc(%Ou{`1X|_cd{n z@iEx~hK_@UMUI}~p^k>OzTw`Y{2FVn(Og~O9&L4a#)rE)duKfKSKW@jo~rKrhzduW z-P|}dI?gHzjK6m@=eSoGl*aA=B=KJ^0BzafJXu|uDpeSHg5vfLEaK*St z4VI$T1^m@WDuEQ#aalEJlgnz?N*Ypsl%Ld(`^r{M6H;S?e@WN*Nlpqfry}3}k1ATZ z`R@$CemyLY@L%n`eK$5SH`&*jU-`JTz+|<#2E3lZ=bq==+Z%_HLCI-^PiEX#=bJCz ztv&UQcei?`rsq~>CZ0W-U7nj;dAT~VI{$2T{p|cRicc52PwOiGwYAoiRcSXR$n<83UVFOIHu20dt74LlzH zJBoN(VC34ujbakZ9QG9wma=**{b|O=l%E3WPiR!}y7_i@srjT_Y5=h2(+{~!KFxK2 zJq!ct{q5Cfk1Vk_ng>W#I7a5yR6@40X?QEg1FZL&dMXy*E4zAiw~_ow@U@*m$>UR{p1azRzOHze`xCB?*f25&`)(e);XnFI)kpUJ7$u*;? z?LWc$lJPR9DQX14G$LREXBjNBawqBa@bG<;`ggTecy(Z2QNb>l2xFH3X-pyYg^)vv zOYf`!vE~s82Ag&I_KpPlCjuJ<@bxtU8zN&boJ}qLth?*LH-kW$HxIN6F<4Vg)~KFA zyz(_%#<@oyzToh>xBli&jOWqAo*3mzP>f^9u^ic|EOc8MZ$jeL6VCwrqnnKO-S6t9ER5 zlN_3P5b*f^U*Tu+2b!B1omg2vy!yWG`%DNGW+H1&SDQ}@iku#=yWZaK9dww=hCR9A z*)GrX+2ZQa7gJMnOEY52XE6>tZ3F4aisP@`ed80;FJ3P1yxrbE-g&+K@#5^Gi2Gfh zUWlfSz>2^b0uAN#{L9yX#7YU$^q}qq08}snbh=s6#1a5m&_$$nv93pQmE46^Qb zDI^}N_f^>~DD++asViiR+5UEO(AYvd8Au17xL`cA(7>HufpcvGfbJa17=je97 zT9e$*`lkC{TK^?6iOKKzt+k%@tY>Mn^U8`dGP84UU%LOaQ1|gldb2_MB)hh|wnE2P zWd4)q1!Y|$bvZ>%4Nbb{q6YKS)P%!k>gltORxxwjYA}UunG>8DnZlhSu^zM8MNsXU zhs%M4^3E@=EO|Uj{-rH+g6oT`5GsLvU)vW(_VD~TKVY(qC;)TYh&v9Q@-(%iBkH<> zpb*4~MXl-|DFl;1v%GNk+fH~lp6|jtk?kZ%YJznbKu3cq8>>D>yDBsB`MDf_=~+#m z2t3uvfw>ClSP?>hr!r>XhmIQ2C8aR3PH9+eszg0HFG4MP!sms$BC*CSWKE4yT!(;{ZUF|@@tkk zw|BHQH+(89`2$m5g|c{Eb~UqID&}jC&45}L_gorGdF-W5ewSZNE5`^Qt%0bD;;wNn zw7<8pu*~iWUXJ|)DUl=lZ21PLgkZ2it{px&N9{>GCK*5CNQvi=j_f3cb~Ze&`*WO< zoE9VUySB<#nP{itiVV50i$50TrCm4^9~YO9crEkE>*{)K=D%t(;!`eMy?^H(s_YH#nzE;jZ#Ehb0Dn;v8P zr;^g_8yMxMKYh_;Kx4uL&cZAcR9?4#oAufwIDGDW`P@im|P=45F`o_ru3Z>XB9?i*aJ>LDQZiJzrb6u+N9toKg-<+#QF3+ zF7t!jhBH9y&H$#QX@S(n{N!K^#agO_Bo}6dS zKVBRn^4{W%Z^6-Lu?-LRcXXM)c9F|rM(MVDIj}slJ}gM7wn9Od$?#w5imPhNKYpw( zV--bHYm2@zw{lSTHuH_Pp{%UFQrlLUeZTm_`_|mF97A_kFUF%2LRDFYd;3Qws^3+b zZ59eHx_-`SyMu7!h)g`3bfMyqDSP+AqJ0cPYZdb~86)>DY;5tO2e(0UXD4E9mb#@5 zVO?z}V9Cg#XO7?%VSFg!`Uyshk`p;3kP|I_#yh$A{qfw$7 zxy%d%kE?2Csgo(BrSTL|vleT~$^?i~o2aYK3hG;OZIbXG)D6kR5rguZK5Fq4+Q--t zF{Kr8Bm(Lw#G6;~_p-)nW+A*{ZKk$1Hkg*hl@>>e?iUu}wjd_pK=`#)yiTXlaN!G?~NXa?Q1z+%9 zk)w+;)-O>VhAilJ-*+tpR%Wdx)?SYFRkDOJMU!Hw%PcM{%EGJ*3&xA_7w@OPtZjII zYhUw^2}zf)Ub%7e?z3dg&5W$v?8lsUil}+Z3yVIr_ZqtUjh&y$-n~wLkd^VIYS7p; zw6GTrUnf-V2RD|SV@QTrcI4YW*`8eBI47y39C*NU^%rNp&CbgC(Ae5km3iw!1B+Q- zl;}HK_2!|z(SEDreQK?~TKnk^BUtIz(o1#vVf%!2%Dw2~9rk!xO2e@cghGLjSMydx zIR0dyO#vbZ6DsOQ0k4Eog-^byqM4PD0(q_w1gas&@W};5Tpft-4!>|p6DgLWBjMtg zxpfr0N_QDwT=~Td5#_1Lb#nh`wqscU4?)mZss2g9;r5c<;xrGA8vFbE+FRQj$|?-) z9izh|o~d!abQ$EAR`XKj%K-!tuAU7lM+XS5aC z+gjiD8NMYl^3rX}5Y`(?;R;~5d9sJJC#Kc?YCGuRim z0tgdmG9&&72NR@3$Buw`cLtTgq)Mw}x-T4bNweuCB}iaaZX);)#PRJ476q%P>nU81 zle1juOO}FLT25il8TZVzlnht}PM(p~&)_&>NfqL{zqbed2OFjY$3H>zi}7d?)&jDQ z9WIRZQE@phBH6!XH{A1AuUX#392A!`2%6Wi0|ZZm=ORq=afz(ehfq@j9d9c%C}r~g z6>3p{Dj=3ftvq8SO0zHVC=p`&kN}^60($YjcWGmD*@X_vY1e%yE6KW*6#t4e;N6Ei zmv1o@cj=zy=F`V7%PI>~{#6r+`*&w9q#)0KlA^guJNrehEUqdpt*w4v@Ugv*=`~|l z)%!QEGVWz&WxQhkvYY zXsjwL$gQX;EvI$e(`R%o8TCyDJ1e9=HWpk>yO@OL_OGvR zZLTs?Mkm1UnEDT2OS-!nbX|=)Lw7+=b#H%rOXG(!gQ>ja?X#y5Q#efGWm@OcyW(?(M&#zJs6MWHG!&?K}wNmz? z3$M*g(9v1B0wF#>39cgtiGVz~8D0C^tQ!V1#uxwH16*quJ0ylZlpiXdcneTa)vUbKKXggeTE?;+tG`2^KvpCXQbcz zWVKnTz`WOSq7SajPa-fk_8Uh%GNB||XZZ)JqDSu!*PB1QE~!PQTCXieGNvUf{Lk(A3d}LGRNC;#yYPhTOy9wpi_U7lbYv+wJXu%juqS*oJJYp%CGhpvxo) zFyY)J*hHQYn}_-)`YJ)LN^;R%DHMy{fZ+Ecu!EddNaQvWVZUoGIS0fzF!FPvDFv*+ zTxqIf3swcZis(9)T`~&hF;@$G^!+ z8=k9rMY#DN_o;aUYhG5Y;vVI&mK zkem?Q%=`R3HnVd~j*nuB=v((w(k@bVGLuD$<|D;%2Y0sCwn8ZQgV2|*0b|4zXC6s{ z1ar7Cze*x;W`g+CbB2Ll4`cc`1;`kal*NAqZIn18LwmqgAR7*yApnEe-4lMMNDiJ2 zkVku+rl#C0f6@Gy@~rBs$tK=eGcyW}zKd|ms@PQ?xT3)%iKZI{o92(k+ zz~mXa3x|!vV#ieX(^ZM3+~=c5zj8xD#KUR)|RL5YW^NU^>zHQo@6|Jk%s|! zaq*|x`ntm0hMob_P*)wTFvgFwGSbtFO&%h|lMAa}$GCZLz|d>5F;)oA1YRO1 z&v+*4Z`d@}*M0ti4FzLgW!f@a^uBcKn_AjRigR+?YDTS4`1-oG=I0r*)1rfTZg-8b z3751i&4=yJilyD`o|^NyJZpOgaMTeF3kYdxwt+U#C74sRH0h{1S@8IZ!4m&ViL(+p zRWVD@RC|rXGJPm@v$U8*>c!1ZsF`Dk7SN{&P`NiOOZa1eJAshdO!(c2+XlMPjTBOi`6**n7XFSuCfv+x zGFTwEC6r3NyNtq$Si2VWYp7zOoB?h)s9~5=5nR%vo;^XHoC z%H$7N@RK4JofiK{Ijhz)zNX@R`7(zu5thTBBTWVp#qVB!*_2Qk-hV9gGmOW|wA0UY z0aJ?nup8VC@rH`F5z?0B!9fpE&%MlN#Vxf3Osi_*_B4N&%z)dImyd5g&SXBLp!ie$mu78A z{nvieKxYlBU{{pG1QFs6U!po)p`!!8 zx$~>;OIcp-hZ^E`MN?sQD|K3JL3Y(=qjh-9JYh2%I*o>lnz(xf4dox2D1624Wo~9> z!r==9T-C)UEJQfS=taxQI;uc1<&&%eS{Nw?@$s81GmjxjVD}S0$j`)E$&3Yq0PwN` zqkK{yTu){!@l{f6DR|{9Kr&6V{Xu?*%VKvC3ZN)aSMhWBgr>5(4*Usxr4JoGd3i|C zn)SJDgX81WM}4NR7Tb`S(~o=DisJ{crJ#|@n$rZocCg1nT<_e13=ny7q42t97f4rw z9M>23Lez_L);$WXjN1NWC@Xn%msh>8q)6M;T#!-Jq|^2G>nq-2OWi%x-q>&KH5&D; zy_1G!bR0t#R2%NunFXI`y#MQvVaPq@#v_t$&D{LrYEaD*aTe!HzPTOR=J0mgU4iAr z<-i8yZ2(2pl4o;oe{Xy9V3mQFam%PZ1@&{xu2$kzBGm8#!TT3wivxT_-ht;%aGOGx zr@b#)-)}TOPf3!$?WGaDku3y+&`yE%1(&s}_%>U`E+(gcY%^LXrkR$IQd!i@{^)uN z_k;)yHRuhK2_Rdf1H2mNumP6`1jhRVZ9l zwD>H=qAXyf#*O4gb2Pv<{3eojo>-fk&sO-_Mft;{JC9I3!&HWjc0G3Y8U-(Pt+a#X zpgjbLFf|~X25^9Vp{NBSqVJGwIeHj9IvbL0PlT+eDn!iiryPNU+pt<+@ZBc=?Mc-LlR;M=@yW48Y zK59#HUt~W^Pk%MKvT`_4TAys_s%_|}Jct-C4Nfj?lN>8w0EtsaeKg^N{ax-E&Wc-0jx72ushBerh-3FBcdMc{ zg1W%`-1020EM47$h9UC+K1&cn)?TyABa0yAy^?h^e>^#oJvnH7amAROW;n$)?O_C2 zR%}QezfZ9#Pw8lPR{x;j(W|#P`58}2np&DWyNffj@o{PBY%0hpEPYkkR@>N16WKA+ z-EaQdG#s)27BhP{eU^olCHHXq5LQ|)SxCwO>zeVbMS}N5KgBfQ`Ua`wqJPyl?_Xb8 zKmu(eQqTt84KSJljy8gvNLY#{WIHvVcjKzu`cJee%Q#M-1rPLf*j?iEG`Tm{4|wbdQ8U1!Tb%KdJrVph#_8i-c1Z5LJAXcqh0HYp?)_ z)wN=i2`UBJyiSq*A46Mf!+|!G>i^Z2tJ43_0%-^JE?V8wSmqkTn8neRxvobkwl0mC?l#=i8BSTh_k-2(QOf% zfCy#+V!RceKaXo2CY+qofNdC#`4?pkAo5BftC&dYhO25~QECdy>X^ACf5vs6k4RB` zVSZjDKT)(<^nEpNBYDx>g4b`}7CVqgB^hSA%I< z?z4Bf@7~?cwK*07OU`R{TWS$m9wW3GVgALe-DNCsRGX8*(#6$3RrP0yZdt3MV# zx}4W$=+m_|c8-j-X|tP#ZIf0@XK$ajxFv_htl34+>UzG8%;2&RF<+S+GtqE#&)G(2 z*0uuc^z)Z|0Y*nTb!#|5#7UixlPtX0Iz^08E(w2l1ewq zhnjXc`U$d2TIZbY_6hFt`bs*Z;0qIdo;wnGCBGqf75K9Gg*!e~ewkbo3I8MHGY^XZ z4RRqE+F9|qM@Pp8%;O_g)Jszq*Q|ejafA8?_FsCx>O=zne}N%U*4xqq^@9_X|9d}y zTGA}lGhmGC_;ANH_$O^aUS0`{IzF^@HS0RDh83^TMt$#4cU5t7=NE&n?#pmreK!?| z)jE#H4s!{p`4{~@2NQ&&c6ehqL272ofj)7C1zIw2j&N^#)=g7D)JzMjn;!SZnr~Nn zaG||TkB4~5#5$P8uhNqOh0Lhi${Gb|(%LG$SZYWVk5E2Bbx}k6&&lKVz)D7FG9Gz`HGEbdGFr5DKQ5Y7guK?9s3(fitB51RZR?Q$_mtYf~(ZR zzu~2YNnp#-ig$C@>+pkE4&eO@91n7WmaD-@s_ea{q~!@5?!YrPG`Zx`d(H{+pV^#ndQ}a z_!~OATi!968{QQxZv$IwCle}6q*SroS*fP@`@xmuw6b_S68=W)m8(+(Qd}b+fRN8T zOYVUvdQLb2Imr?JA`~3Rq!0GP)E+5#0mcAEQjgOsNhvlTYj zGfxq^h~7ncp_)94ZY-pJfXiO;f{tZ2YxVyHr=no)gUU3DM>^ld$2)?$c z!UMjA)!l7|L@ASfVgJuS73K#^EJ$0B!&yOEEsXk|0~unmBW+y(N~n$J1&tii&^$y8 zco?T9X9on+`gycOLz-NYAj{UR(qI#7WuphfZ=U7}8h zRgSoSf?}5?=A4fd!;G|hB5eN|%#MzT&<1nM0cJv=ETF1tG*!3=mM4=a%UVfQ_$Cy* z%SR0z%}+!@DKYo=Z*pI~e#O*Ye%;s-G2E(unP06f{Mc4m)!a`7jHE?kvp)LR;(9Cn&R2z*VPn;)PIsi9#@MJmjXb1^i%tYi-p#=O&dm8;5n7nem#B z)5RAup69&z)LNx2uPM2E;mX6H=5BlpGfP=TcJFM1M=m(!HX*qKe|w z>tC5Lu>bE9OrmwNXR5Nv=-rdp_FZrw9UGa#I6B-mS8J<38QvLNy4mmYIZC(>K*;*4`@-aR#8b>Onc;AbS5%7GnlJEgxdho{OK zql0Qz58MDteh`=nilooOZWaNrSmdOt04zTsm6j}-u*lqzBmuAnL<5=SB}rCnmm2z~ z?obfq=7eG?ZnaZO8e zMfNj zzPt=Qb>VDgrNK7Mr~WDfSh6!F+yRR0D*(RA_4U>>~TDhKX%_E0pP}-W6>?p>MocH;d(i^-CPW3_Fl?Q_xFPZcB1U7{O>vV@u<)La}| z3?ht{zIv0D`2@?D@`^g>-x&e23%H1$v$USi%B6*G;pMp-D-xcDy!=u09 zO1U0@?=GxutgW~Q$E{|31sACXRKQn4JyS!wp9s-5k=9J2EIk3IE<@5OHM=ft}Q8xiEFc4re%;WIy zqV#av=nyZ=@;xK@zU8%*Uz7(G4Ol=-jwy*G2|CS_$Vv)ugxXzOW9*(5&hFl6h{(y= zUxQjVdPodF@_KS~Rt`N>dN{a6{))~u%>QSdWBsjVPg6i=;^o&ZIBr2o&(65h=DcLs z)SZG(fhW~9gGibf(X?}xxklW&WDu261cg&n7kfZ7F1Q)lN}v|r2*VnS$MlNmtK!7L zE`jFG>^FBjTUR2k6zbGzH98cYyv!H|Ne79p5utK7AZ>4HsI5C!Q;Cr$n=Hycl(G_B zdOf09E-1*CX(5qPAZ3i?{qA*67B+F(t_BP#-xgQk6_>lA%A_8G3+ z-(R6#gL2sq^4f1~kjSD7l`gJGn~#!7lX&kB55DauLfZv=59gf@?>g@WjQP56**iBe z+)o#^ukHDTgtSR}edT-BvsBmB6<$xmW*(59Nzb^ORZ>mwwEgqFv{!{CG-i-3HFne& zzj|Gmb0r~n*knp&`eed9*wxa|T!F5Z8ce#L(UU(yei1E>H~@#Tv!6bGUR++uYWZ5d zLEqkOGO$W?dT!Qc9YtdQG@?moa=-3tKXz_&4$I^iiuPeczj3ih~` zvX?CbgVuR;lgCn-hQlH!l&lp15IWg!q}GQDu+S^=37jc=47rsgsmH&-TJypLSC;0z zYuszt$VT4JP0Qfcl>enpa8`6QDdk^PITe&0s@7X#}4>Crhw9!pr?bG`fg zLDyE-Q+6x;`k8BYlT!04O3JG1nkuUGt>xu9LuXxQmtlD5Ye!Q{U$fpejem`AZF9}H zzCmR=Vx14JEv?Woa#NdnutWfDoD#^iz{{O&=J=TfB0vUrG5qyx1VAl?(CpI8>{@6W z!*ybrKW>d-^$USb!Rh)Y(nC_10NVsflA}lj&#Qi@K#4S01j!=JOCUNNo~lL#!)z*q zqKHbMTczYrm*l>Dgb2I2x3TyZdG7h-N7|kdmO)@EHG2*Q+V>r&GO!;GhJmQ)AJ2+a zt%#QWtJqI6K}I0m{FOlZuNZSAihcCvN#G}nQV}!zh@qUDM5{F$X7QPrxD!Uh)4z4F zvrq=K>&Wr)31hL4>lV^?dp+1&df>w)Hjzx!kP=cXoY zYk5X;%Hu47Xv)2Z_n#M6V2999l^B;-@a{v6wxYJ7wWF%=Mdpj_`)96{cMM-2v5lDr z4Sl1wX{*&SB+fe!NZ>)}lE~3N1Jqzs){Cs?#o9^?k{T*IEk=Ex$v82}1ipK8$Y>q= zl9Ct~SNOTIqknwV)ZR60vQG?-prhiHx#)4=6EKgODzxQuy6pq6E@%zC=Gh(YUO=fb zRS_q}h*?>Yz@@B0kie;)1}W$t0fay!7H|2Mn}DW`HLol}#jzE`4xY477$#tTm`5}Y1*e@0NVXg-$Z*bMT_}&l z!zifA6DPqH+{&3$&J@(JbT(u*n-YF6q{t?9JsHtaIP|~u)aa^?X} zb!DeEGoOVS+PcoxCU$&u8wUsq<5c&^jOQR)HUmg}+}07>_|dHC+oPJB_X*>? z9oc&T_e@_*rtdH~qkX!y!x@oa301irU?h(5uDxwICP1^Cx+2UDa0IAp1gwA`ppfx0 z;<^qlA^{jMiKr-vLqZ^Fj!q9wfhv*ph^&ErY=ShEBipHR4=YRT9CeJD^ffuDETcak zpPJi*Rq3>g;e@j?JAh9T(KIX(@`PG60!E|T7wkg+&M){W={8U~!5Cq3wWX#6VTj{) zD0IWyr@;0!c$qj1%go>qbP~ZI=34yaBJ2{L3%lcHT&J=}jgFS{)Dg8`W(D6U`v_%c z3R42T`mRo#d>YPwX4m(p3T*{;^`$33Hd6e8wV^mO6%`b`lYp8BU|;5b(B^07mb@=` z&azjQ0Nu^VdYYGCY@`{cVx}ApYfJ0Qf{5i4VfFYh97>|&ML$4^Ob$|c-=#bNs>IU} zB;G@qKmJbtx`f`ZO^kRbv31pZ?7e#+Ot}`fcj#HoIGjUa=0iS~ufp;iPpDER5zC>+Hcnnn4q zLalt}Lus2LC%+SUgn;BQ6j*T2%+C2(zC?JF%OI&40F;Io|Gvov!q`9VS@0PC3&EK> zRNzYFJqf3CArO^cRB$DGmNdd^p1*3X>N$#iWuGZ?_y1Y-dRrOhS;W5gaK7any*rprkt!?^h zFgizvSPaHAy4yoVw*__Ub+C8HHcuDEhw6XQ;X#$X?3d$%lLE$!+oz$w*+H`$tBbfdm(|R#B zh;(-=h^i@(ia^HlBik34@SXEgl?n;G`4`n}jqn+)Zb$hLI7h+j2_N5Z%RxMmj2Wfq z5y^Wmd8DN(y9T90GehzlafTg<$Run?Bz`at4H#rnURD5i;a-!}P={krWkj1)&N`XW z4>6PqQXdq)LlnUVlsB(lW9#xbJ*%iF|7G@rhxcyZyONQfoss=MyN$s>AWEn@xPuf$ zA}T{uZ0cj*5s=*BR285&l`aGEfx2`DHOOWn!Pf7K_o5($&x3Rqw}GiikJD<@87$-d z4S6_5oX~x5cw{IKb$4$c#Q?+v=baLolSai>t*}=H6ACgusgokj*UmVMsMk?fsn{qX9=`&ymRI@;avp`vxbjD7$3wAa5xL)<+!fr4&(lQ(yC zxcPZg`)B52%!?t8V*v}elnsC6xS~7+R~-B*(yEvhjz~qR1_HSBXLSX?hrVxhj-gP$ zpNJyJ5iKLO>VQM=q4H(XKA>ZSZ~E)PRj1$Q8FB{5&xlcbd;5pq)bkYv`n)^~fT@(?VOeo=lpr)h_(&*ZW)_6}-Tsrg zL*LqA)O~5G>+fzePa2zEq?b1I8nhqV3`4z!p(ifmr_YhlWuk?YibhRr7;4hbV<`i&j+Axppp z`}=yjyL)9uhqa#;n739rKIOl7iL9@%x~$4ApU2PDNjj?sH9<0UPcidK6Q*+|nnQUKng^FRf|C zTB%>BH?%bNQL>s54f|yDW7fNjJB`b?>YKH7ww0W{cJZOEE=OzI5oAbE3ZGo#pci;b zIOP%vZGty0kPDT>SH)SdbqyGzWFR>|-d_R#wExzHT@}nrKo+i+Ulpb{tn67OnZ>vw zd<+`ZZGaj`l@$ATDu3lFxti~hYfDJxLFM0Z*iBMb00bV-62@{xtR#7sXMFl~r?82Ii)!riNC7xwp2o z9Md>jedrF$i**=AS#350;3_nW;g26g0l*vCav6`|P8u5k3WI6Hj+a|-vC`Rr{^Q!w2 z37jeqxp-O-r#sWPoeZ7&sgs)J&DXm|c8cBJp2&YeF z!!diB%07N9EyZOD$x`vVw{PAQp__kS@%~kQ*|YR#xz8Rwx^?en=H1J;(;sBK&dDyA zV>nVITXfzIBB2y%$%{yBJG`HA02jI#K#ePfDL0Xo^Ti3RKiYWx%=Prr7Iu9lC0@OedE?5y=2l!v@}<!Qp@gl#xwyL)ED~hK!9DE19l$IG>zNNXb=H4kwQ$uBGXMe<$K2WcBh|u+G zPfz2B%Q-!}wBQj!#5y*=?3=19ZK+Jd61p)jqr$c>fg7Y~j-$uF1+EIQ@(ctmz(v9< z-+@^bazzU)Q2y@4cJ1WAYcfx91h0v1lcy=cQ2@?&;( z>aL{s6VpR||6Rf%3A7@*j;|78CAZlPx~yJ~x2+8hBs2!VTBOV}b|8LKg38Ohy^;?R@<58WHbjQP0u&L%Kj{B^eb#FRB9tBMjhnQ>aNr_OORPL-gPbe-(e7 zgjwmN3WSdmCGF!-{tbsKz(?*60YvWZuo!BeU;0&(a^}tlvSOQk=KLH3vgEwNPj4O* zRl{JIc)EzmGKvh&7=NKUJr)FS6Nxq3M*#R&K7NE>+E^ENilvxevS zwkf2C=XS~T(Np=B)*-FYI0qgqOO}uGEjCglX7s)tqqAP;*pSXRGt^p@n>DS^u5`Dg zCEd!_Ygt5<@cQ+Qd)Lz9_eq5lFC`_XUA%gmr;?tgNx%rb@Iy`G2Pr&17QK9yLw7g# z<;{!#SMFEq6qYFDy_nt1+bz?6UK9U{%`{J?%E7&5exLO+xA0S2)!W+kE|zZ~JNo?e ztr7A0%t%x3M327X?L#fPMWb17#P)2`tm_yu;Y`GO5=bx{phw2x@GZGoePwF$yY}`E z6^8jO&IBS3P6Io1W>nwgJF6w7sdQBSF2?`HFdT!N0wkaet(b>696a*@coV8IKnE|v$VG6 z+obGb{hN|KAyGU|Rq-0+lQt{9mq$oGmP(c1mQ0)$hioY1EWy(!wfe7tB^Xn>3PYx$ z?)Db#o62t6+@xM_Z0a(a2m6P{nM@y>a!mo~{;w3S3rkC@t8||osISLH7gTi)Gq&dqb)^myWy*S-aR zB(`p?t#59#N(7wJ;o%^Y0x>FnZiojXyXb!v2OK$s#)bwa)d!oA!+5IjFpY~VROW; zY3ZmM0WMC-*g~BLwv7$-b#)-OE>at<`d=$5E6b(Dibj|vy+v=|6ntvZ7C$d|lb)85 zaU}gTgAZ zc6J$^HVx#pB~ONHS{9GvMJ@^xPFZXdK*Kd_>C)S5#t!Y(qM>f9`(0exvkyZ=v6Sp* z50Xchtx&Ap;mxv$@Us{Bw|R#wg;2GWDvysWHySI*q27+Ykk zd*tZ&GV5i`fs1A0?E2Rj%E;01`$HB7IWVX9tVwln84!HV^jIe{)$jN2UCbyJ; ztHNgN_XN7o#6l)1mPybm=E?E|Lv&}B11t0PN$2$RjNR_v#D;0n>%=e5#qzeT^#E;yU?39u zkqn$%ZCfg>AYAp9f9Evx;|^2^D%AD;9oM{jTJ%C!k%N&nOB^MEL#`~4r|ZdOG)yGu zG2;qe!D?8^2>+*OySQ^%m$MB+8^5`}F2ga&3n&S@*uRW@%8{@mN}?!O zq)aB8hg)J=SJv@fR|7a8blNc~bt?d6&)py>Wo>nuuA{YuT)45Jp|Rm}Jt=W@O;to2 zEhn;)3%@I?sWo^krI~LF@1&&NeR3}~_3ER0cW>Oja`RT&orhV^a`Ux4?$99~t3+0I z*UD=OIOSxxzXRjM%M1*Nww$4XE)3GPbe2T(yt3kRSu;kb+1lxxryUO|=HCqX<{T5a zt~gAXWE#HIKfH+nyd^t6J+H1OQFA9hJL^tz+WklWL-U8Y`1muaX;*J0YZ6e4XTL7| zz_4X`Syk1iFD+&HnK^HAp1n@W$Qy>c0G=Gf2fLdt%sKU={v9tBTX1{bxA7&bi2cgt z)mm0N>UwpZ1}ZIs4G$2PJFqr0KWF{g)9|jW$7ufAY;ex`e8zTjZ||_xvE*}f*Y;R! z3xVZ%DKnzau>pZV1MsDO8FARryK0DbN|JyCB?3oA@GS=`QvaTqe*FkcHXmsiIyC zb>J3L9s#XfD3IgLKm!;)keS911j{+dV5F52N_je$)a?Y5u{g|M!|#wHC#kT^V@fDj z=LR`D9Q-$Wptv>JCMTz-$Hu2^;%IC(uzt_#W&i`q*D?mj$pOe`Nk)9D%+t)+CY|;P z;w|l)RVMS`K{1m*jM|Qlkzv`UfQE6wU zLBXne6-P|=Zc@imi%VEd+LBTcxI}l4L*LL3N~RlD^pebP5>a_2QY4%Tgto-aN`6-+S|Uggqz|T8^U$($cPdDBK<9^@4_r++LZT{8TFLJ8>wlxv#wkw zlwP@>cJs=uNB1+I=f0~gH|^~Q))D^6Kk^h_Qs(7Q0&aO0u@|A{5WF59oDyj{lLauV zT183{@XwB$GA2EAv!+;)I6seHG&>QUNLd_n?rE#3-!k4*T5zw$-Cg?PWpPV4y9J)T z$Vj`Eo^y3abBhu63zryuxnKU`>66^I*gqC)OFxyBceE6}$uHDayw9!8$TtU|R8bDd zC+x|bE~9B-!!zZj9`SjXz9!!-tthX3oA(|IqTbfFLGz%|%$$UzR$hl^roTsDt8HPo zl)2CB@lFpm>&F4}{LIY!XnVt;gPF1gtPz|{%=HbjDb8-kVcECKfei==WT}E6futPv zG3=3=g3RMzzo)0MOg8msf73D4-D$M=))_e@RTYe~^^bTQQ3D0si`w?n_?(FvA4#T*U{Bhb&Tgy5$4uiD7 zYdN<_V<52U$EyK3gpGH28eue5s|SQ4C|udZqmphNGfKPkL2kn)amdrKK{*a{31VS% z!7oCZEt+FgbJH`PUwqO{6-o)I5(=UqnXecS6Xa5;dX>;h;WP@`lT`&wEIGl9TTBKK z%}Jq(Vm};8CN=$zR|ONqU9OJaNY9R?#)GA%RtB-zd!>!Rt3Z zKj?g<(d~aD0Y2nLF@%bX1@ew$;h1;;2wd28&H<$qQzi|E zhY}cm>(Bk`dQFho*3ztEX*Fv~E6YDt)OYlm2h0=Jcj+$+(o@b{$h@3(@7ayJSFfa{ zUB7+%=H2H{(qF$SEYH==F&u>T9SBIMH?C#sQ^u*65oIfWK!a{Tf8 z0nbq%OBMyNTuqF3>f0Mzrm*Oh7)LG}jYKYoktZRL-ez72YLk~#{XL2X7R;(`T-*`h zmHUy5SlpTvq27eDp6Z5iXj!$OPau#)PD~JeI6lAU9LItFrAW@#AI{1d7UOktagvfY{g*`LS_LH zVgq&hqRTZkHIDqoY?%!p8>WHDI1Q~1>4j33qDLaGOF~JSOZ$a#l;dfGWGoW=aer?e zx!X?AYnzzC$#>E{_aj;eIxA~xB9TpW{8U_=L591^9wh#%NxYEXU>G^)a4*0RDQ&MP6Qct8@34%M zg+SsHqfyHX_OV0$wv#LssZ8udLaOgU&_b!r-$JbiM-}m(kpft(j+vKNbLWd_e(@nW zN7>GqN5#(*Q*=l(n1JNL5a}tEeriYim*(b%`p>o1tP(E!jK+1?sB@aj@`~Q(K1@ly zbmP+X^qXn-Zr-?f^ZwKH$G5Yyp5{L*D9Qb3l-Wk++GNap8x@O^vT#W4!2L^Ep*rSr zK*UpyM*QcQ72XbV4xzW9d@7i9w6Ld8cavs*r4V8UD{{vJ9BI-@n#&8O!tP z>~%LYvmU0VradZ8`+qd?afwM0&9(c553bz2`!qKn7sn6f71~-ju&S!EeAXRYD9)?* zN>wL^nK}eh!0Uc+-8RM!wW7`CeNR?tZqD80{Mz=8&K~`swXf6U7%|!$#@a@m&0+mQ z9bmLsColkXTXi+Dnaxua5rf@>K5>Rn>E;Qd z2Bqv3_z?YK<}Cn%>^CU}Q9wn?C@e1D+}{t3Hgq*E)2W_(2D!N)(U!cdi_f*|hb`=kFXz>0xNUIXTCq@t9E5O{xgdUE|;5@BXR`}{tf^7(zM0yb~5pXf_(wr#h0)OI3mG+Koc&FnH@6S zZAm`~ry!L^sDx5zT4L!A{y`{Y>?W(|5XWcTsi2hd6A~4dLmFB{? zo+@b)NR0`8MeG|s_zO(uH?aF#?DC16WV%3<$VMdwdBj>~Lu|A>G5&se>%h4&B#>)R zyRgUtMnPzJ=VV*lTu5VgNN$hCw4BzBl&rgal}!W^x1)IfiqFEqk3v!LP!L=YzA~wb zG(W;7y~yIVB{_|GaW--ZLdR7kCBqfF$cQO26gM~!F%}|D>PGL|{vD)M4SmBSlV*I{ z+nyKaX5KoRdhu*ZTFRA+$=BhF9%jFI`t(6|*6ZSeviBd$^zPunA>syl_tv42^zVV2q9GNg$C^RC0#$M-<1bcIk6i5Jr%VPAVb6e z9#4!sAXf0E z=0wkW)DSB-U>gagSTkU|A`|oiUEVc^?C&vKCudx#Opc*N;(!;;2KT~Nt0d7RZNlGZ zM2`eC6Yv<>I|iKJ=)g#Rj~5ua{19M`sw#9(mKs3xsBM>o(8w}NqL=1elO~<^34^E! zNm<&~vqO{f7%qcOmBdPR8`+ggRD=0}Dm&Tzvx~Mt77845IsMb!M4@(ZVvCd5Bpq9z zD!frR_y_)I)PwS0tREzria99_8WjK3?AWQ>M#GjA@s(mxk;SYrhl!^@GCPiYxW0?| z)28~`n)*&-#2g(z>vB|nprLU$DJhcrza*c%l$v}t_37ix^f%d0U#Gu*nftuD_K8;4 zJ+iuggc1`4nv|hp13*Q8bhzttiHjEKS}jW{n`cu`w#Z?1aTD!CQ-2S2-BICmhD zn_coRdS<5`yuq^$B-(C|%Qk2>_BXwH^|}2{vfRQ^}aB#ua8VyGKEQjAU8V0VB zrrKe%-e4ITs{dRSuX$jY^6&B}Dg+(>KHeua zxrpnIQzSC(iQIyMX&pi~cC~ zR3(^7c1yz|Zf6}+FfUg6^I`WNyi&2vO}W@%G6wk1ocuCJ3uPQK7P~ zj%c+-x`+x_6!-gygcY((RiA}!i}4HRaCF|Fkz;jP)iMxI0_Rsv)} z$q+=Owy>%M%_JHxpjEmcVPe@Cx}%~=4a?REH6tU;y*m zEq@vzgo01y94yBEVjTRrL1!AV$aa(2o|5MeZ>C&hv)r}YmoKHAO}TuX?PV|CJk8F# z`VvR>x~5k-uUiamjv3BvbebS-d0qB**SC-x;VnewbVPt`5z5ZAeg_nv2A3I955WM@6oqs-e;&^QbRv)NEvT2!j9sV&OQICCaFr{Ly>=C{{h z7G)---G7joTUJ_BQc>B^+1+hyE-5OkY1a2Anyd0HL5dAIR25K;*ek<74m(jx?MLfU z*i4&sU-M~P?;5Pq<7aKNx!rRtuf%R^X1cMg!)0wTOwLTOT5Zm=fy@HIGeAu$ux~FfW!Q!H^1tl2i(!6kNDJ>Def4 z;O_-g@}C?PF(!&l`CIwmKirty^ym~nQxGb|PwbyOIlK@B-Rf03C%~59ktePe{@~um zZQ>5-_+O)1L5u5Mpe^a-OzK@jK<{xw!7unCD>qiLO#x60j??=xf9@)GexdVoEf0m#=8-WmzelBC17*3Q}3DY-p|{Bc!fnE2YD6X^{jO zJ+J_YT@?XLJU7n^HN^1*NKoUEZi?40!IH=pClOZ@`jsGw{z%yZb3J5hY;`PRLQx6Jo*60Zq{qUulO_y>>sBJ3Ol!=cUf~S3xWEE?x}VBeg(dZZLd!_R8nq7hl*{&Sp6yIM$(Pc1Tzc^6e(Kq?H=pGe=Vw32dv)b` z<>&g!rkaVj;;kT&C5&XBpsJV^-juPm;5*;Qc7e_uD$bTg|P%WAi6%;jAS?y!o`IbpKe zoSyYn^LuSSD~QLl?oIPX*;Tmw*GE8gtZ^JXHV`R`x`k93*xs@6eN1 z2Rr@Ga@)-={~k|`E7*rM)!*HPQ3h@k>|ixn9OEpAnBpxXN90HpUKKbBd{hFfQep*8 z;@7eAV?Y&j7&*R53Av4^O2V`xyb8$b)&yc@Fv|1fKM+*&Ij6^0<&cMKWFT@$19 zHc=z55Y0d=$r86f5h~e~AW6+(5KYJ`rQs^ARH*lk{#vTFXO4q z#>vkDPZH_S-YIQYQB(3QR|vR8YXmqquEH>p&IZ6HNi3-t(3}9BufP`n0vbhtfS`onii8|dfYO}zPSGW!H&w;1y*afHa+>qtI{)@nj7&&@2XmF z$6vaeo|Q|_@a9i>(++cS_ZCbW(QbMpA~M z**HI4eLJmm(jKwgZRv1QwJbPi9JZ!+I{oL&o7wuIu^DIgmm$|C7ETg z*#Y<*7nxg+>DBjPSa4s;1*Gfpn~N=7}`V*eTiz~fB;Z|D^j2Ee^wxoqhE!i z<0JRSm)ftEr9IdqOqllf)@Fv=JIGX;ddvfZxYv%_Oy+Ssee7&km~GYd-)ypkdol4AA4$vZSM@s7} zk_ictNq>cKJn{ASw8AL%)}+lV3%Y;^5W`Ij^&9Zq@~_Jx^I&B6XDUaZ&B|G9W@6Mq z`_AE5197U+2k8u*F9(Sr5LAXk=Q-9XB}rA8S`3GN*xgx2%);$?upLUBNFafT=1yS% zQ%Kz{4(oG5{ZJjkdu}KxJ5UsNKLMnamysQU7U&NB8{8wIOJGC}sq{vmK~b`7o5J@# zvTzPqI47)z=7PHnrNzbHOfE!~GV2q#$2yy8866J5{|W~GyaTr@DQXl;{=Fln_bvcmo`6)al)>SR-_qAbkw9E_qQae+z+R30akAlp{k5YdEa@5@8uePe5D zV{aGsK@M>ZlY~`t7v#`8fqYrFo_X5 ze9A11dn_TxMut1;I;?Z<8eQh1K3EDa~Cv~(N%}G{AN!xB%m_un?MI>1zNOLk^Y%1zZK6B=JOIdE0d$y^m zdC1|Nv6=N2?<&v7wc;GD$R8T-uWoG_u-InCyL&Cm9MK_0;wX(^((Q(}ZmUiAMOW8m z9MpgQSUY0UqqcH_BZ(|gaUcOvVuCM+yxKDp8{{PX2p%Kh*C0aSkf3-F(!XiOML3{} zLmDI-j^3Km+PZ2+w{*>&h9TB1;-Z8KX^Mi($>za%-!^elg*yS5?3NTX3X~)n{+YW5 zhn)HjcJ?_h088}|<4~ncm0PM3l2zHtnov|sT%tb6uhj|-6&)j(B8jqzf8t!qOUP@< zls9XO>2xfutZ%NZOJk2_!5?_9x3+fVgb&xaxy3x^(#$wsT?8H0Rb%zwSl`7lhN(|R zy#iZXyD~$}@hrQ?h#eGle<0ISMs?(yBDvkb`+;H*5*Bik70k?6EP7KAs30qY9*U`T zl0YLz6yZ_)?`iTAe`M#f$oOQ1#WCnO#oJRM0{AA;TmiX}K$4IwOAE)|vz~d*yqHAi zUi}sE*@bLvmt}@gNSO1rU(6EeH*{$u` z(yZ&3W!v%DvUCx-OS>($38xEJzZD8%PH{{+?W}uUmO&PuIEM<#T06d4$JtQCi)Z!P z40eL7)Ti-?0i;z)L*vI-Occb(p)Bz(eDWVTtofoYQV==b_mwFh)j8Pkj9=^;r8&Yye;2kQ_@0R(bz&tQN$-^E+kJQ7GsRBme zC=ac~2eD@m3!TSma$L>=qPSJk1a3wEjGkN&(DEDwdw)$NqQ{Jg%U>ZWGQpl}Re(Q^ z9{g6SBQeI`T3?0er=}y#UG2_X;C_^l0EDMVI22{mz+?VCibV6!1SvRTaIQ#?~B za?%=3q@xo};AXpYmwrRBcO(8M?EYI*u|un}f+aiUL$3Rea;S57?>WAF?j7~)2p~A9*X*6m^=}{D$u7~B zebKcHcJ~gAjBt{23gc|Im`1H|tX`~554k%93JJT=IRHiCqUI=B^%;r%z*D5MVOgrq z=l_?fw*hVY&eMIJ#EzZjWzz9=}enxZ@Zo3>?YGqW~bTiN!zmxIqPn3b4qS{ z$Za9vlw`V zXFRoI%lGsAmDzJ~V(ay51Cb47&!1_lqxOg!#p+fDhj>Og*J}ANqqbEDf!QN_xs%_&%tpVGU2LFj zG?&e9k{M|f?(vN&fisS%Q+iP;0mj^lg?2IWaBSG?7=2VGW+@3rV%FYSzG-x z7&IbM?!pl+|AjisbD%Hvz#XjQ>e^Q67qv1d>SZYY;R0$*s!D&bImxd2>kalmb?RTB zKjEYfwBG4=dnR45GaUhc?}M8ckG*y1Xv5L{2N)lB=E9fPzPWMpLF>cEj~<&kTH7s_ z{w|XlaZan#Js!y6O&G-{JzABkLX zyJGWGc01FSCXq=cz+fbG5Yq@qg6Pz{U4wToe)x^q8Fl}quD^*n7`OuLMKL6q(B7!$sADJveBjz4v16uy%nDsBPN3ebh=j-Z@9{I}ZOp0|{ z$xQcMIDfQm-}&pU55H;Jf1{(_9!M=J#WgF+KV!UO41ybXV<`I^Fgj-g5rT^x%8zW_ zoIhf7foPl#r{PDvLqlWE5o;%njn08z{3@V`XPa`mJ;RVchNxHL|0E)WhxsurhE;mw!CZDWdT$+&e$+?F2?C_sywv@ zPrf&qO0|9?iNbH)381Of)KWcqkGQ+fDldUdBl`lBNFA2WD&nITn#fUAki{ihLC}d! zW>S%Pgq%Xju#d_!4n~L^DqA(Z7nr|trO2SBYUL!HJD|xius@YG!)OvO;;CYcmMYA{ zCaDAKgFZ^kZ=tf3KCpt`b(Z#PSy?qdlW3LP0x_)NWXht^87+$@e1cAfNr*E5HurOr zo+xx8G7X&vJ)oWFzIZIo5Q&!%FY~&GyYIHVUB6Y=T-SK+rg<_DNvo~V$m38hg%ePl z*|vtb?haN_IihFACAqK)DC^k~AQ7su)KEUEVRVB!$cvORR+iJ{7BF>n|mA+KGb?_W3KU}`_aAYXAd80JkZ#D^w^=p@0_`O z?dxmU&ifC$+S@xiA9oJ)Sxns{B!Y-}{DEkiZ|HgDM{qAzR@e!#lkyiJq>%{5MJdwf zi^3`8;RY~ETlQ~J&t!I{5^Gqo+Li4t;pvWU<`1-b$Y}w1zk3WpKdj#xFp%? zIT@<9v-4O|QhjKaN?o#u2rIdrXe!PFhL|5VVz=~JEvN`yJao=E7lY6W89>-nZ?fD+ zmbw_HN{@&Hr?oEjsxm46QPsan&NG59Utq#0$XZJdTt0vF@LQ)(pF8*YwL6_RO#=)( zvJ&Sz)tEsC2d<6V@0*=VPz&Mds!`y;a#VG9ZXBfU$|y)0siE=6q~fC*_=IO*z)ffa ziZ9M%k2rQxMbQm~Pl^q!86;%{I zpVb1@Mxs8HF4N?na`DLGGO0R8|b)o@x;F8bw97$ z^XljKM?66!KslgtHvBVacFOaVf2hII0O~e&RSxYgMisE~NlEekIRi7L+>d~uTGVK) z#KP9v!<*!V=*lVJst!OtZmHL8=#L7tuQM3s%Q$G{_(_2vW}3bl=Uk zdxwr5ezoz)kvCpB*8Jv$Yu|r&^ZPpt^5|yFyv5u#$=?~u#x)sRI{5A&5lH?9j;~GHgv(YR!Nxy>AF&W0H zPE0t*Ca6_Ty9RDwyLkSK>*sgs_UwD3T2~K|p}G0bb#L!Edb*|Ebmz*~pEvJ0-tt~! z!;w>0uYYs>=DqeO_aB-2Ms1c}tEKD6AVFb;(Qa^%3X|tg{!sVfo~C_QF1_`}aTF4! ztbM^;ppS7QA;yLW9NiWliN0t$vw)3vjMz}_qa`L&%miW(sH%nc@C_DYQbmU7JL@Gv zu)A$HANCKMx~?B<>YjKwSO!K4^H~4;acmW+DW7RjQMKO1W9N3clY)sVnN5|P%jxxu z)4sO#cUXP}=Bcw+T0UvLam#E$a=_TnDWwVZ;DeIh?nu$QtH*6^& ztf5HYlzU4Hu_T4`vgDw*Hyah@%I@mrlq@=+fSfZBDS!vnv_Ex10yIG;XKK6;?LGQO zkjZ}Ye6vXbDL1UI?aru10??Kf(Apux4Yooy# zugm6%Etd-^BU5NB2a1$MRthUd)>T2#&e}mBL>MY~@gfCsoWPD^2CDJoGZ*tnG*QT9q#t0ZqYdUd^l);M6Yz5WtV(XJuyb1UCq zh`&Q#{h9cLhG-{tmM&GVYs}h1W@z7b-EQ51eJ3t=IDGSr*4q(@U|aT@A5I;kFT)DM z0CTFaQ#3pckI~)u#RguR2=f)EBYL$?n>T5J9Wi);?CvU74Dc7K%RiM4nJPa>)-OV< zk&X)@Wug1E^zEd}hcWTEee=YuA|BgpiO7?ikMA5ldE%}5!>^w@{N~A)@8P_4w%%*+ ze)9NfN6!$`vMj?UnyPT1y(lvHB1<^Jd;o@oKii^O-FXY^;59ur;}0)Ib?jiod3 ziCz-FPRA5AwE2a6DLfvgO;B~Tck;Bk6V${s;5j%u<+y+P;^U`Q3nzEoGc-r~g=MV; zUnSS6i?k~nv($NZ1 z9}bNSn9aj3JdW|nxz&mB5ex6c^|18%iWKUY}Zxmj_f~oYrqAW zS>_sB1it_;7i2=elPCP#n6JpotUVWa0qkZOo`djPML)#o_y)2_n?Bp8;z3m%YlcU> zyQ;L9&JzM460}MuA=n$GH;2xF1&S^6;iJ-0@K003U@oVIoz7If7u*ch_ALe4Z{NQB z+2`*z?>lzp<5TaRzezT?wY{sey|eX6U!T=BYU}Sus&X2cE$7r6mBD~|!r)gj^&TIF z%+f1LB~h1HPWc^!J+?qRhpAmfK}q%D#Z2}eVi?vLl16HBh6YC}UiJgU!3o52-2n)- zu89D%J|+fCkFR}x^=fd*a`(}l_uo5x@{JQM$A74Mr~Z}m=Pq@1wO&2<@%i`P{piY9 z7eD^&+AW5}-MZP<*?Hq;JJi_G0aI6JW0!3@1z5LG)j?gnkaB&nQ}>U18ecv4<;Pb| zx4wJO>4u^gW=)1>{U%Y&!_2$*^pfpjg;i$@3@jU@@d3T&M>HYsw`VR9>GKJRlw}K*ZQSugRlG@>^%}*AmPw z0kN?O)HVWv7SwYDe$zOr`;=DtZxlb4vWbvC6oA2n1Or+}Qm!FK7-aZLG_{oSJ12=d z&@@4wD$ObkPxPBzEPJ|^WNfj3Fl4pwD#WqYZ(0PiCBei?sx878hw z0$9fAE+2yR2hp8UKDlH{E#lDa6!!^KGP;I&E*%zR@vFH}mK$*!1G&GzCnYIXv$TpC zp`aUsRz#!A=9qw%f0=fdMXE7TT9AAm=fLgL^*ePtbq8N>;r}9cQi`%|WnP;(& zwg4${YF>0e<3BN~@nZF|?R1th9CL$#GUS*VjF=qX;5AelNW7t;8)1g2g4XGY>EOKT zY5y96E;s9$aM?yYnRIL+62LW`Vv2My<9cxC-q)X<{oswGZ=FAT;frrklx^+m>FvN5 zw%Uya!pvO<+%ot01Xd>k0goyLCqe#Zcl}LV;L5XAx^E`OOdVENs%VVRkW0b`rRk)Z zm*RmLPQve=4$f60ztzmjx!I}lNsrqzADeN_g~QrZ^ZQ#-EFOHwIMm194o2GY9 zUbx!4RrkNuzw!ai)9pPEZ(KNi?(}C@TkhZa_8Nnz2ZlQyeA{j|-M(?FZ*MiC%Xs8Fjhl!V{xZfYRb2Ym+_e z?|EW(I&71{@B)Q!X!;Bs5VHgAbDTVlH{eY;hg!ey>~1;Gc;cImzK%Xi|D<=0j&%H8 zA%PJPiBM%%CQ$ia`KLc(g&UO&?p07&GkcpypOuy(!8o2fw(i-g^Tx?)-3NQAJ2f@F z`3ZxNzq|3IZ)DIqK#wU6>aG!(ie@`p{Bds}&0IRc#z@_&v6FfXDeg+M5?+c)k(QzB zphkKZSjiM?pZNETag(vD=!r`9Dndoy#Mnc)gOlYq5Y>zsT{0l5-fvyu7Z1TbzOoz* zCl-9pX;y?pdVp*cqHQKR=|b5FBZU+#CmUu0FpDD&vJ$}wtIY>Jg}f2sxJCwvR+P0u zCZ|juzzs)}i4lt7ys4w4L>xXAMTl3h2}mPcwLBiTR@WCRtm?OrVu5p5V$+ zB1;A$8ziZjar4*5XuH^{YpVa?TeCC3fGGGxVk^DGiGx|rwp`x8tp4{GGZp0?tF@Cq zwO6LsSQ9Gh*ev%N>Ocmri$5nmU#1H@=nF(s5%}ixWhdjFo^hjt{cJ4EhT(ShS!N@J zXqLe;LI3Ooq1$w7to2sw_vc=Jv!VH&b7wDp-9bp(Y3k~E(%#eOV9c`z>ikbUGqY}& ze~w9Vd>?^iNeY~B-FM4709Rg3A*-m+V>h=4mJ;lvl)l!MnejrP6HojD)D035GcFH- zEC-=YWx(h=qcgPJ-yX=my1_ryjZr?BsjM*Jl^OO4>gCoAxXGll0rEIQK zH;T@*?tx*+Ak>q6!-(hDy-q)t-sKJ@W~LEpPtnC6OEN|v3=^GcFypj9MJ0EZU!=oe z5y(<0B%heh@HsN=^P7(@-S52f^~tkue${VxjQNl~F5;R(Wx%R|6tc7oOO=g8T^dkg3E7QTATza+(5;ikW&NtE7x^K_ky1fV9X+g8)#{KTm-iM5^a5-%w zXseD`hpo0T$HW9O4!Md0_m ztZbrkD`Ki|Lt3mUD7++U6H%Lby0>%aA>bA-Re6o-$`O*aG7K?i1F6KYYtL&W2WTK08+#y~Zk#Z}XkJz| zUsPX0#ACB)fikrOCm8MrIwF4l{wYKiX^L5q!Bi?IR(g=EwRLpVHWRfVCwBeRE6w{E zn{c}2i`yNoZBL$>d%IB3nshlvT_D;s#pH7D49sZOEtra`Yp=Xc=MN4HoB1;%1YgZ~ zXJ`)#Y3O}0w#F9E$kI#-d8lG$;g6WL=p2-Dp9m>5)CA-66KKABXK=1(ru`n{o&(hE`ENy(=ul1YP>gsNPWO~|* z#$U&b3mHw%pxM;g(dR(m$I||^zTIpY%T+i3BOyOakKlSG;<(tzNTr4&7q2xPzdJDI zoANLS8(krPl34`#q=s6u$p$^B1I$hn;i}DFReSW5GVh_C#4I~RG3W^*+dll|>t`Mg z-C#nZ<#WXDrh;@Oy8e}L$?hv~IP|!YB$Wh?ubMt2I{adO10lETD(L zIaUJSodm57s2v{J+w{&SUw--ZjaywKy^s4wb{upX^&zBh8?o8#@KcZ>T@(5w)K_ar z5rMXn`O%~)vYcRwN@*pQf%d=_V$@s>hOlh@zqh{_CR)^9fJ(86bCvf_mWh)jg=U1_ zJf0^iuf_SZHDJscN_#Fn^w7P)#_NT-oQlrQOd@zi9^2#eBfEp7wTCZqo{ryT6)G}$ zrs9NL`Q@6v|w!nNx`@_567+PWHFP(4s`Wk7P z4)Z95QVp1#bhsI4=7aP^FFpOH%xtTNKTqpo)Nw@bb^>1nXC|zVpV;Z_o$`f3$nDym z-fn3;`tkRlwR82<4%cFtz`$OXsw)WN=SFb`79JW5~>U!Mv=-T&JPB2F5V(a9P z-O_0p9(OzJ1D#Lycba>Kl7MF8HlGpav0BRdO>foJHD9=St+DPv>wr5nJ;#Q!5^+uE z%M2sYV6H4-nQz493y0@sP<>-9AirU(h^!(W_$KHvOv_f5LepU(x(wNLmI;{(%7mvx%R`(v> zSAXc8bDw?Oa`#TxXrF~{K*!H0KG_|N&FHsUM`$~@xuVc32u$VP8qiX^HQU8{p*h@d zo|z3tv&DSC8!YX@Tvju?dRBS)xAa>Vja`OkC=N zGI=U?0D+kN5lCJlxpWvbYdQ>0lE_m$P8@tlI(W7FRaytR$_Uj_VgpKWnVP67%bp`F zzp}gBfCJ8!@fVD>G`A&(Pnj<`-qmunuI_o=OHJqQ*nBb4HR?h$vQ8C)Cn50G9Abjp zU4mT6iIW?acD}-N^^0n3B^pqovTSes7Ef99GWHXN*d&k{hy%jZ`yL_lBvE@dNl0Gk z#X#r@{Ru(EDW}~B)h`}TQQrnFUUqWpl&`z3z4gkub4^E&fAZ;P7r(oH^(LL(E{~V) z4EGch|2(cq3i+Y%9N`S?5Q>(WoZ%F6Vxf$YKVDPvuaNZlLgdF$aVz8_6aFN8Yd)_+ zB1{Tl?T;xxr$^u|b_YQa$smsGq6Y;U#casuusnE5p%ijmn5I|1qr3ISspeNdIDF{b zSGR|qcBiGw!DzE_y9GG6e)rAYR*S9e?&E7Mm)_jFZ{Oa!eaH9hyYNNdsJm~_IX2vF z?eF-%pIZ7{IX)sjGdvY7h?SW0>xR0$AKbrj_~@lxCmUXvvT+O{-Fea+nP@D<2Aj`> zdAT4RF=UPlcx&WDSY%6!jLnqzWF(54G1lAK_MqK7FlhG2gA;bo%%scarr9E^b>3if zVH?pU0j^A7Eu6%imdgzCj5crqaChtI##T9*#M=f=q^4R=*KgPTcn{-Qo8LeC>4%@) zzHhQxMu;7%j-R-oYTIoC-Io4gOV7aA*lYoW8gjYp5DKeBP$J5$-^fh)gH_*;f=Fdf zxwAVv?5Dtx$I6hhdl&(%a##j9_RmMYJ+o;CyEc>e^~ zg~I=d+I%$0cNyTLNz(Q-r{N0m_RkH9ezUCAfNeGs*>MsSmpC>@2^yH;1|)gY9` zI|k*LS8z;bnOl@YA`FK3Tf}w3e(lH@V=wTWHN7y09vRP~;)@A6AjUZhjxVR0hwqLt z2E%Ipq=82IoH)dMe=JKdTwQ4pG0SLYGsKL3kp37VYz?dqUiX<|*Bz)#V*kDjtc_}J zKFj>K(bjVfK={C(<6m{VBZ{S>dpOV7ECbNrW*L?nOWqfea>0@e$+A&=|#=K zK^qty5z65B&!uJf6{xxKVV0K!-HcMq8yl;IR5+O7t0Kf$VSrDr)R2#6@SLl`-N1K2 z6#c2Z_IneslJf!|z-;dHT%xFTZQI+J=|{ zJZiI=9<{dJ`TjNoZccxAuKCFE<_4yS*X=#DufD1N^LA{M+huxeclI7O4UEi|NPiM# zfZuB6!WuJ~Y`5OV3V(I)#zX65#_jR=9OeO+Ym5R*#50TJ0H$~`iKJ&Jsqt$*d@M=j@D?zWk%eKrc)W6tW> z&+MZkBmGZJ7OT0t-#O-4g7+m`&k+v_WmrwlU~}W=m915j`P^eRWG{ktYXT~UR2q1s z?CKU;pTfM5|3ctUt{xDR$>2#rc{;QbkH(fcjDX03ZxT0(Ge~7A=q&FpsWyZGX3P>Yy!jt5r=#?z zVwy3=ur!qJ;>Z|0Aj24$^?kB@i1C6Sb)9X?HY@W?tcudRB#`M0<=}W5Y4tGy>kLOfNQf6Z-z2fwXwaHLEMYVtgV0sCv8~p$vH& zw7)JfwTi55AX1GUVqzl`JmRrLIu*@JZ{km>Ij_?dSx#q2Cq!mRKl_{>DXdKTTwPCF zuYYm*^v4XLxcbe_n_aBtnP8X%H2@;=o1I)pBd5r4!)#tN=Hi(IDuuaa>?uA=DWB2M zBeL|XD*?AZPufK}=k?9Pd@PR{rZaUlN~loH?PmU4Iu#4~3CgKS1!(;B_(Nz8+1*n} z3Axm1;GCczSc9%+$L#|TzCLr{_^IP3&z}C^^v7-eU7bvOy!A!P)h|E)q^0G96CWHs zbhN4Yz4K?zfAaD9lP8b8cJlDCiycnexU20JgMu3^1D4?=4oP+6u1X?=;P@^{YOQIS{0>*=?gELsi==)~-$qLK}k+%VH(H zrpzfbV;V_y8Ikqw#?Q9aG6Ao93`HrTQvZtKJuBB#v-g}{vvv-i%IRne5m04!jp~&V zqrbSFQ`h7hbrtOF=P_JY2n?@;C&4NIm8MDL&^}_dk&8{GkVI#~cNP`N(%QP1iQ>=g zmVXR5mzR_3@rdW5{?H<3v$}eYQa}Ehc6j_6Wu`y^zOq7L8DG3fOeFtTc_26B<^$;C zKwbv1G;cK{q?Lhukt?jE;&9hlp$vWj#(PRwSfl%<@Z-`_f}C-h6T=4v>ev{OrC1g? z&MXj$y23CoP3*c;YBbQxS@R&yMzRcKtPS0x!u}i$@aD@$w@~hV?Tg--cpe7Eu4oms z_~00mu9ltM`KwOECfLP&R$xr2cf+9n@8#v5Z8WGHRe_28mfpGg=VO6+1XDdeMq$Om z38^VaaS5q5yuP*H7xMFNFD5e`iKZ9)xHq#C(+K-GU2{|BC%2#8Z29Q?SC_7QdF|%i z@qljzFDM2TAsL@fhUbHcYU+IoovdX<5UAKi@C}T*!iDlKr1JQDJMh(dUoM(i~LLR#vO7oOg%?hwOCMTrd#F!<7 zh`O#_IQr&0Z=X4N?%n2N7j8Xz`ndhZ(Z&zXoqYG5)8|gSclHdk9j~=ML~8fpqes=Y z!%wcAI{%dk>Ff57t`0iu`^+8pgG$9?(kk!KM2l0Do4oVknGQQ0NdZ?Y8x`rZ*~JuX zd*1e*&=PM2aj6XIDt{pFMi5n4jK|nwRd>)9kJ4~F5}O+v4SK+T$Tv06dH?49;n@Y| zq%b_EL@@J0jIRnu`1${u4la0U*#pq())^UIL0MH)BP!)u*>b$0t{%(^xBHrpzW!m$ zod@0My*S4ak|(`r9jw}aHQLiLXf|60toRAbl5Q~Igf*9u7m7D`G)Z-*5@RYggC(c^ zbYL>2kq3g@-JPGwWMXg)+be(B*h*@KShm%eInFQ&?h>jwMJOITMfldyIs2U*)s=WH z_QM0K+7(Mh)JdKf{!Ri8e1Z@mWNFzfh|wHd)E=lDDXBq1Ppl>V{_WYRYr@q)-osi&PjsK^-8_A3I6R- zhDz?UXpJfXE6C2j7V(qA4bRMiDHKnDENK=dVDYI{%l}GYHNq$=-Zv8>qyra0UW&1y z-q?)w$@QoAKK=CK_t(C=c=_v2*y*7tkqX7ETq>%0Fc=?BX$}UD< zPX}l1z1KRO{%Y{jLOO>|$5gKqh41vDSkn|SGQ=FpQm{iIB&IS1uwA5BfL?#(A zfk-mwG>!VEtTr#z-^?OWgI4no)N!|&;v|5oO_W8i0PsJY%#&kOx`8UODZr78 zC1av~reJoX5Je+SJ?c^XO+I~I<~e*u9woT)vuzA#)w8%$rc~KwUF8wA2=|51U@i7l z3R@eF!Qt52OP@#;U3cuFVJbz?B_JxRj8Da8yYk_h1Sn<0khm*zMo9=6*-|1HSuD|N zWkkEOp_mfls7zh~t_=|{3!jNpN(ZN~Y5&@a6 zS1Iokqii%8xhNfd+mM2&mVUm%h>hi}(#z6-1CI-_1^fn0?t>R>fV*z}PwRzTv5=r% zNoftuBFyKE&+D2%qc-R;-@V&@y?wxHYP)#j(PSu;OyOYDo)qg ztG!ZDQh5=V)@e1{eIZ|0SC2F3M}Hv!7b=sXhdM<`pOgm4ln6Pf4BSSB@hwt#Bt1=s z1S753@8~?hwfBtldl)?Eo(M+A`@C~;=8(zR1CYkz2MFNA@FtH7QCxokEv^a02F?tW z7@T1Sk#AIeUAX$7!)EPsI!5hdgJ?=Ie;w@rv$?zL>4W<{ zWBxQ8En^2zuDUk2oEtWFktxIjtd!6dr?)Gzq-5$}lVK#V5POn4433RXTBNvlG}*#P zKN+PU@gZMKniJAF-4|!91l2y3$D6Q$GItex$YXrLYAOd|@`$N6U{?VgpryO!pRqBU z%gMrGsT7?@=mnaTk&OZkWSXermXX^M#e!X*GOiL;WTUXNvc9;7H2d+vF6A^H(&$8y zKiy2pD2LaVW9em*`4aJRmNKr=$Zsltj2R|BEbp3Z7m&>wy*ls=#yG?4jszed; z1?ztXv9(q?5t?g0aU-51t#aPsJ=b5`sykGF=DstMU(wD|t^u+lg<#3130|7ssQHwP zGdFJ2J|MP-q`WzJ_1O=gRtaR4qkbSTKV}rP;P+(WzA#R}Jh}N?rmz@F7RpfkjC#$+ z`afd*N~`$W{wVI5u53P z$!8(>EgnqL_!@LO)6eE-3fqig-J=$k?xk6b?d8(XPWAMU)OYG|LYHm z)Rak_t*@_9*{52cO?d6Y>Y29;xg&}B*-&gTmx+YvS)q!bO=t2;$Pg|pZWms{^d@pF zsdYk|!UtrUBXRoO$Ly0c9pAQodHl976iIqVXCsLm?i=Qe!m0Wa4L}kB$}Fjfi|)0M zsWopHGF{lN^%W2sf^fvJC7(-dJAdQrS9a=7?b*9$-`;)un@^sOHoP+!Pqj8HB!wRhK8v& z4W7e8#kW#MN;G97qh;XVz-JXeqv59a^Fxhu#Un^l@m?t4H;HU6|Bay%N7d+MSTHs= z&B6r*1cc?v&c+!Gviz-05L_xRv92)4Dx?U zCZtM*@Ju@$^kaNx7BSreFEL?;3~yS3`|33y!^~V4c4fRFLBE3YSvsV1EEcsLBZ`bO z3wmVrG|A!+&?QTWd(0njWzhO@k@Z)@Q<1UPNO6s+Xi%OyJhiv`b9|r!%~#DnCTihd zqf)^RKz3{W2gBc0>Ue`E?~;o`X^|2JV@K<-vAfR>lUUK)R?&%_f3xr^TaF0O$y^-z zPmG~843;iH4lclBR*22+^6XiIxWjA3YGyaPoB6vq69lu_Oguy{l|SMe>AQQAnPuiF z$DKzhP@m1>_tRlP?1?9v6>*a#UCsU|pIxLkJTMa~ug}jw3a_sJhD;Q1fsYG5a?)du zR#M)tU zx+kV7JrUFTCObdB@bQ->2Lg*jtyizyeQN3f-$+6PnV^j{GhdOBA*A~`26o}?%naSU z_we4ilV=a_+gtxC%(RAAt)cibzQ*_Zx(hTyMM9Gf4`dLhbAj^MLYnd6u>}T;(AK_` zhf*-_nFuD;(~_aXks)KuGhxGD7F(SzDj!KSq#WH3?mxbF-#Lfyw9hjgjzL-WdkEh7 za-eC+yzUr7##IKDkpdKkCd3Q;8VJ@MwP8*It_<;JL&f*?m1D@H?qX?AH5@;G@vAQ% z^^TH-8W|c<$S~B0f*R84rrxIyJIq$cWN4X2Jq4G78?S;5-Q4;y`vP{BZzQekZhDE5 z`*U1g^aoUOGV)6MbY{;D9+W%-YLN1l@ ziHA4$dJMCM4wmlX?8Lv77>zQngnx^=7Y|m&fCsOr#QV-7dMsC4A3i@!#od@-L|#JPa~f-oq>q~iKoc#h%XBp=uad4F;TeqKxkCc+wP zoPobP++!N_EI>kC-z=}>imQJt=E-?6wT1geA zPSU7Av%mR$@8F02KPMF(*(C$6}FK79U0aQ)xLG&#k~5URla!bA`mr zNZ+98-J@@ue`{~UYmGZ~_4``KBg@s&FY(>fh#w6s_$Qd3h@m|E3f>$;#k0 z5<41mlI5A}we`A!UUla%m-G}vYfZEeVVQvzy4iTFPFBWPcskKR0=z4C5eTWmhs-SR4NaSpQ9o=Pk^xLFS;QMBjimE+hMlY?IXXcM8X;KM-4I zBHl=9fmOx{r%5&8aA+3;symfK%Kb2gf>lWjTFo>eBM^_wG5xL@JUGR8w`s&>BBAm5 zoy@<|{h*-%IY=itgvyte7W4d(-Xnb*kS9}>^ZhpCmAn9(cg|%y7Qa$uv{I zsP52U$$(lTF&u*>wTAlayydBzcki394>L;z z9e3HQ)?YH#vAx~&wCzdjJ(H>3WD6{dO{u(*aZF{oc6WYaAdMn9p9@$`F<)A3w7i6Z zR{b^9yg}Zs#yRq6m=|kmKG4}1zl40Ft#6ZBknY!S;k)*Ko9EJN4+IaDDNkqtupg_U zwhMO zmk*;_Jity(oid5gk@R}^Xz1%MZ8$3T$O_7N6}*}`PhQN3R$lnV{Usf}Cy1$!LsIujpoftgf_K|x*)?i5*xU_c?GZ$?V?l%Qc_6W>ej z3K9VZRmsw2fI$Nc2`Iz^eWmhZE*8vGEAMWW+0*j#p|n_}t8{%hm-zPC*E3SlvD(J{ zDZZQ%!moc{T8zx45ecS+i{2TZZx+hOj2&W+#e(THcR_LLw)BnA;A=Iv-)-wdRcYF8 z{^qUQ2>ib_F&7Glp;<5Dpf9bEy(bq2sb2;AHT3mRHd!s@tC^Rw`4G|*qfc+&{_y{4 z*#G*GdWiUS-+$fDdqyHe({jqW+%l71Xp0S|LIa6qwywA&7cx1C+~Vi3CQwbK605;S zq~0JY$6{&0Hx+eb(R{QcdB)vt#_KL%Tto9IM8D(nX|_n!R#n=m?(UMa0k+_hm``hd zQ+z0+D8jne@&^=Tleaz--i%w;C+=K1esupnbTJ_|9y;;KS9hMY_l*$0_SxN&WA-t0 zIm}(H4?5c)JiL3i!}Pe*=A+(9pjtzd+Ky@$t6OhU9w%C-*oQ5FV8ls*Y5B*T39#dY zFr_;`*W-<6udh~QM-6Bi58zg#J68`Dk~Nr07r7JED{DoVdW6()7Do(k6VeLmGz?19 zlHYwsJp({1-|}n8-*EzRgGtygM;0P{S%kX61bS$~04w!x;XEoiNamR-S6QERY@T5n zkp*vG-#9$0+{$8M?U{00P$LCfmSkb&h&TaRXfN#AAUUH_tQ3P^mVYj1SdBxVMIkZt z#Dh>CDSD7fWuG9VS9j~?E}5tGzZf38A!kVTiQEyj7v{YQU#PW}Uc!nSC(2T*Pt1+p zpb@RP;o~PPA;LU)5A07k{3J?*RX&1^I@}6f#=RDif)9o25$-;vR+bXN#&i_EMn)PA zNg+i|In1CfGMY5why)#5!o{ww=t|gq=a5OqIm&h%6morgxDX1Q2aD260E9qU% zlDCT>X^@PD7ue1i!Msvpy6gPJz<79m%pMFOVigF@#fV|)*nk3rC?NB)RY?IHU}0Oz z`fQkrRG#TV9ObXb=b{GJz;dm;Tv~=-6QhY7(AFL#pI0YB zy|o5c&f$>E>n8D*Kxv$0O}0u2W1}5dZZaY|;2E7{-V5)5q%%wO8F5=_hk^>n$EXmq z)j<0lhC+e7vO4;&VOCU~H_J)ph~V?6-3NOLo-lsUji}qoN{T5(B`4z>81^&kJ(x?+ zO^%FBP6QTGk@$*g=_Fv*2v-T!SeXB?M85ziWUY$3tKWQe7;E4PSY<=Vcgczi>g-=6 zVUj6)DkG&0UX5U7%MYU#D@v7D8A*R-T zsudxNnc#xTNeFfo%LQcnNO5NrdMBweWl3_ZE};g@M@wNYFgph?a@Onm+tJ={Po6mS zL33l{q4$q|JcUwPg#mxXENYI_tB~2`7%}%OJCkT_X>tg)&gpY_2P;_$)|n*!$^w%= zv94*Hkr3@iL0{hpT65@s&xMnbIs1@jcEUXuAqQDt_91+y4MmST#Cy_g0t!+>Gt83o zUYH@ne_baDC22J^y@6dGvYzO<`1%{o4SVXUd){w&>q5)j4ztPX9P6_<(Fvftb`T}y zj*iyWwtKC&zrEk~&}0wgp)<)S9u!z#yiQGUnD1JPA{fZfG>SLM{qlutD3r?S3$xBn zZd8M6;i-%-kKwE&L<4%2a^|$_6}RHh8&ZoqngvImiPa?0Pz;z+d#RwwASV3I`f=8* zOwJZY!N93@3hb+lY&kKHxCI20EnZn9}UgC#x@ zvN5Xg;7oHw>~R`G5TgH)Owu>T5Vgokjvliuz5qI!6Z28TP^#<4is2wEWP}z`CDzP^ zR^y^KyCf&Gx{g1vp_g$yOK00W&bU$I)GMNt= zqsw&q3pedFj3N%tGl&zjk&TgKBjQYkeC}X$UQ+fLPu$rOvrs~F;RsX+h%lkw1$@rl z+vm=nJ@ei>Z@>A*jm~!W+J?SbQOOIL1wnQ>!yAHYhg-1>??d%FDa-Fd0%b`+H;JJ0 z^)Ae(Tr@lvm=Sfbzr*5~L~6t3k1mAg9Cn|FIiCq!9+no9EE=%1KvT^98i}Y501(si zyEYG1$Q7Oq4;4sV(q&fp*x`4M*27q=+f#q!)a5%*I(vs4<2IAYP0}3Ys=lsHQ%7fO zTkGvd5ANJ;d)Q(1=d}0?lP>5QCS3qV>;Ba0_$^v;XG3~>oA zOny;08SJ^dlfU4x8tyUgVGmiaHIz&By;ELBoKf@+m0bb+{$-B%*HwxI#>cJ&H1Oi9-15#yj1vNYangCXowpUKFnQ%fJnN5Uk5cc7GVI7&k z$TDoM#Tf2Kkw$obUNT>(3RR5G1yEhBoKQ4e0DC}Ee2ehR%zPq&v{^Wrzy^~_UC8D@ z?RI82f1LC);ZRh!E9i?QVm|Yuj-lyHDHo@!gql}lX@&g`4S$9;mZP%>;jiTx0z>g0 zxx6d`ssU@My!p!d>a%j#sexi~dV`Q!bbClbRsCPhVo3(fH$J~+>Y+{6(uscD5FIS& zK{|cY!xul5qA?0r0S!P}peDq0aArnD<3aZr!=qps1`}C&p_kSc6G_;R)S3x9GmEES zY0Qp4y!-I}wM*}P`u>Tt-=W)$^2{oC=2w@P`z3KoynPHe5G}44^|!(qWa){G=z<{k zOCJO=6NYw<)(SG&gB@)>DE|AMHkY6BR0N?FxKRmYD2Y1`pxuPVi&nNgV9FnYC?FC_ z{z?}z1lA0$u0Tpai%~lVbg)tGW5*lm)!(~!U*p@C?mX!*4H1<)Y{L*eChRtcx&29R zPiK2a>n$jmcOSHxhCRz1+Mq>X;&FEw8D->pH-3avLcu%Y%dU}9QEp}1(DPTTJBcTd zTJvv7MFG|4Qd|{`jX)Q_&S)IqfXqPG?RqcU@)!hgVezM2)PfWyWKFri;-qC|{jer2 zV^nn&j8@k_Gk`2ogf=r$zy@1UY(#7h&9xeRQ-+t4U?8i1Rt(x4O$I^)L(GNT5AHPSv*1Y@$6&{r^qHPY7C-^8`#E%noGP>ep%WSOC%L3#b(sz z!79X~{h`L1*z-*OY~|P35Oo67c!|QcPEOF`y%}{DK-Z|$%y`>}xX1fXTX# z6Ckr#C@r$&*k~C;QTa-rF-qVZ1{|Xzi%&-b0W|%&kUuaVOHX)0RB*@uhNdHs5;9P! z6Y!HVsYEgz4@aqn#X}2)Leky!WXS2om&qqesC!e^DWU(7SmMi~&X$^v;FuUxkHf$h z;XJwsaA{ZAf_`7FWE_6t4$2M@Prn)em*F7l5_I7H-M`U3WVP8x%{MPzduT!JaBS3W zo0xH4x#F6n(<@R9{mtyO2c2BxCIU=7pN~iUO!4&3Ov9lK%||1dl@ty@I!T5rul?+I zIMT7Of5Ktydvg2M!}~X{_L&@7Hi*c>?I2T0YMfySe4nfzxm7Ea1o*AdWc5p8j#Oj6 zNiGo`tt=;{4(UMAbg?{Gq5B_ zl;yuE8iKq~1+$2l{;+vE_|egZx_$L~_a8X=-siVkA6e|yLHO40S>@hsw%+z9J*M_2 zT@UX)Y1{WGrokq$q&E#t002R)0@M8wRa5%M|Q#tJN~R5DmpvDv5x1%Mjh5r z01<99r4^$Ra49KB@@e^1x)9QNN^-~(K*WRpqUE*7@Yiba@Z17@(PBxes0j<=m@Cq)7AYmMHL*PzE~^}4$u>bJMD-Yd9ps|-gsGLu)f*&%w$?}+Lfk)c`)vYR)Q$&d zGOCq67fb=_rr`{WttbU$2|`r}jSmR?tQvS%H4l5c{0@5wss}6aNZ3t{llM**jQnOM zRaz=;tgD}i^sqL&KVfC%PP5l>0csiiX@pi-@-)GDg2@ciDWb@zWV0bgWhOOPonM(m z9Ab3}iV}fc1c`-&r>A{17*BKHd}3AZx#6G3{R<@`*!9(ve)hK9&D;Ys>vi680f?qu$i-9BQo^|ZWmskLi_M(;k;;AFu2xZUf) zz=q~1%lMp*>5u~83Gb}N+e`S>JuzN&{n+jC%%vi8h-)NC5M>E>3jauIn3qBw&Npsj z6Xzs%1d|g>Vd1c%-oQ z0?=Ik`;G9K{YUmUGOhji+b1u4cOP9=^T4QM$}{U78y>a}m^&H7`LMmU^+9{bgZ3vK z7Pr4t^HcG+MX=HpLR-oe8|w@1F<+5@l+MsvRun{2d8B!ltpb02lh@`Pj4eb>v0^m} zr#glJD}@|`?o?I44SMyX`!xxqL7uplGcK`QN>wx(a9UYq)%9j)fAetO};DDnt%5;QmwupDH zofH~NG5?PUo3dE3B3Mu8#*FPD6-8Nt1Vk9hX()+?1!*d1sYV(~F%Y3Cy#pGKrTR4= z$q(2;$i9LF8;vHx(zQa%4Lxyd2Mxbe=7;OMrTxO|@Ha>BieJBoh&_0fWDQiN7kJ$! zc-=;$7jZ_7A)w`l+|_SI`O@Abyl|ufb>B#IIZuy6DGtdlN=w~ZWpNccp0dG|wfXpf z>CSp1n1wh}NL3?$AiFs?Hy@y(Jer73OhWvjO1XfUg+mMJAX*1P@BC_kiDJnvfB%l z711=L{xm&J-0JesZ`x&bj5`Nbblz#}?d@}g z3RqD|k_%b_T&?-GS;6NAs4#L z!e7HiBOsF8js5|}q!egHbb(efoFr-w%CJb%iPp$;dLh9#&PFQ0f*WjEF~6i-@+zGg z_y?Tj&c-%ei8?ypGLXS$Fwv1+ns`tKs6*h$s6ByD5$KOL-V0SZa zkyHA6Y#}nf41B^!!5@yM^Yaehte?i5d1*<}w@YA2J1p`HEZ|hY0lggM=<2iI z7E+lq-;It~Ud;poB#+>2+v@h+_rxyy3hb zHDy%VTvK-2AaU8K&HS{(+>k>&w`?)PmR3Z;A79@$D2LbTE{p zQX&P$;5TX<<>C?uO(t>_*OwTm`(7F%1xhA-c!i}T0*m%R^9Z9n+!I*sz+8CV(3(xA z>E4Yp?4=RXFss+7ysH&_7b~=l1IgS)878f7VTjeO3X8nekCZA^UJ{~NZ^QXlnqE8p z=G*7Kx_kk_lMXhZW_Y!t zJ@8ehy*_E?=~abBz3%2AwbTh^JWy3r0EW*j5eYp&KDkjG))k$zI^y+XoVw21u=zqQ zisrIH8-#pD(Q=(r5W746P=q^A)HnyImm(#oEW~*eRc50&|S- z-#PH~!HrJXATIj^8NzHnYb^!fT8BAypB0n{z8w~5m& zdGxZLIO(L9|fc&`(JOtyPeU$Ho%4 zLN&<5B%rzzy%tHM0LnOT(2BS*Ih^3!Y%q-cY#gm^Y-=)1jiL~q4!}|3$$S&}=(6$$ z97+p1lg4zH^J!as-SLavQzUBfe0g0ez6wU*9sisgR@Y0u$G3x}Rixe}c{^@*&yoqA zbl7&RO|*(x2P~$0cdG4;T~<58pnS8{;O`h}fi;_+rG;mfStR3lx=@Q9lvABfb<8@) z9M&go9p(`?>f!J{GVz%SKb6nlC8BiHpeF>Ac^#U@QfzK|(&^6Neb6AaLZ>06hhiE^ zCh32Qb;PqMN<>Lj7JiQ=P8?fVE6wpmg_u`ld-QGlu#N2Wq}SyQ%`sCZFdK?4IQ+3B z#RGAxNZ+vxDoWzOAuxPe!BZ7YR(=ftGEF#`ViyTDpUSEUV#4j#v)t{&mtH^e%G>8Z z`t-)5dz}z3O|A)sdydmhXYJ}n_Vw|@`wT>CYkT;lyN~f7N#?lfz#IxeI0KKmdIF!6 zFC~qoNhJ#kRAou^Lkbtj);17@qZ;R-bKu9gTfdAeAY7M>+jU!2voLvRZJ;Y%MC?r* zc7r;OV2jeHbb8@mRyU5ZJXq>jRQ|L2;3>kPU|YgoR5$kXc5$=_Q_qqmP#h8`T|Z>D zbkh0Q$|$HQ*K{IhW{-8`FMELWPLUJRb(x$aj zIWEvJNi|c*6e1hD<$NfN%}AFj8RV7J`%60x$dZv$hX9|{uk;ZTTo}%`#3+~ZxdfU` zX(}_x6v?8wpl>@^4gF_kUM#4zLIRj<5|!umGL4|i50=@kEZdpbu>%Xim41f7@5gx>0gT3SSFi-a+yj~ zbfrBypNuTvQ_#8uONO{7GBq^nakO7~Vw*rGb%G&5p#c4UlZb62+d)-}c?_&N6-NwK z#Pc0&D;5eYP^&S(`PWjXoL@me-7x>cqv7?ek{u@v6uR=kiC5k{`O&3|-?ny|1_t|? z>N?FxKPD&)n;*A#bX&UHZnl~_9z1$v8X6cH@vUh6Yq5bRMW`HCCh{jJ1>_SjU6KoF z2%y|syQfKJmVe3@qfV@*13g#hlMIFtQP+$t@-}*;4y>ovFkB-fN_X6NDFt@w?356| zwnP(1d2XqS^GmG`b_Y@xhS#k@BRmewZefPBV5;SRBJEgOT@F(Lb2$6^$J%=aZEhEg zXqP{h!k-JxXY#2iytAbOjbl@Gm(y~Sf!GUaIjq>x5_c_rNMSM>2qmJ1;|u>CIshpn z*s{3Bl+L^l9tp+#<_ezI_!&2%DdgQo^!|f3#K8pfP%0%P5kU*p#-{ zf2+p>L}Vo~S&NzVU3RD>6y9XEoJ+9sm}DXKW^Hc(Ry)Lx`1~j?k#0x31*=%uE?uXc zEE*#`V?SD3jZyA|wvQt`2cL*Qln^-ObTHIXv<46#& zBNQUeh1qMbpp5X|FruNv?S?aiwtF-NvnVAS44BS+>tdzx2 zDkf3H%BOo&W{KrqTkPNix$b{AQe03}*{EodhhU;UVs23p8E$rI@0AO$G`;uPr=MN9 zc^@68A&b-NpB{Hjj93Qy>6xR-`t;$AyH6k7ecWk=^Y4ljvFB_J2W2e{02+INQa}_+ zG8&}`omK@kogC1_somasSs5dp9+)*Q$cZP2=89(K=^mY(PFj9(E#I`w3Wo$G2m{0o zqn-*fSx)i@S=4Mgz*On0Z`rvF@0f$L>U0@*m=nbPVs~Gq{7+)QJ2o`n7`9PGcTG++ z6C9^^)E7=66(Io^wD0oSrD6_k#wow2^O|jT%unS!7#?bkFuXFK`&hHND6dQIoGdDl z70|^U0+@>n(a6HW+o-DN+0&Dgp5WP!pjBc+K7ekI)?{C%}Ja*Xxw@Kw?+=>^deNJjff-~!Xfoef^ z2{}b}ft~f=2&?jf*H+e&Og*4mEs3_qB0NWSA36pV;**(%c1U8K?L+_-W$N$wq`Az; z$n#Z`&O-;L1iC^VGaQ^oIF+Exkb|0;n+ft&(}Rq8T185$TKOHP#v58ovUg!T<RK641Z@Z9tsU!MbG5hp-^s#q6K>eKwk*_0XaQbSLMO89_pXTdFILmCVT-eptH2K z-+6@5oWzzOpIm`aBL8zm6-EpADpJCsjByHaCz-hzKO9X%ttr(!w9xmMjiG+ zD|ur}m&pR5mg+_n8gZH}DEPA^Ax@F0i1KDwJXEQutj<_N@KT|!B@%RMDGN;c5ev*{ zHgOrrRZyFX&y!F~Gb|`g*H$1f?;f4-&s05sLnJ?k_%g!9!GPE0@&+cIfn~f02E)jc zm9Htc%D|13%4+|gE3H}sg;qc7x4QGs{ML;%G_&$cOKb3$*Gt2fTi$3s_0{F8H}4?( zIB4l~&~s1Lxu?C$^r)?)qpkJ9xBfT z=htS%dA-;xgiKI~h8j0$GvSXi!eSHZzfq;-UKJ^``rWrZeS<@NW+#&lv4F8@ z)HzV(%`=06IUvEQsfhIQ-ENP&x7{%_5z6O>_no=hNfm#Qp4I%>Vj8x4jtXm*uI*%o zqC2b=sE7ouXbnfRk{%09$5#@wbGem#Iu^m=QiU^cr$!}V6omf2^56|D{Rlj;PF1d9 zIrB}bbzRL0nAPG^+&_2)=l9^=(|3kvDDufwrJ?oT6TkZeam~swF8rY4Wo2vqw;Yq5 zOBKOql>9DW#%H*0_qh&-rQ1g50VhOM5Xkyx-eKq@=}e>4R4y@`a0L(I_L7L zMl(Wk391uYQ7jSip(GrMEutce`PDX30H%VY_KziB2aEV`)Afd*SN7U4O z{&+*EE{{rnI%?9 z42NIr4f0Hk8-b?eoZOjtV-_BUq<2vs_fGq~V`6BC++?hNfBU`kWWlF7)Hk?}L zHi+3_QaJ_%M6$qv1$P^0+TQvvY?YW+!pK6JsHMD~y?go6nGZj`a{b2l*G#rfi`C-t z`p2D4OGo>o_SU;ky1JgUKf2f2diR0JGB7Yk;#WjIpjg43 zhPVu*kx3F{n|Y3I*o7Qph`@1<#>v*KuB@o+s%$F9=R(b{iWs3svdD3MHw4t9@~~wN zv?B4?)OsekZyWhuF^>Ot-aN!!5{%0$8K=WD+&$uQkM!RDw)O7)PP66d;}KsR^?MQx zw9bb$OBj)B|GeMPZ?a93Dh$sI^mdQ0Jp(u<#QJ8k7Mm zju5(_$N}=@8tj%F1~wH4}P6R2*@GiEyP(18<3of8cDu zQ;~F;devnc^(<8>q{alXL15#fUSCCKi7NmVD_lsCUfn)Q0JHDz_qV@$G=?yfjf`*5 z<6s6<=l#~}XWzPKb0=3i_BDNQ^5W&&rhX@VMShaNDDaxCgM*eK9K*rhwg=sV)-I%9 zoMX0;o~QlJnJ~$~SUmDKbcW;FLh#1FWsHkF2!iR!DQJ%*lHf?>m(=;Zf`kjnBt~VT zR=ZMMB50*F#oK7aBZiPP>#I8d*5mj3=Me6Sq7s>khEU0&%oK$9K;oN~t1U@?S)sgN zV=eFOe5SRpD~69-i(v&2E&LaE)od)=Dub>zw+i$YmY!Ao*S^4!JC-(9(dFBQ&WxDr+j!y7g0SBDu)i3?p!I z6e7u>@EWq1FqC#);#_4>cbQ9MRC#qq49^1LFF>qn3=;wjuySaH*86nsdOj&+Qb>Ad zkZvTI!ur-_I!>1(-p`>}J(jliuKE&5= zLXQCkV8Fu=6}T&*Fe0%-eKyGrFbBjmic-kd<+}4;as<(0F&moxr}FQ7zx@Saz{w9w+p z%7>;&bTMrr*1o7JF?E-P0@3ZXju^|T0IZH|LB*d(Ggso2>NhJp+rdnG+mJHj7_(NT z9a_hcL!?pm_^t#>4ly^z?2{>Fh$JuMbt9DcyMkwAwpog7)ouNZ6cNA3kwJEAxeY8S zg)Lg4I;{urn-O+e1jtc82|q+_BNR$_td3Zn?E#i<#Jn#%S0cqqHEN$+^hV3*rwvN0 z9_QTb^>5%?8etN}#E63tJKcqM?K8J7ocrSF?mTiU)?%yn8k8)6sXeJjcdb~FAiQE9=tjV3!-f$EY@LaoH~p` zUsDN1sD2@tYt{>zsTmBVzUzZ8(6!T<(Y-k>FgQ3x8+iUp?# z)-)`MP)|tWc3$Ve>_}&WI5z4#+e*5~fk$e20)(6(nDCl(9VpC$L^^U zA}!E_M7*GdALQoFx))Khq^|WuUkK zkygjW=jyn9AWQc{4@BhCt$m>BEGn7fVARO61u6NidDoXo^2+I@-V91HoQOx&Y(|ug zUSf4BpxBa#N;avhN=9X?I`R`){(xs?yZY~{rb^B7?luTZckkESA!YtN?|gRd7r$|3MAJWAfh@^iAu6;li7BmX{MOxj zMz#@;n!e?YI4AB4G5(@uqGk!Dx_yiw@{XEPHDUmb@rca4&RzdH2ARY=MjlBpsTD^^ zNEKFln8<^uYK8n-;_#SCPoZ)2lYOcP)!Y4C#hwEC! z*GYsDMFx^)g6j~fRtNxQKKXJHZmo16kjezs{eVOXS>xVlDeO(HCY%HJ&R6qcZ*Zd! zSegAR%hLStz9ZQk0KOXl%%Kd!^$n#-#Md@O=Z?!Js&9GR;Lj+zY%r^~mwJS8ie!{& zwCP`G`(aiEwp4<^PdS-AG5ynfKwcNqDn4&RgGM79UVX2HM_jLEgN}2DcLxqWed_vB z47=E*B1`f{L{7J{#qFJc;p0N{--ZR;SV3ODP9{wOKy$Aa^rJIc_3WlvZ6U`fWoQ_~ z&VhwS6UgOmKc;V-o1~P`O=Z?+WKeOj2}nU60v^%iFkVPccAFnU>8do5QH+XF@qF1> zZt_-ji$e?lBzvr@Wk<$d6Oxd(A+>~Ltf$$Og~9@8HHw}$Ezb2=vE*_1!v*BH305Nm z2b@FXR&K`UB?9tB4`v#tV?&Z%0 zU7^(#SbZ0!Ew^r3t;45iA{#w(+QNtm2V|#&ul4|*j(_E#C%}9wh;B>WdIzJ2YTDk; zg|h~v)P?8LpfeCzI0n>!0jiXCzHa_iigWZBlb8ss`T}(16 zl6;`ZF9-m40lDqV0@V|w5s48WT3<4dNl|D^NRdyaU-bsktXm^F_;>O~dpOa}xc%Do zkKg|M%vWDu{9$+kU^5sI_l$MQ4i>^XJTx+L^V;>{;hST_*R9s+i5YLaw27u5?JRpL zL|{MGytDUra*mqK0`-bOAV-N!?&yCPNb?&9)$z^SM%Im>>#VwakLq-FhP~Bc_Wv=T;RUadVLq%s)Yjc|BU7`E<-s#!qc$2HNv`L~ z?$U`$i>g@qND5^)XkBS#JUGVjV%)nL0MuJb1>#|^Kb=b^nI)4=ZVV2bSdP)<74W;l z_OFh;^!}~Fxnt{@7BEowbOD-!*r91rX+%?=;TemTiChaYo|>EiyaQ`b#IoJeLv*uq z@t7x!lIZ=7L<-K|0fm1X>nefa+g*|tw&?Ac5(?`bKoZKtDthpP_rCUxjm+J);bRi_ znqa{Hx>Lt1{ueyqUm2l8Y#P9X0*yr3y;>`#>!oD2j*VljaTjQte+c*>;;O!*X6xsC zL+%kIo}%V+8v*3Fj3aC{fdXnGWT6<2tK0oB!ieYG+^FIk7^^C&>-)blq8d-2Qx-ad zebV^ISv`(G12<;vN{%u1EEqU6+LVQBfj^Gf+`&T0yMoG8iM1-X$7QEtx{8}O=XAid z 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


HqY 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

-sO+tB={PNCca_2hs~hq1+%`V(|H_W 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

c!zbLg_$Kq0R>Aa?xh!d`EL*!BYGU{2sL}+ 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%0DTt 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®?JzoDBe30xYIpOM510HqY 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 `oOD1Mw;gmKKulxw2Y_rC1S#j@BuNdcQD0I4 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

4p{H)W=aP9AgmL~Dp+ECGclIB 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 z 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

n2PApI((9h!QsLL$djkS}t3(#Ij?z&b{ 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

Kz7Mj6>2Ucqex76S~XTa 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�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%0Dn6 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ஶR5yNfPey{-!l-{-X7h*?$Oz80{J#ZWAxx$(O5QyExcY4+yj zrXxGH75oyY$SZz-XKhnECNemiJ>;3|^l%)3pv=k^q5;!~Tws)<9Po9KW!YiA%tXj1 z;5EQ}FhZQ+io-UN5WcGb z1a!c67G?y{71Ti>W0+5e-$t<@D#s-hdW$p? zCyd}IgPs4Ht%Ea}kK=!mSqD!ec(g#FEIHaYx;(}+i%6ml5ElL7x9S7&5m`7S`RH>k zU#uk{>HI_sl6{VOm@H!?2(VHjjLABD4Hsto8%!iAfxfv|f4EvD5O6qNr{Ou}8>p-{ z@|}};b=ZJ#|MXPz*)kjxQS6m;Kw&Tel$GrS5KS@V5a&w`^+Vc1Znal)@_ zz*{WVrVxOIQCNkH!NJvV0fiCJ@aHtW5$R~|P=T})9AeB%mA~@wHc2GiL>ZJeN^z*5 zp#gAr5(NdqLewag;-)qbDy$1MP|t{y|pl8cwGBFTUI{oQ*jKNX>{>Nj}sJ*c24$}MFGCp2or;m@D~x|8!BU9$859D`(F1q^Z{|Ks}K7Wd#ngF=G1r5Ff40k)sGqH!qf z$arRRc8-Z{;sxB)S%OZaD3QaHBU9u3F@!XX8Hz|LlrU-mvgAt0K%9rwI8R?=$|o~7 z%_PlCDxJUv2Gp2PQwk65?iOxEMV=$8K|s2_o)F6dFxWy>J3vI$ajx$_DPjN+w(LO% zFwxwBvI=ZNk%2!%JCrrT4%*s_aFEUptb{UetC*|e3cpoN>j;~?8s*(Rv6Zyw$BqQ` z8*@}JR;3nxt#TJLo>b}V5J2)$Y1bxv^h0$hN+h+~9Oi;tG?C!-Q~tkZ=B>U_H(7cs z)eT`{o@#)Iu>#?+c%juLr4d^;$`rR84+*`h2QEu6zwmy>GXqcwWlA9Y5|ck4e-A2B;?187B?EM7iTZ?qG0Wk$HbYhNRX!iWd`4 zoR!}Y3J~9s)0St!)C@M5{o|u4mJ~5d02dp`Buj7%I)9`VM*WwT*cs5k!qNg%Hnoz? z#AB&UJTZsFLKXpmK~_kpf*(I}xt4jE?;i49PJHT=0s8o+_bXG8Zz>+m7DoHHq`QycA~;W1% zZ2Uc^@Gkum$@YLmICEzhX=JiKHq!gkt+s|k2i)pHg!vj))3gHZoy@CeBfukq=vas> zGl?Pfr&~(SU%tlv;%ycWo%_L#`wz0R!=f=M^^dNAUY(f>a-6vu~Gp|Fk> z$O;ppv#cN?$@*s>p75Zr9W7j)*T}Adk`5vAMfJJ=z;iK^NksY|e&615^q^*DnYm_~ z(%Qg)Lwy{%E}U?W<#86~M2PyhdGmRW5+coh_x+E`HOL|zh-weqjtUqlMK3iC*g?71 z1u`yQUb}qpd}Hm-w}>yl4;F6v{r1nRkJg{Pd`;#+KRx)FlQKjY!G@tjl{8if`$LlM ze7-8-ziotwqT~}97I`LU2$#7xR*aTQv=<~8na;N2Ep5eCY$h=lo0*}@OD#M&J({Ab z*40ARNq~+h4Dm?Wh`+RDqUAJDq*k-}K4!*a)0w#hMX@rP{wEOnY%&)K1@RWOwyS#? zx*{C~{iHhxlo&JU^_`r1*_wvx0wlMu-0B=~Bz1oPr38men5;V*QpQ0>8GOdPH>Y?F zJwi~SA`l4DV2VJ5fvjKp##Qdh)UX2M%&6F|HXmt;xfAkUz*fqO6OBkm3OhLx62%!m z>P(2c^+>aVk;!Ic_6Z{%8YU5nv}W&RuoMFxYbwON)xO^RUu4efm%{qDJfE%e27m-2 z-;NV;G_yH5G2Cq}L55M7y=H_-mdkEkDRbV9r!<{?;&=`h&3sK6G;M69(9xAK5nJ_l zQ1Mp@Jpq+GlsI_^{CCRnWxxWwt+}c0;P%ZS^#lt_Hof!lXI0fTfJmG4ckeyGAHMUk zUmEunGg3gs6K4WGQ;6ow(?Jw`QU31yLRT}jUkL_^4ygfM>i2j{rrR=8AS5BSuDk)x z<}#eKiB2)Sot}%b9XOf7M-@TeIPhkha8ns1rJuiak9m1vi-yH%E>Zk|UWRzhF@`S* zKXMlH8BW0(wz~uz`9TQ%mJX4)jQ|9of?d7697<#?S96t0WC~1JOA(9&DKwVBVpYEQ zJ5I0}>w>A5AcE2O9ET;7QrNH*IK7zL3zSC2KnXxZK1z68WRCG*0Y}#evG;PS2@r8_ z6*okEBD389v^)e(0#fS$C4w>GCtW zV~Exd>xHH`peEOW1!4!T9UC--OWe8j<+Zk!x+D8P6XAV5udw{}w?F)3&ld-4>-fiC z%4xOZ=Lgu>0h`Sv0)h|3m(?2$F=@n>!F6Bmw|QD=wip^ z{Mf(nc|q&PE7{3(#3#}F+<25&v44W!%ZJ!COH0qRVqLe-y2ki$xR z1I<`WM&fzVv0U^m({PowsV-jF&)_VRQ##SedZ4FvQT)sxl) z(;A3mlqnFISp#@lQ*C|JU{>WL$VQKbR}5(X(1 zdl=<+js%XnpolTuQyW^_5aXzwh(LECyJWE}#0LTHzC+Ozf*Rj)Zx&s>)N=fbPqxrf zd?Q#``PMrhe)`$ossl%A8_!<60gU)}b`{O-+Q5&1N8Jo{c%YwfE#e6Ohzr$ z>wuySd@F!Rf6DHTzp-n5O{=mxDmy{)(M+7OlnN~qeZzyRLpJ2(4m-namE;DEN|WTQ zAHsZpoFRlV+>$27rm!o+MsYmrvm=e*;`$t4FVixmFJnN&6^H;%7vREtpZ$UeLqtr$ zk#)&n>Hh#CkHSg?mXDx$->~6{vX_dL0$jAQo>F~YV(>BfSB6)#npkj|ij8#tbi1wY zpl0;zu@bWVhSxN&>fgVTw zYElA>K;CjV@atp80HoJ-_9lSQ-8w)6e8yB$ji}2w$Z?!-j%wT;qR=Al zpximbK{VeSC#1FBM(mkjyx&V|sgI;JSr#LF`OJs%Tu!aJ`unP>HHuOECIG4HsOV!d zEI;6^r5?@iV;Dp*$*lqC-|YRWwda`JU4xE9JZ~QUjL56fOVVFRNzS)!Wf;>nzJ$|I zW@|h)+6RMfK6-Hf7yI^-z?8u>^+M?Jj%sB8@L^fJfF5Lv-@n}5(#Am(@n2)uIEc~!WZ2&4#L{QEWf}lbm;KMn~;>=Gj%+I9L zSZYVdleC`G>>*`6NK9gCBFSnko3m8&PIlF!!pC-%gD5FJh5SwdN0KCwxy!E*Z^&Sh zh4{}{ZsR>(PfjZUtdOAFbmh9&L4k;wY_#!vwWo;pb}NnL5Ox%K7?2@@X$4!pR7~iq zN5Ecf2(k>J@y1JSSju!8gkVX<1;(5K6L$}|utJqT$TG?B5VpZ;ZEqA6QdtkC)TSm! zL2&Zqpk5*ASj1cfJ~E&LLd+6z`(^r}K&aBx8I7iNN~Tm&`E$f1@fjafxXjQ*c*3}y zprkmYOQ$@Mvo;d5WKu8+yp7UndS2{FFMi?XSb)nZ6ww$R?z#7MTYb&`>V13nIaOY@ zx4#TT)zokv=`cnx2i-$OV%OC0^_v^8iD~E1>uru)NF(+oKt$sE6+d;{zxyMDl~*q| z*6w@1=t*E(sGz9wjrTwL+aS6(C9Xi0sI(-6J>WRXo+81Dn{h6UhuNny*?0Q=SAhia-V+I^|0RN^wFEgLVG29R@@& zB5HcSsZHi8V96Fjq_qGgvVQ1cX&u6}c6+y`hmk)(iFldiW5}-PffkB6| zegor~oUMmXi$Ig*1_z5ZX```TRs2Ki6q}@#%4u^oS&V-L3rTCDk~dZ?Uq$jH7gkuh zUBUXSkm^k~5U^=xb(y#%wW*xatnO2P5Z5NO7Y#y7g3y12(Q}##>Lz68D`3+y95!N(G$C$Cm^XG9BAB%@HtNoRs+iQSFkx|!PuBeOZHwD zKIDjJCYfU7KSKpYZy_@gnMzDVlkrr1f$2Jr1<2%h3^x!fsBnaMh4LLMMfsSy-aOPa zjcwIRc~%P2Q<_f;APLE!!1%N=qrAl#)MNFwSr8!XK!YGfn#A&umDd4$q7J`+jziO1 zH#|x;hNTz<1>%ldU*X!e04E@U3FErR#|lJi(lX!)>RjNUH$-O&>}c?t_`|P3MkJKt z234=|uQoIK&aG&;@-%-$X=5T%kB(%CY&dW-P_q)N;7O#EW^9_sBh095qN3;F1U??( zkfytTwZ0{-2Y~hOfJzZ)*~WRs#;s;iFGK+qGxU-hF%a?B27F-GkaXh|xDX z_V)8bzspS&q9)VCH&Mvimn^kuMLV!mL~>D5u^(wZae)M8Q#K;M%5dIn@jMk+GRdVj zcV-){OO^u0#}MIkOEP1%7~?Zf6BCmuHgMd9a(zW)q^F39cp)(Eou1UOUESDOT2CAz zzG<>X8p85Z)TgCF-dcJ(KT*y!1VIP|i(ICOpG_%gMT*=FaK$qTw?U>r%&$!w)S);y`uM;2W&`|6N&a7*Vj^9l?# z8tKE+we>g)Mf>*cC4}sC_LS}2r{bSs9E{EYR}gHub(OkHi`DD(FTc7)7xc~#KW6V$ z+Ih(z@7&?ML0i-D&)+4ptq)ba_5Oz+eX?U0@o3-Py?fl<8}?Lvaq!5o#@6;*^tlAA zM;f0nV9^(cRvNH0J&^-dSu|20b3)o>#rBbrTmeMHVv&3-UA{`MX+c2P9nq#hSse=B6Rr;dZgeSW0h9=(k zbS^@8=|vX;O@5IEhyqlrR=zcos%e*dBi>*MnTrl5 zEm6jVVbb(Ty+MePKiwBV7z$Fed0a_%h)Hkp*|?=Encx8qKG)3E~-`Fq_x8+Q{! zgdo6!f7QW5WHm~B#if(4vdC>G2j#zaTZhb<4Mm-H?v>FI{rX1x*;BRE97cH(c(;Iz z_UZON?IM{~L*w`AYwjVj9jR?N*KY2>FY)s#fk~W!$4YrkVi9pk4&tj!#&`=w%!F&$ zl~APxVt00LCLN!cjKrssGf5CfUvb;b@ z%s9q_I#fnWT_rxhfDn9pAjs89CtMC3@YI7pLwtxa;pgB==?gM67zR9i4nfIYHj@KQ zAp#pjARd+YBni^ji z{tS-h4L^D!3O+;^aR&1qm*1XXBy%LmlNfhEp=omX(t$U-h1cLhEN({nAK$xmq45ai z{azrm%l*6n*zDO?fpis3TAw5(dwfRqO0E^Q2MvP{2xKTZXl?^AwC3d zG<}|1%1McqQ@R9G&6p^pYCAo%9iMPWo}6 z9Rjv&ap%XH#+|KXLW}Igz_FU?i`Zcmt;s-|Ng>QJ?M}p*C&UGp=Ozg#eQP{O)LE(O z@nhvR-f(+!Ok;qaV!CCb)P$a1O{4!#!12K&{MfFx+GYHfk$spxx<-qOsO6<45^IP% z_9wG|>`oGqsPe<>^>JSGmy}76QpsE~lqiWnq@^f+XW60SqQZC}x;jy8K}hAkJ5@n} zlEN)QGNXPeW>Au;F#8*rG_9dE7BQTE16Tr+dKY{yH5koP?w799Q+SOb5u8kPR2*8F zErMo?YJo<*I-?djTL1Ncdmnvb`ZKsaz+wpE0p{TOpt&ex^BKGjF51||!tahtj0ayE~ z_8&faqWQvgP<6jU;*s0Kg&vh^B1sgpdK5(N2u3+Lw!f?`%H%F!17P0<-}CBhiOPfI zWYo?OmrT!O=9g!qSZ%to{3&+hfQP%dWg(N8njDSx^>WW*TI-_3H1$*Xa%E{+{cO*1 z7i{tAO3@0dy^4U&LW#JT#*g(MEhG;vEoH{&sdi@>?(w(fq+I)K8&EmDc|A}g$wp`b zT8IIOn)opTb6rT#RRkrsKC&1{qN3nxsym|MOWh51?17YK!CYnp2bnWnig!^1iG2LL0^0+B5_ zuE1}iwN}q2;7QZ0n1GB)p1=FfbB06A-QB=QJOMty2!WJXG)3VjC#wLgT~`V7GH>Eb8v}~D8dOLh)n+q$V+pBYh<8jAQl}Q zjgd(WfU_I)ZO_K%aNWX2UkI8FEiKH!K|>@({!`e!D@JL$YLP|Z**FQ!zyn!=D&+`E zp+|fN>f);%n~$j4)w60fTvk{j80lb?r945(mmDQKa@G(g^opsAdd# zW>k4}RbxF{`^o#5niYqJ1PK!gPrvZ+&Y*(peg9urt!-K<0qO-cAUBscyO5dYAfNvR7}L{T(v_RpK-No4aFnv+yQ?k74&g_$&)u`SyM#KvTJx;6Cp5|ok6K6H zA0r$)a(LanQHkLw#-rD-UOC@#ta``W#i1vGf6m|f(VjzG_-V%6wuvDD4BT*{J;3}U zzYo?N)6KfC)Mo3n&8$8mI?``6Um`zoO0)YUcxg(D3^7BTf)MB2LYbv)fF>pg1~fGB z&y4ReX9GP&mL%Jw4@3szv(qW1H8Lm7TQ-?SAKmL8>hDLsd5{>6%yN_pJkJrI;9gG`m~f|rqpgfQi7v0_1TR?`m_VSADWyJH2iK%Z zW?U^w1^Sk4Ps=W4Qrvqw2v6}Q_6?8-H0ah+mB0qMuE=OPe?Y_8t0+|wCtvm9NYsgK zX4zArH^G5o3EtpP@|4Zi({T&XG^rrl2}@AXBu~54sy$Vg&F*H2z@(zie&AAuxW8ch zDW}noUx1s0NuO;8W@JV}NjLk86c`AVRBw`>EsGPzNF@AQNB4y+Q=p&A*YbCSD4xH# zxLs(hJ$wM-Tt$468bk*L=3`b$E-PDg^>5anI(-Usw4ObGvAz8=2gmTi`K2nEM4o)Xcr%%<(>E>_^#UM(#cjRrZF0@;=qhW$fLyW>ih_ug~ ztEeO4)R`?t!xmv#T%@6fYmYlyqK+Xycc9|VZY1IoX~gz=qv7!fon|ElQ>SrD|qlFSSjOcAiQ3PAd&5=g23Aoj|N z=>%hM3_1lC@+Aror3y6*3wWNfmP3svWeE~ktj#Uhldej+rcvs^2Lo;49C4|T_N;z8 zVaDQ-vw@K|{rJNjEKrwU3X`;eQV}LGaXtrwCD`CAMufPWrJJzQ2=r@2eirJx1re2K z-%j9!L#oSZE-CHcW+EcAERc|m1SNMSpQm7kT=jPxJy`=0yEuH#bK(wG(by87Q> zT*Bp!mew<8FX(tY9;Iz9r|WAE?D^#Fa!B^Sgo?Lq-&b?2?i7G&X*u24&>)jGV$Wen z_hE$b;|*snvYQUq{+Z0y&15uBA|Qj>kM03MD$vhMo8?sGgaciVz$cT&2(Oqr>&{j% z(49^tq7yvFib43coVQES#6@&-ey=D3x}M@sZz;uC+E z^n_HzoJcN~AH^1D=!IEIV$^Rp%fOS)_(m(WkfY*FIgj65D=`0?th%pY;VBi0{E>{$ zfRbNjJjyq!dR`eUH}mfqoqW;M{DLGUU8B>mv>3VgxjxO!yp^`P5ZVQ+j@zNS8*L4& z`l-2(vg7VuuLA8L*-BGJ4GneJRut7^c5@o5E%$r{cNf~uoUT7oz3Zbl$_j#ufqi*} zn?Bf4Rl_g|xN14m(sY_n=QM~J)>5c3v2?QOyv{h^`O&T(cK6CUNYfH(H2Nhf-wR0z z&?v~b3#`!dgVo#qg|yu4A^*E2CMRQKQED^FT0|j9vU3ZWfq@9`AP})hFF+wc#l!dR z+_~2|6d&f~F614SJ!$%af{Y%XSrO^k%*Kol9E~3<-=%O?au$jecF0}e5K7HJwRVdc zPkSN%By0t@}tBg zE6YTd^7R^hk+*n=Y&=BT^aP?cZ!rU)SxCtNL>uiO+s#CqJ5fVT=gDG0N;-$`t*3o1 zH~q}GkjS%-A-SS!uu&7Ux>Po+I*XTo=Y87fS)C=$nA)OY*uTR^I;PM^o=UOp?q%L* zun6^NG~ClcFYP$~dusEOs8p7r`qY3Rt%tI`6Jl7+tokc;pzH#dI~tE4*!l6c@_eMC z*U3^J?AW{iD5FQhSW^==>h-W`3`X5UztyM`tL;tad;oD{Rkj7h905pq+JcT~9E!VY zA|S(BbXMv+&j41SGdmNpap^?-d}owMfXQ5>v$ubOpZpBvRt5}ezkjsnhcCZ-JeEw2 zjfh31pq@~57!KK{6mr93H4j!&C8Q!w#?t}jd{?DlBEe|}z=#WF*aIacIYgSE0t&c6 za%3CbY(|x?dWsA}upLK5Ss&sx<(PtuYz$rnIV#BbE#O#bue!_`@`g9k))4Oz3Y4sP z3#c$8LTz6Pi1ZF>GAgf1&KDC*V&)+UVuprtBO&2NR>*38P~NYOuW-yR$k`8vyP4c0 z11$G^1L8&itkYiZ8+rZ|Il)m{VcNH~Pm6G-hIS5&)!$5qwOv zIQ?_i`0xa;QjGCE@qML}kw+arbv_6uV))iXizlXFbCWpIx{DPu(4p!grinPAB2<#0 zGH`7Eplq3kK2v@zq-UrJFe9Wb_6+hQI=S21PuFY`9wQ<2RfrKuxy6f6Lwlt)Uvj zH)lOlFVcl9UJVn19P8A|?4Nb!@q7(iPvjsyMUWm2)5a4y#;ijr(##9(g}q!J^~h#_ zC9bR(pq}bA0g3oCLHt?Oz8HX$t+sL=(McUxp2YeL%>?8!MUYHQ!GTsU{T{C~syp!W zof|F3WN+;Y%>W70zr!}KPY5D~)o)^p(DE6y2G7viDr|D{7XrKTir@KohmF5t&n3pw z)C^5NMgHP~e9b|dl*EgL8&p@=Pi8<(@khlLlM&#EVghz2W=B0pWYJ)+H&-S(%TOc` z>3d=2l_>if^SqNNjIb9$jDRwi8H=S8qD}K3&k8|U(u{ZAeb_%eGBh>V(W`;@7%0)e zy&4^=#|U50Z`ED-39wQVKAkoGkU&p=PA;?91 z>_Ha?PHbwD-DBttDx>H$sfyEy6r%Xp=8aKN1;$tZ zR!_M$QzVY8toF%Q#kRZj+e&AEcKAKeRW3Rr9jV@S)18kLyuF6lDC)HAS@*(6KU0B;>k;N zUjHk%g&*~Cl?uIaCZ#$(Gu(OqKG!&-(Nr=VNlcB=ujiKH0^|Bv@k6pY0u}$t%;OZVRzS+1#k(^r)T6#0?PV5G#ncaBIiCCE zX)y*TRY1d+*K(;!hTx`RZpWnKNTlgEx9uRVcx z=#Fib!ckRz<$KnlKP1;MOj+cN+;XP1wF#$wC9>M193*1#2q@LoaS83}jaxv;dS!im zJaWqMrnvI7vb^e>g&<84RCyW@o@}=XJSk^E;iB9cA+|^|_7-+7BGcfg9u}d79nJ8q zu;x7Q6EGMIk0!Xgna;!~nP1~$#3%kMAcap=kPAO)-T2v(&)N)1@iBS!aCi@ANpzzQ4@nX-MjN|N33q0>5< zrf6lvn#k!WD9NN{Fbwomgypy!jR~a_{+<7}A{S)aNTVr(6XRo;wu}s8{G{a}*_N(G z@@#93#*U5c>oT+x4yd&9$5qsdkudL@#E2 z5p0mw6pYrB*w`F`C|B=zcXLsG-a_ErQ1M$IXck|UKUewKrpG7wbaQJf7xhkqJDM9L zIJf$DVnp1AZsc@q~0pZ;~DvFw!DbJf7442}J~;@t-IfmvS?or6S{a`IF5E zMff`}5J|#akw}a;sKaJaB&IXb?g!+NA)Oqj=ZX{!+u<*yX1>`>8R&qei#kDr$ZJ|k z0)2uE58yh@qS0t&2T3#B?7x3763p*sWLc$b?VcFI1tqLU; zhKM)sklOUNXc4~#0flU{2~`wmMy*AzUofj?wqjyRd{|=Po0@9SIxBxfXnrUnnP{!e zX$j9D$KkAJ0N@mZAxAlUi6$#@{Hx0`^5N2KV8aE&bBl)0vuTM0jK&+ z?Ti2{>anX|-lD%x^id+~>0gW68#F+LGB5Q@$rY7>Yqs`X$i*y3v~e<9C#R{jD3z=R zBY4bA4-Zca#~6@xXFukfffa;1I(quJ^d5;!#I3j|&@etL{G^Gvi`);P$CXOY5QY@b zQS&LhHmj(k|0Yu~twysjBoL9IV9>-Fiuod?t{#|?4O*|E2tQ;nr6mvb>Pt;IR6--Y zaq87?t}+li!2MT(QJ+KeLLTgD*b6xb?(+O$l@Vo8?1&gdgB2<+t!Ser7*wm1r~nb> z3eizo{9y|~1|TAkc_@$OYgv)Qjo9*8ua(UZ3{KgbPB`%*|4~grJPQ;-v>t6cWlwo{ zRoDANY6>U{K>^6MNBa6Zko0j_`J6FpzZT<7AV%TyJN={}n-zKM+Um? z-M-vVt3*}}kje=gY)}()z!E^>O1N87c<{6L{qVEiGT6?~;o*nKb|43@ zdbSlAx}lEt7xkU4NgO%?RX?Hr*O!{h##ih<7N=bd#VSxUl&2033O)ZTnr=XGKnhdG zN+d}%n}JTN5;8VR^k!-nyCy=41~+J=Q{zv@!iYoi0!Oz%lAe0BUj3hg44X4Bf`4!P7du zPAIbEw%9}MZ=H*tEGQ}mHUu60DQ=`rhS#5Ofk@@PC=yZ;?+=2f6(2#Qxjcdw3n8e~ zIfO#tMj1(FW+ejhUe2*=cBvC0*9)`Kob7@tiEZhWZ}*D%$%NOGTf6PO`wOpHas zJr91s%R_BWLeG9-2I_;Nb6l1TrL4Lhsj2>C+vdXHe4xB=>j$5FwtLSPm>va*Lz+VIEld6fv>Vml{7+|QQaY-bX5|^YOpi}QM|ww~JnE=gD`xn?{hvD? z^@aO}=vRP-x!1{1DxZa0b~iyyPfN_UizSfwVT26ipgWH=t?YzCW{zwjwfdE>8qx>&T>vz!fe z#t0W~V@b+kg5;W8vr2pyX%V;gB&*qRH?}c478&fL$iGmpn`b!c9ysV82(c$*JFa-b zoG8(##=Z}?Y$^&a1onqY-rK%ID`c=A+0@n3_3%3$XNf@c%37NJ)@hBQmj?|dq1&p)}=??hCGBPZ^Fhpy{RCR2?eo4oE^p&_FQ@~TWCm1f{gF0>aX2TrlqXBKe!R*bb&vWYjSxOSmU|wV9Zso2>^A zxd*(1LAbI;Uh|ID7IWcj=X(`KcGl-_`oqqBj30hs2aT9rtot9~JL-A0o^5SAuVmHS z2t(okECa9LgrGy?wGPu}dh?k6`(funryTz%FI1dTjmmS4tCf?u#1ee8qN$N6yB9~e z;Rh`(jPEG(zmi@c!>|{a3cqKPlasWLBFPM;6B=PUIXTkZ(aDd8ig=V{9H*mBTOBsV zN0WSE)Snr;@M*{-1-;zi7d9|z&Ax`JcLp0(0MEEunU*I+KH)|75nEMwk)UA8V$%|! zfsiGuXFU$k!MmZauV=Ndn6Z2Q^SsEOVGBu01R2*UQDwy$!H7?A`$9qrz0m=7fe1>x z7A{jz((?!MJTl^7@3DcfVtj_f)jn+oJak+s$VN5z%Cn5S=RAT;DMEIr{5MPydx!!2 zfQ?C}Q>mxmVi5pIMOHh=S7L*#a!NJvw zQID+p?{2aPu)?5|Q*Lq-tb<#}sO3Xpk?HgGM~@uD-tZt-fu-iuaJssd-ssW7BUPVm zDJg(PbE<0V_T36B`!%G`<{1gCu0YT_b5;k|ytab#tu4*OAx#{ss)rJS@o~hnLdr58kZJoah&>7=CT1v>dg%|W_J-3y z@<>fMlugFy5m3)VZs2y)$=G1e&z(#-hx;Sr?({a9Ym&ZbZp1+>Uznsg4;#lEO~n`! zN3UtOOsJA34pWzKzSMBMey$uVCbAqzr(`ni1;;#Oddv(i*9zwTk4p=Jruy zG)PH{+{Q%_i%KHdlw$6{t9(HDjQ?*%35hyIVg+5s!~u58BqE7Vm(x)NQyeGNJO|k`1g03Kd5w`E zhLTBYLxarfe{-b?X>dQk+=Jes(t}v^+OOK$g8iRvE6OLMRpwW||LH!45NnPcW;s@a z)>vI_X*i`;8OPRW;$OUUkrIt?B~sMy|JaRU3zK+6{up*^dmHt+Ei^_6-!Gn@qxkl{)4lpMgsIybl^whnhQ`GT+w3GbD ziSR&IXLlbzsF4Zjx#G{TBz?0{4Pep8hnA;O1V627drPcO7B&Y(# zFScO2ip?@fGLcJiqhY^7+cgNrp7gkVh(qdjh(R+(t*H*pz=9aUli0PE&2)-{*YVwC zp<1VCRr0GuLq6g)H~gP@hhBv<4b!?GhAFAhLFWT3fhJ;;mi4X9=h0fhm6LWWJ8NV) z^dYotTJ+u|TZ~iIcuf=oCLc{aIZ0ElMIapvmHMM-Mb9I>kO`siq@QMjU`iNT(ps7i zER}8AF?s^56y+4bh;8YA6_^NV!jjkrSkiWqpZiAX>I{YZx;uWj*;ap)l~-iOL-3lz zaBk(oLx-wD+bPcG1M3Rj*}l6P`V0v_?jEh8FHaGtI-e?^?byo~FJHcNfvJ#|M#h9t zCCPmlW@%K&3jS8`22J|vYx#-DJMR%_vJeFyFb~QxQH4V4Tfn3c#iL-}ImY&KJdr5g zK~iqEfJKv5Lv}_i_wTJse0DLtT#^J!ViyomJf^mirKW5Vi7Gdl=OxUcKlk zlf0Fc{^14Sst7MiDW+YR^X8y z{bDVNy#OPNOfQH`so_5lhBTzFu86v_&%hok0pZK)X6eE3Y{u9)FvG*je=O-G)(cSy zwk3&=mhs$h8E)yFcfYxG`Z&w@2b@D*O)36qjIAC%K<7SKQixogU$AXQRjpH3M4eAv zf4t5;vEJ~+*=(-VUb@(J>5_YK`-StZr;kIX4lx}dMCm&6(PK=4v;e5fS2f{(`wkOD z2#}1Eig+NG(3iH0&tqPcLXQ7a`hLiye0N2DaI#8vTBp-7)zp)0!J8=??t*3vjl|63 zmYFfqUDv$_-A@0zVI9Rl;LzvClT)O@ZIrl zF)Ch&N45xpmaWjGPiHy}Mo#47at`2f2R4ilpcJxczY=u^M`*gTIZJ55NCaCfcW6EB zS#@XS6>B-s9Sf23M%}Rz+t62Q1YoVRA2N|7mA0i1&SJYLbJ7vfqHU-w3;Pa`=xoN( z@bs&u8u=V$MX_?&xb-~v5=$BMYQ#shYB!NDg(jJ!TKos0XaZ1=%1dB?S>cCw5wVZ6 z=c8pI2J0Ps8xfQKP?8@&0650j*++Y8Xw^3~N>XC18dV!dHCWTx^XJbg%e8UX@8adQ z^XHoD#LAh96p&z9gr?dPxQ<`CbeVHpj9-5vH(*KGkL0*VfS0^41vfY{29}D%pG3^n z1H_#vlSf|8@Ekzt`7iviDeeb)q7#w9$Rx8ZpoA^)=t%$F`y`by&;W04sqXDoe+5K5M>LclO7+_1Ze%s?6J_N2MF3*h)+mLVp&iu3N3a%5^Oi3 z3&ivFq-3@ceLEeXY=6e6IzdWE0x#;?o5)0DqD4md`HP;uS?-Q$^Kr#$I%~<=W}^tb zQl7QuDEG)5fz+?)OY5K$QX^$G3WIXv|D@L>GqF2I1cjU9pxf1X?>k1(PuUF&8O+kQs|umUtGS{W=OL_6%^{qWw-5LFI@&{=UaeS z&A~6U=m^HDWpi_sX4{!IKJ9Y5R@=V%PEuvZLru+gYt~wPYB*wh4bd{DCU}k+lfr!( zO`nUI-b^_S5FQ4IHO)2^gC9)y4^2#rgok5%hcmNjHf|90Si4nIA~FeO;*`)dN8B*9 zo0t|@gY)c^u-X;}PE?JGR(QuIxjrhR-Y6VDO<#^rLXndEy|_@QuF0cLi&!30Yv2k* z!KI`ZaLo;T^73qT~evA?E%i-sa4Un&Q> z>5xeMiwr3wO%FFkrzT#`1b{Itu`9}i$@hVo?$$wVX+b@H+}ZKNjdLdwhuquWw?st^QBnHimQZK=J#{n9>&E#uPwnS=riZ8G* zPhWy0( zgf;t}mEE}`3sGRl4y1Z?8cWInD_sQ>)+|Aa(^o1v3Rn;{yqrcN=cVK{vTZjrK4 zJ5vHs`Uy9%yfkO!s0Lqv84F73LLOegqc9~|f?)LvF>RGnM)t-&x-?)?q)!sO^aINA zb=AemH-PaPH|*ZUC6`HZx=8(crapSu@#D>N=nPmO(Qf%-@2(vmfAB_ez7t?+Hng>> zp4rIOvu7DCX>MpdtzMyHqwpJLoHO*P0Zdl4_>^9>4Q45EMUt3jvq`c>?f4U04Ksz?}s3BIp=MQ%|NuuZoxr^rOKKuwha- zBsoh4fa@hYs7ln>Ex;mE=8Ii0?Ih2V9RB+`M&j@*_26IX;^Dnd6D{V*_c&o){gi`` z5)4djejX1u9RwYIzC=PcxFBbV;JfKko^^&Fk}4fPy^&@L+)Iaej8i$VCpQ0FYP)1c z4<8eO&{8RHYgc} zcy8CG&W^j^w$&Y}m9h$J+x^MAl?BZ?c?e8oUsx?5bkW z9SUi~xlG{>8HJ2TT*4$6>iUWBNap0h%#c_KcltFk3O#^+rGOrY#4nt3aymAOv;DX* zoglBQM<}DMH=j(w_oLy|f;&^31i{l8&b_=AADYO-hDKQRrIghICW)1J$9->SIk2*| zw;LdKKGHU*6jYu%{0S&~0HJ)61x9nnq3}ej*Qgybmybi#3%|ER=g-opZ{g1DIB(|o zEWd0JnG1o=0iBZplIW^~tgPh1uPUkugknF~_^YTy3uDsGqp>50L9(q_NFQq#cnbH4=+!6X4>xEzEoFJ!=_txe%0rkCVLTB3cQz>U;OUgI&10xIEKbg zY9Z=0bDWKgk)LTjd*Ol)!Qjej#s{vA7(b=7VW0@&m?nP}D9kR>=&=nq(-3L4Ck8H|3>i0zvo{EWKnNz2e#b#&;ea;~52Z z#(IaSsqszg3r~VlT5w~k$B_JaoS6oV#8Qm&J)Psi9Lbk259p%F6jx5SjrB(25h5wn zFg`_WKn+=#7ZCA1l}91Nz+L5!JM|b@n(gUf;Zj?e>POqPMHyMz&@e;h1jAlUPbrV) zc=f7AH|M&6d(9~gM*LsXT8O;Ks2IM*K}%{u+X(*8-$B5**?BvvI^v@=T4&4Q=W zt~d%cTL`6eo)2s~WBwgv?h(wVUen5fg=P3I;wqPxu zPYpp=>mO7@@V`&A6T9pDnd6D~ZeM9UdZ@bkK=r=QJ}ltsL!h8w^R_?is&iUOo0~uw z6P~DMZevKhm~P8|Z)Fwc5&`Z~`?ag>U=30B-1+k@^(Sa_8`iW)gOaAn8Ke^SVpP;# zQOgnO!@vgCP^*MB9yu~hbdzS%p}iu$dL)SWX(D!Bif39W4-xQ-Cz%h<&HgSkK9NjJ z(x4vc8A*;0@%;=>z-VVulWg>Bvj)FrH}gh39OhygBJNx&MdF=IPK|Mcdn`WAM&8C~ zd~zf*Jv|mlF|0*nlF!Rw>B|5OZq3Uo6uRgi75fwqgekz;HBaCMsbgxUJBRNS2!z=w z{fg2#CZ{RI>Izc-Gs&=4F%Sd&ILM-dFMaTCDpw7Q2G{;}`spKy34%7E$%*_1&dNrW zVjh)+)%74vIMZ*gBaxR8)K(e8!r79xpb{@p#Y;R-QbzJff-~hlH4%w=5-5R@-tv+j zagG{-H<@7fB#ZEA$OGC!#}68S@{9Zl$aFP0VEtbkDps+(*3hN|W)5q5I!B1pe}G1| zm$2NAQG&ZY-9PoxQ=tRU7#b@oj=#w#9T7l#@YeIFpB=t0rXp2 z05roN6|h=Ur-O;z4~AiM1Snt!Xqv!>qxo>J1YxWgumLb0Dku5B>2KBbGy+tKqu>(R zWp)vb10rG>A!?kpz0vV0C1ZS4BV&_V1y-Mm<^f!h$#}M6NUe!jIEp<_C)9lu$)N?~XlMSyN=l;@zF&HQ$E-5yl+7i2f zkKTB}i%n026sCl@ga(2G zxk#_AfsN-U@@^!^=eVO~{AqOr!|!ndTY#$dS<;(cNjV@13<_z`Q$8Vx zooT7Z2wG9@1D5%kTh1uOQkkA@JKxsE{T)zuwf&+v-nlbP^>xQViCz}!xtLz{ctO?pZI9|BjpDG4n>`OZsEeg%l2MW^-Yk%p6s|r=B$mx-vT|xU<0}vw$whH4M#{<_LGPI<(4yA!Ms66!!w%OG>6N zI?NBP^(1YC^DDik>I!cjY1HL9hPq3-x#IN|NS3o!6%B-ZL2<1U>fgXN<6n{xa!J0{ zk)qPzj02HUaYeLLn{VBz<;Xf3P|WIRxt}Q=sU)x{N`fRAl_#zM1lr(k08n&JfJ(hO z&A1b_7|%#O(%?~b04q_3`qJne;_y!2m`Zmh_T3sXy zpdpEDp>)%Dm|Bx)ZpjGyT@#UEI;HO9R=fN&m6}HMCQ#BGrACMm^D^@kv|}45`T9Ng z`-a1PB=hkIUht!3lXxq}7<*-yXP$0FZmCGqsaf#mIvdHH=yWP_t)kF87)Bbjq`;Lh z2cM&<5Ty2%AY7_@K70@y0W?`;@rwT@uk~B3<4?hJ#Se~(dLezl^$%1^)e9O5sgAP) zT%Mzeh>Quwq8u5(nVij@k=z>i7&0_4&7EDH=rZc92e3E0*87gl{))(!l zE9lq|1w-gdyb_qsOHM=kKvM}=G(y9qJ5>OIkH;)ksCNQZWo0DfbRNseN#bFOf3ElW z?+>8JSR<8isHXk%%sOFK0aXFe;RpGgoLfdWf+$EIf@UP^)cMHV6h)B=zCq+w9tiy3 zetv*?Yx&*pfBgRTH`m(gt9NeKS;1`J{|uG={<8zs6b9@aq88VmY-k_^;`0I`<@R#! z92IWsc@PO8uUx%;z5SX(;f1qjHD0D7mo5Bi5Q+63b?$*f_`!W3{C^}=KN$!Ut$e;egvdg0AeP+ zSiH03%$ut(x6JIbJyZYScmPwn9uw7Wc%#-bMk0vgBwwPUrleQo3Nu`&1{f^~#_ct7 zR$$Gpac81(?Or!XG}jyq%1xq12{sCaCD zxXYz?k#}Gv+JB&g0Jy+39pp+N5v5&esd_MV6AKO1~OjLbuOF3z(^- zE9Z=CBMj23pf)oZ86W(+_rAaV-L0E9IB+WHEe2KtEy3~+Kd(M?@aV~t$7_$BJk^Mz z!tW;5=~+-D4O42c$bsH>_U!o!7q7Hmzkc<`wJR4dUxfM@_G+1vL}CGZW;3%NdsvO# z);Hmy4q;RSgEeaInRVFueJ|@C46m_1<;MOGTFxlF+6c2J6H$G(O9>IKfC@RAC< zN5hlx!bv`nZa!{nOY7J=voRx1RV{Owhyx%VYtj}FiHTBKoGxy_5aP(ZDn2kk=aeR| znRzt>M!nEO6|Z7|C3G`{Mo_ithr3>|Nac&<;*fq-oM_)sv{A_G3-ak2BJsFE6lQ~n zcZ)iPUzHq+k&e3hs%xn_l$A-!oK$3Q+JQFXLW`d@y|OaRt5b9+Bu>UwnIO|3>nh1b zagp(BVjwTc0_rO&QEE9A8(@;i>5{vti+S$n3yLYGt3ey<`>8S!M?VT?6dVID>lDpX zF0&)4hzLAQSP4u&CHQ%;P%;{9^pCQ)k)je6Ul0YPP?FfJ_$L@X>>wfk_`?t1-MV#y zMB7PZQsNb z7~M^s3LY~6iQ30*$3NM~wx2cPqu`KQK@GBrSUQDYoi=mS)fH1rC!#$5PO=aatk~2{ z+=*-*9qfS;L+2teuh;PKuus2t_u75`GvzHuj_5f6JgbW zxAs92`GD-xAcg}By2<`(RKvDvlWB2#h%SayW;;KF7=>*y`8mQ-2NiD0b5#0ttYVuK z0yQyXpks1K5227H%`cZ?m`&wJDu{mIB&5SJ3^H9vT}OKeB)+PEsK7^5Br+5O>+MM7aQ&LOz{B` zY3_xi?s1`nzAYFAg5#t7{9yQf4?7}*j9z}*8F}0rM@i%$Y+|N}SphXUSY0aDaXv|V zl3lVZZr0=E>~g+=&!rsUCXM|GAG8q2-=NUHOXKyG5d>)v5+8|b0CKf2L`6dVLEHm; zYpU}L(_8oi!4VLWkp)wzA?bR6SBQr+J=UYLFnLPptN2IgTP6Qmn2KXEwa;ecv|M9^^NrAig(rVTIPj?d>$f)`3mkm`gZ z=A=}>mZt+ItGt?LZZ$-@EO7iKQzC5g8}0|X6KH}8sR=;mG3(;RHLf4$e<+U$M`ZAS zggKxdp+E7>6Z{?_^>K*)?hkkGeEro|H`_0st3R@P`&*SblDL6ag5@9WrDMjT8+sjc zDQv=>Zpxi1!g2!iwKNk3&$unykYFzV9efwims?JsVi1arOqS(Xm)aY^dpUUEFwVP~LQRT7ydJ~ctw<+4qZ0YMo!;Bh`S@>55+yE}aUerNZ??!i8`bH)=1G0V(+ zNGnjQizRHzJ=JkZhdbDAw!qQh>Zbr}&5rFc6i{dT3P2dS*i|*ceWV=kGU)UX3aN1c z9={xOW^=5Mp(M^7U4GwFwA#kkNx`8JEO&3`LrIg6=2Dug-QVa`B(_SK^76@epPhWo7 zegdDtvpofPJk}M6jy(4KBUoZu+O(JtD5NQz3W*-&0N@IGO-MBd7C~uHI`8XmLpbwp*D0e8Wy4)KN=;36dOy}!;}!K2OxoEH7@`|t03|LvDI+Ap*; z9N)M7z1NH8!D4CI@Aoj&dE}T{W%Zlz79i>YN0xdO4~52TOW_$LWhOY?_Wy};v)KiXj9VgoJ@H_W^b`XY!q)@j#4H+qzK8xFdm*tu?UY;!vs<^%6>zn zujhW}Fhir?b%w_W`(mgxDzT-W&dp;Dj^xZ~H*GPXIimr(I=O9YFUy)7knfTjLfxG3 z(Q#4;pe8!0iiJrg@+g|kl8NHjhg&bGV!Qy7#~;g_bWv!D&Yj?TB1a1%A`^GkYh&{c6l%G_lX1@2CJhpZ{ZWFbzoQ%srU+}GC#1X~ zJbKBHNX;sNu~7LI4lT?wK1FIxBwfN^ew>`mdrK0$13FFuc2qm7_@D?;7}Zw$YGxfFAJO1!SMZsSJ<$++iPH8jlQpc@9r@oTX zn4$D$Y)%_boob+Fahn6QhyUr^S%!<5dAUrIh9|b;Y-!+Z)-pP3HNH`rQt(UVnxn^^ zy0>X0tJpbv?(+4U_!E+(Ihn$I0+J!mez;z|!1_cy0-Hgm4(f5bf=Y!j$(qdcB#+sP=3QrU&W9 zBy5tj>W@DDQrPq5KmkvI(3-yk{S?*kNj^<abY(!sq9V9XRp4DH?@PN4>EA>`i_^<3!ay+C0$&cp}mA$Ub_Y9DeuCt*>rg zzjmdyvF^aGkG7TN&jz*xE8g9)4;OH8J~$*>fc2-E5O12@ra+_9;5CML19+C5J1?Jc z_@LnFw3mR+^Mp={Y4=1Sw&LXRFYw;fz`_Am3PC3$U5(9+&F9WtY`<~q2Q~&-8C2^| zpXqqPdHp$0TF!)UHbKhpXO zu1wLtldg??;KWLarAj+cL_c_v(t#;N`$Zx!<-|k6snAQMO}$YH=}91RD^D?9m89!J z9#0c_om7dT8-(LxhT@xNm}7SJ0G)lpu|omRyqa9RM=2DyO|K|n{2_hG6>{3 zXlsQNBTV-p@H5CuS0 z_`r}U;E0y^zGys9zEs>NqpZ%-MGgYVT(;OC3Db0x%b}C5k~$#lS+!ig0ZexDCIz>I zvj3N;cL9krPuG3x;x(Fk(w+2mdM-UZr{~P--s^PlSv_a(?mdT|>2*2;l9Qe65ER@A zBoGqFNkULif)W)aB!UtXR74~~fr1wlDJh`}EOhBPrQ6zCC`#gTZ4CI+^{=853ee?Yf(k6(Zao8>k((>Fg zcY`4D4kCwJH*ViC$Q%x0PffXqh80+X%6juCP+wPVs{WzuE{bXjO;Wi;i*^ii_5xo` z1`yZqb-a1Eth}oFk+t2kYQqt`c7B$`EiRQdFX5 z^=rOotox>th#l}qd+}m{;mSPvLd3=K#Q0cbl)-H*GB7eJI&fktIWsXEPrR6?n8E{s zEk9CHo-4d}16J-JZ`pQa9yrWSkrUZv z)tcC+^W{{KKx?nRrl0mC4MH2;I3EuJTHdKRn6IkRb~)B0OFtY7!kuWY_8htGAvB^g zbjCST?Mxn~`L@VugY%QFTz+Wm9N`fzJ@<9g7E63Gf5l_Vm z@e|T3#FUrXQ&K2aE3PVaM`0PT9@AgJFUj`R1PQP6Jb0Y>{m>>>UTwWl<#K?@7=1ad zkO>`p-rn-eLiOsUzkKmtp8tRN0$J~WUHAk0Lzjw+OVF}jBN=~m6@~Tf+mxFc&D_0v zlczhkHLF1<3ss(}`Xyk6pTv{Dwz}#;g&g>=$uWsjA!sC+(4dhpML|?xtm=LUJycp& z`Ji520L0Kfk>qR$vUx*&&sdY>;^{_Sph0pGAIX&NAC+hpIdHhJI-f|+FRZM+)c<*2 zYcO-krMZQL)z{gDtcNt^Dg4+XeNU2 z8pMG`N=KfnGg71^r3Zi_{G)w`0otR621$)NA5f`j0j}58G+E?x%#Z#^_Wio&Cr46D zZluYPOhTlQ8g+uF!;=eZNt5Kx{07iUFCoP>Dc=4DgaDT3fRW5CIPMZdRsQ+sQ$c-} z`V__3177{9KWqOKWH()nTBjHAOybbh?`U0@p9kQj`QnEqCLPTz@dCA&5K8%FW9`ed z-dM__R8u!Z4S|Oxe_6KYIFnAD0H6}E@!ydeQAV4n5&O~WIH7}G9aNpnUaD@DociOh z4`u(0FBm-f<@edA&tBAF!hDg-8ZHQdV zwtd46JD7N!XrA~pEYXpfAv2sEX2K|T351gPy+Jpnrwx{SB)J787_>~K75a>NMJIv_ zek24~B(lU*EOPl2DQFdx+3U3L6q_Vd6xj|^c9Pwpl=5vUO#d4sbzc z@?GRilB4=g`Q6cCuOJFGDgJm8P=ca!e5nji&O)K$D3I3Y!+|c!yd<+E_S1%6CeqUW zdu$Y8)x4lbBBoMy(c7=MYUWAn$Vff%iP^6n6NDO24QIux6tuRaZ~!O&CW#p3l8|N9 zvMQk6_%D=h>|=iby)09m=bi1(o^q+Zru;_9cYipU8~7JrRxt1LAI=6D3KnGmXg2-? zmoKwXo}(Cg=k^`v?uU0UYXYD&@VH@=Q-)UHoB}}AAU%9+>W>gbE4gFBocnU|rHi`X z{8w`-z?!fr`V}=TvGod;&${2lF^h(09rQ;8IZT}pDbpOy2f3QVvWgy+#r(giMlOXMfr62MlP{5GGW8^AXA)!fKMpYNlNrt5Xxk;p(eJ~TL;2!+ODLzD6TXkwiG z^i}3RtaIY#!#X*A`fDJmk`wDei_3JjP4Uo4d8B>t31R^zgt`E#L+=M-V{r<#*!u~9tDe*cv5?=l&><>0k||jmRA2c zauS30iUeMP<^+>+Uy+A~E5|uSQ0OMAPN3??OBL<$E z-rSM9a8DYEdR$^U`|W3ka#nrW!QA)1Iej5p5G^S-CC=q{;fOGe(z+f=9$HD$AUgSb z&RzGO%N)opD_|;Ki4qcysqPUFt*c?>n0fh)8)9Y{;hEj3>`PD66NU5&JkdV zotRgO@;0pztWv&O_q5?DZT;#%e~GtV2DiHl;%K zj;`#CXUh*7cXXhc2BOY%KFW+4Y8WIp9&KanS$Sd^)hGcm%NBsUDR;q9yRwUT4HyGk zjV%Rd8YT`NsuloKR*XOhRD&;342hi@RB=Mv8>%`9p)YM=O0Hi4kp^JWR`Et~m5)=p zE~#$VUN(z|6;FXC)df|VeE=BzrSk2YWcir{lT`?`s2llkgm3LYKUuzq7~0Xw#W@Kb z%Whph{UKA^1;vc|6E*PgK5_a04n6 zPN|IU9GPzQ12nr3q4f0k%kHr`BWp!AwRCZTTz{VWLDemh^s00HUHAc^^l_t3ZFXCf zvg9^1dt9Eud;`=qsXC{DhvlSv`EF@`agl8-7PO|vW?AFYvH{U?VRjPHB}ce!W!>ls zcipdQth{u#^hqz9XW%q8*dLBY6RVRG3oGVj{xWW@Yg=zXDyAF&mEW#1y`V}A%@sZ^ zM4eo{5N>l|lB{58$OjPp!zhOiqHflvj8?Y<)FCr?SQ(%9f>?`Q{*bif2CVLZ&R$PY z4i`PI6$FbFGl4-GZ5@k3J`inY@`D(;{f8Yh*9(u3E) zm04tyN);>t(Pny$ib(s=OQiW_N>i1oE&I-r5aDq@`TBJoDA3?GKxrAO^>fKJp=FgrsJglv{cjNMr{>eP)*VAa-QR!ZY_}F(T$hkwa3;eYYerS`d@*}s)}-% zHDbJn4+!_G)zqJ3hfwFx_0_O3HaCuGZKk^V(UTVTW%>y_v2lt}c@**JrS$$Uz>|k5 z7mfI)s&xXS2yRy)FPCIHB;O%|==3b4{#vr-RMkSmnJ0tsss5&l%SBx;=IAX3yN6;U zLlh2j1fkzt#W9QYp3!Z+9rv~GjeqA2@e-F$i$@14-q0LnB;?&z-6{13b*GJ+$Ccqh z-+(9SP~>DiddL~{EAa=wsL@~vS%*Lg%_*K)cvFTS#bQQb(F>vQON2&`1%LsdJrIM> z^*rz6`jd9CP^LHpT$y4CiTpkU5D`JMwPrs99%<{TK=XM(+n^;x zIt0lq;c zxkCY(Z*j?dv$V{qFl7foWo;D#x4L?MiES#79qn~>M`zD)Q$0^R4)!jVx#C`RulYIq zc;nbjENv?8bKR;Py*WH6Dzaw#!7O5RtZ56 z58K7L8REq>hZ&dSJh3 zlfo&ttC!brRhj(x(Ex}P8A@v;=qa^}f2TPzC_qrlWvse`4`}e|{%jyYsj3lZ9^2D6 z{Xt)o+(9NMASeOgLY??wRqXWedIF?smwrO>0lBEdE7(c8sX}X~rL-=jX2{+dunA7( z0h}^(84a0I?+H3y=Jj%~;Hl`!OCy}xp%0;R={2QhmO`g0Qoivo)jz!ip6*L@n|y*< z&QR>a1*A|}?)|-lVmwFqA<7d%@e;aL4>NDOrmu$q(eus@r~N?7(`Jgzn)}x;{`l3e zkJ7Lg26A!>-}}RNYe#O1JH?Lk64|)ncy4WRoOmYb4vJbY(cg4BtVsLt}w1S{X^Ns)n z?4v#USr2JY_mkE>$`kyd@$8ViV6QvuMv3a+((ZacAUX~om#7i3b<-Q+$AHyRJ zcZUYYBR$XBOFH=I?AY9NbbgDy2(|008?x0>!){|F&oHqKZoi?z+{q(*15DlrqeNy8 zQi<-^D}3R>p`GwyueP*!RLuz#GlT9xcK-k+(tsIshnT?+b5{afM$m&CCt!NpUw;df zG~%-15?#u+jTb=`Mq^`X>q&{`m$y6?Riu-bK~gi#ncsHR`ALMC?Pj^A-u6C;V;!pzg=?cm8 z?3B1tqvz^GhAmQ{f!T}b?+wwdceI<9gUwGkAo{qzrmFnL1@4Dtt@`!{a`FzH{Pd6C zOT~8KV&SEW#o|A`_-U^AKumy|WF7>VzMHy(HMH^U zVVB)Tqh56G>?!l3kGq0dH19B07-fDyZ$z~KlP{m%8!T}@eA3p*?GsQsIa|nC_C+3J zs!Q-7N^$IN=EqsKZnUC9MYFlNLPbi7mVw~>Y-%Z)pydJAtEq!3&vMi)GV-lrC`E4#&RslWlrv zasuFUj|`RRxBZ+nAEW}+r_)3cAfb}RgkH2{>G&@ICG#)|xAI_xN~k3dq+pZ_ zw_29KmYBT4f9s((;Xdi~P(zsdFgv+qDw?xCX}fBMCDKj6G{{yaXsm|U8o zost4c%oQ)~;OI`ShP4Yl$lQHAIfQT?pHsk!u5m}-KKJkDtPCeYb5e>97ol< zA|v**wnxtZ#q7(rJmB04w+nPK&YtpyjGuCoCn=5L6zn$`6%}P?JOMK4$QcrS^J;4q znjThZV`F7;iuLN{&5A?e}^p0C<=pC&3xT$eob0 zrO45xKO#I@DLOFBr1uGZH0L}cxm$$N2hnt^zJ$%>5G5~v8q8Jd)^9VA)8E(MH_$iW zfJBEJFA>v@#G7Pj+H!tLd#N_(sD+vsBX1+yR*?wQ|F$;99?xFt)}M>*VjHH_Mi`@@ zCsp^2r*R3_!9hD(FJv!7<4cd(+)ZE>!!c&E%DmUb{9MXe1cEXi>uV#3|WPB7!w3 z2*q%C1iX59vycY{mA99v4kaD25)o-Wt*Z%rjP@&}y5qO@ATxIUB(SG;iGy?3Edz;-RA9Ogn@ZR|MnhQ?m1)M9C^w0f z>CBGQNblfM0T%f!3#cJEY77XOKMn2&l>_~h?E}4iBywla8HOif#7PVoJ&38Xf*m-s zzwJIPOWJ?KCg>dt@F7ahxcx-QIe{~Eq>Y`x+4V&2Ivd5u(lDDUDW(7L#o>y`+=m5C z;Zvd>k?%7zT!xw_9?qxUDuaW_Y#Xfrqz4UN?BhKkQavLSJs$^2DYZsagm^a*^ejA; zw}B$IoD}>y0xR#?#qL6bBJoKY9QlE;wHb%rx1bbvl1cqXEpI54=$*o<8h^w`L`nJ` z?J<&Ih>~fM)%Q4L`1N^Iu$rW6L`evf+|pxq(MP;dMS0nMgh`cTYzFPW#C95yJ0=6z z3V_Uu=h?OOjD6^SE?oleP^BlJqEr`LyT-wn()(=Pwp#IAcbz(*4w#;@WM?qs<;4fz-Dn-(WXf04|B05SxJ1 z8QeE8i1WHyoxy(7=MK1irr+P!Yx*cM2V4qG{TX*e#}lE~J%-)J&!FH+uOqzfDuvVN zsG1Z)H8vXCwYeO4!td?l10JkZkN)jY9(xz$^K|^EmT*brvRo7oPo=3kGaCkmH&t$$ zL_S!h!lnem=$tB(C)n02UH}e7icyqHR>aA4$YNUhJo>GLxAxJJLvbJ+izjfCII77f!Nfm~ zAxNY_mmsO5wYBkKY03A$E6mEu`Sq!ii>E)&_OJL3Wgq$qi>N>U`FqYMVjj!In6th! z=G-A1WU-Q!k1Q>WI3#m5kK3+y>4$Kix|`1klbvwDN>@~XDp`Pq;H-UU9vy3FLXn3& z1Wo)c&gzNZ{E>D&TRHwxkyE@|;)C8l0xLzYe!q%=dn+f=RA~O!3BI$e4U-8+lmL3W z`(n(1)-mivi;Z51(^K3~#76I>7$NLxxRSTDxw<+vw$PnhlAN4*iF0SXv+*w1f;Xo^ z?M=n_Vy8l;*~#%>N*hE=q$Y^inn?q>p#mj#EupEr zG($mwRGkmSW&aT>O_iGLvhbpJpr5wL859BPjsyi$OJBmf(}rtKq)L+c(a$_4AkElj z-C{LB48`JFOgryJfM;P1G_69OwIF;PiKWER@dAyFgiwW0Gr3PaFJR?u+ZN$HD`L~N z-H`ICMI~t50f9oTD=O3CGs9c(N*0^yoov(};L5%fNDJ5wagzDsBHVPKi=v5l%Dwy`P}pnbr9c!l{15!;%;)n6@@G)|X#9 z^F?03@nvWI?z?YK244CKb3gv$nWB1GLkt@Pkgwr!;Tnt1>_-D^>$I3lR9eRld z+g!7W> zQmFT0cGrOBJ8o%hHTsvSHvTRw*<{hpWE;DxxM?nW{7OB z_&RLtks2?Ef<;m6V%E71p}+`YGnQl5a2-$vy*O%T@i0SfjJpx^KKfMQROe}6j>Oip zCH}4s*3}vxS6AG*@W-RUv@a0M z3BL5blXd8e@6TMmc7p>Hmo66LLyAEp_{^N~VR!4Ewuse908}9X`XqDPy|Z5$cRL`` zes7s}irn)3(D4eP4Va<91ep4RbnN#_vDm;sSy27ai1UOA&@j^!(JNiu2YpKD#sBt6 zt7*>)^@oQe7sh9B{XkhYH5nfbLVzXk{*Wx-dbOt z!p$WSizX5a3(3W$WOOdvy*3qDn3;@@ph1p}jHO;>Ub|bqH+E0Rnil{}`tSyJxDcuJ{w$7;xR!Q zaU;wy_cn@bRVm~V7O|%Wto#ycd0S&4-jp09M}+{KQx@T6Z0sk`|3Ix4P|aw^QiTAW zygI1(esxdG+Zkn!lk>G@l#fcpzC)puIu*T=G)uxM5S*LyVwwwHBw!OJrB_B0N*o2L z-tg10fzQCzYd$ZvGO~I?qCj_$mr|4Hxk4p7|FE1gM^IRWQ4*T9$+m13^N6D4b&Ape zRjnJi1?Y>F6gr<%+kcF6v z&*Yh_TPTeU4Ue&csYMlXzx2-SYn~YgO%tY*XB1DJqCiP8;q*9l>GeBz(ablpYzO(- z*47n{g|EkFn7Ah<$2cFyu?Nm`MU&8)?w!beC|O!N$(>Uj zDdvtBKfAeT*K%@lek$BQInmQKI5rxCji*}@{|+39ltLv4weln(Go8y@dM8;vZ%+;a zxr8oW)5vVFN34X6?>B=1+agheg3TPbgYMp5;Ogr(y(&@jX{wmcONVD7j-+!aJ_Sx7 zW}k9trvy|>x67)CSH-;(aMe_S;5-$dz)~H(=m1fmhv=tlpyeZcl>O*kdu`W0ZZXOw z%!w21d=O4?N5C1}3$el}trRDV2%;QtQpL#zq#&s?MlSD>eTj{#e#%#3DI^m#y^nTE zt^9nh=9y?U0W90Qi;ivj^>V)^CX7h{qeAPyYLQ7{R7?}^CagjMz%9|q@A8EmzOY&N zEe{TFiplnd=hZ9)9ZToW+uNF(8tWdE-@1DGi$nf--^uLvzM_k|$8=orj>#i|v`8WE zOz;fP3`-cFkfJs1k!Rl(q(&eVrSd(3CnF&!`qDBab*A(Ht&{X142{V5jl|I7^iFjT zuw*N}cb$!n3)ZUW#~+?bULU zUN;&U>J5eC$pvyf>NGP7q$gjLsLgEkZzLCgk4C2f{(h5qpN?sqMgMBaZY$dNh&8TZ4twWR#jA#a_!Dq zt)2$)?rHz2GX`m$d+7l6D3s{cyEUa1^(}o!=W~|1*1Wa4arPAsk{GPL;r`gd*kD&^ zjLl%3Euc9EnVjocUj(8o7D*e&%U2r|r4wJ@!VoaEGTJ*G8A&WgyT+DRu~<#cPsV2# z$vyj5)){DOa3tITMRap^PDJ-a?DWyvX9H7w5=?rZty%3LiH^z8sEdH|4-aWp-A<3`_Vr|Xb7`7XunzCa20y}Y%P@g2MMeuZP=@m$5Owxo$EJA8DwjF1@X;V49JH4{mX9`WkT|C+xGy@TeMM0a!_;Q`U0m~=EY zJf!ZtcK(Mi4g}_XANW81^Tm=obqx<6s;g;wRQI5&{0_!3I+1YkB+QfbC%3zmgK-f^l^{7W56zuS||lM&kYC_ejsn&84OF83f1+^E0V6HaF3B%5nUS z3qfz^mXPy)O^X01VU(e!?T`wg@NEs6hRRR-hB9>IX4nVMI?e=7K zGb0Xps5E_9bVLiM2ePt_ZRFkB{ifva)!qlNTnUpbdIe<)xvAJ z15%0iBhJ&G&=`Pfz$G?kSawi(=_Ef=vksR;wK5WhjtQYFM&iLL#kGrn{o*8{u`uh? z(*-jy4rHF~d(wm_)`N0oaZ{AT8BqCQIj7#mii0|n41US(ptFg=_6AZpb2k7E zO<9hL%+m78Ow|E;AO=OadNejX;st#W6=pg6Z%8`1UyXyWIsHpr0MShmh*i#GUB7p? z;!${cZ3Uu;g|!#xikDI!PV)_&nrA0?Zpmipr4%p0Auh8Nmu5ZqYGZN9tmeO1qC;nP z`FhK&ew=E}{;vLc|7e`_n2aWtISR^S5;8xPnnpaoV%BqsjR0`RWVZL&{7vISm@HK0 z=H0wb)oGk;r16a19gQ?$@6#^akfTAOboElB>_Pdk}yk(m2AZGif26N^-OfH0$`L%)8bNfK#(bD z?0?3yC5)Fsj>8}5_lAybsb;e(=c8koHCAc78pX= zf>krCwC47-R|YI<2UyMtV3DSlHU|k@&HX#qihlU|qdY%Y-2cZ@m+w{Lt=shU*;A)w ze{0*br_GwE-=l*rK3NPJ0V61sV<2vqnyM=-UfsR6A6H)l#wa!kX!lro^OsdR%+8S= z)%+Rtdjng>Sa*omtf{IfyLX49Yx2G1t9ZCR%k>fbw_uU3UAbA`Jvy0K1X5fmB<120 z^8wnKu{egOJRGqd;szGvB^?bU=JMJm{_lJvD6n-7bz_6`#{cmplgs7h?|r_&cekrU z;o+%C#7I+fbJJsUv(af{slGa$yUIwR&vrWi54;J2BH^9wcP%3?c=A51WgtO$1${h2 z$w423Ngy`h@9%ZsiUO35^ff&J1YJLc0>II+7(B@+4n@3GA1PDYYEoEIFaEQ?QEb$x zTUX4KMGXtaHhD+1LFA1&_klkFnBOeF3%!D}orfZR=hT)|Op zVFa0>wc)%yTWK+zXb?!?8RB7ptZkA7%HB$!JOiUXx^0CL4;!@2HdzkWoqt!96nh&TJu|6V7GPr!y@T9rXX>cF9^#!#L z*k8Bf%S-2fI+M$g9xCemMacH1u~ZzrnpFgC*sPoUba{P|1>YAc5Rq=MP0k9%29|*9 zxaWhe<)!IpQj_uZgLF2$do6__`OD?u3pvL3%d87^?cp(I?6N7JSxm&|IAwp{0gOY1N2-oXLIiq!F`e!X?r7e)+u{EE`doUT|obIOTld zA{-`P@6y$V@zoie1Eme-1oE10MNa)T`6@Y%zYq5k#i!g6YsqH!yo43&OyGB5AP@~1sRlk>@G?upDT&csuUC^=tB;kfP4ti0aK z&p^@6e{7eXO-2_`)BbHF#c-S)^@5Yfl56M9>jImlX<0ClMbHtT#irZt@!5XH3GIMM zx7*(fD`ff(+r|beUhTK%_n~630O^s<-wJ;j8zJ3MY(hqLvP8-IJsTUPm$M;K?^B4i z^LUS^*U_6OphP_k5dEZSUby2sDjq>3kc1e*yA`t!O@P=Bo^?@bQbE#hC&4G-QaBOAv6#|BT0yH;>YH) zx~>jmOvaFbh9}R=6Swj2n;IJ*u@+QSUV8gF>p!$e(DWD1bHj;?bQdq3Jzrc@K9HD+ zap!$yWnp1ug-JM85K{%owS{Q}mG}U!)3uyKi77X8T!CTDLFfAFj6LvXLnktg)rBQ) z$UpBJg-Bm|G4k+_g`Z!kYUzzkVTsOl`FM&_fLrro&bQT16aUg6&fUr3)im#ZU(eLo zh@Mn230Q&s+B%=jQOjJ_iM`Am;mLW*>!oB=<}vKp6*PS``q89Z)PZ{51QTr z3F3&6RGrY2L`rS-7ZTB7S2iI@?V;7R3}YVr)LLn0z_Bnw?S zZ=16N{PDMph#+p$TD4Fm>7X2T$l~wVH|b~WjFOR$dKrEjF61Pg+2fd86QhVy-YZ@w ze`%ifZQ|(^UpKkT&ia|Je)X5)4NsmvX@1uH^jY&0Bp#5TnoHieR>A_XQ}hc)o8sy((&rR4jS>k+ zwyVoiGwhvj^5W&ocT$6cDNZ@8t+8d!-EY<^$l@F(Uj0XgI_iN|mXm#KQ0HR_^QcYdIxtXA6s}8f|JOK<0P%_Ha@oM83|1^!N_)z3VcaO5$#}DooRx zLz<`QX1|R!VO(lxbPkA_)co9|CxNRrdU;z2h0#m{<9x8H5Xmo0kpxX!iQ2MM>l=1< zWD|V;UOeT68Ozl^KNTgB)2G&ZZ%~9viNe!N6u_s$8Nm%%w7Szia=4l03@KnmL^r!j zgk!JKp+yd|$RZw7WuWc5K`FyXIvuu$Na{#E6h5s=&Vwi|Hn_y0AK(h5OAf1=1W*k& zr6i%9f}m88RuH9)G7BGD@Ji3YvVEL&i=LjY_Gb;X_wQW2@YgTj%MH%@js$-FmvfhI zRbrQgl^ZbCce{s3>U8DcVbJ}&<#9n(Dcg|D5aGU0GnJ%$cF*LpZDxm(najVhkrWFW zhUTReWvu*CTw?4>7=6Ue!zb$N|NT=qd(yc?#1*A?ZV-KC`hlj2ff8T&T+#V^oe_>e zPvfjk8d=%cT;X2a`o{j1@puXiJAmY7iP#_ZAn}}D&C;Bl4Ry2rzoCj_;cWZmJQf~P z6W#6YUE%n|%-jUp&SZC8$(id_%{`;jz@LF7O*&-(E(xS*=28o{{ zTqXwdVNfm+8D(WO7Gcf^C)rqEi9q<&H=i8H`ft9YS)ZTbeqj|2Nn;Co2>}s4N52?I-2w3=~L6}Z)z})j^H^=#4Nju=PO{;mn_11q3GmAV&;R+;b~^QEK8;qkX@`V z3WA#lHeM|*G5JPSxlS(LFq_{3J?@!s%#aC=OysP?Iz{Kk3WQv=e`2=#MoCp$2Y?(K zj!aFzTpw!YN?-kxj%Z@#)hd0<>jOKi{-}CXRwr>I$=n9aZ=BZ!J88y5dLNLa=>dv- zWv*7U2dBz1?RE$0Yk*^pM*#uFx4&-MC*9;{0M52Eq9pmEN!!V2Fw;*3`K+<7;`WsbfBk~c z_uqVnv%b1`^=?^Z4Vc5vS6P|w7LV^jc}wfp5JS6;gJkM58W2T51exa$4h10*(PsQY zw0JQDqHSwLNYc_UCda;@hJ8q>*$`kJpq(K}GZMmG6VREe{T1c1<6>VzwWLMeiINLf zA9TiMqeG*yu^ApL47@m!NNeq`yUYI|sz-Khh$iV}z#qF};E*&eQ&-SOOTM+aIujio z40VL#{f)JZhPvXZ@ewoiOAbfOB?qhP+C!1#5=ZMcwlpym1x|pYX0-L9ObNGNyF2-W zM`V|P5*wLAL`puLD)I$BG;HqzIk%?}gD_h+)OKL74aj4{G5v84VsjSZS=bg_v zkf5599-MEb1Vo1I-d)6P|E5D@Bw}lnMBOOCTegOcBZ`CykfY47ZC17~L`_Bv5mJYu za(D|QiZ#cJCXPBd$aCavcx@8*04(Se52TTzr*g~SdUV_?A+;pQM#Z#_7Xw01=Oz+T zSW|N&DqI=as~QPzYG0g1XJNm}NFtzq(L}QuE>A<=0YIgDo2SiQa2fXK&(br&9WgBw z#iXtV>Jvey_BN95vH%I$10wsnaUX1`DZP6B)VH4<$e!{2HtX|qS8qel=)M=7HDOT9 z1tbPVcps9N{@#Ib7$6@FwKdj4k>jI5`FQaHwB*^dJ7@Air-srnE;eI_Fd|UiWo!dw!#Eq(@dGRW)oBP|v${A%=N9UXMNq%>J`SaHDt2~a za&9e^+I+>3CK~5k35L;HWYXBRqCMBZ8iAUNw2}tr&Bt`lZ#2DTNJA&BK4x!l{^At@ z({X$~PAEr77(-?Q?M>!Y%6>}vhoir8OE&c?nj-!(ob zE(Q{zkPJGqR5wb0!LqJ@W_oufTku0~p~yHplSu~XW;i_tb_i*xDwJ>qB@W`)wFwW2 z?A0!zu0R$H7;R&tH6D-`m`8)IxeGux3m$@{E`r@u^B&-D)8xlZ{X)t?Ar!d>Gixp3 zQslKY)mPjq`s zwSn<5%uj7~B`(E$JKJ%}F} z#}E+V8wqq8T!Ts&AKbMz-K}G*m~J3T>+2qmbaY1so8vDgrkAn0pIuy4KlJKl67eh2 zHh3aRLYH>hWkbi(IVPR25>SoG_V&kVk~AJgnipE7+V(c2l9;8}3Zsrg>InHD8U4Lr z(sX50!Kf$%g;{{HqrNE5?W`fJ0x=d!RjHU^XJSj}h%6LmrOfk%#BzS3#qk)RIrz>>YoimG2nrB7E z4EQWi#|_E==`w**XLSP0i@0Xcn}~eWP=>f^MMg}}XAFNsPz|<8eZ-s$UI|j%4r>UL z1KpjiO|@lL&iwH=h1r3G?^yoVXG(6AmRDPJc5oL=?5@+B%|#p@&SVoFye9_xyE>lM zKPbB;%N9Bf&G{@w&AEc}=Oj(1JI3MFTs=sJ5tj{H;p>$Y&B`XO)JV(C=BX`= z`q59oiE|-aZ3|aB(NB`hmnLTulhM%gf%Z=PvXY7L^ztN^7*`j^N9Q2hw^o*CrkA#C zX=sbXH(PIHhncp*9yt%bMwRZq&Qp+71xfYDQqRu*?aejh8e6;zaPFuI6g25rXjwv` zjE#|*=T4`uBMmIwR;S(V3_OR%g&hy|INd&tbO!Q?kNTbhJD8tgSrcmzoNK* z7dTowcQ~Ew(HIbnWXRDzic5gWJM+*|C=8C{;2InoXQ?MH>kX?E8rx6D0#HG!z)H!u zi)YdFw!MQq9hl|ZHmx(Vv*es5Azje3r|tzm4j5z&f)ODt$-)6k@yM*%OVSPsb1T(# z7oo}l6wy*iTJ4FOWY%p7cCQ)`_#FK`%GxG*Tyis;pINPKZLGds{Fl!UWc&YL->N&S4gLFd@WEgCz(_&1>s34S`3Gn@n>6b7H5V;4zW0s)E?ag1E8E4{p(k zlAEe(Lv6j|k&)=cT#C_ag5OZefMA*0y%_!PtbA#W=D>kjfj7Uk?0)LyYl%AuJ z_HexG$zW`tr*~pLH8sDI7!EUKOwy+%SI}gjP*aI$5to%F%`=rLpk$Ps2bz(MTYT4Z zfFD={d4Nh4%>oz^m+dHA$E;2BI4}Q@H_}mV+J*%yqUrwvj=C;#5 zbJL@%Yd5sdHhtnM_g2h6pA`i;058nOq|3ux9kZ@l8xMQ5wJ78OvSd?4vR#1ukyO1evTvo#>A_G*74yNrv z>PLDS++4}wNx~R>q(zn;8zSyih7}Y&Fz(6*j>$B&B0*248{}}=8ZE!Ct?xzN* z&YN>yJ;_>wd<_m?<(dU)ysWGo+iNryItQAK#DW2$X?CAFjjAo{aVUb|xpn<2_A$jw zCQn?bA7j;_yEi&NHx(O>&BjKjrk3ZU@#G1FJ!1(SHkQ$V)Q^Jc2JN&%;`TxHoI-=P zwt!<>Uw3D?rL1Kro(Q9aTw0!;U5ZCjm>Dd@dnakYDGQPISSm-knas=`P^D#YjNlO9 zZf@;Y%d8m53(85(h4R%m@iic#qPH+1e|N~Cg3Q75fnU!}htqk;rf#)0Ezeq7TA#K& zb6SFJt?eD@P9G@F*kPjS^|LVE=hteFWJ1zef=2?U_S3{olGF)|ZrBXvs^sJ>RfPK& zj1)121P@+IWJR`(Hha(I0WaAa&^;q0TTsKjgd;Go(ZlWasSO zkg0(<%nmx=qZ*N;b`vty&D)mBpMczaSGXj4(smJ>pu}4m>uz2A(|-S?uORQsGna4P zy(9nd#|{?U5rztS%toWfB9>9_ecsykgogS4J(OB2h_9)+be1vBbqoecV!{aYrBvO-uQ`p>e9l20yL_iaG?Ka5!&BG{Fmr|Gd9I@$Ak#c^ zTLRCX0!_Cy*w)_OY4|9Gr<$GapuW!}^L}qLaRG+j5?o`1{b7`8?sX2Gs-$HSAMu_F=1^7EeZi6X&sT86F;bIu8;~lDfEu- zPCD9qltreVWfDGUNc^+tcj$|0OlVMc)c6n_=V7izZF}-u(cReuQMEMQ`*$SU6)nDW z7`{;fR_0s6rszu+)if94>nUvNZ%~4tnF$K0yGb1};1M!`Z^n>H%IZ63KhOOq-zQn0 zokE6KS^Mb8GmWyLftWk=l6hpDV+(I%2{R}9k@`B`(`WBmG*J|ilW*x{8J0qH;pTh+ z$fUSLqXsVVR_Ex-oxA1bY>9K>TX&`?CmV>HZsR*onwr&t+x-W!d+8nI<O znqwn}(o=J9&}d9L@Op#L%$Y~_$s8Ot924L>Wx5YpfZ9#GR^Zpx+D1{?n%mZbYYwI) z2KwLE;>A%@2qp{IYMsl=l_8#y(!$->w9w|ZKP?;9g0bkxV5p^`{%+Cd+5hA_=s)r2qFWp( zduX{JjTQKQ_c?<(a=#;sJ1VmIFQP=@`MW$!**x(E;y& z!bJ*BE5IO;iy11H>O$_pk7;un8yfAnhOWE`-DC}hFApdRXm~D*9H)G}JwDRj)jgC< zPG}rGIm_LYRa}H-;vdHP;;(3J;B}x1A%6&bh%q+76r?5R$-blrW$-;6Zfk1ms0$4z znCYyp%@4KrMdH&uW|Pb76VYgRAiB)*jkT_Z5eg6vxhe`O6&)G8)x_(^b3*tEgA5D%kyl(QX_G#m)q9e6-7C^r_NB( z$=mcvqfW$d#GX+(x!b`524YB&5#KBc*P=ltBFKJoz^f=D{XAKm@ZzV+Pc21E1}u+$ zgv$xa?3AA}mzJd~3?u6gL_Ko*emkQkDtdra{KV89NG^g|Ess-J8j?GE-@K`+lXeJs zx&kOu?V#*=w9sP|maRj)s7r)!$)mcVLM-B+6&dVqYpA+&{?n`pUqSY#XRhC^sK#TZ zz0+YVn+4rVTJJkT>;#XvSTJIho}S5oKzhQh3Unr$-%C! z!Dw=BDm4>}Q_;+?Zp_al$EQA+=d}0A`is;un>Q%VX^;?0t`kIgB8dJ~j5><*Nc+R4 z{=xdLfoQ0A?!}9#_NMOW)a)$7^8|VhGRy*qlUW-Gw2%Xrq9(VcNz=QGlSSCvew`;X z7{yoY3-$qBrjC%9X=LXCKIiY~w1F6jooQF6R_vd(2&F_#{&zM}Ffb)&kR=f5H#hIJ zxX=78t%hXZ(qh_=(JjF+i6TY=ESZL!Iq)K6Ju)qIri>2;ZKp(<2d9M2!~94TI+WQ} zYK}%NX2B_M$Or)dX5z;cJH-uYc}z$on?n~#uBp9U*Tx*r)fLlWS#el#rAhcXe?bHd zkbNC17-CZl1u%|Jv->oaQ7)H$cTaI)mvGDiwu81?;$V<9-gvu+%NE#FX7|7eUFm3W zE{!>SkzP_NoZw6Hae^rOVPI@zu&2GL_THsWgX6ya2fn_9;|mtOEt+b>YmlUz-UD2N z;{Px83X}tKd740_44$IS$iMTpbURy`9#*lUQ(O#T1iQ}2N9zy8bn$GCX~x4A4u>ES zP^t&Y)z3<-`flSv_Iqlp@xm-e;Cq$EKT~v~exkdB&9BtrTxxPClAxJe-<+SDo`0FO zgw-r30RGd~CI&;|h(ru&2b|!km?T`?kGLDl05#B4>YE2$j6t{u%3M5bU8> zbfC}+XnWN0JbTjow8=CE8#sk->a%KfyCYK{WT@Y4p1RL+a1nj_?AcSN#s91sShjc4 z)#nJ2Qg!C}q-0dzoSnZ6+o22pa7$-}t6afOYE&WN;a5oq+|6#rK9ref1Z zKxJ_@AFP@Z7ic;nVNuT6F2_!RBViTG1HlrVCm4$3;8tZa=RvAzFo*wJET}@yB`mG*dj2jBmw|UfK6g2(#~t( zZLCmk_8?FklfJyW<7r*#`QHU6e1-nJ-=Dg67uil@a~mUB?o;snp>XQy9l#WT2N&qm znK*{^9E@|vSu?f|HXQHldB0G5bA9D4`kySVD!{M*O3E|O28Npx9vbl|kUbVnj~XAI zoJM~G+>xpKZ8cpFXxvNUMNbCXJ7dx5#hIy@sgc3Rq{TG~iuCAXHpBRb+h{VFv!J~_V}@9m8wG{6~n@_cA?W-h@tZg>AUM-LDV@dv~> z(UgNcIvtt(gH7XEvT2@!UiUSXq~52sMbVer)R}eyl*^wHEFE93VRn6h=qN!zM?2Ax zTXLo$sCLd&A7U*N4<`AB=#Vh~Z`0&9|L!T3wVvqx$n?$6TG|)_@f9pC`OdR1;q8wR zCH(}<0W?HHDxuRIejCQb6%`waod%s5Ip(bzNy?@G0~kt5$RZ*KDoO$+d*BL(h=2)_ zz|cAs;>tmp$wv#VeSuB|2$J62)7@!z*3QC-j1GN@++e7GB)|oLJB)Y8&u%JL&=Vu1 zwMC+xtu(D}mpq+Ez6ON+A$*TmeWYg>BX8yyK8ovP^ynmy*ngi;*u^L8*1xoJ?~jvb{lA7&`t z{-nNK<3hSXUXVZ*x^Zq91_Y@xO4lRd%9tMdWkDZ3Uw;7F8M#ocA&2HpvG(h}$ z>dKOqNZ-KtBnLB)MUM`K;k8y@4#k!hr%$BTm$~w|DCMIKj%4gjn&!<-hpT$-=0Ec4 zt5>U&(Q&qH65Y?c29lIDv98wkk>&O2u5fZ}I6l85aXRxMrsPV%YHoM}nM%dHpavL;!@c+Gv-; z=dvuKcePm|u3Zx!&DX^?CEq0!^V=(4C&<^R%jzpiz6O|wvOoTgp-vSSMbVUZP}gK2 zFAAg{(CP@;!0s6#DN(gCmCJu)9GFh-#=oH{hd3G;?(J%Atl=`GP$5?{E78xEH z8}E;#QsFT5#-Zi)rPTVHtryFHN}&#-(tY(G2zMIqC{z;qcq1{9h{vX1j1Tt>OvVx~ z<|4g)P?m|%a0(gP3dvqMUSV>}nyH?!-HYf+f~7~ND{a%(7c3c;XM4a5 zKmwW058B&!2{^$e4>E{Y`6{rJiPGfuZF6%!x7ZmmRH90efjq9W4?lPW6~R7IZJj-- z-rU^6RrL;yB}Et;Z_5_R5DtVv=?_eAx-UQ$*N$#Bu>xkuNRA=@0vj!@CMb#tj23tR zDXMj4Yu!WTxq5RMx$Uz-)Yg=vvVL)*M{IRzyCP~%v7QqX8B}Y!^5-xT0;?`$yT|DG zU~*`fL8%;3lY-bWN=gQg0Mv?lt(m>7Q>Bg+$2p%~0K@6jF14d-QM@*kw$+XkHZ^JY z&&{|q$HY%@XoN{9_dNSUEssk}zRCF~-!cD*@6KN@C4o0IaoVZV3WeZ_k62-bbqHnR zpb$C1Zg2p6>eR5cR2p}t{%^D%JTh6jXI3L2kxj(1cC(g23Y++>b7YdTk}X=6AZk=W zR!ct#wXS3?_VO`q?b!cwC7Lxx3R4hXRNKc`_@tMUqn+wNMj2}_$ zXaIy8+nPAVwKcQxX9?7FKZ02hs-D%JMeV`7NRJEybtKFJIRMS-t>K->fc}6Bj=ua)b zU-gr9&7$Fvd4b(_^n$5&B-MEPM%9YDyvAaWCl|_v#-y&qW`oNXA~Q{tvAD=e3p)wX zEpJK4%ok+&Wk1Q)B*+_;-s;>QT^q+ixIQm1$_0noaGEm#3dKV})9<=b>HhXrhXWz-rCIwvpbh*!Wax5{IGD*v#DE%tk8tV)pP1WhNT)RU0&s zcC5oOX4_FYZH@c--)nv6^%{cpnep({#O!#yJF&bx7l}{JEH2N@v1Z1_$Zdp@R)%5Q z8QcP4D2)@)c=FAD-T;@5YY3ugdUBys2&D(|-luYtx3yiCc4=$Auwp$5$JQ3OA{^my zFZ?w5iQ3jYnvUgK$O303MB`Z$Z*=Bpj*jW4tsgiHIJA*?cp&P|{-hR$c7~Lm`h?5x zb}I*j>O75&rj|;AACi`GKD7f*H3`xfi6Y@Bm8&%~WU@pfDmI=X)^3=yQOO{kDpG`k z!h1A4)Z6yBwCKy=r0?L-GdJ!spM=7peWXA4YEVxss8Ko(T5<_6CGz`aq8Okg%uJqS z7fAmREJKt&M#IAc-5t&KRd=t`92FFE3tA??7s&YL>cMLah4=}vGw}eF);=&*dB{4b z%b+$*ZLZ=g7uagdgI@zvuQy_#RP(Tr8-j?(Q{#hu>;q0mLkS+QFOw%{UopE8)hJSP zlW+>PNtUNF&1{`S&hZKX(W{Mx`1thL)Y4XJtaA(#YaU?HlT)lXCYFi2ui57IpeH5e z>kY0@9Fg!>#{bCN_!x;^(heWjPkF;iI*fDB##lb8I+QBFI8K1da<{R7$2b=gR8rSe zJ5~9ZExB*L{*B1k**5Z6IKyj_SJf$#J?O(A#>+qpiJ#01)UpVmt0-DH=>NO56&4C zYzxLbdv*h=cfqMWqiSJmdtG^KOqy{v$B9M>vc87v3Ho-4jtHkH)FH|>wzOuMcDF1~ z9Xp(noQ4RSfYM+|sJRcCOSu)n675*pQoX(gLMfmMHnrO*xYIkyROlEABZN=!aUJRi zhljdb>aTrUIO)p`etH_WmKx~BJia|rdgu{cXs2+!FqcBaV>is%5~62kRy6DmGP`6*>5djCb=hC`=M&&{eoB#}dnGD_G^_t=arFTrq>ZA4 z*)eZ0Vq}_36!q3vr#121TyGo&B=#-Lqw%GwqU^JaNDB9gZ6RKVD z6Vv$eQ>MdW^BI zrqe4tXa{;aTb|SlnLtx5(>d68Iwmbg0!{3(;NInMP0v(YOI=py)&|8gnOfS1$NA#k zMZI4|3+Drvd8K7l&z}#EM+Q+P4EGL>MTbU`D{G7{|4+6e7zB~jH>gS1XyG^U`Dd4b z9*71WbGB8jHu8>WOKW5-HI4Dj7zRVL^Gmbgk*Rr3r!CE`Y|4CqWPVaHl$|k}d4wJW zRc4o4wzXI1&WF-(j!2$llRTi*Slxp2|34t@HXUeedh((^+>odcO{sxkHud{Gi-PtP*F8$UV`esbgdwT4hX{W-Io&WAU?$p)Ia zUtPFWSyR_QTDOdwiXOxQj0g~GPQN$AM;;}M27l$ zy4cmQ*c3?w2QO*6HZ3G<4=@T^YC+RM|ytO*X3$`2~6L* zbF-^!fc>|j$Y4)*7*EPrVs$f>e0AszbUXPR;jkPEXpYRQY&GYsnr;4r)_l~?Ga=eq z4L64-Qd|pIh)u~#136QCCN;b8g2C`Bj0gld>ncRmiSBLtxGb>VY^JChNqqw^(Tv}{8v7=JVFzdyHXbz)orXt@J(%gA;2Of`JnXy$jgIEWwIpAK$h}QnWE+0X&XuU!#OzBOciC|oG_%D_> z1w#$bVLCN6hkz$&(x}s~lf9WwI$IyU-d+f|N6|(n=b}?{iAWUdjF(HZ6Vn_@Sz=*_ zxg&}Vv;7ffEw-y6Lb6`AwSdhVAJH(<2E#(H3sObNrx_X_5<4wCq9iI%XXoqsM;bgn zc>)@lKR)6DHg;af1!!}qByX$8M6AL{3}YOKUy?WON+rdPRi}Q0*BqeikxnL4=zQS{ygbysHwsuNaCWbFN$MVlrxb+LV*?FNd1ne`yJ9e zQ3SX#nUr4^xYTEhMv_YmVU)NSKo6p~PkI5WD!?bu(nbfS83{Ud_WWOLQrkHAdpGVpFE&N zG`?g~JK_{+{>HqFuORDq@xz9;&i00Tr-+tEbH6xuqoSU596eBZlro3#^e?J0rSNCv zSV|QIOGkYW2|R~h2-S+cn$7pgS__9dJD6Ekm*2f@t`)+6iv6S)Vt6T^wL|!Ac*0Fi zR&YnM>b|MWqd%v0CBB%)?!*5DsA678$If{l0Udx}FM2dQ5PBZ!W?8eBvLZg0dhv38 zeEcBI9?Yl8K`kV1s$IAHkF@J&wR}M{zezmgqFE|DJUThIfX(VOE8|nMQw!_K@#OOS z)bu**Wx(+bFqCSO`8cnzY{r+}M27?-_d0pPro4z8WeWoiQNfhQAmTqzs!1-i1pddDeJlXHhgG*$_wK2k ze+cMdnh-LHPqp(p^+U+$kUI4SILV@-Ghp#pI1*uGqWGwIxJ#q%4@XeM+jYuZjoB3$ z&6wYY8aC6c@*RlUTYrRB{mIeY7(TE3dHdtm-Wo20vfn=@r0Q566Lzm>hdH0gFjr^M z(QAh|A8iAu7emo$iVoGD4-zyghexbNi{-<-FJ;>UT2UP)-AZn7)pX znNaXcpD&Q{%0nDcuFjO ziadi8t#j)C?lJjL?l7>2)dH$Q>cvYXS4%EdF;9W(>PN&rFgg}bV6*n(%A}L<3SJdudDXtzn&ZN}qD2a<>cTsrkDU8yD#eLvy zT6KV+IqkQr!Kn|~?oiaE`9bKeSPCGgrzgiI=U0~Mv$lOXc~`5hpZ_s?%6I&|AFtf3 zsMBhY)CyK+036M5u1p;i;F0*z)~UDCg?4Ym<)50!hSOwtWMUu7Z437CIYNhKCUdpi z)+J0{v2F)CregNs2)1C4X`uoK&CSa{CO#4_TRbsnI)^ zRKhLKdOC+9;plX#@qG8J?i($wrF!nSj6)nVsb5>S`{N*uT67!HycWj=M|=afp*y$J zn87em(!ibR=3(9=rb)q+-{5gQK!i6BKV&iqs(6Hv%~{H0<3t?1`g7XzYdhevsJM6= zEb?G8ML0j`4&mhhk5w+elSMS_)FNL4gLjB#6`!4*Z@YrbL;4)7;>@5kn2-J2@CccD zB)l8>h#HhpCekEZbOKYo$xlyNoF{hN;Ic{E_7tEOT$Q)I7z=cRHr+!R`4JcE&I&uf z=;YOvGa&+2lRf|?Zkf-yT+#T*)E#03d6&E6mjz38=Ey(X z3*vu{5+;d~H|U8-YsetVD{8=FK#XQ>7FevRHnqRyr>ZuBmP$*$C6|lJuRMCz$|V%7 zaSnuIk--?|fg77S>+q52;mlTmDl@a?ZUg}#J&^l4S5gq#au(5ZS2os{U&UG;JKZ05 zgksC_*1_@EcycnixfFXInp#S-+KY*Tm1SyijUN0BPHsY+bnXl?L89WKNgwBR-c4*2 zR&8pR0kC=a2_WR5#DBy7(=kuPB@FM7`#3$^Bihq_J0&jnU%?@<(Y@pr`7Wi4Ttuu{ z#S|%*GbPmINC%ll@Mx{9V*J49oq?uQoX0!l2t}<4T_PHf-_pw2ec%BrNy3l=fC5c^ zZ0r!d$18G&Qwom|GSt9Zcq$-93pr5<4X>OpzYa7@xlzjC+IH^*dWXF*~v30yLF zZBX(NoC%Y2Tv-5@NwQe%Pd?upUoiK~nY{nU_fGD&C3h=yx5;aJkRJ_@v?)yj{L7tK z7LT$qO|UrNN?6~a?U{)GUY#3rB*9T$aIMdpLE86o$1f7X%MPKtCPHy!v8;}-UcMjd|US{%kLPC=_K9h^xmE6v%AyX zr*nFz_c`h5)4ANv-9vv|cBY5)WD+u>Q0Sl_dPh`5K_^%w5k-tp;s+Weh(dva8Wd3s z=wPAfP&yV`=vbpp&8R4Nj~Vw?>wRl}&%d%SLq7ayW0&u{-t~Xhv!3-V1tdauxhZ7j zjH4sXWBm+71D{||@j3lQuauiF?A(F!tx57q2c?F1uZXi_8b34$|x zu-wDJ|9Wt8)EC+d2Sz#vW@nc+HdiM{r#W>10iiXVJS1diFevWr5$mE(z>dVCA=oo$ zRw@qpMTBaMQagN-t+%v_kS!%3;edy2I7fygOR5LU3gP$UqR3NMRbGNfKvT~eCyC}H zXqrCT&iWhgTdq_c&~1c*>ubc2~69$zetTMD63i z_1YRvGDDeCfuxuSBmhB`Y_J^XutT!Mq~_nx^9ygtjrvVEih0*j&yg<8yOU49>jjzG zi9vSmxdw`CUkb%KxRO-)|H2z33mL|`>1qkZ;xAT+N7vZDL#_<2;2I-lot*kN4C0g` z#WLYD!~3#6h^$=I_aN_@l6=`ew-7oy+6}cPI2=cgxP-6%H^=XiZ)cZQx}P?QREIJX zo@NBa$Xs~k^7j;zAT^cZl2<31)%H`8&wWUhg8&)EXmFtKRc9NV2`Pi7O-+SedKtwB zw?g(pj~|03&EzkaUX|xX2)kk?Dl4CmEyZTm)!EPAfA*YHk6cq<&p}wvXtwWiD$9SXbeV8K6WE^WS%~CWf zJoz+~Je1}!Td(@C~ z$}NH8JZ2js@F>nQZW5|VZo^J8rSzM>CmKx{@`kEF7)=y4H&q_3ev1?oB}pzhmLfWb zO+ebFDQU+x_gT`x!JlKlX8tgbK~S3B&WSQ3M>kmXohcSyahY#|)@a_pyc+QNR>E(O z_qRvCvmO8DaKtS+zKu)1a`R^wT`+lD8uGH=xRs2H{}QQS5+oHjzx7J_4a`6*Mfa3& zoc)9P?mTfL4EJ`ia0(vToVoHZ;0D0W;ihV3CsBRViUc|dINg-nAcP$rZYsQyw}YPQ z(A75J<3>>+b5^4AxmyKmp6$8{o#}Et?|lWTp!6CZ9vyrAdXa)V9Nm2nV}4>!$27}L zh(F%9!#^56laFE9CGaphIsSpKkLtbiwSO)EXLK}P-97~q5nNe7d$+W{Nwaq?u!-*h z#H7NK>Ke^396O0o@n^a^20Gd--Ls`aq6P=Fid0Hy0{+oiO@=q%^*?_aaYt*@_~|4) zswibl+0KpTqya=?q!1*not=(oknrU6FmZay(XM!nxIPd+0neV#z&>Y66)Zb7lc%}G zZcR{CuJN|sgq}WhqVXyLtbz0WMr_RKCZHL?T1(|Ayve&DB{JhV+{rKT1SbiSkCZ1- zd+HcB4NL;m!6Hhqr{YrS=UmL!TFBCGy;DRYFGheQxF}30m7ET0OM6erko;Z?GR~$s zVDX%1fkcr%f{{g=~1Pz;aAGE?v6ymxs(t zy4{c(?erh{IZ+9uAP6+WK9g_>zH54%h)wf~Ik<^VlhUbld{N&&Ai5$~4)o#2g&Kpd zn+(xe4OuL*&Kz7ix3VJH7dg3fipQGeip}Z>$DB@Ws&18>Fzh~G`Pix@pM2I9M|NOwX?ewVgZjtaB{3>vjmNChR*k*yWc_z5v(NA-QAVo z_KLTsuDO4BVRC$B3rn}v(aFFfX4Rqa+U#s#dt)WEwLw?%`1EZ=`*+}hlBvSMjPd}E zo~Cn_o4hGtse?Uwilf`fX?S(_@FaS2l7tQpnbr=e zQ3pjXKvE~T9@FfkcTpM1PEl27{@Cm*j^@VY=SK2V3QH^CCXD`A9rzYziQ2nfzO;dw zjvnF@yCl^CSi26TzGm=Jz-x>J(~&V`$0Qg9W@M7JDngZpDWW!)pi|^}hQQ|Eb0u$C zxWZi~EJ;IWcpQ<3RE5vMvY_BhKuYOf(iQ-FDM3t+Ih*A*xC(uFp11lfl1F6?I{{4i zY5Xjn5{EBwAaIXcUOeMtj&D2gK5&vcXKs#B;(%|7y){S@HoMX-$N%d1bMp6(3yLdX zXV?%X(SW+*ug%P;%5QCM7Z}kQF7*%=O{S;yuIN!+#$rL=r!#mBYfS}~zv7U^erVfC zaS=B}c~eF*1ZFfR3R`En;%Ndg=Nng4VOK>d#LrW5k|u#?u$7HAv}LsJAD-1}okc#> zGx;RHpz77&pcyE9O=anu4FE2;FH<+O1d_v=Yzcq_Qj$HH>y=%HO7ndxpZ_Q)R(^#J zwnw@PDhG#rZyM^x@h}Rn&P+}qJK5OT!VG)W=i9;)X=fj67^8PrmgInjk~i}~Ie)VG|W28PXb$S};c>7|K?8tc>I6A*)vdC)uG+flhg276xcYT`?)v2tdjGwV3&} zSbhoxKZ|nHVnLr~z*U4xTDG{HZcw5rWE7xQK+PSQTSqZTpr9c*HF^e{DgUEWbskN5 zt_ofJx<#%&BmSZed_rNX)hA6{p$PStGl%6XN_c;q8v=PA(p;u<66ri1LjnE=wPWTYueyLrO ztOymdIuUbBJ~(sz%qPUBS5^r@(I#iuS93CwYQplVq~$F*70CmMlVtlSyWm-ex3|Cl zHTHB9<5P2U0U|PZdByl3&>-IoZ5h96lH|U1m`DzVrL+(KYwWkSSZ%h==??bv^;gk~ zot|y28)L9)d3~+ZGxEk4)Na1;vTt#7n5tl7qRvxTa<&jU~Io+4=GnL zigR*itnD#EbQ*D7JRcj-c}(BuY+NRq6V|(f{GHmv(&=r=2h0;}$_H|$jXsmk-ux-+ zq(oN|kaWq3BwLe{Mn`-_EDuDGBF$t?^FD{VnIxz0NT|kUe$+9?VvsCp1wK;Ijk1E_ z4(Ll-Lt9KMXt@6<)J$9F)R9m&w|APb=y>naHyCLZqq%Nu6+hJHWrrq9X6*6bk^SGL zdGIA|Q$8Rx2~M;d1SszDnwsYi&8kd15k~s^Ua}+LSuJ;>y3(fXIagAwDwK!*zeHr- zf6M#a1SL|DA+&`dQg8%@O~JH-SphIY2WX8i9 z35b$c-{L)U5~XJuZAx$CCm>zc>G_f<)2_Wp53AN)V|4B`dh+vKfahp#s)}#|m5{Vu ziLn%E7yQmV!T;r8=O@pK;ZVb^*&H<~`2{@gdZI0Nnt(bCz2VwELOaNu07FLVhL~7o zY8~QzlzCtisbj`sPHH*)K4d*JIT;zhNvm1elwX3L%AouLx&h(1*XDHRfak=N&PXe# z5;-izXfDKyXOBf~RD%^HLnT7G=nPZ@wdaTJ%_K~6sC2{ROdH@S(fb;oUjci{RZeBm zvgL;~GVJ;Qu{`#G)+|o*1WH4-Hehroe(>IO< zdjhKEsmB(i_THl z2wo}RBH3x&6fv5LSr_ZeNu|`H5SwT2Pl?z@@{q}&&tPC;OMOaAz_NalzGi{Hm)xZV$lt`4-429Cs(V6TF z*&hWWJtVV6Eyu|}z#JjsgE-Owpt|tcGfk`sd$RmR6(V9cN4}2rh}0Yi2rdeP8%bax zO*AZt%8gqQSVY2;EhsRRAd+1CDEeK=@P+mu=lm4vrFv} zGqaALDf1h$hGna-7W?QaV$ogV?N9r^W5>sqP?6-8Dn%uI^rb~HkRz-*~y?P+)WlWA!!CG&3G`e8eKs) zr&c5^=F0M-a%{#L(prgOwGRGZ^0o=k{H?>i(ZJCDp3WB#oVC@}%pG8@PJx6nv82Gt zi*x1tjjBDF7NasM=3J?qdCa&e71-_zN~;hi4JwhKu49a+yNYjskCKb{e4LZ>(B0oX zIMhE5r8+q_jm`D?dhoxZ;-e}Iv38IZ6`L}5l^_H7iJ$d`R$<%WIGRG?>nfihK(|)B zb?$!eIJ$xPm6f%vwUwRa!AY*Q9ej_K0>Nb#@)Efk&S3tR49UJTQxoZLn}MS9@a<4a zELG8`nJqFkJ&RUMte)f5Q_A4|05A6JGJxE~soto5*X&TSVig=t9D+pCNT;k`7v9W; zUd!Nw=L7RR>kT?pVp`Qc*g%rGygUX63QE~b99s|PI?ImBab3)#x5lxE2>C^GTbHt_ zJ$RK7IL6p91L1FzR*6niURV=RX4nCz0E5Vw6H4CZZpSP?;&pe?e40$Enc*`=z0vLf z>C)7M<~QTPet*=@VMd{(GF;`7nQ}uxr2Q)_3xJ6S1gtWO{w}c^KQ1efDrg|-u&Sfz z;`>CfY}VIN(}MP85)Lgl@$H$zawKJV*ns%}dvuE{bVV>%F{)&K}r6tN$)#x$4p1 zVB|6H8y}tWuPm{=?Dzf!y03or!>Mot0}z@=_$1J*+zJF)3J~4-_rT9BFeyL1oIL`A zp5FfEm$PVC*}=ED&4i2pP5&rc{etV;8%xW&Tq|oph&`1`G$+NhYy8)G7oS3)xOSM# zYFmFt0M@A!S+P?U((@a2biY9?S~6%fD+*6_&a11d%1hC?(^xP`GWSF9CYL5p;i;CRGPyI6>DQo#k*$1FKD(s!280V66 z2kh*42+%AGE=8;~ahq%9pI1jjt}_$_v{jy8C6gNJlejHFJw6{XzYCyNRPAg z+XnhjbkZxGnDV0zSXfS{E53k8b1mqfUk-*M;pko(RH)3_!&FhsVt&uM0A_-i8`{}n zb>B#H>rhMW>y2=D8ApcoKyWj>*x5F`xF_@NdH*WotxOm1ZQ)OIq?7z4PNC`~W^Kzs zM_mAwfCRMKr{@tO#i&x^7!i`={;CGjz;kd`YeYr# zCc$NpDlIiv9tV500CuUM$SO=$KION0!o=zbpzV6iG5I25YLh$=PqOq#5Sv-N?ne z_0c-rH3Kiu$}r6Oo_&-E3O(FEvX0{q_m}cbq<&vJy3KjE|6$N^A@QpR9Y(R04f;6hFH)Wia3AX7y}sdn|1 z^URl5z)!1p#D%uAQdoD!FD|*A=j3uiTo+`L1L)o15oYRO?yueWHNcK}Hx9|#C(L>k z7eVS1?zHO(b+${kW8ObF2JD#ib8L_ERAtThIYgFx(`eh7PhH;>4W(hB!+oexdhv(* z@S?x~)JW9#+mjuw-i~Jj!Hq38nuZppgX=q+qiroie*ena8kH)YUu_NA;h!C_T{7Ls zJ0$#w!BaJkjO2sz3YJujPCksm0(wc;br?K*hT08k_}MckxGGwcfK!c|R#!nkRc06k z2zVUbW&!FrtAO)GIpIF}|!QAyRa=GHD+xQbJ$c?RjsvxH=LNE$QZ)KZ2ul~p2PtF^%IR8A=EtVxui z;u|?Z`DOZ=YGgp#)!?R7IxG!2*vHl9El!iGEy)o_)RF3Z;2z!-WG!BIe3bC%-G{}M zl~2(U(ogGn$qy(jPJW%_KtPBpz+$=#jOsf%8f>h?W3G8p(xEy|o)u(a+C81X#hV-R z*k{NZxGmAL#L|+Y(vniUA{lp&T&38v?C4`VD@iU4suMT@We8tbrj|Uj-nbf5fYd`v z3E?FY#o`ysqa|@gg;s%+1jO!1cJ>x@k1$`OVYdYz{yG!?I5{#hHHUrd!qn7!U=@_f zLeuT-9nKa8G{vG4ys_0)JNE8Ze0Z>k#;@HoIKM>ow6*D<4YGS+)$8e;V5DP{uw9y6 z4DW^3ckI151av2fidr?Bm~=ZedkKy+Bvmp%Re4qK+Q$hX7^X;{r4g*WdN4N8$}}I< zxf8LH_Q00fMNZObq%a8y7Qs~jFg1ZIN;nUsSy*^hR@JQ2Pig}Dj-mmNB_#Y>L|-uNug$I_3H$XD|Lu$ zMSuimA8_mlWmMCsEyznIo1Uq$4FaIG?Z?iGI-f-PuFhu)13HvypOQYRYCdM7U?@{W zpW3Ku1+M{0Ra@~p6kOdoLMM)F0c${-c3iT8b(Hiw`qVv3#L zipoNEd`Zt~#@q9A3yO=1BSq2TWYo!ekaLewj_5E~_SA*T$<%ws9gQ5y(e&6PQOot7 zcvTtqxf_}^@*$Ht%bP|Th3+1p(ik2-)nFW+w3&lLsGVYxC(!_uPGd+&a1V(oL}ucZ zjRZ|kx&2@}Yc>N#5LMH>dQ1FG|1;fGQ1AQ@W4$KOrV+t&n8ykvHJCJf8PVoc{W20d zmHuWB>G!MaL7anjNt=6!#Z2i0>Sw-iGcaA5WRXVC#oaIIm}O_v{^oE0r{e?XC%@ve zQ0IP1|5ru}a2j6fL)eOong}2&*~tYm@c~Ko;%U{Jh)sk_H77zm8C2TUDaXWBwL)1Q z2oqlggUy*;qJ|Tf(5`frkuNx??3`=D{>Yn?`==*o=9kvCprT*^2+-ZL z16Bd5eXsdAO~LUX?`=)>_BGW_hWty&n1Wlon}KBpJG{*Uujf{^oP(HMTiF0cu!e)H zC>=6ygiHxj6!cO4VET2!$h(exn|&L6r2mdL-N|vBTB3|YKmUNa=jtj(E!BHMc83U* zSt?@JDsdE_77?igEsj0Bu?slna}y}si%Kk_HmY_AWEG)%>H;mHcKCqE6zZ; zA#(>@PL?eq*o$Oe(HTXGrp;XI#yq;6)wVreuUYFRz{*HxJWZ)#b_3WiG4xA8H0>aW`TLigKdNxCTWGvjL$uOn1sqy~`GvB%v8mPtW-5}-j! zZKZfcEKi6s5=T|PCe5-G%OqAYtQjQNz!t$u9~=G|1-X;8PF%}_&E?t7n-*2oxt|K2 z4&#s!49{o$Uyh5;RHuHHzhXUIXaE>s z$+F_9_^GNccgn_va|*jbXAzc(umBoBK6cQu(zdKqJeU|a zCQC#c9Vig&y5DPRU(^(jArxFayNlJN(=%PlBhBP+p>etaViw>eS$I}(DPIw%M9eS9 zJ(GF>{4Nil~O8gNGseDUjO4P{Q96LFpYUyimV*VUq ztHzS(e?~r7UK9W~S z_N__;hyeRI=`if~4VPuw#BEyoALb_wxWsXee9A=u9#>S3egCn0+KvUel9f!x#ENgAGsJP}Pjq z(&2}uE`HxcuS|)s1ObYXDY(+$ghy&+Q!bEk32Zz6JY*|28pJx4G$=3CO?}Oshr_bV zKILYY7BeF$ZLn6a$MgfP?1v>iBWMv8*t;~r@D0=pSQ_*nMZ*(-UA4mTjC3#v@*hPN zD0=Z2;rWK;f;GWbd7>k)Y$WJk39Ug8umu5du)DwHDd|~S#-n7JQUIIU04ZD(cuXCW zdDQ}N91A2IJKu^rP>VHsoWd<2CmX(ioz)kmk3wts9N*_UfGpiq`)P(e7-Bs+^{>k8 z(l`d;3*(e-lN7_GSU@^C*XEN&76G0l<`k@DATK=x!^;Y6Jophy!_<$4qg+y-u>Rm<3=jDI2D1c;Eud7G5wiLhdamo@wF~CqNC9SK2j~X~Yn< zq7kwnWMU{n1x8*pKTgq{Sy;?hig&1_kW-_^b|=#rBXO0KM#|!px-KKl;*JycB}K)M zJ`e7@`$o|4iW$D)<7zIiEP}^0Lea1o@4T2j%%Xpw__oD7U0?c&8!m;|2S zsU^Hqc`F)#^GsixNQ@&ZI1w?6df+kB4i}Xgw0IA9U|ff?;8xPjE?f8o=w7uJ@-HJu zLevX)fs;BdTlWjfn%=)Lik~z%AVk6J9@{xhJf9z8xt~H=vCN#5HRa&EB@HWK2`R>Q zxn{r_Af*EU8x%YruXl`#myKLH9S~tMG0XrESIdVDs}($3y&YT+(bB=;)s)6K9fa}0 z2I;c+R=HRiRbGgW+Q>iyRJ^VF|Cs(Op4-C^wUu_5963A0)*_2&Ye}ndsfg zx))DCP`;RGJW2Y}UbZ0c0QV7*m3EnvGQ}=_uau!s*mYSnDv%Y*Y)X*(DEER*TpWXB zY_7WenK^64p4pX2Ty@PnTa|H)MwdBDN=;@WVHJG9SCYZG$9aXhSw)@wgR~o2wc!5% zXL}%)pEm?xARzZpiZ?jh-4wQPa$do+*oXg)k$hnaSQkFt8mr3fSl$UUZ-N)$8uJfp zEZW>|FYlg)B4eFMkfs`;yt&QQCr#Kya)L0iQM{0$iDMKmmJqR+F!IRX-;2WOeTwdu zUIVlk!%$D_)z*{vk;c@+nSG80CunGEx}LoruMC;CY)s;@H4VJYkz~KBP8&`zdTK6F!Jv7`KiMd3(~}Bz=Z0K({JZwXjPg-sfc?ne(W z(%nnN?}Ty>Uo#`0`P1&6zrEzy)YfKTfjVOoIy|tp4PCM1sqXjrb^J-E5e{#!Z{U3b zj9>uTfa2q0ZSFidIg8bDODFU z{G{MnyC|-(=(He#`c4QV0u>=}p?px9K#5#R8c$NXhV?ZRulhOBEJo3?E&|+4AY*A1 z!^&Jv^c-sP7)@M(RS3BOdPyhCSJ6R}dYc)nGp&|qe`DN$iQ=ouWrVRB6DpHL>XOeu z$}#_EHJvhuUSdJx&;p-ejkx(a6??+Wh!HH_{HvH=;+o@eSsiw$F$f4Cvq{%_50EUn z3?`Q$%FxdKTd*79d&*F6f_&XsR}}>&Upfe{tt|Ohwhmc&wHui7dS2B0?11MzpK@<9D zB0rvFh*DBYJBeja>FG*qYpP?r9h3SM74ItUtHKYph_j#9R+I>CP`0Ra zVH%4GL5;;lbK>BD^Kf0@u>Bo35+xJtTv=HKRi7N{=+2eG?b8L06h!l{(j8@(u(GP0 ztY1);m+$pYPQvl|7cQ_82N<@w3X>ZO1p-@40`AfH)ugI@n85V3w$UaU<1>8F{vGC0 zVG6w$UGv+>5s@Fk0dKCYqP96YoT&56%q;}B)DTvSjXgLj`wW;M2SZD|6=9KR?gzn4 zK%2$|@s7hJOSrMp{Ro@3MkF=TeG%47z91ZY2dUk5by_6_ts+%vS8<0|U9PQqG$ z=kxc6d~ehs;wTGCaIIy6glb>2ukxboALu(V5^(B5xCW({aq}&DGcE&Fi4V_alC(^`P%v@)9UqWx=6$}UEx9Xhug$W~p(-x_;}b{HpGShe{+{pN zI=)W%G^Yim!4K3+YgoJt?QT^7hI$d?Fh7R^TNyaQ6Kc<-=v{OC$Zt5s6oYa!5-UST z12TaYTxaWf)C`QbKxD|~lTw|mE0Utt&F18!r!{3_LhbC!L^avvH{8-h$BB<)K*5GQ zO(b9`?fVPQ!@iDzu0yJyBfp3*n$m+XcU zZR;EtYiDPB3(9T(fCbiAgxun7P}+gPq7Ep@(}4TU%D^-t-2K)PwG3GKE(U&GYw zWROE|lLGrnS{t*FImHJRFzx z`0QaatVWKQxJ+C>Ad;a&)TGpWO(gd-gP^(A5=g*YmeG76S70x+1V-Bhx0ii06Qg5O3ra-^+e;&_ zUO1mues$_dy!6u-$q8{sjzs76yHC1$&=CtId(8;GTE#>xE!ZR(1kg0bT~kjVo~<-A ze6t2du%=37ElYcW$T7GyW~qX?n#hU(AT-O`*=&mfISG*;33)GI`t(`pta%%dS=#rJ*WjQ|XdcrkORc^aN>ZM9PendS%6*gW&A z-a-Gy*3SA00tq%jg;!Uo755Iq{mm0IQ^B3k>SoA~2@4a72*ik50yR!6o^%GP*MUCl zIG(U3qAd)m5kUYi(qj9o5VzC&V8>dM1A}*Lfv~o)8#13srvx8f#-#yC@iUt8FP#Q5 zAqIV>Ny7@e%pw8X<>xt=2x8U5#IMDZtpQ^?a?z}~Y%XEkqpY)RhwCiIsg^U`bE2+e zuKd`L>|7C8X0Y=)M$B>$#UhXu6f8%H>m~hapFCHLCnQbqmsP0qfB6vtZlp{fdcH_dcG20b92Y8@^4}ZT)tY+x?@aGWtz_J%o zZ04~}MooMe@W8S$yEk=QBvLrEIQcUES$);_|F`2(#*YP_o<7>$155`ot){t)7=%w! z4h7@N6DCSWW_});!q!m%J>k27ic$YLrX4fVVcr)KhR7iQPEN3Que0UFIT{@`6^0cf zaa;lfNYBhL9X;vB=QXmRIwey?A4#WgbG>scB#v=9=#tSp$bq@gE=h|OGTb;0Ji9O+ z6ij^*Es95lTV_>eBAP70xumSTj%@-xJ)PdmLj!8j3}OF(yVmR?;flKt$YE^-Buirh z+8FC8{08=R?L7yc1K$Vw`f*4VFr$wd-U=?SFjljF_;#kUopFZHvOg5Ysxug-(y;NM z#!>}NldH`e!Gw<}rNy$HaK!~Fcvpbp)Fxa{(q*uw)lR&5!I(kwpUk=lS+L;2Qunl) zaHSU{IAp?AjD#ue5FQEf7jra0HpZ0_u})f(HcZWXoH+D*6wrWT)ycYm(d=YSDX|p{ z+Dg$YRxa1dlV&%Xmyi!pPn#VKVPrk$3FLyp(kgeu3ns^y8q?--HuX9|5Ly?KME*iD zfFx2ejNj0B9MSuW2*D#8I6X2AN44 zJ8(_?4N41xh}SlP^pF^_+cR4Tt>Y{3m0BrdB>BP*8sU@p`MrY;AKOA%7TPtkxU#*q z5nP^5>}!5fla>7cI5NL4bibs{K^zmD82%8;7bF!YB6-0;UN%)KhB*xE*<@OFv=#J& zoZ}^vaOE=xX!t;14|Pm5^Ai!)Z^mCEC}?g-Lq1&{t65ZnUj@>FgR7q~AIY6&vllJ@Lcr_a}4y4P5A?>>l+kuQZ#b0-tO;{c0tD0VLae?&pNzw zu-5l-dUSFz5Mt&5n>%KEOl$f$)aLFP4{QW@9Kc@(J6m#V0i>BVk;E!54#r713tqEIXPlHv=R)YKBVDb3PyFV9*1} zn9tZGj(;sEtEhQONzcX`tq^+Ir3Jn{axqhDnxk0ZOr@u;2&5ItEro|VU#Grg(G?uT zVmgTlya@~x_RW}J77jL}Ffk;#5LG*mbeyuHCLLi+`|iJ?)LUKORMQ`Dx33()@G|8a z1356pTwx^)60_!5u!2Grxw|sb)8%1|q{%x)TWft~F=?806wPJVcO2&v@0WN6$H&39 zyvE2B;|}s9h}WwW9l=RK%{d2b=b>Zpfd@~v{_;sO)EfZ8o_b$jO+!Tgfskex7bA5P z6MuLjdV)w)dx|`w>ZGjVNiD8;tncwO)KwQrn`>C1M`@1*fMJv$)8Rw?uW+^t;zgBG z;}qN?O-o4#faCs{YLL->)LNxgHFVBvo;|IH{`QWH5A<+bx_So&uMLe34Gs*CdcBh~ zV>rT$Ow7(rPNHVsm+#As-R+Ha#wJ9dL0dvr652%cbYp+_3>j+en)phjq;_$Vpak5^S*!~}+u5XJ&{L_S#43*Gi$D_@sslty>H#Nv z$HpqeyWw4w1&)Zz$(AVHu*MPyD=jENNAsfv=L9Rr0_;i zu{G+A^d*`=W^yva%=CgRh!6#dO&B{!$_XShd2HBow4{k+CebMKlHMg~%y$W2Kn0Y9 zz4B`;1>;7f6)GyVVex?#YTCg~zSY9*qqhf$rrEqe$l~1y&9<_<6512k+nOKjYC)NJR> zl!ekW$Sg0eAn(+bp--V(uX!&2qpp`gi_T=yGTB&*U1;oqjZ;{6nDL3MCu|VJ6ldS>kOCNu z;*yDD(^gJGS&AQ0@eu=qE3$XnM6k6R4*I+=p0~6#G(Yw9`#>qFbOlDep1P|0iMx)( zZ)=+SMvc2CfL-0@RB|t;h46tri+J9eOBL|t1R)7i(t(wc0Z$v7dOm58^54wXUsZ6( zC~IpjR8zr8U7pJyl0}JCe!a4m=e@N|opSzaWaaDcLz<+bSEnUU_@9&;DgsON+ardu*Vsy?=bdx3Ih!$oA98_f1ap z_cLjU?H4-XxtYn=qf;}BkPIvp+6zpM!@aGokq(r7H3p0#Xr#FZqt|el<%#~4mG#Z_ zbwqz$*%fd1FdS#l5N&8wjxzQ_%n_*(wFglTd4>X53^CrBrjZ9|HsbboVxdzf1_qIq ze`#)Q)gm?U1c;(ld)H(x!^}lZRdp4_p(qwkEB;nFfM^6DRbrP#OPwfr?P3Q>IF+9r zkOiGsZdE{`mpkZZCn-fBGC@*_#5yNcl$v-6#KOcf7IW|qponDN7uug2T6HM{4F%&++sMctAgy4tyn|!>-L={dvoLx!Ae1{Y5Fw?~K(cbFZ z%=E5h`nh=HPN*#iK!|i+nUK4V64R2#6@oPwyz~o1G~Re)qihvu=Dt+mVnJ@< z(mFY_?BdI2IE_)R=C+Pbyt|&)l;p+i(mq5S1d;YovCP${Xdzm;;HKZi5eQ%GBx_i% ze(K(8JytQ zKmPaJM`L+#xaCIz4}D3udLPX%x%Ke-qwT($u94}PB@R9`7R!XWnYcJQ*m~1D zv4*%!riff)p|;(?+Riq+2^gy)Noxe-l(q+4F^M@gg{e?JhoXVdWf^5_i{*&|C6cuk zLk$nRDcX?wT((F8_H;Ai1pUwP*c;gsyFF1tm(qQQ87_;IgNAv4(fTl4N)@?2~I6uDk#~|EGJ3-i}1%@ z|8Zk&J+#5TyMuiIFL2kifh3wbM3u$K^^PEVdvdt$8-G36*E8%}fsoi)U!EH1YHDEp zQgip@5@SWII0;Pkw>H<@-E$;eD)RJ>P9h3UH?M-IG=(M+8l64I7^U396sPP#6av-) z50!Y7dZ*JL(8N$u277=(u={w`)l&Zin)k!XQY4au8qYf8Jw-7s@KY9TaD|fFJayG& z`N|Awk7b;MFzYdEFJq$v5mzKHUTDF}{bzV0X12K(YMJH|(FLXM<}ON&4p08Qsu%U{ z!eUQn&C1*Q)@=16aMZ~yq*iaHi6%UG01 zF@)Bgz6CJhAndJqF+4FkwS-@Bcr~zQrrr+^nXB^kjffOxudu=uJ8dF%W07zs^{U#t z#+kXoh6;`$4af^8`vYuG23u5>ZYkx=Up4`Zg>e(jI?Tdru-+?|whdJ@ zAlTptyXg1iSaoth5ad<@mf)tQC@$6Kt1BXv7ZD%xn|}$D!+;Bi)8B|;f-(@7E8&9ooy3SgtMYerw zxCo7nY5r2$HvLIa#3+QJe-kAt=D_xwUMby*jgU+^H=?2cu#It=NOXY((P>032zU1Y zW|G)N7yz6&J>Ctx@%FrI@8}s>po_E>TAu1}YhsIZeSK?x`jmfldwqRnezL8hIX`LN zk(P9~sF_mTlxUXk9FYo6Fi9WW!1%I1o$!t2W7B!Fzz)g0QZlrdZRK2caQiL_LBJZb zVyFxEcRV%A{!mt;Vz{WZFgH(Z0!###8fwiWUtXNIpRjB_l6?XGA%@sY2LpMm3wbP& zFM}%%H@%~4%}Izn=#xBGR!))o1y@T^?5cMc-N~wHsHte`9%dAS8bdaF-@r&h zKdc28XU0cHCU|wMuUS}J@Qw4_c26>DJiD~MySur{<2j3?2rPqrc<%Th*z=;NvukQ) z+Ya9hVX4F-ExhI5?uY$-Lz@TT^$q&@gsBCx6mzyCz|x8PpYhna{|4F{MOV-3QTaUBWagk zM(DtQgAym8;nq0BSoCUn-vO^z|!1sx92Ir+*qH{Gwojwt%rhvnLf{p>Msr) zHxe%0t!f*bU>e6TCEy4>STPJULu6~riDYau_6DQEtBinyGXOp$V1B9i6O;!IO`nH| z@b(NH!!1!FIukxZvwj#ih`3>@$|}te&tPf?VwO)@mFz20BSYjGJR2FI z41OHHDrS?Al3Zp^nJ+6x!L2l2s4hl+UWAGeGF|!#GB+%pQGLpkF-66l`WxzVaJpq@ z33DdojYZUM3*Z)m}Lx2O895kPJvhEWJ8l(0EQciHHtRlb zYirw!hNiC9^I9XdvN+X`$hE$%CbOo&JBNM@AxVdWYB;^eQ6VzTmNa56oj5mum^Z|8M7|VyOzoKqg!Y@U;l55!gPX)$QS=D| zHf)v3QO6$92^BV(xth(UMDxpT*tgm;JO8TcwEK^;J6p3JK6vy%*7Lw!ahfWi$s%gT zMO{vU+;;te))Olfaw=ZD^m;oRpVef2`$NUAH}VQT%Y48zNlRx-TR(HNiIdYlMv>W0 z7TRL4W1U@&tE`S2w?_ZjH$O2pHK8G#e($7zip8(Y%$C zE=-p$2%C0z4MrIe+hKrqwc#@bBFM~02{+o@mL$yyzwOG; zWE!Z{t&su#Fmj~X10+QJ!)heVC|JSPc4>^0G~AAg#G+^kSXyi|-6v^3O#?87MGV_! zLCwX6@vr0;mct!41A|Zqy+kCWb##Pv9DV1(xFIY@Gu0tOKQUppd2rVmqnDFC9cU6_ zY-HkZF-b)frDnV=wyjup);I^wE~_DXGdawqf(GXJk}b8a=jpM1@D;!e!hLUpom+E( zEs<-x8#8^aATqG=z{1A%c6f7j`gM0RP~&1%rMqi#d3_t@KydPW@EBTUB<6B1Ld z+%9bD9iEu>%~RnKs{mqpw(t>px)5?W!OG|{Wu0OHL3rO3sZ&Yn;(?bMb9>)y3`&viK3wH_Y;57;U;8AwlWW}!!Sbq2r z>B=cdLQPn5z9c1hlQ=)o@V!xn&-v8eD}TU`^<;GW+dM!tte}F<#Br_ zMnKH{W4?Jv_9AdbXd_4qgP*^DaBOUPhOs-6_t@OD-#0P@eY5~JBSoMFB+p7wb$T40 z>M3%0CZ@&%o4cEI^^}g4CdjwDuy1PQ#rhbumlU(e@3+=Aa6NNu+gr)zKbzi1s`$@X zJZox+1Z`4sTV^YR7myV+^$cu&@xp2bgf!95v)$2ZC!uMVC#kaxu&|1fB$;A4Cu5>a zHKFZ`mL-d7Bb&ogL@Vv8L>8eiryr?F=TrJe3RfZRSbM%STAIeVnDNdO1!9+Ekp1-q zNI;87H@WiQ5TSAAN(VW!F(5Yi+XjJr&LrvBG{w7MPQx<-ssip9gAWUBu4rSO+uB

!@&VM?9(^(>7E8y;K_*4G6TrZ@|g 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

IssT+=G-N0CL1 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 z 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 z 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

& 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
VcwCe;-_nD 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

8}g>LB= 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 z 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

q`n=kUmv=o$>-MLCnw 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

EgRrx@k5g;+)I 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[ql|1M1%}m2f@23riyo1_#gyRfC$VOW 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

g0c=PqQ z0rgCh-YMG_yY1rSRKwIm`=f8V-ThaW#aGYDphc!vCR!nmhdKclN%UDJa3;SX`l982<5f)dNa&px3VHbUos^naoA4kiS*V#&4nNL;)mXF7UQTtk zdHlS_-ysb_QE^r(7g?AL=a_rg66;pRKPDO7eVnS)ZBTFYe#1$ogc-~_rDn=jG~?^7 ze8w+Kth4p;#c*#>YC`1gvXLh&llS{E(LIJ9aNQOi|MBfLR7x5Tas{BvZmF1khP4IRj9=o9=8rQ)hrPouEJe@mn;> zTIUKqJ-7ORgX7Vnky-c*T1`@s{>x7gh-&Nunv$*~`>=_tY@@vz#q zTMZ^S)~k1AO_p*?>6B)efQ@QP9r4zH;#r5UzU3%6cn%cc`HLV%+1*i$*wTNc^rQJ! znt)5aBkTbfa2GS1rmU7uBdO=#>}?7b9((2Fw__Cyo5DZm+Xf904;E{KIWNGYwr709 zPY7y1o1z@bbk?b86x*}Woz%>ldLDd>CW*gUv{0*qVZQ7)2Gf-G_}${kTK|v9C27Kda}1%X}n^N^Nh$53O*S@^DMHCU;}l@f&$ z(pPI+Oyq_*AIO@1MXIV1b^60PA-zFY{L3GbGaDRKE~U&T-5HZ{!F!l4edk#L=E>sPo2e}B$BTB#A*v4{-Ielp1HEfWz zX3J(JmH|^!tK*25C*mWTlR0I)imMNMX9xa`qIjZuOH1v7e^0KJb%WQO?S0C|nLHuX zSKD{#tj&jJ#t}F^D__iID8TvO6pgSP*T^An%WdZf;olZtp7g%vhfvM$Ku9VB91NmF zwt8Np%r|oHQEBe_(C6)Hm?f=gMl&NfA8r2c-y#qfaj0$J${4@l44N2gsm!YPI?jAs z88}d$;?4f##rFQ`ZVOtF^jD>}t>);mIK+84?`pa}Ll_k$2bmVn^D)&) z6>ZV)e#$lRaX28U+ygV2yrIorHl>@g-DB0>Vr2ACfxCR?@MwH@qZ_ec6NXg!%9|n67V+)%wRm5Bss}jBbT&mVUw7U4+P%GNl!2OUc_BdmR z3_G~HbFW)dpZDdvVzAci4tJ06aTivcZLxabA~^r<)ZA2E=f`lAQ&{Tx!%U+tn>or@1f@WCE9;LN){dfbVjWEc zS;V`ga*Pd&M!Q=k(^%Gq zN=$_efKu;<}}%_d+X(m z_315QF14B3TWl7N@)9Yyp@VFAt^t&+2k_`&trdw@0MXwe)nCTVm#53Xd0%FbP3D&1C{6ThW5@bd=L1X4Dg)cd{LNx|#=N3^Wx|yYUIgHBok;hVPIe(9e8{Ab3>CN@MKrA5|pCgjC zQZ9)`9p9`7)+>}C8yneUA}Zg~PKc&h=P!HTFEuWAhkuuI8>g@{Wfj8JrPEq-`)#W9 zcu3FnLC$HfN3)Bw6e8T(lkZg%(s)_iZNF5QUJj}Q@|DX5x*goMO3BZ)*G&{pzg(nX z9{;E%UFx4~_3mz!&a&5wQ;OaT`?q`jn^2yYo3&MD3=Amdc)~F_KrZ?{5*TH?EQ(dA znsIcHruYPz{4A4O${Wvzb=>($u`1SGB%dVoJk65jEP3~ulrF$EXb%3E4 zr(Gr|z+lE5O3r=^*x-?IlkyrChva=wzBBEqi=FSU_n$E$H46iWMdOcf5iv^POIfjo z6w{Ebzbd7xDk)6$wE42Pbf$r$?9`QWLY&RwowVD$g2CINQ7LU8==uJ1py)!HQ4Tbx zUzRyo^4d7%+~w@GZog$Kt?%Y@R9C?z2;qn*oU4wQUe*V%fT3 zz3o1Sl%Q1_5?@_GK1}qjd@Ebu?#C_LDK5`D&PK`g_jyEl9SnHDq>p>;v!R1s$bidR zr@imQ=T1f#0tjd-r77d}N7gVZ75SR||dQPlbOIDYsusMS=IS z=SZAKNR>w%h(BOlu4|Vpkt>Q%zHlG@zfe~9&L*DYSVp=eXo+BmPT(SAm>@rE`Qcvb z@{B9_gh#UoY11iVAzrz zE91*E$-Cvw==ff(-8I~>9454|(`nZI>f-rv$^hckITT0c{rEHszs32v37=phuNX~6 zIpVBi+%NC942$yb&9#g%PVsVM5|>D2-)DO!R1NxPZ?+q^?}JW;r)$I4imU`B$@p;! z7p^%MM^edLgf!IS`0NTR`fB5>*QG17$F;qYJc$>bPYI|B3oeP{14#1KWNX#%(af1_Zk8-=}QQUM> zJe|@vGl1el7E5<--`bE+FlU#G``u|BTX#o9QYD^F`3Zh9N&tQG#~ka~SZiNL<&LE2 zGb>WTBxQY0B&)GmU-6fEo2hZ~ccee|uenv$J;e^auS*Ka@V7A>{G3dFWhDEaZ%qme~P`00eMeu=y5Cl zr1JO6C4P-$&J!3|t8RX9v2w^E^{olOa0OSpLY^Wj&MN?6E9w@30zlNdpQW}|*LZ(p zW7K(|roM7=UVPT5Zyrx-ii)tF3HO5qd+WLLhP_FEebi?u{g2-jFs=LaGVu-s}43{s?kFM*xq9MzG7SWVMUtTUM+wz#; zg-22+3uVum)L4lM4SEz?OcQ3f#-sSXqWD_RJ(QJ?5tM;>E(bq5^78T*R85i)%)QU|Gc&&@~Ovl8#yHTtX{K>p{@Zs45o)yyE z^6UTI%f~hDieDOzeU~qo{sjz@RSGNZjq!`a-p&Jdbfxw1@`4-K$}rfqAd;De8FH#ZnzJs@`NWKKoLJ3> zUt(2-$jB}t>fbc-JPsdqroTY^g&LvWSH#sk zs|qWIT}w$a@d}pOzxg;VL?F|HHt0pdZk8_+*knSq@;I!llJ;~ zar&ZP|6}CR%vx7eUAbPSQSX@UacZc9B5lLT+nTq|-(l!XiCif6Vy6|Eau<2o&6$LT zfeVCaw=vm}Mh8S|XnuZMz_K}M^acia54v*N@6IL<-liC!Ur$6k_hRb~{(INxj~^9p znnUzZ!GMUUkQc8H?tcmE=5>r?1b7Ie;q~Nf`2z0JB0VzIRyNb(5K#j?il1H`dyB za8Qg|$~LYHUsE}41MslKtS6aeG1WQ=BrUW)SZ+-V;${Cv^Z{Rn|6UwCeZ9V&8O^qU z8M6LSXYu4YU;RPy`jn_Br6iDgkao7bMu|n>k~HazO=r>EDvv!c#?swgG|NF`K%nYq zL#i);d82C~fim4=#m_O|<;w{tJ3}r>fX>DJ?Onk~+*-bi%r3G&|E8IR0ACUBp;DML zDbyFm!C-`nok!04&CWN{-QA`Vw;$Yr#!$%I3Sz%!f(O+{50z7WI1mj}m1*Z~gUhoz zwUS(8{M7B8hmEqFIjZWz;xxh*LRO4i^p}0#=f;j9;~oFmyJU;h+t2`?+Q5W9L~R?v z_%`5}ZeA+tGVwlxk6ytYI=@(LWY41);30{hX@40p^K!V#&PE-y8uUQ}bPY zyAy9AVn@{Qs20q~?HuSLIqezZef93)8FQ=Jx^_v0YUn^`gCVPXYxNysio-Woy z9*i7Ajl_ItjPCbTavab~uQ)1~tFsZVP@3L#a@Bl7Sype9YU$&IQJxw3qoQnXOwn>V zbuTFH;&T|Ybp`J9DRGn<#bU*8&rEq`$Mn*d!XFRepgMUBvnbCE-EPzetK+AWLa)$p zEla_1N-bE6>~|a~jJEiCC-no*uu$7EXsV4V5SBC_c-F%f$9?q5Bd}!|W@e)QsN0c{ z)`O}uh7>**A63_n(EjDL*57q3da~;I4Zr`&-awY0fm4F&>McsJmq@POtM+R|sUbq^ zIgau9RDeUvo;HAjDX=+FW_$H%Yi%o3bR}I}?P(3+rABkchHe64yANoXiT=LNlGpLk^xF0qC4jCpXXT_&U zh-NYYqmW`q0kI&W2K6+oEnWsAQ{7Y2xNw-%+!OD3%jFJalP%Kew>T1W_coIJ+w$s} z4Yl!-U+-u9N_9b(kAsDwAXih3ZSg=L_5OWFvD5BRk;kamJY9JmxsO7KCsXZlto;x^ zGILzw-pM5xK`9UopdXX0XdF(c}<$KDB4pT2@Is0DW zyvu5}G!_?~rGp~Nw59mtHf8nIJo~!iQW)N?ogFhpagBY#ddcd^olu~(s{7&m8$2fS z;gd-4=4m^Qmm5Zn6NhTPPLk)BWzkC+XLx+&djL=KA$bnX(Bd)VVz$KoN4=Sg!UJ>J z%r#3@T+ZI+QzFrS(#u>p$V{w=M(+a$O;GVf=3geKk2dZxW~wYRzxzus%$dbSV^gxO&MEf<-%J3qKnBbqB6 z7HBJPoAH+Q;uR&)#PwzGPq`lH-OPWD)-b`#Cxr+Ht)UVN`asSTqld4DVWT*ve(QwSEc)2TZ#Zw5XkhxRuaJSXJVt z#_k!-P^~=$0duF8&ChDy+q+%M`~IT1@>Xzb?msU*xq`qs2Q#^tjdTcegnhu&meB}n zP(m5bYH!-lNrj&hb`4;^=Vv|Q)6PvM)^l2BXsMM zU@7j{{OG~YT#8ve$_%avU<=Vt+9VAyWoG0(Euv+zczi|*k}(=Poy>5Vv)~gIx`}ua zeyPBiIM2cJ-hb|WzqQeC)(5V4T@`hl&izB&ZG)H4;2 z9B1-JAfg=fiA6(Yagsz-@)Mpe z@^)9T86`Vl5I)Qgq8DQrqx@4k$WMf1dHD#s$ufDMN;_|V7mT19YbY-E3sK97 z)4ASFT%V50gyUj-`nJ7OO zXuMVv@GylrW&w0}GGER>tddZFI?DwG-DI(G=d^=(bmPb#mta!mR`tPz%F-Cwc&l9g z&_YapOxT=jP|l=_Dh(OD(*5j3nw6C3Ir1q~@Z&fN-1k^`oDhF>ul?_4lxV#1B#(b3 z6R$9e8BW34F-%zvI2zt2>UDL~3)fCHsr{55{mjb`Mj%xe7d}X_{RH)fa)de5j8NFx zd^1tz>is)XHx=29MQIBjG<#HYy|db%;<+L2U+Avx7Wa6koab1ms2^`+L|os_A1^gj z&Q1Nz41bw(rQXWmbm3lF{^JmRF#P$D$ww~ZQlcNy* z-qivCVxj{3;~%`kq1{&){>wC^vfF7Vry&$*Sy+%ov_3Z&N>G$QMKNvYDEqm^-o?wU z=IsZ?!75`A#|1Gh0DkUX8&ACuqHzUkgIyWj@-0~`$~rnYRha_tMPn%YZGp$)Lyz3` z)_IBYt$oTv&%frgWZFnrJtnjCh{w(tJ`yL6VXwBIqT5DZ^^eR0JT8hoj@d#J0^i+v zFY?w;y5K|#kCOmz=#D$BhvxIq-PL!kS8QPl-dnp0Waci4;}Qv2|4HvNntCv-lYGDI zsGc9+a#U84)gb!)jj3U})+d0s&E4t?rk{&yf9!0%_HfVgk+_E?e&>KxrP@Y>)o{U; z?nXH__h7t7Tx7c96^m(XX0dW*^`|{8m;B$! zE9lqU(`)ysqY-UvNrOprF!MMQ!|JhM~`SSe0}f_Ju%-K~1#l816#> zQW?LNY>6I*nI#UiE`}fn4h5DSUtn_iuK3~@BOl;;h+U^&`U0Vg96A!Wi(xwz3p4FE zqenEL+M+URPjAN6h;Jd0f1AWSY0fCJ+}@(e*SZhC;f|aC@E_ju#!q9WkpyBVv72-i zk*(~X74!d0OW#j>N|9R|quswYu+5-{`&a??qIo6`C;3ku#hCDMPkVclhk~u-dvX3x zoxT!|3xtO0s0iKQZ#M=n9NOY5uyGvFCBKwNQMG_XVRyaO*nV&eY;@)9ZsLILVvmiA zLJI*@YRV4>^=7Ry7;YvKp+Ulc_=hQq&VkI0vuJ(c_O`pu-dnzF&or{^L$ouBW3fP&)wi<1l@}lsrUQyc3)D(Ey_Q$e8pQ# z6NjM^sLX&sD~Jw?ddQzp>oRuDkMyZbn8hLV0qjZx-sDnMPWi$-6*?|{U;PzD zm||?SWisAU`lsI%U%k0o)&lQ|SNiMLf~Ah)#{RpHNL3!^7fbOGn$>pwa(GuoPQxLpfDUK?wuKcoBSK*PGWi>@6ua`#o8t z%JxrLOWeP$s28O16<*pH-%r48;KkeG4liM#C=_!FrWW^98#l>X(CqK_idL(i^jMz} zIdB6$=91ZmYH3*UztC=(2R|#G`ERmD^yyP!Nrt<2kZlx10JW$L95VbSUek2BvEI6O za;InM*uvTE;%q0RivRFMw{b(`FO3C_AH9xw3d1>Lf(~FT4jU2F*Aczcwni8;gCie{ zg;&O0ey1X3nTm(!&5-bEP7gDlx*ZXH*8P9p>!Lr`qi)?+mbFpqeR`Ayxu*OfeGPN} z;%4Wk%>8#GA3Fff^`mWL@4UB$w*|F6O^|i=ab@`3T&L~4t8Gr{cWb@Fs6=(P7ca-D zQ4We`S{t$Hl6l#zO)=qLNa1c}jFF7H_8*X23^{%igk(roP)QP}q-pN$2K|Ohry0bl z@1FMU)%Vdg{Ou5y)J3%0-2>W4|*(jkjxah3`_fzE8NZ7{;XCS@)q-S+VX${L2odwMZab8G8V z+APqKVeR%`r93rt5ir}Rvt&T|1j034?(&NQ3*FQxK-2gt1vT?K1s|wbNJmD(w1&qy zHX5RFuD4|02eKhr?h17k3fMWp8N-rW3HC~og*Up!=k#~RPsk;LNf{gF{nx!EcJN=W z_DhFXo;(ivuld!c*(@qfWnLfc$`|25nD6VkQ( zYSL<&-jBaX-AHXuul_ocCzSSI)QQ5MDYcSp{jsGSAzA#Goz50P6v@;e)Q|6D_5Qzo zPqshv7N`~}R&hJZWq!5zWI+=KNr&vFit zidIdKQljL_+W9M0G)(?z1b#PXDm4zL-asx_X0rE=~1h{|ezLaf2dz|Wc;Ps*{i|GAKFgN@%oMjHUgm)uBS$Ca(1B z!>OZUMDKC_zSfy3qf9GhCB3mM1%z{M;|ZGoz5Z5z3fFBx;$FYEHI1li?DDM=xdebktP^7tMDYn^4k9DR4)Mi=AzvQ)6*H z5~d4rsfhG4Ya29M@(x8)9dkujwiOZ~XNniAcZs5$*nlg1QD&&P=a?v5G8ELN?^Pls zYowSv)0RXddpv+XiB`3HlU?HAXJCF4?qeR5PCv)3wxL*h!D|z9A6SVROSrhaiPP9qL zkoPVrRBGk?D_9TrV&el1;@od{{{4Ht@b=;MKQF5^^#o0yh)T_AzbO9U4+Vxph%1j` z^n>EDM8QA`mlkRMf8|t1(~}o8-$iXIDxi;33y`O*wvW+y)ukQl23}BGP`NIFmJjvH z(JFdX$;7Neub+azxJZS*yW-2s2gUhzIVLyOp(BRC5i_q@{N_z=iMT~b@oJ(?ofj6F zg&#k4%g3`<{lgh7^se^tO=ool=A$GC6%1A^Tw|`ceo_2`qv3F}IRPh8W2?LgFJkN? zOD)GWrF%h^5O7`rIdwM^V1z>l;U;f+K+}55>)tY0T*?kL!bms7FXgAiluK}bHh%sn zOTTc)yUs;%wYL^`QT#Asy-StnedY+mOs;2d7fZ1sqEGxV`_9XrvVeY0^AD-Tn6k6h z$9K%a=7AY7;YWCMSI6I<1vG1W>Ul7$s>?4=1OQHE{q1I7E#MA^%Igj$UbSB?Tu~@P z@d?N7mxDQI_v)U_p0g#Uk6W0^4AHr3t0_I@pe*bZckVKm-#JjMc2qoiK#$0FJbpwe zXb(B;C5ofCuHN&5T@oT!^1t!VZPr%P)7mcIgagOqH5&boud?9dgPotM8{zedGH9iw z>^Jj1bN5@?Aif&53dEnCnPp94#FgJ{ztwE044oq|^hzWCZ1jf5PkEz;fE+=b#Xt~^ zm(l}gal#2tcj;R5mH6q9LJO|B^}T*)dbhQ%A7Nys`JvrV&jeD6&nV|N$ww=z2YoXHet44N zVc3}%czct#mseH`1HFFcCFYgw5gZ1L{$1GgGY?eV1|e6wgr}m>VNtsE`fW?oRNciQBzB zXuhE3u4_4&>+I}%lTEnq3Ig;W&>UEBvAN#qw&>i7{tgY1e!Zi5>0WESy)KJVp&n)v z_JwyJ>tvplPhG&?-eaP(WVEN)EasoK>QUNRS@y+i(RpI<%Wm;p-979 zbStBup!kx&5S8ObAUq_xdssZ_+euM$lFfkLJ_Uq6zQ_W>tFu*IlkUBTqzXY_Dh?J4 zno?Bn{7*d^uwxbUN)$8)M86 zLNLY{V~p8s%qD~oOfbe6V?y@2pYJNz^!CwAWP5L@^{lm?_5Aogzq*hu$AUuyx55zH zj!L6|&XtE`0`=2jGYS^YF`xG=zPSO~213Y7-yrwasjfq8p}WKWDjLTynaaAT_EP&E zESasKGy&rDFk3OE5|W(obg`qHrt&3Hg`zuC?uMW*VE)b|f9H;#KWZRWqeFSR>XI-_s6#}o!oXDyhJR==pS=@7MU zYh(94(o+=XjOtV|NHlXUrKw@SHrvDtc}N#dZTb=SXuFG;Zj@~*(z~u|jua87im;AM z!h*q}#3|=1R}kyq!wI!2E_(iZP)p(jO+0LD@`lt5%PC7=hzKfWEh#ww1``j0^VUEL zLRjuT1NY2)&9`TA0-Xm6D5x5^m9YMY1A&vrf5nbh+xc_;q2bHL*btqDRflj&X zbJ_>Ev$_OWIjefpV7i3`0&y8{Mq+_H9>DP(ZU-z9J9&-yMmDHRFeR5_Kau}~m=ejF zIs*qNxxj*dA4K;$39kY(5KV@BE!0UD>StOYigg;J@&cp%UOiyPhyw(_9YurR+u?&& z0B6TA$s?%0&qnr-sF%QJ@tGvlKg;xKFl5N#Xz%2?=>k$nMWV)G(OfRz?w+#|MVt$Z zR~%GzM`tb<{|qeGRw6Mj5c{mv?Px~;mqKudWQ}U8+ z6C9QI(8vXYR$Hf6Qw?eMW8NRxDXLRIbBg-D+RnzQ5->*jMfKNosyFn%gq+F%v#tNo z(%`(-hcvX(L%9H|OpkVP_Q1J3hQ+SnJ%{ZIVQhK_D>HsT7XZb8X2=_rvPvRGoVLG&oBfRoW_qT2JIGik%A=T+&^o%UriJrA`Pv7WHp1rUTgqItgq8d zNMGg_S17t!j;M+8)dw0&5tE6~2>&1&3>08n0SRDqI-nORj6-@AR_lGg=}u(C1sjc| z=1L-AE;j&=IdgqT@d#_mV^P!g{;}A`CB?8fRSg6u2n0T?+5V(s`vRSBh@ZC{|31V& zvJ#C1HdTG#@F&nu^Cxl_iNkK7an!nNEvv%nFuqVh^@So!-G<7u#|RN2HPSgT3kCcP zH=5||BtKPI!-z;gF>_E{SM8Y-vj+^y3Nk^xt7+B1Zb(~m_$6fEco(VWOl)U>pmjPPb(~*If9BA&P+x~7cMCd(L`cWy7a!dwU4hwSCT`pMRkZLQKBPWyj#x6qQ%iDTzug1JX~ zmkSHib@8;0hq?q&N|l20q^Vj#u%jL=rQRZp)#BYjtQyfEc{b*RtMH5cgxK&S!VRP= zscLuz?bfek39G@Q;(*1$eR?)-4f#@Z|9VN z6_ja*0CNzBm3+j2{9F^%DkY8dFjAkJMG`5F>C*%)%0VGssfR$Pr3tPjPN9b1rUEx4 zX~C?FkngYqO<$yQuwRMOs=o?RHL{11{e!%^DBPU)Ify+WKFA@Hjr<5SP;+rveDc^{HDvXnc9fO` zPb0`#0TXhtJz-Y&&FsMgm>$htZpRu)^oxk@^t={cx1j6O`VCzeXix<=y`IyRhb_3{ zFg*s|V01Cq+}(5rCl}FqVwRu)iaxK-ZK`f+WAGsuIjTNh9UN6=q{~u7vR-j9#EZu| z@uN2W7oi2xhpn)u?x-9$xYLRyi$i!PDvaSsI+Yu;Fcy$UbYRe7z8e7#Yh4Nikxhdf z#cWb>H!N5-a85X(W)_I)nM7}nltF2q{;6rKy|{`05M%YBfOueoO(qMPOEfd{MHm6| z2hrD7%{a)Y8Jug%qDm7@Gz*Zg^PJisI5Gl*J$@qCUXvl?x=L1WIPODRsHdxy#7uvg z6CA1`GHUNn$w7qmq&jF8$aL40d2>qX9@W@=FehS#{El?4Lb-rE9maBD5;W0t{d{qJ zQ<1;o{BHdZx;ZS4{*h`h$APP^kw(62-a_9dH(@L zVnO^CzS&N6#t&JGfCLs!*amQgM0!2oNe%K7@hECyncIN-?()?r?zR&WTP%)-b(zU2 z;XH&gpwp17>N{~4%dka1AgVkuHSi0u@csZ(s`D8)87PJ8NI9Q>GQys3oe|9my)|s^j}*^aErX05t|5fIYw*GYN@O;2&V8 z*7mqQxIeog9#O^Slt%XOT9D>Q+YIcz6hvqq}+T~AZK+HpLca=xHMN zzl{DBK4SCYE${)2lyTbH0j?S9b*lonZ`(bQ^*;yU;(r`&YvEEXV|T(`3#g=WFO++e zP7pb*lO#qke3ed<%ltKjuLsFI;2&-~{loZuv>{wUkv4OQ69#pZnqEr24^zZx#Unl<&dyV}dulh0) zEI$@g4a3iKlWa=W&`veq)3@yhQ@oTPu_aWYFo?9R9EJACmHCnzOag}kKU|SjB|SqE zI$$4%fG`!t6s>WnXsra%Lq}TtLDb*?N9GA#*e4eTEz3?Y)Fo~C%@m8 zW3eN(j`bMy&S-JYUx22o-Q3s27UYujqUwun3=_$Q$&-O6*lj%k5_mxAg%0Zaq8gSV zBvSr8-;{+i@!qBIVz1567o_hTWtE)vzZQl&MsbvzOM%I$cX$%;45uz9omH5+u}Bo2-IQM zwu=xxFX}?umJKB#$sGa_%8m(R)br>9?&lS|_!9n-{V?WJZQ;y3pLD`yVv1B!(i|F` zBqDCok0de6+RFe@SU{*FMuL~>4-h+#qMzuFm6M2$mEot5rqfhF&2FcuN|1&)Pf+hc z{boNRr9&Cd^+sB6!XR0&MV4Bw z2S{Oxi3ikwt@uY4or#;2*n)C}L$m zH7Ch6gZkHQ&ZRBW$cT`Q)10KtkTcq=X$$5#y9! z+1xP>&Pl1Bpeuo?;zGOIv|$)$?1M@TZMwMJJ@FM8kWPoko-jTtq!9`bi;NxSoS^oc z3I1T{5o{%4kZYIxZWAmP4z!gK|3>}umyl0Pd&HQp@H->>>?-gWop8-gp?;d3e|Sx{ z3JRpJFdnLVGNcgr-Z*9g8RJd4)wFEMk<)eI-l#B|vjr4#n~g?gnVph(fw{nL;3mcdrNJ$CbD6uB} z&`_6KcyLbh$_!?t&X*>P(Q6SE%twv0=zkBJo0{Z_M52P=!8Sb+E=N0+D$R8f4Y->^ z3=9?T5lQC6!-zn1%oJFpEni?b0iZnl+UAR&(HTm|K_WI|cn~2)sXPMU0;kXUFZ{+g zcG)g0obN&pAEAX=vVXG;25@0G+PneEe$+oz*%)|If}Qy;_A%Oz>rlx@MYR%DOpY%t zuVH7>lESZTv86QzaK01F zUqU}<8oVe(#>4fn&=QYcdhL`ZNz8CO*sf2VfG-tXH9@#oU|@|kba|NwH<^XR(n{Wr zIU1E!qHvzN{TA!fa&J9<2%LDCRXHxKsvB(~HPPg11!*Bt3>vsQ*x48K1|M%iF6bzVs>gAVzZ z1&=O^g%LJtGARSutz3#c78@fbmlUIeM_YqS2>vs}0cf{yTzgDhw49~z^^JBA*a{9khayF^0@8{9U^Oz%;*oJ&C5zP7 z^G!|jA=UrCd$TES4xpCDk0e&`Nv0mwpzUP`ZPQoUlt*+%nWJ}T550Ufv&Lu`E0xiT z_orKSLDu9qm17*$VNG-Zm!vo*3`hGZL_5B%t6qmK1Ts?w+1$uu{Mcty3ZKvf1;U^} zSDCzBj1IUpCi(-2;0obh(f9?(#auxuWbJz_e9j$Na>Y|SM04<;?A zLXsPU4Jr%^lb1($r5)@NMj7O}LppuhWsq>MNe0Lu_=Gm;yknlCB3BFngUXLd7s93; z#b4NO|BUttHfS9*@ zX~;qc4;Wqa57kbfcvqo%}AEi%vh3$u3QcLh6312a164INh z!x+rXHI#y^q}<}lM~PE(s8UX~m7fG-uH+lQ8sX*TRpHt4^*-==V_p$Y7UvxyNh*}0 z3&I67o<|*4P({&VRGP>T_o`SqqqiGXIe$cnnKzLsRvNFQlaY&RvR8pR;h*9U8smSN?;9CBZu-fN*hdAOXBt z9D4}uIyzga3Ws$SnLSVq<=75F zTS`ThS~@ey1t}FU7TC$aPRJm6Y9Lko@VW3 zR5P9{XaFT`pK{>vp^Ain&PW<7#`QS}PQO5sP*f*Ja(&HQRa-c68)~-Irbda?142U5 z9|H-v&1vw!mJdInF`$?@@BD)?N^Vd@wbXNH5Vf0aV@KZ0{PzZJ* zRhI&tQu|N*LtX*wu$Y6?bxKaFxE0Tt71B!pk#WsQRlo}*7l$TZtd91Y_utUTlZkxe zBT!Oc019{wSVAO3$N2;WI$of$Ir6AV%M)WzL0lI<9Je8Hn zjZ4jOwY>Ef1LS~6@L^Q+uJ_H~h&by#Tvl`1c;(3BA6wdZK5|+x?i8=g$i(6_aq}^1 zNeLlG2hw8Sk1FoG7l6GYf``kk zoK;Le1;s1}B5h^g&vTo_v3XM9oNL->10YeW&B*|ewe_aN9Oeqpc{zq#HR|g~hgX#* zudq3PFnX{LSVl4^`;mg?A_tg*iJhI$BwCJ~6ZC_54YfQ?&w|-smO>tK9B?tpny5wd#?i&=8#ubLo>;Fi8 zM;VhjO%{{v%IuP z;B+Z*08P=W%mv$ZSXUQIxZx$vzmI;G)tnSNe_mo-n?YEI*JL5OF@YVW#j}s+C)JF}d)-l3!x z_b2Rt(l6*izSMJi==*`x`u;T)7V5=|WsE@>yEA5z;ukC`Xdp+IfhoDFB#CR4vy-attum4wmcnqyKrBh3Z<@(WhwxhydP z#7%0;i{%}3m&L%VUw;BIfe;Lz|MeYxP+8`AY=xAC8T2) z&smyIGggr#5_l0y1De4kTKVrecoK%3Z1QI99srXjT}13SvzV0r1=JnDqEpxMC>u5l zhli~uoH$G8c$1bRMjfggwh*eR`RoX7cf)3fhhXENl5CuXQoV*>MBOWoLcjVtWQ+=v z5L}&CJT0?84mFkpRMu4s>i|VBSdB=^!78j!@K+%M&f;B+VmqBtoo{PS;c^Z?q2C%$ zfn+6TL@^Iu8~n*7Tb860gt`S?!W{IU)gQ#Y_F(UL8SABgm`fe z!WOq0t2zjuJuKM)%wsdBhJtwkQ^XdL4I}gf8W-Y2qChSTXn)RkwyE=a9aT^Zwk6K< zrER91WO;&3lb-_XE2^uz2c1SY(DgQ@8vzmGUqr>4t9;3dB|?H6=#J(CE%UCGT>P+# zE7atN7&XF4fm3ckfrjV#z0sf9Cm6cPKDB(>dy%}i51+1#L{v-=EB}6%rRi@dz;l|^ zre7f7!&>*$xLUfh$m2oMayOM+__%vNjXE#mdES>X41Ng3GpX z8&DFQa>1qDc0p6CN(qD$X|@9|o%Clgk1(;S)@)cV`0e$ID|!PrfEdjH36z6m1_yLn z!yWjK2pH_V{uYY^Y^7!vhU`?JRrM{LTumJu<{=A&BF%t&0NhEJxS~Jk zwHm9YGx?xNB~`q~?FhKVXkkc5t#cyk+5@YpjV7C}X@L zpw+?#sdsvQtS5+xqn-si+A^18f{s!ce*-w1yl>Q%SQ5@6orRMoEhr>fhbKat3#b0F z))zRmg?fJ>iqMWo*X`@&|6R5qRvtj-ERX>0r;vL1gL(YPU*pt~=q%Qi|5oLLRTh=} zuvQW{FCl#QV40$*LV^ul*mS35xLP1b>ox6LwrNcduh&cvvKU6;6rw`SFL8I?5W*D+ zBZ|SGF&ee7HP#N0te`R~D8%j_6f&VPI031W-qIo7o^AL%I?Xam2u5K7jq7z~_~j3I z^Lk}WL_uX}(t=NBfumVN!bg`lA+fBY&2*$;X}eP(6E8$LcIk6v(IX-$VRjh;Wy`a5 zh8g#gC76h0CxxkE4xM1d?iq*)b0xoF7QF^U_&QNc>V!U#g_w7&*6uV%@GYIRw}KE0 zgi?h5ggI%jtQ?7LUe?)E$_rDal@sy+ur?7RhGdrV=n75>W941|ir@tUsl9oU7jGgyFst6R|RuV!Eb%_LsMaCwHbSl0CJOBy4f125y_>T z?!0V2%o9n~nPKE#BGxR0Yg8Txh=T8}5Burb! z6p-LXii!86$4NI)m7woVD`DZpG^(Z*!0K?T9OKw!UY&?2dnuN=dd>&{nANNmDV6=p zGkDI&yqg&@>qF)ss$wR<8F@$w7=d(%CSD6P;m~BpG5|06q=t;;%a4)zhnj_=8RN{M zugwydNrVKk(&9V(TUG&B<%w+Dh3E#my_@kst z{gOwDi|bTG$S>|_dGK;CfNqJyDbk0-R!9``TJqk304yH36dI`Uk=zz$r(h465*S{2*jE@!n)nXH z6hiv?kUPB!K`VH-8J>533J@xgE}j9f#NbksuEG^FNf2*Jt}dwZrmsuclcfZQ$Yy>P zCWN8X-hn9w!`AWsskzu&d0i#~azee?$*<xORr5U`}{oUi>jPV*PTbrzQc1F^rPy`l*)oZlmxEn zCiGUI1BZ;@8Tlc64vcGjMivBvxz)c|&>9i;6>^dg(E2#kQ}CfdC$ zuS6-;bcRvVCPs>2Dujgw*NPSrrdnC*-x8ve5vzi~7RGti1OBo3`X+trJ|(RLl?aBf zye5W%EE9EIJ2B07qUoqKx)0EfG9xtLxEs6>NePDENlIV?=-CcJjP+BvbtuMn#!N~O zqH>w-!BFnk`rcDgN<`;Efx)2qACdv&B8eutrdl&wv3p4x9NBJWLETW|NtDNkP}*N2hXz%RhrUp5gK!=btZXXnZ_@u zdX7lj%UHZ^Gov5HRpufOff`Vk=m15)WDAhAC@~|}l4DIRCf*k?B|=-WhiBJD=&0<8 zWQ?3ri%#Qb-_TgdJ?&N`Punx=oD(wcF%ZO74;{oOALh z3*H*kamSd|7W$VBASMFfB5zhevvRZ~Aas`*mIie=$VIvA_O9h?f%tLcPF%UB@!#yj zQQ#S=X|26kP6B@MC&`O~gLsvF^JBp#ooX~Ui1IZ>rBp#A#6Zo|EH?TfwB}J&X&LH> zXu7wF6Z07XCK%r`B|M-v3;jG~5>tWGNW!8eC0i1K8H5WaUi6jb%p!WaW7kB>PQe_* z@+Jk=6fS|V1k`lQ1=($|k3>H>#=g2Xl2SruBwaATI5Z~-v*1+c8b}yo(18Jr0H0sg zHl-_A+J>v25p*p@9gzKmwX7Z5M74uX=Xc*_s}~r9FHlmW@D8nVTgF+bIukQr419o7LI z=nL4?YsvAi*k%_X8OTq0-}1PPHY2r|j)AG^09(_*(QJF`(Ky?XB9zG#$2Y{{wd?wF z7~&MU9z-PitbW7njFJ%Yd&HWRpLYNz=T*Pa*!jei8J{!dA;9M7 zW5g3#4lkpgY`#2peyKrR3fN+c*M-)R%Sb@$sWe4;B259NbyP;LPoJJO|9qAy&SzlmxO9uSnr#32MtL~u$Vh^m>{s+kaox z)e+LZ1Ow00EU~nv*7-Dl0}`IhOIrS5o+BKDx<}lgq%wp>7xX^IQ9S##ExJXPh+O5R zqLA0-K;SabPF#|`;C_IhlVOpIW64QPLQ#X!S5Y^pv^J(z&03CZJD12Rx8QXA90+3}FN4&p3y)7fgl@if0gcQCp839as#v1(P9{!6jL zE-BJm!0rkq3V7Y2CX{XP>FW3ul1Dn(4qw*ww&&&Z)=3oQ=!7*KbIGUIYGa1DF%{}^vtIagbPEeG$EBSE@ zQ;cGD#=MJ*=p}xhNLgV9ZIs)`qSxZsOUhCbV)s-?OJw#6X>_y69?IaTBGW4GMBlv@ z&E(?UPzq+EsEL|Et2x48w4>&neC0{#H0aQMu_#sGC{5BnD6q&0bP9am#5pOe7q04h zUb4Ow8AM{?>Wso{oGjl&Xp;eq_~AUSBf{4*n$RX98XE2Eqp8b(VDC$}yYG-c3!<3D zzv(3ti&ehF7kwhpt1=Gacq;79nAzBA(duHGw!qN%W^~s|GV;@Sos_A5)2#nF@T1bn z#Ftow(E1c6A}JC$^pPm#N(v{`D>}4!xv#Vh*$qZTHogsS%Kd|nI@^`-RWimEOko%s9k02@;oH1@cbD96y0qsn3Mn0_PTxm zwH%Dv%)$Vkpcm!CmqW4)E`ZZ=o|fS#_>DR)5L2IP@QoupOFtX!H4X#EPY)x z(-V8oR7A7TcYa$%aJg{!If4#G<&iZB@;RU$cfI9g!M02Ts;LIN43S*&1S5foW0nhb zVGan+6u+z56Q~v7N#mcsaL2#~cX;6`oU#0`d_a)9Gy$bhfIo*f`3wS1-$d#sF%b=)bR>j7 z^0heo4MlH7JWy8`InKN*dMHruBbZ}>I`Hd29Nsw#VB42yZkVK`ZnT;>gZ-=_M{GWl zf8qnX)*^ zb`|PxWvZPXYJ6ed6-44WrNee8ZA>RG$jhSVIrmk(O~K-%vT(?VQ8Ja&S&@etzQo;V z=hq^rC%otsRuG0=^}#v)6zHP7EHkj_6b_2PF{BFt{=yhZm!A#VkaP7$ZEi z_zK5mTR~(so5qmF4W4`HtCSUB5Mk3|72DFEwD~f(nnPWX1SlcXLAFIqwDg8BBq~{^ zMHq$72#o_XJ_S>73(+w@pG!*nwQv!dXi@HXXV9e3dtnCe(LRxciYiVMc|#f3efp?3 zDw}4>v>G$yqCH18G#sx(m(kLNCi$8U*wM?;6LK1rGLs(?v=F2*$nODh2JSMPCBu;# zSBlYjs1@i~X{{#h4yCNLgohM$LAPpKa1yWCKSoWB@)Hu=I=g<@ ziFXjc$f*=m0?Y4h>V$0N&tN=n|NKB7w(s5u^#` z2sY;d1Yu*Mn)7O{@P}x;z9A}B9^yXTvn*qMi!f1N!JH%_ih|O15dg^5v0YLN=IE-1 zJ;YPvF6@}~EM65XO?@b_DOSJGyup52#nhRa{;8g$GGQfAX*`7aC#s$#RG`=+a4`1= zJa7pKsX#Qo=CgIo_&4Di%)}(d zf>JkG@|nsVm>{O|fEduomN~qE*Zlm}Y>Nb>6Hik;J^S{ewEcZi1Db~0wr)R<3hAY% zgjl+T)VN%-3#*y35Nx{y4HTrE1$eU92!t+NAyNZ3wz8nblc%z_uq`_^!>j}1i^nd^ zm^@XCS7jSKW@9o4X>CN}i^2=u7%nIY8{dPl(lo_d80il=C%pF`K0T)yNEMXEU6UMB zH`5iu<|HoW)+=tqoenvXWSH=ZmT8E?FnjTQR5PnAtL)}74Lz;a{wa?uGm9>6Z=N@P zT7Qh9A{SNJkT&v0i4(VyB;P??a{YYaw7x|=4x2LUA;}_Vr4+r1lXu5A2P1}Vk73F+ zp{4b;!8R$2NS=-wA`$;{2r1f4!0mnz1|vL|QZkFQ{+L{Sn^m-^6ZG~Ziyo_}N8TSV zkR+>biyC)Ja&0TpJOLQex~)8;1S3Qk#-w-)cEpNAb!OQ=K$g(4htOoj z5_NaIkO?mi$6Y885seQG%Hp1}tY8dcuiKaO3_k`pq9{{yRbgh zqCpDu1tfpSGB1p5A-1c#5tq(RlY00qF18H!(x`|ioQKj6n~lR! zvdXB(k4UtE=j69+T3Bqdy=iKeN|=|w{+8flJ>9HH^dWW|r0Y8*`H+_^?Gt~ymqr>5 zI4Vc0Z{e|3F=`{EX@7eLT4ro;LDro#Do}up0MNZo0#l;Nj?7Puo~!<3(^tFmNHf6XpAqX8o{H2gU?*!jd4* zuh7Lnqs+#l*R-<$(jf2A(kqs>X9)gOPGOF)dB}#yFgd2-y%4Z{cUv1vP*LCNB^743 z;8%v>&!vtYo6S*z{jju2b@o0Bz6B> z`ASFxv|ST%C{1d?uZqZY;xYahB9K|KV&N@DQWxTHB4-}xz8F-2|6d_y!Q5mKOU-{T zu@w6Y>XJKkLPZ2NHb`()FI+(#$*y+DyGCLV8&$muZO2=B7WE5kod&dKA#ox~nXToc zI&{b-4yXiCw_(;4{}$HO_*FD!cYIxyBY7qHsY%-@#fJ@|vZdkip&F=>ATEAh=c8;L zu)Qe#A5W>KZ_+i)g_Kk9+n=T@1c^Va6FrI1UAnOVCV*Rrbzmi?YOz)Dv0@ya0g8-X ziD@Xi1WpnoYYG$ane+zRhKc*Y{D-&}dH5aV473Zq0xTEguK^C|nnV78Z>;diZI|RF zBEKYKP%WkxMqc(%FU>Hbb+jy=HGs8FoNre2F%AkNkqd~3(wZ2b3Ht`anIvEc07DVf z4K_5?n)X)= zGswC4fK;IVue9hk>EW<(w(_KKG-ML$Rq;;=TScMz$lz1#+ub7<&Z6V8(HOU2FXTDG zPFRlDMP-Df9ARcaKUI)7JAl>kj*&F*KSuB~^wZ_n<~arH&_79~9oAMtHwP|T462}$ zl>S{3>6+_w{RIm6fRXVi%#fmEv-f4pPk2MD@dY{^a6~Bcs5PV7d>Zc;Y9u;1RWhWo zUQ}2AYv}Li`SI8IuwsIzm6%SF=M-}^7V#e?rOR5yh5(D;YA79*dsY{-DW+cl0y$KgoaQ5{n8BP z1z>}+>Er-{-7aH^$d`iA?d!Zo!;0aq*^B;#E7kLsDAVLbivmc$D9u~7(t~Q%DdkGM ztx!A0mG4S&ldz@6&&t(Np;7P2TA2I>5gVYh4zozId})Qh68fp3yMai3zJs~QgOr=r z2Mc#Z_#i=iJsOo)>$1DB#66py&y)=~pI2R$FS|m#vqk0_1B&zGP-eHtkzPQwAUn>m zGSomXRwz4Uq2kzNNR+gOQn$Ibw{%ZQ5KEt9rqL*ZcJ^x%##x0WZc<~odz$X+5Abn< zv|dx1FhivJl(_JTax?W4aww=7=J4-;q^!=7i<$B!`$L~mrRBlL-yGWE4MJwX1z7f$V?dcy!*)2`m=uX#N#*Ey*?*vx5c7mZdqrK8Do5^XmTHR#U-iaSq4eRtSvzoo(5IoUyF&+o()5@GyuEg-cpTNbT>R*@F@X zG@c1ps2ogz)#sZ~KDadBJwY=R5$mLg@%IH;NSELKb$Ak5ZBm}AALT`S9*Y?DLN8T* zmaU6=A@kIhISsf(dFU-{(5}5JVRe1~B@1}aTIagp5kYPlO7frg3)Wg4L3N6=+6+9q zrCcAuog#2w7$Cd<1u(AW0 zoQbSOl!G#j)Cz@<5r`4ir@X`-`UwQtZX#D38atr226VikPz@U%m~1J!L(3S<0UvcH z51!4i3AOHjn?hjzq4X1sA!qh1`U1TSV0W@9^&(046k78xC-_lFE5*V9Hev`w|@O0Q3eir-GPpODH(^ccv}%3;kO2ZpBD{fi<}wd{0fY73y!vlrj@yBf(JA@|FEl~@;Ci)CZ= zwf(#v5akvuJdZ~u#ic&J_ju?z8pF{rbs6Uw@zi`b*YZ)Onu{CiJFFvIwT-E5XKVte zIa6Xl*Tn2Ndq3=j+rP86w9Zks)`gT_Sf$}u7IDxiX2VZ$W<(;n2C;&JEIo-+nn z<4R+p9fVOR7>y59zqyV?hgFag_B~?eOWint61K5ah+R+$PZ&?k(@BA@cmVJwOIdY@ zU?9Oo1Oz|+37BtYxO1!5h^}sxg1!Bdp*b{#Qwk2*vK2F*mIu?(p>Nm%z37jSlwpRxb7v^?18^2`@$( z=w^3xj74Pn<|fSw8|g+fuoPPYf`!ir$_;|z+foew6Vva(VB{A+A>EMMjMxEIh_kJ=Miy?G?moE~x+Y%BLqt1g zkKG{N%4b8MSF-TH_(VJC63E2#A>!mx0DK!mBt51-rzC-lhgQ!H>QWOJrzce28}mi* z?+dP8jR8YO{4k)Bs2LYoPHK=y>l2MNa%Mk)YMgP-UY*f-D!;K0-63exM}KofMVa}w zeCK^~lTn+JwmITLvqs#syL@cK%(tHhzvLrRe3yW85g?nJwd6C0>-{b4nxYP^nW_U>FFk+Qu(76-Xc}+!3-=O=J1g@>35h<%Bpg%kgM%|p&c3gPPE z(owtMiVV&dV~z|wkYs*Nt?>w1oSLPLE!wXJoDpsq5)lVlsRHar7B9@w7jq;)Ai;$O zyD^v*80J`_SMpyo)f8`b+CO-PUPo9u*lel3da6+qcWYo2lFfYbCHX;VLhP%YxS>0& z9%jN>5}uO~J({0b%%F;cbFn~NPJDkCk8c6+BTn6TA2@iBu_tU8!%n`w43&G9~;nF=p^5JmOy1-;LYLX%XyAQ`tf#0Xc)#5Xg8Zb18~Dv z4<;Yz%DF`Dn|8+t6s`!1oAU$nRs&_%=m~`#ODb#~1S_w=`f<0Rkzg5znlW7Z z4zK<1qKTo&Oi~y4j7|XJ+vk+Ygvf>-RH&%-=VU%sEN`ry2p-zRzH_VMHWkdExa{(*J*7s50 zj=h5?%X-6V$s#E+C+@suTXNW&gv}Rlk_ZBM;sDTLj7xgHBj;9TQ6O^i+ zn*U0x1FRt4g)&FKiLloO-{;WoDoSL{j7&$S=cOWpexNCA+ho=1PQvsYMlXFo;YS6d zD&hx>>dfI9s}@&$U^Bn#=couCc2j0Wi?WU{@=F({N%59WXT1P?hKCZ3GD&a_H?CU(Rh}CsK!xI77JK5k8xYhFqt}herV6p5g7o_dK&+vVICv zHf^I70JRXYU*3m_SG}wRZ9Fg#(gpaxgaI9+b!Dj0$_x>#tE6hJ zFbpNM(30pFtl@6`IeoFhBOO`O`b^|d2q%(I!@N*a$aVfrP#b@ogvXyDQ2Gozi+qXk z1;Ad)Hpk-^btm35{NzzZ-8WAPJ^2{?7{G){iH^kWXnJ)I872Eo$`razRb-sBw5ODC zS8*zfMHToY!37>f$QI?zQ1!rX(2|*!T8cd#e1;&F4y6%nqTXGUR?GOF=``Y>S`$}a z2qPlQ<*jcrl8M6rkZ-;f_0Mm1llpX5RRS`rU>HiwVN8C2d{Z z)*cg^qgo}7K?Xa!&rkzwNox*>K@T&31I1D^o5-NWF^CBRVv=<7h=#GthH%?q{g||p zgmJ4AvgdO%MV3?XZ;tLgFMdwJ<6oPP&l z4l2WKu|vU#oO8t|o0T^C*k-U{#3R2`VP8UHnkj_q1*1PGcR#1oJ$wxlMDf_nD)_AW zgbUypCOtaeU_pdNHC#FiWh~dCrn?QZ-zgM{*#!H zJ;~E{pfdrzpzpZuCVVdQm0kKjIsktamoBno&8w9MievuS;iJ%ymb0~qtD!{L2)BJjhD3PQUyI)dH+qZj?UZ?s$rU=O$BiKMa2J3{5{~xm8%y zQ?l72v}{OH$_@|(%|wzdtE(*d4R{vBfUp{7j?{xFF2&sIIL+s4DLo3)DbX>=PbIW* zj;*F8z*`I#&!3pV3*)agJgl6f&r*PL(YQ-zmH$m5dt~9U!8-yFkt=?KN zB1RUC64x^!G1^A;uHeigigEK%Od;v}BxkcpPF>ep#*>?g&tS?^?wDP*i1Bg4?QNUV zdLbRiW&=!)!o|rxk)LO`nqfPtxho6=mP_D=h#upz1H(vef}BfsbCxsmJTNT_nFP8R z1J-6z%tlIobsoN5RgGbg1w5j(TlccY;trNd@a&2_ifoF{ve&M}Ab!IcNkB}FTPE9J zgZ>HstYtYYbY={D5csoQ>NshpLy_8tciK-{5hTZURfI*qBrVSgPd3nqt0fk$`zOyF zumsIZaDh-5)CAW9U|ImNz%kg&-=0=|GW&g6%m&plRiQ!zGw0;IcdgUJ{xB zTcux52^H`$u(^VTgx`1}A#98ukKYCA{h!vHk&)o%V8_Q8Ahu{%BGaMw8|%V*aDomD z22u1DAB55e1R(}AO~RfP?ZM4Rw8B9UAwFC_$+Z2M%hUT#wGS_4$-d5Sh9CdY(v^a^Q6iS0~?~ zC61@oKeyf%>!Dex3ViDOYe_QBm`-L&84iyB7NozSjfN!IVo8JeOA)X#ir`OtL<8ms zE(NnBy+xYWOLOyNBrDa=6iwjIEMZ&CKdb9-3`3HEZasQU+$Py?WWyYPjeH9nfdnIq ziV)i=0I+};iooypiK|YUT|259G?%9NvQ>GOJOnB0&<&UOtMT$GW9x%U`cJstXVff} z#q!FPIfab=gco`z9=kHMbqVX#1F2zU_YDQxd8yVcW7$FW(V1L}y$x!BWPZR`;x^&m zLdj{R>G~b2Uqce%$}7AimsaGxM}4fY7T=^_i5eR!-Yi#Jqe$o#W*VILPQ=L9N7yxp z2Es-N3q56djhw+g2QOmQFOTK6HnJD8SCS6)w&eEvuV7k(^b>ob>~i| zHF>a?4(1a2<3si4B+nGmDW-Suwy7w$BVCyMZCbpP4WE&JPWW>j1MEf^op>(S1J({y z8H}kpTG=odRZ7wdv`kqR$4@#Qe)U1XG^q?<6;yP4R)|0dGcsoX~`f z=9VmmaYg9um^6RMA)7CeLc!gjd)RU_%@>(@gWGI*E@kVzr-1hKMu$T*X<>N`1p`yz zeN*7vS$~nT>b5!wLG$O%7GoK4GLvX|2wHE2it>O0b|w^EotX^h5kJ zteRaeaAl0kRWQr86QH=WpP+i3Cgw_KgTXK_eV4(Ae)JlS27xVZbh>B3ej*3Dn$O6z}M|I|B3cRBM;IK)b=ucFhY`BF1X{h7CkGT3#nw zxwz6|R$j^9BUkmIih7WQSZnW*mx4oyjDt#L?iExYzKTtbbm8S_=J<{B{4T#f#z^xc z(>FUdOx_T3C~nG@Wj(HoNgb$Z1ywK#z!K;If|JP0Z&PLQnt&j3L_5Sf?hq$sno-*9 zVoLPOHT3FRpBn7GQ+W4mJ_vu@v+VcT!{qS93d?R(h9(@QhxUQ6WIxbqt{le|R$D`M zIM}teHOLnI`Z!rlD+65HjY<>g--XsRRAwrul8W1 zdqe|opULOy%jJ;u;?O2R>JbZv4030ZF=oJ8oB*kCRm!`IVU5Qe565hsd4Sv|OIP+87(c$=#-L@V)pzKY|LHDLG6;Ot; zMHtN^@BP|Y{8&h@raO97K`PL4*Jq?MIRNXPPd(KylnG-8L8)w7f=Y5roi=^771}*9 z`^<@lBg6Xiv@SgAp#>CBigTBfm>(amVmNGBF##jV_Jy9dro?$9gmp6i(| z#4M5~rudKoJUpSYd$m9_CpiV~4jmm~29(&80>@zVxFdmalhp(B8=MTO1YrJK#!KOV z%JBFSbZpgzCg`oep)f35aZkCEoC+dkj5ZUcEdWF{3iQ|Ei!;>Q4h@3(1*UK%NNU$_ z8^+T*H4$Nrh?v*_)+}m;RA*st*g#Yx#^J)AIl%Ds8$Fc#81eaFqzxfw;qWMB1sn*! z+@iBpQ$yV4LSIR?kPf*{ym;O)5~bjW=S2H7azT8-TsL%fb(KGBy+^Ixea;;D&EG*I zFHkvl;Y@dO*L+|G4tV>!ZO{8|4-s_EMyCd+ut;a*LH&LF3OWV}#gNO%M?i(~F{pM5 zOh~7Vz!&!I?Q-9wzS-X7s8EU>l2kwEJ{lrjplcQK3AFhBDKm}mPo4NmqP{AK#pxC5YL%QsylUx!QHZ)+b zfje?W5^1<~1Twj&1BK-o+e6p4ES+xD@I8^U3zYW(aT&CdUTHU zcN;_FjPcoED+y~~{CY8|W!09|h1JsC5s%&Er~^C!qt7z?)Pk^p*w z!WViz;0AN&#$7t!lp5JgJumo&p4BPwK>9XW{3;$Eg`-(KX|p&cp9Y@r6y>5e*)Eq+ z@Nk|>2ODODjzMS?GQv_AoEK16pnk!x%^wk5mi?_Z2-f0}%Y@nqnK6o9+3R?&|E(SZ z=ou=ldIS&5pi#FVz@(sQtPS_8xs+tEL+7GWoh}4AhdSG`US$lDL;DD?6^|hfy*h^L zYgRPaK2-FOAkP-xQ$!LVzXrTuLHf4-8efm#yazoilY5A+ zonhfa7t#DSzP!WWQbd5<)hAlmJA{!|;jwd?emWBz1O+SrF)f7^8Y9EW6^EUnYTwkVT{W|dc=7_suu9yyZ3JM< zx>e4(Op%8TGZNP!#dR29V5^n7N@%&^ZRzRpp~fET&5aGy zH27^YgT%AMKlHqjd1~&Vgm3@^$fuHXJx^`tC36NDi0obc1`s^ClcXv?vL|eFArfFa zY~^KB3Jw+mVzIqTzhgzMlx=AfWlO6=*5)G#<=lOk=90Hkt4yjNSvD76L&hO`L*$AY z<_Y=z0Iz@xMyO5CwCu|HfJxXgR2gIt;wdl{-lIgZcV)m4MC((nJFkU>KfB1VpPYr`5_c(63tffTZEs#HW{;o(g4+^L<5xl{w9WP5-Nv}c=Lh?x>4G60%* z*d-l=<|wr`-!ubmqrDWm3X}DohRVj!x(iUSQyUr&ULpw%q;w5VV&qtgTPm~zA9nu; zNmHlqx!S+0z}(D~>>Eg5=THA3SKW-g$&j zebI^qfiW^KQI8~3HC7>d-q1e z0mP>-71~9G{v`SV?|27&W#?7cnC%HAOeGw@P>mDFen&UsOyMDcAVG|fKPIH5tw!ya zX5ge_%)yio0lljLl|0pv6Wn2D(KG3(me#T@K9vaM(y$sd)R z1cfCmC~QW7+p8sW2W^PaD&O+)Gb^6K47pO=lTu8G8`zqXci{zO6$zoVkO;?)&^l*3 z>TAy)wY7|;g+wb;41U+jVz!jpQxL;NvSQ{lRG{+4Z=VYw2ud*HzOItt5lZ7(jN1S? zu)#a|k{~2^CZ_Q@q9v-mbf6p~5o{a4X}+gqW7vecQ9oS48s$OlcfBxB)3e)kxJNF_ zJ>;@xMu%$wP_b>XpE1OO1#f&vL>}VMGilAxtO&*95yjvn6xDmRD%&5Gu#|cJadKGz%Yj z=(z7`VfZ+XW>`2(RVl$#Lt@9u6p=saOO!f6{xtx4yGbyhiFl8yUUT%VU9yZvLoVH z5WrXYv(l@)4RI1|n{Jz_R%>GgqybOBgqlxwyTuRbgn)7js{&T|T|1EkEv`NZDuY*R zaq8EE#D!W)m>0q?ourJ2H{(*V1FTwia2N~wb_oF?0q z%o8=fb`o%4GFlY7$CwGbE4X||6eVBd}JO0GP)u5a*%xH%N~>fLQ}QC^)unxyNd~7 zn(FngBv`d&%wG<|7XSxEV&#Q8_7{SqkIZk$FHM;}{CjLu5&urcAaiV}QvApqn)_=!#UQC2Eel%um(P542%?mK z0S{w@&~ll=<71Y`i!dP(1GT^!UTC(cN+lxl8}PnU^FC&`Y%LG5_3Y{X2Zu+jC6vBt z!nvLv8eAstEEa!d|Mhv`4)4^!v-Pm{nP308jrd?p67J)aNI$T>HVB#0E=U3Sl#DzJ zC@Mcf+w7uN3*PBR=9sRZZDru~UiKVU(&2NQ8=oU|oBIuvI^V4mX91NaT*7TjxbQI> z_u$#lB;q6B!~wr+qaDbQ&wjR;w!pUFA)*Lk7`-Mr28(|%Ujm=ihd@o_?&<$20mG~b zJ~D_8dl`yeDPy>oR*nvhrP7GRev|N5(VZrfTp8JYB>&OV^lsQ>5H#_5E(oW_{Yb+i z4h5|I+L}Lpn-qlbC;!uzNfRL8CfU~9=OnlatPDJK5)%JY=YSk~a05Oa#pAWF{uz=m zj8_or2WOyv<%HJDgVO1Y{jZrb4#841X;vgr4b;?`0)p~`IX$WRqpAD`jx#mK)9 zy*#zk6SLFyXu+u~fue;A@{6uWYq)APrtEid|Ab`~cMX-1<;{yZ#&2st{LPBsp*wmy zh>PFY6-k{UO@wA>)FEfBuTDpW8c2BmnOXpa5kC`_sUgH7;KA>@A*Q!Jwt+Fnu2jhSznKteI{vjOc2nx&^!otm zsGDHn{E&$9?I#=T)P9eW%Up;eoyc0_SYG6>E>Qi0AxT3m?EZ5i@>gE|xg84`_)`b_ zG>o_7m~#@R`K9;x-+@BdYGou@49ov3s>=igwP$tCw(yhl&-{vwx?Xc@7kuiLs8>*@ zXd&R#13{4LYbLiWLSBK?$g&UJg}3GIziRg;YXml2dCwH~diFMBH4@*6TL%i{OU?o} zDV`a|KL9xc6xbv*zO{z3_VZ8Cbc0ixJ9`AQcYCp~$}a`7ek|w>!vKqQ3{Wv{=-;sJ z+~jpE>--BUn?2YBTFn1b58&0PJjI#`4@XV2N!TW7HtUOmG}M)12^c{Unh`d4zQp0= zzl!cvfL98~?-E2$i9Ot~0-uB;f;DoFU^1ntFi#pK@*Q^2+;%-%@H>03fZuifC@7iX z=;kkJ(W;kHf7cXh*W8g)DQr@XtY&LzdLs4X($K4NRo*2)=34yX)5Ch1XC_=7 zUsU-Z07D@`Brn@ut!42UpP&p~m;D`VC{AeZeC=S(49p`*>3b8jd%lA)ju&*FkKn3X z2sb1e|F3A*4u0vW{nnAEZ#A$Qn6|R_dxaW^4mzi4&v%Fp!QiC|kn?WG%xY{z!#-)_`rdD*wWJS}Mo5jY4WgW`Grn{@B{`gOaBAb$)fm@Ob`P7TQa zhHJ=o!wOZ%fIHsDOfUhu*gZMqw+jn_Uf{oQ<+H~ood3w|n*Pf2q0qqFHcT&*RDi8Q zg>?rzi(Gmz$W!ti$;fh}wRR&RTP4~2t-g2Z>U%#_LnzL?_B*t4DX6Y5Qp{OC>qG$w zdQS;^S@4Mxa%39`lnhBPxi4>VBdj-O5?d)qEw4o~FF-Sv_9hPw%qzSVE%GCT6!LOo zs*!+~f4~@FWS}3rXfA}J*RzcDzV;6*;Z&3DO}RK>^E>;0_LaW~zPXSkH0yj7)ryGW z`n!uYCJC`hqE&v9uP^>}F5d^MF4S~J2wG{yLrASo0^J65q;;86jEkfz~$I zL09XS=6)bEp%pb}zdjOx2F=3&iFnT%B^U*>}34D@@ zn(L*3KC^gGgz|#Fr2YWa=+3;ZFM0aXwB8MFrROd(y2%Wz0qM>W)4KiO3@3ooD{D3d zS68cy;uP&hY|y3z7IscuJe5|%WZ00S;JwDT>36JJ)K}2;^JkO^Tx~MtixKshX~DOi zk~$;ET;iJ-$IuV33;Zt}_S;{}KRE%2K9JUd|H$A!=zrm-<@WDHy1)JKljI9@1$IsSFjf zbCby1xyuEuVo&CmmaV9Rc?={&c4s}@z&LWkp{L6+b%d_uDpl!Hn@J8WcR5E5Ws9xM zH8*g8s`8Uml<_wszXzfn46?1|dgj)*rdg&iXFcZE*(DCmG>~E7b{?DOE~DAl|IW3D!J2;ga}8{5XLU;J zo!ZgvYfM#;DG4{JhEbrHSE1M&H2>uBZ+7Y z>~&Qxegvx*TmPBz%p)cFty3|u6MBhPYijY8K#MbNibI?^A2^2(To>Sl7AO{)Wh$j53PSA!Ft=4}_x_|W- zlOz?OrqP(F3vc`TP(WdZdeB~5q|57Oa3$tN3H#dXAz+_(m~r2XL&a5Sk{H573Wu6x zK`?#ibGEd< zVD{uaz|zHOL)Mp3H4Qey?Fsyrr=+ILpxO-mozY0z|3;SqH9w#>Z-#+d6ax#oN!*z8&O zcUqXnLJmn7CS*-L+p{eg&Yj|}{&baW0rDj<8L)=;THV<{pQnhosctl`PeFkxbdLT> zS8YezgO;T07+Bz}r69USjc=?Ssu;QD_vsf`SgiA&_J~Ysg5n*{o9gKq=zn7VXx=jQ z6`bWgXnkYkzm2O#tRHTrp#(Pf`9Dfr?K6{2b4GZ|usKiMX9_!aEhP13Ii>!foG^{j zPZ0DCxX1(hD)BHAyv5Q9?1R+*JTqi>%yGM${`EAyr`mv4cZfk!cACOy|L|1i|3TKe z-#rZc1Un&EWxZuh zU-eo%1E!5!u+A%{cu=?6#RSDD;RZ_k2kVXYBU9#aUoMe_a=SMq4Mz#A7o%|tiGt`$ zl0@fAjmSSinMKbf-O1>LP;(pbsSC0|pzafv!4RBcdWTZccn8Im=}A&2>y+W++~<>> zbH}kyn*9-9SHBHA1mPU5HE@AS>`>=Qq4mUnrj=iN9FM+G-#O>g*zNnle?KW*rMH8bj z#a>VprARN!BHfC;cSJ-)L_k0kR76lflp2JgWk5n<6JF_dJ{ zK8D#uSz`$W)0g)cK_z5$2Sz}mqMPWAo>PnQEb1(r9_TAPHl{*BeR$|4Wg$gVUf<`0 z=26J$ePU4_J|QYB3I|yPk;3p0(jAB;doL;7JSQ;(x(OKpP1z=lB0FD+ec0y+Vz^|) zd>1iicpN#wA*n+^F?CV_@`i@Ly~!DxAcuac!X3ub1;Pu1M1`WVA-su%>@ht|&nf0% zN)Wq+hbHjAIg`p~T2!D$`-G*#E;GG@s6C?St5(vzP)!{5dI;wc!q9XNApd(5Bx}Ov z5y&gvKoORZ92Q^$JShp~CD?`D0>=4JfzZGaIT240p|QgrAWzv&bOS<=NQuxu#jm;I zXhw}@LCz}?S`_OnHj9KMIz$K9aibEGkiY}d3~{0^dqy)D7ZLqB3<^c35#dkhyA{GI z(jUkteLw^Q)9>Y?CWl0nQR6{@Y%IYAI*9FEsl z1SddyL_`HOHQ_FB4(p%=!XH4PBq4f5X%=9ZjKGLEB_G8m@8m}i5K$QU^?gD#LfZ*v zg+v>~^(UXr2*kO<$yirG9oS`BB@IjpYXJL7Vt~rT#NcFF!0`~FBvt;vWnfPFdEk$C z*3x_k#gAVzzM+xRHh8qUaZipSZ3jGqg4|enO_X6Z(d!QiN`(i8$~aVIY4DkPpp~qw zkn8`)<@F(GO`0@q9PhQ4fpOK9fI|b(FG~n2tik+5+=;q_;!&u#YSgwc6>oQ(-_}T2 zUDOkp4BV;#;?hwBV&Dh@7~1f#+XzoJhAd*Jf?&BeB?mUNAdepQmIqi>_EljCxnCqWq^y2 z=v7382G<~)NzZ`R4U5Pp84->n z!B4^?G>0umYXB->H<)^jkNuWInr1$-kPl~tK1l#69()G9H7cS~ajm3|7`%Y)jt!tG zgmu&+dCq&16`9!kDa-9 z4`gt8hBOioaT1{%5@Zwri$I{nBsaiDB`N8FqHoD_HA7B;JTswp$wk73>C%o;=7fhH z#x#r!d(aXNr#L(!;|Y*s06O5&8;t1w-K`;-?XR(qz=IXqdyia46+%)5>7Y(YIC>Bo zeo!+iI1ySM4f%)yv=W;FUbG|rO^8h*$f?qoFTZ)1C7OA-Pdk)&7rYFir9#4!gJ=~9 zji4$a)->{0*1{#B=adD9A!SPa!?!#tUQ0GMX~V(6X-_wxwh_E(YaW*hOlmZemfqhV zP)&4#qr*eGpS-&xlpaXM0HVU2hTOw(m`r{jh#Dv+6&2M1==23lHckn8m!@9R?2>h%j-gyDTwS(?D^U3z4h={mllDZ+>+F$h*e0VL595x!=esd)J$u)zq_ zxQ7T(v95(u`|#p-dZ0o5gNZnd3KUj!P$GN|w%`fM(2r`cdxZKS)CI(l zpo!nD`9@Or0Nr;G+Wm;U#FsK15`2j2r&1#AAculu36+2PU1?o|@w1{6r+ zfd@A{KrSgK>H;;^;Ss>3s&a6K9Uc}%Daxo=#r};&P82Jk>Ipi?3dg%HkRr;&OUQ8N z+7K=RNa-h0-86Zs*|raZ2V48@Z8P8^F~!d@AiR_i$`oft-qJ*TQ7yE97)#>P z-`b;cH9VpsIt$rs{Stsgnw&Gj1G=UuUXj=g>!O1q5oO`u>TM|$h=qt(@AB!vI?$eR za3iP|i3n?`CCCKE!VjRO^ymL}KU$|7TvFGROY4a7Hn*1Ku#nrp-LPvdEWL*`;2d}a zn{^TN4UBIV+kRMP62>It!t2wK!(|DJh>VKIBqfy+eI!FQn?Azctw`OE3NTg>Dx(0e z;Z!>cF^7SIiALrD$HPOuj{J@PqbPP@))2}k647(*RD{go*WueR;gu+L3hZe}2xUUv ztpKGUuufQP0_jL9M*=S_!XPj!qmaW?>W=d3#vKTfu(Y?El*}6tiKe zyyZfZg!C_*>O_MAJd=p<*TDbZ`P1Vk5S1d&t=B{{s5gt%{ZBR*@c6^DL&EO`$;Ck0 zLZLeT*#s#)Y^{as%aXPrkSUA(catEEevb`#p{8mpKm4D?8T*lSqb{4k1_^pn!y-=qiyfknh>9xes{_G6 zN(8?8KRcEE`i?j~9&kz&EL=^jRxYW)%Vq!BGB0X4<~Tf~pX4GihJ)5nP1u295p3w~ zga2w>s4+Q7Z2;NQ2jLYCW<`^pblA<;Q}*t}Aq54FUYN2;g( z*%GH#QS+SNABG1V7GC;4njon{CosJS;YSE6mj2BIwSZVk51J|=pnz%9JHwO;yI<+n#<6ucZeCA>{(c6FNMo0x$qA zdii_HvpD@8QvzQa@0FwBExaO{_Y8abucntYvlE4qyCzfx1_dY6cW3^SAKn^Erw2)j zhJL_TdOaNkiU%)?f-a|p41d4-HH~~lgtc{17mXK-*@tHpp75`Rp-?asRU-L`0%%d~ zo(w$6=zlds?Ezeih}2f-LTybYC#@X#`#qyHa|67)C!__ag1aI0i~p-YDz0tR6!= zk+;wbtH7@Ne7cw7f3;!onghK;Y~P@6i|l_iK|MzVg1;Wry9lD+o<;NaK4=iqM0C4@ zLc{TFsZaCzySFVKN3|o+$4^pBYZ%V_ZGx> z%j7Yf&px6L?>}4<(Y-yn;cso=x9L~Wl4VR;c;o-*D!tVU)HuRlihAexfp?j}V!+Jn zRA6<4;e?`p5BCw)d{jV*#@~8-dca#258%BQ7|MAR3W-{{`^D*-w^8x-Ehijwo z8NzQUoTWhNCi~dfc z)p~o&geIny(fYtHRoYCncp<;&w=(Sv`|C5Ebwo>@Yc-;s>15bn1rAgacD0LfC&Oph z6HfNQBA0B`<}+OkTYCqrFYD3w0;Zc`eVddIx8Bd7n-MZBtFD)XmG+I05izXc!C8dW zwZ4bxWmuE5kQPz;i$*F`Bv zLyj0^#0+b3&tt-RXe?%i7}k{bM})a4W+V*jy~2lt**C;U85TSG0b!}uOYl46m4Mx+ zUrQMo!!i-a1Ju)#F>;1AqVO(ZeCV&tp*Tc6Q{{|;Vg1;5hcI{PuS{GFVOA>`CByuV z11AP5)9wf>P_d=2WK;}G>j@Bdb>;c>-;7{%ipmMIonB`CXe3&anBRvf8J2D_Y;K;R zieA2tD$e-n=zwl<8DZ9|7&XJ1D{CR_#tkg=R&zC(US%$|pyfo2i(X^NXR8^)u-qi$^_RX-nd|a3kPr^2N%|Cz=b7mFR&x041iC^1YA0THdzc_{=k;ZzlQ?! z5ay%rb%z)x5ZBY0K@8x+bTKBTZda>yZ7-;Jkx=JKV&T6Tx#_#nkI&>mmC=Z z!8Lk?udguGl|se<#M*{>*dugoVGW7=sZjjz(U0U;N&x zN|XtyBR+vRT4Cy}fJzc}2iH)}=&($@4oB8wqB`w#@oe$!a>l2gu!k;vg!N<7L$p%= zJAseKA^MD2+khoG3*FCv2=JfaIhPx=z8!?HRBzFOu;`UQSYpx363CRupURYOF)n#Q z%)(F{ExGlzM)YuLF)mrRBZM@3BcBapA+q1}L1g#6xpbRKF*_a2R9oN3tffZSJt4=E z6>nBR_b2os>)Qcb?O&(4E0#)(nl7q%bVcUQ(uguHuF+gv-%MCBpFnMBR$7@cy~r{u zz(53C!#7LSU9)^`A@}7D<1x9KMcw>9y~-L@1{J^yTR&NcVRQ?j0`@4WvaqcsI(_-K zj&NI`EgCf1K^8pugI=nke<(pp`J91>>A_;T zjyh(6nUJdVt?k&0_3%I4RM&rWLs>-FZB|-cumh|mnNS$w^Aq?Ck74VXq56g`i~PQm z>0q=B&9YRGvA&S$?Mxe^rTgnmK@;pr>E5qeVSltfwt3LqfpVFez~79TVWqS`*&L83 z>LEIc*2F!FM>H_C%y|9Je{&0XkYCx@+R5W}wA7Wph&pO9Z#=7(Dl*6gEaOC2)UTLt znW@Y)W-c?GF=6K6-|v|zxb`)^`4NB3WM<g9I@-~e^fULbf9Esv@%;?Y(bh9SJ(c+{e&}6h;M(l}yT>%N`4T<&R&#wCzA?d- z`S|~Iw5GlL3O%2|47+2l#@8?mS-pf}3I!hXkg3k$U+u~J!1u-I-_5C+ree>x^7WEXghcD%LI;-u8gW8ce8@V{y+ge*$Sz2!2YNp;a(rn8X zvrQY*;g!Mrtj} z!pACjh4GgU`1<&Ix!G-7w{-6G*)t}x1rTkbHA-(|Xz0arr%xU`a`?dRU1#oBOYo`y zd0S>w;C@dJ51-?q@#Uz{8rf46ck%eK13s=6Ykrl9rfGj`ms0WEkxP<_(Pz!N?;YZgqKK5G)I2a9#Aq5k@p zh0jtSKZuWw3`uCmCX>svwK|#6W41q65oJT-%}f5y8yElh^hin>B+$(`Wi?pv4qICa_=+P%;Zqei{w#cQf6FV4??mQ*lA zvynTXfgRA2R~yq_oz>Q^$ur)CpU9f5W~ef#A%le7k) zy+#cG!cHa@c6GKj)ilaT>#x0xp3$e%emA$W9xr5u8(zSH5|O99%ocq0`IjHC2BG^# z=zY0bs2u1Mb@5twDw6f-0HZt1WOsaNpAxoTy`YOR-Z4ZvBaU;|&;ES!XJaYN@UIq^ z5vgRbPb3hjN&HALqpdyfe61Qgf)oRS4wZVIfHD4~8`U-komPDR@uW#cVkq3j?(0{RNP{6}r0%*jAV>WbsrMqoZ$|Wyd3?rrA&;~L?6Umj%MU;NKxYW*d-$+f zzIciXnM5pBkyy};S_WuHT6!noeBkx)TQ@>`$vhrow6L4hoY=W(&ZPI>A3X#MFq}1Q zZ5v+gr&7p~^q9o!M7Z0Aj8gS5c>)I8on#jCP#^}!>lD)^_&ne^I8*d;1 zC417+I6#7Gl|n@-K9VqFm)8?z!G(P%PPqQ^%_pBs{%q2u3No*QF|s4%&Q5caPsWTH zr6q+a($Zb*Cc}u-Y|=kpiiPAQCxVCrCl8x`s;_Toq{n8M_iD(zcE%6|5vT1}eLrsG zC<98U^Ua!UqEe&Ug(GE#X`RPeM3+vS+wmd8(q=0ea+^(5pfVbsP0HQ3E}A@i*f4Dw zte~F3^8ISHQmH~JKLJ)d>+FQ}ysuBOOdampr6pJMaQZ}5? zqC}gq8}0HnD?D5HSE_j}jNt|%@moE6qP~tcO97(c%l8WVdVBkzaELX-Vu9ux9zif{ z2O6X)G&I`jBxS=-pBu5Y(0w&yJjOCw+|@1Y5sJwxBRQjIm_oX*TyQrKzouwr3|5i> zx8*;K(_(7~bY^wb;>pRFK{GDde!A5qm^9w%ntE34+gCjSyK9&EI;NYo#5Cn3He zj23IdS-z@WyS0n7j*~LFp9e~aG~iP;(?>~!jP_W(vA`d^c97<+i@zF9X|%^WCkUF< z&06*SCn;Ib{T}iF28WMN}8|v|pIw#{!@3)ZyKYu?SlT8?-ANS?A)YsS5)GEoM z0fs&Eo(j0Wa&|AH|LJW)WUXRy5cj!89{xIOlAeZQ)rGpc+Uly(22x@KZ)E8+5z$gD zVPTCM={f_FFUhHHAx+~DH>@Jf8y9>rTnK8ypth{EI6tSKtQRtDL%Uk|t|jXf z413fuR5lPsch;l4icWGD-Ap6_Kh5|^kCJ_TEUoGl6l0EB^f~5uv`+`drFMYp_h%W_ z4Wp+QkX~6$IzN&#`n$=K-{yZdjKxxc(Bwi+Nnzg0X9eVy9zx}hPWB)XCjEt(9F9e! zW^}iwlp^?8DQ67+AhjD7eLY%Bi={@0zdE>}C^!2>aye284Eu{KsOHxiYHi2f8+N`+ zJI)7XbicosTgoHHK>DS4&~C}p_jO*ATHPqj&&f=GSWo=h7>0{HLjRE;KA12oP&Pox zMh2yqH1|#ujD2NPm1!Nd9bx&nN+IYzxozfQHE8{;LYoJ4wzM-65eX zOuibUr^jL#BjZDN3vs8!d;MfiJEAw-s&p9K>`6Qc!E^pSwy;7e`vFu}N!*&Br;Il= zpj0DHB!KG4gLsMbJ5Zs}mI*?Dl&qndACXrnCCfl_k|de_`s0VjhLmRH>4!zx8BZU^ zONYMgKp>k9qLU!HB_(*ivu?bs93pE$bdaQO`D4Z>BaAgfXCIZk%uG*u03zIoo_BK_ zZnq8&kwfoh2ItmD$a)a@lV=vI=X^eTn1<+FQdxe^^Cyp96Ya*B_>(cFxw0WTeKP{{ z>ZIfkP#q^}*6S90Ic|hzOlKcg7UgB7C5u&Xj9F9qaIav*0J;w~^S9vgs|KZF4yXc1 zip>U-Z^n&Z)Pth7%<HPq4zFD}7(|iF$-x zJQ2y#hOT_?_#j5AnkQoPR{#Q+4HD6RaIc?;IO3T5)?a5%R8gY!PXyw=zFv`tNT-Ss zWmz>~^S)|c5A@eb8PXV`GREK}X})%xyJgv|Q5ur3;_4LQ!GVE(1@RkVbbf{plC@TC ztI_1$jP}ADBAJQq4J#)vuO8uSUN%FYl8w;6l&6$RC6XZ-Dbj-tfp|>8k;6h~C`9Bz zHMYjk|1$2kg2)ns4mz7I`%Vdqre&Kppj63qvF%|6qobu{bdI19`{xe^Ut1^v3?qC1 zgFB=(_VPZ5^~*k_L?ga`P)`)pAyAVBWMehJ)%isZ<%yX?*JSV8e=95VDo zrL6#Te?rRWzn@Dwmodf$EXiwTJPl3L}!@r_llaZnj^_Ks0P(Od(Mz<@$kkeKh8=mii8d`PirUCckL6($pbwp6v!SaX>$E^;urrJ zuMd||r%2;UE*>PExhXM$hddoWmQp&SpiG%UIy4{>@KxmE5Hn^m0*E}9c{5BF&-rfR zFl}I@8t3&J)GQTb#D|{R?fr`c?((p?iKRp$?(Y$_pzeG35Hot%9;D7HFIunLuyxz! zl}lzR!Tuh8Yc1BP2ZD~zPGbwjU_tm{Pe<#m z8{jL$J)f9Oq-B{;?p!;y&*w`D3=bc6HKR}5E9AGud)z=C4JNnBRX!{2A3mOLqopkW`=F*CgQ@3 z)CaeNPaoY0luXQwaCutM$M0yWttfbgw2H6I-?>zFVmhpxE*rt#NJN^&}@{h ze@aD9M>B$}ytM3IB0oF2ni;+zkC5hPPm>dFU%z9{dDd*D@99ScNu!}{x z=Wu@3-I%z$ccLS1Tn)TxJxqu=UuSuEd|^|as#>q6w!W!_KZp=%RA2d>la3pg&Yv@9 z!EamLFF$R;)7KW2Bt}H4WA&pWZ(a|&dVVR3<}Sv3bt2|TO>=!+ePdHg2d}$#P^MHP z)K|;N=)uO9@!_F2qhg|OM}^-z^##l7Tx>DP%G! z{*w#{+iUVt;=-;4hu%a9M^xmkuo;zO-weNXEArOO(CarZn~$NXm{0V6JrNRL+0)yKWEE$v6g6iQ5|S|RE0Zm+K> z%zXNY?w|#U!A+F%M@F7A`^c?toTpNf2`bvUqoJZGJMD48o#@C2+Ns+y zp?j9Sr$*yeM&D?*^`4VAU$n_oA6IWZD-Wy*JVTz!%Mbjr#bz84FC7Ed6=W!nrf1d@=chQHEO8Oew=?sdb4C z3=Do{A0&qAL{r-l2Dmh{|hO2f{bM&}w91i`j zg;T|u=<4ifXS2h~(qfzWw(V9s?44ZQxNjTOaXxT$w#V0&R#rP~?QCtVwr}0EVeQ&= zn=EXd)oz5tfJ-CiQ#7)*clF+P_{8aR=g*xzd-~MzBM0_+yV;trU$xrQ($S5JcFmkG zT%8=<_ME&NawGJ5$hE6i0xw^>c;Vc+v!_p=Jbu*Q$8pQ*Ri-;!xo&NoHjc5ItCQRQ z3pXMoZ-w6sQ{R|KNrJClxg2om;`y^@PMz#W8So^W3>7Brz%Bo-&>! zsPBK45Pvr=?#`Xq*qGb5QGOClIiQ5{`qj%9E(M-+Sh2>2%kARyaMZ5)9$r3IQl33| z{79Wh9;uVQOni{|-;0Zhx_SM|#mhlQw*9f$*}WU& z<6Yf+d`=|gK2J-1`s7JU%9E6&&02#@~*Jj7`ia?m%ERZm6Ro zJL6ee@`F1O*8&29PFno24f4>->E(Rn;<@W+MomdUe%{OM?96A+is@cuMN@KskB!;- zwTd-*>rA(E4&TZLY&KfbQI?yHKrH4);KjhpoIf|Yf=3_cBUj(uffdbF6{RJ`g#|CO zE1|ztHR0aoYu9evvTeKE;$uq-Dqx!(Pb0=BDq#&W(<%3EUA=he%AVEhoVb0Qe$M-@ zyY@x2b~e`6R#%q4DyZxuMErEG**ep$VvA28r`9`c?d`0$ZFRj~2NpdwMK9AHLT4^iU{S;mIqNoVlUXp93X92>;9z5C@96C6VsBx4 z9u<3v&a%9WN72_VUI;v~X|)4)fHTN>&t>nC$NfEB{Lc2)hFa`HQ9k3YH?y)-S`bTx z6=SWonryuTd>p{XjqA>_u?qxXH&9!U`8YP@;`vL*H?MZ&4syht2`+n&J(dlKgx&nk z)@BT*>ClF))^tT$SgNel*76<1W|FO)gM*VR7Nhe5*R68N>quKn`~@tY^+2&2ArrT}Rc9ZNKom^Zw z?!eBye7reUhZ+g#dX@P&=GwV47mk{)a}m2qIPbgooQhYmTMtj;h0b%I{$LOnPPMz~#yNNU8 zCUN=P{YxqJ-T^gf@Yv$y;^bgwYrA8I^>)+sRtN7Cc1Yl_vyN<0I~su_2lzfX z`gp5+M!8ztRFHvJ&l4jrpE`NYXXQ4ogd^olayb>kBT4|F5~M}RD+eo%D|pgwZdgBz2+tGf~ z_wvb|kkiMGA2(m)B6X8Fuk{K{hD55+SNQXVHjWx`$B!J}yT*(w zaMWs*60m2Dqm#GCPA+D_VWR`8ZskomX_Jw&-Zln@j^2bF_!MyX&SBmzDvvG>}IC*tMlv^^8+HS6WGiyj{C99KLsaEJ6d&QzL= zUNC#sFI#P0e0QPgYu2y;!?*6n`xN4CUOcqd-+R?|u9Bm4)IJ{DL1>h!{+JB;yX*mh zx0fsWt!~WDd$iXDoH_JA7gwM#jx*&ZpDvs|dzFo&=WY#S%pRV#i{rXDGKBpp$M@~^ zw_M|@bW^!%al)PfcvnMDk4doGwVMu-yY(KroKtYu-N{YK(V}b--a5{dntU>U=1&$5 zJ9p8}LNZ-lU7VdPE!s#Oe5(U{_Ia+hQo5@gbq?KaQcGoO`B)X{{`F9=cWgM0(2e`H4OtFc<+&P<_cKXupsa;1=Zq}Qt zNL^IO>HWL*xU95Qan;V+esQG=v1(|Hg0ypXYUbY6zLJP@vmZLzNdJ%7pvlMc=5BNL z@b+}uVQHsX*>)RG6WPNX7Y}2iHkhGfYDev}N&KM!^`JJ&DWYxFKE~c&9@a->L@ms9 z-r}luQE(VnDec>U$w%|%TRD5USe?mtwQ;6O(sFA(DG3WavB!7Mjx{dum0Y!4BC-cn z{bT#Yq}S8c+Y961I$3(8!*-Xk-POhGA?*%M zbQQTc*;#MjvgOzBzMbY?3Rur$-n?nk=Sxi{PhS{-V-WeRK=yi^tQ|D$P7zU5&}od2 zv)bOxZL+Id{HvZW0iV~_PtwdeZf+bGM?0(STTC}hn=*IdwAp(auz5&Wmlxyn^E8FY zXLEnF0~jXqPi*KCC`j;T4bLrh{p3;b`NO+*d9AhNa)&wlJ*nzOQ9yf(gk0XHb{$Pw zZrieP!?LfZ%{N)J@CTDqJRvb`-8+3D{`&FP7#fLfnRv3Ujo(j-w%Wl-wzk;tisXb` zI=08pZxbf)L#HFp8@f8dvXw}@tX;5Pz|w5P+SRkZnY~bLqO)lJ_e-z#3W@Id?-$RS z=GTUGXg86Q(4yn6w<0e6HFue zxMA(e->3X{o&pT#{&z+6kceojT|Zy*1kkG8goygiPC2=_)xma$^^T1vaaL9Exr4j* z+O2VRo9K8WzrCZawYiQ@UYfy!z?0o-x^Cs4i@%<>Kn8BJr^YyHS5)-XOv%b2BWP&tu`|{sx9;lE^aGBtl*T5H%vhDWvu=3k&gd`<207}Yz zwXNGk&V!PU*5;x98 zKCuaV<~9Vc?9)>gsnOGgQ*Hr3clh9T6;D7PA6;uZO!GYf?LZ^crfhQYx;ovJA81ptV5tu`CH<_+1YH& zAmtI)&L7#od;K=<1h0&$j+Vyys!D~*catUJt0>Ox5yr1|)E#Ao*QrYUrj(WT@2_io(EHTHf{O<7e}DU{xu)E0(dwPN`%i{^n9 zowT{wF3O7gk@A|A2^7%5;7n1gKu*qVcX3qP8=F2P4be9Pj{EP^@XD;=wKW4QQ7C;j ztE~*TZ(hH0`7ev#@S2^6F}|3w5Mx}h5cPO+2ZK}jtz8OocDt*S+R=E^1JZaWJn+=P z{co7Hw=~t&V2oyT`pwp_!Wb969^((!!E0b0Y@^nqX?AKPJsb>9=d}ry)lvQQ`Nw`I<+0 zF}G8wQXjU4|L5dr_Keisjl6pHsQ(6Y?gaN|wcP;ko9d~YpB};$!ZtjqY*8CrTeT1w@d&HrmcQ7)RVn9Yz90R9_f?g;*uA`gU zb(o`7B`HgY4!Lk*?;30FMCZg>A>xRRrhanQ%+bloe#f>=YyMceY&Nur%tU+P^aUr- z8TP~9AH(vvPTy!th3H+Ih-7YahDNfp z+OlEg^5u)Zp0Pk~qBUy}*Dg#mQjr<3@PR&#kyzHD{Quw?vhb7!!K& zjMqwgw_y%9YJ|N#-CdnMq|wGn?P};`vu)GbKbHUc-S_iUP#^Pt*qDOct$y>S>5EK$ z_~|CC4sbL$`?OoEBsX@rBlsL5SVdC%4ZW&Q^BO_@uj=40t$j-P~Lq ztj#yB`t8r@7%Ek}KLrosXh2od)g?0)nV2k^H+4GzaAWx{+nXHuA(7q%`?#(e&A;5qM_pji{7MNv%B>cF*0-vH*xEm|i}!brTm+g?nzhl%_;r_L8hT z;K6V({Ee$t{5fUn^#5+p!8BTY@#D<-i)1FBE?O{k4ZKWYrVuiD#~KwuJ3X9Tgrtgg zGVu6%3oiF#j>DrCq)No%K?!Mabcd7W?rLwfb=`_J^Cm2ck_!pjan>Rj+eNc}^hTMF zN=_uZo#60$c-WjG^5W-sELZj;qURF33D+A2M&bHe(ty;9iABs`q zMCdG9`0a}O!1mtD-r))N%hSUmg^2Pp5@W6hxvg?>b0bbV2P=ds1R}CAa5Zdw;l_Dz z9IaOW?16x{;fng^UrvP4oJGH`KHEeTM;v{;)m|ew&Yh$+|JlRn(7Gb;ShSeJ8$J=pnB-$8Y?Btu%<^w^XLAy(aXX4QKp@zugcrlCV(ib^V04| z-8jA45?&2Q+digArh>1kB4p$hC(6geb>l8 z9AIxBj~zv%uPpazeB@1^6;6P-;8EA~AfKTgLn<77cJK1_;#%48Nba%AyH=P(EdOFP zXri-l&f;IKcd32YUON%B67OLShn1xDRaVN~i0c*`s1N9>$H{Jk(+}sLj6Lg2neBAl zZ~}XPj-Gd0u^lojf8(C&Eu3SrWDDX5wGZQ~@)_>yX_Z5UYKmSwj*B|I+DgS$*|Kjm zVVC;YG6!$U$IW4F0+HT2c-nErHp+)_(>TsUCI<88nEbTC%iGJ_Tjn#&{)m$Bs`8&b ziizT`c2T*hoY+349a1tj$li}~akbc3KnAbvKkB&B%oTwU%Z>AwOFv@ayg4R|H+p(` zdVv)}NVU)Kowg-J(pdg7_5PjUjpkexN5#>yi)}_hn@T;Nbhx|udU?3HI+|^%BBG!@ zhd682+qt=^IBdj4n(#wrV!U9^yoEn)hPw#g(@Wt!+-Ju%#8`DDnJMvicdvF-x+$I5 zdn$0KkXk(nPczxlgZ9$NZUf?~{_DO6e9TsE0cfW|AvHV|CLQh!k)EG3O9w*kA7tx zNSz^f22CdLv;%KvM_bF)rU(~{PwzeIZ@+G(sg)y87zY$|+fSQ6Z|)rR?8)<&!?$vD zapk@)MMU3sT14Wcyyohn7b%H1%xG+?a9d(~v$-EK2|xiG=gMpxD04e&i}foa0jxYY zdHnnd5A#(k)^4`gVbel(d^cmp^ck}jE;qHX+F=LgfRJdRquO)0HQt*!fP7SL`s0UQ zrY>?fxyyRj+!iI$cQVP~pc)>tJy_e@SXr1Z+lBm7+k-0sA=fV+bhF&N!L*rJem!H3 z$*-#@-ezfI@8pbdO~c&7bH}b8B57}`D#(1261d5h3&FNqbE=M~#)L@3y#s{An>o0^ zPuc+_=}*(!$oq8V+>N*$cQ@wdl?z?O&E$_&Yd3B*HQTn`+Lq#HuHa0k+{V3~$UB>A zN^;Uu?%A4CfMt!{-KKsOfS|#?F6?ZI*<|a4m}!SKI{mxtLlj5J+KZnh-M;cbpFZ7f>LhiOI#1%{Hc2tXgMC6C_}(?O z(jY-Lz?U|!bc|?#N*pf}w%5U>^I5)r{RY#`TLF99*xEZdIjddAfUkvTD^UuX>MM(~ z)6*|+wgny}u^)Y?suc-KWDo`IFdeB|wm8_U?bP-L4))vDo9~G(5dn1gV)q{yJ!SZY zBkig47XNOd;59W=y~=%_5o2WqU`^sS+V*OFha3!PZ6fxKmN~4qRXY%;nG~RMb+9no z>bU28ctUdOQ|C3CH=AjA0!@UV(c#-}4ipo4M^k-uNnU2gBUcN6YeTMI+23sxNWoGl zXm12KD?G8z!pWI3)I4B!HwUY&rYPNAxj}6{dE0h8e?X;n_COY$own{s0gQ^OimK9r ztQTp!wmG{EaR!|~NU0Y{26}1HWdi~yRq~Ea_8N8`SVV^2o;2`uu(h_>uHH6jyM?9I z4h=&`C(Dh8Xfm&{z7G5V7Vo!kauag~ohG=Y)d`0Bdb;@?Z4LF9N#5mc+nn7g2nj6e z8z46BZjdk=YfB4D3#1%uY|ue_%Z<({3ar-Jx|+(8f}G6fhb^23I0KI3cV^V_1_5{S zI#4}|Fo;y0vb1#d^il0Hg8lFTCPS-|BAiI~%#iRMvLUAec`J`92asKND5kvug*r4!{JE zvDv<5)5i7dH}BYeBfn2gMhvu6lvPxeBTJh1GXIXJV-H8j;&mBj@`C8eb$0P^$m3la}GcX5QA@ebUmqOul16TN){ zgJOwPPVwU?6~8Jec~x9gkYDuTswc;d(h`@E_D7!_2zn(C@6N?#QhtBROnb&)<8 zB&bDd1Gg$FE-oo8NV$HPI#sS6oOX_(v)#@!cTzKpoBI%hPE?|6AVAKis-mp4w5+To z_etcr1G{~8a$MUut(-4h9GrJwzLS)eT~f#E8tU%hnZ*ugzsT!5ZUZ(33q+mYkrfBf9# zpx}^e*RBR!Ja_Ww{$0REsjA>;TE0(tq9y)xadOn83XsC1f2o~WF0N_~aEO-3kB(

%Zdr#o#nYLr1SI#y88rZ>1)uN^`P5|MeZ^vH-lN zA%FWlHdsu;CP=z@a|AOQTOmhd`{V@l_3J8ux=Yrr6dHAR2?PkC1o*G3MNlgsT^|Z~ z?I^P-Ey_jWD<`k8tfqz6-Sf6hz2FmmXG=W_8w&A(T%(vC8ML_Adylg#+Pa}tD5pk& zF|Vzmwyvq8tA7w8sw5+k=uV zv!}aF&>_(03%Z3}!hV^$gBYm$tCJ&Rvs*>N4gmlRzK*cJe^9D!!Zt%ec63xmD;AA_ zFVNu$Aw9|(qCZd+6Pd#kb#-+Kx^TH`2-03bbjA4*cglpqEz<5dfa%qKv1h&oXmz z)p-6hYSKFiL{FDQ`Z4=X4vEGet3 z!V)j77RU#%?>!;5QPeLO5U}`?exk49=clG+qpdQZDNy8(fC54L>W0?#_NJOTzI+hx zZhaVC-!mW>1O=-1bVbF_GSOa@PYM);s-lrt%H>tH4XqtrJ)*9bCLvHL?V+TYM$w=^ zOi6J1pR6|fWpPQd8n;jtvY{)~C8|98IMhWS73Ae+XJ=(+=hGq8H8i#H1U;HE4TY$guNWd)gAeYui-i(Q z1y1h#Ufot)QD0j{wRT}q5o$}*pXU@-)zmgL6c^RhfWEbpFYFr_(&$7#DtwudmQ~&X@luizO$GJ!ji^cy2zv*_AXh216kYWq z^q?&wQzQ{c1Pl&^86|C~50#}a)1Q}hDI{cgQ(*&0J1HsjIMNS#3KZn`)brI6 zqE!}NE|Lml^jV6@2x&u0PgiGqb3vJC8H+D*1FHfzp8bp#y!r9VN)d zYN=E1^5xwMKC4SLgyZ4>6T!~jmNXR&qYyhcb9$raw!+EFY-ZPO;bIW*miGi`E zC=V`OkFcq@4_x>Wc_M{CiRr^>H%3EU0Bq$jSB+);Qu4lXpqtO*^92$(714hF`*wM9 zeJ(yKtimh4hEYbytl-+RVso`s_#97ov7rr9jDJAYlaVhz?4TI;&8N zYpfdV?}dVbDgrYEd(pm1e{$fxeeNE&O6v#lfDl>$xe;`>x7Fnc(68+14rRCMb-&n> zZX`6d)ry{K5f1xQ2)nxZe6>J}GDC?Do~ZU4pYpQwztcn+62Hv!9(gl?tuSJzvm6zYC1)z_Jcq*)MhuL zGwFBvsxB2|9V`aA;LB($rL8T10<>gJjeI#)G3rIZW5|E(0dLPIjlD`da#3d|g=cF^ zvc>2{>#a&vkDAYjB*aj~$24QeUG)Hpv=nvKd@O{&Scv_{9PshXYVKD^dK#;%kOQc# zsmiQDIja2rQ=wV_7C`C@26##}hB{b}l5BQeF;Cs45HOH0bYc)3y!{H=2KfzqNli71 z=Bg?SGf|t%E{bkbcdH@xQev!b7b>tM21L!pQ0aItd#Ab^SWmR?fdA+NJCB!^wBr$q zN*hsfS5cadjaKZg$P%b?%?QSdn+BvqsQ2WxRA!~*wgd6QQqhq2`D-}^bz+JP)wLDy z*2>DVb5Q-QqfC6-BYKZnIgUS5Bh8E^}AB9AO=0f zbs#M*OzXxe5(TlHU0rMeAL2SjQQz4s>ghshSaD8zTEJ#o-#7s%f71UPsb~gv4Ml5fH?I{XVDgQUcP!^nuGzaa9$#0kN=lz& zQnboq+PhhNsg#Tw$gQfYt15Y!_VCWF>&G@Y?mi#~gIzvXYXCp8)#4%iE6PNMNX4gv z(H9lfVoFN0i@>EhvO&la06!hY%c;WNoPy_%??qg@;_XvvY+0+eLdiuotfAEA%FJ%eXTer zT^Zx)yLXR|PtqWPoTDJqKv_|R2UA|0Edh(Z=;9s?ixCws5R2qxJiZeabne(T3tzE6 z%P$1_Ce2gn&)(-%gaiSfL4}iny0)^Rx}u^i6UiyDq`7$@$C>W}&H~skW-BA{#Z&TC#gtJs6pkj3|9xSdgEYaxXmS z?9ttu>?r-72GG~--VgeH{+$|nJX8Iq%I5m&>Z)9Nf5rXhJ@mxYktG?Zt9p?f7Z!Nx zu&=58ZaRni_q8FBQ@%^?Pxdpw`(&@5LUR=gj%sW2D82GQ1}ax6{fpwF!t5va!mpe; z?DvL#FJ_S4yhqc4L*1GV^r8dJRqajKfR!)$ivg>L4xl`{wB%Jz>ivkIb4T~S9)NEy z=#`iK6#gt9nk?fp10Zjyfp%-GFMLh@{IB_|d|6&zmj5gfX_Dgy&20SW{9l8Ls@lCv z1#vjgp`oYq*II{!Q*&bxrI*KJ{-_9ysLrddssiwO=SIM(6PoA8-tS$C2Uvbe<;S|v zfUL~x>2GO5+|<@o+zaxdxZKy|tkwc`ol!+zdIHi%XKlB5@0UQO_?)RmDn?xV;88gc zJ(gO9R1DT1&RjN7HMYUwo^x66B2R7;KOFKz8;Z>}y(zaMes%8~WXdk!f4 zwRY`^>4vK6KjrCr7aJ^~$mvrMH)3OlpsS${i>WQDUdZB$>5{H&6`-iQEGOko=#>C7 zYd@vG)*hdrIw2hR5T674y^j~dAtEreVDbOhyAHr8s;zy~Lkol^pn)ZH1+u9SQIHUN z4?&tymSh8g6ii_OA6*QhfS_~`5EP8PAVTOwibPNl5Ftn}0YdL&_y6w9&hF0a%SCov~AlsB-l3OE|O1c=-~P4FB^NZb7zQJqnrYwfE~wkSzqxyME!=zRh2)Tr{;F&je z%54C@G45-i)c?}u`*)$JoxTX6U%dK{k`jucd!~xOd+DP)S5F_>wf^II3%QYxeYO{iET|L8o5w9I%-)Y~pWlP+5uVpSU;p^Z zBdA6Ir%U|!>{%aOFqPiCaQ-Tkx`&T$okWV7XVL1vj8`dXLCtss(PS#UTXL8lFAjx$ zdx?>&fNB{Nv!~7b)dY9PePp;p)q8Xa`h(}TwO5Rnjp+Yls%6l0vimpA?>Y*#>*%Uo zC6_Nh};XYQc~H$LB2T7s1VcrW|t3i1!{-@I~c8~l*o z2UZnax$+PR?~J~6Z*sXQ<8mgw{T;@RIvzdtEXDMhJb(Z4Y$+5!a`mpM>`g3t4{lvO zzke(AKJP;xZ@gIYsMzBQ;?6(zjZJ|{o>`e@13(qd0&!Hg~n5{6zoYRp8uR^pcT9n|)q^r6?| zN9V4iLq*@5dVCcc@>SR^}W<16zt8UA|yM#~yC}sRSxA?HDxot7mTCymImM@dN8Ofs&d(KJrCg z0XzWI`G8TFK6_*G{3-AXDlZAKpgx=-T%_T>a(u>(+1Hv3vjTf1WsX{v!M% z*RJ2Zaq2V_UC+{eyYIu+gQ^4j?CP(7zR>@NZ+qf<>tP^qksPK$I(BJ{(0<= z{kwiXa`85F${K}vYu5pO$F9BmnF>ywh3R_s&{^1HUJri#?aIB&)Xcwq+Z1~D!0y9E z$6?N&I&e%D=oX~Gxr2w#Uc1e1QYlmV@XmGU@kbBtH!|*<-wyr` zKgpj5_8z`=+vHVz`1FWjOt)4i0`DXDA z06e;G3M#!_QhfRP9r!pN-Mx7k8>;A5qryEqx9=z{x@m+*$$0hj`O7zouLBkLOOR`S zA5I6Px}7_H{OG}7upfHs_T2|h-zdESb?)kgi`R-vAOkPMC4g-&moJ?|I@0mu=Zo(= zD#1xvC6}&JuiC{M@Gf~lz+SmhjD_;zl?VIij`em4*rD85kaeTfzvgMhhl>Eij~bF|>N_}zI|1|#{$FCI8>ya;E5lU? z_c+`c)Kb65I0opGzUC*fYFt8)!dUD>lK_h`0#87j?evq_%}M-m3SK$(%}f$lMLUDRouwts*wxRAnH`0@j!LP-uHNT2dA6=jw3j(zYs~HG1+M2jx%7nBo0V zMnCi}bpi)4Pttx-w=lgfk2~xMe-%+DJ!6mmse-3y4HTY*s)pKWZ>yr;w3qa%0{Z?m z>Y=9&(QE2#rtW686*@B8TB|YT^gegWUj?+loiA91X|DqARYMEbPas;Po>vi0}_hMqe}OUg54 z^i;#DsJ*;*ticc){3kZadgtdE`o^9lI2o)Yf0`jS`~m^Z7v?2jCYMbl8C(7O8t}kv zdSx&Iz_Tbn`M&w;KFS_Qeup?O%!i#r;n*kXZ}$5?tpso9%3o+Z2#O9I;KdAx{Z2~o znmG)Qz48pt!&~O9*QLZKJk~I6A$HJ{61)coz_+nicws)y_{8_?#3vYYl8+PG=p{Qp z*xeZ3*MLWGvNQ@|78T|jl4Ap}5ud==WP<_wk>Lr?Uufvd%$iRToxtD{g5%-~^YGwp zf|Jfl@(uUN38n(u-|XbzrPZj|b`;zcnes^yojUF=SN=~bA^Gf#(7xmB3TA#vi5EpF z&SS7pB{x;~vDZE}ywpsqmI=FIF1TR%ONwZ{53tA5i%uXrJ2-8Nn-mN2+sZs$HcMU zV(+r_5nD{lW9eZkOvi38mv{>VLnqjnj+;1CuPFEdzIp_f;EYL(54(c{4b$>VaM&QO z?t&_l4SC`Odr3g5gaj8`5%QS$7n)2(`BdnfLACeHV&@XR<2CRl`8cxWG2~8}a6?99jAL-;%fuVQsO zfiDE174T&2X?%ZRDjQ7b@t3Cjg?$4l6|y9QDe%lQ1Yfrnz`Q7&7JkcG0425rFqBZu zFgSI4+I{QgHFHPJcjYh9Ub2CaSCrB%o#0LSf3}pa5C$RZ2zX9#NeXc?i!GUY1TMU8 zTk?Q-_FaewlFdVRiD$T>5VnsM4u_@$C+G1f9_Lo}H5l`$&?eK^X+B51k|BLT0GRVr zjO?b!r;>(|Y9Q0ckhxH6=mN=#8i+qCgXpvtGcqVS7Dt5fD`gKdeldo)93cxcw&X(2FaC@SkMXXaudKltGtxTU$Hu<>HvRv zIMbF*n>dUO+Mb!BZOU;%EA5qCiFYA{r&*fQXV_6X`sNXi1Dog&E%U@`kAlS*v)gwe z)WNH^3o?{R${4ZGOddmovy8zAK)i;4u?eWC!_nbb17ay(fqwc@(PX6~4!PKrnvYm6 zcS+};>bl@fR)J(W0w)wv{U{G_oo1f|YqIJrjynpDW!kvGYAfN_(9UH}S1~gvT}SL& z=X&$Nk3^p#Q87fI1Tmk=tD2@TP(nM z#1cB9rX2O#;M7%wj?5R-B4dmB--IzEde=5$^xt`Hi4L*dqXV;kvyBUJp$0ZeWC<~F zF(GS2h-cA@M1$;OL0lw=PJ-FXf7cQTdW=XAEO`SH2%_Fs`eO|NSv$+&mka-J*W4`p zcV62DdL+U;9Oi9)QO|W=P|JE`=%;GT-L@bywa`6h*hr<14 z{V1FRl17?12PE}@@z{Xp*0O}#5cLPIz@F^akK?3f+?MZJj1mYAQW(Hrbk z;T(qy+Au+!4-aFah(rnJ$zzlS%&A{claj}KQLqJN#Twc zFQ74UTghpT7Z^Z9ssJ^4{hb0-HHQCgW4Oqqe*R7js2rejz~4!Ke}CI52mI|EU@THU ze!C~2YZ~L|o>-zIDI|$xkYOZ_=t&x`M&nxs$sy?^ zsfi|p)}aa2v~F$wPy565L0OxO(H7pu1_1H&t!>(si3=VpoheqlRJ&BH z_(Sc7V#O=8E5wRdYFCOCf2{pjta!C{wOH||+E2xbcW8Hr6`#?b5i35YJttOtL3=^0 zxI|kbR(wZ$SFHH4)+ko&qxBIfHhGvlnBoXNvDGov5i71`dYUPY#(~zl~Uu^O= zc{9b)yr;=Z!qN%9*mTasPMVe)KI=S)W&LAnJO&rpzXlcBY3`(wv%Xi7wr(y@+9q>qUCRC z-x4jKrkx>LK1=()Sh=Z^iIv--0+IHS){JL932RqrSF!a7%0JP5B3iyiyGFD;PrF^T zyg++awEVpGylDAF?N!n8Yua049qL7E_&az>A3ErbNv zFezChQ*~pyrDSDu>ZjS70XyL-zSbMB85i-6P`A56 zy{AS@AE@Bjgfb~lH@2$S=u1f3oa~JFEErsjzQueKD9$nZSLAL(={4VOo16_h zl#f&Bc`|ojl)alEcb6)b(lt{umcC21Pno+=LS^nk7nQjSZBphgG*g+oSWTtx(sf+= zE?v&0@6uIW`Yv7E&37$y9|peQrjvfR@JKBeo`w42Y`s*carRlN=-^pa+%RH>Ve?pB zwytevrfv-Dy%?#>%+j;htgYNRJxMiIluq?^I zQh53!4IM56?WpAlH(>e56pYx6P$4p{V{ReSGH=X`4kg4`OBrZKV~%zM7MiE>X%3a6 z5#E?ZsRUZ48*RHoCD4D|Xjzs{9B@Wxlshd;(HKi13`hYQ%;DnaP<$rE0< zhCc;-SPCD?u(_p29Iu2+iY=y52b>nJ;bXzRSy~Ijry`sduHkc`-D`fLfZaFe98jShD7lEKeK5IA!E?CSWM5#Q&4Jwati&!Jv zB3AU!)oKUbjzGSFpkIZcDZ zo%D>!YZ?wG9PT94ZBesb?!0^CCXfLxw=P9;&P{u$b2MjJp}4$;%Ea4~giF zQS!WRhPCvE6B$t&*;$YVljZgnfWwaz!YLk<>bEnDC{$Ux2%naR&Kd!DPR?QXvt3V`NRc40h71_$>$JPAo=X!3M5|!x&p~(40}jsDF9oEtU(|| zK4&-uEzsklMQJ?R4H}PDO5@RP(Rj35G#;&##-j!Hll>e>Fb7b~chR~6sgTCera~GA zq(T}8q#HC2X!mIxh!%5npqQ`V@@Ih4!@+zak{rMaQ3*&ngg7#K0nT62_`RlrTuzt+ zobN8M2bUmNKq?gHfW&`WOWT!31vb7*pvtF6DY?_J%1tkw8yT5S!T${eFA-Lhjw>?V za-eV{D&!XBg*wKJg>prfJ2dYQHDd6B1rOvTDhz~yQ9hkH5C&n2g+Z8m!XV7ODG5_7 z48jx(10Y(dFaW5+l@D-Amp%%raP6a@d|_ZUo1BTAP|T4jO*}x%v#|YG2&>Y zh;)x}A{{c0oFXp_tn&NrNDN}y95E2nxLuHlPPi2RSSL+(&LlZO4qix(;_*RHx*Oyu zj1XE;YVDaEISNCCuEV=Uj>4d!wRvu3qkkD@5^-e%b&eDlIdY70D9h!cm69VS+%0kh zyp&+JPP#og3&~MDXoeWL6gdJL?0=>vmd%8fipK{+r2_<#m2!=Q^vcvH>625^^+|Mh zwSWwG`=PmQxh`x|2v@f$UXZ;6-n%+Z1@XR<|h# zC=Cmh_?8BBn*y`dfG?Q&MkFVh#a;92HU$VY-nI@-zmU=`gl<4Sv?FZuqXMqM3e*Z0 zf#qm~H)fFl4qR(|#l*$7`Ie@OzLRd|sY%i0Xrd)k25o^Y7KuPx68AyE z-6InilJAgW52SkzNca4YirtTjy^lb#BU4f$;s;1Ri`ZK%(vW=qa0Qaj9Iim}Il~Gm zXDM)bq;`%+=fDM2F79}Qi$^h)yXQP~&v$6&+7iQwjKyu|+Hw+JfK+kUme8{$5QGk# zL+U;S#_qAG30&F%{mZBcqPraUj%X{!orC84FRaka^5Jm4WYr9Z&;l9gYU8pyBDv8^ z<4qt(U2dH(OkD=&OH`M^`C`>&a9Nc@V&Vi6K-`-sbS4UVCYy;V^d*YJT9g@Xl@PiR zod%P|p}N~ZgSq6dkxpY)p0~_IATp7HSdsJX$#RoSd$J^8C03C@3XmhqM2>)^#I`ef zySV36=r|R}o>V%xtT?j{M&SOWM-a3SM3h`>S9S&@BoW8?>UIO6SHZ?Q6P+oi7)**p z1YUpF=2V5;9A`7uWF-3nQ%vGRRp@|Gg zg(fl}`C`y&8#(SRe+hC0k}m@7A;Hv)8Y{92p~rmIa0*(W$*KDdAa@2K7|S`^H} zs_K3N2i&3VH!vRu#VIZjZE{TS$an=fe@(L|RXQV5p#^{|q;x>?O@8}^C3pmo_>Uf0 zcJ{jjs!*WQRuxKg3aU_~Q&73-rE?=A(&BY+UV9I zY8~oSN@?nTgAnJ1fnAKyB~ay4q*xfB!+c?2wVRxYfq?nA?Ft$&IGerQ~&-e{2%Wa@qck+Tdz>28ptFh*#VM^;8b)IiE#hQ_6M+*x=&qg&f&tU3n)3pDSR z;-c<1V3H%ONViU!{hTw>k@d=Bsut0!tZi(qk6ztGI^_&Je{uX~q6I_uO;t zdFK>6=M?+qfMSK73P37!Q~*+;p8}A4BDZS8oHUY%!2yy_;Z{gFJ(>$z0-R6d&VdW4 zT-+@O2Z&-SSF`bbyg?=A_KyzTLs@eFI@U1wL)4Vtq5uR@0Dl|VVZ-r*o5Qp={ z4^6lVEs%jOgYy~KWpKV6bs3y5OkD=&OH`M^`C`>&aK2b|4qPBs)ogrQH!UB9+_EU8 zqzk=jd}z)j5=mE=WjM2%D*`6ZX)ldC(BJTaI$Pz6)m=FbZ4(vSJ@CfR$33njNoZ$Fres8OjR060%lZLh`r{0(y4vcmqM)3gW zuYY`Zr3AQ8#*2sHFeW!-yqXixIna0f(NKlg%6-g2_B$I2_B$Q1n*4TnG&TG z#mm79NnSiiimtgq@@jUxZP>-0{6#cz%hIi8$E(@#t!*7t;BvPV7hxRFHFEs_cp5(= zBJH!|1*xCzX2*xB+3}ErYIeMu9iNe;*EBYow4Ro?9Ej`{P_yIzTeIVBZ7YF{qyd&E znI7-3X})qUZ4-+2o3EbpfgQQqg|EBhL(_iKAF13M`2=|$v}n)y4hQ?TIR#V{SYU#= z3eC40?4d2=7H^zy#My((cb#v?xeDzTwFs;^SKF4d<+#Zf8MnZcQ<5o9YZs}RvqscZ zd8bb0gY!wD+X9e$g16VsC441-pDM+a|+ zOc=%inX9?-YOXxb=8hDE+WEp90+W-OHv0@YDvw0krLFtN3d`vX^e?mWi$e2_eOICR zL3%4R!vSipyfoSc($rPV3EaRggY)I8%ivNZCpYZ^xvC^r-ho^d9!tR=mIc@@Rwq1; z!g)A%&?xk?*|$o2ETysw-E8*IjLZ-jt5eFl2%JFYaK1s=^XuhiMWCy=&>~+|aRHF8 zski_rM+ufODoUG|fEKWmlDv7_nr+gHxs|1bAX`KN8&X-(PN7l?SPq@sx+W!DpJeL1 zLzFqiT~ecVj>ROQ`KrB((h$w{u1CVlT?}*R=&bQC`e8R~&DI)>k zd;{GcT!KFV$=76Dfdnvmq@FR)tU)qT9e9%TP;yf%0xr;9)GT_N1yhI{MOpNYq=A}7 z@4PfXYPeEq08oVr9^jN}cobBjibp~D!rp3vITNp-@KUCX9K4X`#RGFdh#MgbKr3AV z-8;q#4ZF1hs(JK|-||ICLn+MzREp+hmN3r6L|c|3c^Pma#f!)2FeY~>UQMKTUdjX0 zN~JtNl}dSlDiulqRZ8&ym7;h#DQzKnz)O+59K4X`6(!O;(rnaBdU?Y|L>srvtC~sg zdM3RidK5L~Iy|4%t?*3G9R#?+=WgjP!WbXFbz9ttkKK_4 zFGtNd%gK>MXTa?Og&4G?K(|gBgI3W)q$s?UXqJO#Y1aoseiL=W~OcobJb_0E;CEdUJqhQ zI;SV;N5cXUI}}#>{g0eSnEn+8xCJVpxNi$i1fKWR>Vu#QhV7yu60}s4=c(#ok1~oj zDJQ#{JfE#&2;LrToPr@rX#(5LRcOAB;3_m+q(JA)Ox#ysB z&p)TwJ*W7T3*gw1Vk;371EfMv1t1kVDgenRbbA{>y0?5Hw?fLP(VXdohWS+P9JqkY z#T|3-fbf!CS)#Q250N=XjFJYV(Dbyf2Cc<$Wd?DyEIG=-E2ImV> zm%;hc)MaqKNOc*UFIQa#=gU>+zy)$uO`aEc*7#WDmJunHUFcY|hZgs32~VeR9!{3s zXm_O=RFmg9B|P`T-~RX#+dItAzJF7`YsvM3027d3g_2DL)mhzA&HnzC~DEufW31N97g^$dD8 z3Ts2NmQ_Ygo;Sbx#dhg+FE|GsNa^-5#o;-$3CRw}or3LS0Ok9Y?NtI72L=wy0uF}H?@W;pXDxxH~_(WgYA`Pw-j+EL5=HNZ7kDgB)B$2!>Y_9Ty? zcQj_%d^iU)C0MRqLzu%99r<|{EchcBoYogC@55>7Ti@+G3ZQY{V1r*l^z`LfUzNIr#IA>}k_P7}BD%{d1ypmK5F z9GoCB9#VNKSJUU!^m$%7h@#*aBU}596v89DP7je1)e{@EfHXm_=a~NjR0y zo#z%Gk&!y1pNoJAv<-e|Wtx-K%H`nrI*Rk{@ii3Z;rRNA^Kh~xU?oRC>-NI$$WW7_;QA$q{i$NTS)>t!y}Tw?o6|@ zCaZ|xY9SqZ6j+_&z)rG^4X}V^l;p|VkbsDjNIhfTDU%fm;0jGvK=Mi5YQ=Huq=d-| zNIspr0?8L|9-vYLFDIidRtVtv8lRQo<=}-fUQvd;1GPpyU0!)Y zvYH_8`swlx$Wa)xv&thYqrm$wXMPvrZJ2ubjIE%U`qw zunrb&H9uaMYR4%XjFu%jR|5M@fN*QBia0Ref^!kr9WoJEaW1wjWx_c_+@XBEP`qV} z&LS}U#C?12xb_r#_S|#qx#!nY?AB9!@C8t;(8mEtg)R<2^7+Hw2#|2e0Fuufu0Zl7 zs1?#`c1c@ZXqe9%&VdW4T->1t*NI{WwwhP3=GCit^`HUSq(lemk(yVp=GC)`3Fl}M z`sf@eGgdJE>f|&Se`ykcsd@F-JD}#(OL~MA<<(nB)-AnV&BtdC;a2nUg%-9=6vQSs zog+JB#q&)7fy}eo*W$p=$XUsq0J757QOkTYz{PI6VsM-ON z@Bg!>1u5}|+;oNU4>YPY075~P%4>k~jUSiB%9r(4>&2NE2<y;hQ?(wY9q z=zFx&QWP%(E+lyIuph?c2EnU&{Cq~G(;+3}foP=!4^X894^X894^X894^SzBcS^Mb*t8KEWwPo$Io^5Yi)3!yStr_8>x7jplN)Mv9t6JLT61{DjHpynln_iTK zO^~~*=Iw*uE&23n-ahjdv$mO;x-kr!^cktk%+j;h?7=ae)06b0vG|EPq9qMt&KRbD znPtu9lt;meEAG~U1A*t_<{M*}Lr&_8CROt#Hy@U>#+Yu2Li2TTKD48j`7+-%SSf9s zF+CmlIMuv;VOD|Tc@`}2u1%J}VsjDL9Ws%$+88=QslXE65J2(;DSvk83`s-sg{Ui# zeBN*ck}p85kj^OVcK$o(zy(w;?!SYlL@|}CY5Pzz#FP)%`#hvtr4b`K9ITg-*q;Xt z!14}PE3};I!dZ91b0VzJ&b7@aaaW=FWG;ZV%6}V`%i3>AkDVD`VhWoTT2lTy1R`CzW8ncSD^(m&}DGjAcaG+y)DCfXp3s{o zz^IjnMC=2hGfy1W(jSg_glBO$4JOO&YQn#o@NY4N1^z+yO$zetXQgy;U`gg<0A&?^ zHQ!&&_t$0XSnn(In@jMu@u7&MTdDc}ytn;0VOp!{{%X2E$6GQ+Ikp(^6+x?oOQGZ; z`C5oQB(oG?8bp>6_1J#f#NcSRa#5p|CV@pe45Lc8a*zhE(0v3*zKv~9HPUVJEgn}O z71Fqx?r#pha|R2hU5@EFH;FL1V*}1t9_{ClN*o4UL<>Oce0PC8xCHS4lJ6>T1yU)k z15PQiQ&5G}PC*rtI|Y@SUOG22GM$3+T}k#>76BJ{OOY8b=GjBBT-O{@o|^72aU>Z? zR4JvY$M)Ogqd8EQfM&(Q0HDgJNU<6NluW17m}lRd=QlG2002NgkmF;BS&GV&~wU3dvX?%qj=B^ z=Wa=nBdh%~nu;alEUZ*KJ`f7OEH4GdhRmd*drZw}N3b!$#(x7D8=I0fGF3OGTS`_o zHgHf}T6QXEIZvpigh^82J;PMSD`A50yb?x;^GYJ^YL2oiX+cYvA%t{INzcj{k<&+? z&FdidwoFU+Xd69rY0Q!LqzB2sD-iTeY|@5$Wc10_WoFY8@lo6(qkVdk`FmHrex&(p zCtdo`l=PwIt6rJq!MvxrRiRefs zNs{OosY_mILYk81^#(9QjC7RZ~+Fq|w&(s#`|uq4m`IXv=8JX)9^ zv~9KRwC%MWwVkzz+9}$p+Fb2S?PBc`?NaTB+7;TB+K;uXwV!HtXwPWRX)kC?w0E?3 zwU4xqwWV64$;0GhDq|{d3NY0&J#DIEdeMX(30B;YR~nN+Cha$E2c>+Z3NoL>XVVc<`vAGg zBpa1mlEiFgn_^D{Zxla|%vg}YfneZOF=Px_>2Ph>Pnw2Q8c{$a|41764~k$`nD)sY zldA7COs~&&U7lu=GzhO$q9JjlBZ&bEbkOUvb29Z=j9~7Nk)DlA%@F#xPs&(5j4o)@ zAsuu%qhm5slQhY?)GR%F-8oyAnv%$sw9U!R=%&{tQMsF)nS*DzE2@%*bjrv~8H+k~ zseKZ4si>9~zO2v8PQj&3QGBK@aRjXcw_|i!`c%AAr_ZpI7q-7~&dMpg<7s|o3ootZL1pFJ!yBWLI^ z+Z%nc4JVVfE?U?#IXMeU88ftQDMQT&WXFx=I5AUC8_;E9QRZ%%G1m@V(vQy0(WTnm zYMY9IrR%cwc6WNFCNXo)A-e-b0vgET3VLP&@t7L!x{pDZHH^E6PszqWhH{taLAss+ z?~sw1W(5IJL4!z1v~V0=~%6afauOjB_=>1|U}hNjc5(EHu6%;)Ha z;t@?q7u`r*x*j{JI2@X(n%--lPG6eRPnVg}ZdeZ2qWQ8LX1HBO4qKs3Sx4PS3TiIt zlQV=q*fx!MlFEGk4VHkR6jD{qe5+qdQij0{fzFysduEOtrc1Xg?vew{CxaIlx`a|1 z-)=zPk+B(u^tMUEagP}?`h((b`sD1ml%d12`FCh>+Yu?6W(;Ss4_Gd{q{M>%=zw}; z#ANDqBRDK{NJ&j?myw#0$uK{dL9a`rZ?FpKlae+vRo_dO0?c6d9`{82n33RJaIP*j z2NDC@g~7*khPWS#!iu^wMgX-Om;wt-b>r!rHL z7zT(<8JfZ@2WTZWMVI(8rKq=1s^f04-p*9W&Rl5SYvw1y-_MI76FLvBs{V46C6B^nRx?BZukf z%3vl`%XLz}jLalvorYfp`WAbG3P((Tw)F}!KTDsOlbtfk{0Kur12fX~n(!z}n3fvR ztrWVjkJTp$8iRO83(5LSeR`sv#;QY@#xXRyxD3)Xhkc8xLYs#(&em@FY|uVM1$ z5cDsmyJITGWWCEma*kt&pY)*+*%%yuMledw9x<~gMGvGRohxd(#Agh}Y7POwa&$~i zrY=i26r!I)r`Zt2f{BMH5NnufLef)Gag_sgK&JLg3b= z5WVDK0ZZ(#j3nB5uG#j~-lbx|b%u(EG6HoXP4AQ{8KWPYf>Bb@+Y1s88o?lo=;tOl zyhV%V(NSS7qnSHOt|D4AZy6O47OJrVyI4f~VgYgCf*S+<%L*KeEy^u@bh>+Hra%~& z6;Oz4;ILNph5 zj1YyG=uX!c)Jds{wq)rS$3x9*tWrEgVR?4AI(5wI`wy5piw+f=kq8YqJ-g?S;n0d% z1C1*KyJka3vW1;elCU~4B9$@V=;T|LW@|CR{r!ePBgvx6k;Rnit{XX$710z-{ac!#7EaFjz}9L*sGtaSved8LUobfhC_;^hXgmPi9T#@H9q zz~M}{S?SaR798wni$8!a3T&BW9bptDTHYsTq&^d-Y05~}vTq*Q5(HsWYO!>&f-`r9 zh&*jB6F!Sxq(XIIRFUSeU;1Y0`=mij>YbATdNZ%a))G)J=lZp^;(CtMr^jaGKzC%| zD0OL`0Vdj|VsRDTz$;HfC;+P~SOIEq0KyyAH>g_LgkTkGlUD6go2Z%vaH35pXCiHq z&$ucC<0SdG;qEvwo&WJRVSI?Rsi`e7PG+LT#)((3isKd&ZC>as^9iN&Ki(#EQjs=Y zpU-HiaXxQ9PH>n=n@^Tk5Y-ZC)Aez>!k>8Qz<<0=WT=QW`eczyGjl~o`h*)57e!CF zQE^#B-(daZWG-UGe*=0Yq|uXI(Zt2k6GrdfA&(GG7n{>3E099}4v7>dA(5WwQVR21 z482cw{SK3mNKba85)w(W(SL{L873i-BpantgRT%l4bv6%2uV<4bLu+FxT33sNl2t8 zDh9*;4v7>dE|H{JMv9PJGAG0(l2&Rx)q=u=YIC@_fYIVWPSG`43xnRS4sm(Gm@i_s z6hm}k1nr7`NbOWHwdsj+QMd%_K2d@W7iZlktE+`eu9PMp#gR^f=a`;|J@N(tl$6m2r85D#bts0bMn_{&_>N!`~Q}+rsk#nkL9KP z&n29}#>0QADloZE^nzY@)29!m8E#BA0;`B{37U>H37b%*K#Q<6!q+F5csBH8`j-*t zNb87*3X6o1;7(FvTtI(w~%`mB&=G+xC*}R;hH!w>alQPMruvqf! zn0;_G;Sc%g$dgU77|?Xh}Ju4a6K}>Iv^o9gcn_NwH(T>4(h9t2RP7I;lu$0s!Z0tzXXJx@|WwK3a z5i|kRL)UJbey|Co%vKsK%QTym+F;81Ad>Sb(j7Rlm>!CD2lb!hca7jLb#+zO6V50VmAuW{18Syu$Q>%7l-{YDct5bD#DnAUJD#Ud!5s{ z%B6`A!wikqMzERFB17e;C)@F;?9iAlb2BZ2YHR8aFbz%Swxs=AcP^Q8TIsRHj8FmYsQAoDXH5)RBXeL3 z#VK}=VAq_bQx;q`i)@r~I^igzH*(~otlqcA^ zv9uSVjcN`bvu$I2hUu{Di!pMtxK)Z-1Xz)25kj0*!)_d7w^31T1%nqPD04h%-3|bD z<_c|gM$+Y#OHps1HbkF9w+?mFkAgE8^hP%dr0OYYV^1P&oa>1k!m+C*t8;q0I4*mW zS!i73>3(rNM`n*n)b(eVAhE^9mZ*i_fe)^R0dChocRrc7Lb=ipn?Bg=ol;l>-KNKG zzH+gG?%0Y48o*>SQ|9m&!lKOHTI+5CR*3{4m1!bj0zFB>(FP+BBv3;HbpNttOO(3F zirZv`1x5`KP{C>ziJW#s#nuz{BT=EPh6vOU0R)qIE4kHhghpUfrfyyTFW$QT|13n% z(xR=vU4TPNIGtF=AEHJG{#l2Ys1XA8lp3pn1}#aA5U3FXnZr^3{Rf!*QzHa63xvx7 z0vlL2;sZ9dJn8U&*>?YTga>%N{^vypq+Ot#2S~#EY2)ML4vBz&Mi{J+^?0k%0bXE7 z7FTL?z&6aqIq>D81IQzPLcxJhZ8%~mEkl`OKqT11$~|^G@t+9}gtdrh9?>GA1zyHr z4(otDEztpl16qV?TDH`*z<&e<+=&aAgZaX+fCWnyH$5jZ!g-#0yRd+>fP%1qJs1-f z2#=2b--`@zDE}J+12)ch7Xtz|kS+!S1d!&#)12|&+d#VJ_y^#>(czEU*x-pS)#ktu zUfMnrkit?x|Ne9Grm0_AJ@->R_ftLhQ$6>SNx5RulmF*@tpAJWehOA3%MLT%s>I(+ z2BT3uj?)sB{_oyQhPnF3M~aauVcjKZb?;(mJi2sr94BcR)46+x?pY%UA>|1%nednX z3nL!HllbyJWqDWpdycLGNF@?T0!USSD&td~)Zl%dF<(8!+^vfHPXVF|d79K>AS(g3 zJoBN@d|2+P7O6v?A=U6y0NSd8=O|P)v{(z}wMl)_5TAPHPkmh1Md?%c)WqM~fTo`y z@+@AD@htAqwrilCn)p=2Cjg(CsI5F|uY_ybzbbep2(WeWd6op@(~vYF%}_%KuAe2X zNi04wq%&zx+A^=)XhmMa_im&ePPp%g@=l}!N@DQ4GwDtGke5k+5>E!;_W+!N-xnnv zNf-QdC%s5NT)jdD;&(5+f20>aFXIXNd|!OxnNJ_m6VJE9r#)T_(iJUrV`}XOxCAnU z4913A9sVXFqb3o5_4p*=qr-bR=v5+l4d40$rZ+y_n09-kC$wjMn05xBCfYw*V?TUo zA9{jXJkfp}1Jx6~?1}dK;HiO3ivv;8A2la3?dZ^x!OT@(=G&`Ge-dyn0W}Wj5Yqi09(aqn`MoqoOlM zKlB^@P)v7WMnzkC8GU;dy`Xd<{3P0y2%liDlkgmUmQolkq146xO=4(_-lz032)%m+ zt5A_IagXAl7jwS{ z?$I$&dg+N;UPVg@c&abTXkC=*;{lU^r**hX`;x%Sa4aNA2Ye_j9cz1V3gv=me4a;7 zC?4o2C?!)`p;CjLdrH%+G@*T=TtNAZQW%vvEQPXs@G{_O&6J*58l%*r!%R@#rlX+r zP5FHQYNspLc&lKg3g*zjM? z1tliW!o1|)%~zLAB-u#3`x*dJWGyooQITg+e)1_^*?ki+oOYt57|48Re(pZn%P+YH zNF%X@r{CF<|IYIB7=zI=hJR;Y@0vXF7uur&Q(-|aiyYe$Qu2U7m~EM7cwXTnLFozN z6CP`rwlENVFS%l=@(}S1UYK8Ex&Dp#1cPq!i|$y8I7%u(4SfxG__58cM<$=bd_!_< z;5FhC7@KS`1afq68w9t|(AS2(e2OT+1s^dZ?}Ev@Fb|*{d7UzOmgE~a!a8Boh}3tM zgoD<#oRGfx3=y8R6ne!HlK%({Wv0g>QetAt9-=>&h*y=+-a#xE^X^GNjT zJdQ zv18rRyk>+XGJ`q86#I5w{`0<#^OhTl$12<6?C*E{UijHO6#vQ;lftv?^VvWCd|=mC z!*Szh=7x8mVOoC4McgbQzAZ;>I$W^nYa{U-^%d?O!BU!R$YZ1=?)FanqVV@$7vb(k zN(DTLiQC;56&^UT2{n7J?SR`q+e%H${EJI>9w_>HJRz&Tr!!x`(f>_SDTch*p*xAm zUAH`ekb>nbVR+;jju5}zAAGjDuyE60Bk}7VPrCn{$lf%WJc?pViLarAS=-N%GOs|>KxiGk$b;zavRQhC(ujYY=~pE!K%=Xmns@UODXPd)^%UZqTSlayce+pk5Z5B$Du z_VV$gW^;2#XXgefH-7exV?S@(_1n1(b1?+ANA%WpQZ{I5!REEw3ilN(s>t0T`Q}Ml zy5X}`^QP7>HA8p=E<6XIOSpW*6dfZTv4wX`zOh)crsWq=3SmXfQQ~2sszvNW;>)aA z`Qhx1KL{#;@QY>joWrPqf|)O&=K(?DSEq?zzKPYC9`hbM4T0y4HPApQ)LhYNf)&>C z{j$lt^8Ly5`ZPIfUinyYg`Sn1#6$+OT|7;w#64vhi&@ID#K}HlOOR)XM}UwDfgukg z@v6`$Mo54VPad@zHLdbgNSn9>+~kR1a97!|xP%_jJyMeU4aQwtX?%=S)P%I^+AAS* zLPkQyq_ke~%mbWoK0^XEO=DsbMvWddcFO3C${wDGBsrF1{ zoNjQMF{{k*v{708qFZcS7S=W%Xxg+@)38puj2@kO zM7M4g8PzH(s#Dk2QPI(OwvbV>Aa5we8p$)&y!~7C>eMDlH#n|MkB(7MZQ8W&+PY2G zj;-6YqL1%l=uKmQ;#sZiQ|;pi^~)UIuTz_jt->PPw2$l6sZ-ZBQDKc5@SgN}rfJ8x z{=@qZ*7fS&J|;S*b;r24u04RPsF2#V@#Ha5)ia=Wcx?RO5hJs5@EWsWgLWU)Si!Hf>r(hBc|* z>?PE3mXxXZ!iZ^88xp7{4@kL6HS0ER`au!Ka0MfIOv==Vo0vPnFx;1v7&)m2BJwF)rM$VKnAh}4$-@%{4@yW* z>eZ%wr#4YhG3}#6nuK?LB{7k*!c|hy!^eY=r(T{qWo+uJ2@v6TSq(TA!ivRf=lADM zdOaf}B>@E4THB^;Op~TD(M_AS=s9?JLI=9SUm+%s@)di%Ic4LBoYP%<-5ANT)C0%VwNF{F%zvsulIc9jm5dCX? zyLThx422BO82k3@1v64R#r0^@DZYPv8*OB#u04~{_xOYkbULn)Ku_;lDY@fPUmcb{ zY(Ss5-n}Vk4FhTPN@~{F+&Lelb!y)xrcL|q9ee0rPft%YCU_4{=-!fPwCwYfC%-;; zs3AKkVW6?U*MQ1&okgn++Q%iPWQ>3N{fQlW^@{D2Jbd)j3E87wPftu7+&i9P?K&y% z|Jw9PBNG2L8E+d(99;UEZxdo(iUHreXKcIPi7A;=X3b7ZOdFd!b^6rtqehK+eRy*J z?!9{h{syU1B|Z0FL&waSHYOV{h)x-*AN*Rn_K{`9u4*99C&jmK-M&v^#^gDRX6NS4 zm_8%dIMsi`>lpmtc-sG)q-MQ0-po#!x$K>(Z%%!4{Fv9fG_3Sow_&sNoq}MlS`4Bp z2GU_n%7Csfy%d*{Gv&R-^QX<3JKLCBX7;S{uVT^d;Sjx33)(CiYnNbNu6Hj|Jt@{Ztmz2 zgSvDb{QB7Umabkgcfs7;S<`cKXU&?Bf!^FDRT{oIE%V)N-{X)ljrCOcAJIs zb4O4AY3u zc>09g+^M;_lPAxZj(RYzz^rLwX6)Vg?U!GF`RVG<3x4~}P^}Un=S+=QQ;pVRY`iB@@Tw z&YC?L)u4ulqZssfPqdO)UrY~GFZN}^wxie7zZ{wr<(7ZR@t5cTKHapp$STDF<{d&C)o!|4$8^e0E zYSn$j)Sf2 zL*lsimn~Z|J9o|!bhMQCJonD5>AQCt3##ubDA>FGg-QWs{ZVJx3gwb^?Oyv9?Wu|Q zjvW5;sqA{btoG+;AXS0SM)gaBtJZz*?4L8U6T7yE?veWT;*VD?S-xs9>NP^5ro1=p zi{0CI6cqflYxmw)D+H8#RMx-3nBBWS8TTfOQ6KLOr$#rjR$8rL{YH)IJr1t&?E14m zy^;EIoA4K3dEE0=w=icYtY_%wZI_UxYvjN6|o*tK`pd;aChm&N!i_?Mrud)J5K z-dkj@)+gUuZCUiSQKKe}>I1jN;L2T!F06Vzv0ICX&S~!~Uh#HjMkZ5nfPVIjuXk

=Bj4j;tVeW$YQ$*@5hbe2)q;Z3K^@4*@ap0s&MQ@H65F62| z9|XzR_8sGc>IcEZpFVHi?#-JvZ`r!F;HM$p6)Kc3>+c^BFmnHIAHTh9?t~fUiaoj* zdOc&sLv>7AJydF{U!`8%kliI4M(VmmJp1C{$#dUs-(ygaKPv7!d+t{|^Nky8Y~EI| zGQiv4&)3h}J0SkRfiGq*|6sz5d9-4W*uXo?>dTNIXL%aqYrXU8m;3 zA-xPU7wP)N(XIxJpFeMF{*OPd->|WupgZyK^z!lb@@=;Dzz=giTrhFQ{8ZtR?gPZu zuUoIQeszk0`oT>$URgV&Q?q&vUP^gu-srBKf+_})sF@2^ZU15I59@x|Sg^w1hy}i) zmuI>8ziiH3uw>HA`9opI+N|*)tIBoj(s^o7t$whkcAelMmrsrE)23-%ZNG8v&wjZR z9l37q!td9A`>pXi&us;9rKHrOLbHv#cdh+s(u}!j&Fj-u8>0;jHfn0dFAJ+vht^X6 z*{#K^Ug;iHuR*8G8H+~71^EUAPF%cn(>KPiYkj%4;LAz~(|SOA@$jf^*!IhjAD5)n zZ&25)Iy@E9DCF&#8#HS8`uY7M;@dQ-_q;xL{?w!(pCIkb57%rc{lY76 zL%~Se9SqRZtI6!cr%%1ptV(%rvo6r2&$!*kj{mhMJg9bX{l<;zhwVE%?dA4i^}+^D znm2D~P=%nrbC-SnOXy6b+=XA#{H;0y#G~QTxkEcP)$s8Fn&EeJ-xlXyl92qz7^}e&~MJZa~I;P;Kl>1x`1lO{jg;1w(aWeR(>lD>n_55JRo}D|- z?0YV-Qb0iUTD8ZY{pQuaG2zj#y|risSY*+f&p-Zf$)XQFEcnPDqxbdm_3`rb0uJam zU;lEIY7vXO4q~Dt*fap3Eq6T-J@Ll2Ftq1??=3Ayhh00Z{^*OaW`Q@0%maj}% zxH70((6Udz{AlsQ`Lk9POag9w{QP`p&XjR_l%NEW5;GMjJWMI_W z&yV)k*Y5$U^Tm=@VtUT%IE2ZQ92e4Y*`8l^{J7^m7+Ph@mML3nYth*F&aJ{b=gj#i zs9eyepMAb`!Q9zze_PPShzij`-$$quG~nxN^n(|R^#VR(6o_}1&z`z;>#l-zKj&2h z9s8Fl7w}2Z+womnY1@sQwHyTc+2@}vp8vtj+#d>F^zttC@$&U6Q^x3D&d(Qgg^v39 z(jJ<QCwrAh|_22$_VB5BW7GB=Io@IRfM($nQ zuV;r=trMp%3aS+J-Pd`G=gxj-+Lldqi3bSB=tF!<{YaToUt<|BUoToE9kbP=ib^vM z{PD-8uYdV{|IuGxBE-wn&&NA;@A84&Thwpdd)!=5<@euwzGVIfGp2KuvJB+sUj{Se zTc(V^wO*KER+NrBaNzL9Z}uKKQe6C6m2$qGzGXZ|99$jOx@n!J{l~tK&VK*xm&+E- zn>~Zp3(4qJ3MMKAIhy>uF-u%ud3C1m+kYVctDlb?ExtZ1q)DUT;Gi1Qi@)#QHYB`B z{Pe{jqVK=`dijzC@6Xz}z42q>?SZ)lUwZfe37{h{NMNBO7zjw)x9_L#zS(u;&l}eU zG}mgIhc<1t^5NPZG40wt*LU_xRQm1r->q7Of>xsG{PQ^N!zGu_M&)4rfed6Y^7n+5Jg@;8%6g+sdPy2y=2aK7w8g+j0!@9gx zAALCgn}URgBoJsUUk=s!`C`HF@Tq7&_zDJ+zH`&YkMsAOKXbbv!WeFftPs)q`0Y3P zb{yP)$e8(SQ0JO;>%Uy{$;u_47mRsGS66Q+nC1OIpB`T2o@Vq`^ORd>e#Dl|KYo&b z@Z#nBYa($zYGin1kE>U*`s-hd>pN`f0*K|6Kjwe)S>Ec8@(LDtJ%C{k6%*a`_AFDa zX@^&tZt~pP0S1z}fB(9#@=sm7eg9t(5yr@X@W>S7@2LZGh7C@e_`w`hxgOa>Z`fAw+G7IM144#GF8}?+{&!#vaXx-vC8%Y~ z7D;>WTze%HG#VKd`QnkspBaW364R#7UG@EipunJ-)7Nd@3rlG8rY!}_e26EUME>>0 zZ{79NyvZ}W-nFGEkR0ciE?Z6kmWGMi$`*o3J^cNJ#=$j#&M6-mrNXCK+=R`rI>BVR|>#K0EZUKem1~F+(?a>g*+Jem;MtIH)>m9`VBbt?2RP z`*-i$z5ifEi>S!ZI;A9_^5TMTTUBb-dB~_K?~G|3@W@(sz|)O!6d~n}u#jhKKV9xI zsamdn?6K>A?fzu!@FA%aX0QDE`1$iEgUSZ28vRzCtuh2U^WA4J{x8XH%8P64|%puWz2k8;#IwO!N~)=H@=rP zY}Cw2OTIc>bo}>SO#NEltTo$r-oAPJ#?6w;cOPtu3JVXZPe_A`#8bDW;PZZU8@CM+SA<4{8=I1MV(-4pkl@j4$&4VlX2at-|{J##Z|7yXcx97b#ecXFX#!g-R{SQBF4+;-T zh|z%TbsuamD!zU7%Efah|2TEMWJ*X_{c4(K&o!#|Y|}=q-#c`qVB?1qQeNv9->d6a zKQ#x6Dpm?^77|t(UYDWK23QtIwJ#3rU7NRR_Sn~_&zU@Jes-tinR8aJ--#wBjO|5; zE^YKD2aB#I_VmiVKYhA<+1zQPCcg9bl=mkF)Jj>re$&_6gPI4;ocXU> zwK7u%ee>1vqFYxlo;!W~@Gr-%-&oc>xK^b~6$78DUF)eDPgSqeaoiXCFBKP-77#6( z@UL0-*{01xXdosmq*>Ft6-eVXKkr<%c;TFBlP1oYIsV=G&k>UL#UICt_G1_`=T1w@ znmQ?Y$Ex*zoxD|i{>+I#4(vR9^ZJj^KNV29dex_DRj*Q|YUL^w%2o_+r5lxFcw-EF zT}?bH)~MI8@pDa^HEq`HIZcK3Yk%6deD2)$awm>|cj4r>=k%J=zTfn`J=5184$=nA zp7!pd)r)3M+P-|@t`q03T{?T>&%?j$`0e_&UwT!kS-pCVO63Ee*3{9|sp4C{>Qgmp zRx*-+npNOFDp$Tz)gVp1MopU=n+84CZ1T>6b&KDhJ^ihTk9EU0OXf(Cz)&Q%{<#So{3u*Peg+`KOFmZ+d3aYp*@K zidz24Yp*=}8cFMHe(m+Q-+g!MI|oYIuPGzKLi{{j+yW(jz7auQe}8B9SLR8HE2&ea zZ<$)Uc#2P(eN6qm;aI#Jql^z+?`&(RyLPGSMqkn4Cs(a_=JnTJfCjI@@!`7VFK&MM z<&CReeD}|>{+P7YP=iM#u{zEc4){+^RL%Y>y(L+6{!u~0~7t%J6f9RE}g&9)7z2y?aObx`usD`nyxZ>{4tZq zs5Q^O@$OqD%h#@ZYwMeT(!Q(P`ttwz_s&kYpFb1iFLZMe1jc#$h6nHb%cfVizVIba ztVj$Ko4#ZE>ed}rdq2iz^Hft}Q+aA#_l?os&eo>-s|5vx)$KRO3Yo7z_0)4~j8@}Q zTFPMUlNxxtt#7`q-TLakf;(^D9<@<5n3 zWmZ(x(9+RTdp^CqzOJggh)(-!MrLvCK!4BRNZ-)RXjl7<;hP;*&0RMJ`n#_8x7Jl`rhIKWh4&sqquk#y4Kru=`^~*Huj| zRR!7ShhGr)Q*{ zOO>ad&q@t&^$YX=@By`Y*}9FJHc|#}e0{+5Thmuxdg;q=-}@Lxc13MH4VPR$eCdtn z|Ib@;q3GhZn)0%%HDy(!Z2!qI+K`}pI_F{*3nWu zFg7;SaCLgTvj)*p`Nh-b#bd8+#6tcd zaGzQE-e(praYb)Z@`mpE#J?|4fBn;`D0yyPq54K&@5I=|_|>Z;qg~~BB{dbrSz$q- zH8fllpQt#Wec{U0qO|Cr!@RUO`cFe^WzaV}Dm&<+Y3X>E|+Xa#aa2iOESRaz$oAi9(dF^nc?K zmXXPJhY*@tRWdp_&@tH2B>ne1wRPRswgLYaBZ-ce%Tsdl(-g|{C0Fuuvr^*4QPHsp z@}vZL+W89wDwQ%j8?V4`e+ApZ;M&mCn)Vxm{lg=py@NLtpDt4GJ@KW>*OdK7ANW7#9;6;O=bCwEvM+Tw2rAP+FR! zIuSpCIY<#?fP(v}$!rTSG(XmD~?L&TdzTQnW~|6E>oN;LEj?Teaf4(ds}(bVTxLpbKIVFmrk?g5n;Mz~k>g`GdV0skR7ZFE$7Y4tnQ5rUHssgu zr0`@n$|2vu+ykXmo3=Q6gjWm=5B2x=c6YbcR;in+iffyi$}S4G-Fk?+%XS-TU{sS+ zBlP5Bh|&goZuE~8JDHj#skYBk1|_vLwQ?6ld8Zva#xMuuHm*Q;VPJ4*u>X2ncT-hW zb*;Lhy0Nz`$NwmSG&ZHS?A)oPo^Bk6WTvObCq_mFZrqrv3KLoh{gZ?yi_|-@Wm~CK zSI949i|H03&h5u+oO1^U2YTC@YSmRR^(uI(rnX##|G_P{0cvErc_#x0O4sS}4b!s_ z`Q-R;|M2bNUEDoe9a0spi`3d3swD4JR3mcnjS4AKlO5)^L02&Ew)*PwvfSK@Iax(j zwN2`TaDkQ8&bcMfT?e()<6C-0#-=83P0x-`P7Du>%;tj0+qby}h2vn~1kv`vGSyCM z%TWg?+%5p`G_w-Q8wdN_tFGkcWThragbu=-lHx1=&Q?3O?OFn+wqtYfxbyhP`0T{& z#PrnI*vQ!M^d+2XY%sElRtRWnwUx(qhsF}1n{P!NgkiSX9kq$P)H`s!DoaX>9uE^b z*xCw{a#N#^9@~LGZ@8l;d4nEVGBhzZ3I0w_;(KiDR*{CC+mHkMZ^8mle3evvy&6!LnGsZv6L}l4Ph*)T3fYe8#hTL z4D&d;fu^1{J!)km?H+8rsth?wnd~xSIERFXhl!GMMe~&5R`Z^FYRe4WS!Tl)NYZ#@HMfJUI+o8@irkzC%NqnEQvFb>6)BsIA#f zD=V902=rH(G3$&N#XW$>cG`O2EMH*f#D$imZNE<$m~34DEIE-R|$`50r5+0mVl>PseD zx9wpZ^G+(RE{@!CboUmbn$pvgQ6iR`SPLna%x>;kgsw(SRPt%R!Dl4z@~W@e0oJGO7%vKi{S z-POrS;GAT4hceg>b0iu@nXH6tawq$HM#e{mCx)im!c8c~wg=P;d&~}Q!Doz3x1mmE z596r$QLgk-RjT=p9hAw24e%H%H(Q1Hy9&IW7;}`d33kn<5>p9o1&Ys+*hnEqh?K5U zDl;+`RLiqfs_g9CTsnJsZgw^f6mzxN+T3NT3UiI^lEZ_=vhjMd7t^mHJk z$rb7MrqQX>_`g5}0(xJ(V7dpaDsny*@7+f5$65Lm`)^11ck9QS}&p zg%Q#-(&chO(4t(Y(8&#wafed@Kvf2XDBn2_f=E|t5 z*{W=nCPSCDQmID;k@Ko$87dVp=`;g*@`EM7H2f-CMJrc50!#;)TJlcv2Tkts?7X~u zpwYPo`PuhWI;Bo!piI}OblD54WlGFekw(jnk+@ZWBNVlYBJ9AV($lm`DxFr+=>|&B zXON-Pswm7DoCJX?@IjYHWrOf+GJ!=so}n^bsYzQ6_G6l$Gnt|&@(v7{4jy9M1*I;1 z6(+3&&3I|E4GC$gWteYnelB5y5&nSjjPM>kDy<@;tjA;^9zClGHkgeoY#Ep+*pr?? z-khOP8bJ{F(0sN=We6(i{ACbNettHng8(y#m7*lmVE$w{f`SY2otgJgKL+}_J%>e5`gfa~vm~VzoMW-33 zE7Q}`HA;hYB3pcGFo~5JX{m`g$%u}jBXnVphlYiRp9zaNdp0^+9G94q2FfYIWc{=? zs^#g5bf_~9nU%C^MTR0>sf2RU=~|^0cv}f!s;u;L38Kj0AU{umn}9D6xOup_d3bu_ zr$FHBBJl7Q21iN~Qqs<=lndbFg31_^PE!#5fmvfy1fs!BJua;@Cj3=tGoDqZB}<}$ z{XCqVd4T2dxI6)}N*;ivJ=S9kzJSN)axtD~VDMQA358Tt1N3N zJ<$&xBuCW1m{=494-J9!!nk0;dNF>U4$AfT1m4ks!{u^7AP;a{9#=s40rL5L{MQY? z)X#~Jw_tSNu&87u6dv5iC`OPZ27tOM3?Wc$+B)JQl+d_jQLvW_Z-Ki~56tItd0OrU z@W%thdkDZHH~nyY0nL9*pdS@KT!i70Yh5|k&yxc87lmfxQf8g3Uv1^Qx zmYx*u>%!&QqkPwacBHu!n5yF$atU*_d_x`wztizv;zARbG@Pg=m=6UaN`v1mY0uIp zjobpo3TP&7regqTPTILxe-{U6pq-6_gS~?z{z-E*7)3)wC*UoDXpEq5cP0d;yPG>q%)9hsV~chM`A@S($Qj({8biy7Z5wm>fih|}aWaV^ zE_QbI4z#_Ior42skxM&1MbJ591iTyKBXWj|@u1x{LfJjR6~YuC5;5=vMCVrk9lzs& zQHEe3%`@Wjgjn{|&WZha9D954+a4@;fB>I>`QZN?9f&32_s}I8@_j+i5SSD(EHVaB zFa0DSevD7M(Ett7gXS(L zvjEYwV3o&`BL=Nn9tBWS{QBVwszfG+_rm_*ji5~MHNjks!+OFC=p@vJ(2S{YU||$z zp6Darn0y{nUI})9<8C~zhM1g(Cm05OfhH{qDA*X$A0u!RHU*L$9qb&mjw?Z|4VVGV zwqF5f0Df~g8b`{W=4{{+H38j(B4YSNFBf<#peBHJ1MSQ7D~X$yPxNv*aUgsF!Xl0x zcnVCdgU)dkF{LF@(p*D;Ya9(60Imbw&*SYNo!Bs;8onNr*T2XR8aE>h0!KmdX#Ohr zIR{5#Ven)2Y&+1avEP87SSz6B5Fy6EzoGFChI*Di2BOLG#N|0V6EPC+h|x4W$dL9R zoY#411v);MLeO~}4&gjl19lLRY8{^h9z=m}GLBxXkb=hXHG2-%#nsctFEk=7GV;vX zh{(wB5Pv@(p%3OjJQ_5VcsO_(qOy-cub`+z{lPyjT3^7DAVzyVI3e8;8e+(?chGVS z9PvZv@OLg>7grs0Pk8jF_)ghduH z!~~G0j-vyI^lJs&A{GoD{2FnQTE{h9SKrXHk`x3q8Hi#wkYE9ZNJ56}994RvI5NH3b`OhBrInA#`G*hlBe3Qo?#n;~j#y%mL@Qv-0%q`h zZeAVXdu@!EG|io05VPaCrW?E z9knED-rZyF7KD`%p|So;c^5&PR<$BKFDp4l$cH~PhMl?zv_O54BK8JO0t{x%1k%DgrD4`Il z0$1U2CP|sDRV)K$8b$qj;U4F}hCykurw;#MFF+m{%8YmuyOEU&Q7{%aEO2^jglb_4 zdV=UGH~?TlAmJj3<_IFFoYpPJjeW|{e;wHR)Ru#1Fmq^^K{hstD^;0^XMM0h=-Ei5 zqH~1yfI_Z&R5HYxPLr)1HKAL1jCzCmp4{`tDXyUp*&q>tFJv1l;{u6SHiA(>6}d2c zog!wDdfqrL|SGjeFXMEw~9mkNc0akyH} zI!E^i#ID%(B+C<}@ed?ATon9m%L5eY9#m-LkHOOPTS&|kc13o286sa0v}FB;g0ra_ zIh{z!G!mUyt4DcsMVnmIMg_{j1^H7@G5AM#Nc~ZRv3^N8~7w1i)HqXX73XrJ=fP^2Kf zosa^V8Rq38!eVnnF(V1#i)e*7Ix0FUDmr@ce^3K{?~`d0sbsBOm;6K`ax>We5&7rl zUjUb|x8ejR(D4+RQnU#`qC}!7e2ek=BT=YA{~|07mZOscFOibdkRmqiAdJq_<&uq> zf1FG!(TbK~TA)ZP(nT4FKqAq|-|7-B3VeK05H1D3lQoGtsKauSM#3Dm*#>#o3&+SL z60O(}#~5^!4mifqkx|kA0|-LRfI@y zdkgdbz(9H*SklZj)@&P>khnytEHP28QLH575Q1R2L;;MWF~KNpq_Lh5TD0=4yA|#Q z;*Q~?jvcsM_YsrDVlr9GUmX472@dQArcB}mObkl^boogf8-bQcuqOiHTNGf=xG-t+ zWrv@qe$(g!Rf8X~tXV8e3kwGGlwX{bPBcdLFAWJIBOE*utOXGrwJur|6&VhoXi@NK z#$npr@bEsA#jILt4uXIQ%|UR{?E`QLNQ5>=VU!GpPjVn6eFHE(VT&RI%r4phT#7J` z6rFMYdBNQ1@CPq$z>T?AU!e3|MV=)QDuhS@RtG($BaP1pn1}U{%b!{b7?5#)`t_$#+V!ZR$@7FzO9q2rvVh5Q3Im>A zJxHjAoh6a!0}!c=GH_?ndNduDyNBIR7I52o)24L`)QX3da^Gp0%k}iJtZ9}BHxgia z3Xy?;W+JT}KQzET+B~(KqiFRQe(U==r9MKcgOBTEjv|!28k3J5FlipI|kM)r}ay(>g zkw&Z&t&oWQa2FRJHDAO`^dJ66%hXvKF(7BHwT`vUnq?mX^CiJddK%OpJQax~vt-bgI+hNCU1!Za?vb#x$}2OVBV;Wz5Q}K>a?tK)O=za^ zc??Iq2U-2cbx-JZjmd-~Vlap}*w$K>0WV4;H&SFEM+F{g#GqWnw`5o_?pqi#{^NNt z`S)qdHAMND_$<_)OT7A^q^WI8c-66KO0~)L#Lk}sQNFsB}dINW)QulnL5^LYa7tTvUZ9} zQ;;J9Jsjbd4vVxWbCIF3SboF;e1F99NAm>I|3T;1FqnEvB4%WxWgFVq1>;zOMUf=TWHW#4XpYD zzd_CSfhU<-OAV-5WUmH)Ie7?S}k$YKSV8}q-wuta|!=lKh?lF3@M zUPc6G&8BUZ2O+diBVZzcX~hOn4$x?j1P{e9TGGrvP7ZOy_whlt#H$mhXAQX%V`JOd z+xaWfVe*g~E!Id3KHw4_$SJ^o@ z`lafjmQxb_MuCnuj5uY1Wfe4O8LMDiaCDaXMIXw&8`llK(Mq2rek=#Y~OkfO$N8RLbebsq$p?Oul>j)#4jh%lw`J~UIyG65Eu zF}{$#^^)na);uH;TccpMhGAe~InOZ0qIc*iR6Rdj|DC0wR^NY$l6#|)ju`v_P4BB$djfBq9#C7f59U z4{Y3@7$0H}snRSho2V^8v*&utR7xm|F%^#w&=R9~3Bg=sEF&CbSZWz2CxQXy=Jfs7 zpR)ielPyZY>y4zt6c`I4!<<-_TGj?)2qY|E+t@g8g-bLNE^6a-(v|Un))rWc81Q1m z0WC0IunolC;j5Rhe}8+onZ1xOS{5%6OQnC)hcFu5a>7+<=t-Kj46Y5rA#UHsj%4z@ zW#pt3n=G+}Y&Y>0Xw3jR_)64rrRDJenGBUHui)hRwfFZ~apDl;#lEBc^}-!rmKbcO zk2i=XC(^gEL#9*U10#ld8dC(9maLAKhSx5_ay!G~;qeu7e=Yv@iFQ~#p?b6!m*gA)mTt|Q86y%8{oRh?B zKyZXTz@XPmaKczmIglAnXMz0i9^b2omR7yKTPBr>ouT|RyvE}Qs9Dy?mvT8lspQa= zdK!3SpNZ{!%xSEbShbmewXj%VEVHl;0@@$0@okez&)CC~^rpV#>)AF)A9Djy47TKq zu){-q7;h}$|3cVlL=2R+T#cW=W%{5oa#IM*oVVZ{6{|*ad4gF(Rh5ogEe-Hzvb@>k*n( zdJ)Gt0Kx_>UMG1X@Ho~VOR@xE%LBK-WN0moPWb)?jBG+f9BI}w#NmTuHf$F2pPwD! z`-X|KYt&_VDrC)wHp*lYsZqX z+D9}(#SK8U!P>)Q9a_cm+;15nZJoSLPZ;zOi@}yN-VltXCCfZn#B6AIc|`nV=^zW_ z{~#5c6~a?Os13`K^_daZe6Mx%h5kF!(<4p8SS1OXPE5sXB`ZTtE}5bw@kx5vrFHjz z!0LCS;Hsk~n`3Ez=&==!dk(NtS|_G&k9FH_CsCY6vI@?Q*d*T)bgp7TTug*(EGEq` zVj)ufBPzm_kFg*cjnJW?q$pD9P)q-%cTkOVJXO zC9^_6D;7oZK`LT3#F{H0f9y8&mcMkJZ;8NXty$J&3KlD=LwgS#J=Zoe(%*i)$e1dJ ziNaA56$LY4Q(|$*DKc^J(TEVJ#iB=1H%S`gBPJXXiw#R>tv_V6*7Cr9w}OuGiJ{hx zTxvrX=1PFz>+v5X=|Gtm3rMg_fI;p?mWW679ZKGZ-ZQPOIo6gojDH&KG28n~e0BfG z^h8gqKNUU+4}gS;*|3>5tQ9L+dw=F- zRS%3$kM&i2w=#bm3HC%;qLkPlToAs=^qhXS#KMKZ1IoR^^6f_*0-$ssfP>E>3T0U{ zEvQfS?_x=ds|ROC27B{NH&pjwX(g#lZQ?RW5|FgmP(n11ELE14G{YEv&GMDswFuA) z5^D)e?r$p?dye_$mzMWVOi#8+Oaq4Mv6Dc4mE;E3A|FIVK*Z@~g>3+1Etx7pJjQn) zy!ZTy-!v3@C{MU>JC@Cg4-Wj`maHggo0y&(tPpNe^_Rfl0@V1vf+H1}F<(tp`wt3TU(is5$Sc~ZsclOze{YO0G<%yTu$EI)h)=F%<`cb?= zk;J1;x*=Ych)4lz1qePXV3H^wv6i8w#YZ@%c-_*Pwfm(N&u#wOKR9f=?tn=2y#$7`iVB*zQSCXN(XTaYb0943?b zG^Icu;PJnkJ)l;u*!1p4Uw!=6b1N1p!_6eI0J<$L96xc(Y3k{om>9e!Je^olswx>T zSHQ6$5rw?`dVmu3)Vm^yINFna-mDBUO*#9eNV)BYTd@?-v9gG-~a13 zOF=fxdWvb`d$Dln&g`A(+Y>FJ`x8qpw_h)i!et=6NXyqCMY_cB%6v*w~T8WirVDLF9xu(mT+vsZ7EP36 z5lLEuWTbvKg3H7yA$1{^gt=KmicBnWOZ^#1L!)oV>d&;}hloV!iHTiPlee){3^#Su zRyV0|PO_OwmM0Va#ZRITi7>H;I*i@6m*X+`n@0u@ZDw)2qT}Pm@uHxN+NP1)QY@CrmC4CC9zdFj$?}X%Ok9+kl9>@;8RQoae=E@^vc=+KPg79g zr5=`#J?vpgaR?^a0I$Zohyx_a5HfiqNC^Q7R#-2>exx>V5?}}pY7(D-g+n#STOqJ7 zais|jFqeNp{jlTzURjSq_?MAsGsLX5l11@avUnidjQ2)IgGv~=jc)=uGFe8Bb7VL_ zSw^IqDAnrY3)r>2POa!`+7aJUXx+jlKAglqgKE9FEa;Msf-0#FX&c&LGdszcof85OZl3W zn6myQ)K?R0x3l zUVnNtFM1+UKYxiN66uO)QKaiJs3TdHSZq!hsenaEEmV^n4jN)U$g^#xe%}~$%@@>Z z=xn?UCsO#k4u);zkUH1j`_SXkFLa-1v4t>>$jKNy4IeLRAA|gC8B1(krBoUFK2tGO{5+3N6 zcoy3+Kt|3uM$Sa?8KP-wWX z{gM6q55SP%O-L|;<2)S12bC z6uvGjJR&UAU+C;`Wd9};RBo>@B28viEXR{p5WND1WMJ5Ad%@XcrJh|-^LW_UR+4M! zC(dRsqO)+I&;c8KPVV1sYO;3i6OZ98=8Ncx^!mGSd}LZ$<~kDU+dB$^<8X+K`ev-% z(AmJ3ae_f|EToSs!os~oSfSAoK|aow+c$06u<5fOcYpH9r#p7;+4IdI7QhHSG*V4S z$=RU*z#}Xn4QI|U5v{~XbnyKb=YQ=%0JPoF(NKY~Fb}IO8%#EBKXUL#^Fw4(3>z-T zBLI;TK_hDvIAv`|j^15_Q7I54NL!2a`LL_PhjcNJyD1$kKt1qf!*%+7f#2C!Daot+w$m;y@&6?()W+Ck=bj%KcEZpIsWLCGh`zk4u&DHM zrYva*c9E%LFJrL@k)+lHkOBe6j?J>LWS{m7Aw3meK~G-lIK#yF^?!V8&*MkL%2V>n zN{b2#iVAXaG8HmuiX2XiMDB2sn6owN=^V7&$9bs05;)q~SR<0Q_}S)R@bKOygU3E$ zas{El$;&A$%r7d<&s1ilprA(@AtK%oKyWmOrAXbJ1I<~3iWOAJI@;sJ2>W;=l1d%a zp)t&Aqvh`&;08p*NM#DT(4?R!FFONHPKpb5(wIp2KR|&fXgm>vqXUnt z(ALIe3rKRFID<6)>TiF2@u@|9*S)8)5Ag~050htRXBHP`DpC|laZni47%7&eNaJFn z$u?bRPqU10a$!e1Jc0UfQsu?vd3d^^st1Rb>m70Rr_th~I8EV*1JPeQo~UKuIU*oX+~RSLOgXY7{&k8((&NE}j6=H}_i<=DWO z@Qpn5lgCeSea^(EX6EJ>TtG=)VzmED4+r>CBv<6;m0r%uQ!26)%FMh>;OiNaB#Vi~ z1t`Q8Q9c~#7`zCnDFy9(o`<(5sbI8&D6H4AIj&A&WmT2sW$4kVDPCSudbRw6hw%Rt zrDPW77w0K+GBfci$ji)9CgHR_NuDH%f}f!1#N~2XxEF_%N2i1FR>j9>-NSi_@FO#RHZGDKoD^8JLT3nDruFar*Ykr>IUQ?2!aiW;SOrqBE zwTd)psHZb2xg=L21nWIe4@xxKQ6Mg;uKeU-W98Sj?`58hL@@W(L+HIpio&v@yv*!^ zqRaV^05l~|Do=_-lZ^C&G8~+c!Y5Mvm=Nj#ws@eB8|9PUs5Rwtea@9vU%QmO=J(B( z*T1&o^@rfc^Dg8U6z1e*=M>~;KoL`<*bc~IMG5FpR9=eB3RY+o0^x3pGCs(SNE7vk z-a>CrL6EAt@(TJaA))$T-ItH6n=8@Kr!WU@B1wXRC{ZjxCGuR{VlF8`sq5112z^b7 zQWE0h34VC$yw?U~R9BVeXP`b5`QG33YJ~b7DXMC2sVpnXCP{Uuojg{AT}001ifd)1 z#U(IFQj~=w?Zxb;(h?&5JUo58eUr+ouU=H4-%_$Hfp|sO$dRn$jr)2 zk;rf{m@e0q8eJ_Zg8N4ehc^3Jl&j_DotH(02*ZnN$_umeFJz};e}i)seV^uoS*Xjr zT-RKDPM(4<+#D+^uc$y*Q{!t_ONtSBk(rV2d{Xm-N~8SDl&qTSlAOFth1nU3R9bHM zGRef?Q0n`Hb2&Mx{HyB9a~T<_Sw)wt>+7qlt18ONuhD3;`X+%w9i9ppCKcnLT&b+DSEJcMbq(;!N=k`50SAhJ zN$A2qFV?B6imx_SmlPG`<1*^`^z`f<|4GK6r}NRwb5cn{T2|)8+O}r3x(Q#}da8;p zH@a3@41Yx`mR=!vsC>!GFK%ckzohP{ud1xLdgby(!ROC>c)&qw|HIp>eiQGY=;c^Z zPFhl2yy8Os#fsL}#+H^QTD_{NxfY+RgxGdj@Fi@Ms;0v(}$0GKO@w6=9Le>_&}eDdH!LYi3PGr|x;ufbZW@>+8PJEV zpcjyaG5zz0+yDHh=aGha`un@L2AXTGUIIIka|(fby|bmQMcquRbjCcQv?_+ zzN}VPsK;*h_4agkwY6NIoW)h~NA02KsW+Z^`Saa-zWVYPdH>xz;~n*tC3yhF?)q9w z_w_a+I>L%3HH1bA51%EqefdQV>Pq$0@Xh`ky**tWL$k9TXMW!(`sFWOy$WXT-X3VG zEzM7tC8~-pTx;zHlKxc>xEEo2a6jY*U}3$wx^ZS~c<^R_Ur*oo?97GJb|kbhebg@c zJt053_ujqHR$R(gBqXW|FO;{nRMYj#)om^H_07a|^fzKqD^snmshgP`85tfNxG^v_ zb5nGR=Sn?n8qE&$6qet+KiLeMIwzH(H$+WG1Fn&`w1TQG>Sbsp&ahEO9E7Jfwe9}D{H5uQ8g@y$<%VzFPs;?F(6JnDuTr6p9 zSJO?#;CM3#!udSz3o2^Vwby6#m#)XhXJ#s#T|9y0CSainFjVAG3u&MQ2M4%_C+?2d zT*+0$Nm4FcxYpLz+}zUE-mFIK7LR7!8S-LvgL-y)a%z&Ecw%~{iYxH(^6+qXbLHEg z@FN=cyDrk-goXqK2Kw`&ChrcH7iXu4V-*()YdgX9mNp1+Gv$3IE?uswZ>kwVN^N>- za%y^}neXcBgO$YHoo~ax0%iMMA8ELoZ-Rq^0s{j4PRHNA+j|8Q7fDoP;`M6Ss+yE( z+PjB|%hc+wX?jXG{p8flOrMXyPv{L$4;P!WH)iypXeHew3G@7T(^4#>2Mz%;ZcjL- z-?`I#DfgTtCNZy|qP?@dN!`+pDn!I9_K|h!`bm0e7`>S;iSJQ7of(X&R zLZPd3_npB@dFSGy;<5_L+q>G^I@Ex+W>|Pt*H)mD!|3D`J+qE)0;Guv6$*;1t@*l5qO z`LKuM?)_$a_iP~0s22DJas(B$&y(I>E-nKPdh#<8&z_NH7BZ`gt+B&+fUmqBd*dXAiJ=bylMrQl#+gmHt?R9?)TyT`} z?@&6B@~4Fx2`Zn{dB0ng7!eYdm|LvAif!Cx%3N4eU*Fx*+TPLCJ5cYy!QRk?&vB@k z9I9$=FK=kCE&5~NvNIqk(9f0cA@ufecXhRozjwPZH7+7J`g}o6W2PQ5wZ5jct*IH9 zHwF^e&Mq#vnRG&UV`#Xyt+b}CrVx<&^Pe5w0bb6MT5mpp1g?Bu&%GvPQcQ4IYF=4O zu@bcrR#zJ9I^b@aTRQsNxem@W@A1=4r>wa-1EbS@tydCL&OJo>#7_`VGBulL@8;&} z>h5l@xHFoQ8W$cKmvdQNlaFA^t47_}-q;BD)jg1Db(-d`KaD-Y$zw-&m#60DYDA&I zrVme&cAhC1nx4Kj^!GlLV8IrdAQ%(nDSds?zM?5yfiMLUUKa+?~_ zMysx&zGa~Pq#cLjgj+`^NyX)%e_MFx58b^tUig>)#4k`3_xpFJ2m5-*2i#oHh058* zHg;|}Gd2Efr2JxOODzJd@|Nbd`r5ks+V+7=rlS+c!_zHr(!==Y7YB}WLW@W5-D7Nq zr(gM-2nM*Gea(G?13eSBQck(K;5M0)>)2dTs!SA-kY56i|2kFI+SFWAU0qw#ee(>< z(GjqACyrwad*Jhb?b&~n%{_Y+#|Fr%P*46ohG9vI+Q)|bN9P*sU3i?+r@40OyEW-4 zk_buO<%U)`5j;q$0Wn>5?Ldz+TkH6o9sBsPpO60Z^^RS8_I-bdVe9<6l#0R1r~Z?! zIhCYr92y-QoE!D9C)X3Xw%K!?%GCHMaZX8H2XbNRmZn;|YFS17K>Z0@+F`>f8!P6| zN6im^@#XG)d-s{`KZJvsM;R4th8~l;e)ZZKU<|)d1$A@o>Pe)tf9)u(3MAWUJ ztaH*Ran_aU4hXKPrMb4Us`6Unz{O)HPuZV3$v*yz#SwF}9sk<1Z|~lH!2Y#f{jlsH9Pe%It!-;Gh#FQ*(FPn|m9HZgTUksyjmzjUn~xl#mfRfreMS_aNBw07%2 ztL0JiA9n5dW-lPM`$(hc-*uk;M}aa{(LOdd&@)`dw6(K8g^I1dnM>yq#nCB+SKDxu z)!y1vO+wd>fhbGclP7Jgaq4b<=-|J;*tKWxo`;Y|$cEv8cjT-mqg`FuIyf?LeYoY6 zjonGRQzva2XUfhc#YQF;l(vFGv`VY4yjFIlYaq~)wq1SV_%X)O9}n)|x$`?3PiS5u zQIChTK8HHpF*JUCV6?AesE2Q3cZ#-M%PO0y#I?A{gn}zg*aBZ~UxK?n;AKg6)HuC6 za_E5B7hiq1ckdqUKEu7gDPDn&^2f#|`})TEJBJ3nku5rDYs1JNt5GD1qY?^A)Hr&+ z(cM~Iey#LMPe0$%`osyVV?X}{>h}EOU%TnO%lDa??E~QNi&uc^JU%rw&^s}X&Nx0+ zuw@7PW0}MCij;&{X>M@?s2u3)QrA?LmG<;;8CKQ=^~etg%y$3d-@Eti+e@1n?b}08 z$+Ul0yy7}LH#gWbHZeLi7Wm7lQxMND%HhVe#t2u-q7jcKgV#r=rtZ%tdieR^>g&nkd!3PPVKFf| zdgk``^|rURG^$4?{jH%GR!qiEhY#%E_m7>swfmOgp+Da};=+HZU4k9!>lvP!nxB_= z1_t;A2wiIE?f{R(1W8U=Gm+VizRtGR=EmX4Gi)yW`w1j$4(|URu=Kv=fZhE+aM3oI zj}B`+eZw;|3wI-Yw1MmV-CA@_zQU9Q>4maZFc+|09qlcRLz5CV(!X4XlU9~T4j%gI zAKyV}K;8ZS;llXP(DnYI+tUkELB7F3SnR!ewbgzRX{pM~*V>>Az5V^29UW~={S!(y z&)LP9V{dC^`O{B(b^><~z1wKt5C6>uT(IDe4c+V*7`c0U@rG|u2pzo6KVWL{s(;G) zwCv*YcF^067Iy${?HRvh%X4wzbDc>GLizUoZ&`P9sO@WGhsyxHGFcRt_VGuBAjO$c00gWzM9j9t5t>bJ1s1)$mt z%KN)=7O>ZKYO4Qw|E;?VnjD`nI`pv+?_}Lnl=x!y`HNR7nsLC_HaO6Ky_@dZG2k9MZLdvxKx zrr$sG3{EjZyxQoth|3pMIakXYZ-T20HwTAr^!E1k3{7O8a`*IfcXi=_OeWLpL|9VE z$o%}&!w`Z;)A##tKUmaU@;(!eufU*LO=ZfJ3z-+nueFX~+gjc`I69#1+jMh6ecBb_ zl)I}lViBg*&vuHQ`}21i9>pTNOKxeki}RX$(E$->BErLkN%Z{-%1gOfmnted&}Nw` z>>M1vN#D>7=td2KcnDFwapBy-mh~e$b9(-MU%pg~^=?oH8GP;(RK1|lYScbwA|vQC zk9k(oV{y5cva_#M)OO#-QlHi`G&C}B6JH~vN=GjrJnYELg>(FfSIgYJ>6UYelBgZO ziA6p{Rcq?a#RpP9TnLJY3<(^kyCs*3vM*GXH}<0wG8J1tFgUIq+H`Ydq}9a@fw|Cw zZ|7D#F*Q|xrQwoP92NDOPy~7O5A2*H`~t7l3voG|jx-UbX&39HmoMgCuD;ebd=J@) z=(6j><72}k+F`@77>?Fwqo?3R_T*&k`Ru%k)@*TPWSH%)&tLm(Dg_$7?Nl(H<{Nfa^sQ^Ml8XhERaIS6cMym~X0?rsPK}I>4G&F>S93glygWVdY_P7$tI?SS z7pj`lA|gYBLbUbwS9J)uAT0DurhF<&7leH@Ux@0C&tfke1x9vZZ5~eCns~onK=bjjj0i#ngGL~fB-sldHB_=A3t~s zCtr_>TaHGA1_t55NZ}y->>2MS&Asav&KKmOrDEIg{d*9Y(7&*AXb9Ll;Rxdw#xE>uepq;D2(~)zZr&a~p=UhK&D|R4EQmUPvAVLl zbNt@?ed-;`MsWFf9Xjs~-6w-+wUypyB0_}%uKmyK+R>hP|JZZs`DOLj5`Dde80D`^ zGx^KsyT3nlC~sGT~4wzU3&L%a7JJd)ctP!tjq{GZXYS0+jAM`&HyRtQi?3@RT3lG1U$}oy zqwV(g3kmeLJ?Y9h^tqS1t3D|(TzU@eDRYWSu2z(f%|`F}{LL@F-DiHBLA{`GGKnksY!hOf~t=}GIo#F}HJ%xS&f%-wbk<0gX4j#Ha z+11{vuDe`NTH4&!IW~)yfS5@r$Mek>Eia(PQ@erwBo)s{~+I4=;h+-jf?)ST(*1BeQV#$Ebf$ z<)s-G%)Fwq_NiI4p1*hJ*7Vry{CpvJ;m&vFx!}moiS3@7xL5yn?rr0)bkW{CM>MDFuNBF zTfC1pzta;V)AI`z&K&+}n)9-=fbZhsaKbS-s}ZftC%bE#d$?ckI&hfnz!kWVtLTtNQSaQ`ohdM@uCco4a#cmaX#0)Zw-@i-xjj2M zJ~**B-|l(Bk>}#fcg5KwcJC*x*gXIEjPr>xNw#KR?>+dlrPWCeW&-Vk68pPaM<5bW zS65e-T`s9Y1J|na74pow?(w>tvlv8OUE9*xQdcqBhN7^!`Fpo#Fp+`L`T60q$DM%h z%;S3rg}%P-Tqnm0@n&o+wfetF5Z5yW9OH8DCe&^vT%_IljO6HcDUTKf8-R~b6o@VtFI+)kgwITYX3 z!yTt{Si{}9{@3o_n`pX*C)E`d7FV@YRy5V8C{nVD3oBat=H~h^h^*jpd5$809njm^ zIMy{WJ9qEa^yK*1NMFam?Cg{}%2@!e2LyT`gX-;h+6Bhv?PPoEl)IO^J1oP?^|bee z>G=m!9o5&$E*BPDs%);nqZ!Y|g+;|i$V*$hJJqciBq~;3sFa1-^NVLYXU96nZ{5B- zJB8MVH?Je^o}9bemFnii7kWB-ghU2$emZ)J=VE`& zs;kBM7Yi#I%PSh|WYIAqQJ8N`j=Ht3wiAPd3Zs=d1vzd9f~Ll&P%J$*J2N*sH90ak z*x%bXdi(y}JN<=`?zX3W!-G!!c=*u4A1wCn`SIw%A8eg@JfU2DXJO&)FuFIlRF~%E z6<5}lRy5X}4ULG2jg1V8#5rSKV=LChprEK&Wk-9dC%1#1HJcmj8pbGdkjlu==um6@ z!0eq{b92{=6|w$2dnen2-+r^_yPrLuYF=>cJA)n z-3NCEYOavR{Tw&nnAGgj_Q9D44;Jr^_O!RQcXr^YRfvc&nF}zI#wDJ z5E7{jq#*Hqrr-g#qm?iNOYZr`1ryme=8 zYItJ$*6mxuYQ49~&CMMs9Fua`?t9p1*K=;`W1kQ={YfH=dL*cJoF@ zOG7n|8rs|2+FDzhTUy$?+beNmR~5eZ+XEJ)Vox9p2n`GM^o~Ia_EQSC(&b8tjKvKb zn!PhMR4$E-iAbt$8@Sm&G%|Ga=J3s7@(hXT>AAbp!#9UUM*3PC>&nZoUaP3CZD?+5 zr`uj?Y47a4(Oy?mQ!hQlu`oNdABDC|8ypyiMh1EMM=LOsSSbz_YFni{J=>vF*E5)3 z?b&N?l~mi(gP9;5J~2FZ_wJpsp85OJBmHRL+tX54Sy6heyrQZGgS0^)-F-K@nw#2M zu3Bw;+00_+H{TvO!eFq`Whfvz)R8TeVvwZh1bJRr>yU`mIW;%cnY3r;ks}s|%}yxQ z9X7-iMR#tGkQDU3dTR;Em48@@tjVm6df3jjbJBJ^h3IUFekD*;Vdwc=L)q zW?!4_-1{x_FpJ0L;o+`)bGuM#CzX|c{(N>$ai?0|J~cNql)<&(2|WY+`KQA#H(^;D zoSc0C-#pqeGdF&tr*CxNI$By+Hn%pYo10rZ`_Y=X^Z(U#Ch&3AW#XTlO>f#lRRnK$ zU0oIx*;QP3U1dKW>#n*gtGli%{sBQ&L}e)g3W(4}JfI7uwA5B=skEh}wjt>>nI@S` zCQYW3W73(-ed?=p8uCy z|Lfr$FP(MI`NDpmKj>f1C)l!@O~;}UpLg!Oo3zk1>z?<_&ny0LWPVoho_qFfm%RBO z-u3p^z3amt{_OidaP$2?-?i(Pue`L6hp=n=)R}R|p~s($mW#zqDVug4edN{~K6~pA zzxTbz51VZJ9nM+j{Jh)mpP!pYsM&!&=X6ZZI^Bwg3cEKL^!dEaFWXDsef@?@-gwEX zKY9B{|Mj2$^}Zbk4b%@^uZe`<39Y;L*~Ob zo_T(E&#>+MJeueBc>P{wUX?@81ee-T_AmW=czx>_5-}sKV|Jl_W|LTUX z{^xx=_A*9&pnE?f#Ji974UXGPNA}pu%h`rn{Y{j;q^xN#S zOIk@UygARLJbXzlMG{OQ)+H=209{iVVE584;B(W^&}b@NIn+f=amTAW-a zms(niv!yzo%r6F}EZuh*wqCX6@@sFo>wyO!-~Qxo+KfD7@WkF9?@N}os$Of8lW2vj zs!KEU%cne3r}peV(tY5BYq9@9#s0)k?T&t9zwxD>zB8j%TL6QW&!iH|jiuLRST~*t zC{yPCL+|YR_?tFf`RPyJ^~m-IAOA58$Ns_5SN1*e;}bcptk(<;t@@dAsZeS}1}BF5 z#}&nXV)uSF91VIscE!B^z=ZkekyFQBdgavM$klg&X{<=#PF`&r}}#j zm>0c+`}-~9rta>+6USZ|9JWr)CwYMoZG(VMk++#l1)`DYl+8M58tmQkaL+=^mf!)tMV$;eUwW|E1mfuyXg-^WniqU9wDz<}Z!)QJZ-8n#^h&RZUQwuG&l##$y%RERl zQ8{$v*rENsV-EMkpB?_t_qBWrcJ%c1_Z{1J$XO~h2}K?!4=K7{>g(o)LGP5y z-hbfm-V?*736GN@6N{0(!A6VKI+rUZ7rhQk@2SDzQ5(K}#_0(-4<6_~apc%5-Tfnj z-S=Mmp_^{|#sl{-JlWgZ-{1TE0Z%biEy40eO)dXpso)(p_i#7*#FT5sZtU*uw+{9W zGs|N&b|2~P?;o+dBB|_>Z(^{&=hQeIHs=hv;mn-t#NI`+`c1>5qjpau9+~a8oEfy7J!`X#4xTX@2gj^d zXJBl{ecKOoBYiI&={ENFZGY#MH{m~?f9ZH{-?69rQ@Lg2NiDydvV_xYKDF-|>P!#r zK6L7=72)K?#e)oYoiLitn8&PBUQS`{A09@|&YaQuujuVQ!xWdz<~h4}`<=VHdl>;^ zMO)9AQ;&b;YaC?zQ@fu1)r&PdQY|%m>cpt&@ZM*3KfUj0Pw()s8L2?> zA(nA?6!$+d7hY1xH+xSRji(rOJ9-SEplM;_@gZqAH?o#;8$_u~DAz5KJ; z5QxR%@mMSx=RYZ4rjSh4Go9IVI-AYqv}|jRszFZWPX~?K9 z6$v%2$2##=M9mR3+DT&M26MLlhNbfKDg1#1$z)CCTeKQhWqoDIZK_ z(z)gXYB@dI!FTCwx{=i5s}phlZ&DD~(yRF`el-nvE#5-?INXS~Hett^LCL1I#OjN% z;~=l6^;8GXN~N=noB`BzAxbt4l(d%G#ACT=mgWKJbOz$3GYuwApe;0sMB=e1|BXh% zc!@YK63C`Gn3^!ewS*R5n@FylHj~akkd|Cl%eAD^T2{}k20p-q9%@QYZYr6lf0IxL&l9?pL%A~Y}0l=%FBWIBhBZZt=O=+2~ zY!2E9HNZ8yS-$6Y_(HG%40p6t3zSc-Lx@DAge+kh6-+`X z4*95H)4`iAc)LS&Nt0iTwZcgamTyY)YK;t3l7mAqmO%c&F8CwDZ#WXmo z0{Rj`8hWRf`JLEeI1o|8<%k|$6%6jZYC>qK*EucR8ruF!(vyOe10>k%5fr$LIB_GQv80>4Um_qJ@O6? zqH%;P_-}+CuAGWr@r5J2CkNOfi&| z;KO15>Lcv|cOI~szw(VdwI04C=;O)!KHOMN@{Cj?-HIe5d$i1AHO!fieRX^(OmEVy z2;9y5K12xv&!_klw>+dCxg^{?fuP;|zkWY{zO;xI-Y6XLG26!ZMR&Mz0Pa6S+w?Z7n9vBfr^`kR&_UI^}198;837!-87 zHO1gl{f1z}-yt~q_{*xGPaY5yMxwbJn?Dz9-D+)$}Sace%^ulvAWz-y5Wa96MtjYVaJGQez!&}TJpB6)_t z9Z6f!@xWq|)Cdz054au85>O}ACfMlLe46`Gd5R)WQsB2RoJT+u1AnwIL=)-sAy+;% zydH>6c@s3yw_sa17^Slq=lwGa3Uwc_hvtYo+V58Qo7*L7#Ltl?4OX}EF@aqNHvDT! zr0A%esv@%50BVaLd}D!m@B&Y_>Us@)42K0zx67#@Tg`958i0JZ7B;{`J<~@0V7~61|{TfxHijCkv^mYVHSiHm*z7lRd*{`*W~dl1Z@fW8t7C#A~IgX zD6SU5AerGX8sp)VE{98XcY)Is2Zc$_RdVtmD$;NpoSL!)vLVFsAs_NAhYk8`AXslw zKwm+dXLO2L0Bn~*p{3&nn(ETs8%0SjaHa{i;cjsOw!Mi*BfNzliVQSSLLB4^AJl+p zT6i@NcDebHUuF*M4)AL@xA1RlKOze|fXw&Eu&Y%l>Dw%tE~J9FSSCt4BG5ttaS#n? z3e2FQ$Y~$|hZg>*?n{A!z2c8RZ}JEVH$Y#Z*aZf$rNzai&|*Z3t&0Z3AtEF}3syy% z${?_tBnLbP5MeO9*5Gc6sIv)Kumx9m>2#?|i<^JFl|fpUFS;0M#yvRL6!By-zDz}x zIcQ$38o)@cC?3{D6eS!K5m_ac9HQX>;FqrG&_qNPYKTJ#VwvQ7)xFLG_Cd-S;&})X zE|ch>SxCWE5nSPJmlj2qvARtzl$*LD`_DzFkOtSEHw{0;5ytp26C6O9TcD;SP7`n0 zbZIH^t;C92>NVm7C9af+HJMl<7;fUaqTV<(4LX6iqPgCBfznPFRB4KVUo@I?2yk(f z66&Se@EACec8OCs!zPd>G{#y=+@HodMH`V#JVVHH;SYa7QN*&fp~;Ho*0DtE;1=%2 zNmVzrxKxd=lMJF624@I1C8Q+I<{5-gX(Bn5=rFyUSgd07kSG;Z#Kak}X>Q$Va5wzA zvPOIeS1#s*u_Y~WW$4KL_a7O@U4VNso*)Qo1{~t@piP4ZXhgFTx3=+WUa)=@;0-de zguQ9%9tKiV);EFsBh;xA$zgVitbYGL-oNJv+YZthHD!pa$rhpjfDuL#{(3ydc{eprkzHPA28I9Xw`>dfIA#J-VqpG(s#=P8Qz9}g zy$&)FLgjECBuyHm5LYRi%SG7;F#swOANEm;jzk;rc4AI8Txspb7g-NpHN5ree|&VL zDJwWrmuG4mh4i`v=TH{IQ6B5W?&$J1w{4xDCEI!Ev83t zj}pQsG*+WudvP`TstWC_Ay+9cv!K*3kes7{x(U?ZO zzZP!;ill*LKO~t_LTzfwS^C!3q#UV4ilk_u6R7S4+h~`bD*_O7%7uBw@PYT1sVx`SXe8W zBnh+_CaDM{=qX+>3F|yjhKB%8j^k5QkM34EROJGY6;NERyO-BQ!lV^5C#EbZHdCy^ z@?wN)1oj+sI5R+`8U(}+X7m+1CY&xrb}u7h=r6a+5jlQ zlk+lKT3BJKo*uUc|K2aEXUTd)1okDd^CDEFjrXyDcW+m`!{ojzf3pbAK)57cNFZz*c z@Dk~$gH@YhY7UFrM$96oo81T?Vps_?310pP8v8Qua4m>hkvpjY12KUXZ%w2xz;gM3 z^;#~;xa4qh&57@TB`jbp^7kpv?ZMkd>~nsK=^+pd1SH{AftJZgeFfStPy<)pt!xBd|{ZaCgDG;(g%;{%c(-ZKChqhkC0Tu}~32jm!l znFaY5XqM1Wqg#eF^V)IS#5w1J-wRKpjaZkYH)0Y+!I7&D=+5El(;Ea2fLe_wdwQtc zRGT`U&=>{$y4hkeo0(-FcQ7Cd^_xWiEG*YQa=B(;HH?dRP-tV^>9lF+cPO?V9#!r)M6Tc#cA zbh~qU` z(I~-1haxe{TWW^4uDj-IJI$7H8@&TaXlA6rYOzhYsFdJl!_g*gs|-y@P5!ub*ClS( zI3j%VWM5BDpK)NoU|7`JCtl>x4a4i7v5ectS@~fSSXP^r*TK647Ov|8;Yhatf!h?H z;&z_v2TIRL&Da4jkPB#AlE!TY1AxY@rXiDg2#7YTW?MJujYLD76GO?RUxVs4NUGR$ zajwzReOk}zlRd^hFanBK!hu_aNL@f+PQzv$*KBL25xW(Q$RHWw)<~*!*D8jLIl)t-P$>B8FQlGTD(mHzfJ?D-sSSh$2-oOx$JFJ`!r+w z0QUv?I4%s$F(X9UP#Z)Y*R1Qu%_GzDbc&k^DG*62${)?Wnlqd`)7Lj(G-@j_hQ!E7 zFcH@_3nV~cuS_N&!EuXbT{BI=3;rRnc^#K`Dy~ zz1cK?KEq|rvU$jCvyI!hWvnnQ6Oy&+*?O7*L$V4B6888_KGzg-b{xHD7KHSXd zureag<{=Yye#*`Td$fc@QcuHj2{2uO;m#45Y%*!awgI@K!mr==Vi5o40d&J;*2XVw z+8jF7h`{)4Glq)G+1aIw%^|G2oPc-u;xG*&(5;f_^ zX%M`vz!T!>xO>}R-P9Q9>>C&|A&I|_8r=Mb*(#_3it`F6&E964npUVZ6D&eD2^u<( z4Y%{GYT6)l6Ml+#U<`gA9KQd~F^feTGFWQXjpzwfo3hWvXl#VS^bL_O0%y^*nPHPU z&|w-7aEK`|{}2}5?7QbQvu0aJaT!)P)!W&YJsB_ekB{5fO+ zQ=(dRyJ1`f)Rc1)e55-e1tX7yT$-z8)QA|ET2QxvRdPu4{|Zg9pFw2J*82EHOv3m$ z7wv66X`ZZb5MZi%m1_iYgB5nbgn$kFFDFD??^dQq#6e&$2_sN&ES=5abOdRONnU6` z78C=iL5pit?Q6nOO|3%^zez8`$@dwID-l3N+~eKexe3!iQ=LQytmu->&LCDe)r8k# z@Klx7Ig3&2X*HS#RMToy59>IDpRS6vVKvbgw(T;i7xD%m-sPRQ2_ax6E*ELV6x$sR zS9m#rF-D<)*fwkBd??`OgQ-e?r(FK@AjJ$1}YB04T zk^feM$J0=V$Q|Z}sbyfOYHG)Q9{#hHjqDOn9Py6*&)xs>J~pyn&Fz%tk+=E0v!hM= z0gsUlc~iZe8hJEH?ne%3s373Yq%tNOrNg~ z+*YmwR^{B_I5%YxBL|B1aWftbp>g>ZQ}9KknPcnTE@fue*dr!R8v@&*nrQ>$u|DsO zSMe_F4}R;e{r#G<&O_b9?e%_EA|hf8RyN-4^}5D1%U1j)tg(nKaG_>e5xpNRym?eY|z!X-) z^tVV_$QGF@lf+f=&W<4JC?68F6(b||)O2P_@%_1BLemuEwq}sfwc)yNo%Q|viy!1o zHeLTnZOl1|fNGW&+qgQl-s!MAsLh4ATnI(TM4PZd-DweD3{lj9cB5EqZKz|wHc$3g zzEF!{EBmHX6L((s!8;#$9VN~-KM*`{O-l&WIP-Y21-_|DXU$h zKts08(4&3D7a+Z3a~`g_N4aJKK>`ez---ci4B?|pZ4*uWny_k39c8!*+$(;*k8zVvYnez^Rt{U!*v$UjDP(a<8*g#gw5dzR z2Tp$Nv6B(^$yhF*uhc36wV`bEh-TY{%mYJWdrjn5Isro`j4_P}OgZmF?IKiE^qWJl z13X1F;fHf2sL^RDqtn*k~!4%DWmj;lkgWxojQcci>kEW6!e z9TF1Q$1OkDS1RYSC0$q5S|J3cKF!;rfNqDw3Lys?Lk0lqrd4KWWiemG)A(vUZyvG| zb%837ZFs~l-%7tXo~>#?Z4}5ky=XD&j$$hA39-t}P-(4TY_{S9Eq@G_{O9XpHyH53 zdWwB|`Tds2k)e39+R$6r_<;@W0-}8oQsR0VL#rjr1R(zL56|7q_Aqr|hylgwSs%O1 z-}AzFBG=ILHnpOPSEFJ^*`=X$owo=`{EL{RCRF*$A46q<%dOy!<+QkmY|4=H<-dK8 z`@m64x~A#vTJ7+51e4OZXEj=gGS1mfgXd~tl$j{WYSv6`76REnL>3=)yO}`vk|~SB zYH{>gdOAO6IdU?TtE+lj1sM?!EY=xibhk{6NL+wIiu;FAmUcYt9|J|2ZsYiPBAeA= zHV;^Kc5Xj;Wa79UnNJR`K&5-=9Kv5FB zRZ?k8hNaJDvfO95@5rxz?JudC-cc_ro|ggIiV0>yRPAf8c$FmtQz~GF?;EMy;OTVki>bVjz9qs-n9)XUt-6p<$cgrQ+_m zv?|%a*O@XT1xK|ln_u31-O$k^=W{G>R;v`+Zm3BM2N*u_tqdR2PmqkuIDjsi%s2_S zJVYWH5<7OYL@eXu%J>jB1h*de^$WerTq4u;dUez=sjol+9aTEe3RRIYD5YVrn{3bq z+Dw09m?1h zB@!zjXRFlG@a<{rObdNoDH8fyd;!hB3Z_ty9UIX4+K4NO1J@1w=ZC+(XWTmU|B$caFqkS^#&QI#lU)&d>y4N8kFkY>7UgOYS<1Dj3gw5BOo zl@A!UB`>s**1zL@U;D4SZ@y{AN{FplJIuytKCjmGHPwloz^>JEUJM4sN-f+;Ios<+ zK8O~{)aTBj-$ZoaP4=#}zxWmcg4)GaQq6G5RX4(090sAbeLR^jtLzf0xncmV

iH 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 E2RX@VfB*mh diff --git a/polymer-perf/eduke32/rsrc/build.bmp b/polymer-perf/eduke32/rsrc/build.bmp deleted file mode 100644 index e6ee6fc6d991c6ef4812c13e4525d98a2c536a06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29080 zcmbV#2|!ap5uzVn^y_GjKpq3E&cE{Y1m)l2yN#XO3dN8Lle|KdT4TC%|VNxw1qWnyB28pkI^ zt)`aWqBk)g%5T46(7p+2L`3vcT->D+8Xaioqpbr8p>Nh^<@8y`s~oX)HU%6>hh80RKU`^ zsIk9=P=-UlqQ*6kQ~yvWQ3K6d>YLYnsBYkN;FWanud-L2BTm1Jn<; zZ0b9E5q0zP66*U471WOf;KNbSlMCMEfF|(d@5w%xpS-@Cs`{fZb^JMBYTssGs!zI@ zx^QGMb?T*M)Y&6zs0&8}sN;WHOX*Tr)UfWi)V0dpls+?z>ZnYkZhZ14^^NIus>Av| zb*;0G>X+dDK~JxE0d@7SE2#l>2=#5rX6neF9;a@8`d8}8KMSd`A|Gm`(1-dOzx&0T zK2*ljcTtvtXDD~$Ta?F9NSXD2qkjCrhw`X>sJ?f6D3{!a(jM@k2Hsyl4VA2-?p=VN zRcxTHpM90OZhxJ+dHxtR)~Ta@?EaYgvDZqCe|w%9AMK(%nB#lx�Sai>Yrj{J^<(uS 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 diff --git a/polymer-perf/eduke32/rsrc/build_icon.bmp b/polymer-perf/eduke32/rsrc/build_icon.bmp deleted file mode 100644 index fdb5e8899642d955b5730a268ef8131074945c57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2102 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 IwT<`x0|b7ztpET3 diff --git a/polymer-perf/eduke32/rsrc/game.bmp b/polymer-perf/eduke32/rsrc/game.bmp deleted file mode 100644 index ee05428d20d958af44fe8e066cedf9812ed6043d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29080 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 bfu|S>^LaE`PUu(`l1v2uSIYl~CQ1Jnw8k;A diff --git a/polymer-perf/eduke32/rsrc/game_icon.c b/polymer-perf/eduke32/rsrc/game_icon.c deleted file mode 100644 index aff10f26d..000000000 --- a/polymer-perf/eduke32/rsrc/game_icon.c +++ /dev/null @@ -1,417 +0,0 @@ -#include "sdlayer.h" - -static unsigned int sdlappicon_pixels[] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01ff0101, 0x28ff8b19, - 0x5fff8b19, 0x92ff8b19, 0xb8ff8b19, 0xd1ff8b19, 0xe3ff8b19, 0xedff8b19, - 0xedff8b19, 0xe3ff8b19, 0xd1ff8b19, 0xb8ff8b19, 0x92ff8b19, 0x5fff8b19, - 0x28ff8b19, 0x01ff0101, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x1eff8b19, 0x73ff8b19, 0xc4ff8b19, 0xf5ff8b19, - 0xffff9e3f, 0xfffeb166, 0xffffc185, 0xfffed1a6, 0xffffe1c3, 0xffffe2c5, - 0xffffe0c1, 0xffffd5ab, 0xffffc287, 0xfffeb268, 0xffffa54d, 0xffff9731, - 0xf5ff8b19, 0xc4ff8b19, 0x73ff8b19, 0x1eff8b19, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x26ff911b, 0x92ff8b19, 0xecff8b19, 0xffffa145, 0xfffecc9c, 0xffffefe1, - 0xfffffbf7, 0xfffffefd, 0xfffffefd, 0xfffffcf9, 0xfffff7ef, 0xfffff1e3, - 0xffffeddd, 0xffffe8d1, 0xfffedfc0, 0xfffedcba, 0xfffedcba, 0xffffd6ad, - 0xfffecea0, 0xfffeb874, 0xffff9935, 0xecff8b19, 0x92ff8b19, 0x26ff911b, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0cff8315, 0x7cff8b19, - 0xecff8b19, 0xffffa751, 0xfffeddbc, 0xfffff5eb, 0xfffffaf5, 0xfffffaf5, - 0xfffffcf9, 0xfffff9f3, 0xfffffaf5, 0xfffffaf5, 0xfffff5eb, 0xffffefe1, - 0xfffeecda, 0xffffe6cd, 0xfffeddbc, 0xffffdab5, 0xffffd7af, 0xfffed2a8, - 0xfffed1a6, 0xfffed4aa, 0xffffdab5, 0xfffecfa2, 0xffffa44b, 0xecff8b19, - 0x7cff8b19, 0x0cff8315, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x34ff8b19, 0xc5ff8b19, 0xffff9935, - 0xfffecd9e, 0xfffee5cc, 0xffffebd7, 0xffffefe1, 0xfffff5eb, 0xfffff8f1, - 0xfffffbf7, 0xfffffcf9, 0xfffffcf9, 0xfffffdfb, 0xfffffcf9, 0xfffffcf9, - 0xfffffbf7, 0xfffff7ef, 0xfffff1e3, 0xffffead5, 0xfffeddbc, 0xfffed0a4, - 0xfffed0a4, 0xfffed2a8, 0xffffdab5, 0xffffe2c5, 0xfffee5cc, 0xffffd7af, - 0xffff9c3b, 0xc5ff8b19, 0x34ff8b19, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x5aff8b19, 0xeeff8b19, 0xffffa44b, 0xfffed0a4, - 0xffffd9b3, 0xfffedebe, 0xfffee5cc, 0xfffeecda, 0xfffff5eb, 0xfffffbf7, - 0xfffffefd, 0xffffeddd, 0xffffd5ab, 0xffffc389, 0xfffeb670, 0xfffeab5a, - 0xffffa853, 0xfffead5e, 0xfffeb874, 0xfffecc9c, 0xffffebd7, 0xfffffaf5, - 0xffffebd7, 0xfffeddbc, 0xfffedfc0, 0xffffe2c5, 0xfffee4ca, 0xffffead5, - 0xfffff1e3, 0xfffeb46c, 0xeeff8b19, 0x5aff8b19, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x71ff8b19, 0xfcff8b19, 0xfffead5e, 0xffffc995, 0xffffcb99, - 0xfffed1a6, 0xffffdbb7, 0xffffebd7, 0xfffff9f3, 0xffffead5, 0xffffc68f, - 0xffffa751, 0xffff9c3b, 0xffff9c3b, 0xffff9c3b, 0xffff9935, 0xffff962f, - 0xffff9227, 0xffff8d1d, 0xffff8813, 0xffff8711, 0xffff850d, 0xffff9125, - 0xfffeba78, 0xffffe7cf, 0xfffff7ef, 0xfffeecda, 0xffffe7cf, 0xffffeddb, - 0xfffff4e9, 0xfffff6ed, 0xffffca97, 0xfcff8b19, 0x71ff8b19, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x71ff8b19, 0xffff8813, 0xfffead5e, 0xffffc389, 0xffffc389, 0xffffc791, - 0xfffed2a8, 0xffffeddb, 0xfffee9d4, 0xfffeae60, 0xffff942b, 0xffff9731, - 0xffff9b39, 0xffff9c3b, 0xffff9c3b, 0xffff9c3b, 0xffff9b39, 0xffff962f, - 0xffff9329, 0xffff8c1b, 0xffff8813, 0xffff8711, 0xffff8309, 0xffff8207, - 0xffff840b, 0xffff8a17, 0xfffead5e, 0xffffead5, 0xfffff7ef, 0xfffff2e5, - 0xfffff5eb, 0xfffff4e9, 0xfffff6ed, 0xffffd7af, 0xffff8e1f, 0x71ff8b19, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5aff8b19, - 0xfcff8b19, 0xfffeab5a, 0xfffebd7e, 0xfffebc7c, 0xffffc083, 0xffffd7af, - 0xfffffdfb, 0xfffeba78, 0xffff860f, 0xffff8c1b, 0xffff9125, 0xffff962f, - 0xffff9a37, 0xffff9c3b, 0xffff9c3b, 0xffff9c3b, 0xffff9b39, 0xffff9731, - 0xffff9329, 0xffff8c1b, 0xffff8813, 0xffff860f, 0xffff8309, 0xffff8207, - 0xffff860f, 0xffff8b19, 0xffff8d1d, 0xffff9023, 0xffffc58d, 0xfffffefd, - 0xfffff7ef, 0xfffff4e9, 0xfffff1e3, 0xffffefe1, 0xfffed0a4, 0xfcff8b19, - 0x5aff8b19, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x31ff8c1b, 0xedff8b19, - 0xffffa751, 0xfffebe80, 0xfffeb874, 0xfffeba78, 0xffffdbb7, 0xfffff5eb, - 0xffff9e3f, 0xffff7f01, 0xffff8309, 0xffff8813, 0xffff8f21, 0xffff942b, - 0xffff9833, 0xffff9b39, 0xffff9c3b, 0xffff9c3b, 0xffff9b39, 0xffff9731, - 0xffff9227, 0xffff8c1b, 0xffff8813, 0xffff850d, 0xffff8207, 0xffff8309, - 0xffff8915, 0xffff8d1d, 0xffff8e1f, 0xffff942b, 0xffff9731, 0xfffeb46c, - 0xfffff8f1, 0xfffff7ef, 0xffffeddb, 0xffffe7cf, 0xfffee5cc, 0xffffbf81, - 0xedff8b19, 0x31ff8c1b, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0bff8f17, 0xc8ff8b19, 0xffff9d3d, - 0xffffc68f, 0xffffc083, 0xfffebd7e, 0xffffdbb7, 0xfffeecda, 0xffff8915, - 0xfff07700, 0xfff87b00, 0xffff7f01, 0xffff840b, 0xffff8c1b, 0xffff9227, - 0xffff9731, 0xffff9b39, 0xffff9c3b, 0xffff9c3b, 0xffff9b39, 0xffff9731, - 0xffff9227, 0xffff8c1b, 0xffff8711, 0xffff850d, 0xffff8207, 0xffff850d, - 0xffff8b19, 0xffff8d1d, 0xffff9125, 0xffff9731, 0xffff9833, 0xffff9833, - 0xffffa54d, 0xffffefe1, 0xfffff2e5, 0xffffe0c1, 0xfffeddbc, 0xffffe1c3, - 0xffffa955, 0xc8ff8b19, 0x0bff8f17, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x7cff8b19, 0xffff9023, 0xffffcb99, - 0xffffc995, 0xffffc48b, 0xffffdab5, 0xfffff1e3, 0xffff8309, 0xffec7500, - 0xffee7600, 0xfff27800, 0xfffa7c00, 0xffff942b, 0xffffd7af, 0xffff9731, - 0xffff952d, 0xffff9935, 0xffff9c3b, 0xffff9c3b, 0xffff9c3b, 0xffff9731, - 0xffff9227, 0xffff8a17, 0xffff8711, 0xffff840b, 0xffff8309, 0xffff8813, - 0xffff8d1d, 0xfffeba78, 0xffffa64f, 0xffff9833, 0xffff9833, 0xffff962f, - 0xffff942b, 0xffff9b39, 0xfffff3e7, 0xffffead5, 0xffffdbb7, 0xffffdbb7, - 0xffffd7af, 0xffff9227, 0x7cff8b19, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x22ff8a17, 0xeeff8b19, 0xffffc083, 0xfffed2a8, - 0xfffecc9c, 0xfffed1a6, 0xfffffcf9, 0xffff942b, 0xffec7500, 0xffea7400, - 0xffea7400, 0xffee7600, 0xffff9f41, 0xfffff9f3, 0xffffead5, 0xfffecfa2, - 0xffff9227, 0xffff8d1d, 0xffff7f01, 0xffe06f00, 0xffc66200, 0xffb45900, - 0xffb45900, 0xffc05f00, 0xffd06700, 0xffe27000, 0xfffc7d00, 0xffff8a17, - 0xffff9d3d, 0xfffffdfb, 0xfffffaf5, 0xfffeb56e, 0xffff9731, 0xffff942b, - 0xffff8f21, 0xffff8b19, 0xffffa145, 0xfffffcf9, 0xfffedebe, 0xffffd5ab, - 0xfffed0a4, 0xffffc287, 0xeeff8b19, 0x22ff8a17, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x92ff8b19, 0xffff9c3b, 0xfffedcba, 0xffffd5ab, - 0xfffed2a8, 0xffffebd7, 0xfffeb670, 0xfffa7c00, 0xfff47900, 0xfff07700, - 0xffea7400, 0xfffeaa58, 0xfffffdfb, 0xffffd5ab, 0xffffcb99, 0xfffffcf9, - 0xffff860f, 0xffae5600, 0xffaa5400, 0xffa65200, 0xffa25000, 0xffa04f00, - 0xffa04f00, 0xffa25000, 0xffa65200, 0xffaa5400, 0xffae5600, 0xffe47100, - 0xffffd6ad, 0xfffff8f1, 0xfffff8f1, 0xfffffefd, 0xfffebd7e, 0xffff8f21, - 0xffff8c1b, 0xffff8a17, 0xffff8711, 0xfffeba78, 0xfffeecda, 0xfffecd9e, - 0xfffecc9c, 0xfffecea0, 0xffff9b39, 0x92ff8b19, 0x00000000, 0x00000000, - 0x00000000, 0x1eff8b19, 0xedff8b19, 0xfffecc9c, 0xffffe0c1, 0xffffdab5, - 0xfffee5cc, 0xffffe8d1, 0xffff8309, 0xffff8003, 0xffff7f01, 0xfff67a00, - 0xffff9f41, 0xfffffdfb, 0xffffc893, 0xfffebe80, 0xfffeb36a, 0xffffc68f, - 0xfffecc9c, 0xffa25000, 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa04f00, - 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa25000, 0xffe87300, - 0xffffeddb, 0xffffd6ad, 0xfffff3e7, 0xffffefe1, 0xfffffefd, 0xfffead5e, - 0xffff8a17, 0xffff8711, 0xffff8309, 0xffff8207, 0xffffe7cf, 0xfffedcba, - 0xffffc893, 0xffffc995, 0xffffc083, 0xedff8b19, 0x1eff8b19, 0x00000000, - 0x00000000, 0x71ff8b19, 0xffff9833, 0xffffe6cd, 0xffffe2c5, 0xfffedfc0, - 0xfffff6ed, 0xffffa853, 0xffff860f, 0xffff840b, 0xffff8207, 0xffff942b, - 0xfffff7ef, 0xfffed2a8, 0xfffeba78, 0xffffa955, 0xffffa853, 0xfffeddbc, - 0xffffffff, 0xffff8207, 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa04f00, - 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xfffecd9e, - 0xffffead5, 0xffffa853, 0xffffc995, 0xffffe2c5, 0xffffe7cf, 0xfffff8f1, - 0xffff9833, 0xffff8207, 0xffff8003, 0xffff7f01, 0xffffa145, 0xfffff1e3, - 0xffffc995, 0xffffca97, 0xfffecea0, 0xffff952d, 0x71ff8b19, 0x00000000, - 0x03ff5b01, 0xc5ff8b19, 0xfffebb7a, 0xffffe2c5, 0xfffedebe, 0xffffe6cd, - 0xffffe8d1, 0xffff8b19, 0xffff8a17, 0xffff8915, 0xffff8711, 0xffffdbb7, - 0xfffee4ca, 0xffffc893, 0xfffeb166, 0xffffa853, 0xfffee5cc, 0xffffffff, - 0xffffffff, 0xffffe6cd, 0xffa85300, 0xffa04f00, 0xffa04f00, 0xffa04f00, - 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xfffa7c00, 0xffffffff, - 0xffffffff, 0xfffee5cc, 0xffffa853, 0xffffc58d, 0xffffdab5, 0xffffe7cf, - 0xffffdbb7, 0xffff8003, 0xffff7f01, 0xfffc7d00, 0xfffc7d00, 0xfffee5cc, - 0xffffd6ad, 0xffffcb99, 0xfffecd9e, 0xfffeb268, 0xc5ff8b19, 0x03ff5b01, - 0x27ff8c1b, 0xf6ff8b19, 0xffffd6ad, 0xfffedcba, 0xfffeddbc, 0xfffff2e5, - 0xfffeb976, 0xffff8c1b, 0xffff8c1b, 0xffff8c1b, 0xffffa751, 0xfffff6ed, - 0xffffd8b1, 0xffffc893, 0xffff9a37, 0xfffeddbc, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffa145, 0xffa04f00, 0xffa04f00, 0xffa04f00, - 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xfffedcba, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffeddbc, 0xffff9a37, 0xffffc791, 0xfffecc9c, - 0xfffff2e5, 0xffff9e3f, 0xffff7f01, 0xffff7f01, 0xffff8003, 0xfffeb268, - 0xffffead5, 0xffffca97, 0xffffca97, 0xffffc893, 0xf6ff8b19, 0x27ff8c1b, - 0x5fff8b19, 0xffff9833, 0xfffedcba, 0xffffdbb7, 0xffffdbb7, 0xfffffefd, - 0xffff9125, 0xffff8a17, 0xffff8a17, 0xffff8c1b, 0xffffe1c3, 0xffffead5, - 0xfffedebe, 0xfffeb36a, 0xffffc58d, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfffff7ef, 0xffc66200, 0xffa04f00, 0xffa04f00, - 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffff8915, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffc58d, 0xfffeaa58, 0xffffca97, - 0xfffeddbc, 0xfffedebe, 0xffff7f01, 0xffff7f01, 0xffff7f01, 0xffff8711, - 0xfffffdfb, 0xfffecd9e, 0xfffecd9e, 0xfffed1a6, 0xffff962f, 0x5fff8b19, - 0x92ff8b19, 0xffffa44b, 0xfffedcba, 0xffffd9b3, 0xffffe1c3, 0xfffee4ca, - 0xffff8813, 0xffff8813, 0xffff8813, 0xffff9731, 0xfffffefd, 0xfffedfc0, - 0xfffed1a6, 0xffff9f41, 0xfffef0e0, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffc083, 0xffda6c00, 0xfffeaa58, - 0xfffeb874, 0xffff9329, 0xffbc5d00, 0xffffe6cd, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xfffef0e0, 0xffff9f41, 0xffffc185, - 0xffffcb99, 0xfffffdfb, 0xffff8d1d, 0xffff7f01, 0xffff8003, 0xffff8105, - 0xffffe3c7, 0xffffdbb7, 0xfffed0a4, 0xffffd6ad, 0xffffa247, 0x92ff8b19, - 0xbaff8b19, 0xfffeb36a, 0xffffdbb7, 0xffffd8b1, 0xffffead5, 0xffffc995, - 0xffff8813, 0xffff8813, 0xffff8813, 0xfffeb46c, 0xfffff1e3, 0xffffdbb7, - 0xfffeb874, 0xfffebd7e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffebd7e, 0xfffeaf62, - 0xfffecd9e, 0xffffeddb, 0xfffeb166, 0xffff8207, 0xffff8207, 0xffff8309, - 0xffffc893, 0xffffe6cd, 0xfffed1a6, 0xfffed4aa, 0xfffeb56e, 0xbaff8b19, - 0xd1ff8b19, 0xffffc287, 0xfffeddbc, 0xffffdab5, 0xfffff1e3, 0xfffeb772, - 0xffff8813, 0xffff8711, 0xffff8711, 0xfffecc9c, 0xfffee9d4, 0xffffd8b1, - 0xffffa54d, 0xffffd8b1, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffd8b1, 0xffffa349, - 0xfffed0a4, 0xfffee5cc, 0xffffca97, 0xffff8309, 0xffff8309, 0xffff8309, - 0xfffeb56e, 0xffffeddd, 0xfffed4aa, 0xffffd6ad, 0xffffc48b, 0xd1ff8b19, - 0xe3ff8b19, 0xfffed1a6, 0xfffeddbc, 0xffffdbb7, 0xfffff5eb, 0xfffeab5a, - 0xffff8915, 0xffff8813, 0xffff8813, 0xfffedebe, 0xfffee4ca, 0xffffd9b3, - 0xffff9833, 0xfffeecda, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffd8b1, 0xffde6e00, - 0xffa04f00, 0xffff8003, 0xffffead5, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffeecda, 0xffff9731, - 0xfffed4aa, 0xfffedfc0, 0xffffe0c1, 0xffff850d, 0xffff850d, 0xffff850d, - 0xffffa955, 0xfffff3e7, 0xffffd6ad, 0xffffd7af, 0xffffca97, 0xe3ff8b19, - 0xedff8b19, 0xffffdbb7, 0xffffe3c7, 0xffffe0c1, 0xfffff8f1, 0xffffa751, - 0xffff8c1b, 0xffff8c1b, 0xffff8c1b, 0xffffe7cf, 0xffffe6cd, 0xfffee5cc, - 0xffffa54d, 0xfffffbf7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffdfb, 0xffc66200, 0xffa04f00, - 0xffa04f00, 0xffa04f00, 0xffff7f01, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffbf7, 0xffffa44b, - 0xfffedfc0, 0xfffedfc0, 0xffffe6cd, 0xffff860f, 0xffff860f, 0xffff860f, - 0xffffa247, 0xfffff6ed, 0xffffd7af, 0xffffd8b1, 0xfffed2a8, 0xedff8b19, - 0xedff8b19, 0xfffeddbc, 0xffffe6cd, 0xfffee5cc, 0xfffff9f3, 0xffffa955, - 0xffff8f21, 0xffff8f21, 0xffff8f21, 0xffffd7af, 0xfffee9d4, 0xfffee9d4, - 0xfffedebe, 0xfffedcba, 0xfffedcba, 0xfffedcba, 0xfffedcba, 0xfffedcba, - 0xfffedcba, 0xfffff1e3, 0xffffffff, 0xfffee4ca, 0xffa04f00, 0xffa04f00, - 0xffa04f00, 0xffa04f00, 0xffb05700, 0xffffffff, 0xffffffff, 0xffffead5, - 0xfffedcba, 0xfffedcba, 0xfffedcba, 0xfffedcba, 0xfffedcba, 0xfffedebe, - 0xffffe7cf, 0xffffe7cf, 0xfffed2a8, 0xffff850d, 0xffff850d, 0xffff850d, - 0xffffa145, 0xfffff5eb, 0xffffd6ad, 0xffffd7af, 0xfffed2a8, 0xedff8b19, - 0xe3ff8b19, 0xfffeddbc, 0xffffead5, 0xffffe8d1, 0xfffff8f1, 0xfffeb166, - 0xffff9125, 0xffff9227, 0xffff9227, 0xffff9227, 0xffff9227, 0xffff9227, - 0xffc46100, 0xffa25000, 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa04f00, - 0xffa04f00, 0xffffa853, 0xffffffff, 0xfffff9f3, 0xffb85b00, 0xffa04f00, - 0xffa04f00, 0xffa04f00, 0xffea7400, 0xffffffff, 0xffffffff, 0xffff8915, - 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa25000, 0xffbe5e00, - 0xffff850d, 0xffff850d, 0xffff850d, 0xffff850d, 0xffff850d, 0xffff850d, - 0xffffa955, 0xfffff3e7, 0xffffd6ad, 0xffffd6ad, 0xfffecea0, 0xe3ff8b19, - 0xd1ff8b19, 0xfffed1a6, 0xffffeddb, 0xffffebd7, 0xfffff7ef, 0xfffebd7e, - 0xffff9227, 0xffff942b, 0xffff942b, 0xffff942b, 0xffff942b, 0xffff9329, - 0xffda6c00, 0xffa65200, 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa04f00, - 0xffa04f00, 0xffff8d1d, 0xffffffff, 0xffffffff, 0xffffcb99, 0xffb85b00, - 0xffa04f00, 0xffd26800, 0xffffe2c5, 0xffffffff, 0xffffffff, 0xffd26800, - 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa65200, 0xffd06700, - 0xffff860f, 0xffff860f, 0xffff850d, 0xffff850d, 0xffff850d, 0xffff850d, - 0xfffeb56e, 0xfffeeee0, 0xffffd6ad, 0xffffd8b1, 0xffffc48b, 0xd1ff8b19, - 0xbaff8b19, 0xffffc083, 0xfffeeee0, 0xffffeddb, 0xfffff4e9, 0xfffecea0, - 0xffff9329, 0xffff942b, 0xffff9329, 0xffff9329, 0xffff9125, 0xffff9125, - 0xfff07700, 0xffaa5400, 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa04f00, - 0xffa04f00, 0xffac5500, 0xffffe6cd, 0xffffffff, 0xffffffff, 0xffffffff, - 0xfffff3e7, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffecd9e, 0xffa04f00, - 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffaa5400, 0xffe67200, - 0xffff850d, 0xffff850d, 0xffff850d, 0xffff850d, 0xffff850d, 0xffff860f, - 0xffffc893, 0xfffee9d4, 0xffffd7af, 0xffffd9b3, 0xfffeb772, 0xbaff8b19, - 0x92ff8b19, 0xfffead5e, 0xfffeeee0, 0xffffeddb, 0xffffefe1, 0xffffe6cd, - 0xffff9227, 0xffff9125, 0xffff9125, 0xffff8f21, 0xffff8e1f, 0xffff8d1d, - 0xffff8309, 0xffae5600, 0xffa25000, 0xffa04f00, 0xffa04f00, 0xffa04f00, - 0xffa04f00, 0xffa04f00, 0xffd66a00, 0xfffee4ca, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xfffecfa2, 0xffbc5d00, 0xffa04f00, - 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa25000, 0xffae5600, 0xfffa7c00, - 0xffff840b, 0xffff840b, 0xffff850d, 0xffff850d, 0xffff850d, 0xffff850d, - 0xffffe3c7, 0xffffe0c1, 0xffffd8b1, 0xffffdab5, 0xffffa54d, 0x92ff8b19, - 0x5fff8b19, 0xffff9b39, 0xffffeddd, 0xffffebd7, 0xfffee9d4, 0xfffffefd, - 0xffff9833, 0xffff8f21, 0xffff8d1d, 0xffff8c1b, 0xffff8c1b, 0xffff8915, - 0xffff860f, 0xffdc6d00, 0xffa85300, 0xffa04f00, 0xffa04f00, 0xffa04f00, - 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xfffeb670, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffff9329, 0xffa04f00, 0xffa04f00, - 0xffa04f00, 0xffa04f00, 0xffa04f00, 0xffa85300, 0xffda6c00, 0xffff8105, - 0xffff8207, 0xffff8309, 0xffff850d, 0xffff850d, 0xffff850d, 0xffff8e1f, - 0xfffffefd, 0xffffd7af, 0xffffd7af, 0xffffdab5, 0xffff9731, 0x5fff8b19, - 0x27ff8c1b, 0xf6ff8b19, 0xffffe1c3, 0xffffe6cd, 0xfffee4ca, 0xfffff4e9, - 0xfffeb976, 0xffff8c1b, 0xffff8a17, 0xffff8915, 0xffff860f, 0xffff8207, - 0xffff8003, 0xfff67a00, 0xffae5600, 0xffa45100, 0xffa04f00, 0xffa04f00, - 0xffa04f00, 0xffa04f00, 0xffea7400, 0xfffffdfb, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xfffff3e7, 0xffb85b00, 0xffa04f00, - 0xffa04f00, 0xffa04f00, 0xffa45100, 0xffae5600, 0xfff27800, 0xffff7f01, - 0xffff8003, 0xffff8105, 0xffff8207, 0xffff8309, 0xffff8309, 0xfffeb36a, - 0xfffeeee0, 0xffffd5ab, 0xffffd6ad, 0xfffed4aa, 0xf6ff8b19, 0x27ff8c1b, - 0x03ff5b01, 0xc5ff8b19, 0xffffbf81, 0xfffee5cc, 0xffffe2c5, 0xffffe7cf, - 0xffffe6cd, 0xffff8813, 0xffff850d, 0xffff8309, 0xffff8105, 0xffff7f01, - 0xffff7f01, 0xffff8003, 0xffea7400, 0xffac5500, 0xffa45100, 0xffa04f00, - 0xffa04f00, 0xffa45100, 0xfffedebe, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffc083, 0xffa04f00, - 0xffa04f00, 0xffa45100, 0xffac5500, 0xffe87300, 0xfffa7c00, 0xfffa7c00, - 0xfffc7d00, 0xffff7f01, 0xffff8003, 0xffff8207, 0xffff8309, 0xfffee5cc, - 0xfffedcba, 0xfffed2a8, 0xffffd6ad, 0xfffeb874, 0xc5ff8b19, 0x03ff5b01, - 0x00000000, 0x71ff8b19, 0xffff9731, 0xfffee4ca, 0xfffeddbc, 0xffffd9b3, - 0xfffff4e9, 0xffffa44b, 0xffff8105, 0xffff7f01, 0xffff7f01, 0xffff7f01, - 0xffff7f01, 0xffff7f01, 0xffff7f01, 0xffe27000, 0xffac5500, 0xffa45100, - 0xffa04f00, 0xffffa145, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffa7c00, - 0xffa45100, 0xffac5500, 0xffe47100, 0xffff7f01, 0xffff7f01, 0xfffc7d00, - 0xfffc7d00, 0xfffa7c00, 0xffff7f01, 0xffff7f01, 0xffffa145, 0xfffff3e7, - 0xfffed0a4, 0xfffed2a8, 0xffffd7af, 0xffff962f, 0x71ff8b19, 0x00000000, - 0x00000000, 0x1eff8b19, 0xedff8b19, 0xffffc791, 0xffffd9b3, 0xfffed4aa, - 0xfffedebe, 0xffffe7cf, 0xffff8003, 0xffff7f01, 0xffff7f01, 0xffff7f01, - 0xffff7f01, 0xffff7f01, 0xfffc7d00, 0xffff7f01, 0xffec7500, 0xffae5600, - 0xffd86b00, 0xfffff7ef, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffff4e9, 0xffffe7cf, - 0xffb65a00, 0xffee7600, 0xffff8003, 0xffff7f01, 0xffff8003, 0xffff7f01, - 0xfffc7d00, 0xfffa7c00, 0xfffa7c00, 0xffff7f01, 0xffffe7cf, 0xfffeddbc, - 0xfffecc9c, 0xfffed1a6, 0xffffc68f, 0xedff8b19, 0x1eff8b19, 0x00000000, - 0x00000000, 0x00000000, 0x92ff8b19, 0xffff9731, 0xfffed4aa, 0xfffecc9c, - 0xffffcb99, 0xffffead5, 0xfffeb772, 0xffff7f01, 0xffff7f01, 0xffff7f01, - 0xfffc7d00, 0xfffc7d00, 0xffff7f01, 0xffff8207, 0xffff8309, 0xffff8003, - 0xffffd7af, 0xffffca97, 0xfffebd7e, 0xffffd8b1, 0xfffeecda, 0xfffffaf5, - 0xfffffaf5, 0xfffeecda, 0xffffd8b1, 0xfffebd7e, 0xffff9f41, 0xfffeddbc, - 0xffffc287, 0xffff850d, 0xffff8309, 0xffff8003, 0xffff7f01, 0xffff7f01, - 0xffff7f01, 0xffff7f01, 0xfffc7d00, 0xfffeb56e, 0xffffe8d1, 0xffffc791, - 0xffffca97, 0xfffed0a4, 0xffff9e3f, 0x92ff8b19, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x22ff8a17, 0xeeff8b19, 0xfffeba78, 0xfffecc9c, - 0xffffcb99, 0xffffd5ab, 0xfffffcf9, 0xffff9731, 0xffff7f01, 0xfffc7d00, - 0xfffc7d00, 0xffff7f01, 0xffff8105, 0xffff8309, 0xffff850d, 0xfffeb166, - 0xfffff4e9, 0xfffed1a6, 0xfffeba78, 0xffffa751, 0xffff9935, 0xffff8f21, - 0xffff8f21, 0xffff9935, 0xffffa64f, 0xfffeb874, 0xfffecd9e, 0xffffdab5, - 0xfffffcf9, 0xffff9935, 0xffff850d, 0xffff8207, 0xffff7f01, 0xffff7f01, - 0xffff7f01, 0xffff7f01, 0xffff9731, 0xfffffcf9, 0xfffecfa2, 0xffffc68f, - 0xffffc995, 0xffffbf81, 0xeeff8b19, 0x22ff8a17, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x7cff8b19, 0xffff8d1d, 0xfffecc9c, - 0xfffecd9e, 0xfffecc9c, 0xffffe0c1, 0xfffff1e3, 0xffff8c1b, 0xfffc7d00, - 0xffff7f01, 0xffff8003, 0xffff8207, 0xffff840b, 0xffff8e1f, 0xfffff5eb, - 0xffffead5, 0xffffe0c1, 0xfffeddbc, 0xfffeddbc, 0xffffe1c3, 0xfffee5cc, - 0xffffe6cd, 0xffffe1c3, 0xfffedcba, 0xffffdbb7, 0xffffdbb7, 0xffffe6cd, - 0xfffff4e9, 0xffffc58d, 0xffff850d, 0xffff8309, 0xffff8105, 0xffff7f01, - 0xffff7f01, 0xffff8c1b, 0xfffff2e5, 0xffffe0c1, 0xffffc893, 0xffffc893, - 0xffffca97, 0xffff942b, 0x7cff8b19, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0bff8f17, 0xc8ff8b19, 0xffff9c3b, - 0xfffecfa2, 0xffffca97, 0xffffc995, 0xffffe3c7, 0xffffeddb, 0xffff9023, - 0xffff8003, 0xffff8105, 0xffff8309, 0xffff850d, 0xffff8813, 0xffffa955, - 0xffffe0c1, 0xfffffdfb, 0xfffff3e7, 0xffffebd7, 0xffffeddb, 0xffffebd7, - 0xfffeecda, 0xffffeddb, 0xffffebd7, 0xfffff2e5, 0xfffffcf9, 0xfffedfc0, - 0xffffa54d, 0xffff8309, 0xffff840b, 0xffff850d, 0xffff840b, 0xffff8105, - 0xffff9023, 0xffffeddb, 0xfffee5cc, 0xffffcb99, 0xffffca97, 0xffffcb99, - 0xffffa64f, 0xc8ff8b19, 0x0bff8f17, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x31ff8c1b, 0xedff8b19, - 0xfffeac5c, 0xffffcb99, 0xffffc995, 0xffffc893, 0xffffe2c5, 0xfffff6ed, - 0xffffa145, 0xffff8207, 0xffff850d, 0xffff8711, 0xffff8a17, 0xffff8c1b, - 0xffff8c1b, 0xffff9227, 0xfffeb268, 0xfffed0a4, 0xffffd6ad, 0xfffee9d4, - 0xfffee9d4, 0xffffd6ad, 0xfffed0a4, 0xfffeb268, 0xffff9023, 0xffff8813, - 0xffff8711, 0xffff850d, 0xffff840b, 0xffff850d, 0xffff850d, 0xffffa145, - 0xfffff6ed, 0xffffe2c5, 0xffffcb99, 0xffffcb99, 0xfffecd9e, 0xfffeb772, - 0xedff8b19, 0x31ff8c1b, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5aff8b19, - 0xfcff8b19, 0xfffeb772, 0xfffecc9c, 0xffffca97, 0xfffecc9c, 0xffffe0c1, - 0xfffffefd, 0xfffebd7e, 0xffff860f, 0xffff8813, 0xffff8a17, 0xffff8b19, - 0xffff8b19, 0xffff8a17, 0xffff8915, 0xffff8b19, 0xffff8d1d, 0xffff8f21, - 0xffff9023, 0xffff8d1d, 0xffff8a17, 0xffff8813, 0xffff8813, 0xffff8813, - 0xffff8813, 0xffff860f, 0xffff840b, 0xffff840b, 0xfffebd7e, 0xfffffefd, - 0xffffe1c3, 0xfffecd9e, 0xffffcb99, 0xfffecd9e, 0xffffc083, 0xfcff8b19, - 0x5aff8b19, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x71ff8b19, 0xffff8a17, 0xfffeb976, 0xfffecea0, 0xfffecfa2, 0xfffed0a4, - 0xffffd9b3, 0xfffeeee0, 0xfffee9d4, 0xffffa64f, 0xffff8c1b, 0xffff8c1b, - 0xffff8a17, 0xffff8a17, 0xffff8915, 0xffff8c1b, 0xffff8d1d, 0xffff8f21, - 0xffff8f21, 0xffff8e1f, 0xffff8b19, 0xffff8813, 0xffff8813, 0xffff8813, - 0xffff8813, 0xffff860f, 0xffffa247, 0xffffe8d1, 0xffffeddd, 0xffffdab5, - 0xfffed2a8, 0xfffed4aa, 0xfffecfa2, 0xffffc185, 0xffff8f21, 0x71ff8b19, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x71ff8b19, 0xfcff8b19, 0xfffeb46c, 0xfffed0a4, 0xffffd5ab, - 0xffffd5ab, 0xffffd8b1, 0xffffe7cf, 0xfffff7ef, 0xffffe6cd, 0xffffbf81, - 0xffff9833, 0xffff8915, 0xffff8a17, 0xffff8c1b, 0xffff8e1f, 0xffff9023, - 0xffff8f21, 0xffff8e1f, 0xffff8c1b, 0xffff8a17, 0xffff8813, 0xffff962f, - 0xfffebd7e, 0xffffe6cd, 0xfffff5eb, 0xffffe3c7, 0xfffed4aa, 0xffffd6ad, - 0xffffd6ad, 0xffffd5ab, 0xfffebb7a, 0xfcff8b19, 0x71ff8b19, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x5aff8b19, 0xeeff8b19, 0xffffa54d, 0xffffd7af, - 0xffffdbb7, 0xffffdbb7, 0xfffeddbc, 0xfffedfc0, 0xffffe7cf, 0xfffff1e3, - 0xfffffbf7, 0xffffead5, 0xfffed0a4, 0xfffebe80, 0xfffeba78, 0xffffa955, - 0xffffa955, 0xfffebb7a, 0xfffebe80, 0xfffecfa2, 0xffffead5, 0xfffffbf7, - 0xfffeeee0, 0xffffe3c7, 0xffffd7af, 0xffffd5ab, 0xfffed4aa, 0xffffd9b3, - 0xffffd8b1, 0xfffeaa58, 0xeeff8b19, 0x5aff8b19, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x34ff8b19, 0xc5ff8b19, 0xffff952d, - 0xffffc995, 0xfffedfc0, 0xffffe1c3, 0xffffe1c3, 0xfffedfc0, 0xfffedebe, - 0xffffdbb7, 0xffffe2c5, 0xffffebd7, 0xfffff2e5, 0xfffff3e7, 0xfffff9f3, - 0xfffff9f3, 0xfffff4e9, 0xfffff2e5, 0xffffebd7, 0xffffe2c5, 0xfffedcba, - 0xfffedcba, 0xffffdab5, 0xffffdbb7, 0xffffd9b3, 0xffffd7af, 0xffffc995, - 0xffff9833, 0xc5ff8b19, 0x34ff8b19, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0cff8315, 0x7cff8b19, - 0xecff8b19, 0xffff9f41, 0xfffecfa2, 0xfffee4ca, 0xffffe1c3, 0xfffedebe, - 0xfffedcba, 0xfffedcba, 0xfffedebe, 0xffffe1c3, 0xffffe2c5, 0xffffe6cd, - 0xffffe7cf, 0xfffee5cc, 0xffffe1c3, 0xfffeddbc, 0xfffedcba, 0xffffdbb7, - 0xffffdbb7, 0xfffedebe, 0xfffedcba, 0xfffecfa2, 0xffffa349, 0xecff8b19, - 0x7cff8b19, 0x0cff8315, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x26ff911b, 0x92ff8b19, 0xecff8b19, 0xffff952d, 0xfffebb7a, 0xffffd8b1, - 0xffffe1c3, 0xffffe2c5, 0xffffe1c3, 0xffffe3c7, 0xfffee4ca, 0xffffe8d1, - 0xfffee9d4, 0xffffe7cf, 0xfffee4ca, 0xffffe1c3, 0xffffe0c1, 0xfffeddbc, - 0xffffd7af, 0xfffebe80, 0xffff9a37, 0xecff8b19, 0x92ff8b19, 0x26ff911b, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x1eff8b19, 0x73ff8b19, 0xc4ff8b19, 0xf5ff8b19, - 0xffff962f, 0xffffa54d, 0xfffeb772, 0xffffc893, 0xffffd7af, 0xfffedcba, - 0xfffedcba, 0xffffd8b1, 0xffffc995, 0xfffeb976, 0xffffa853, 0xffff9731, - 0xf5ff8b19, 0xc4ff8b19, 0x73ff8b19, 0x1eff8b19, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01ff0101, 0x28ff8b19, - 0x5fff8b19, 0x92ff8b19, 0xb8ff8b19, 0xd1ff8b19, 0xe3ff8b19, 0xedff8b19, - 0xedff8b19, 0xe3ff8b19, 0xd1ff8b19, 0xb8ff8b19, 0x92ff8b19, 0x5fff8b19, - 0x28ff8b19, 0x01ff0101, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -}; - -static unsigned char sdlappicon_mask[] = { - 0, 0, 255, 255, 0, 0, 0, 192, 255, 255, 3, 0, 0, 240, - 255, 255, 15, 0, 0, 252, 255, 255, 63, 0, 0, 254, 255, 255, - 127, 0, 0, 255, 255, 255, 255, 0, 128, 255, 255, 255, 255, 1, - 192, 255, 255, 255, 255, 3, 224, 255, 255, 255, 255, 7, 240, 255, - 255, 255, 255, 15, 248, 255, 255, 255, 255, 31, 248, 255, 255, 255, - 255, 31, 252, 255, 255, 255, 255, 63, 252, 255, 255, 255, 255, 63, - 254, 255, 255, 255, 255, 127, 254, 255, 255, 255, 255, 127, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, - 255, 127, 254, 255, 255, 255, 255, 127, 252, 255, 255, 255, 255, 63, - 252, 255, 255, 255, 255, 63, 248, 255, 255, 255, 255, 31, 248, 255, - 255, 255, 255, 31, 240, 255, 255, 255, 255, 15, 224, 255, 255, 255, - 255, 7, 192, 255, 255, 255, 255, 3, 128, 255, 255, 255, 255, 1, - 0, 255, 255, 255, 255, 0, 0, 254, 255, 255, 127, 0, 0, 252, - 255, 255, 63, 0, 0, 240, 255, 255, 15, 0, 0, 192, 255, 255, - 3, 0, 0, 0, 255, 255, 0, 0,}; - -struct sdlappicon sdlappicon = { - 48,48, // width,height - sdlappicon_pixels, - sdlappicon_mask -}; diff --git a/polymer-perf/eduke32/rsrc/game_icon.ico b/polymer-perf/eduke32/rsrc/game_icon.ico deleted file mode 100644 index 67eaeae9a327fbff4387f713334cde55280fdb5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26694 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 IwT<`x0|b7ztpET3 diff --git a/polymer-perf/eduke32/rsrc/manifest.build.xml b/polymer-perf/eduke32/rsrc/manifest.build.xml deleted file mode 100644 index 7eca5865e..000000000 --- a/polymer-perf/eduke32/rsrc/manifest.build.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - -Mapster32 for EDuke32 - - - - - - diff --git a/polymer-perf/eduke32/rsrc/manifest.game.xml b/polymer-perf/eduke32/rsrc/manifest.game.xml deleted file mode 100644 index ae2e29158..000000000 --- a/polymer-perf/eduke32/rsrc/manifest.game.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - -EDuke32 - - - - - - diff --git a/polymer-perf/eduke32/samples/_clipshape0.map b/polymer-perf/eduke32/samples/_clipshape0.map deleted file mode 100644 index c1a3b7afb9688029c0c4fd63f3747b0a0c747691..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23858 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 diff --git a/polymer-perf/eduke32/samples/a.m32 b/polymer-perf/eduke32/samples/a.m32 deleted file mode 100644 index 860be045d..000000000 --- a/polymer-perf/eduke32/samples/a.m32 +++ /dev/null @@ -1,1145 +0,0 @@ -// m32 script editor extensions. -// to load, enter "include samples/a" (without quotes) in the console -// or into a file named m32_autoexec.cfg for automatic loading on startup. -// to enable all events, "enableevent all" - -////////// USER SETTINGS ////////// - -// settings for the tweaking of Polymer pr_override*-variables with the keypad keys -define MINPARALLAXSCALE -10 // minimum pr_parallaxscale value -define MAXPARALLAXSCALE 10 -define MINPARALLAXBIAS -10 -define MAXPARALLAXBIAS 10 -define PSCALESTEPS 1000 // 0..1 is mapped to 0..PSCALESTEPS -define PBIASSTEPS 1000 - -define MINSPECULARPOWER -10 -define MAXSPECULARPOWER 1000 -define MINSPECULARFACTOR -10 -define MAXSPECULARFACTOR 1000 -define SPOWERSTEPS 100 -define SFACTORSTEPS 100 - -// color of various drawing enhancements -define PREVIEW_DRAW_COLOR 11 -gamevar showpal 0 0 - -// whether to use overridden aspect/range values when entering 3d mode (software/Polymost). -// tweak with keys 7,8,9,0 on the top row -gamevar use_custom_aspect 0 0 // this is now the same as r_usenewaspect -gamevar davr 65536 0 -gamevar dayx 65536 0 - - -// see end of file for more user settings and examples - -////////// END USER SETTINGS ////////// - - -include names.h - -// flag 1: per-block (top-level, event, or state) variable -gamevar i 0 1 -gamevar j 0 1 -gamevar k 0 1 - -gamevar p 0 1 -gamevar r 0 1 - -gamevar x 0 0 -gamevar y 0 0 -gamevar z 0 0 - -gamevar dx 0 0 -gamevar dy 0 0 -gamevar dz 0 0 -gamevar dang 0 0 - -gamevar tmp 0 0 -gamevar cnt 0 0 - -gamevar drawcol 9 0 - - -define TQUOTE 0 -definequote TQUOTE >>> write on me! <<< - -//light -define LIGHTQUOTE 1 -// x y z r g b mins maxs -definequote LIGHTQUOTE light %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d -// sec range radius fade ang horiz prio tile - - -define PRSCALE 1000 -define MAXSPECULAR 100000 - -define TMPARLEN 128 -gamearray ar TMPARLEN -gamearray xx TMPARLEN -gamearray yy TMPARLEN - -gamearray parm 8 - -// prints out maphack light definitions based on SE lights in map -defstate printlights - var flags - - print "--PRLIGHTS--" - for i allsprites, ifactor SECTOREFFECTOR, ifge .lotag 49, ifle .lotag 50 - { - ife .lotag 50 - { - set j 128, sub j .shade, shiftl j 1 - set k j, mul k 3, div k 4 - } - else - { - set j 0, set k 0 - } - - set flags 0 - ifand .cstat 2 - { - ifand .cstat 512 - set flags 4 - else - set flags 2 - } - // range r g b - qsprintf TQUOTE LIGHTQUOTE .sectnum .x .y .z .hitag .xvel .yvel .zvel - j k .ang .extra .xoffset .yoffset flags .owner - // radius fade horiz minshade maxshade prio tile - print TQUOTE - } - print "--ENDPRLIGHTS--" -ends - -// convenient polymer SE light manipulation with keypad keys -// when aiming at light SE (49 or 50): -// KP 4,5,6,8: angle/horiz -// KP 7,9: range -// KP+/-: radius -// KP 1,2,3: RGB color (Shift inverts) -// -// when aiming at wall or sector: -// ----Alt-KP/ enable/disable parallax override /// none, toggle them manually in the OSD -// ----Alt-KP* enable/disable bias override /// none, toggle them manually in the OSD -// when the respective overrides are on: -// KP 5,8: parallaxscale -// KP 4,6: parallaxbias -// KP /,*: specularfactor -// KP 7,9: specularpower -// -// Also try Shift and/or Ctrl modifiers for different increments -defstate fiddlewithlights - var minval maxval -/* - ifaimingsprite nullop else - { - ifeithershift ifhitkey KEY_gSLASH - { - xor pr_overrideparallax 1, and pr_overrideparallax 1 - ife pr_overrideparallax 1 - quote "OVERRIDE POLYMER PARALLAX: ON" - else - quote "OVERRIDE POLYMER PARALLAX: OFF" - } - else ifeithershift ifhitkey KEY_gSTAR - { - xor pr_overridespecular 1, and pr_overridespecular 1 - ife pr_overridespecular 1 - quote "OVERRIDE POLYMER SPECULAR: ON" - else - quote "OVERRIDE POLYMER SPECULAR: OFF" - } - } -*/ - // if aiming at sector or wall - ifaimingsprite nullop - else ifn pr_overrideparallax 0 - { - set j 0 set k 0 - - ifhitkey KEY_KP5 set j -1, ifhitkey KEY_KP8 set j 1 - ifn j 0 set k 1 - - ifhitkey KEY_KP4 set j -1, ifhitkey KEY_KP6 set j 1 - ife k 0 ifn j 0 set k 2 - - ifeitheralt mul j 10 - ifeitherctrl mul j 10 - - switch k - // "break" breaks too far or there's something wrong with the switch -- needs to be looked at -// case 0: break; - case 1: - { - set k pr_parallaxscale - ftoi k PSCALESTEPS // must convert to scaled integer, maps 0..1 to 0..PARALLAXSTEPS - set minval MINPARALLAXSCALE, mul minval PSCALESTEPS - set maxval MAXPARALLAXSCALE, mul maxval PSCALESTEPS - add k j, clamp k minval maxval - itof k PSCALESTEPS // convert back - qsprintf TQUOTE "PARALLAX SCALE: %f" k, quote TQUOTE - set pr_parallaxscale k - break; - } - case 2: - { - set k pr_parallaxbias - ftoi k PBIASSTEPS - set minval MINPARALLAXBIAS, mul minval PBIASSTEPS - set maxval MAXPARALLAXBIAS, mul maxval PBIASSTEPS - add k j, clamp k minval maxval - itof k PBIASSTEPS - qsprintf TQUOTE "PARALLAX BIAS: %f" k, quote TQUOTE - set pr_parallaxbias k - break; - } - endswitch -//quote "zxczxc" - } -//quote "asdasd" - // if aiming at sector or wall - ifaimingsprite nullop - else ifn pr_overridespecular 0 - { - set j 0 set k 0 - - ifhitkey KEY_gSLASH set j -1, ifhitkey KEY_gSTAR set j 1 - ifn j 0 set k 3 - - ifhitkey KEY_KP7 set j -1, ifhitkey KEY_KP9 set j 1 - ife k 0 ifn j 0 set k 4 - - ifeitheralt mul j 10 - ifeitherctrl mul j 10 - - switch k -// case 0: break; - case 3: - { - set k pr_specularfactor - ftoi k SFACTORSTEPS - set minval MINSPECULARFACTOR, mul minval SFACTORSTEPS - set maxval MAXSPECULARFACTOR, mul maxval SFACTORSTEPS - add k j, clamp k minval maxval - itof k SFACTORSTEPS - qsprintf TQUOTE "SPECULAR FACTOR: %f" k, quote TQUOTE - set pr_specularfactor k - break; - } - case 4: - { - set k pr_specularpower - ftoi k SPOWERSTEPS - set minval MINSPECULARPOWER, mul minval SPOWERSTEPS - set maxval MAXSPECULARPOWER, mul maxval SPOWERSTEPS - add k j, clamp k minval maxval - itof k SPOWERSTEPS - qsprintf TQUOTE "SPECULAR POWER: %f" k, quote TQUOTE - set pr_specularpower k - break; - } - endswitch - } - -//quote "qweqwe" - // if aiming at a sprite that's not a Polymer light - ifaimingsprite set k 1 else set k 0 - - ife k 1 ife sprite[searchwall].picnum SECTOREFFECTOR - ifge sprite[searchwall].lotag 49 ifle sprite[searchwall].lotag 50 - set k 0 - - ife k 1 - { - seti searchwall - - // [xyz]vel / owner - ifeitheralt - { - ifhitkey KEY_KP1 - { - getnumber256 .xvel "XVEL: " 0 - getnumber256 .yvel "YVEL: " 0 - getnumber256 .zvel "ZVEL: " 0 - } - else ifhitkey KEY_KP2 - { - getnumber256 .owner "OWNER: " 0 - ifl .owner 0 set .owner -1 - } - } - } - - - // if aiming at an SE with lotag 49 or 50 (Polymer light) - ifaimingsprite ife sprite[searchwall].picnum SECTOREFFECTOR - ifge sprite[searchwall].lotag 49 ifle sprite[searchwall].lotag 50 - { - set i searchwall, seti i // set current sprite = targeted sprite - - ife .lotag 50 - { - // horiz - ifeithershift set j 1 else set j 10 - ifhitkey KEY_gUP add .extra j - else ifhitkey KEY_gKP5 sub .extra j - clamp .extra -500 500 - - // angle - set j 128 - ifeitherctrl set j 4 - ifeithershift { ifeitherctrl set j 1 else set j 32 } - ifhitkey KEY_gLEFT sub .ang j - else ifhitkey KEY_gRIGHT add .ang j - - // radius - ifeitherctrl - { - ifholdkey KEY_gMINUS add .shade 9 - else ifholdkey KEY_gPLUS sub .shade 9 - - clamp .shade -118 117 - } - } - - // range - ifeithershift set j 10 - else ifeitherctrl set j 1000 - else set j 100 - ifhitkey KEY_KP9 add .hitag j - else ifhitkey KEY_KP7 sub .hitag j - clamp .hitag 0 16000 - - // min/max shade - ifeithershift set j -1 else set j 1 - ifeitherctrl - { - ifhitkey KEY_gSLASH - { - set .xoffset 0 - set .yoffset 0 - quote "Reset X and Y OFFSET (min/max shade) to 0" - } - } - else - { - set k 0 - ifhitkey KEY_gSLASH { add .xoffset j, set k 1 } - else ifhitkey KEY_gSTAR { add .yoffset j, set k 1 } - - ife k 1 - { - qsprintf TQUOTE "XY OFFSET (min/max shade): %d %d" .xoffset .yoffset - quote TQUOTE - } - } - - // color/picnum - ifeitheralt - { - ifhitkey KEY_KP1 - { - getnumber256 .xvel "XVEL (red): " 255 - getnumber256 .yvel "YVEL (green): " 255 - getnumber256 .zvel "ZVEL (blue): " 255 - } - else ifhitkey KEY_KP2 - { - getnumber256 .owner "OWNER (projection picnum): " -MAXTILES - ifl .owner 0 set .owner -1 - } - } - else - { - ifeitherctrl set j 1 else set j 10 - ifeithershift inv j - - set k 0 - ifhitkey KEY_B { add .xvel j, set k 1 } - ifhitkey KEY_N { add .yvel j, set k 1 } - ifhitkey KEY_M { add .zvel j, set k 1 } - - ifhitkey KEY_KP1 { add .xvel j, set k 1 } - ifhitkey KEY_KP2 { add .yvel j, set k 1 } - ifhitkey KEY_KP3 { add .zvel j, set k 1 } - - ife k 1 - { - clamp .xvel 1 255 - clamp .yvel 1 255 - clamp .zvel 1 255 - - qsprintf TQUOTE "XYZ VEL (RGB color): %d %d %d" .xvel .yvel .zvel - quote TQUOTE - } - } - } -ends - -// forward refs -defstate userkeys_3d ends -defstate userdrawlabel ends - -onevent EVENT_PREKEYS3D -// state testkeyavail - state fiddlewithlights - state userkeys_3d -endevent - - -// rotate highlighted sprites around selected (closest to mouse) sprite -// global parameter: dang -defstate rotselspr - ifg highlightcnt 0 - ifge pointhighlight 16384, ifl pointhighlight 32768 - { - ife dang 0 return - - set p pointhighlight, and p 16383 - - add sprite[p].ang dang - - for i selsprites, ifn i p - { - rotatepoint sprite[p].x sprite[p].y .x .y dang (x y) - add .ang dang - bsetsprite I x y .z - } - } -ends - -onevent EVENT_PREKEYS2D -// state testkeyavail - - set j 0 - ifeitherctrl - { - ifhitkey KEY_COMMA set j -1 - ifhitkey KEY_PERIOD set j 1 - } - - ifn j 0 - { - mul j 512 - set dang j - state rotselspr - } -endevent - -gamevar fyx 0 0 -gamevar fvr 0 0 - -defstate setas - set fyx dayx - mul fyx 4 mul fyx 100 // the correction factor 100/107 has been found - div fyx 3 div fyx 107 // out experimentally. squares ftw! - set fvr davr - mul fvr xdim mul fvr 3 - div fvr ydim div fvr 4 - setaspect fvr fyx //davr dayx -ends - -onevent EVENT_ENTER3DMODE - ifn use_custom_aspect 0 - state setas -endevent - - -defstate cmp_by_lotag // comparator subroutine for sorting - set RETURN sprite[SV2].lotag - sub RETURN sprite[SV1].lotag -ends - -defstate connectlocators - // connect LOCATORS in a sector with lines - getarraysize ar tmp - set j 0 - for i spritesofsector cursectnum - { - ifge j tmp nullop else - ifactor LOCATORS - { - set ar[j] i - add j 1 - } - } - - set tmp j - sort ar tmp cmp_by_lotag - - sub tmp 1 - for i range tmp - { - set j ar[i] - set k i, add k 1, set k ar[k] - drawline16z sprite[j].x sprite[j].y sprite[j].z sprite[k].x sprite[k].y sprite[k].z drawcol - } -ends - -defstate draw_prlightprojections -////////// polymer light 2d projections ////////// - var c d h r x2 y2 oldpat - - array xx 2 - array yy 2 - - set oldpat drawlinepat - set drawlinepat 0x11111111 - for i spritesofsector cursectnum - { - ifactor SECTOREFFECTOR - { - ife .lotag 49 // point light - { - set d .hitag // light distance - mul d d, mul d 2, sqrt d d, div d 2 - - getclosestcol .xvel .yvel .zvel c // light color - inv c - - set x .x, set x2 .x, set y .y, set y2 .y - add x d, add y d, sub x2 d, sub y2 d - drawline16z x y .z x2 y2 .z c - - set x .x, set x2 .x, set y .y, set y2 .y - add x d, sub y d, sub x2 d, add y2 d - drawline16z x y .z x2 y2 .z c - drawcircle16z .x .y .z .hitag c - } - else ife .lotag 50 // spot light - { - set d .hitag // light distance - and d 65535 - set r 128, sub r .shade, shiftl r 1 // light cone radius (BUILD angles) - getclosestcol .xvel .yvel .zvel c // light color - inv c - - set x .x, set y .y, add x d - rotatepoint .x .y x y .ang x y - - set h .extra // horiz - sub h 100 - set tmp h, mul tmp tmp, add tmp 40000 - sqrt tmp tmp - divscale h 200 tmp 15 // h: horizontal distance fraction - - set dx .x, sub dx x - set dy .y, sub dy y - set tmp 32768, sub tmp h - mulscale dx dx tmp 15 - mulscale dy dy tmp 15 - - set tmp 0, sub tmp r - rotatepoint .x .y x y tmp xx[0] yy[0] - set tmp 0, add tmp r - rotatepoint .x .y x y tmp xx[1] yy[1] - - add xx[0] dx, add yy[0] dy - add xx[1] dx, add yy[1] dy - - drawline16z .x .y .z xx[0] yy[0] .z c - drawline16z .x .y .z xx[1] yy[1] .z c - } - } - } - set drawlinepat oldpat -ends - -defstate previewdoors2d - // preview swinging and sliding doors in 2d mode - var valid sect lo - var i j w numw ang trange dx dy - - set valid 0 - set sect searchsector - - ifge sect 0 ifl sect numsectors - { - set lo sector[sect].lotag - ife lo 23 set valid 1 - else ife lo 25 set valid 1 - } - - ife valid 1 - { - set valid 0 - for i spritesofsector sect - ifactor SECTOREFFECTOR - { - ife .lotag 11 ife lo 23 set valid 1 // swinging door - ife .lotag 15 ife lo 25 set valid 1 // slide door - ife valid 1 { set j i, break } - } - - ife valid 1 - seti j - else return - - ife .lotag 15 - { - set trange 256 - for i spritesofsector sect - ifactor GPSPEED { set trange .lotag, break } - mul trange 2 // now equals distance of sliding door to travel - } - - set i 0 - for w loopofwall sector[sect].wallptr - { - ifge i TMPARLEN break - set xx[i] wall[w].x - set yy[i] wall[w].y - add i 1 - } - ifl i TMPARLEN - { - set xx[i] xx[0] - set yy[i] yy[0] - add i 1 - } - set numw i - - ife .lotag 11 - { - ifg .ang 1024 set ang -512 else set ang 512 - for i range numw - rotatepoint .x .y xx[i] yy[i] ang xx[i] yy[i] - } - else // if .lotag 15 - { - set ang .ang, add ang 1024 - a2xy ang dx dy - mulscale dx trange dx 14 - mulscale dy trange dy 14 - - for i range numw - { - add xx[i] dx - add yy[i] dy - } - } - - set drawlinepat 0x33333333 - sub numw 1 - for i range numw - { - set j i, add j 1 - drawline16z xx[i] yy[i] sector[sect].floorz xx[j] yy[j] sector[sect].floorz PREVIEW_DRAW_COLOR - } - set drawlinepat 0xffffffff - } -ends - - -// LOCATORS auto-incrementer -onevent EVENT_INSERTSPRITE2D - set k I - set j -1 - for i spritesofsector .sectnum - { - ifn i k, ifactor LOCATORS, ifg .lotag j - set j .lotag - } - ifg j -1 - { - add j 1 - set .lotag j - } -endevent - - -//////////////////// SPRITE DUPLICATORS //////////////////// - -defstate transcnt - ifle cnt 0 { inv cnt, add cnt 128 } -ends - -define DUP_ROT_MAGIC 123 - -// duplicates and rotates selected sprites around -// pivot sprite with fields -// .extra=123 (magic) -// .ang: angle delta -// .yrepeat*32: z delta (positive if pal!=0, i.e. going down) -// .shade: count (-128 to 0 -> 255 to 128) -defstate duprot - ifaimingsprite nullop else return - ifn sprite[searchwall].extra DUP_ROT_MAGIC return - - set p searchwall // pivot sprite - set cnt sprite[p].shade, state transcnt - - set sprite[p].extra -1 - - for i range cnt - { - for j selsprites, ifn j p - { - dupsprite j // duplicate sprite j, I becomes index of newly created sprite - - set dang i, add dang 1, mul dang sprite[p].ang - rotatepoint sprite[p].x sprite[p].y .x .y dang (x y) - add .ang dang - - set z i, add z 1, mul z sprite[p].yrepeat, shiftl z 5 - ife sprite[p].pal 0, inv z - add z .z - - bsetsprite I x y z - } - } -ends - -// same as above but with tsprite[], as a kind of preview -defstate tduprot - ifaimingsprite nullop else return - ifl searchwall 0 return - ifn sprite[searchwall].extra DUP_ROT_MAGIC return - - set p searchwall // pivot sprite - set cnt sprite[p].shade, state transcnt - - for i range cnt - { - for j selsprites, ifn j p - { - set k spritesortcnt - tdupsprite j - - set dang i, add dang 1, mul dang sprite[p].ang - rotatepoint sprite[p].x sprite[p].y tsprite[k].x tsprite[k].y dang (x y) - add tsprite[k].ang dang - - set z i, add z 1, mul z sprite[p].yrepeat, shiftl z 5 - ife sprite[p].pal 0 inv z - add z tsprite[k].z - - set tsprite[k].x x - set tsprite[k].y y - set tsprite[k].z z - - or tsprite[k].cstat 514 - } - } -ends - -define DUP_LIN_MAGIC 234 -define DUP_LIN_MAGIC2 345 - -// duplicates and translates selected sprites in the direction between two -// reference sprites with fields -// .extra=234 (1st sprite), =345 (2nd, aimed at sprite) -// .shade: count (-128 to 0 -> 255 to 128) -defstate duplin - ifaimingsprite nullop else return - ifn sprite[searchwall].extra DUP_LIN_MAGIC2 return - - set r searchwall // 2nd reference point - - set cnt sprite[r].shade, state transcnt - - set p -1 // 1st reference point - for i selsprites, ifn i r - { - ife .extra DUP_LIN_MAGIC { set p i, break } - } - ifl p 0 return - - set sprite[p].extra -1 - set sprite[r].extra -1 - - set dx sprite[r].x, sub dx sprite[p].x - set dy sprite[r].y, sub dy sprite[p].y - set dz sprite[r].z, sub dz sprite[p].z - - for i range cnt - { - for j selsprites, ifn j r - { - dupsprite j - - set x i, add x 1, mul x dx, add x .x - set y i, add y 1, mul y dy, add y .y - set z i, add z 1, mul z dz, add z .z - bsetsprite I x y z - } - } -ends - -defstate tduplin - ifaimingsprite nullop else return - ifn sprite[searchwall].extra DUP_LIN_MAGIC2 return - - set r searchwall // 2nd reference point - - set cnt sprite[r].shade, state transcnt - - set p -1 // 1st reference point - for i selsprites, ifn i r - { - ife .extra DUP_LIN_MAGIC { set p i, break } - } - ifl p 0 return - - set dx sprite[r].x, sub dx sprite[p].x - set dy sprite[r].y, sub dy sprite[p].y - set dz sprite[r].z, sub dz sprite[p].z - - for i range cnt - { - for j selsprites, ifn j r - { - set k spritesortcnt - tdupsprite j - - set tmp i, add tmp 1, mul tmp dx - add tsprite[k].x tmp - set tmp i, add tmp 1, mul tmp dy - add tsprite[k].y tmp - set tmp i, add tmp 1, mul tmp dz - add tsprite[k].z tmp - - or tsprite[k].cstat 514 -// bsetsprite I x y z - } - } -ends - -onevent EVENT_ANALYZESPRITES - state tduprot - state tduplin -endevent - -onevent EVENT_KEYS3D - var l m - - // door sound tester - ifaimingwall - ifholdkey KEY_SPACE - { - set k wall[searchwall].nextsector - ifl k 0 set k searchsector - - ife sector[k].lotag 0 return - - for i spritesofsector k - { - ifactor MUSICANDSFX - ifge .lotag 0 ifl .lotag MAXSOUNDS - { - getsoundflags .lotag m - ifand m 1 nullop else soundonce .lotag - } - } - } - - // swinging doors tester -- hit space on a door wall - ifaimingwall - ifhitkey KEY_SPACE // SE11 ST23 up:ccw - { - set k wall[searchwall].nextsector - ifl k 0 return - ifn sector[k].lotag 23 return - set tmp 0 - for i loopofwall searchwall - { - ifl wall[i].nextsector 0 set tmp 1 else - ifn wall[i].nextsector k set tmp 1 - } -// a weaker condition -// for i loopofwall wall[searchwall].nextwall -// { -// ifl wall[i].nextsector 0 set tmp 1 else -// ifn wall[i].nextsector searchsector set tmp 1 -// } - ifn tmp 0 - { - quote "door sector not an island sector!" - return - } - - set l -1 - for i spritesofsector k - { - ifactor SECTOREFFECTOR ife sprite[i].lotag 11 - { - set l i - ifn sprite[i].ang 512 ifn sprite[i].ang 1024 ifn sprite[i].ang 1536 set l -1 - } - } - ifl l 0 - { - quote "door sector has no SE sprite!" - return - } - - for tmp wallsofsector k - { - rotatepoint (sprite[l].x sprite[l].y) (wall[tmp].x wall[tmp].y) sprite[l].ang (i j) - dragpoint tmp i j - } - for tmp spritesofsector k - { - ifn tmp l - { - rotatepoint (sprite[l].x sprite[l].y) (sprite[tmp].x sprite[tmp].y) sprite[l].ang (i j) - bsetsprite tmp i j sprite[tmp].z - } - } - inv sprite[l].ang - } - - // teleporter -- works on SE7 and SE17 (elevator) - ifaimingsprite - ifhitkey KEY_SPACE - { - ife sprite[searchwall].picnum SECTOREFFECTOR - { - set tmp 0 - ife sprite[searchwall].lotag 7 set tmp 1 - ife sprite[searchwall].lotag 17 set tmp 1 - ife tmp 0 return - - for i allsprites - { - ifn i searchwall, ifactor SECTOREFFECTOR, ife sprite[i].lotag sprite[searchwall].lotag - ife sprite[i].hitag sprite[searchwall].hitag - { - add posx sprite[i].x, sub posx sprite[searchwall].x - add posy sprite[i].y, sub posy sprite[searchwall].y - add posz sprite[i].z, sub posz sprite[searchwall].z - - updatecursectnum - - return - } - } - } - else ife sprite[searchwall].extra DUP_ROT_MAGIC - { - state duprot - } - else ife sprite[searchwall].extra DUP_LIN_MAGIC2 - { - state duplin - } - } - - - set j 0 - - set k 0 - ifholdkey KEY_7 set k -1 - ifholdkey KEY_0 set k 1 - ifn k 0 - { - set j 1 - ifeithershift nullop else mul k 256 - add davr k - ifl davr 32768 set davr 32768 - ifg davr 256000 set davr 256000 - } - - set k 0 - ifholdkey KEY_8 set k -1 - ifholdkey KEY_9 set k 1 - ifn k 0 - { - set j 1 - ifeithershift nullop else mul k 256 - add dayx k - ifl dayx 32768 set dayx 32768 - ifg dayx 256000 set dayx 256000 - } - ife j 1 - { -// setaspect davr dayx - state setas - qsprintf TQUOTE "ASPECT: davr=%d, dayx=%d | FVR=%d, FYX=%d" davr dayx fvr fyx - quote TQUOTE - } -endevent - -defstate replacestuff - for i spritesofsector searchsector -// ife sprite[i].picnum AMMO set sprite[i].picnum BATTERYAMMO - ifactor parm[0] cactor parm[1] -ends - -defstate convlights // convert (0,0,0) lights to (255,255,255)-ones - for i allsprites ifactor 1 ifge .lotag 49 ifle .lotag 50 ife .xvel 0 ife .yvel 0 ife .zvel 0 - { set .xvel 255 set .yvel 255 set .zvel 255 } -ends - -defstate resetallws // reset all sprites and walls to default repeat/panning - for i allsprites - { - set .xrepeat 64 - set .yrepeat 64 - } - for i allwalls - { - set wall[i].cstat 0 - set wall[i].xpanning 0 - set wall[i].ypanning 0 - set wall[i].yrepeat 8 - fixrepeats i - } -ends - -defstate js // jump to current sprite - set posx .x - set posy .y - set posz .z - updatecursectnum -ends - -var sec 0 0 -var wal 0 0 - -defstate jumptowal // (wal) - ifge wal 0 ifl wal numwalls nullop else return - set posx wall[wal].x - set posy wall[wal].y - updatecursectnum -ends - -defstate jumptosec // (sec) - ifge sec 0 ifl sec numsectors nullop else return - set wal sector[sec].wallptr - state jumptowal -ends - - -onevent EVENT_DRAW2DSCREEN - var tmp - var xx - - state userdrawlabel - - ifge cursectnum 0 - { - state connectlocators - state draw_prlightprojections - } - - state previewdoors2d - - ifn showpal 0 - { - set xx 100 - for tmp range 256 - { - drawline16 xx 100 xx 200 -tmp - add xx 1 - drawline16 xx 100 xx 200 -tmp - add xx 1 - ifge tmp 240 - { - drawline16 xx 100 xx 200 -tmp - add xx 1 - drawline16 xx 100 xx 200 -tmp - add xx 1 - } - } - } -endevent - - -defstate mkterrain - var w2 w3 idx bit tmp sec - var warned - - set warned 0 - - for i selwalls - { - sectorofwall j i - set tmp 0, ifand sector[j].floorstat 2, set tmp 1 // already handled - ife tmp 0 ife sector[j].wallnum 3 - { - set w2 wall[i].point2 - set idx w2, shiftr idx 3 - set tmp w2, and tmp 7, set bit 1, shiftl bit tmp - ifand show2dwall[idx] bit - { - setfirstwall j i - - set z 0x7ffffff - ifin3dmode - { - ife searchstat 2 // floor - set z sector[searchsector].floorz - } - else - { - for k allsectors - { - ifinside mousxplc mousyplc k - { - set z sector[k].floorz - break - } - } - } - - ife z 0x7ffffff - { - ife warned 0 - { - quote "Mouse pointer must be aiming at sector floor." - set warned 1 - } - } - else - { - set w3 wall[w2].point2 - set sec wall[i].nextsector - ifge sec 0 - set sector[j].floorz sector[sec].floorz - alignflorslope j wall[w3].x wall[w3].y z - } - } - } - } -ends - -defstate chselshade - for i selsectors - { - set sector[i].floorshade tempshade - set sector[i].ceilingshade tempshade - - for j spritesofsector i - set .shade tempshade - - for j wallsofsector i - set wall[j].shade tempshade - } -ends - - -////////// USER AREA ////////// - -// key settings -defstate userkeys_3d - ifholdkey KEY_SEMI ifhitkey KEY_C state chselshade -ends - -/* -// example for custom labels -defstate userdrawlabel - for i allsprites - { - ifactor 2978 - { - qsprintf TQUOTE "MOVABLE EX:%d OW:%d", sprite[i].owner, sprite[i].extra - drawlabel TQUOTE .x .y .z 0 31 - } - } -ends -*/ diff --git a/polymer-perf/eduke32/samples/duke3d.def.sample b/polymer-perf/eduke32/samples/duke3d.def.sample deleted file mode 100644 index 7a3c2ef61..000000000 --- a/polymer-perf/eduke32/samples/duke3d.def.sample +++ /dev/null @@ -1,69 +0,0 @@ -// Duke Nukem 3D Sample Defs file -// -// For an explanation of the contents of this file, read releasenotes.html -// in the section titled "DEF-file Language" - -include DEFS.CON - -// These entries define Hightile tints -// definetint -definetint 1 110 110 255 1 -definetint 2 255 110 80 1 -definetint 4 0 0 0 0 -definetint 6 192 255 138 3 -definetint 7 228 200 172 0 -definetint 8 180 255 200 0 - -// This entry defines a texture replacement -// definetexture 0 0 -1 -1 -//definetexture FEMPIC7 0 0 0 -1 -1 "textures/rikaa.png" - -// These entries demonstrate replacing the Pig Cop character with a model - // Editart tile indices: - // walk 2000-2019 - // pump 2025-2027 - // stand 2030-2034 - // shoot 2035-2037 - // dive 2040-2044 - // dived 2045-2049 - // dshoot 2050-2052 - // hit 2055 - // die 2056-2059 - // dead 2060 -// definemodel -// defineskin -// definemodelanim -// definemodelframe -definemodel "models/pigcop.md2" 1.30 0 -definemodelskin 0 "models/pigcop.jpg" - -definemodelanim "walk0" "walk13" 20 0 -definemodelframe "walk0" 2000 2019 - -definemodelanim "pump0" "pump2" 10 1 -definemodelframe "pump0" 2025 2027 - -definemodelframe "stand" 2030 2034 - -definemodelanim "shoot0" "shoot2" 10 1 -definemodelframe "shoot0" 2035 2037 - -definemodelanim "dive0" "dive3" 8 1 -definemodelframe "dive0" 2040 2044 -definemodelframe "dive3" 2045 2049 - -definemodelanim "dshoot0" "dshoot2" 10 1 -definemodelframe "dshoot0" 2050 2052 - -definemodelframe "die0" 2055 2055 -definemodelanim "die1" "dead" 13 1 -definemodelframe "die1" 2056 2059 -definemodelframe "dead" 2060 2060 - - -// These entries demonstrate voxel replacements -// definevoxel -// definevoxeltiles -//definevoxel "voxels/barstool.kvx" -//definevoxeltiles 1006 1006 - diff --git a/polymer-perf/eduke32/samples/enhance.con.sample b/polymer-perf/eduke32/samples/enhance.con.sample deleted file mode 100644 index ce784df47..000000000 --- a/polymer-perf/eduke32/samples/enhance.con.sample +++ /dev/null @@ -1,389 +0,0 @@ -// include this file at the top of your game.con or eduke.con - -// Game Events - -// SYNTAX: -// -// onevent -// { -// ... actions -// } -// endevent - -// Internal event IDs - -/* -enum events { - EVENT_INIT, - EVENT_ENTERLEVEL, - EVENT_RESETWEAPONS, - EVENT_RESETINVENTORY, - EVENT_HOLSTER, - EVENT_LOOKLEFT, - EVENT_LOOKRIGHT, - EVENT_SOARUP, - EVENT_SOARDOWN, - EVENT_CROUCH, - EVENT_JUMP, - EVENT_RETURNTOCENTER, - EVENT_LOOKUP, - EVENT_LOOKDOWN, - EVENT_AIMUP, - EVENT_FIRE, - EVENT_CHANGEWEAPON, - EVENT_GETSHOTRANGE, - EVENT_GETAUTOAIMANGLE, - EVENT_GETLOADTILE, - EVENT_CHEATGETSTEROIDS, - EVENT_CHEATGETHEAT, - EVENT_CHEATGETBOOT, - EVENT_CHEATGETSHIELD, - EVENT_CHEATGETSCUBA, - EVENT_CHEATGETHOLODUKE, - EVENT_CHEATGETJETPACK, - EVENT_CHEATGETFIRSTAID, - EVENT_QUICKKICK, - EVENT_INVENTORY, - EVENT_USENIGHTVISION, - EVENT_USESTEROIDS, - EVENT_INVENTORYLEFT, - EVENT_INVENTORYRIGHT, - EVENT_HOLODUKEON, - EVENT_HOLODUKEOFF, - EVENT_USEMEDKIT, - EVENT_USEJETPACK, - EVENT_TURNAROUND, - EVENT_DISPLAYWEAPON, - EVENT_FIREWEAPON, - EVENT_SELECTWEAPON, - EVENT_MOVEFORWARD, - EVENT_MOVEBACKWARD, - EVENT_TURNLEFT, - EVENT_TURNRIGHT, - EVENT_STRAFELEFT, - EVENT_STRAFERIGHT, - EVENT_WEAPKEY1, - EVENT_WEAPKEY2, - EVENT_WEAPKEY3, - EVENT_WEAPKEY4, - EVENT_WEAPKEY5, - EVENT_WEAPKEY6, - EVENT_WEAPKEY7, - EVENT_WEAPKEY8, - EVENT_WEAPKEY9, - EVENT_WEAPKEY10, - EVENT_DRAWWEAPON, - EVENT_DISPLAYCROSSHAIR, - EVENT_DISPLAYREST, - EVENT_RESETPLAYER, - EVENT_INCURDAMAGE, - EVENT_AIMDOWN, - EVENT_GAME, - EVENT_PREVIOUSWEAPON, - EVENT_NEXTWEAPON, - EVENT_SWIMUP, - EVENT_SWIMDOWN, - EVENT_GETMENUTILE, - EVENT_SPAWN, - EVENT_LOGO, - EVENT_EGS, - EVENT_DOFIRE, - EVENT_PRESSEDFIRE, - EVENT_USE, - EVENT_PROCESSINPUT -}; -*/ - -// Internal projectile stuff - -/* -enum projectilelabels { - PROJ_WORKSLIKE, - PROJ_SPAWNS, - PROJ_SXREPEAT, - PROJ_SYREPEAT, - PROJ_SOUND, - PROJ_ISOUND, - PROJ_VEL, - PROJ_EXTRA, - PROJ_DECAL, - PROJ_TRAIL, - PROJ_TXREPEAT, - PROJ_TYREPEAT, - PROJ_TOFFSET, - PROJ_TNUM, - PROJ_DROP, - PROJ_CSTAT, - PROJ_CLIPDIST, - PROJ_SHADE, - PROJ_XREPEAT, - PROJ_YREPEAT, - PROJ_PAL, - PROJ_EXTRA_RAND, - PROJ_HITRADIUS, - PROJ_VEL_MULT, - PROJ_OFFSET, - PROJ_BOUNCES, - PROJ_BSOUND, - PROJ_RANGE -}; -*/ - -// Variable definition Flags - -#define GAMEVAR_FLAG_GLOBAL 0 // global variable (default) -#define GAMEVAR_FLAG_PERPLAYER 1 // per-player variable -#define GAMEVAR_FLAG_PERACTOR 2 // per-actor variable - -// Weapon Flags -// 1 Holstering Clears Clip -// 2 Glows -// 4 Automatic -// 8 Fire Every other frame -// 16 Fire Every third frame -// 32 Random restart on automatic -// 64 Use Ammo per burst -// 128 Is a Bomb trigger -// 256 Using does NOT cause player to become 'visible' -// 512 Use 'throws' the 'shoots' item -// 1024 Check weapon availability at 'reload' time -// 2048 player should stop jumping -// 0 Spawn Type 1 (pistol shells) -// 4096 Spawn Type 2 (Shotgun shells) -// 8192 Spawn Type 3 (CHAINGUN shells) -// 16384 Semi-automatic -// 32768 Pistol reload sound hack -// 65536 Cycle kickback_pic back to 1 if fire is held down, else set to 0 - -// TRIPBOMB_CONTROL -// 1 Tripwire. Trip Bomb works with tripwire. -// 2 On timer. Trip Bomb works on timer - -// PIPEBOMB_CONTROL -// 1 Detonator. Pipe Bomb works with detonator. -// 2 On timer. Pipe Bomb works on timer - -gamevar WEAPON0_WORKSLIKE 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON0_CLIP 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON0_RELOAD 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON0_FIREDELAY 7 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON0_TOTALTIME 14 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON0_HOLDDELAY 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON0_FLAGS 292 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON0_SHOOTS 2521 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON0_SPAWNTIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON0_SPAWN 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON0_SHOTSPERBURST 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON0_INITIALSOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON0_FIRESOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON0_SOUND2TIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON0_SOUND2SOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON0_RELOADSOUND1 4 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON0_RELOADSOUND2 5 GAMEVAR_FLAG_PERPLAYER - -gamevar WEAPON1_WORKSLIKE 1 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON1_CLIP 12 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON1_RELOAD 27 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON1_FIREDELAY 2 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON1_TOTALTIME 5 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON1_HOLDDELAY 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON1_FLAGS 32768 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON1_SHOOTS 2595 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON1_SPAWNTIME 2 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON1_SPAWN 2533 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON1_SHOTSPERBURST 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON1_INITIALSOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON1_FIRESOUND 3 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON1_SOUND2TIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON1_SOUND2SOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON1_RELOADSOUND1 4 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON1_RELOADSOUND2 5 GAMEVAR_FLAG_PERPLAYER - -gamevar WEAPON2_WORKSLIKE 2 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON2_CLIP 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON2_RELOAD 13 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON2_FIREDELAY 4 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON2_TOTALTIME 30 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON2_HOLDDELAY 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON2_FLAGS 1024 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON2_SHOOTS 2613 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON2_SPAWNTIME 24 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON2_SPAWN 2535 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON2_SHOTSPERBURST 7 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON2_INITIALSOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON2_FIRESOUND 109 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON2_SOUND2TIME 15 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON2_SOUND2SOUND 169 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON2_RELOADSOUND1 4 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON2_RELOADSOUND2 5 GAMEVAR_FLAG_PERPLAYER - -gamevar WEAPON3_WORKSLIKE 3 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON3_CLIP 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON3_RELOAD 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON3_FIREDELAY 3 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON3_TOTALTIME 12 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON3_HOLDDELAY 3 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON3_FLAGS 73812 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON3_SHOOTS 2536 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON3_SPAWNTIME 1 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON3_SPAWN 2533 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON3_SHOTSPERBURST 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON3_INITIALSOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON3_FIRESOUND 6 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON3_SOUND2TIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON3_SOUND2SOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON3_RELOADSOUND1 4 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON3_RELOADSOUND2 5 GAMEVAR_FLAG_PERPLAYER - -gamevar WEAPON4_WORKSLIKE 4 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON4_CLIP 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON4_RELOAD 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON4_FIREDELAY 4 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON4_TOTALTIME 20 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON4_HOLDDELAY 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON4_FLAGS 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON4_SHOOTS 2605 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON4_SPAWNTIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON4_SPAWN 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON4_SHOTSPERBURST 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON4_INITIALSOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON4_FIRESOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON4_SOUND2TIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON4_SOUND2SOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON4_RELOADSOUND1 4 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON4_RELOADSOUND2 5 GAMEVAR_FLAG_PERPLAYER - -gamevar WEAPON5_WORKSLIKE 5 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON5_CLIP 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON5_RELOAD 30 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON5_FIREDELAY 6 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON5_TOTALTIME 19 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON5_HOLDDELAY 12 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON5_FLAGS 512 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON5_SHOOTS 26 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON5_SPAWNTIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON5_SPAWN 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON5_SHOTSPERBURST 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON5_INITIALSOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON5_FIRESOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON5_SOUND2TIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON5_SOUND2SOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON5_RELOADSOUND1 4 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON5_RELOADSOUND2 5 GAMEVAR_FLAG_PERPLAYER - -gamevar WEAPON6_WORKSLIKE 6 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON6_CLIP 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON6_RELOAD 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON6_FIREDELAY 10 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON6_TOTALTIME 12 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON6_HOLDDELAY 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON6_FLAGS 2 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON6_SHOOTS 2556 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON6_SPAWNTIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON6_SPAWN 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON6_SHOTSPERBURST 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON6_INITIALSOUND 11 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON6_FIRESOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON6_SOUND2TIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON6_SOUND2SOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON6_RELOADSOUND1 4 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON6_RELOADSOUND2 5 GAMEVAR_FLAG_PERPLAYER - -gamevar WEAPON7_WORKSLIKE 7 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON7_CLIP 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON7_RELOAD 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON7_FIREDELAY 3 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON7_TOTALTIME 6 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON7_HOLDDELAY 5 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON7_FLAGS 72 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON7_SHOOTS 2605 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON7_SPAWNTIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON7_SPAWN 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON7_SHOTSPERBURST 2 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON7_INITIALSOUND 10 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON7_FIRESOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON7_SOUND2TIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON7_SOUND2SOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON7_RELOADSOUND1 4 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON7_RELOADSOUND2 5 GAMEVAR_FLAG_PERPLAYER - -gamevar WEAPON8_WORKSLIKE 8 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON8_CLIP 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON8_RELOAD 16 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON8_FIREDELAY 3 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON8_TOTALTIME 16 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON8_HOLDDELAY 7 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON8_FLAGS 3072 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON8_SHOOTS 2563 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON8_SPAWNTIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON8_SPAWN 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON8_SHOTSPERBURST 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON8_INITIALSOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON8_FIRESOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON8_SOUND2TIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON8_SOUND2SOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON8_RELOADSOUND1 4 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON8_RELOADSOUND2 5 GAMEVAR_FLAG_PERPLAYER - -gamevar WEAPON9_WORKSLIKE 9 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON9_CLIP 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON9_RELOAD 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON9_FIREDELAY 3 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON9_TOTALTIME 5 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON9_HOLDDELAY 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON9_FLAGS 65536 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON9_SHOOTS 1641 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON9_SPAWNTIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON9_SPAWN 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON9_SHOTSPERBURST 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON9_INITIALSOUND 10 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON9_FIRESOUND 10 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON9_SOUND2TIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON9_SOUND2SOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON9_RELOADSOUND1 4 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON9_RELOADSOUND2 5 GAMEVAR_FLAG_PERPLAYER - -gamevar WEAPON10_WORKSLIKE 10 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON10_CLIP 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON10_RELOAD 10 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON10_FIREDELAY 2 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON10_TOTALTIME 10 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON10_HOLDDELAY 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON10_FLAGS 384 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON10_SHOOTS 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON10_SPAWNTIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON10_SPAWN 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON10_SHOTSPERBURST 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON10_INITIALSOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON10_FIRESOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON10_SOUND2TIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON10_SOUND2SOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON10_RELOADSOUND1 4 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON10_RELOADSOUND2 5 GAMEVAR_FLAG_PERPLAYER - -gamevar WEAPON11_WORKSLIKE 11 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON11_CLIP 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON11_RELOAD 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON11_FIREDELAY 4 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON11_TOTALTIME 5 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON11_HOLDDELAY 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON11_FLAGS 2 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON11_SHOOTS 2448 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON11_SPAWNTIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON11_SPAWN 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON11_SHOTSPERBURST 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON11_INITIALSOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON11_FIRESOUND 388 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON11_SOUND2TIME 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON11_SOUND2SOUND 0 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON11_RELOADSOUND1 4 GAMEVAR_FLAG_PERPLAYER -gamevar WEAPON11_RELOADSOUND2 5 GAMEVAR_FLAG_PERPLAYER - -gamevar GRENADE_LIFETIME 120 GAMEVAR_FLAG_PERPLAYER -gamevar GRENADE_LIFETIME_VAR 30 GAMEVAR_FLAG_PERPLAYER - -gamevar STICKYBOMB_LIFETIME 120 GAMEVAR_FLAG_PERPLAYER -gamevar STICKYBOMB_LIFETIME_VAR 30 GAMEVAR_FLAG_PERPLAYER - -gamevar TRIPBOMB_CONTROL 1 GAMEVAR_FLAG_PERPLAYER // set value to 2 for timed bomb -gamevar PIPEBOMB_CONTROL 1 GAMEVAR_FLAG_PERPLAYER // set value to 2 for grenade behavior diff --git a/polymer-perf/eduke32/samples/m32script_ex.map b/polymer-perf/eduke32/samples/m32script_ex.map deleted file mode 100644 index 87e571ee1db595642f3bc9e3731fde8b5bd20dd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52514 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 diff --git a/polymer-perf/eduke32/samples/spriteclip.txt b/polymer-perf/eduke32/samples/spriteclip.txt deleted file mode 100644 index 253caeaf1..000000000 --- a/polymer-perf/eduke32/samples/spriteclip.txt +++ /dev/null @@ -1,66 +0,0 @@ - - Sector-like clipping for sprites - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Sprite picnums can be assigned to a bunch of connected sectors so that -clipping against these sprites will work as if it is carried out on the -associated sectors. For this, files named _clipshapeX.map (where X is -in 0..9) should be present at program start time. Every such map must be -built to certain rules, and loading many of them has the same effect as -loading a single map with all sectors/walls/sprites thrown together. - -* Every sector that contains at least one white wall is considered an "outer" sector. - Conversely, sectors with only red walls are "inner" (clipping) sectors. - -* Sprites in outer sectors are ignored. - -* To associate a picnum with a bunch of sectors, place a sprite with that picnum in - some inner sector of the lot. At the end stage of editing, align the sprite so that - the model matches the sectors well. See samples/_clipshape_.map for examples. - -* A picnum may be associated with many "layers" (called "indices" in the code) of - sectorwork. This serves two purposes: one is to enable more complex shapes than - would be possible using only one sector. The other reason is that a sprite may differ - in orientation in such a way that it is not possible to calculate one from another. - In particular, floor-aligned sprites and face/wall sprites should have their own - sector versions (of course only if they are intended to be used in a particular - orientation). - -* The sprites in inner sectors should point northward and should not have any orientation- - changing bits like x-flip or y-flip set. Setting centering and a custom size is permitted, - though. - -* A set of picnums can be aliased to a layer. This is useful if "secondary" picnums - are going to be used as decoration, for example. For this, set lotags and/or hitags - of any wall of an inner sector to the picnums to be aliased to layer containing the wall. - If only one of them is set, it is taken as a picnum, otherwise as a both-sided inclusive - range, the order doesn't matter. The pigcop tank is present as an example in - samples/_clipshape_.map. If a picnum has multiple layers, it is advisable to set the same - lotags/hitags for each layer. Note that you do not need to set tags unless you intend to - have more than one picnum to share a clipping shape. - -* The inner sectors of a given layer must be all interconnected (not necessarily directly) - and for a layer there must be a unique outer sector. - -* Making the floor or ceiling of a sector parallaxed will disable clipping on it in certain - ways. Normally, there are four horizontal clipping planes per inner sector (see the round - table for an example). Making the ceiling parallaxed disables the upper two, and analogously - for the floor. - -* Making a sprite transparent will disable rotation around its origin to match a given sprite's - angle. Use it on models with rotational symmetry. - - -Notes: ------- - -* The clipping will not change with rendering modes or options. - - -Predicted bugs: ---------------- - -* Clipping may not work across playing map sector boundaries, especially with large sprites. - - - --Helixhorned diff --git a/polymer-perf/eduke32/samples/tests.m32 b/polymer-perf/eduke32/samples/tests.m32 deleted file mode 100644 index d804746d8..000000000 --- a/polymer-perf/eduke32/samples/tests.m32 +++ /dev/null @@ -1,177 +0,0 @@ - -// load a.m32 first - -defstate testkeyavail - for i range 27 - { - ifholdkey alphakeys[i] - { - qsprintf TQUOTE "ALPHA KEY: %d (SCANCODE: %d)" i alphakeys[i] - quote TQUOTE - } - } - - for i range 10 - { - ifholdkey numberkeys[i] - { - qsprintf TQUOTE "NUMBER KEY: %d (SCANCODE: %d)" i numberkeys[i] - quote TQUOTE - } - } -ends - - -// various tests of m32-script features - -defstate arraytest - getarraysize ar tmp - resizearray ar 65536 - getticks parm[2] - for j range 65536 - set ar[j] j - set i 0 - for j range 65536 - add i ar[j] - getticks parm[3] - resizearray ar tmp - ife i 2147450880 quote "OK" else quote "DAMN" - sub parm[3] parm[2] - qsprintf TQUOTE "time: %d ms" parm[3] - quote TQUOTE -ends - -defstate itertest - var gi gj gk - // iteration and break test - - for i range 10 - { - addlogvar i - ife i 5 break - } - ife i 5 quote "OK" else quote "DAMN" - - quote "FLOAT ACCESS TEST" - set tmp pr_parallaxscale - - set gi tmp set gj tmp set gk tmp - al gi al gj al gk - ftoi gi 20 ftoi gj 200 ftoi gk 2000 - al gi al gj al gk - mul gk 2 - itof gk 2000 -ends - -define TEST_ZERO 0 -define TEST_PLUS_ONE 1 -define TEST_MINUS_ONE -1 - -define MOST_POSITIVE_DIRECT 32767 -define MOST_NEGATIVE_DIRECT -32768 -define LEAST_POSITIVE_INDIRECT 32768 -define LEAST_NEGATIVE_INDIRECT -32769 - -define HEX_MOST_POSITIVE_DIRECT 0x7fff -define HEX_MOST_NEGATIVE_DIRECT 0xffff8000 -define HEX_LEAST_POSITIVE_INDIRECT 0x8000 -define HEX_LEAST_NEGATIVE_INDIRECT 0xffff7fff - -define MAX_CONSTANT 2147483647 -define MIN_CONSTANT -2147483648 - -// tests various combinations of constants and labels -defstate consttest - quote " --- Constants test ---", quote " " - - quote "Should be 0:" - set i 0, set j TEST_ZERO - qsprintf TQUOTE "%d %d %d %d" 0 TEST_ZERO i j - quote TQUOTE, quote " " - - quote "Should be 1:" - set i 1, set j TEST_PLUS_ONE - qsprintf TQUOTE "%d %d %d %d" 1 TEST_PLUS_ONE i j - quote TQUOTE, quote " " - - quote "Should be -1:" - set i -1, set j TEST_MINUS_ONE - qsprintf TQUOTE "%d %d %d %d" -1 TEST_MINUS_ONE i j - quote TQUOTE, quote " " - - - quote "Should be 32767:" - set i 32767, set j MOST_POSITIVE_DIRECT - qsprintf TQUOTE "%d %d %d %d" 32767 MOST_POSITIVE_DIRECT i j - quote TQUOTE, quote " " - - quote "Should be -32768:" - set i -32768, set j MOST_NEGATIVE_DIRECT - qsprintf TQUOTE "%d %d %d %d" -32768 MOST_NEGATIVE_DIRECT i j - quote TQUOTE, quote " " - - quote "Should be 32768:" - set i 32768, set j LEAST_POSITIVE_INDIRECT - qsprintf TQUOTE "%d %d %d %d" 32768 LEAST_POSITIVE_INDIRECT i j - quote TQUOTE, quote " " - - quote "Should be -32769:" - set i -32769, set j LEAST_NEGATIVE_INDIRECT - qsprintf TQUOTE "%d %d %d %d" -32769 LEAST_NEGATIVE_INDIRECT i j - quote TQUOTE, quote " " - - quote "Hex tests:" - quote "Should be 32767:" - set i 0x7fff, set j HEX_MOST_POSITIVE_DIRECT - qsprintf TQUOTE "%d %d %d %d" 0x7fff HEX_MOST_POSITIVE_DIRECT i j - quote TQUOTE, quote " " - - quote "Should be -32768:" - set i 0xffff8000, set j HEX_MOST_NEGATIVE_DIRECT - qsprintf TQUOTE "%d %d %d %d" 0xffff8000 HEX_MOST_NEGATIVE_DIRECT i j - quote TQUOTE, quote " " - - quote "Should be 32768:" - set i 0x8000, set j HEX_LEAST_POSITIVE_INDIRECT - qsprintf TQUOTE "%d %d %d %d" 0x8000 HEX_LEAST_POSITIVE_INDIRECT i j - quote TQUOTE, quote " " - - quote "Should be -32769:" - set i 0xffff7fff, set j HEX_LEAST_NEGATIVE_INDIRECT - qsprintf TQUOTE "%d %d %d %d" 0xffff7fff HEX_LEAST_NEGATIVE_INDIRECT i j - quote TQUOTE, quote " " - - quote "min/max tests:" - quote "Should be 2147483647:" - set i 2147483647, set j MAX_CONSTANT - qsprintf TQUOTE "%d %d %d %d" 2147483647 MAX_CONSTANT i j - quote TQUOTE, quote " " - - quote "Should be -2147483648:" - set i -2147483648, set j MIN_CONSTANT - qsprintf TQUOTE "%d %d %d %d" -2147483648 MIN_CONSTANT i j - quote TQUOTE, quote " " -ends - -defstate anmtest - var yo - - for i range MAXTILES - { - set j tilesizx[i], or j tilesizy[i] - - ifn j 0 - { - set yo picanm[i] - shiftl yo 8, shiftr yo 24 // sign-extend - - ifl yo 0, inv yo - - ifge yo tilesizy[i] - { - qsprintf TQUOTE "Tile %d's y offset >= y size" i - quote TQUOTE - } - } - } -ends diff --git a/polymer-perf/eduke32/samples/tiles.cfg b/polymer-perf/eduke32/samples/tiles.cfg deleted file mode 100644 index a69fbeda7..000000000 --- a/polymer-perf/eduke32/samples/tiles.cfg +++ /dev/null @@ -1,215 +0,0 @@ -// Mapster32 tile grouping configuration file -// Press T on the tile selection screen to access the tileset selection menu - -#include "names.h" - -tilegroup "Actors" -{ - hotkey "A" - - colors 31 31 - - tiles - { - LIZTROOP LIZTROOPRUNNING LIZTROOPSTAYPUT LIZTROOPSHOOT LIZTROOPJETPACK - LIZTROOPONTOILET LIZTROOPJUSTSIT LIZTROOPDUCKING - PIGCOP PIGCOPSTAYPUT PIGCOPDIVE - LIZMAN LIZMANSTAYPUT LIZMANSPITTING LIZMANFEEDING LIZMANJUMP - COMMANDER COMMANDERSTAYPUT - OCTABRAIN OCTABRAINSTAYPUT - ORGANTIC - DRONE - NEWBEAST NEWBEASTSTAYPUT NEWBEASTHANG NEWBEASTJUMP - EGG GREENSLIME ROTATEGUN RECON TANK BOUNCEMINE - FLOORFLAME - // FEMS - FEM1 FEM2 FEM3 FEM4 FEM5 FEM6 FEM7 FEM8 FEM9 FEM10 NAKED1 - // Lil' critters - SHARK - // BIG critters - BOSS1 BOSS1STAYPUT BOSS1SHOOT BOSS1LOB - BOSS2 - BOSS3 - BOSS4 BOSS4STAYPUT - } -} - -tilegroup "Doors" -{ - hotkey "D" - - tiles - { - DOORTILE1 DOORTILE2 DOORTILE3 DOORTILE4 DOORTILE5 - DOORTILE6 DOORTILE7 DOORTILE8 DOORTILE9 DOORTILE10 - 312 313 314 345 - DOORTILE22 DOORTILE18 DOORTILE19 DOORTILE20 - 450 455 457 458 459 469 470 477 - DOORTILE14 - 719 735 771 - DOORTILE16 - 843 858 883 - DOORTILE15 DOORTILE21 - 1173 - DOORTILE11 DOORTILE12 - 353 355 - // Related items - DOORSHOCK ACCESSCARD - } -} - -tilegroup "Effectors" -{ - hotkey "E" - - colors 15 15 - - tilerange 1 10 -} - -tilegroup "Items" -{ - hotkey "I" - - colors 24 24 - - tiles - { - // Ammo - AMMO SHOTGUNAMMO BATTERYAMMO RPGAMMO HEAVYHBOMB FREEZEAMMO GROWAMMO CRYSTALAMMO - DEVISTATORAMMO HBOMBAMMO - - // Items (healthetc) - COLA SIXPAK FIRSTAID SHIELD STEROIDS AIRTANK JETPACK HEATSENSOR ACCESSCARD - BOOTS ATOMICHEALTH HOLODUKE - - // Weapons - FIRSTGUNSPRITE CHAINGUNSPRITE RPGSPRITE FREEZESPRITE SHRINKERSPRITE - TRIPBOMBSPRITE SHOTGUNSPRITE DEVISTATORSPRITE - } -} - -tilegroup "Letters and numbers" -{ - hotkey "L" - - tilerange 2822 2915 - tilerange 2929 3022 - tilerange 3072 3135 - tilerange 3162 3165 - tilerange 640 649 - tilerange 2472 2481 -} - -tilegroup "Player" -{ - hotkey "P" - - // Colors are the colors for Blocking OFF and Blocking ON. - colors 2 2 - - tile APLAYER -} - -tilegroup "Respawn triggers" -{ - hotkey "R" - - tiles - { - CANWITHSOMETHING CANWITHSOMETHING2 CANWITHSOMETHING3 CANWITHSOMETHING4 - // FEMS - FEM1 FEM2 FEM3 FEM4 FEM5 FEM6 FEM7 FEM8 FEM9 FEM10 NAKED1 - } -} - -tilegroup "Switches" -{ - hotkey "S" - - tiles - { - ACCESSSWITCH ACCESSSWITCH2 ACCESSCARD SLOTDOOR LIGHTSWITCH SPACEDOORSWITCH SPACELIGHTSWITCH - FRANKENSTINESWITCH MULTISWITCH - DIPSWITCH DIPSWITCH2 DIPSWITCH3 TECHSWITCH - LIGHTSWITCH2 713 // LIGHTSWITCH2+1 - POWERSWITCH1 LOCKSWITCH1 POWERSWITCH2 HANDSWITCH PULLSWITCH - ALIENSWITCH HANDPRINTSWITCH NUKEBUTTON - TARGET - 4083 4954 // Busted switches (Atomic) - } -} - -tilegroup "Exploding stuff" -{ - hotkey "X" - - tiles - { - CRACK1 CRACK2 CRACK3 CRACK4 - FIREEXT SEENINE OOZFILTER - EXPLODINGBARREL EXPLODINGBARREL2 FIREBARREL GUNPOWDERBARREL - REACTOR2SPARK BOLT1 SIDEBOLT1 - CEILINGSTEAM - FIREVASE 2066 BURNING FIRE BURNING2 FIRE2 - } -} - -// Alphabet configuration for text entry tool in 3D mode -// (press Ctrl-T on a wall-aligned letter) -// 32 alphabets max. - -alphabet // blue font -{ - maprange 33 126 STARTALPHANUM - - offseta "^" 0 2 - offseta "qQ;" 0 -1 -} - -alphabet -{ - maprange 33 126 MINIFONT - maprangea "a" "z" 3104 - -// offset "\\" 0 3 doesn't work - offset 92 0 3 - offseta "qQ" 0 -1 - offseta ":" 0 1 - offseta "'\"" 0 3 -} - -alphabet // red font -{ - maprangea "0" "9" 2930 - maprangea "A" "Z" BIGALPHANUM - maprangea "a" "z" BIGALPHANUM - mapa "-" 2929 - mapa ".,!?;:/%" 3002 - mapa "'" 3022 -} - -alphabet // silver font -{ - maprangea "0" "9" 2992 - maprangea "A" "Z" 2966 - maprangea "a" "z" 2966 -} - -alphabet // yellow numbers 3x5 -{ - maprangea "0" "9" THREEBYFIVE - mapa ":/" 3020 - offseta ":" 0 1 -} - -alphabet // silver numbers -{ - maprangea "1" "9" W_NUMBERS - mapa "0" 649 -} - -alphabet -{ - maprangea "0" "9" DIGITALNUM -} diff --git a/polymer-perf/eduke32/source/GNU.TXT b/polymer-perf/eduke32/source/GNU.TXT deleted file mode 100644 index 2f3289afb..000000000 --- a/polymer-perf/eduke32/source/GNU.TXT +++ /dev/null @@ -1,87 +0,0 @@ -GNU GENERAL PUBLIC LICENSE -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc. -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. -Preamble -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. - -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and modification follow. - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - - -a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. - -b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. - -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. -Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. - -3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: - -a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - -b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. -If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. - -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. - -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. - -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - - -END OF TERMS AND CONDITIONS diff --git a/polymer-perf/eduke32/source/_functio.h b/polymer-perf/eduke32/source/_functio.h deleted file mode 100644 index 097fe3de9..000000000 --- a/polymer-perf/eduke32/source/_functio.h +++ /dev/null @@ -1,384 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -// _functio.h - -// file created by makehead.exe -// these headers contain default key assignments, as well as -// default button assignments and game function names -// axis defaults are also included - - -#ifndef _function_private_ -#define _function_private_ -#ifdef __cplusplus -extern "C" { -#endif -char gamefunctions[NUMGAMEFUNCTIONS][MAXGAMEFUNCLEN] = - { - "Move_Forward", - "Move_Backward", - "Turn_Left", - "Turn_Right", - "Strafe", - "Fire", - "Open", - "Run", - "AutoRun", - "Jump", - "Crouch", - "Look_Up", - "Look_Down", - "Look_Left", - "Look_Right", - "Strafe_Left", - "Strafe_Right", - "Aim_Up", - "Aim_Down", - "Weapon_1", - "Weapon_2", - "Weapon_3", - "Weapon_4", - "Weapon_5", - "Weapon_6", - "Weapon_7", - "Weapon_8", - "Weapon_9", - "Weapon_10", - "Inventory", - "Inventory_Left", - "Inventory_Right", - "Holo_Duke", - "Jetpack", - "NightVision", - "MedKit", - "TurnAround", - "SendMessage", - "Map", - "Shrink_Screen", - "Enlarge_Screen", - "Center_View", - "Holster_Weapon", - "Show_Opponents_Weapon", - "Map_Follow_Mode", - "See_Coop_View", - "Mouse_Aiming", - "Toggle_Crosshair", - "Steroids", - "Quick_Kick", - "Next_Weapon", - "Previous_Weapon", - "Show_Console", - "Show_DukeMatch_Scores", - "Dpad_Select", - "Dpad_Aiming" - }; - -#ifdef __SETUP__ - -#define NUMKEYENTRIES 56 - -char keydefaults[NUMGAMEFUNCTIONS*3][MAXGAMEFUNCLEN] = - { - "Move_Forward", "W", "Kpad8", - "Move_Backward", "S", "Kpad2", - "Turn_Left", "Left", "Kpad4", - "Turn_Right", "Right", "KPad6", - "Strafe", "LAlt", "RAlt", - "Fire", "", "RCtrl", - "Open", "E", "", - "Run", "LShift", "RShift", - "AutoRun", "CapLck", "", - "Jump", "Space", "/", - "Crouch", "LCtrl", "", - "Look_Up", "PgUp", "Kpad9", - "Look_Down", "PgDn", "Kpad3", - "Look_Left", "Insert", "Kpad0", - "Look_Right", "Delete", "Kpad.", - "Strafe_Left", "A", "", - "Strafe_Right", "D", "", - "Aim_Up", "Home", "KPad7", - "Aim_Down", "End", "Kpad1", - "Weapon_1", "1", "", - "Weapon_2", "2", "", - "Weapon_3", "3", "", - "Weapon_4", "4", "", - "Weapon_5", "5", "", - "Weapon_6", "6", "", - "Weapon_7", "7", "", - "Weapon_8", "8", "", - "Weapon_9", "9", "", - "Weapon_10", "0", "", - "Inventory", "Enter", "KpdEnt", - "Inventory_Left", "[", "", - "Inventory_Right", "]", "", - "Holo_Duke", "H", "", - "Jetpack", "J", "", - "NightVision", "N", "", - "MedKit", "M", "", - "TurnAround", "BakSpc", "", - "SendMessage", "T", "", - "Map", "Tab", "", - "Shrink_Screen", "-", "Kpad-", - "Enlarge_Screen", "=", "Kpad+", - "Center_View", "KPad5", "", - "Holster_Weapon", "ScrLck", "", - "Show_Opponents_Weapon", "Y", "", - "Map_Follow_Mode", "F", "", - "See_Coop_View", "K", "", - "Mouse_Aiming", "U", "", - "Toggle_Crosshair", "I", "", - "Steroids", "R", "", - "Quick_Kick", "Q", "", - "Next_Weapon", "'", "", - "Previous_Weapon", ";", "", - "Show_Console", "`", "", - "Show_DukeMatch_Scores", "", "", - "Dpad_Select", "", "", - "Dpad_Aiming", "", "", - }; - -const char oldkeydefaults[NUMGAMEFUNCTIONS*3][MAXGAMEFUNCLEN] = - { - "Move_Forward", "Up", "Kpad8", - "Move_Backward", "Down", "Kpad2", - "Turn_Left", "Left", "Kpad4", - "Turn_Right", "Right", "KPad6", - "Strafe", "LAlt", "RAlt", - "Fire", "LCtrl", "RCtrl", - "Open", "Space", "", - "Run", "LShift", "RShift", - "AutoRun", "CapLck", "", - "Jump", "A", "/", - "Crouch", "Z", "", - "Look_Up", "PgUp", "Kpad9", - "Look_Down", "PgDn", "Kpad3", - "Look_Left", "Insert", "Kpad0", - "Look_Right", "Delete", "Kpad.", - "Strafe_Left", ",", "", - "Strafe_Right", ".", "", - "Aim_Up", "Home", "KPad7", - "Aim_Down", "End", "Kpad1", - "Weapon_1", "1", "", - "Weapon_2", "2", "", - "Weapon_3", "3", "", - "Weapon_4", "4", "", - "Weapon_5", "5", "", - "Weapon_6", "6", "", - "Weapon_7", "7", "", - "Weapon_8", "8", "", - "Weapon_9", "9", "", - "Weapon_10", "0", "", - "Inventory", "Enter", "KpdEnt", - "Inventory_Left", "[", "", - "Inventory_Right", "]", "", - "Holo_Duke", "H", "", - "Jetpack", "J", "", - "NightVision", "N", "", - "MedKit", "M", "", - "TurnAround", "BakSpc", "", - "SendMessage", "T", "", - "Map", "Tab", "", - "Shrink_Screen", "-", "Kpad-", - "Enlarge_Screen", "=", "Kpad+", - "Center_View", "KPad5", "", - "Holster_Weapon", "ScrLck", "", - "Show_Opponents_Weapon", "W", "", - "Map_Follow_Mode", "F", "", - "See_Coop_View", "K", "", - "Mouse_Aiming", "U", "", - "Toggle_Crosshair", "I", "", - "Steroids", "R", "", - "Quick_Kick", "`", "", - "Next_Weapon", "'", "", - "Previous_Weapon", ";", "", - "Show_Console", "`", "", - "Show_DukeMatch_Scores", "", "", - "Dpad_Select", "", "", - "Dpad_Aiming", "", "", - }; - -static char * mousedefaults[] = - { - "Fire", - "MedKit", - "Jetpack", - "", - "Previous_Weapon", - "Next_Weapon", - "", - "", - "", - "" - }; - - -static char * mouseclickeddefaults[] = - { - "", - "", - "", - "", - "", - "", - "", - "", - "", - "" - }; - - -static char * joystickdefaults[] = - { - "Fire", - "Strafe", - "Run", - "Open", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "Aim_Down", - "Look_Right", - "Aim_Up", - "Look_Left", - }; - - -static char * joystickclickeddefaults[] = - { - "", - "Inventory", - "Jump", - "Crouch", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - }; - - -static char * mouseanalogdefaults[] = - { - "analog_turning", - "analog_moving", - }; - - -static char * mousedigitaldefaults[] = - { - "", - "", - "", - "", - }; - - -static char * joystickanalogdefaults[] = - { - "analog_turning", - "analog_moving", - "analog_strafing", - "", - "", - "", - "", - "", - }; - - -static char * joystickdigitaldefaults[] = - { - "", - "", - "", - "", - "", - "", - "Run", - "", - "", - "", - "", - "", - "", - "", - "", - "", - }; -#endif -#ifdef __cplusplus -}; -#endif -#endif diff --git a/polymer-perf/eduke32/source/_midi.h b/polymer-perf/eduke32/source/_midi.h deleted file mode 100644 index f2c41ab04..000000000 --- a/polymer-perf/eduke32/source/_midi.h +++ /dev/null @@ -1,282 +0,0 @@ -/* -Copyright (C) 1994-1995 Apogee Software, Ltd. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -Modifications for JonoF's port by Jonathon Fowler (jonof@edgenetwk.com) - -*/ -/********************************************************************** - module: _MIDI.H - - author: James R. Dose - date: May 25, 1994 - - Private header for MIDI.C. Midi song file playback routines. - - (c) Copyright 1994 James R. Dose. All Rights Reserved. -**********************************************************************/ - -#ifndef ___MIDI_H -#define ___MIDI_H -#include "compat.h" - -#define RELATIVE_BEAT( measure, beat, tick ) \ - ( ( tick ) + ( ( beat ) << 9 ) + ( ( measure ) << 16 ) ) - -//Bobby Prince thinks this may be 100 -//#define GENMIDI_DefaultVolume 100 -#define GENMIDI_DefaultVolume 90 - -#define MAX_FORMAT 1 - -#define NUM_MIDI_CHANNELS 16 - -#define TIME_PRECISION 16 - -#define MIDI_HEADER_SIGNATURE 0x6468544d // "MThd" -#define MIDI_TRACK_SIGNATURE 0x6b72544d // "MTrk" - -#define MIDI_VOLUME 7 -#define MIDI_PAN 10 -#define MIDI_DETUNE 94 -#define MIDI_RHYTHM_CHANNEL 9 -#define MIDI_RPN_MSB 100 -#define MIDI_RPN_LSB 101 -#define MIDI_DATAENTRY_MSB 6 -#define MIDI_DATAENTRY_LSB 38 -#define MIDI_PITCHBEND_MSB 0 -#define MIDI_PITCHBEND_LSB 0 -#define MIDI_RUNNING_STATUS 0x80 -#define MIDI_NOTE_OFF 0x8 -#define MIDI_NOTE_ON 0x9 -#define MIDI_POLY_AFTER_TCH 0xA -#define MIDI_CONTROL_CHANGE 0xB -#define MIDI_PROGRAM_CHANGE 0xC -#define MIDI_AFTER_TOUCH 0xD -#define MIDI_PITCH_BEND 0xE -#define MIDI_SPECIAL 0xF -#define MIDI_SYSEX 0xF0 -#define MIDI_SYSEX_CONTINUE 0xF7 -#define MIDI_META_EVENT 0xFF -#define MIDI_END_OF_TRACK 0x2F -#define MIDI_TEMPO_CHANGE 0x51 -#define MIDI_TIME_SIGNATURE 0x58 -#define MIDI_RESET_ALL_CONTROLLERS 0x79 -#define MIDI_ALL_NOTES_OFF 0x7b -#define MIDI_MONO_MODE_ON 0x7E -#define MIDI_SYSTEM_RESET 0xFF - -#define GET_NEXT_EVENT( track, data ) \ - ( data ) = *( track )->pos; \ - ( track )->pos += 1 - -#define GET_MIDI_CHANNEL( event ) ( ( event ) & 0xf ) -#define GET_MIDI_COMMAND( event ) ( ( event ) >> 4 ) - -#define EMIDI_INFINITE -1 -#define EMIDI_END_LOOP_VALUE 127 -#define EMIDI_ALL_CARDS 127 -#define EMIDI_INCLUDE_TRACK 110 -#define EMIDI_EXCLUDE_TRACK 111 -#define EMIDI_PROGRAM_CHANGE 112 -#define EMIDI_VOLUME_CHANGE 113 -#define EMIDI_CONTEXT_START 114 -#define EMIDI_CONTEXT_END 115 -#define EMIDI_LOOP_START 116 -#define EMIDI_LOOP_END 117 -#define EMIDI_SONG_LOOP_START 118 -#define EMIDI_SONG_LOOP_END 119 - -#define EMIDI_GeneralMIDI 0 - -#define EMIDI_AffectsCurrentCard( c, type ) \ - ( ( ( c ) == EMIDI_ALL_CARDS ) || ( ( c ) == ( type ) ) ) - - -#define EMIDI_NUM_CONTEXTS 7 -typedef struct - { - char *pos; - char *loopstart; - int16_t loopcount; - int16_t RunningStatus; - unsigned time; - int32_t FPSecondsPerTick; - int16_t tick; - int16_t beat; - int16_t measure; - int16_t BeatsPerMeasure; - int16_t TicksPerBeat; - int16_t TimeBase; - int32_t delay; - int16_t active; - } songcontext; - -typedef struct - { - char *start; - char *pos; - - int32_t delay; - int16_t active; - int16_t RunningStatus; - - int16_t currentcontext; - songcontext context[ EMIDI_NUM_CONTEXTS ]; - - char EMIDI_IncludeTrack; - char EMIDI_ProgramChange; - char EMIDI_VolumeChange; - } track; - -static int32_t _MIDI_ReadNumber( void *from, size_t size ); -static int32_t _MIDI_ReadDelta( track *ptr ); -static void _MIDI_ResetTracks( void ); -static void _MIDI_AdvanceTick( void ); -static void _MIDI_MetaEvent( track *Track ); -static void _MIDI_SysEx( track *Track ); -static int32_t _MIDI_InterpretControllerInfo( track *Track, int32_t TimeSet, - int32_t channel, int32_t c1, int32_t c2 ); -static int32_t _MIDI_SendControlChange( int32_t channel, int32_t c1, int32_t c2 ); -static void _MIDI_SetChannelVolume( int32_t channel, int32_t volume ); -static void _MIDI_SendChannelVolumes( void ); -static int32_t _MIDI_ProcessNextTick( void ); -static void _MIDI_InitEMIDI( void ); - -/* - if ( c1 == EMIDI_LOOP_START ) - { - if ( c2 == 0 ) - { - Track->context[ 0 ].loopcount = EMIDI_INFINITE; - } - else - { - Track->context[ 0 ].loopcount = c2; - } - - Track->context[ 0 ].pos = Track->pos; - Track->context[ 0 ].loopstart = Track->pos; - Track->context[ 0 ].RunningStatus = Track->RunningStatus; - Track->context[ 0 ].time = _MIDI_Time; - Track->context[ 0 ].FPSecondsPerTick = _MIDI_FPSecondsPerTick; - Track->context[ 0 ].tick = _MIDI_Tick; - Track->context[ 0 ].beat = _MIDI_Beat; - Track->context[ 0 ].measure = _MIDI_Measure; - Track->context[ 0 ].BeatsPerMeasure = _MIDI_BeatsPerMeasure; - Track->context[ 0 ].TicksPerBeat = _MIDI_TicksPerBeat; - Track->context[ 0 ].TimeBase = _MIDI_TimeBase; - break; - } - - if ( ( c1 == EMIDI_LOOP_END ) && - ( c2 == EMIDI_END_LOOP_VALUE ) ) - { - if ( ( Track->context[ 0 ].loopstart != NULL ) && - ( Track->context[ 0 ].loopcount != 0 ) ) - { - if ( Track->context[ 0 ].loopcount != EMIDI_INFINITE ) - { - Track->context[ 0 ].loopcount--; - } - - Track->pos = Track->context[ 0 ].loopstart; - Track->RunningStatus = Track->context[ 0 ].RunningStatus; - - if ( !TimeSet ) - { - _MIDI_Time = Track->context[ 0 ].time; - _MIDI_FPSecondsPerTick = Track->context[ 0 ].FPSecondsPerTick; - _MIDI_Tick = Track->context[ 0 ].tick; - _MIDI_Beat = Track->context[ 0 ].beat; - _MIDI_Measure = Track->context[ 0 ].measure; - _MIDI_BeatsPerMeasure = Track->context[ 0 ].BeatsPerMeasure; - _MIDI_TicksPerBeat = Track->context[ 0 ].TicksPerBeat; - _MIDI_TimeBase = Track->context[ 0 ].TimeBase; - TimeSet = TRUE; - } - } - break; - } - - if ( c1 == MIDI_MONO_MODE_ON ) - { - Track->pos++; - } - - if ( ( c1 == MIDI_VOLUME ) && ( !Track->EMIDI_VolumeChange ) ) - { - _MIDI_SetChannelVolume( channel, c2 ); - break; - } - else if ( ( c1 == EMIDI_VOLUME_CHANGE ) && - ( Track->EMIDI_VolumeChange ) ) - { - _MIDI_SetChannelVolume( channel, c2 ); - break; - } - - if ( ( c1 == EMIDI_PROGRAM_CHANGE ) && - ( Track->EMIDI_ProgramChange ) ) - { - _MIDI_Funcs->ProgramChange( channel, MIDI_PatchMap[ c2 & 0x7f ] ); - break; - } - - if ( c1 == EMIDI_CONTEXT_START ) - { - break; - } - - if ( c1 == EMIDI_CONTEXT_END ) - { - if ( ( Track->currentcontext != _MIDI_Context ) || - ( Track->context[ _MIDI_Context ].pos == NULL ) - { - break; - } - - Track->currentcontext = _MIDI_Context; - Track->context[ 0 ].loopstart = Track->context[ _MIDI_Context ].loopstart; - Track->context[ 0 ].loopcount = Track->context[ _MIDI_Context ].loopcount; - Track->pos = Track->context[ _MIDI_Context ].pos; - Track->RunningStatus = Track->context[ _MIDI_Context ].RunningStatus; - - if ( TimeSet ) - { - break; - } - - _MIDI_Time = Track->context[ _MIDI_Context ].time; - _MIDI_FPSecondsPerTick = Track->context[ _MIDI_Context ].FPSecondsPerTick; - _MIDI_Tick = Track->context[ _MIDI_Context ].tick; - _MIDI_Beat = Track->context[ _MIDI_Context ].beat; - _MIDI_Measure = Track->context[ _MIDI_Context ].measure; - _MIDI_BeatsPerMeasure = Track->context[ _MIDI_Context ].BeatsPerMeasure; - _MIDI_TicksPerBeat = Track->context[ _MIDI_Context ].TicksPerBeat; - _MIDI_TimeBase = Track->context[ _MIDI_Context ].TimeBase; - TimeSet = TRUE; - break; - } - - if ( _MIDI_Funcs->ControlChange ) - { - _MIDI_Funcs->ControlChange( channel, c1, c2 ); - } - */ - -#endif diff --git a/polymer-perf/eduke32/source/_rts.h b/polymer-perf/eduke32/source/_rts.h deleted file mode 100644 index 5caa989ea..000000000 --- a/polymer-perf/eduke32/source/_rts.h +++ /dev/null @@ -1,50 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#ifndef __rts_private__ -#define __rts_private__ - -//=============== -// TYPES -//=============== - -typedef struct - { - char name[8]; - int32_t handle,position,size; - } lumpinfo_t; - -typedef struct - { - char identification[4]; // should be IWAD - int32_t numlumps; - int32_t infotableofs; - } wadinfo_t; - -typedef struct - { - int32_t filepos; - int32_t size; - char name[8]; - } filelump_t; - -#endif diff --git a/polymer-perf/eduke32/source/actors.c b/polymer-perf/eduke32/source/actors.c deleted file mode 100644 index 3e40ec692..000000000 --- a/polymer-perf/eduke32/source/actors.c +++ /dev/null @@ -1,8218 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#include "duke3d.h" -#include "actors.h" -#include "gamedef.h" -#include "gameexec.h" - -#if KRANDDEBUG -# define ACTOR_INLINE -# define ACTOR_STATIC -#else -# define ACTOR_INLINE inline -# define ACTOR_STATIC static -#endif - -#define KILLIT(KX) { deletesprite(KX); goto BOLT; } - -extern int32_t g_numEnvSoundsPlaying; -extern int32_t g_noEnemies; -extern int32_t ticrandomseed; - -inline void G_UpdateInterpolations(void) //Stick at beginning of G_DoMoveThings -{ - int32_t i=g_numInterpolations-1; - for (; i>=0; i--) oldipos[i] = *curipos[i]; -} - -void G_SetInterpolation(int32_t *posptr) -{ - int32_t i=g_numInterpolations-1; - - if (g_numInterpolations >= MAXINTERPOLATIONS) return; - for (; i>=0; i--) - if (curipos[i] == posptr) return; - curipos[g_numInterpolations] = posptr; - oldipos[g_numInterpolations] = *posptr; - g_numInterpolations++; -} - -void G_StopInterpolation(int32_t *posptr) -{ - int32_t i=g_numInterpolations-1; - - for (; i>=startofdynamicinterpolations; i--) - if (curipos[i] == posptr) - { - g_numInterpolations--; - oldipos[i] = oldipos[g_numInterpolations]; - bakipos[i] = bakipos[g_numInterpolations]; - curipos[i] = curipos[g_numInterpolations]; - } -} - -void G_DoInterpolations(int32_t smoothratio) //Stick at beginning of drawscreen -{ - int32_t i=g_numInterpolations-1, j = 0, odelta, ndelta = 0; - - if (g_interpolationLock++) - { - return; - } - - for (; i>=0; i--) - { - bakipos[i] = *curipos[i]; - odelta = ndelta; - ndelta = (*curipos[i])-oldipos[i]; - if (odelta != ndelta) j = mulscale16(ndelta,smoothratio); - *curipos[i] = oldipos[i]+j; - } -} - -inline void G_RestoreInterpolations(void) //Stick at end of drawscreen -{ - int32_t i=g_numInterpolations-1; - - if (--g_interpolationLock) - return; - - for (; i>=0; i--) *curipos[i] = bakipos[i]; -} - -inline int32_t G_CheckForSpaceCeiling(int32_t sectnum) -{ - return ((sector[sectnum].ceilingstat&1) && sector[sectnum].ceilingpal == 0 && (sector[sectnum].ceilingpicnum==MOONSKY1 || sector[sectnum].ceilingpicnum==BIGORBIT1)?1:0); -} - -inline int32_t G_CheckForSpaceFloor(int32_t sectnum) -{ - return ((sector[sectnum].floorstat&1) && sector[sectnum].ceilingpal == 0 && ((sector[sectnum].floorpicnum==MOONSKY1)||(sector[sectnum].floorpicnum==BIGORBIT1))?1:0); -} - -void A_RadiusDamage(int32_t i, int32_t r, int32_t hp1, int32_t hp2, int32_t hp3, int32_t hp4) -{ - spritetype *s=&sprite[i],*sj; - walltype *wal; - int32_t d, q, x1, y1; - int32_t sectcnt, sectend, dasect, startwall, endwall, nextsect; - int32_t j,k,p,x,nextj; - int16_t sect=-1; - char statlist[] = {STAT_DEFAULT,STAT_ACTOR,STAT_STANDABLE, - STAT_PLAYER,STAT_FALLER,STAT_ZOMBIEACTOR,STAT_MISC - }; - int16_t *tempshort = (int16_t *)tempbuf; - - if (s->picnum == RPG && s->xrepeat < 11) goto SKIPWALLCHECK; - - if (s->picnum != SHRINKSPARK) - { - tempshort[0] = s->sectnum; - dasect = s->sectnum; - sectcnt = 0; - sectend = 1; - - do - { - dasect = tempshort[sectcnt++]; - if (((sector[dasect].ceilingz-s->z)>>8) < r) - { - d = klabs(wall[sector[dasect].wallptr].x-s->x)+klabs(wall[sector[dasect].wallptr].y-s->y); - if (d < r) - Sect_DamageCeiling(dasect); - else - { - d = klabs(wall[wall[wall[sector[dasect].wallptr].point2].point2].x-s->x)+klabs(wall[wall[wall[sector[dasect].wallptr].point2].point2].y-s->y); - if (d < r) - Sect_DamageCeiling(dasect); - } - } - - startwall = sector[dasect].wallptr; - endwall = startwall+sector[dasect].wallnum; - for (x=startwall,wal=&wall[startwall]; xx-s->x)+klabs(wal->y-s->y)) < r) - { - nextsect = wal->nextsector; - if (nextsect >= 0) - { - for (dasect=sectend-1; dasect>=0; dasect--) - if (tempshort[dasect] == nextsect) break; - if (dasect < 0) tempshort[sectend++] = nextsect; - } - x1 = (((wal->x+wall[wal->point2].x)>>1)+s->x)>>1; - y1 = (((wal->y+wall[wal->point2].y)>>1)+s->y)>>1; - updatesector(x1,y1,§); - if (sect >= 0 && cansee(x1,y1,s->z,sect,s->x,s->y,s->z,s->sectnum)) - { - vec3_t tmpvect; - - Bmemcpy(&tmpvect, wal, sizeof(int32_t) * 2); - tmpvect.z = s->z; - - A_DamageWall(i,x,&tmpvect,s->picnum); - } - } - } - while (sectcnt < sectend); - } - -SKIPWALLCHECK: - - q = -(16<<8)+(krand()&((32<<8)-1)); - - for (x = 0; x<7; x++) - { - j = headspritestat[(uint8_t)statlist[x]]; - while (j >= 0) - { - nextj = nextspritestat[j]; - sj = &sprite[j]; - - if (x == 0 || x >= 5 || AFLAMABLE(sj->picnum)) - { - if (s->picnum != SHRINKSPARK || (sj->cstat&257)) - if (dist(s, sj) < r) - { - if (A_CheckEnemySprite(sj) && !cansee(sj->x, sj->y,sj->z+q, sj->sectnum, s->x, s->y, s->z+q, s->sectnum)) - goto BOLT; - A_DamageObject(j, i); - } - } - else if (sj->extra >= 0 && sj != s && (sj->picnum == TRIPBOMB || A_CheckEnemySprite(sj) || sj->picnum == QUEBALL || sj->picnum == STRIPEBALL || (sj->cstat&257) || sj->picnum == DUKELYINGDEAD)) - { - if (s->picnum == SHRINKSPARK && sj->picnum != SHARK && (j == s->owner || sj->xrepeat < 24)) - { - j = nextj; - continue; - } - if (s->picnum == MORTER && j == s->owner) - { - j = nextj; - continue; - } - - if (sj->picnum == APLAYER) sj->z -= PHEIGHT; - d = dist(s, sj); - if (sj->picnum == APLAYER) sj->z += PHEIGHT; - - if (d < r && cansee(sj->x, sj->y, sj->z-(8<<8), sj->sectnum, s->x, s->y, s->z-(12<<8), s->sectnum)) - { - actor[j].ang = getangle(sj->x-s->x,sj->y-s->y); - - if (s->picnum == RPG && sj->extra > 0) - actor[j].picnum = RPG; - else if (A_CheckSpriteFlags(i,SPRITE_PROJECTILE) && SpriteProjectile[i].workslike & PROJECTILE_RADIUS_PICNUM && sj->extra > 0) - actor[j].picnum = s->picnum; - else - { - if (s->picnum == SHRINKSPARK) - actor[j].picnum = SHRINKSPARK; - else actor[j].picnum = RADIUSEXPLOSION; - } - - if (s->picnum != SHRINKSPARK) - { - k = (r/3); - if (d < k) - { - if (hp4 == hp3) hp4++; - actor[j].extra = hp3 + (krand()%(hp4-hp3)); - } - else if (d < (k*2)) - { - if (hp3 == hp2) hp3++; - actor[j].extra = hp2 + (krand()%(hp3-hp2)); - } - else if (d < r) - { - if (hp2 == hp1) hp2++; - actor[j].extra = hp1 + (krand()%(hp2-hp1)); - } - - if (sprite[j].picnum != TANK && sprite[j].picnum != ROTATEGUN && sprite[j].picnum != RECON && sprite[j].picnum != BOSS1 && sprite[j].picnum != BOSS2 && sprite[j].picnum != BOSS3 && sprite[j].picnum != BOSS4) - { - if (sj->xvel < 0) sj->xvel = 0; - sj->xvel += (s->extra<<2); - } - - if (sj->picnum == PODFEM1 || sj->picnum == FEM1 || - sj->picnum == FEM2 || sj->picnum == FEM3 || - sj->picnum == FEM4 || sj->picnum == FEM5 || - sj->picnum == FEM6 || sj->picnum == FEM7 || - sj->picnum == FEM8 || sj->picnum == FEM9 || - sj->picnum == FEM10 || sj->picnum == STATUE || - sj->picnum == STATUEFLASH || sj->picnum == SPACEMARINE || sj->picnum == QUEBALL || sj->picnum == STRIPEBALL) - A_DamageObject(j, i); - } - else if (s->extra == 0) actor[j].extra = 0; - - if (sj->picnum != RADIUSEXPLOSION && - s->owner >= 0 && sprite[s->owner].statnum < MAXSTATUS) - { - if (sj->picnum == APLAYER) - { - p = sj->yvel; - if (g_player[p].ps->newowner >= 0) - { - g_player[p].ps->newowner = -1; - g_player[p].ps->pos.x = g_player[p].ps->opos.x; - g_player[p].ps->pos.y = g_player[p].ps->opos.y; - g_player[p].ps->pos.z = g_player[p].ps->opos.z; - g_player[p].ps->ang = g_player[p].ps->oang; - updatesector(g_player[p].ps->pos.x,g_player[p].ps->pos.y,&g_player[p].ps->cursectnum); - P_UpdateScreenPal(g_player[p].ps); - - k = headspritestat[STAT_ACTOR]; - while (k >= 0) - { - if (sprite[k].picnum==CAMERA1) - sprite[k].yvel = 0; - k = nextspritestat[k]; - } - } - } - actor[j].owner = s->owner; - } - } - } -BOLT: - j = nextj; - } - } -} - -int32_t A_MoveSprite(int32_t spritenum, const vec3_t *change, uint32_t cliptype) -{ - spritetype *spr = &sprite[spritenum]; - int32_t retval, daz; - int16_t dasectnum, cd; - int32_t bg = A_CheckEnemySprite(spr); - int32_t oldx = spr->x, oldy = spr->y; - /*int32_t osectnum = spr->sectnum;*/ - - - if (spr->statnum == STAT_MISC || (bg && spr->xrepeat < 4)) - { - spr->x += (change->x*TICSPERFRAME)>>2; - spr->y += (change->y*TICSPERFRAME)>>2; - spr->z += (change->z*TICSPERFRAME)>>2; - if (bg) - setsprite(spritenum,(vec3_t *)spr); - return 0; - } - - dasectnum = spr->sectnum; - - daz = spr->z - ((tilesizy[spr->picnum]*spr->yrepeat)<<1); - - if (bg) - { - if (spr->xrepeat > 60) - { - int32_t oz = spr->z; - spr->z = daz; - retval = clipmove((vec3_t *)spr,&dasectnum,((change->x*TICSPERFRAME)<<11),((change->y*TICSPERFRAME)<<11),1024L,(4<<8),(4<<8),cliptype); - daz = spr->z; - spr->z = oz; - } - else - { - int32_t oz = spr->z; - - if (spr->picnum == LIZMAN) - cd = 292L; - else if ((ActorType[spr->picnum]&3)) - cd = spr->clipdist<<2; - else - cd = 192L; - - spr->z = daz; - retval = clipmove((vec3_t *)spr,&dasectnum,((change->x*TICSPERFRAME)<<11),((change->y*TICSPERFRAME)<<11),cd,(4<<8),(4<<8),cliptype); - daz = spr->z; - spr->z = oz; - } - - if (dasectnum < 0 || (dasectnum >= 0 && - ((actor[spritenum].actorstayput >= 0 && actor[spritenum].actorstayput != dasectnum) || - ((spr->picnum == BOSS2) && spr->pal == 0 && sector[dasectnum].lotag != 3) || - ((spr->picnum == BOSS1 || spr->picnum == BOSS2) && sector[dasectnum].lotag == 1) /*|| - (sector[dasectnum].lotag == 1 && (spr->picnum == LIZMAN || (spr->picnum == LIZTROOP && spr->zvel == 0)))*/ - )) - ) - { - spr->x = oldx; - spr->y = oldy; - /* - if (dasectnum >= 0 && sector[dasectnum].lotag == 1 && spr->picnum == LIZMAN) - spr->ang = (krand()&2047); - else if ((Actor[spritenum].t_data[0]&3) == 1 && spr->picnum != COMMANDER) - spr->ang = (krand()&2047); - */ - setsprite(spritenum,(vec3_t *)spr); - if (dasectnum < 0) dasectnum = 0; - return (16384+dasectnum); - } - if ((retval&49152) >= 32768 && (actor[spritenum].cgg==0)) spr->ang += 768; - } - else - { - int32_t oz = spr->z; - spr->z = daz; - - if (spr->statnum == STAT_PROJECTILE && (SpriteProjectile[spritenum].workslike & PROJECTILE_REALCLIPDIST) == 0) - retval = - clipmove((vec3_t *)&sprite[spritenum],&dasectnum,((change->x*TICSPERFRAME)<<11),((change->y*TICSPERFRAME)<<11),8L,(4<<8),(4<<8),cliptype); - else - retval = - clipmove((vec3_t *)&sprite[spritenum],&dasectnum,((change->x*TICSPERFRAME)<<11),((change->y*TICSPERFRAME)<<11),(int32_t)(spr->clipdist<<2),(4<<8),(4<<8),cliptype); - daz = spr->z; - spr->z = oz; - } - - if (dasectnum == -1) - { - dasectnum = spr->sectnum; -// OSD_Printf("%s:%d wtf\n",__FILE__,__LINE__); - } - - if ((dasectnum != spr->sectnum)) - { - changespritesect(spritenum,dasectnum); - A_GetZLimits(spritenum); - } - - daz = spr->z + ((change->z*TICSPERFRAME)>>3); - - bg = (tilesizy[spr->picnum]*spr->yrepeat)>>1; - if ((daz > actor[spritenum].ceilingz) && (daz <= actor[spritenum].floorz)/* - && - (osectnum == dasectnum || cansee(oldx, oldy, spr->z - bg, osectnum, spr->x, spr->y, daz - bg, dasectnum))*/ - ) - spr->z = daz; - else if (retval == 0) retval = 16384+dasectnum; - - if (retval == (16384+dasectnum)) - if (spr->statnum == STAT_PROJECTILE) - { - int32_t i, nexti; - - TRAVERSE_SPRITE_STAT(headspritestat[STAT_TRANSPORT], i, nexti) - if (sprite[i].sectnum == dasectnum) - { - switch (sector[dasectnum].lotag) - { - case 1: - if (daz >= actor[spritenum].floorz) - { - if (totalclock > actor[spritenum].lasttransport) - { - actor[spritenum].lasttransport = totalclock + (TICSPERFRAME<<2); - - spr->x += (sprite[OW].x-SX); - spr->y += (sprite[OW].y-SY); - spr->z = sector[sprite[OW].sectnum].ceilingz - daz + sector[sprite[i].sectnum].floorz; - - Bmemcpy(&actor[spritenum].bposx, &sprite[spritenum], sizeof(vec3_t)); - changespritesect(spritenum,sprite[OW].sectnum); - } - - return 0; - } - case 2: - if (daz <= actor[spritenum].ceilingz) - { - if (totalclock > actor[spritenum].lasttransport) - { - actor[spritenum].lasttransport = totalclock + (TICSPERFRAME<<2); - spr->x += (sprite[OW].x-SX); - spr->y += (sprite[OW].y-SY); - spr->z = sector[sprite[OW].sectnum].floorz - daz + sector[sprite[i].sectnum].ceilingz; - - Bmemcpy(&actor[spritenum].bposx, &sprite[spritenum], sizeof(vec3_t)); - changespritesect(spritenum,sprite[OW].sectnum); - } - - return 0; - } - } - } - } - - return(retval); -} - -ACTOR_INLINE int32_t A_SetSprite(int32_t i,uint32_t cliptype) -{ - vec3_t davect = {(sprite[i].xvel*(sintable[(sprite[i].ang+512)&2047]))>>14, - (sprite[i].xvel*(sintable[sprite[i].ang&2047]))>>14, - sprite[i].zvel - }; - return (A_MoveSprite(i,&davect,cliptype)==0); -} - -int32_t block_deletesprite = 0; - -// all calls to deletesprite() from the game are wrapped by this function -void A_DeleteSprite(int32_t s) -{ - if (block_deletesprite) - { - OSD_Printf(OSD_ERROR "A_DeleteSprite(): tried to remove sprite %d in EVENT_EGS\n",s); - return; - } - - if (apScriptGameEvent[EVENT_KILLIT]) - { - int32_t p, pl=A_FindPlayer(&sprite[s],&p); - - aGameVars[g_iReturnVarID].val.lValue = 0; - VM_OnEvent(EVENT_KILLIT, s, pl, p); - if (aGameVars[g_iReturnVarID].val.lValue) - return; - } - -#ifdef POLYMER - if (getrendermode() == 4 && actor[s].lightptr != NULL) - { - polymer_deletelight(actor[s].lightId); - actor[s].lightId = -1; - actor[s].lightptr = NULL; - } -#endif - -#undef deletesprite - deletesprite(s); -#define deletesprite A_DeleteSprite -} - -void A_AddToDeleteQueue(int32_t i) -{ - if (g_netClientPeer || g_spriteDeleteQueueSize == 0) - { - deletesprite(i); - return; - } - - if (SpriteDeletionQueue[g_spriteDeleteQueuePos] >= 0) - sprite[SpriteDeletionQueue[g_spriteDeleteQueuePos]].xrepeat = 0; - SpriteDeletionQueue[g_spriteDeleteQueuePos] = i; - g_spriteDeleteQueuePos = (g_spriteDeleteQueuePos+1)%g_spriteDeleteQueueSize; -} - -void A_SpawnMultiple(int32_t sp, int32_t pic, int32_t n) -{ - int32_t j; - spritetype *s = &sprite[sp]; - - for (; n>0; n--) - { - j = A_InsertSprite(s->sectnum,s->x,s->y,s->z-(krand()%(47<<8)),pic,-32,8,8,krand()&2047,0,0,sp,5); - A_Spawn(-1, j); - sprite[j].cstat = krand()&12; - } -} - -void A_DoGuts(int32_t sp, int32_t gtype, int32_t n) -{ - int32_t gutz,floorz; - int32_t i,a,j,sx = 32,sy = 32; -// int32_t pal; - spritetype *s = &sprite[sp]; - - if (A_CheckEnemySprite(s) && s->xrepeat < 16) - sx = sy = 8; - - gutz = s->z-(8<<8); - floorz = getflorzofslope(s->sectnum,s->x,s->y); - - if (gutz > (floorz-(8<<8))) - gutz = floorz-(8<<8); - - if (s->picnum == COMMANDER) - gutz -= (24<<8); - -// if (A_CheckEnemySprite(s) && s->pal == 6) -// pal = 6; -// else pal = 0; - - for (j=n; j>0; j--) - { - a = krand()&2047; - i = A_InsertSprite(s->sectnum,s->x+(krand()&255)-128,s->y+(krand()&255)-128,gutz-(krand()&8191),gtype,-32,sx,sy,a,48+(krand()&31),-512-(krand()&2047),sp,5); - if (PN == JIBS2) - { - sprite[i].xrepeat >>= 2; - sprite[i].yrepeat >>= 2; - } -// if (pal == 6) -// sprite[i].pal = 6; - sprite[i].pal = s->pal; - } -} - -void A_DoGutsDir(int32_t sp, int32_t gtype, int32_t n) -{ - int32_t gutz,floorz; - int32_t i,a,j,sx = 32,sy = 32; - spritetype *s = &sprite[sp]; - - if (A_CheckEnemySprite(s) && s->xrepeat < 16) - sx = sy = 8; - - gutz = s->z-(8<<8); - floorz = getflorzofslope(s->sectnum,s->x,s->y); - - if (gutz > (floorz-(8<<8))) - gutz = floorz-(8<<8); - - if (s->picnum == COMMANDER) - gutz -= (24<<8); - - for (j=n; j>0; j--) - { - a = krand()&2047; - i = A_InsertSprite(s->sectnum,s->x,s->y,gutz,gtype,-32,sx,sy,a,256+(krand()&127),-512-(krand()&2047),sp,5); - sprite[i].pal = s->pal; - } -} - -void Sect_SetInterpolation(int32_t i) -{ - int32_t k, j = sector[SECT].wallptr, endwall = j+sector[SECT].wallnum; - - for (; j= 0) - { - G_SetInterpolation(&wall[k].x); - G_SetInterpolation(&wall[k].y); - k = wall[k].point2; - G_SetInterpolation(&wall[k].x); - G_SetInterpolation(&wall[k].y); - } - } -} - -void Sect_ClearInterpolation(int32_t i) -{ - int32_t k, j = sector[SECT].wallptr, endwall = j+sector[SECT].wallnum; - - for (; j= 0) - { - G_StopInterpolation(&wall[k].x); - G_StopInterpolation(&wall[k].y); - k = wall[k].point2; - G_StopInterpolation(&wall[k].x); - G_StopInterpolation(&wall[k].y); - } - } -} - -static void A_MoveSector(int32_t i) -{ - //T1,T2 and T3 are used for all the sector moving stuff!!! - - int32_t tx,ty; - spritetype *s = &sprite[i]; - int32_t j = T2, k = T3; - - s->x += (s->xvel*(sintable[(s->ang+512)&2047]))>>14; - s->y += (s->xvel*(sintable[s->ang&2047]))>>14; - - { - int32_t x = sector[s->sectnum].wallptr, endwall = x+sector[s->sectnum].wallnum; - - for (; xx+tx,s->y+ty); - - j++; - } - } -} - -// this is the same crap as in game.c's tspr manipulation. puke. -#define LIGHTRAD (s->yrepeat * tilesizy[s->picnum+(T5?(*(intptr_t *)T5) + *(((intptr_t *)T5)+2) * T4:0)]) -#define LIGHTRAD2 (((s->yrepeat) + (rand()%(s->yrepeat>>2))) * tilesizy[s->picnum+(T5?(*(intptr_t *)T5) + *(((intptr_t *)T5)+2) * T4:0)]) - -void G_AddGameLight(int32_t radius, int32_t srcsprite, int32_t zoffset, int32_t range, int32_t color, int32_t priority) -{ -#ifdef POLYMER - spritetype *s = &sprite[srcsprite]; - - if (getrendermode() != 4) - return; - - if (actor[srcsprite].lightptr == NULL) - { -#pragma pack(push,1) - _prlight mylight; -#pragma pack(pop) - - mylight.sector = s->sectnum; - mylight.x = s->x; - mylight.y = s->y; - mylight.z = s->z-zoffset; - mylight.color[0] = color&255; - mylight.color[1] = (color>>8)&255; - mylight.color[2] = (color>>16)&255; - mylight.radius = radius; - actor[srcsprite].lightmaxrange = mylight.range = range; - - mylight.priority = priority; - mylight.tilenum = 0; - - actor[srcsprite].lightId = polymer_addlight(&mylight); - if (actor[srcsprite].lightId >= 0) - actor[srcsprite].lightptr = &prlights[actor[srcsprite].lightId]; - return; - } - - s->z -= zoffset; - - if (range < actor[srcsprite].lightmaxrange>>1) - actor[srcsprite].lightmaxrange = 0; - - if (range > actor[srcsprite].lightmaxrange || - priority != actor[srcsprite].lightptr->priority || - Bmemcmp(&sprite[srcsprite], actor[srcsprite].lightptr, sizeof(int32_t) * 3)) - { - if (range > actor[srcsprite].lightmaxrange) - actor[srcsprite].lightmaxrange = range; - - Bmemcpy(actor[srcsprite].lightptr, &sprite[srcsprite], sizeof(int32_t) * 3); - actor[srcsprite].lightptr->sector = s->sectnum; - actor[srcsprite].lightptr->flags.invalidate = 1; - } - - actor[srcsprite].lightptr->priority = priority; - actor[srcsprite].lightptr->range = range; - actor[srcsprite].lightptr->color[0] = color&255; - actor[srcsprite].lightptr->color[1] = (color>>8)&255; - actor[srcsprite].lightptr->color[2] = (color>>16)&255; - - s->z += zoffset; - -#else - UNREFERENCED_PARAMETER(radius); - UNREFERENCED_PARAMETER(srcsprite); - UNREFERENCED_PARAMETER(zoffset); - UNREFERENCED_PARAMETER(range); - UNREFERENCED_PARAMETER(color); - UNREFERENCED_PARAMETER(priority); -#endif -} - -// sleeping monsters, etc -ACTOR_STATIC void G_MoveZombieActors(void) -{ - int32_t x, px, py, sx, sy; - int32_t i = headspritestat[STAT_ZOMBIEACTOR], j, p, nexti; - int16_t psect, ssect; - spritetype *s; - - while (i >= 0) - { - nexti = nextspritestat[i]; - - s = &sprite[i]; - p = A_FindPlayer(s,&x); - - ssect = psect = s->sectnum; - - if (sprite[g_player[p].ps->i].extra > 0) - { - if (x < 30000) - { - actor[i].timetosleep++; - if (actor[i].timetosleep >= (x>>8)) - { - if (A_CheckEnemySprite(s)) - { - px = g_player[p].ps->opos.x+64-(krand()&127); - py = g_player[p].ps->opos.y+64-(krand()&127); - updatesector(px,py,&psect); - if (psect == -1) - { - i = nexti; - continue; - } - sx = s->x+64-(krand()&127); - sy = s->y+64-(krand()&127); - updatesector(px,py,&ssect); - if (ssect == -1) - { - i = nexti; - continue; - } - j = cansee(sx,sy,s->z-(krand()%(52<<8)),s->sectnum,px,py,g_player[p].ps->opos.z-(krand()%(32<<8)),g_player[p].ps->cursectnum); - } - else - j = cansee(s->x,s->y,s->z-((krand()&31)<<8),s->sectnum,g_player[p].ps->opos.x,g_player[p].ps->opos.y,g_player[p].ps->opos.z-((krand()&31)<<8),g_player[p].ps->cursectnum); - - // j = 1; - - if (j) switch (DynamicTileMap[s->picnum]) - { - case RUBBERCAN__STATIC: - case EXPLODINGBARREL__STATIC: - case WOODENHORSE__STATIC: - case HORSEONSIDE__STATIC: - case CANWITHSOMETHING__STATIC: - case CANWITHSOMETHING2__STATIC: - case CANWITHSOMETHING3__STATIC: - case CANWITHSOMETHING4__STATIC: - case FIREBARREL__STATIC: - case FIREVASE__STATIC: - case NUKEBARREL__STATIC: - case NUKEBARRELDENTED__STATIC: - case NUKEBARRELLEAKED__STATIC: - case TRIPBOMB__STATIC: - if (sector[s->sectnum].ceilingstat&1 && A_CheckSpriteFlags(j,SPRITE_NOSHADE) == 0) - s->shade = sector[s->sectnum].ceilingshade; - else s->shade = sector[s->sectnum].floorshade; - - actor[i].timetosleep = 0; - changespritestat(i,6); - break; - case RECON__STATIC: - CS |= 257; - default: - if (A_CheckSpriteFlags(i, SPRITE_USEACTIVATOR) && sector[sprite[i].sectnum].lotag & 16384) - break; - actor[i].timetosleep = 0; - A_PlayAlertSound(i); - changespritestat(i, STAT_ACTOR); - break; - } - else actor[i].timetosleep = 0; - } - } - if (A_CheckEnemySprite(s) && A_CheckSpriteFlags(i,SPRITE_NOSHADE) == 0) - { - if (sector[s->sectnum].ceilingstat&1) - s->shade = sector[s->sectnum].ceilingshade; - else s->shade = sector[s->sectnum].floorshade; - } - } - i = nexti; - } -} - -static inline int32_t ifhitsectors(int32_t sectnum) -{ - int32_t i = headspritestat[STAT_MISC]; - while (i >= 0) - { - if (PN == EXPLOSION2 && sectnum == SECT) - return i; - i = nextspritestat[i]; - } - return -1; -} - -#define IFHITSECT j=ifhitsectors(s->sectnum);if(j >= 0) - -int32_t A_IncurDamage(int32_t sn) -{ - int32_t j,p; - spritetype *npc; - - if (actor[sn].extra >= 0) - { - if (sprite[sn].extra >= 0) - { - npc = &sprite[sn]; - - if (npc->picnum == APLAYER) - { - if (ud.god && actor[sn].picnum != SHRINKSPARK) return -1; - - p = npc->yvel; - j = actor[sn].owner; - - if (j >= 0 && - sprite[j].picnum == APLAYER && - (GametypeFlags[ud.coop] & GAMETYPE_PLAYERSFRIENDLY) && - ud.ffire == 0) - return -1; - - if (j >= 0 && - sprite[j].picnum == APLAYER && - (GametypeFlags[ud.coop] & GAMETYPE_TDM) && - g_player[p].ps->team == g_player[sprite[j].yvel].ps->team && - ud.ffire == 0) - return -1; - - npc->extra -= actor[sn].extra; - - if (j >= 0) - { - if (npc->extra <= 0 && actor[sn].picnum != FREEZEBLAST) - { - npc->extra = 0; - - g_player[p].ps->wackedbyactor = j; - - if (sprite[actor[sn].owner].picnum == APLAYER && p != sprite[actor[sn].owner].yvel) - g_player[p].ps->frag_ps = sprite[j].yvel; - - actor[sn].owner = g_player[p].ps->i; - } - } - - if (A_CheckSpriteTileFlags(actor[sn].picnum,SPRITE_PROJECTILE) && (SpriteProjectile[sn].workslike & PROJECTILE_RPG)) - { - g_player[p].ps->vel.x += - actor[sn].extra*(sintable[(actor[sn].ang+512)&2047])<<2; - g_player[p].ps->vel.y += - actor[sn].extra*(sintable[actor[sn].ang&2047])<<2; - } - else if (A_CheckSpriteTileFlags(actor[sn].picnum,SPRITE_PROJECTILE)) - { - g_player[p].ps->vel.x += - actor[sn].extra*(sintable[(actor[sn].ang+512)&2047])<<1; - g_player[p].ps->vel.y += - actor[sn].extra*(sintable[actor[sn].ang&2047])<<1; - } - - switch (DynamicTileMap[actor[sn].picnum]) - { - case RADIUSEXPLOSION__STATIC: - case RPG__STATIC: - case HYDRENT__STATIC: - case HEAVYHBOMB__STATIC: - case SEENINE__STATIC: - case OOZFILTER__STATIC: - case EXPLODINGBARREL__STATIC: - g_player[p].ps->vel.x += - actor[sn].extra*(sintable[(actor[sn].ang+512)&2047])<<2; - g_player[p].ps->vel.y += - actor[sn].extra*(sintable[actor[sn].ang&2047])<<2; - break; - default: - g_player[p].ps->vel.x += - actor[sn].extra*(sintable[(actor[sn].ang+512)&2047])<<1; - g_player[p].ps->vel.y += - actor[sn].extra*(sintable[actor[sn].ang&2047])<<1; - break; - } - } - else - { - if (actor[sn].extra == 0) - if (actor[sn].picnum == SHRINKSPARK && npc->xrepeat < 24) - return -1; - - npc->extra -= actor[sn].extra; - if (npc->picnum != RECON && npc->owner >= 0 && sprite[npc->owner].statnum < MAXSTATUS) - npc->owner = actor[sn].owner; - } - - actor[sn].extra = -1; - return actor[sn].picnum; - } - } - - actor[sn].extra = -1; - return -1; -} - -void A_MoveCyclers(void) -{ - int32_t q, j, x, t, s, cshade; - int16_t *c; - walltype *wal; - - for (q=g_numCyclers-1; q>=0; q--) - { - - c = &cyclers[q][0]; - s = c[0]; - - t = c[3]; - j = t+(sintable[c[1]&2047]>>10); - cshade = c[2]; - - if (j < cshade) j = cshade; - else if (j > t) j = t; - - c[1] += sector[s].extra; - if (c[5]) - { - wal = &wall[sector[s].wallptr]; - for (x = sector[s].wallnum; x>0; x--,wal++) - if (wal->hitag != 1) - { - wal->shade = j; - - if ((wal->cstat&2) && wal->nextwall >= 0) - wall[wal->nextwall].shade = j; - - } - sector[s].floorshade = sector[s].ceilingshade = j; - } - } -} - -void A_MoveDummyPlayers(void) -{ - int32_t i = headspritestat[STAT_DUMMYPLAYER], p, nexti; - - while (i >= 0) - { - nexti = nextspritestat[i]; - - p = sprite[OW].yvel; - - if (g_player[p].ps->on_crane >= 0 || (g_player[p].ps->cursectnum >= 0 && sector[g_player[p].ps->cursectnum].lotag != 1) || sprite[g_player[p].ps->i].extra <= 0) - { - g_player[p].ps->dummyplayersprite = -1; - KILLIT(i); - } - else - { - if (g_player[p].ps->on_ground && g_player[p].ps->on_warping_sector == 1 && sector[g_player[p].ps->cursectnum].lotag == 1) - { - CS = 257; - SZ = sector[SECT].ceilingz+(27<<8); - SA = g_player[p].ps->ang; - if (T1 == 8) - T1 = 0; - else T1++; - } - else - { - if (sector[SECT].lotag != 2) SZ = sector[SECT].floorz; - CS = (int16_t) 32768; - } - } - - SX += (g_player[p].ps->pos.x-g_player[p].ps->opos.x); - SY += (g_player[p].ps->pos.y-g_player[p].ps->opos.y); - setsprite(i,(vec3_t *)&sprite[i]); - -BOLT: - - i = nexti; - } -} - -int32_t otherp; - -ACTOR_STATIC void G_MovePlayers(void) -{ - int32_t i = headspritestat[STAT_PLAYER], nexti; - int32_t otherx; - spritetype *s; - DukePlayer_t *p; - - while (i >= 0) - { - nexti = nextspritestat[i]; - - s = &sprite[i]; - p = g_player[s->yvel].ps; - if (s->owner >= 0) - { - if (p->newowner >= 0) //Looking thru the camera - { - s->x = p->opos.x; - s->y = p->opos.y; - actor[i].bposz = s->z = p->opos.z+PHEIGHT; - s->ang = p->oang; - setsprite(i,(vec3_t *)s); - } - else - { - if (g_netServer || (g_netServer || ud.multimode > 1)) - otherp = P_FindOtherPlayer(s->yvel,&otherx); - else - { - otherp = s->yvel; - otherx = 0; - } - - if (actorscrptr[sprite[i].picnum]) - A_Execute(i,s->yvel,otherx); - - if (g_netServer || (g_netServer || ud.multimode > 1)) - if (sprite[g_player[otherp].ps->i].extra > 0) - { - if (s->yrepeat > 32 && sprite[g_player[otherp].ps->i].yrepeat < 32) - { - if (otherx < 1400 && p->knee_incs == 0) - { - p->knee_incs = 1; - p->weapon_pos = -1; - p->actorsqu = g_player[otherp].ps->i; - } - } - } - if (ud.god) - { - s->extra = p->max_player_health; - s->cstat = 257; - p->inv_amount[GET_JETPACK] = 1599; - } - - - if (s->extra > 0) - { - actor[i].owner = i; - - if (ud.god == 0) - if (G_CheckForSpaceCeiling(s->sectnum) || G_CheckForSpaceFloor(s->sectnum)) - P_QuickKill(p); - } - else - { - - p->pos.x = s->x; - p->pos.y = s->y; - p->pos.z = s->z-(20<<8); - - p->newowner = -1; - - if (p->wackedbyactor >= 0 && sprite[p->wackedbyactor].statnum < MAXSTATUS) - { - p->ang += G_GetAngleDelta(p->ang,getangle(sprite[p->wackedbyactor].x-p->pos.x,sprite[p->wackedbyactor].y-p->pos.y))>>1; - p->ang &= 2047; - } - - } - s->ang = p->ang; - } - } - else - { - if (p->holoduke_on == -1) - KILLIT(i); - - Bmemcpy(&actor[i].bposx, s, sizeof(vec3_t)); - s->cstat = 0; - - if (s->xrepeat < 42) - { - s->xrepeat += 4; - s->cstat |= 2; - } - else s->xrepeat = 42; - if (s->yrepeat < 36) - s->yrepeat += 4; - else - { - s->yrepeat = 36; - if (sector[s->sectnum].lotag != 2) - A_Fall(i); - if (s->zvel == 0 && sector[s->sectnum].lotag == 1) - s->z += (32<<8); - } - - if (s->extra < 8) - { - s->xvel = 128; - s->ang = p->ang; - s->extra++; - A_SetSprite(i,CLIPMASK0); - } - else - { - s->ang = 2047-p->ang; - setsprite(i,(vec3_t *)s); - } - } - - if (sector[s->sectnum].ceilingstat&1) - s->shade += (sector[s->sectnum].ceilingshade-s->shade)>>1; - else - s->shade += (sector[s->sectnum].floorshade-s->shade)>>1; - -BOLT: - i = nexti; - } -} - -ACTOR_STATIC void G_MoveFX(void) -{ - int32_t i = headspritestat[STAT_FX], j, nexti, p; - int32_t x, ht; - spritetype *s; - - while (i >= 0) - { - s = &sprite[i]; - - nexti = nextspritestat[i]; - - switch (DynamicTileMap[s->picnum]) - { - case RESPAWN__STATIC: - if (sprite[i].extra == 66) - { - j = A_Spawn(i,SHT); - // sprite[j].pal = sprite[i].pal; - KILLIT(i); - } - else if (sprite[i].extra > (66-13)) - sprite[i].extra++; - break; - - case MUSICANDSFX__STATIC: - - ht = s->hitag; - - if (T2 != ud.config.SoundToggle) - { - T2 = ud.config.SoundToggle; - T1 = 0; - } - - if (s->lotag >= 1000 && s->lotag < 2000) - { - x = ldist(&sprite[g_player[screenpeek].ps->i],s); - if (x < ht && T1 == 0) - { - FX_SetReverb(s->lotag - 1000); - T1 = 1; - } - if (x >= ht && T1 == 1) - { - FX_SetReverb(0); - FX_SetReverbDelay(0); - T1 = 0; - } - } - else if (s->lotag < 999 && (unsigned)sector[s->sectnum].lotag < 9 && ud.config.AmbienceToggle && sector[SECT].floorz != sector[SECT].ceilingz) - { - if ((g_sounds[s->lotag].m&2)) - { - x = dist(&sprite[g_player[screenpeek].ps->i],s); - if (x < ht && T1 == 0 && FX_VoiceAvailable(g_sounds[s->lotag].pr-1)) - { - if (g_numEnvSoundsPlaying == ud.config.NumVoices) - { - j = headspritestat[STAT_FX]; - while (j >= 0) - { - if (PN == MUSICANDSFX && j != i && sprite[j].lotag < 999 && actor[j].t_data[0] == 1 && dist(&sprite[j],&sprite[g_player[screenpeek].ps->i]) > x) - { - S_StopEnvSound(sprite[j].lotag,j); - break; - } - j = nextspritestat[j]; - } - if (j == -1) goto BOLT; - } - A_PlaySound(s->lotag,i); - T1 = 1; - } - if (x >= ht && T1 == 1) - { - // T1 = 0; - S_StopEnvSound(s->lotag,i); - } - } - if ((g_sounds[s->lotag].m&16)) - { - if (T5 > 0) T5--; - else - TRAVERSE_CONNECT(p) - if (p == myconnectindex && g_player[p].ps->cursectnum == s->sectnum) - { - j = s->lotag+((unsigned)g_globalRandom%(s->hitag+1)); - S_PlaySound(j); - T5 = GAMETICSPERSEC*40 + (g_globalRandom%(GAMETICSPERSEC*40)); - } - } - } - break; - } -BOLT: - i = nexti; - } -} - -ACTOR_STATIC void G_MoveFallers(void) -{ - int32_t i = headspritestat[STAT_FALLER], nexti, sect, j; - spritetype *s; - int32_t x; - - while (i >= 0) - { - nexti = nextspritestat[i]; - s = &sprite[i]; - - sect = s->sectnum; - - if (T1 == 0) - { - s->z -= (16<<8); - T2 = s->ang; - x = s->extra; - if ((j = A_IncurDamage(i)) >= 0) - { - if (j == FIREEXT || j == RPG || j == RADIUSEXPLOSION || j == SEENINE || j == OOZFILTER) - { - if (s->extra <= 0) - { - T1 = 1; - j = headspritestat[STAT_FALLER]; - while (j >= 0) - { - if (sprite[j].hitag == SHT) - { - actor[j].t_data[0] = 1; - sprite[j].cstat &= (65535-64); - if (sprite[j].picnum == CEILINGSTEAM || sprite[j].picnum == STEAM) - sprite[j].cstat |= 32768; - } - j = nextspritestat[j]; - } - } - } - else - { - actor[i].extra = 0; - s->extra = x; - } - } - s->ang = T2; - s->z += (16<<8); - } - else if (T1 == 1) - { - if (s->lotag > 0) - { - s->lotag-=3; - if (s->lotag <= 0) - { - s->xvel = (32+(krand()&63)); - s->zvel = -(1024+(krand()&1023)); - } - } - else - { - if (s->xvel > 0) - { - s->xvel -= 8; - A_SetSprite(i,CLIPMASK0); - } - - if (G_CheckForSpaceFloor(s->sectnum)) - x = 0; - else - { - if (G_CheckForSpaceCeiling(s->sectnum)) - x = g_spriteGravity/6; - else - x = g_spriteGravity; - } - - if (s->z < (sector[sect].floorz-ZOFFSET)) - { - s->zvel += x; - if (s->zvel > 6144) - s->zvel = 6144; - s->z += s->zvel; - } - if ((sector[sect].floorz-s->z) < (16<<8)) - { - j = 1+(krand()&7); - for (x=0; x= 0) - { - nexti = nextspritestat[i]; - - t = &actor[i].t_data[0]; - s = &sprite[i]; - sect = s->sectnum; - - if (sect < 0) KILLIT(i); - - Bmemcpy(&actor[i].bposx, s, sizeof(vec3_t)); - - IFWITHIN(CRANE,CRANE+3) - { - //t[0] = state - //t[1] = checking sector number - - if (s->xvel) A_GetZLimits(i); - - if (t[0] == 0) //Waiting to check the sector - { - j = headspritesect[t[1]]; - while (j>=0) - { - nextj = nextspritesect[j]; - switch (sprite[j].statnum) - { - case STAT_ACTOR: - case STAT_ZOMBIEACTOR: - case STAT_STANDABLE: - case STAT_PLAYER: - { - vec3_t vect; - - vect.x = msx[t[4]+1]; - vect.y = msy[t[4]+1]; - vect.z = sprite[j].z; - s->ang = getangle(msx[t[4]+1]-s->x,msy[t[4]+1]-s->y); - setsprite(j,&vect); - t[0]++; - goto BOLT; - - } - } - j = nextj; - } - } - - else if (t[0]==1) - { - if (s->xvel < 184) - { - s->picnum = CRANE+1; - s->xvel += 8; - } - A_SetSprite(i,CLIPMASK0); - if (sect == t[1]) - t[0]++; - } - else if (t[0]==2 || t[0]==7) - { - s->z += (1024+512); - - if (t[0]==2) - { - if ((sector[sect].floorz - s->z) < (64<<8)) - if (s->picnum > CRANE) s->picnum--; - - if ((sector[sect].floorz - s->z) < (4096+1024)) - t[0]++; - } - if (t[0]==7) - { - if ((sector[sect].floorz - s->z) < (64<<8)) - { - if (s->picnum > CRANE) s->picnum--; - else - { - if (s->owner==-2) - { - p = A_FindPlayer(s,&x); - A_PlaySound(DUKE_GRUNT,g_player[p].ps->i); - if (g_player[p].ps->on_crane == i) - g_player[p].ps->on_crane = -1; - } - t[0]++; - s->owner = -1; - } - } - } - } - else if (t[0]==3) - { - s->picnum++; - if (s->picnum == (CRANE+2)) - { - p = G_CheckPlayerInSector(t[1]); - if (p >= 0 && g_player[p].ps->on_ground) - { - s->owner = -2; - g_player[p].ps->on_crane = i; - A_PlaySound(DUKE_GRUNT,g_player[p].ps->i); - g_player[p].ps->ang = s->ang+1024; - } - else - { - j = headspritesect[t[1]]; - while (j>=0) - { - switch (sprite[j].statnum) - { - case STAT_ACTOR: - case STAT_STANDABLE: - s->owner = j; - break; - } - j = nextspritesect[j]; - } - } - - t[0]++;//Grabbed the sprite - t[2]=0; - goto BOLT; - } - } - else if (t[0]==4) //Delay before going up - { - t[2]++; - if (t[2] > 10) - t[0]++; - } - else if (t[0]==5 || t[0] == 8) - { - if (t[0]==8 && s->picnum < (CRANE+2)) - if ((sector[sect].floorz-s->z) > 8192) - s->picnum++; - - if (s->z < msx[t[4]+2]) - { - t[0]++; - s->xvel = 0; - } - else - s->z -= (1024+512); - } - else if (t[0]==6) - { - if (s->xvel < 192) - s->xvel += 8; - s->ang = getangle(msx[t[4]]-s->x,msy[t[4]]-s->y); - A_SetSprite(i,CLIPMASK0); - if (((s->x-msx[t[4]])*(s->x-msx[t[4]])+(s->y-msy[t[4]])*(s->y-msy[t[4]])) < (128*128)) - t[0]++; - } - - else if (t[0]==9) - t[0] = 0; - - { - vec3_t vect; - Bmemcpy(&vect,s,sizeof(vec3_t)); - vect.z -= (34<<8); - setsprite(msy[t[4]+2],&vect); - } - - - if (s->owner != -1) - { - p = A_FindPlayer(s,&x); - - if ((j = A_IncurDamage(i)) >= 0) - { - if (s->owner == -2) - if (g_player[p].ps->on_crane == i) - g_player[p].ps->on_crane = -1; - s->owner = -1; - s->picnum = CRANE; - goto BOLT; - } - - if (s->owner >= 0) - { - setsprite(s->owner,(vec3_t *)s); - - Bmemcpy(&actor[s->owner].bposx, s, sizeof(vec3_t)); - - s->zvel = 0; - } - else if (s->owner == -2) - { - g_player[p].ps->opos.x = g_player[p].ps->pos.x = s->x-(sintable[(g_player[p].ps->ang+512)&2047]>>6); - g_player[p].ps->opos.y = g_player[p].ps->pos.y = s->y-(sintable[g_player[p].ps->ang&2047]>>6); - g_player[p].ps->opos.z = g_player[p].ps->pos.z = s->z+(2<<8); - - setsprite(g_player[p].ps->i,(vec3_t *)g_player[p].ps); - g_player[p].ps->cursectnum = sprite[g_player[p].ps->i].sectnum; - } - } - - goto BOLT; - } - - IFWITHIN(WATERFOUNTAIN,WATERFOUNTAIN+3) - { - if (t[0] > 0) - { - if (t[0] < 20) - { - t[0]++; - - s->picnum++; - - if (s->picnum == (WATERFOUNTAIN+3)) - s->picnum = WATERFOUNTAIN+1; - } - else - { - p = A_FindPlayer(s,&x); - - if (x > 512) - { - t[0] = 0; - s->picnum = WATERFOUNTAIN; - } - else t[0] = 1; - } - } - goto BOLT; - } - - if (AFLAMABLE(s->picnum)) - { - if (T1 == 1) - { - T2++; - if ((T2&3) > 0) goto BOLT; - - if (s->picnum == TIRE && T2 == 32) - { - s->cstat = 0; - j = A_Spawn(i,BLOODPOOL); - sprite[j].shade = 127; - } - else - { - if (s->shade < 64) s->shade++; - else KILLIT(i); - } - - j = s->xrepeat-(krand()&7); - if (j < 10) - { - KILLIT(i); - } - - s->xrepeat = j; - - j = s->yrepeat-(krand()&7); - if (j < 4) - { - KILLIT(i); - } - s->yrepeat = j; - } - if (s->picnum == BOX) - { - A_Fall(i); - actor[i].ceilingz = sector[s->sectnum].ceilingz; - } - goto BOLT; - } - - if (s->picnum == TRIPBOMB) - { - if (actor[i].t_data[6] == 1) - { - - if (actor[i].t_data[7] >= 1) - { - actor[i].t_data[7]--; - } - - if (actor[i].t_data[7] <= 0) - { - T3=16; - actor[i].t_data[6]=3; - A_PlaySound(LASERTRIP_ARMING,i); - } - // we're on a timer.... - } - if (T3 > 0 && actor[i].t_data[6] == 3) - { - T3--; - - if (T3 == 8) - { - for (j=0; j<5; j++) RANDOMSCRAP; - x = s->extra; - A_RadiusDamage(i, g_tripbombBlastRadius, x>>2,x>>1,x-(x>>2),x); - - j = A_Spawn(i,EXPLOSION2); - A_PlaySound(LASERTRIP_EXPLODE,j); - sprite[j].ang = s->ang; - sprite[j].xvel = 348; - A_SetSprite(j,CLIPMASK0); - - j = headspritestat[STAT_MISC]; - while (j >= 0) - { - if (sprite[j].picnum == LASERLINE && s->hitag == sprite[j].hitag) - sprite[j].xrepeat = sprite[j].yrepeat = 0; - j = nextspritestat[j]; - } - KILLIT(i); - } - goto BOLT; - } - else - { - x = s->extra; - s->extra = 1; - l = s->ang; - if ((j = A_IncurDamage(i)) >= 0) { actor[i].t_data[6] = 3; - T3 = 16; - } - s->extra = x; - s->ang = l; - } - - switch (T1) - { - default: - p = A_FindPlayer(s,&x); - if (x > 768 || T1 > 16) T1++; - break; - - case 32: - l = s->ang; - s->ang = T6; - - T4 = s->x; - T5 = s->y; - - s->x += sintable[(T6+512)&2047]>>9; - s->y += sintable[(T6)&2047]>>9; - s->z -= (3<<8); - - setsprite(i,(vec3_t *)s); - - x = A_CheckHitSprite(i,&m); - - actor[i].lastvx = x; - - s->ang = l; - - k = 0; - - // if(lTripBombControl & TRIPBOMB_TRIPWIRE) - if (actor[i].t_data[6] != 1) - { - // we're on a trip wire - - while (x > 0) - { - j = A_Spawn(i,LASERLINE); - setsprite(j,(vec3_t *)&sprite[j]); - sprite[j].hitag = s->hitag; - actor[j].t_data[1] = sprite[j].z; - - s->x += sintable[(T6+512)&2047]>>4; - s->y += sintable[(T6)&2047]>>4; - - if (x < 1024) - { - sprite[j].xrepeat = x>>5; - break; - } - x -= 1024; - } - } - - T1++; - - s->x = T4; - s->y = T5; - s->z += (3<<8); - - setsprite(i,(vec3_t *)s); - T4 = T3 = 0; - - if (m >= 0 && actor[i].t_data[6] != 1) - { - actor[i].t_data[6] = 3; - T3 = 13; - A_PlaySound(LASERTRIP_ARMING,i); - } - break; - - case 33: - T2++; - - T4 = s->x; - T5 = s->y; - - s->x += sintable[(T6+512)&2047]>>9; - s->y += sintable[(T6)&2047]>>9; - s->z -= (3<<8); - - setsprite(i,(vec3_t *)s); - - x = A_CheckHitSprite(i,&m); - - s->x = T4; - s->y = T5; - s->z += (3<<8); - setsprite(i,(vec3_t *)s); - - // if( Actor[i].lastvx != x && lTripBombControl & TRIPBOMB_TRIPWIRE) - if (actor[i].lastvx != x && actor[i].t_data[6] != 1) - { - actor[i].t_data[6] = 3; - T3 = 13; - A_PlaySound(LASERTRIP_ARMING,i); - } - break; - } - - goto BOLT; - } - - if (s->picnum >= CRACK1 && s->picnum <= CRACK4) - { - if (s->hitag > 0) - { - t[0] = s->cstat; - t[1] = s->ang; - j = A_IncurDamage(i); - if (j == FIREEXT || j == RPG || j == RADIUSEXPLOSION || j == SEENINE || j == OOZFILTER) - { - j = headspritestat[STAT_STANDABLE]; - while (j >= 0) - { - if (s->hitag == sprite[j].hitag && (sprite[j].picnum == OOZFILTER || sprite[j].picnum == SEENINE)) - if (sprite[j].shade != -32) - sprite[j].shade = -32; - j = nextspritestat[j]; - } - - goto DETONATE; - } - else - { - s->cstat = t[0]; - s->ang = t[1]; - s->extra = 0; - } - } - goto BOLT; - } - - if (s->picnum == FIREEXT) - { - j = A_IncurDamage(i); - if (j == -1) goto BOLT; - - for (k=0; k<16; k++) - { - j = A_InsertSprite(SECT,SX,SY,SZ-(krand()%(48<<8)),SCRAP3+(krand()&3),-8,48,48,krand()&2047,(krand()&63)+64,-(krand()&4095)-(sprite[i].zvel>>2),i,5); - sprite[j].pal = 2; - } - - j = A_Spawn(i,EXPLOSION2); - A_PlaySound(PIPEBOMB_EXPLODE,j); - A_PlaySound(GLASS_HEAVYBREAK,j); - - if (s->hitag > 0) - { - j = headspritestat[STAT_STANDABLE]; - while (j >= 0) - { - if (s->hitag == sprite[j].hitag && (sprite[j].picnum == OOZFILTER || sprite[j].picnum == SEENINE)) - if (sprite[j].shade != -32) - sprite[j].shade = -32; - j = nextspritestat[j]; - } - - x = s->extra; - A_RadiusDamage(i, g_pipebombBlastRadius,x>>2, x-(x>>1),x-(x>>2), x); - j = A_Spawn(i,EXPLOSION2); - A_PlaySound(PIPEBOMB_EXPLODE,j); - - goto DETONATE; - } - else - { - A_RadiusDamage(i,g_seenineBlastRadius,10,15,20,25); - KILLIT(i); - } - goto BOLT; - } - - if (s->picnum == OOZFILTER || s->picnum == SEENINE || s->picnum == SEENINEDEAD || s->picnum == (SEENINEDEAD+1)) - { - if (s->shade != -32 && s->shade != -33) - { - if (s->xrepeat) - j = (A_IncurDamage(i) >= 0); - else - j = 0; - - if (j || s->shade == -31) - { - if (j) s->lotag = 0; - - t[3] = 1; - - j = headspritestat[STAT_STANDABLE]; - while (j >= 0) - { - if (s->hitag == sprite[j].hitag && (sprite[j].picnum == SEENINE || sprite[j].picnum == OOZFILTER)) - sprite[j].shade = -32; - j = nextspritestat[j]; - } - } - } - else - { - if (s->shade == -32) - { - if (s->lotag > 0) - { - s->lotag-=3; - if (s->lotag <= 0) s->lotag = -99; - } - else - s->shade = -33; - } - else - { - if (s->xrepeat > 0) - { - T3++; - if (T3 == 3) - { - if (s->picnum == OOZFILTER) - { - T3 = 0; - goto DETONATE; - } - if (s->picnum != (SEENINEDEAD+1)) - { - T3 = 0; - - if (s->picnum == SEENINEDEAD) s->picnum++; - else if (s->picnum == SEENINE) - s->picnum = SEENINEDEAD; - } - else goto DETONATE; - } - goto BOLT; - } - -DETONATE: - - g_earthquakeTime = 16; - - j = headspritestat[STAT_EFFECTOR]; - while (j >= 0) - { - if (s->hitag == sprite[j].hitag) - { - if (sprite[j].lotag == 13) - { - if (actor[j].t_data[2] == 0) - actor[j].t_data[2] = 1; - } - else if (sprite[j].lotag == 8) - actor[j].t_data[4] = 1; - else if (sprite[j].lotag == 18) - { - if (actor[j].t_data[0] == 0) - actor[j].t_data[0] = 1; - } - else if (sprite[j].lotag == 21) - actor[j].t_data[0] = 1; - } - j = nextspritestat[j]; - } - - s->z -= (32<<8); - - if (s->xrepeat) - for (x=0; x<8; x++) RANDOMSCRAP; - - if ((t[3] == 1 && s->xrepeat) || s->lotag == -99) - { - int32_t j = A_Spawn(i,EXPLOSION2); - x = s->extra; - A_RadiusDamage(i,g_seenineBlastRadius,x>>2, x-(x>>1),x-(x>>2), x); - A_PlaySound(PIPEBOMB_EXPLODE,j); - } - - KILLIT(i); - } - } - goto BOLT; - } - - if (s->picnum == MASTERSWITCH) - { - if (s->yvel == 1) - { - s->hitag--; - if (s->hitag <= 0) - { - G_OperateSectors(sect,i); - - j = headspritesect[sect]; - while (j >= 0) - { - if (sprite[j].statnum == STAT_EFFECTOR) - { - switch (sprite[j].lotag) - { - case 2: - case 21: - case 31: - case 32: - case 36: - actor[j].t_data[0] = 1; - break; - case 3: - actor[j].t_data[4] = 1; - break; - } - } - else if (sprite[j].statnum == STAT_STANDABLE) - { - switch (DynamicTileMap[sprite[j].picnum]) - { - case SEENINE__STATIC: - case OOZFILTER__STATIC: - sprite[j].shade = -31; - break; - } - } - j = nextspritesect[j]; - } - KILLIT(i); - } - } - goto BOLT; - } - switchpicnum = s->picnum; - if ((s->picnum > SIDEBOLT1) && (s->picnum <= SIDEBOLT1+3)) - { - switchpicnum = SIDEBOLT1; - } - if ((s->picnum > BOLT1) && (s->picnum <= BOLT1+3)) - { - switchpicnum = BOLT1; - } - - switch (DynamicTileMap[switchpicnum]) - { - case VIEWSCREEN__STATIC: - case VIEWSCREEN2__STATIC: - - if (s->xrepeat == 0) KILLIT(i); - - p = A_FindPlayer(s, &x); - - if (x < 2048) - { - if (SP == 1) - camsprite = i; - } - else if (camsprite != -1 && T1 == 1) - { - camsprite = -1; - T1 = 0; - //loadtile(s->picnum); - //invalidatetile(s->picnum,-1,255); - walock[TILE_VIEWSCR] = 199; - } - - goto BOLT; - - case TRASH__STATIC: - - if (s->xvel == 0) s->xvel = 1; - if (A_SetSprite(i, CLIPMASK0)) - { - A_Fall(i); - if (krand()&1) s->zvel -= 256; - if (klabs(s->xvel) < 48) - s->xvel += (krand()&3); - } - else KILLIT(i); - break; - - case SIDEBOLT1__STATIC: - // case SIDEBOLT1+1: - // case SIDEBOLT1+2: - // case SIDEBOLT1+3: - p = A_FindPlayer(s, &x); - if (x > 20480) goto BOLT; - -CLEAR_THE_BOLT2: - if (t[2]) - { - t[2]--; - goto BOLT; - } - if ((s->xrepeat|s->yrepeat) == 0) - { - s->xrepeat=t[0]; - s->yrepeat=t[1]; - } - if ((krand()&8) == 0) - { - t[0]=s->xrepeat; - t[1]=s->yrepeat; - t[2] = g_globalRandom&4; - s->xrepeat=s->yrepeat=0; - goto CLEAR_THE_BOLT2; - } - s->picnum++; - - if (l&1) s->cstat ^= 2; - - if ((krand()&1) && sector[sect].floorpicnum == HURTRAIL) - A_PlaySound(SHORT_CIRCUIT,i); - - if (s->picnum == SIDEBOLT1+4) s->picnum = SIDEBOLT1; - - goto BOLT; - - case BOLT1__STATIC: - // case BOLT1+1: - // case BOLT1+2: - // case BOLT1+3: - p = A_FindPlayer(s, &x); - if (x > 20480) goto BOLT; - - if (t[3] == 0) - t[3]=sector[sect].floorshade; - -CLEAR_THE_BOLT: - if (t[2]) - { - t[2]--; - sector[sect].floorshade = 20; - sector[sect].ceilingshade = 20; - goto BOLT; - } - if ((s->xrepeat|s->yrepeat) == 0) - { - s->xrepeat=t[0]; - s->yrepeat=t[1]; - } - else if ((krand()&8) == 0) - { - t[0]=s->xrepeat; - t[1]=s->yrepeat; - t[2] = g_globalRandom&4; - s->xrepeat=s->yrepeat=0; - goto CLEAR_THE_BOLT; - } - s->picnum++; - - l = g_globalRandom&7; - s->xrepeat=l+8; - - if (l&1) s->cstat ^= 2; - - if (s->picnum == (BOLT1+1) && (krand()&7) == 0 && sector[sect].floorpicnum == HURTRAIL) - A_PlaySound(SHORT_CIRCUIT,i); - - if (s->picnum==BOLT1+4) s->picnum=BOLT1; - - if (s->picnum&1) - { - sector[sect].floorshade = 0; - sector[sect].ceilingshade = 0; - } - else - { - sector[sect].floorshade = 20; - sector[sect].ceilingshade = 20; - } - goto BOLT; - - case WATERDRIP__STATIC: - - if (t[1]) - { - if (--t[1] == 0) - s->cstat &= 32767; - } - else - { - A_Fall(i); - A_SetSprite(i,CLIPMASK0); - if (s->xvel > 0) s->xvel -= 2; - - if (s->zvel == 0) - { - s->cstat |= 32768; - - if (s->pal != 2 && s->hitag == 0) - A_PlaySound(SOMETHING_DRIPPING,i); - - if (sprite[s->owner].picnum != WATERDRIP) - { - KILLIT(i); - } - else - { - actor[i].bposz = s->z = t[0]; - t[1] = 48+(krand()&31); - } - } - } - - - goto BOLT; - - case DOORSHOCK__STATIC: - j = klabs(sector[sect].ceilingz-sector[sect].floorz)>>9; - s->yrepeat = j+4; - s->xrepeat = 16; - s->z = sector[sect].floorz; - goto BOLT; - - case TOUCHPLATE__STATIC: - if (t[1] == 1 && s->hitag >= 0) //Move the sector floor - { - x = sector[sect].floorz; - - if (t[3] == 1) - { - if (x >= t[2]) - { - sector[sect].floorz = x; - t[1] = 0; - } - else - { - sector[sect].floorz += sector[sect].extra; - p = G_CheckPlayerInSector(sect); - if (p >= 0) g_player[p].ps->pos.z += sector[sect].extra; - } - } - else - { - if (x <= s->z) - { - sector[sect].floorz = s->z; - t[1] = 0; - } - else - { - sector[sect].floorz -= sector[sect].extra; - p = G_CheckPlayerInSector(sect); - if (p >= 0) - g_player[p].ps->pos.z -= sector[sect].extra; - } - } - goto BOLT; - } - - if (t[5] == 1) goto BOLT; - - p = G_CheckPlayerInSector(sect); - if (p >= 0 && (g_player[p].ps->on_ground || s->ang == 512)) - { - if (t[0] == 0 && !G_CheckActivatorMotion(s->lotag)) - { - t[0] = 1; - t[1] = 1; - t[3] = !t[3]; - G_OperateMasterSwitches(s->lotag); - G_OperateActivators(s->lotag,p); - if (s->hitag > 0) - { - s->hitag--; - if (s->hitag == 0) t[5] = 1; - } - } - } - else t[0] = 0; - - if (t[1] == 1) - { - j = headspritestat[STAT_STANDABLE]; - while (j >= 0) - { - if (j != i && sprite[j].picnum == TOUCHPLATE && sprite[j].lotag == s->lotag) - { - actor[j].t_data[1] = 1; - actor[j].t_data[3] = t[3]; - } - j = nextspritestat[j]; - } - } - goto BOLT; - - case CANWITHSOMETHING__STATIC: - case CANWITHSOMETHING2__STATIC: - case CANWITHSOMETHING3__STATIC: - case CANWITHSOMETHING4__STATIC: - A_Fall(i); - if ((j = A_IncurDamage(i)) >= 0) - { - A_PlaySound(VENT_BUST,i); - - for (j=9; j>=0; j--) - RANDOMSCRAP; - - if (s->lotag) A_Spawn(i,s->lotag); - - KILLIT(i); - } - goto BOLT; - - case FLOORFLAME__STATIC: - case FIREBARREL__STATIC: - case FIREVASE__STATIC: - case EXPLODINGBARREL__STATIC: - case WOODENHORSE__STATIC: - case HORSEONSIDE__STATIC: - case NUKEBARREL__STATIC: - case NUKEBARRELDENTED__STATIC: - case NUKEBARRELLEAKED__STATIC: - case TOILETWATER__STATIC: - case RUBBERCAN__STATIC: - case STEAM__STATIC: - case CEILINGSTEAM__STATIC: - if (!actorscrptr[sprite[i].picnum]) - goto BOLT; - p = A_FindPlayer(s, &x); - A_Execute(i,p,x); - goto BOLT; - case WATERBUBBLEMAKER__STATIC: - if (!actorscrptr[sprite[i].picnum]) - goto BOLT; - p = A_FindPlayer(s, &x); - A_Execute(i,p,x); - goto BOLT; - } - -BOLT: - i = nexti; - } -} - -ACTOR_STATIC void A_DoProjectileBounce(int32_t i) -{ - int32_t dax, day, daz = 4096; - spritetype *s = &sprite[i]; - int32_t hitsect = s->sectnum; - int32_t k = sector[hitsect].wallptr; - int32_t l = wall[k].point2; - - int32_t xvect = mulscale10(s->xvel,sintable[(s->ang+512)&2047]); - int32_t yvect = mulscale10(s->xvel,sintable[s->ang&2047]); - int32_t zvect = s->zvel; - - int32_t daang = getangle(wall[l].x-wall[k].x,wall[l].y-wall[k].y); - - if (s->z < (actor[i].floorz+actor[i].ceilingz)>>1) - k = sector[hitsect].ceilingheinum; - else - k = sector[hitsect].floorheinum; - - dax = mulscale14(k,sintable[(daang)&2047]); - day = mulscale14(k,sintable[(daang+1536)&2047]); - - k = xvect*dax+yvect*day+zvect*daz; - l = dax*dax+day*day+daz*daz; - if ((klabs(k)>>14) < l) - { - k = divscale17(k,l); - xvect -= mulscale16(dax,k); - yvect -= mulscale16(day,k); - zvect -= mulscale16(daz,k); - } - - s->zvel = zvect; - s->xvel = ksqrt(dmulscale8(xvect,xvect,yvect,yvect)); - s->ang = getangle(xvect,yvect); -} - -ACTOR_STATIC void G_MoveWeapons(void) -{ - int32_t i = headspritestat[STAT_PROJECTILE], j=0, k, f, nexti, p, q; - vec3_t davect; - int32_t x, ll; - uint32_t qq; - spritetype *s; - - while (i >= 0) - { - nexti = nextspritestat[i]; - s = &sprite[i]; - - if (s->sectnum < 0) KILLIT(i); - - Bmemcpy(&actor[i].bposx, s, sizeof(vec3_t)); - // here - - if (A_CheckSpriteFlags(i,SPRITE_PROJECTILE)) - { - /* Custom projectiles. This is a big hack. */ - - if (SpriteProjectile[i].pal >= 0) - s->pal=SpriteProjectile[i].pal; - - if (SpriteProjectile[i].workslike & PROJECTILE_KNEE) - KILLIT(i); - - if (SpriteProjectile[i].workslike & PROJECTILE_RPG) - { - // if (SpriteProjectile[i].workslike & COOLEXPLOSION1) - // if( g_sounds[WIERDSHOT_FLY].num == 0 ) - // A_PlaySound(WIERDSHOT_FLY,i); - - Bmemcpy(&davect,s,sizeof(vec3_t)); - - if (SpriteProjectile[i].flashcolor) - G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), 2048, SpriteProjectile[i].flashcolor,PR_LIGHT_PRIO_LOW_GAME); - - if (SpriteProjectile[i].workslike & PROJECTILE_BOUNCESOFFWALLS) - { - /* if(s->yvel < 1 || s->extra < 2 || (s->xvel|s->zvel) == 0) - Did this cause the bug with prematurely exploding projectiles? */ - if (s->yvel < 1) - { - - if (SpriteProjectile[i].spawns >= 0) - { - k = A_Spawn(i,SpriteProjectile[i].spawns); - -// Bmemcpy(&sprite[k],&davect,sizeof(vec3_t)); - /* - sprite[k].x = dax; - sprite[k].y = day; - sprite[k].z = daz; - */ - - if (SpriteProjectile[i].sxrepeat > 4) - sprite[k].xrepeat=SpriteProjectile[i].sxrepeat; - if (SpriteProjectile[i].syrepeat > 4) - sprite[k].yrepeat=SpriteProjectile[i].syrepeat; - } - if (SpriteProjectile[i].isound >= 0) - A_PlaySound(SpriteProjectile[i].isound,i); - - s->extra=SpriteProjectile[i].extra; - - if (SpriteProjectile[i].extra_rand > 0) - s->extra += (krand()&SpriteProjectile[i].extra_rand); - - x = s->extra; - A_RadiusDamage(i,SpriteProjectile[i].hitradius, x>>2,x>>1,x-(x>>2),x); - - KILLIT(i); - } - } - - p = -1; - - if (SpriteProjectile[i].workslike & PROJECTILE_COOLEXPLOSION1) - { - s->shade++; - if (s->shade >= 40) KILLIT(i); - } - - if (SpriteProjectile[i].drop) - s->zvel -= SpriteProjectile[i].drop; - - if (SpriteProjectile[i].workslike & PROJECTILE_SPIT) - if (s->zvel < 6144) - s->zvel += g_spriteGravity-112; - - k = s->xvel; - ll = s->zvel; - - if (sector[s->sectnum].lotag == 2) - { - k = s->xvel>>1; - ll = s->zvel>>1; - } - - A_GetZLimits(i); - qq = CLIPMASK1; - - if (SpriteProjectile[i].trail >= 0) - { - for (f=0; f<=SpriteProjectile[i].tnum; f++) - { - j = A_Spawn(i,SpriteProjectile[i].trail); - if (SpriteProjectile[i].toffset != 0) - sprite[j].z += (SpriteProjectile[i].toffset<<8); - if (SpriteProjectile[i].txrepeat >= 0) - sprite[j].xrepeat=SpriteProjectile[i].txrepeat; - if (SpriteProjectile[i].tyrepeat >= 0) - sprite[j].yrepeat=SpriteProjectile[i].tyrepeat; - } - } - - for (f=1; f<=SpriteProjectile[i].velmult; f++) - { - vec3_t tmpvect; - Bmemcpy(&davect,s,sizeof(vec3_t)); - - tmpvect.x = (k*(sintable[(s->ang+512)&2047]))>>14; - tmpvect.y = (k*(sintable[s->ang&2047]))>>14; - tmpvect.z = ll; - - j = A_MoveSprite(i,&tmpvect,qq); - if (j) - break; - } - - if (!(SpriteProjectile[i].workslike & PROJECTILE_BOUNCESOFFWALLS) && - s->yvel >= 0 && sprite[s->yvel].sectnum != MAXSECTORS) - if (FindDistance2D(s->x-sprite[s->yvel].x,s->y-sprite[s->yvel].y) < 256) - j = 49152|s->yvel; - - actor[i].movflag = j; - - if (s->sectnum < 0) - { - KILLIT(i); - } - - if (SpriteProjectile[i].workslike & PROJECTILE_TIMED && SpriteProjectile[i].range > 0) - { - if (!(actor[i].t_data[8])) - actor[i].t_data[8] = 1; - else - actor[i].t_data[8]++; - - if (actor[i].t_data[8] > SpriteProjectile[i].range) - { - if (SpriteProjectile[i].workslike & PROJECTILE_EXPLODEONTIMER) - { - if (SpriteProjectile[i].spawns >= 0) - { - k = A_Spawn(i,SpriteProjectile[i].spawns); - - Bmemcpy(&sprite[k],&davect,sizeof(vec3_t)); - - if (SpriteProjectile[i].sxrepeat > 4) - sprite[k].xrepeat=SpriteProjectile[i].sxrepeat; - if (SpriteProjectile[i].syrepeat > 4) - sprite[k].yrepeat=SpriteProjectile[i].syrepeat; - } - if (SpriteProjectile[i].isound >= 0) - A_PlaySound(SpriteProjectile[i].isound,i); - - s->extra=SpriteProjectile[i].extra; - - if (SpriteProjectile[i].extra_rand > 0) - s->extra += (krand()&SpriteProjectile[i].extra_rand); - - x = s->extra; - A_RadiusDamage(i,SpriteProjectile[i].hitradius, x>>2,x>>1,x-(x>>2),x); - } - KILLIT(i); - } - } - - if ((j&49152) != 49152) - if (!(SpriteProjectile[i].workslike & PROJECTILE_BOUNCESOFFWALLS)) - { - if (s->z < actor[i].ceilingz) - { - j = 16384|(s->sectnum); - s->zvel = -1; - } - else if ((s->z > actor[i].floorz && sector[s->sectnum].lotag != 1) || - (s->z > actor[i].floorz+(16<<8) && sector[s->sectnum].lotag == 1)) - { - j = 16384|(s->sectnum); - if (sector[s->sectnum].lotag != 1) - s->zvel = 1; - } - } - - if (SpriteProjectile[i].workslike & PROJECTILE_WATERBUBBLES && - sector[s->sectnum].lotag == 2 && rnd(140)) - A_Spawn(i,WATERBUBBLE); - - if (j != 0) - { - if (SpriteProjectile[i].workslike & PROJECTILE_COOLEXPLOSION1) - { - s->xvel = 0; - s->zvel = 0; - } - - if ((j&49152) == 49152) - { - j &= (MAXSPRITES-1); - - if (SpriteProjectile[i].workslike & PROJECTILE_BOUNCESOFFSPRITES) - { - s->yvel--; - - k = getangle(sprite[j].x-s->x,sprite[j].y-s->y)+(sprite[j].cstat&16?0:512); - s->ang = ((k<<1) - s->ang)&2047; - - if (SpriteProjectile[i].bsound >= 0) - A_PlaySound(SpriteProjectile[i].bsound,i); - - if (SpriteProjectile[i].workslike & PROJECTILE_LOSESVELOCITY) - { - s->xvel=s->xvel>>1; - s->zvel=s->zvel>>1; - } - if (!(SpriteProjectile[i].workslike & PROJECTILE_FORCEIMPACT))goto BOLT; - } - - A_DamageObject(j,i); - - if (sprite[j].picnum == APLAYER) - { - p = sprite[j].yvel; - A_PlaySound(PISTOL_BODYHIT,j); - - if (SpriteProjectile[i].workslike & PROJECTILE_SPIT) - { - g_player[p].ps->horiz += 32; - g_player[p].ps->return_to_center = 8; - - if (g_player[p].ps->loogcnt == 0) - { - if (!A_CheckSoundPlaying(g_player[p].ps->i, DUKE_LONGTERM_PAIN)) - A_PlaySound(DUKE_LONGTERM_PAIN,g_player[p].ps->i); - - j = 3+(krand()&3); - g_player[p].ps->numloogs = j; - g_player[p].ps->loogcnt = 24*4; - for (x=0; x < j; x++) - { - g_player[p].ps->loogiex[x] = krand()%xdim; - g_player[p].ps->loogiey[x] = krand()%ydim; - } - } - } - } - - if (SpriteProjectile[i].workslike & PROJECTILE_RPG_IMPACT) - { - - actor[j].owner = s->owner; - actor[j].picnum = s->picnum; - actor[j].extra += SpriteProjectile[i].extra; - - if (SpriteProjectile[i].spawns >= 0) - { - k = A_Spawn(i,SpriteProjectile[i].spawns); - Bmemcpy(&sprite[k],&davect,sizeof(vec3_t)); - - if (SpriteProjectile[i].sxrepeat > 4) - sprite[k].xrepeat=SpriteProjectile[i].sxrepeat; - if (SpriteProjectile[i].syrepeat > 4) - sprite[k].yrepeat=SpriteProjectile[i].syrepeat; - } - - if (SpriteProjectile[i].isound >= 0) - A_PlaySound(SpriteProjectile[i].isound,i); - - if (!(SpriteProjectile[i].workslike & PROJECTILE_FORCEIMPACT)) - KILLIT(i); - - } - if (SpriteProjectile[i].workslike & PROJECTILE_FORCEIMPACT) - goto BOLT; - - } - else if ((j&49152) == 32768) - { - j &= (MAXWALLS-1); - - if (SpriteProjectile[i].workslike & PROJECTILE_BOUNCESOFFMIRRORS && - (wall[j].overpicnum == MIRROR || wall[j].picnum == MIRROR)) - { - k = getangle( - wall[wall[j].point2].x-wall[j].x, - wall[wall[j].point2].y-wall[j].y); - s->ang = ((k<<1) - s->ang)&2047; - s->owner = i; - A_Spawn(i,TRANSPORTERSTAR); - goto BOLT; - } - else - { - setsprite(i,&davect); - A_DamageWall(i,j,(vec3_t *)s,s->picnum); - - if (SpriteProjectile[i].workslike & PROJECTILE_BOUNCESOFFWALLS) - { - if (wall[j].overpicnum != MIRROR && wall[j].picnum != MIRROR) - s->yvel--; - - k = getangle( - wall[wall[j].point2].x-wall[j].x, - wall[wall[j].point2].y-wall[j].y); - s->ang = ((k<<1) - s->ang)&2047; - - if (SpriteProjectile[i].bsound >= 0) - A_PlaySound(SpriteProjectile[i].bsound,i); - - if (SpriteProjectile[i].workslike & PROJECTILE_LOSESVELOCITY) - { - s->xvel=s->xvel>>1; - s->zvel=s->zvel>>1; - } - goto BOLT; - } - } - } - else if ((j&49152) == 16384) - { - setsprite(i,&davect); - - if (s->zvel < 0) - { - if (sector[s->sectnum].ceilingstat&1 && sector[s->sectnum].ceilingpal == 0) - KILLIT(i); - - Sect_DamageCeiling(s->sectnum); - } - - if (SpriteProjectile[i].workslike & PROJECTILE_BOUNCESOFFWALLS) - { - A_DoProjectileBounce(i); - A_SetSprite(i,qq); - - s->yvel--; - - if (SpriteProjectile[i].bsound >= 0) - A_PlaySound(SpriteProjectile[i].bsound,i); - - if (SpriteProjectile[i].workslike & PROJECTILE_LOSESVELOCITY) - { - s->xvel=s->xvel>>1; - s->zvel=s->zvel>>1; - } - - goto BOLT; - } - } - - if (SpriteProjectile[i].workslike & PROJECTILE_HITSCAN) - { - if (!actorscrptr[sprite[i].picnum]) - goto BOLT; - p = A_FindPlayer(s,&x); - A_Execute(i,p,x); - goto BOLT; - } - - if (SpriteProjectile[i].workslike & PROJECTILE_RPG) - { - if (SpriteProjectile[i].spawns > 0) - { - k = A_Spawn(i,SpriteProjectile[i].spawns); - Bmemcpy(&sprite[k],&davect,sizeof(vec3_t)); - - if (SpriteProjectile[i].sxrepeat > 4) - sprite[k].xrepeat=SpriteProjectile[i].sxrepeat; - if (SpriteProjectile[i].syrepeat > 4) - sprite[k].yrepeat=SpriteProjectile[i].syrepeat; - } - - if (SpriteProjectile[i].isound >= 0) - A_PlaySound(SpriteProjectile[i].isound,i); - - s->extra=SpriteProjectile[i].extra; - if (SpriteProjectile[i].extra_rand > 0) - s->extra += (krand()&SpriteProjectile[i].extra_rand); - - A_RadiusDamage(i,SpriteProjectile[i].hitradius, - s->extra>>2,s->extra>>1,s->extra-(s->extra>>2),s->extra); - KILLIT(i); - } - } - goto BOLT; - } - } - else - { - - // here - switch (DynamicTileMap[s->picnum]) - { - case RADIUSEXPLOSION__STATIC: - case KNEE__STATIC: - KILLIT(i); - case TONGUE__STATIC: - T1 = sintable[(T2)&2047]>>9; - T2 += 32; - if (T2 > 2047) KILLIT(i); - - if (sprite[s->owner].statnum == MAXSTATUS) - if (A_CheckEnemySprite(&sprite[s->owner]) == 0) - KILLIT(i); - - s->ang = sprite[s->owner].ang; - s->x = sprite[s->owner].x; - s->y = sprite[s->owner].y; - if (sprite[s->owner].picnum == APLAYER) - s->z = sprite[s->owner].z-(34<<8); - for (k=0; ksectnum, - s->x+((k*sintable[(s->ang+512)&2047])>>9), - s->y+((k*sintable[s->ang&2047])>>9), - s->z+((k*ksgn(s->zvel))*klabs(s->zvel/12)),TONGUE,-40+(k<<1), - 8,8,0,0,0,i,5); - sprite[q].cstat = 128; - sprite[q].pal = 8; - } - q = A_InsertSprite(s->sectnum, - s->x+((k*sintable[(s->ang+512)&2047])>>9), - s->y+((k*sintable[s->ang&2047])>>9), - s->z+((k*ksgn(s->zvel))*klabs(s->zvel/12)),INNERJAW,-40, - 32,32,0,0,0,i,5); - sprite[q].cstat = 128; - if (T2 > 512 && T2 < (1024)) - sprite[q].picnum = INNERJAW+1; - - goto BOLT; - - case FREEZEBLAST__STATIC: - if (s->yvel < 1 || s->extra < 2 || (s->xvel|s->zvel) == 0) - { - j = A_Spawn(i,TRANSPORTERSTAR); - sprite[j].pal = 1; - sprite[j].xrepeat = 32; - sprite[j].yrepeat = 32; - KILLIT(i); - } - case SHRINKSPARK__STATIC: - case RPG__STATIC: - case FIRELASER__STATIC: - case SPIT__STATIC: - case COOLEXPLOSION1__STATIC: - - if (s->picnum == COOLEXPLOSION1) - if (!S_CheckSoundPlaying(i,WIERDSHOT_FLY)) - A_PlaySound(WIERDSHOT_FLY,i); - - p = -1; - - k = s->xvel; - ll = s->zvel; - - if (s->picnum == RPG && sector[s->sectnum].lotag == 2) - { - k = s->xvel>>1; - ll = s->zvel>>1; - } - - Bmemcpy(&davect,s,sizeof(vec3_t)); - - A_GetZLimits(i); - qq = CLIPMASK1; - - switch (DynamicTileMap[s->picnum]) - { - case RPG__STATIC: - if (DynamicTileMap[s->picnum] == RPG__STATIC && actor[i].picnum != BOSS2 && - s->xrepeat >= 10 && sector[s->sectnum].lotag != 2) - { - j = A_Spawn(i,SMALLSMOKE); - sprite[j].z += (1<<8); - } - break; - } - - { - vec3_t tmpvect; - - tmpvect.x = (k*(sintable[(s->ang+512)&2047]))>>14; - tmpvect.y = (k*(sintable[s->ang&2047]))>>14; - tmpvect.z = ll; - j = A_MoveSprite(i,&tmpvect,qq); - } - - - if (s->picnum == RPG && s->yvel >= 0) - if (FindDistance2D(s->x-sprite[s->yvel].x,s->y-sprite[s->yvel].y) < 256) - j = 49152|s->yvel; - - actor[i].movflag = j; - - if (s->sectnum < 0) - KILLIT(i); - - if ((j&49152) != 49152) - if (s->picnum != FREEZEBLAST) - { - if (s->z < actor[i].ceilingz) - { - j = 16384|(s->sectnum); - s->zvel = -1; - } - else if ((s->z > actor[i].floorz && sector[s->sectnum].lotag != 1) || - (s->z > actor[i].floorz+(16<<8) && sector[s->sectnum].lotag == 1)) - { - j = 16384|(s->sectnum); - if (sector[s->sectnum].lotag != 1) - s->zvel = 1; - } - } - - if (s->picnum == FIRELASER) - { - for (k=-3; k<2; k++) - { - x = A_InsertSprite(s->sectnum, - s->x+((k*sintable[(s->ang+512)&2047])>>9), - s->y+((k*sintable[s->ang&2047])>>9), - s->z+((k*ksgn(s->zvel))*klabs(s->zvel/24)),FIRELASER,-40+(k<<2), - s->xrepeat,s->yrepeat,0,0,0,s->owner,5); - - sprite[x].cstat = 128; - sprite[x].pal = s->pal; - } - } - else if (s->picnum == SPIT) if (s->zvel < 6144) - s->zvel += g_spriteGravity-112; - - if (j != 0) - { - if (s->picnum == COOLEXPLOSION1) - { - if ((j&49152) == 49152 && sprite[j&(MAXSPRITES-1)].picnum != APLAYER) - goto COOLEXPLOSION; - s->xvel = 0; - s->zvel = 0; - } - - if ((j&49152) == 49152) - { - j &= (MAXSPRITES-1); - - if (s->picnum == FREEZEBLAST && sprite[j].pal == 1) - if (A_CheckEnemySprite(&sprite[j]) || sprite[j].picnum == APLAYER) - { - j = A_Spawn(i,TRANSPORTERSTAR); - sprite[j].pal = 1; - sprite[j].xrepeat = 32; - sprite[j].yrepeat = 32; - - KILLIT(i); - } - - A_DamageObject(j,i); - - if (sprite[j].picnum == APLAYER) - { - p = sprite[j].yvel; - A_PlaySound(PISTOL_BODYHIT,j); - - if (s->picnum == SPIT) - { - g_player[p].ps->horiz += 32; - g_player[p].ps->return_to_center = 8; - - if (g_player[p].ps->loogcnt == 0) - { - if (!A_CheckSoundPlaying(g_player[p].ps->i, DUKE_LONGTERM_PAIN)) - A_PlaySound(DUKE_LONGTERM_PAIN,g_player[p].ps->i); - - j = 3+(krand()&3); - g_player[p].ps->numloogs = j; - g_player[p].ps->loogcnt = 24*4; - for (x=0; x < j; x++) - { - g_player[p].ps->loogiex[x] = krand()%xdim; - g_player[p].ps->loogiey[x] = krand()%ydim; - } - } - } - } - } - else if ((j&49152) == 32768) - { - j &= (MAXWALLS-1); - - if (s->picnum != RPG && s->picnum != FREEZEBLAST && s->picnum != SPIT && (wall[j].overpicnum == MIRROR || wall[j].picnum == MIRROR)) - { - k = getangle( - wall[wall[j].point2].x-wall[j].x, - wall[wall[j].point2].y-wall[j].y); - s->ang = ((k<<1) - s->ang)&2047; - s->owner = i; - A_Spawn(i,TRANSPORTERSTAR); - goto BOLT; - } - else - { - setsprite(i,&davect); - A_DamageWall(i,j,(vec3_t *)s,s->picnum); - - if (s->picnum == FREEZEBLAST) - { - if (wall[j].overpicnum != MIRROR && wall[j].picnum != MIRROR) - { - s->extra >>= 1; - s->yvel--; - } - - k = getangle( - wall[wall[j].point2].x-wall[j].x, - wall[wall[j].point2].y-wall[j].y); - s->ang = ((k<<1) - s->ang)&2047; - goto BOLT; - } - } - } - else if ((j&49152) == 16384) - { - setsprite(i,&davect); - - if (s->zvel < 0) - { - if (sector[s->sectnum].ceilingstat&1) - if (sector[s->sectnum].ceilingpal == 0) - KILLIT(i); - - Sect_DamageCeiling(s->sectnum); - } - - if (s->picnum == FREEZEBLAST) - { - A_DoProjectileBounce(i); - A_SetSprite(i,qq); - s->extra >>= 1; - if (s->xrepeat > 8) - s->xrepeat -= 2; - if (s->yrepeat > 8) - s->yrepeat -= 2; - s->yvel--; - goto BOLT; - } - } - - if (s->picnum != SPIT) - { - if (s->picnum == RPG) - { - k = A_Spawn(i,EXPLOSION2); - A_PlaySound(RPG_EXPLODE,k); - Bmemcpy(&sprite[k],&davect,sizeof(vec3_t)); - - if (s->xrepeat < 10) - { - sprite[k].xrepeat = 6; - sprite[k].yrepeat = 6; - } - else if ((j&49152) == 16384) - { - if (s->zvel > 0) - A_Spawn(i,EXPLOSION2BOT); - else - { - sprite[k].cstat |= 8; - sprite[k].z += (48<<8); - } - - } - - if (s->xrepeat >= 10) - { - x = s->extra; - A_RadiusDamage(i,g_rpgBlastRadius, x>>2,x>>1,x-(x>>2),x); - } - else - { - x = s->extra+(g_globalRandom&3); - A_RadiusDamage(i,(g_rpgBlastRadius>>1),x>>2,x>>1,x-(x>>2),x); - } - } - else if (s->picnum == SHRINKSPARK) - { - A_Spawn(i,SHRINKEREXPLOSION); - A_PlaySound(SHRINKER_HIT,i); - A_RadiusDamage(i,g_shrinkerBlastRadius,0,0,0,0); - } - else if (s->picnum != COOLEXPLOSION1 && s->picnum != FREEZEBLAST && s->picnum != FIRELASER) - { - k = A_Spawn(i,EXPLOSION2); - sprite[k].xrepeat = sprite[k].yrepeat = s->xrepeat>>1; - if ((j&49152) == 16384) - { - if (s->zvel < 0) - { - sprite[k].cstat |= 8; - sprite[k].z += (72<<8); - } - - } - } - } - if (s->picnum != COOLEXPLOSION1) KILLIT(i); - } - if (s->picnum == COOLEXPLOSION1) - { -COOLEXPLOSION: - s->shade++; - if (s->shade >= 40) KILLIT(i); - } - else if (s->picnum == RPG && sector[s->sectnum].lotag == 2 && s->xrepeat >= 10 && rnd(140)) - A_Spawn(i,WATERBUBBLE); - - goto BOLT; - - case SHOTSPARK1__STATIC: - if (!actorscrptr[sprite[i].picnum]) - goto BOLT; - p = A_FindPlayer(s,&x); - A_Execute(i,p,x); - goto BOLT; - } - } -BOLT: - i = nexti; - } -} - -ACTOR_STATIC void G_MoveTransports(void) -{ - int32_t warpspriteto; - int32_t i = headspritestat[STAT_TRANSPORT], j, k, l, p, sect, sectlotag, nexti, nextj; - int32_t ll,onfloorz,q; - - while (i >= 0) - { - sect = SECT; - sectlotag = sector[sect].lotag; - - nexti = nextspritestat[i]; - - if (OW == i) - { - i = nexti; - continue; - } - - onfloorz = T5; - - if (T1 > 0) T1--; - - j = headspritesect[sect]; - while (j >= 0) - { - nextj = nextspritesect[j]; - - switch (sprite[j].statnum) - { - case STAT_PLAYER: - - if (sprite[j].owner != -1) - { - p = sprite[j].yvel; - - g_player[p].ps->on_warping_sector = 1; - - if (g_player[p].ps->transporter_hold == 0 && g_player[p].ps->jumping_counter == 0) - { - if (g_player[p].ps->on_ground && sectlotag == 0 && onfloorz && g_player[p].ps->jetpack_on == 0) - { - if (sprite[i].pal == 0) - { - A_Spawn(i,TRANSPORTERBEAM); - A_PlaySound(TELEPORTER,i); - } - - TRAVERSE_CONNECT(k) - if (g_player[k].ps->cursectnum == sprite[OW].sectnum) - { - g_player[k].ps->frag_ps = p; - sprite[g_player[k].ps->i].extra = 0; - } - - g_player[p].ps->ang = sprite[OW].ang; - - if (sprite[OW].owner != OW) - { - T1 = 13; - actor[OW].t_data[0] = 13; - g_player[p].ps->transporter_hold = 13; - } - - g_player[p].ps->bobposx = g_player[p].ps->opos.x = g_player[p].ps->pos.x = sprite[OW].x; - g_player[p].ps->bobposy = g_player[p].ps->opos.y = g_player[p].ps->pos.y = sprite[OW].y; - g_player[p].ps->opos.z = g_player[p].ps->pos.z = sprite[OW].z-PHEIGHT; - - changespritesect(j,sprite[OW].sectnum); - g_player[p].ps->cursectnum = sprite[j].sectnum; - - if (sprite[i].pal == 0) - { - k = A_Spawn(OW,TRANSPORTERBEAM); - A_PlaySound(TELEPORTER,k); - } - - break; - } - } - else if (!(sectlotag == 1 && g_player[p].ps->on_ground == 1)) break; - - if (onfloorz == 0 && klabs(SZ-g_player[p].ps->pos.z) < 6144) - if ((g_player[p].ps->jetpack_on == 0) || (g_player[p].ps->jetpack_on && TEST_SYNC_KEY(g_player[p].sync->bits, SK_JUMP)) || - (g_player[p].ps->jetpack_on && TEST_SYNC_KEY(g_player[p].sync->bits, SK_CROUCH))) - { - g_player[p].ps->opos.x = g_player[p].ps->pos.x += sprite[OW].x-SX; - g_player[p].ps->opos.y = g_player[p].ps->pos.y += sprite[OW].y-SY; - - if (g_player[p].ps->jetpack_on && (TEST_SYNC_KEY(g_player[p].sync->bits, SK_JUMP) || g_player[p].ps->jetpack_on < 11)) - g_player[p].ps->pos.z = sprite[OW].z-6144; - else g_player[p].ps->pos.z = sprite[OW].z+6144; - g_player[p].ps->opos.z = g_player[p].ps->pos.z; - - actor[g_player[p].ps->i].bposx = g_player[p].ps->pos.x; - actor[g_player[p].ps->i].bposy = g_player[p].ps->pos.y; - actor[g_player[p].ps->i].bposz = g_player[p].ps->pos.z; - - changespritesect(j,sprite[OW].sectnum); - g_player[p].ps->cursectnum = sprite[OW].sectnum; - - break; - } - - k = 0; - - if (onfloorz && sectlotag == 1 && g_player[p].ps->on_ground && - g_player[p].ps->pos.z >= sector[sect].floorz && - (TEST_SYNC_KEY(g_player[p].sync->bits, SK_CROUCH) || g_player[p].ps->vel.z > 2048)) - // if( onfloorz && sectlotag == 1 && g_player[p].ps->pos.z > (sector[sect].floorz-(6<<8)) ) - { - k = 1; - if (screenpeek == p) - { - FX_StopAllSounds(); - S_ClearSoundLocks(); - } - if (sprite[g_player[p].ps->i].extra > 0) - A_PlaySound(DUKE_UNDERWATER,j); - g_player[p].ps->opos.z = g_player[p].ps->pos.z = - sector[sprite[OW].sectnum].ceilingz; - - /* - g_player[p].ps->vel.x = 4096-(krand()&8192); - g_player[p].ps->vel.y = 4096-(krand()&8192); - */ - if (TEST_SYNC_KEY(g_player[p].sync->bits, SK_CROUCH)) - g_player[p].ps->vel.z += 512; - } - - if (onfloorz && sectlotag == 2 && g_player[p].ps->pos.z <= sector[sect].ceilingz /*&& g_player[p].ps->vel.z == 0*/) - { - k = 1; - // if( sprite[j].extra <= 0) break; - if (screenpeek == p) - { - FX_StopAllSounds(); - S_ClearSoundLocks(); - } - A_PlaySound(DUKE_GASP,j); - - g_player[p].ps->opos.z = g_player[p].ps->pos.z = - sector[sprite[OW].sectnum].floorz; - - g_player[p].ps->jumping_toggle = 1; - g_player[p].ps->jumping_counter = 0; - g_player[p].ps->vel.z = 0; - // g_player[p].ps->vel.z += 1024; - } - - if (k == 1) - { - vec3_t vect; - g_player[p].ps->bobposx = g_player[p].ps->opos.x = g_player[p].ps->pos.x += sprite[OW].x-SX; - g_player[p].ps->bobposy = g_player[p].ps->opos.y = g_player[p].ps->pos.y += sprite[OW].y-SY; - - if (sprite[OW].owner != OW) - g_player[p].ps->transporter_hold = -2; - g_player[p].ps->cursectnum = sprite[OW].sectnum; - - changespritesect(j,sprite[OW].sectnum); - - vect.x = g_player[p].ps->pos.x; - vect.y = g_player[p].ps->pos.y; - vect.z = g_player[p].ps->pos.z+PHEIGHT; - - setsprite(g_player[p].ps->i,&vect); - - P_UpdateScreenPal(g_player[p].ps); - - if ((krand()&255) < 32) - A_Spawn(j,WATERSPLASH2); - - if (sectlotag == 1) - for (l = 0; l < 9; l++) - { - q = A_Spawn(g_player[p].ps->i,WATERBUBBLE); - sprite[q].z += krand()&16383; - } - } - } - break; - - case STAT_PROJECTILE: - if (sectlotag != 0) goto JBOLT; - case STAT_ACTOR: - if ((sprite[j].picnum == SHARK) || (sprite[j].picnum == COMMANDER) || (sprite[j].picnum == OCTABRAIN) - || ((sprite[j].picnum >= GREENSLIME) && (sprite[j].picnum <= GREENSLIME+7))) - { - if (sprite[j].extra > 0) - goto JBOLT; - } - case STAT_MISC: - case STAT_FALLER: - case STAT_DUMMYPLAYER: - - ll = klabs(sprite[j].zvel); - - if (totalclock > actor[j].lasttransport) - { - warpspriteto = 0; - if (ll && sectlotag == 2 && sprite[j].z < (sector[sect].ceilingz+ll)) - warpspriteto = 1; - - if (ll && sectlotag == 1 && sprite[j].z > (sector[sect].floorz-ll)) - warpspriteto = 1; - - if (sectlotag == 0 && (onfloorz || klabs(sprite[j].z-SZ) < 4096)) - { - if (sprite[OW].owner != OW && onfloorz && T1 > 0 && sprite[j].statnum != STAT_MISC) - { - T1++; - goto BOLT; - } - warpspriteto = 1; - } - - if (warpspriteto && A_CheckSpriteFlags(j,SPRITE_DECAL)) goto JBOLT; - - if (warpspriteto) switch (DynamicTileMap[sprite[j].picnum]) - { - case TRANSPORTERSTAR__STATIC: - case TRANSPORTERBEAM__STATIC: - case TRIPBOMB__STATIC: - case BULLETHOLE__STATIC: - case WATERSPLASH2__STATIC: - case BURNING__STATIC: - case BURNING2__STATIC: - case FIRE__STATIC: - case FIRE2__STATIC: - case TOILETWATER__STATIC: - case LASERLINE__STATIC: - goto JBOLT; - case PLAYERONWATER__STATIC: - if (sectlotag == 2) - { - sprite[j].cstat &= 32768; - break; - } - default: - if (sprite[j].statnum == STAT_MISC && !(sectlotag == 1 || sectlotag == 2)) - break; - - case WATERBUBBLE__STATIC: - // if( rnd(192) && sprite[j].picnum == WATERBUBBLE) - // break; - - if (sectlotag > 0) - { - k = A_Spawn(j,WATERSPLASH2); - if (sectlotag == 1 && sprite[j].statnum == STAT_PROJECTILE) - { - sprite[k].xvel = sprite[j].xvel>>1; - sprite[k].ang = sprite[j].ang; - A_SetSprite(k,CLIPMASK0); - } - } - - switch (sectlotag) - { - case 0: - if (onfloorz) - { - if (sprite[j].statnum == STAT_PROJECTILE || - (G_CheckPlayerInSector(sect) == -1 && G_CheckPlayerInSector(sprite[OW].sectnum) == -1)) - { - sprite[j].x += (sprite[OW].x-SX); - sprite[j].y += (sprite[OW].y-SY); - sprite[j].z -= SZ - sector[sprite[OW].sectnum].floorz; - sprite[j].ang = sprite[OW].ang; - - Bmemcpy(&actor[j].bposx, &sprite[j], sizeof(vec3_t)); - - if (sprite[i].pal == 0) - { - k = A_Spawn(i,TRANSPORTERBEAM); - A_PlaySound(TELEPORTER,k); - - k = A_Spawn(OW,TRANSPORTERBEAM); - A_PlaySound(TELEPORTER,k); - } - - if (sprite[OW].owner != OW) - { - T1 = 13; - actor[OW].t_data[0] = 13; - } - - changespritesect(j,sprite[OW].sectnum); - } - } - else - { - sprite[j].x += (sprite[OW].x-SX); - sprite[j].y += (sprite[OW].y-SY); - sprite[j].z = sprite[OW].z+4096; - - Bmemcpy(&actor[j].bposx, &sprite[j], sizeof(vec3_t)); - - changespritesect(j,sprite[OW].sectnum); - } - break; - case 1: - actor[j].lasttransport = totalclock + (TICSPERFRAME<<2); - - sprite[j].x += (sprite[OW].x-SX); - sprite[j].y += (sprite[OW].y-SY); - sprite[j].z = sector[sprite[OW].sectnum].ceilingz; - - - Bmemcpy(&actor[j].bposx, &sprite[j], sizeof(vec3_t)); - - changespritesect(j,sprite[OW].sectnum); - - break; - case 2: - actor[j].lasttransport = totalclock + (TICSPERFRAME<<2); - sprite[j].x += (sprite[OW].x-SX); - sprite[j].y += (sprite[OW].y-SY); - sprite[j].z = sector[sprite[OW].sectnum].floorz; - - Bmemcpy(&actor[j].bposx, &sprite[j], sizeof(vec3_t)); - - changespritesect(j,sprite[OW].sectnum); - - break; - } - - break; - } - } - break; - - } -JBOLT: - j = nextj; - } -BOLT: - i = nexti; - } -} - -static int16_t A_FindLocator(int32_t n,int32_t sn) -{ - int32_t i = headspritestat[STAT_LOCATOR]; - - while (i >= 0) - { - if ((sn == -1 || sn == SECT) && n == SLT) - return i; - i = nextspritestat[i]; - } - return -1; -} - -ACTOR_STATIC void G_MoveActors(void) -{ - int32_t x, m, l; - intptr_t *t; - int32_t a, j, nexti, nextj, sect, p, switchpicnum, k; - spritetype *s; - int32_t i = headspritestat[STAT_ACTOR]; - - while (i >= 0) - { - nexti = nextspritestat[i]; - - s = &sprite[i]; - - sect = s->sectnum; - - if (s->xrepeat == 0 || sect < 0 || sect >= MAXSECTORS) - KILLIT(i); - - t = &actor[i].t_data[0]; - - Bmemcpy(&actor[i].bposx, s, sizeof(vec3_t)); - - switchpicnum=s->picnum; - if ((s->picnum > GREENSLIME)&&(s->picnum <= GREENSLIME+7)) - { - switchpicnum = GREENSLIME; - } - switch (DynamicTileMap[switchpicnum]) - { - case DUCK__STATIC: - case TARGET__STATIC: - if (s->cstat&32) - { - t[0]++; - if (t[0] > 60) - { - t[0] = 0; - s->cstat = 128+257+16; - s->extra = 1; - } - } - else - { - j = A_IncurDamage(i); - if (j >= 0) - { - s->cstat = 32+128; - k = 1; - - j = headspritestat[STAT_ACTOR]; - while (j >= 0) - { - if (sprite[j].lotag == s->lotag && - sprite[j].picnum == s->picnum) - { - if ((sprite[j].hitag && !(sprite[j].cstat&32)) || - (!sprite[j].hitag && (sprite[j].cstat&32)) - ) - { - k = 0; - break; - } - } - - j = nextspritestat[j]; - } - - if (k == 1) - { - G_OperateActivators(s->lotag,-1); - G_OperateForceFields(i,s->lotag); - G_OperateMasterSwitches(s->lotag); - } - } - } - goto BOLT; - - case RESPAWNMARKERRED__STATIC: - case RESPAWNMARKERYELLOW__STATIC: - case RESPAWNMARKERGREEN__STATIC: - if (++T1 > g_itemRespawnTime) - KILLIT(i); - - if (T1 >= (g_itemRespawnTime>>1) && T1 < ((g_itemRespawnTime>>1)+(g_itemRespawnTime>>2))) - PN = RESPAWNMARKERYELLOW; - else if (T1 > ((g_itemRespawnTime>>1)+(g_itemRespawnTime>>2))) - PN = RESPAWNMARKERGREEN; - - A_Fall(i); - break; - - case HELECOPT__STATIC: - case DUKECAR__STATIC: - - s->z += s->zvel; - t[0]++; - - if (t[0] == 4) A_PlaySound(WAR_AMBIENCE2,i); - - if (t[0] > (GAMETICSPERSEC*8)) - { - S_PlaySound(RPG_EXPLODE); - for (j=0; j<32; j++) RANDOMSCRAP; - g_earthquakeTime = 16; - KILLIT(i); - } - else if ((t[0]&3) == 0) - A_Spawn(i,EXPLOSION2); - A_SetSprite(i,CLIPMASK0); - break; - case RAT__STATIC: - A_Fall(i); - if (A_SetSprite(i, CLIPMASK0)) - { - if ((krand()&255) < 3) A_PlaySound(RATTY,i); - s->ang += (krand()&31)-15+(sintable[(t[0]<<8)&2047]>>11); - } - else - { - T1++; - if (T1 > 1) - { - KILLIT(i); - } - else s->ang = (krand()&2047); - } - if (s->xvel < 128) - s->xvel+=2; - s->ang += (krand()&3)-6; - break; - case QUEBALL__STATIC: - case STRIPEBALL__STATIC: - if (s->xvel) - { - j = headspritestat[STAT_DEFAULT]; - while (j >= 0) - { - nextj = nextspritestat[j]; - if (sprite[j].picnum == POCKET && ldist(&sprite[j],s) < 52) KILLIT(i); - j = nextj; - } - - j = clipmove((vec3_t *)s,&s->sectnum, - (((s->xvel*(sintable[(s->ang+512)&2047]))>>14)*TICSPERFRAME)<<11, - (((s->xvel*(sintable[s->ang&2047]))>>14)*TICSPERFRAME)<<11, - 24L,(4<<8),(4<<8),CLIPMASK1); - - if (j&49152) - { - if ((j&49152) == 32768) - { - j &= (MAXWALLS-1); - k = getangle( - wall[wall[j].point2].x-wall[j].x, - wall[wall[j].point2].y-wall[j].y); - s->ang = ((k<<1) - s->ang)&2047; - } - else if ((j&49152) == 49152) - { - j &= (MAXSPRITES-1); - A_DamageObject(i,j); - } - } - s->xvel --; - if (s->xvel < 0) s->xvel = 0; - if (s->picnum == STRIPEBALL) - { - s->cstat = 257; - s->cstat |= (4 & s->xvel) | (8 & s->xvel); - } - } - else - { - p = A_FindPlayer(s,&x); - - if (x < 1596) - { - // if(s->pal == 12) - { - j = G_GetAngleDelta(g_player[p].ps->ang,getangle(s->x-g_player[p].ps->pos.x,s->y-g_player[p].ps->pos.y)); - if (j > -64 && j < 64 && TEST_SYNC_KEY(g_player[p].sync->bits, SK_OPEN)) - if (g_player[p].ps->toggle_key_flag == 1) - { - a = headspritestat[STAT_ACTOR]; - while (a >= 0) - { - if (sprite[a].picnum == QUEBALL || sprite[a].picnum == STRIPEBALL) - { - j = G_GetAngleDelta(g_player[p].ps->ang,getangle(sprite[a].x-g_player[p].ps->pos.x,sprite[a].y-g_player[p].ps->pos.y)); - if (j > -64 && j < 64) - { - A_FindPlayer(&sprite[a],&l); - if (x > l) break; - } - } - a = nextspritestat[a]; - } - if (a == -1) - { - if (s->pal == 12) - s->xvel = 164; - else s->xvel = 140; - s->ang = g_player[p].ps->ang; - g_player[p].ps->toggle_key_flag = 2; - } - } - } - } - if (x < 512 && s->sectnum == g_player[p].ps->cursectnum) - { - s->ang = getangle(s->x-g_player[p].ps->pos.x,s->y-g_player[p].ps->pos.y); - s->xvel = 48; - } - } - - break; - case FORCESPHERE__STATIC: - - if (s->yvel == 0) - { - s->yvel = 1; - - for (l=512; l<(2048-512); l+= 128) - for (j=0; j<2048; j += 128) - { - k = A_Spawn(i,FORCESPHERE); - sprite[k].cstat = 257+128; - sprite[k].clipdist = 64; - sprite[k].ang = j; - sprite[k].zvel = sintable[l&2047]>>5; - sprite[k].xvel = sintable[(l+512)&2047]>>9; - sprite[k].owner = i; - } - } - - if (t[3] > 0) - { - if (s->zvel < 6144) - s->zvel += 192; - s->z += s->zvel; - if (s->z > sector[sect].floorz) - s->z = sector[sect].floorz; - t[3]--; - if (t[3] == 0) - KILLIT(i); - } - else if (t[2] > 10) - { - j = headspritestat[STAT_MISC]; - while (j >= 0) - { - if (sprite[j].owner == i && sprite[j].picnum == FORCESPHERE) - actor[j].t_data[1] = 1+(krand()&63); - j = nextspritestat[j]; - } - t[3] = 64; - } - - goto BOLT; - - case RECON__STATIC: - - A_GetZLimits(i); - - if (sector[s->sectnum].ceilingstat&1) - s->shade += (sector[s->sectnum].ceilingshade-s->shade)>>1; - else s->shade += (sector[s->sectnum].floorshade-s->shade)>>1; - - if (s->z < sector[sect].ceilingz+(32<<8)) - s->z = sector[sect].ceilingz+(32<<8); - -#ifdef POLYMER - /* - gamelights[gamelightcount&(PR_MAXLIGHTS-1)].sector = s->sectnum; - gamelights[gamelightcount&(PR_MAXLIGHTS-1)].x = s->x; - gamelights[gamelightcount&(PR_MAXLIGHTS-1)].y = s->y; - gamelights[gamelightcount&(PR_MAXLIGHTS-1)].z = s->z + 10248; - gamelights[gamelightcount&(PR_MAXLIGHTS-1)].range = 8192; - - gamelights[gamelightcount&(PR_MAXLIGHTS-1)].angle = s->ang; - gamelights[gamelightcount&(PR_MAXLIGHTS-1)].horiz = 100; - gamelights[gamelightcount&(PR_MAXLIGHTS-1)].radius = 256; - gamelights[gamelightcount&(PR_MAXLIGHTS-1)].faderadius = 200; - - gamelights[gamelightcount&(PR_MAXLIGHTS-1)].color[0] = 255; - gamelights[gamelightcount&(PR_MAXLIGHTS-1)].color[1] = 255; - gamelights[gamelightcount&(PR_MAXLIGHTS-1)].color[2] = 255; - - gamelights[gamelightcount&(PR_MAXLIGHTS-1)].priority = PR_LIGHT_PRIO_MAX_GAME; - - if (gamelightcount < PR_MAXLIGHTS) - gamelightcount++; - */ -#endif // POLYMER - - if (!g_netServer && ud.multimode < 2) - { - if (g_noEnemies == 1) - { - s->cstat = (int16_t)32768; - goto BOLT; - } - else if (g_noEnemies == 2) s->cstat = 257; - } - if ((j = A_IncurDamage(i)) >= 0) - { - if (s->extra < 0 && t[0] != -1) - { - t[0] = -1; - s->extra = 0; - } - A_PlaySound(RECO_PAIN,i); - RANDOMSCRAP; - } - - if (t[0] == -1) - { - s->z += 1024; - t[2]++; - if ((t[2]&3) == 0) A_Spawn(i,EXPLOSION2); - A_GetZLimits(i); - s->ang += 96; - s->xvel = 128; - j = A_SetSprite(i,CLIPMASK0); - if (j != 1 || s->z > actor[i].floorz) - { - for (l=0; l<16; l++) - RANDOMSCRAP; - j = A_Spawn(i,EXPLOSION2); - A_PlaySound(LASERTRIP_EXPLODE,j); - A_Spawn(i,PIGCOP); - g_player[myconnectindex].ps->actors_killed++; - KILLIT(i); - } - goto BOLT; - } - else - { - if (s->z > actor[i].floorz-(48<<8)) - s->z = actor[i].floorz-(48<<8); - } - - p = A_FindPlayer(s,&x); - j = s->owner; - - // 3 = findplayerz, 4 = shoot - - if (t[0] >= 4) - { - t[2]++; - if ((t[2]&15) == 0) - { - a = s->ang; - s->ang = actor[i].tempang; - A_PlaySound(RECO_ATTACK,i); - A_Shoot(i,FIRELASER); - s->ang = a; - } - if (t[2] > (GAMETICSPERSEC*3) || !cansee(s->x,s->y,s->z-(16<<8),s->sectnum, g_player[p].ps->pos.x,g_player[p].ps->pos.y,g_player[p].ps->pos.z,g_player[p].ps->cursectnum)) - { - t[0] = 0; - t[2] = 0; - } - else actor[i].tempang += - G_GetAngleDelta(actor[i].tempang,getangle(g_player[p].ps->pos.x-s->x,g_player[p].ps->pos.y-s->y))/3; - } - else if (t[0] == 2 || t[0] == 3) - { - t[3] = 0; - if (s->xvel > 0) s->xvel -= 16; - else s->xvel = 0; - - if (t[0] == 2) - { - l = g_player[p].ps->pos.z-s->z; - if (klabs(l) < (48<<8)) t[0] = 3; - else s->z += ksgn(g_player[p].ps->pos.z-s->z)<<10; - } - else - { - t[2]++; - if (t[2] > (GAMETICSPERSEC*3) || !cansee(s->x,s->y,s->z-(16<<8),s->sectnum, g_player[p].ps->pos.x,g_player[p].ps->pos.y,g_player[p].ps->pos.z,g_player[p].ps->cursectnum)) - { - t[0] = 1; - t[2] = 0; - } - else if ((t[2]&15) == 0) - { - A_PlaySound(RECO_ATTACK,i); - A_Shoot(i,FIRELASER); - } - } - s->ang += G_GetAngleDelta(s->ang,getangle(g_player[p].ps->pos.x-s->x,g_player[p].ps->pos.y-s->y))>>2; - } - - if (t[0] != 2 && t[0] != 3) - { - l = ldist(&sprite[j],s); - if (l <= 1524) - { - a = s->ang; - s->xvel >>= 1; - } - else a = getangle(sprite[j].x-s->x,sprite[j].y-s->y); - - if (t[0] == 1 || t[0] == 4) // Found a locator and going with it - { - l = dist(&sprite[j],s); - - if (l <= 1524) - { - if (t[0] == 1) t[0] = 0; - else t[0] = 5; - } - else - { - // Control speed here - if (l > 1524) - { - if (s->xvel < 256) s->xvel += 32; - } - else - { - if (s->xvel > 0) s->xvel -= 16; - else s->xvel = 0; - } - } - - if (t[0] < 2) t[2]++; - - if (x < 6144 && t[0] < 2 && t[2] > (GAMETICSPERSEC*4)) - { - t[0] = 2+(krand()&2); - t[2] = 0; - actor[i].tempang = s->ang; - } - } - - if (t[0] == 0 || t[0] == 5) - { - if (t[0] == 0) - t[0] = 1; - else t[0] = 4; - j = s->owner = A_FindLocator(s->hitag,-1); - if (j == -1) - { - s->hitag = j = actor[i].t_data[5]; - s->owner = A_FindLocator(j,-1); - j = s->owner; - if (j == -1) KILLIT(i); - } - else s->hitag++; - } - - t[3] = G_GetAngleDelta(s->ang,a); - s->ang += t[3]>>3; - - if ((s->z - sprite[j].z) < -512) - s->z += 512; - else if ((s->z - sprite[j].z) > 512) - s->z -= 512; - else s->z = sprite[j].z; - } - - if (!A_CheckSoundPlaying(i,RECO_ROAM)) - A_PlaySound(RECO_ROAM,i); - - A_SetSprite(i,CLIPMASK0); - - goto BOLT; - - case OOZ__STATIC: - case OOZ2__STATIC: - - A_GetZLimits(i); - - j = (actor[i].floorz-actor[i].ceilingz)>>9; - if (j > 255) j = 255; - - x = 25-(j>>1); - if (x < 8) x = 8; - else if (x > 48) x = 48; - - s->yrepeat = j; - s->xrepeat = x; - s->z = actor[i].floorz; - - goto BOLT; - - case GREENSLIME__STATIC: - // case GREENSLIME+1: - // case GREENSLIME+2: - // case GREENSLIME+3: - // case GREENSLIME+4: - // case GREENSLIME+5: - // case GREENSLIME+6: - // case GREENSLIME+7: - - // #ifndef VOLUMEONE - if (g_netServer && (!g_netServer && ud.multimode < 2)) - { - if (g_noEnemies == 1) - { - s->cstat = (int16_t)32768; - goto BOLT; - } - else if (g_noEnemies == 2) s->cstat = 257; - } - // #endif - - t[1]+=128; - - if (sector[sect].floorstat&1) - KILLIT(i); - - p = A_FindPlayer(s,&x); - - if (x > 20480) - { - actor[i].timetosleep++; - if (actor[i].timetosleep > SLEEPTIME) - { - actor[i].timetosleep = 0; - changespritestat(i, STAT_ZOMBIEACTOR); - goto BOLT; - } - } - - if (t[0] == -5) // FROZEN - { - t[3]++; - if (t[3] > 280) - { - s->pal = 0; - t[0] = 0; - goto BOLT; - } - A_Fall(i); - s->cstat = 257; - s->picnum = GREENSLIME+2; - s->extra = 1; - s->pal = 1; - if ((j = A_IncurDamage(i)) >= 0) - { - if (j == FREEZEBLAST) goto BOLT; - for (j=16; j >= 0 ; j--) - { - k = A_InsertSprite(SECT,SX,SY,SZ,GLASSPIECES+(j%3),-32,36,36,krand()&2047,32+(krand()&63),1024-(krand()&1023),i,5); - sprite[k].pal = 1; - } - A_PlaySound(GLASS_BREAKING,i); - KILLIT(i); - } - else if (x < 1024 && g_player[p].ps->quick_kick == 0) - { - j = G_GetAngleDelta(g_player[p].ps->ang,getangle(SX-g_player[p].ps->pos.x,SY-g_player[p].ps->pos.y)); - if (j > -128 && j < 128) - g_player[p].ps->quick_kick = 14; - } - - goto BOLT; - } - - if (x < 1596) - s->cstat = 0; - else s->cstat = 257; - - if (t[0] == -4) //On the player - { - if (sprite[g_player[p].ps->i].extra < 1) - { - t[0] = 0; - goto BOLT; - } - - setsprite(i,(vec3_t *)s); - - s->ang = g_player[p].ps->ang; - - if ((TEST_SYNC_KEY(g_player[p].sync->bits, SK_FIRE) || (g_player[p].ps->quick_kick > 0)) && sprite[g_player[p].ps->i].extra > 0) - if (g_player[p].ps->quick_kick > 0 || (g_player[p].ps->curr_weapon != HANDREMOTE_WEAPON && g_player[p].ps->curr_weapon != HANDBOMB_WEAPON && g_player[p].ps->curr_weapon != TRIPBOMB_WEAPON && g_player[p].ps->ammo_amount[g_player[p].ps->curr_weapon] >= 0)) - { - for (x=0; x<8; x++) - { - j = A_InsertSprite(sect,s->x,s->y,s->z-(8<<8),SCRAP3+(krand()&3),-8,48,48,krand()&2047,(krand()&63)+64,-(krand()&4095)-(s->zvel>>2),i,5); - sprite[j].pal = 6; - } - - A_PlaySound(SLIM_DYING,i); - A_PlaySound(SQUISHED,i); - if ((krand()&255) < 32) - { - j = A_Spawn(i,BLOODPOOL); - sprite[j].pal = 0; - } - g_player[p].ps->actors_killed ++; - t[0] = -3; - if (g_player[p].ps->somethingonplayer == i) - g_player[p].ps->somethingonplayer = -1; - KILLIT(i); - } - - s->z = g_player[p].ps->pos.z+g_player[p].ps->pyoff-t[2]+(8<<8); - - s->z += (100-g_player[p].ps->horiz)<<4; - - if (t[2] > 512) - t[2] -= 128; - - if (t[2] < 348) - t[2] += 128; - - if (g_player[p].ps->newowner >= 0) - { - g_player[p].ps->newowner = -1; - g_player[p].ps->pos.x = g_player[p].ps->opos.x; - g_player[p].ps->pos.y = g_player[p].ps->opos.y; - g_player[p].ps->pos.z = g_player[p].ps->opos.z; - g_player[p].ps->ang = g_player[p].ps->oang; - - updatesector(g_player[p].ps->pos.x,g_player[p].ps->pos.y,&g_player[p].ps->cursectnum); - P_UpdateScreenPal(g_player[p].ps); - - j = headspritestat[STAT_ACTOR]; - while (j >= 0) - { - if (sprite[j].picnum==CAMERA1) sprite[j].yvel = 0; - j = nextspritestat[j]; - } - } - - if (t[3]>0) - { - static char frames[] = {5,5,6,6,7,7,6,5}; - - s->picnum = GREENSLIME+frames[t[3]]; - - if (t[3] == 5) - { - sprite[g_player[p].ps->i].extra += -(5+(krand()&3)); - A_PlaySound(SLIM_ATTACK,i); - } - - if (t[3] < 7) t[3]++; - else t[3] = 0; - - } - else - { - s->picnum = GREENSLIME+5; - if (rnd(32)) - t[3] = 1; - } - - s->xrepeat = 20+(sintable[t[1]&2047]>>13); - s->yrepeat = 15+(sintable[t[1]&2047]>>13); - - s->x = g_player[p].ps->pos.x + (sintable[(g_player[p].ps->ang+512)&2047]>>7); - s->y = g_player[p].ps->pos.y + (sintable[g_player[p].ps->ang&2047]>>7); - - goto BOLT; - } - - else if (s->xvel < 64 && x < 768) - { - if (g_player[p].ps->somethingonplayer == -1) - { - g_player[p].ps->somethingonplayer = i; - if (t[0] == 3 || t[0] == 2) //Falling downward - t[2] = (12<<8); - else t[2] = -(13<<8); //Climbing up duke - t[0] = -4; - } - } - - if ((j = A_IncurDamage(i)) >= 0) - { - A_PlaySound(SLIM_DYING,i); - - g_player[p].ps->actors_killed ++; - if (g_player[p].ps->somethingonplayer == i) - g_player[p].ps->somethingonplayer = -1; - - if (j == FREEZEBLAST) - { - A_PlaySound(SOMETHINGFROZE,i); - t[0] = -5 ; - t[3] = 0 ; - goto BOLT; - } - - if ((krand()&255) < 32) - { - j = A_Spawn(i,BLOODPOOL); - sprite[j].pal = 0; - } - - for (x=0; x<8; x++) - { - j = A_InsertSprite(sect,s->x,s->y,s->z-(8<<8),SCRAP3+(krand()&3),-8,48,48,krand()&2047,(krand()&63)+64,-(krand()&4095)-(s->zvel>>2),i,5); - sprite[j].pal = 6; - } - t[0] = -3; - KILLIT(i); - } - // All weap - if (t[0] == -1) //Shrinking down - { - A_Fall(i); - - s->cstat &= 65535-8; - s->picnum = GREENSLIME+4; - - // if(s->yrepeat > 62) - // A_DoGuts(s,JIBS6,5,myconnectindex); - - if (s->xrepeat > 32) s->xrepeat -= krand()&7; - if (s->yrepeat > 16) s->yrepeat -= krand()&7; - else - { - s->xrepeat = 40; - s->yrepeat = 16; - t[5] = -1; - t[0] = 0; - } - - goto BOLT; - } - else if (t[0] != -2) A_GetZLimits(i); - - if (t[0] == -2) //On top of somebody - { - A_Fall(i); - sprite[t[5]].xvel = 0; - - l = sprite[t[5]].ang; - - s->z = sprite[t[5]].z; - s->x = sprite[t[5]].x+(sintable[(l+512)&2047]>>11); - s->y = sprite[t[5]].y+(sintable[l&2047]>>11); - - s->picnum = GREENSLIME+2+(g_globalRandom&1); - - if (s->yrepeat < 64) s->yrepeat+=2; - else - { - if (s->xrepeat < 32) s->xrepeat += 4; - else - { - t[0] = -1; - x = ldist(s,&sprite[t[5]]); - if (x < 768) - { - sprite[t[5]].xrepeat = 0; - - // JBF 20041129: a slimer eating another enemy really ought - // to decrease the maximum kill count by one. - if (sprite[t[5]].extra > 0) g_player[myconnectindex].ps->max_actors_killed--; - } - } - } - - goto BOLT; - } - - //Check randomly to see of there is an actor near - if (rnd(32)) - { - j = headspritesect[sect]; - while (j>=0) - { - switch (DynamicTileMap[sprite[j].picnum]) - { - case LIZTROOP__STATIC: - case LIZMAN__STATIC: - case PIGCOP__STATIC: - case NEWBEAST__STATIC: - if (ldist(s,&sprite[j]) < 768 && (klabs(s->z-sprite[j].z)<8192)) //Gulp them - { - t[5] = j; - t[0] = -2; - t[1] = 0; - goto BOLT; - } - } - - j = nextspritesect[j]; - } - } - - //Moving on the ground or ceiling - - if (t[0] == 0 || t[0] == 2) - { - s->picnum = GREENSLIME; - - if ((krand()&511) == 0) - A_PlaySound(SLIM_ROAM,i); - - if (t[0]==2) - { - s->zvel = 0; - s->cstat &= (65535-8); - - if ((sector[sect].ceilingstat&1) || (actor[i].ceilingz+6144) < s->z) - { - s->z += 2048; - t[0] = 3; - goto BOLT; - } - } - else - { - s->cstat |= 8; - A_Fall(i); - } - - if (everyothertime&1) A_SetSprite(i,CLIPMASK0); - - if (s->xvel > 96) - { - s->xvel -= 2; - goto BOLT; - } - else - { - if (s->xvel < 32) s->xvel += 4; - s->xvel = 64 - (sintable[(t[1]+512)&2047]>>9); - - s->ang += G_GetAngleDelta(s->ang, - getangle(g_player[p].ps->pos.x-s->x,g_player[p].ps->pos.y-s->y))>>3; - // TJR - } - - s->xrepeat = 36 + (sintable[(t[1]+512)&2047]>>11); - s->yrepeat = 16 + (sintable[t[1]&2047]>>13); - - if (rnd(4) && (sector[sect].ceilingstat&1) == 0 && - klabs(actor[i].floorz-actor[i].ceilingz) - < (192<<8)) - { - s->zvel = 0; - t[0]++; - } - - } - - if (t[0]==1) - { - s->picnum = GREENSLIME; - if (s->yrepeat < 40) s->yrepeat+=8; - if (s->xrepeat > 8) s->xrepeat-=4; - if (s->zvel > -(2048+1024)) - s->zvel -= 348; - s->z += s->zvel; - if (s->z < actor[i].ceilingz+4096) - { - s->z = actor[i].ceilingz+4096; - s->xvel = 0; - t[0] = 2; - } - } - - if (t[0]==3) - { - s->picnum = GREENSLIME+1; - - A_Fall(i); - - if (s->z > actor[i].floorz-(8<<8)) - { - s->yrepeat-=4; - s->xrepeat+=2; - } - else - { - if (s->yrepeat < (40-4)) s->yrepeat+=8; - if (s->xrepeat > 8) s->xrepeat-=4; - } - - if (s->z > actor[i].floorz-2048) - { - s->z = actor[i].floorz-2048; - t[0] = 0; - s->xvel = 0; - } - } - goto BOLT; - - case BOUNCEMINE__STATIC: - case MORTER__STATIC: - j = A_Spawn(i,(PLUTOPAK?FRAMEEFFECT1:FRAMEEFFECT1_13)); - actor[j].t_data[0] = 3; - - case HEAVYHBOMB__STATIC: - - if ((s->cstat&32768)) - { - t[2]--; - if (t[2] <= 0) - { - A_PlaySound(TELEPORTER,i); - A_Spawn(i,TRANSPORTERSTAR); - s->cstat = 257; - } - goto BOLT; - } - - p = A_FindPlayer(s,&x); - - if (x < 1220) s->cstat &= ~257; - else s->cstat |= 257; - - if (t[3] == 0) - { - j = A_IncurDamage(i); - if (j >= 0) - { - t[3] = 1; - t[2] = 0; - l = 0; - s->xvel = 0; - goto DETONATEB; - } - } - - if (s->picnum != BOUNCEMINE) - { - A_Fall(i); - - if ((sector[sect].lotag != 1 || actor[i].floorz != sector[sect].floorz) && s->z >= actor[i].floorz-(ZOFFSET) && s->yvel < 3) - { - if (s->yvel > 0 || (s->yvel == 0 && actor[i].floorz == sector[sect].floorz)) - A_PlaySound(PIPEBOMB_BOUNCE,i); - s->zvel = -((4-s->yvel)<<8); - if (sector[s->sectnum].lotag== 2) - s->zvel >>= 2; - s->yvel++; - } - if (s->z < actor[i].ceilingz) // && sector[sect].lotag != 2 ) - { - s->z = actor[i].ceilingz+(3<<8); - s->zvel = 0; - } - } - - { - vec3_t tmpvect; - - tmpvect.x = (s->xvel*(sintable[(s->ang+512)&2047]))>>14; - tmpvect.y = (s->xvel*(sintable[s->ang&2047]))>>14; - tmpvect.z = s->zvel; - j = A_MoveSprite(i,&tmpvect,CLIPMASK0); - } - - actor[i].movflag = j; - - if (sector[SECT].lotag == 1 && s->zvel == 0 && actor[i].floorz == sector[sect].floorz) - { - s->z += (32<<8); - if (t[5] == 0) - { - t[5] = 1; - A_Spawn(i,WATERSPLASH2); - } - } - else t[5] = 0; - - if (t[3] == 0 && (s->picnum == BOUNCEMINE || s->picnum == MORTER) && (j || x < 844)) - { - t[3] = 1; - t[2] = 0; - l = 0; - s->xvel = 0; - goto DETONATEB; - } - - if (sprite[s->owner].picnum == APLAYER) - l = sprite[s->owner].yvel; - else l = -1; - - if (s->xvel > 0) - { - s->xvel -= 5; - if (sector[sect].lotag == 2) - s->xvel -= 10; - - if (s->xvel < 0) - s->xvel = 0; - if (s->xvel&8) s->cstat ^= 4; - } - - if ((j&49152) == 32768) - { - vec3_t davect; - - j &= (MAXWALLS-1); - - Bmemcpy(&davect, s, sizeof(vec3_t)); - A_DamageWall(i,j,&davect,s->picnum); - - k = getangle( - wall[wall[j].point2].x-wall[j].x, - wall[wall[j].point2].y-wall[j].y); - - s->ang = ((k<<1) - s->ang)&2047; - s->xvel >>= 1; - } - - // int32_t lPipeBombControl=Gv_GetVarByLabel("PIPEBOMB_CONTROL", PIPEBOMB_REMOTE, -1, -1); - -DETONATEB: - - // if(lPipeBombControl & PIPEBOMB_TIMER) - // { - - if (s->picnum == HEAVYHBOMB && t[6] == 1) - { - /* if(s->extra >= 1) - { - s->extra--; - } - - if(s->extra <= 0) - s->lotag=911; - */ - - if (t[7] > 0) - t[7]--; - - if (t[7] == 0) - t[6] = 3; - } - // } - - if ((l >= 0 && g_player[l].ps->hbomb_on == 0 && t[6] == 2) || t[3] == 1) - t[6] = 3; - - if (t[6] == 3) - { - t[2]++; - - if (t[2] == 2) - { - int32_t j; - - x = s->extra; - m = 0; - switch (DynamicTileMap[s->picnum]) - { - case HEAVYHBOMB__STATIC: - m = g_pipebombBlastRadius; - break; - case MORTER__STATIC: - m = g_morterBlastRadius; - break; - case BOUNCEMINE__STATIC: - m = g_bouncemineBlastRadius; - break; - } - - A_RadiusDamage(i, m,x>>2,x>>1,x-(x>>2),x); - j = A_Spawn(i,EXPLOSION2); - A_PlaySound(PIPEBOMB_EXPLODE,j); - if (s->zvel == 0) - A_Spawn(i,EXPLOSION2BOT); - for (x=0; x<8; x++) - RANDOMSCRAP; - } - - if (s->yrepeat) - { - s->yrepeat = 0; - goto BOLT; - } - - if (t[2] > 20) - { - if (s->owner != i || ud.respawn_items == 0) - { - KILLIT(i); - } - else - { - t[2] = g_itemRespawnTime; - A_Spawn(i,RESPAWNMARKERRED); - s->cstat = (int16_t) 32768; - s->yrepeat = 9; - goto BOLT; - } - } - } - else if (s->picnum == HEAVYHBOMB && x < 788 && t[0] > 7 && s->xvel == 0) - if (cansee(s->x,s->y,s->z-(8<<8),s->sectnum,g_player[p].ps->pos.x,g_player[p].ps->pos.y,g_player[p].ps->pos.z,g_player[p].ps->cursectnum)) - if (g_player[p].ps->ammo_amount[HANDBOMB_WEAPON] < g_player[p].ps->max_ammo_amount[HANDBOMB_WEAPON]) - { - if ((GametypeFlags[ud.coop] & GAMETYPE_WEAPSTAY) && s->owner == i) - { - for (j=0; jweapreccnt; j++) - if (g_player[p].ps->weaprecs[j] == s->picnum) - goto BOLT; - - if (g_player[p].ps->weapreccnt < MAX_WEAPONS) - g_player[p].ps->weaprecs[g_player[p].ps->weapreccnt++] = s->picnum; - } - - P_AddAmmo(HANDBOMB_WEAPON,g_player[p].ps,1); - A_PlaySound(DUKE_GET,g_player[p].ps->i); - - if ((g_player[p].ps->gotweapon & (1<owner == g_player[p].ps->i) - { - /* P_AddWeapon(g_player[p].ps,HANDBOMB_WEAPON); */ - if (!(g_player[p].ps->weaponswitch & 1) && *aplWeaponWorksLike[g_player[p].ps->curr_weapon] != HANDREMOTE_WEAPON) - P_AddWeaponNoSwitch(g_player[p].ps,HANDBOMB_WEAPON); - else P_AddWeapon(g_player[p].ps,HANDBOMB_WEAPON); - } - - if (sprite[s->owner].picnum != APLAYER) - { - g_player[p].ps->pals.r = 0; - g_player[p].ps->pals.g = 32; - g_player[p].ps->pals.b = 0; - g_player[p].ps->pals.f = 32; - } - - if (s->owner != i || ud.respawn_items == 0) - { - if (s->owner == i && (GametypeFlags[ud.coop] & GAMETYPE_WEAPSTAY)) - goto BOLT; - KILLIT(i); - } - else - { - t[2] = g_itemRespawnTime; - A_Spawn(i,RESPAWNMARKERRED); - s->cstat = (int16_t) 32768; - } - } - - if (t[0] < 8) t[0]++; - goto BOLT; - - case REACTORBURNT__STATIC: - case REACTOR2BURNT__STATIC: - goto BOLT; - - case REACTOR__STATIC: - case REACTOR2__STATIC: - - if (t[4] == 1) - { - j = headspritesect[sect]; - while (j >= 0) - { - switch (DynamicTileMap[sprite[j].picnum]) - { - case SECTOREFFECTOR__STATIC: - if (sprite[j].lotag == 1) - { - sprite[j].lotag = (int16_t) 65535; - sprite[j].hitag = (int16_t) 65535; - } - break; - case REACTOR__STATIC: - sprite[j].picnum = REACTORBURNT; - break; - case REACTOR2__STATIC: - sprite[j].picnum = REACTOR2BURNT; - break; - case REACTORSPARK__STATIC: - case REACTOR2SPARK__STATIC: - sprite[j].cstat = (int16_t) 32768; - break; - } - j = nextspritesect[j]; - } - goto BOLT; - } - - if (t[1] >= 20) - { - t[4] = 1; - goto BOLT; - } - - p = A_FindPlayer(s,&x); - - t[2]++; - if (t[2] == 4) t[2]=0; - - if (x < 4096) - { - if ((krand()&255) < 16) - { - if (!A_CheckSoundPlaying(g_player[p].ps->i, DUKE_LONGTERM_PAIN)) - A_PlaySound(DUKE_LONGTERM_PAIN,g_player[p].ps->i); - - A_PlaySound(SHORT_CIRCUIT,i); - - sprite[g_player[p].ps->i].extra --; - g_player[p].ps->pals.f = 32; - g_player[p].ps->pals.r = 32; - g_player[p].ps->pals.g = 0; - g_player[p].ps->pals.b = 0; - } - t[0] += 128; - if (t[3] == 0) - t[3] = 1; - } - else t[3] = 0; - - if (t[1]) - { - t[1]++; - - t[4] = s->z; - s->z = sector[sect].floorz-(krand()%(sector[sect].floorz-sector[sect].ceilingz)); - - switch (t[1]) - { - case 3: - //Turn on all of those flashing sectoreffector. - A_RadiusDamage(i, 4096, - g_impactDamage<<2, - g_impactDamage<<2, - g_impactDamage<<2, - g_impactDamage<<2); - /* - j = headspritestat[STAT_EFFECTOR]; - while(j>=0) - { - if( sprite[j].lotag == 3 ) - Actor[j].t_data[4]=1; - else if(sprite[j].lotag == 12) - { - Actor[j].t_data[4] = 1; - sprite[j].lotag = 3; - sprite[j].owner = 0; - Actor[j].t_data[0] = s->shade; - } - j = nextspritestat[j]; - } - */ - j = headspritestat[STAT_STANDABLE]; - while (j >= 0) - { - if (sprite[j].picnum == MASTERSWITCH) - if (sprite[j].hitag == s->hitag) - if (sprite[j].yvel == 0) - sprite[j].yvel = 1; - j = nextspritestat[j]; - } - break; - - case 4: - case 7: - case 10: - case 15: - j = headspritesect[sect]; - while (j >= 0) - { - l = nextspritesect[j]; - - if (j != i) - { - deletesprite(j); - break; - } - j = l; - } - break; - } - for (x=0; x<16; x++) - RANDOMSCRAP; - - s->z = t[4]; - t[4] = 0; - - } - else - { - if ((j = A_IncurDamage(i)) >= 0) - { - for (x=0; x<32; x++) - RANDOMSCRAP; - if (s->extra < 0) - t[1] = 1; - } - } - goto BOLT; - - case CAMERA1__STATIC: - - if (t[0] == 0) - { - t[1]+=8; - if (g_damageCameras) - { - if ((j = A_IncurDamage(i)) >= 0) - { - t[0] = 1; // static - s->cstat = (int16_t)32768; - for (x=0; x<5; x++) RANDOMSCRAP; - goto BOLT; - } - } - - if (s->hitag > 0) - { - if (t[1]hitag) - s->ang+=8; - else if (t[1]<(s->hitag*3)) - s->ang-=8; - else if (t[1] < (s->hitag<<2)) - s->ang+=8; - else - { - t[1]=8; - s->ang+=16; - } - } - } - goto BOLT; - } - - if (!g_netServer && (!g_netServer && ud.multimode < 2) && A_CheckEnemySprite(s)) - { - if (g_noEnemies == 1) - { - s->cstat = (int16_t)32768; - goto BOLT; - } - else if (g_noEnemies == 2) - { - s->cstat = 0; - if (s->extra) - s->cstat = 257; - } - } - - if (!actorscrptr[sprite[i].picnum]) - goto BOLT; - p = A_FindPlayer(s,&x); - A_Execute(i,p,x); -BOLT: - i = nexti; - } - -} - -ACTOR_STATIC void G_MoveMisc(void) // STATNUM 5 -{ - int16_t i, j, nexti, sect, p; - int32_t l, x; - intptr_t *t; - spritetype *s; - int32_t switchpicnum; - - i = headspritestat[STAT_MISC]; - while (i >= 0) - { - nexti = nextspritestat[i]; - - t = &actor[i].t_data[0]; - s = &sprite[i]; - sect = s->sectnum; - - if (sect < 0 || s->xrepeat == 0) KILLIT(i); - - Bmemcpy(&actor[i].bposx, s, sizeof(vec3_t)); - - switchpicnum = s->picnum; - if ((s->picnum > NUKEBUTTON)&&(s->picnum <= NUKEBUTTON+3)) - { - switchpicnum = NUKEBUTTON; - } - if ((s->picnum > GLASSPIECES)&&(s->picnum <= GLASSPIECES+2)) - { - switchpicnum = GLASSPIECES; - } - if (s->picnum ==INNERJAW+1) - { - switchpicnum--; - } - if ((s->picnum == MONEY+1) || (s->picnum == MAIL+1) || (s->picnum == PAPER+1)) - actor[i].floorz = s->z = getflorzofslope(s->sectnum,s->x,s->y); - else switch (DynamicTileMap[switchpicnum]) - { - case APLAYER__STATIC: - s->cstat = 32768; - goto BOLT; - case NEON1__STATIC: - case NEON2__STATIC: - case NEON3__STATIC: - case NEON4__STATIC: - case NEON5__STATIC: - case NEON6__STATIC: - - if ((g_globalRandom/(s->lotag+1)&31) > 4) s->shade = -127; - else s->shade = 127; - goto BOLT; - - case BLOODSPLAT1__STATIC: - case BLOODSPLAT2__STATIC: - case BLOODSPLAT3__STATIC: - case BLOODSPLAT4__STATIC: - - if (t[0] == 7*GAMETICSPERSEC) goto BOLT; - s->z += 16+(krand()&15); - t[0]++; - if ((t[0]%9) == 0) s->yrepeat++; - goto BOLT; - - case NUKEBUTTON__STATIC: - // case NUKEBUTTON+1: - // case NUKEBUTTON+2: - // case NUKEBUTTON+3: - - if (t[0]) - { - t[0]++; - if (t[0] == 8) s->picnum = NUKEBUTTON+1; - else if (t[0] == 16) - { - s->picnum = NUKEBUTTON+2; - g_player[sprite[s->owner].yvel].ps->fist_incs = 1; - } - if (g_player[sprite[s->owner].yvel].ps->fist_incs == GAMETICSPERSEC) - s->picnum = NUKEBUTTON+3; - } - goto BOLT; - - case FORCESPHERE__STATIC: - - l = s->xrepeat; - if (t[1] > 0) - { - t[1]--; - if (t[1] == 0) - { - KILLIT(i); - } - } - if (actor[s->owner].t_data[1] == 0) - { - if (t[0] < 64) - { - t[0]++; - l += 3; - } - } - else if (t[0] > 64) - { - t[0]--; - l -= 3; - } - - s->x = sprite[s->owner].x; - s->y = sprite[s->owner].y; - s->z = sprite[s->owner].z; - s->ang += actor[s->owner].t_data[0]; - - if (l > 64) l = 64; - else if (l < 1) l = 1; - - s->xrepeat = l; - s->yrepeat = l; - s->shade = (l>>1)-48; - - for (j=t[0]; j > 0; j--) - A_SetSprite(i,CLIPMASK0); - goto BOLT; - case WATERSPLASH2__STATIC: - - t[0]++; - if (t[0] == 1) - { - if (sector[sect].lotag != 1 && sector[sect].lotag != 2) - KILLIT(i); - /* else - { - l = getflorzofslope(sect,s->x,s->y)-s->z; - if( l > (16<<8) ) KILLIT(i); - } - else */ - if (!S_CheckSoundPlaying(i,ITEM_SPLASH)) - A_PlaySound(ITEM_SPLASH,i); - } - if (t[0] == 3) - { - t[0] = 0; - t[1]++; - } - if (t[1] == 5) - deletesprite(i); - goto BOLT; - case FRAMEEFFECT1_13__STATIC: - if (PLUTOPAK) goto BOLT; // JBF: ideally this should never happen... - case FRAMEEFFECT1__STATIC: - - if (s->owner >= 0) - { - t[0]++; - - if (t[0] > 7) - { - KILLIT(i); - } - else if (t[0] > 4) - s->cstat |= 512+2; - else if (t[0] > 2) - s->cstat |= 2; - s->xoffset = sprite[s->owner].xoffset; - s->yoffset = sprite[s->owner].yoffset; - } - goto BOLT; - case INNERJAW__STATIC: - // case INNERJAW+1: - - p = A_FindPlayer(s,&x); - if (x < 512) - { - g_player[p].ps->pals.f = 32; - g_player[p].ps->pals.r = 32; - g_player[p].ps->pals.g = 0; - g_player[p].ps->pals.b = 0; - sprite[g_player[p].ps->i].extra -= 4; - } - - case FIRELASER__STATIC: - if (s->extra != 5) - s->extra = 5; - else KILLIT(i); - break; - case TONGUE__STATIC: - KILLIT(i); - - case MONEY__STATIC: - case MAIL__STATIC: - case PAPER__STATIC: - - s->xvel = (krand()&7)+(sintable[T1&2047]>>9); - T1 += (krand()&63); - if ((T1&2047) > 512 && (T1&2047) < 1596) - { - if (sector[sect].lotag == 2) - { - if (s->zvel < 64) - s->zvel += (g_spriteGravity>>5)+(krand()&7); - } - else if (s->zvel < 144) - s->zvel += (g_spriteGravity>>5)+(krand()&7); - } - - A_SetSprite(i,CLIPMASK0); - - if ((krand()&3) == 0) - setsprite(i,(vec3_t *)s); - - if (s->sectnum == -1) KILLIT(i); - l = getflorzofslope(s->sectnum,s->x,s->y); - - if (s->z > l) - { - s->z = l; - - A_AddToDeleteQueue(i); - PN ++; - - j = headspritestat[STAT_MISC]; - while (j >= 0) - { - if (sprite[j].picnum == BLOODPOOL) - if (ldist(s,&sprite[j]) < 348) - { - s->pal = 2; - break; - } - j = nextspritestat[j]; - } - } - - break; - - case JIBS1__STATIC: - case JIBS2__STATIC: - case JIBS3__STATIC: - case JIBS4__STATIC: - case JIBS5__STATIC: - case JIBS6__STATIC: - case HEADJIB1__STATIC: - case ARMJIB1__STATIC: - case LEGJIB1__STATIC: - case LIZMANHEAD1__STATIC: - case LIZMANARM1__STATIC: - case LIZMANLEG1__STATIC: - case DUKETORSO__STATIC: - case DUKEGUN__STATIC: - case DUKELEG__STATIC: - - if (s->xvel > 0) s->xvel--; - else s->xvel = 0; - - if (++t[5] == (30*10)) - KILLIT(i); - - if (s->zvel > 1024 && s->zvel < 1280) - { - setsprite(i,(vec3_t *)s); - sect = s->sectnum; - } - - getzsofslope(sect,s->x,s->y,&x,&l); - if (x == l || sect < 0 || sect >= MAXSECTORS) KILLIT(i); - - if (s->z < l-(2<<8)) - { - if (t[1] < 2) t[1]++; - else if (sector[sect].lotag != 2) - { - t[1] = 0; - if (s->picnum == DUKELEG || s->picnum == DUKETORSO || s->picnum == DUKEGUN) - { - if (t[0] > 6) t[0] = 0; - else t[0]++; - } - else - { - if (t[0] > 2) - t[0] = 0; - else t[0]++; - } - } - - if (s->zvel < 6144) - { - if (sector[sect].lotag == 2) - { - if (s->zvel < 1024) - s->zvel += 48; - else s->zvel = 1024; - } - else s->zvel += g_spriteGravity-50; - } - - s->x += (s->xvel*sintable[(s->ang+512)&2047])>>14; - s->y += (s->xvel*sintable[s->ang&2047])>>14; - s->z += s->zvel; - - } - else - { - if (t[2] == 0) - { - if (s->sectnum == -1) - { - KILLIT(i); - } - if ((sector[s->sectnum].floorstat&2)) - { - KILLIT(i); - } - t[2]++; - } - l = getflorzofslope(s->sectnum,s->x,s->y); - - s->z = l-(2<<8); - s->xvel = 0; - - if (s->picnum == JIBS6) - { - t[1]++; - if ((t[1]&3) == 0 && t[0] < 7) - t[0]++; - if (t[1] > 20) KILLIT(i); - } - else - { - s->picnum = JIBS6; - t[0] = 0; - t[1] = 0; - } - - } - goto BOLT; - - case BLOODPOOL__STATIC: - case PUKE__STATIC: - - if (t[0] == 0) - { - t[0] = 1; - if (sector[sect].floorstat&2) - { - KILLIT(i); - } - else A_AddToDeleteQueue(i); - } - - A_Fall(i); - - p = A_FindPlayer(s,&x); - - s->z = actor[i].floorz-(ZOFFSET); - - if (t[2] < 32) - { - t[2]++; - if (actor[i].picnum == TIRE) - { - if (s->xrepeat < 64 && s->yrepeat < 64) - { - s->xrepeat += krand()&3; - s->yrepeat += krand()&3; - } - } - else - { - if (s->xrepeat < 32 && s->yrepeat < 32) - { - s->xrepeat += krand()&3; - s->yrepeat += krand()&3; - } - } - } - - if (x < 844 && s->xrepeat > 6 && s->yrepeat > 6) - { - if (s->pal == 0 && (krand()&255) < 16 && s->picnum != PUKE) - { - if (g_player[p].ps->inv_amount[GET_BOOTS] > 0) - g_player[p].ps->inv_amount[GET_BOOTS]--; - else - { - if (!A_CheckSoundPlaying(g_player[p].ps->i,DUKE_LONGTERM_PAIN)) - A_PlaySound(DUKE_LONGTERM_PAIN,g_player[p].ps->i); - sprite[g_player[p].ps->i].extra --; - g_player[p].ps->pals.f = 32; - g_player[p].ps->pals.r = 16; - g_player[p].ps->pals.g = 0; - g_player[p].ps->pals.b = 0; - } - } - - if (t[1] == 1) goto BOLT; - t[1] = 1; - - if (actor[i].picnum == TIRE) - g_player[p].ps->footprintcount = 10; - else g_player[p].ps->footprintcount = 3; - - g_player[p].ps->footprintpal = s->pal; - g_player[p].ps->footprintshade = s->shade; - - if (t[2] == 32) - { - s->xrepeat -= 6; - s->yrepeat -= 6; - } - } - else t[1] = 0; - goto BOLT; - - case BURNING__STATIC: - case BURNING2__STATIC: - case FECES__STATIC: - case WATERBUBBLE__STATIC: - case SMALLSMOKE__STATIC: - case EXPLOSION2__STATIC: - case SHRINKEREXPLOSION__STATIC: - case EXPLOSION2BOT__STATIC: - case BLOOD__STATIC: - case LASERSITE__STATIC: - case FORCERIPPLE__STATIC: - case TRANSPORTERSTAR__STATIC: - case TRANSPORTERBEAM__STATIC: - { - if (!actorscrptr[sprite[i].picnum]) - goto BOLT; - p = A_FindPlayer(s,&x); - A_Execute(i,p,x); - goto BOLT; - } - - case SHELL__STATIC: - case SHOTGUNSHELL__STATIC: - - A_SetSprite(i,CLIPMASK0); - - if (sect < 0 || (sector[sect].floorz + 256) < s->z) KILLIT(i); - - if (sector[sect].lotag == 2) - { - t[1]++; - if (t[1] > 8) - { - t[1] = 0; - t[0]++; - t[0] &= 3; - } - if (s->zvel < 128) s->zvel += (g_spriteGravity/13); // 8 - else s->zvel -= 64; - if (s->xvel > 0) - s->xvel -= 4; - else s->xvel = 0; - } - else - { - t[1]++; - if (t[1] > 3) - { - t[1] = 0; - t[0]++; - t[0] &= 3; - } - if (s->zvel < 512) s->zvel += (g_spriteGravity/3); // 52; - if (s->xvel > 0) - s->xvel --; - // else KILLIT(i); - } - - goto BOLT; - - case GLASSPIECES__STATIC: - // case GLASSPIECES+1: - // case GLASSPIECES+2: - - A_Fall(i); - - if (s->zvel > 4096) s->zvel = 4096; - if (sect < 0) KILLIT(i); - - if (s->z == actor[i].floorz-(ZOFFSET) && t[0] < 3) - { - s->zvel = -((3-t[0])<<8)-(krand()&511); - if (sector[sect].lotag == 2) - s->zvel >>= 1; - s->xrepeat >>= 1; - s->yrepeat >>= 1; - if (rnd(96)) - setsprite(i,(vec3_t *)s); - t[0]++;//Number of bounces - } - else if (t[0] == 3) KILLIT(i); - - if (s->xvel > 0) - { - s->xvel -= 2; - s->cstat = ((s->xvel&3)<<2); - } - else s->xvel = 0; - - A_SetSprite(i,CLIPMASK0); - - goto BOLT; - } - - IFWITHIN(SCRAP6,SCRAP5+3) - { - if (s->xvel > 0) - s->xvel--; - else s->xvel = 0; - - if (s->zvel > 1024 && s->zvel < 1280) - { - setsprite(i,(vec3_t *)s); - sect = s->sectnum; - } - - if (s->z < sector[sect].floorz-(2<<8)) - { - if (t[1] < 1) t[1]++; - else - { - t[1] = 0; - - if (s->picnum < SCRAP6+8) - { - if (t[0] > 6) - t[0] = 0; - else t[0]++; - } - else - { - if (t[0] > 2) - t[0] = 0; - else t[0]++; - } - } - if (s->zvel < 4096) s->zvel += g_spriteGravity-50; - s->x += (s->xvel*sintable[(s->ang+512)&2047])>>14; - s->y += (s->xvel*sintable[s->ang&2047])>>14; - s->z += s->zvel; - } - else - { - if (s->picnum == SCRAP1 && s->yvel > 0) - { - j = A_Spawn(i,s->yvel); - setsprite(j,(vec3_t *)s); - A_GetZLimits(j); - sprite[j].hitag = sprite[j].lotag = 0; - } - KILLIT(i); - } - goto BOLT; - } - -BOLT: - i = nexti; - } -} - -ACTOR_STATIC void G_MoveEffectors(void) //STATNUM 3 -{ - int32_t q=0, m, x, st, j; - intptr_t *t,l; - int32_t i = headspritestat[STAT_EFFECTOR], nexti, nextk, p, sh, nextj; - int16_t k; - spritetype *s; - sectortype *sc; - walltype *wal; - - fricxv = fricyv = 0; - - while (i >= 0) - { - nexti = nextspritestat[i]; - s = &sprite[i]; - - sc = §or[s->sectnum]; - st = s->lotag; - sh = s->hitag; - - t = &actor[i].t_data[0]; - - switch (st) - { - case 0: - { - int32_t zchange = 0; - - zchange = 0; - - j = s->owner; - - if (sprite[j].lotag == (int16_t) 65535) - KILLIT(i); - - q = sc->extra>>3; - l = 0; - - if (sc->lotag == 30) - { - q >>= 2; - - if (sprite[i].extra == 1) - { - if (actor[i].tempang < 256) - { - actor[i].tempang += 4; - if (actor[i].tempang >= 256) - A_CallSound(s->sectnum,i); - if (s->clipdist) l = 1; - else l = -1; - } - else actor[i].tempang = 256; - - if (sc->floorz > s->z) //z's are touching - { - sc->floorz -= 512; - zchange = -512; - if (sc->floorz < s->z) - sc->floorz = s->z; - } - - else if (sc->floorz < s->z) //z's are touching - { - sc->floorz += 512; - zchange = 512; - if (sc->floorz > s->z) - sc->floorz = s->z; - } - } - else if (sprite[i].extra == 3) - { - if (actor[i].tempang > 0) - { - actor[i].tempang -= 4; - if (actor[i].tempang <= 0) - A_CallSound(s->sectnum,i); - if (s->clipdist) l = -1; - else l = 1; - } - else actor[i].tempang = 0; - - if (sc->floorz > T4) //z's are touching - { - sc->floorz -= 512; - zchange = -512; - if (sc->floorz < T4) - sc->floorz = T4; - } - - else if (sc->floorz < T4) //z's are touching - { - sc->floorz += 512; - zchange = 512; - if (sc->floorz > T4) - sc->floorz = T4; - } - } - - s->ang += (l*q); - t[2] += (l*q); - } - else - { - if (actor[j].t_data[0] == 0) break; - if (actor[j].t_data[0] == 2) KILLIT(i); - - if (sprite[j].ang > 1024) - l = -1; - else l = 1; - if (t[3] == 0) - t[3] = ldist(s,&sprite[j]); - s->xvel = t[3]; - s->x = sprite[j].x; - s->y = sprite[j].y; - s->ang += (l*q); - t[2] += (l*q); - } - - if (l && (sc->floorstat&64)) - { - TRAVERSE_CONNECT(p) - { - if (g_player[p].ps->cursectnum == s->sectnum && g_player[p].ps->on_ground == 1) - { - - g_player[p].ps->ang += (l*q); - g_player[p].ps->ang &= 2047; - - g_player[p].ps->pos.z += zchange; - - rotatepoint(sprite[j].x,sprite[j].y,g_player[p].ps->pos.x,g_player[p].ps->pos.y,(q*l),&m,&x); - - g_player[p].ps->bobposx += m-g_player[p].ps->pos.x; - g_player[p].ps->bobposy += x-g_player[p].ps->pos.y; - - g_player[p].ps->pos.x = m; - g_player[p].ps->pos.y = x; - - if (sprite[g_player[p].ps->i].extra <= 0) - { - sprite[g_player[p].ps->i].x = m; - sprite[g_player[p].ps->i].y = x; - } - } - } - - p = headspritesect[s->sectnum]; - while (p >= 0) - { - if (sprite[p].statnum != STAT_EFFECTOR && sprite[p].statnum != STAT_PROJECTILE) - if (sprite[p].picnum != LASERLINE) - { - if (sprite[p].picnum == APLAYER && sprite[p].owner >= 0) - { - p = nextspritesect[p]; - continue; - } - - sprite[p].ang += (l*q); - sprite[p].ang &= 2047; - - sprite[p].z += zchange; - - rotatepoint(sprite[j].x,sprite[j].y,sprite[p].x,sprite[p].y,(q*l),&sprite[p].x,&sprite[p].y); - } - p = nextspritesect[p]; - } - - } - - A_MoveSector(i); - } - - break; - case 1: //Nothing for now used as the pivot - if (s->owner == -1) //Init - { - s->owner = i; - - j = headspritestat[STAT_EFFECTOR]; - while (j >= 0) - { - if (sprite[j].lotag == 19 && sprite[j].hitag == sh) - { - t[0] = 0; - break; - } - j = nextspritestat[j]; - } - } - - break; - case 6: - k = sc->extra; - - if (t[4] > 0) - { - t[4]--; - if (t[4] >= (k-(k>>3))) - s->xvel -= (k>>5); - if (t[4] > ((k>>1)-1) && t[4] < (k-(k>>3))) - s->xvel = 0; - if (t[4] < (k>>1)) - s->xvel += (k>>5); - if (t[4] < ((k>>1)-(k>>3))) - { - t[4] = 0; - s->xvel = k; - } - } - else s->xvel = k; - - j = headspritestat[STAT_EFFECTOR]; - while (j >= 0) - { - if ((sprite[j].lotag == 14) && (sh == sprite[j].hitag) && (actor[j].t_data[0] == t[0])) - { - sprite[j].xvel = s->xvel; - // if( t[4] == 1 ) - { - if (actor[j].t_data[5] == 0) - actor[j].t_data[5] = dist(&sprite[j],s); - x = ksgn(dist(&sprite[j],s)-actor[j].t_data[5]); - if (sprite[j].extra) - x = -x; - s->xvel += x; - } - actor[j].t_data[4] = t[4]; - } - j = nextspritestat[j]; - } - x = 0; - - - case 14: - if (s->owner==-1) - s->owner = A_FindLocator((int16_t)t[3],(int16_t)t[0]); - - if (s->owner == -1) - { - Bsprintf(tempbuf,"Could not find any locators for SE# 6 and 14 with a hitag of %" PRIdPTR ".\n",t[3]); - G_GameExit(tempbuf); - } - - j = ldist(&sprite[s->owner],s); - - if (j < 1024L) - { - if (st==6) - if (sprite[s->owner].hitag&1) - t[4]=sc->extra; //Slow it down - t[3]++; - s->owner = A_FindLocator(t[3],t[0]); - if (s->owner==-1) - { - t[3]=0; - s->owner = A_FindLocator(0,t[0]); - } - } - - if (s->xvel) - { - x = getangle(sprite[s->owner].x-s->x,sprite[s->owner].y-s->y); - q = G_GetAngleDelta(s->ang,x)>>3; - - t[2] += q; - s->ang += q; - - if (s->xvel == sc->extra) - { - if ((sc->floorstat&1) == 0 && (sc->ceilingstat&1) == 0) - { - if (!S_CheckSoundPlaying(i,actor[i].lastvx)) - A_PlaySound(actor[i].lastvx,i); - } - else if (ud.monsters_off == 0 && sc->floorpal == 0 && (sc->floorstat&1) && rnd(8)) - { - p = A_FindPlayer(s,&x); - if (x < 20480) - { - j = s->ang; - s->ang = getangle(s->x-g_player[p].ps->pos.x,s->y-g_player[p].ps->pos.y); - A_Shoot(i,RPG); - s->ang = j; - } - } - } - - if (s->xvel <= 64 && (sc->floorstat&1) == 0 && (sc->ceilingstat&1) == 0) - S_StopEnvSound(actor[i].lastvx,i); - - if ((sc->floorz-sc->ceilingz) < (108<<8)) - { - if (ud.clipping == 0 && s->xvel >= 192) - TRAVERSE_CONNECT(p) - if (sprite[g_player[p].ps->i].extra > 0) - { - k = g_player[p].ps->cursectnum; - updatesector(g_player[p].ps->pos.x,g_player[p].ps->pos.y,&k); - if ((k == -1 && ud.clipping == 0) || (k == s->sectnum && g_player[p].ps->cursectnum != s->sectnum)) - { - g_player[p].ps->pos.x = s->x; - g_player[p].ps->pos.y = s->y; - g_player[p].ps->cursectnum = s->sectnum; - - setsprite(g_player[p].ps->i,(vec3_t *)s); - P_QuickKill(g_player[p].ps); - } - } - } - - m = (s->xvel*sintable[(s->ang+512)&2047])>>14; - x = (s->xvel*sintable[s->ang&2047])>>14; - - TRAVERSE_CONNECT(p) - if (sector[g_player[p].ps->cursectnum].lotag != 2) - { - if (g_playerSpawnPoints[p].os == s->sectnum) - { - g_playerSpawnPoints[p].ox += m; - g_playerSpawnPoints[p].oy += x; - } - - if (s->sectnum == sprite[g_player[p].ps->i].sectnum) - { - rotatepoint(s->x,s->y,g_player[p].ps->pos.x,g_player[p].ps->pos.y,q,&g_player[p].ps->pos.x,&g_player[p].ps->pos.y); - - g_player[p].ps->pos.x += m; - g_player[p].ps->pos.y += x; - - g_player[p].ps->bobposx += m; - g_player[p].ps->bobposy += x; - - g_player[p].ps->ang += q; - - if (g_netServer || numplayers > 1) - { - g_player[p].ps->opos.x = g_player[p].ps->pos.x; - g_player[p].ps->opos.y = g_player[p].ps->pos.y; - } - if (sprite[g_player[p].ps->i].extra <= 0) - { - sprite[g_player[p].ps->i].x = g_player[p].ps->pos.x; - sprite[g_player[p].ps->i].y = g_player[p].ps->pos.y; - } - } - } - j = headspritesect[s->sectnum]; - while (j >= 0) - { - if (sprite[j].statnum != STAT_PLAYER && sector[sprite[j].sectnum].lotag != 2 && - (sprite[j].picnum != SECTOREFFECTOR || - (sprite[j].picnum == SECTOREFFECTOR && (sprite[j].lotag == 49||sprite[j].lotag == 50))) - && sprite[j].picnum != LOCATORS) - { - rotatepoint(s->x,s->y,sprite[j].x,sprite[j].y,q,&sprite[j].x,&sprite[j].y); - - sprite[j].x+= m; - sprite[j].y+= x; - - sprite[j].ang+=q; - - if (g_netServer || numplayers > 1) - { - actor[j].bposx = sprite[j].x; - actor[j].bposy = sprite[j].y; - } - } - j = nextspritesect[j]; - } - - A_MoveSector(i); - setsprite(i,(vec3_t *)s); - - if ((sc->floorz-sc->ceilingz) < (108<<8)) - { - if (ud.clipping == 0 && s->xvel >= 192) - TRAVERSE_CONNECT(p) - if (sprite[g_player[p].ps->i].extra > 0) - { - k = g_player[p].ps->cursectnum; - updatesector(g_player[p].ps->pos.x,g_player[p].ps->pos.y,&k); - if ((k == -1 && ud.clipping == 0) || (k == s->sectnum && g_player[p].ps->cursectnum != s->sectnum)) - { - g_player[p].ps->opos.x = g_player[p].ps->pos.x = s->x; - g_player[p].ps->opos.y = g_player[p].ps->pos.y = s->y; - g_player[p].ps->cursectnum = s->sectnum; - - setsprite(g_player[p].ps->i,(vec3_t *)s); - P_QuickKill(g_player[p].ps); - } - } - - j = headspritesect[sprite[OW].sectnum]; - while (j >= 0) - { - l = nextspritesect[j]; - if (sprite[j].statnum == STAT_ACTOR && A_CheckEnemySprite(&sprite[j]) && - sprite[j].picnum != SECTOREFFECTOR && sprite[j].picnum != LOCATORS) - { - k = sprite[j].sectnum; - updatesector(sprite[j].x,sprite[j].y,&k); - if (sprite[j].extra >= 0 && k == s->sectnum) - { - A_DoGutsDir(j,JIBS6,72); - A_PlaySound(SQUISHED,i); - deletesprite(j); - } - } - j = l; - } - } - } - - break; - - case 30: - if (s->owner == -1) - { - t[3] = !t[3]; - s->owner = A_FindLocator(t[3],t[0]); - } - else - { - - if (t[4] == 1) // Starting to go - { - if (ldist(&sprite[s->owner],s) < (2048-128)) - t[4] = 2; - else - { - if (s->xvel == 0) - G_OperateActivators(s->hitag+(!t[3]),-1); - if (s->xvel < 256) - s->xvel += 16; - } - } - if (t[4] == 2) - { - l = FindDistance2D(sprite[s->owner].x-s->x,sprite[s->owner].y-s->y); - - if (l <= 128) - s->xvel = 0; - - if (s->xvel > 0) - s->xvel -= 16; - else - { - s->xvel = 0; - G_OperateActivators(s->hitag+(int16_t)t[3],-1); - s->owner = -1; - s->ang += 1024; - t[4] = 0; - G_OperateForceFields(i,s->hitag); - - j = headspritesect[s->sectnum]; - while (j >= 0) - { - if (sprite[j].picnum != SECTOREFFECTOR && sprite[j].picnum != LOCATORS) - { - actor[j].bposx = sprite[j].x; - actor[j].bposy = sprite[j].y; - } - j = nextspritesect[j]; - } - - } - } - } - - if (s->xvel) - { - l = (s->xvel*sintable[(s->ang+512)&2047])>>14; - x = (s->xvel*sintable[s->ang&2047])>>14; - - if ((sc->floorz-sc->ceilingz) < (108<<8)) - if (ud.clipping == 0) - TRAVERSE_CONNECT(p) - if (sprite[g_player[p].ps->i].extra > 0) - { - k = g_player[p].ps->cursectnum; - updatesector(g_player[p].ps->pos.x,g_player[p].ps->pos.y,&k); - if ((k == -1 && ud.clipping == 0) || (k == s->sectnum && g_player[p].ps->cursectnum != s->sectnum)) - { - g_player[p].ps->pos.x = s->x; - g_player[p].ps->pos.y = s->y; - g_player[p].ps->cursectnum = s->sectnum; - - setsprite(g_player[p].ps->i,(vec3_t *)s); - P_QuickKill(g_player[p].ps); - } - } - - TRAVERSE_CONNECT(p) - { - if (sprite[g_player[p].ps->i].sectnum == s->sectnum) - { - g_player[p].ps->pos.x += l; - g_player[p].ps->pos.y += x; - - if (g_netServer || numplayers > 1) - { - g_player[p].ps->opos.x = g_player[p].ps->pos.x; - g_player[p].ps->opos.y = g_player[p].ps->pos.y; - } - - g_player[p].ps->bobposx += l; - g_player[p].ps->bobposy += x; - } - - if (g_playerSpawnPoints[p].os == s->sectnum) - { - g_playerSpawnPoints[p].ox += l; - g_playerSpawnPoints[p].oy += x; - } - } - - j = headspritesect[s->sectnum]; - while (j >= 0) - { - if (sprite[j].picnum != SECTOREFFECTOR && sprite[j].picnum != LOCATORS) - { - if (numplayers < 2 && !g_netServer) - { - actor[j].bposx = sprite[j].x; - actor[j].bposy = sprite[j].y; - } - - sprite[j].x += l; - sprite[j].y += x; - - if (g_netServer || numplayers > 1) - { - actor[j].bposx = sprite[j].x; - actor[j].bposy = sprite[j].y; - } - } - j = nextspritesect[j]; - } - - A_MoveSector(i); - setsprite(i,(vec3_t *)s); - - if ((sc->floorz-sc->ceilingz) < (108<<8)) - { - if (ud.clipping == 0) - TRAVERSE_CONNECT(p) - if (sprite[g_player[p].ps->i].extra > 0) - { - k = g_player[p].ps->cursectnum; - updatesector(g_player[p].ps->pos.x,g_player[p].ps->pos.y,&k); - if ((k == -1 && ud.clipping == 0) || (k == s->sectnum && g_player[p].ps->cursectnum != s->sectnum)) - { - g_player[p].ps->pos.x = s->x; - g_player[p].ps->pos.y = s->y; - - g_player[p].ps->opos.x = g_player[p].ps->pos.x; - g_player[p].ps->opos.y = g_player[p].ps->pos.y; - - g_player[p].ps->cursectnum = s->sectnum; - - setsprite(g_player[p].ps->i,(vec3_t *)s); - P_QuickKill(g_player[p].ps); - } - } - - j = headspritesect[sprite[OW].sectnum]; - while (j >= 0) - { - l = nextspritesect[j]; - if (sprite[j].statnum == STAT_ACTOR && A_CheckEnemySprite(&sprite[j]) && - sprite[j].picnum != SECTOREFFECTOR && sprite[j].picnum != LOCATORS) - { - // if(sprite[j].sectnum != s->sectnum) - { - k = sprite[j].sectnum; - updatesector(sprite[j].x,sprite[j].y,&k); - if (sprite[j].extra >= 0 && k == s->sectnum) - { - A_DoGutsDir(j,JIBS6,24); - A_PlaySound(SQUISHED,j); - deletesprite(j); - } - } - - } - j = l; - } - } - } - - break; - - - case 2://Quakes - if (t[4] > 0 && t[0] == 0) - { - if (t[4] < sh) - t[4]++; - else t[0] = 1; - } - - if (t[0] > 0) - { - t[0]++; - - s->xvel = 3; - - if (t[0] > 96) - { - t[0] = -1; //Stop the quake - t[4] = -1; - KILLIT(i); - } - else - { - if ((t[0]&31) == 8) - { - g_earthquakeTime = 48; - A_PlaySound(EARTHQUAKE,g_player[screenpeek].ps->i); - } - - if (klabs(sc->floorheinum-t[5]) < 8) - sc->floorheinum = t[5]; - else sc->floorheinum += (ksgn(t[5]-sc->floorheinum)<<4); - } - - m = (s->xvel*sintable[(s->ang+512)&2047])>>14; - x = (s->xvel*sintable[s->ang&2047])>>14; - - - TRAVERSE_CONNECT(p) - if (g_player[p].ps->cursectnum == s->sectnum && g_player[p].ps->on_ground) - { - g_player[p].ps->pos.x += m; - g_player[p].ps->pos.y += x; - - g_player[p].ps->bobposx += m; - g_player[p].ps->bobposy += x; - } - - j = headspritesect[s->sectnum]; - while (j >= 0) - { - nextj = nextspritesect[j]; - - if (sprite[j].picnum != SECTOREFFECTOR) - { - sprite[j].x+=m; - sprite[j].y+=x; - setsprite(j,(vec3_t *)&sprite[j]); - } - j = nextj; - } - A_MoveSector(i); - setsprite(i,(vec3_t *)s); - } - break; - - //Flashing sector lights after reactor EXPLOSION2 - - case 3: - - if (t[4] == 0) break; - p = A_FindPlayer(s,&x); - - // if(t[5] > 0) { t[5]--; break; } - - if ((g_globalRandom/(sh+1)&31) < 4 && !t[2]) - { - // t[5] = 4+(g_globalRandom&7); - sc->ceilingpal = s->owner>>8; - sc->floorpal = s->owner&0xff; - t[0] = s->shade + (g_globalRandom&15); - } - else - { - // t[5] = 4+(g_globalRandom&3); - sc->ceilingpal = s->pal; - sc->floorpal = s->pal; - t[0] = t[3]; - } - - sc->ceilingshade = t[0]; - sc->floorshade = t[0]; - - wal = &wall[sc->wallptr]; - - for (x=sc->wallnum; x > 0; x--,wal++) - { - if (wal->hitag != 1) - { - wal->shade = t[0]; - if ((wal->cstat&2) && wal->nextwall >= 0) - { - wall[wal->nextwall].shade = wal->shade; - } - } - } - - break; - - case 4: - - if ((g_globalRandom/(sh+1)&31) < 4) - { - t[1] = s->shade + (g_globalRandom&15);//Got really bright - t[0] = s->shade + (g_globalRandom&15); - sc->ceilingpal = s->owner>>8; - sc->floorpal = s->owner&0xff; - j = 1; - } - else - { - t[1] = t[2]; - t[0] = t[3]; - - sc->ceilingpal = s->pal; - sc->floorpal = s->pal; - - j = 0; - } - - sc->floorshade = t[1]; - sc->ceilingshade = t[1]; - - wal = &wall[sc->wallptr]; - - for (x=sc->wallnum; x > 0; x--,wal++) - { - if (j) wal->pal = (s->owner&0xff); - else wal->pal = s->pal; - - if (wal->hitag != 1) - { - wal->shade = t[0]; - if ((wal->cstat&2) && wal->nextwall >= 0) - wall[wal->nextwall].shade = wal->shade; - } - } - - j = headspritesect[SECT]; - while (j >= 0) - { - if (sprite[j].cstat&16 && A_CheckSpriteFlags(j,SPRITE_NOSHADE) == 0) - { - if (sc->ceilingstat&1) - sprite[j].shade = sc->ceilingshade; - else sprite[j].shade = sc->floorshade; - } - - j = nextspritesect[j]; - } - - if (t[4]) KILLIT(i); - - break; - - //BOSS - case 5: - p = A_FindPlayer(s,&x); - if (x < 8192) - { - j = s->ang; - s->ang = getangle(s->x-g_player[p].ps->pos.x,s->y-g_player[p].ps->pos.y); - A_Shoot(i,FIRELASER); - s->ang = j; - } - - if (s->owner==-1) //Start search - { - t[4]=0; - l = 0x7fffffff; - while (1) //Find the shortest dist - { - s->owner = A_FindLocator((int16_t)t[4],-1); //t[0] hold sectnum - - if (s->owner==-1) break; - - m = ldist(&sprite[g_player[p].ps->i],&sprite[s->owner]); - - if (l > m) - { - q = s->owner; - l = m; - } - - t[4]++; - } - - s->owner = q; - s->zvel = ksgn(sprite[q].z-s->z)<<4; - } - - if (ldist(&sprite[s->owner],s) < 1024) - { - int16_t ta; - ta = s->ang; - s->ang = getangle(g_player[p].ps->pos.x-s->x,g_player[p].ps->pos.y-s->y); - s->ang = ta; - s->owner = -1; - goto BOLT; - - } - else s->xvel=256; - - x = getangle(sprite[s->owner].x-s->x,sprite[s->owner].y-s->y); - q = G_GetAngleDelta(s->ang,x)>>3; - s->ang += q; - - if (rnd(32)) - { - t[2]+=q; - sc->ceilingshade = 127; - } - else - { - t[2] += G_GetAngleDelta(t[2]+512,getangle(g_player[p].ps->pos.x-s->x,g_player[p].ps->pos.y-s->y))>>2; - sc->ceilingshade = 0; - } - - if ((j = A_IncurDamage(i)) >= 0) - { - if (++t[3] == 5) - { - s->zvel += 1024; - P_DoQuote(QUOTE_WASTED, g_player[myconnectindex].ps); - } - } - - s->z += s->zvel; - sc->ceilingz += s->zvel; - sector[t[0]].ceilingz += s->zvel; - A_MoveSector(i); - setsprite(i,(vec3_t *)s); - break; - - - case 8: - case 9: - - // work only if its moving - - j = -1; - - if (actor[i].t_data[4]) - { - actor[i].t_data[4]++; - if (actor[i].t_data[4] > 8) KILLIT(i); - j = 1; - } - else j = GetAnimationGoal(&sc->ceilingz); - - if (j >= 0) - { - int16_t sn; - - if ((sc->lotag&0x8000) || actor[i].t_data[4]) - x = -t[3]; - else - x = t[3]; - - if (st == 9) x = -x; - - j = headspritestat[STAT_EFFECTOR]; - while (j >= 0) - { - if (((sprite[j].lotag) == st) && (sprite[j].hitag) == sh) - { - sn = sprite[j].sectnum; - m = sprite[j].shade; - - wal = &wall[sector[sn].wallptr]; - - for (l=sector[sn].wallnum; l>0; l--,wal++) - { - if (wal->hitag != 1) - { - wal->shade+=x; - - if (wal->shade < m) - wal->shade = m; - else if (wal->shade > actor[j].t_data[2]) - wal->shade = actor[j].t_data[2]; - - if (wal->nextwall >= 0) - if (wall[wal->nextwall].hitag != 1) - wall[wal->nextwall].shade = wal->shade; - } - } - - sector[sn].floorshade += x; - sector[sn].ceilingshade += x; - - if (sector[sn].floorshade < m) - sector[sn].floorshade = m; - else if (sector[sn].floorshade > actor[j].t_data[0]) - sector[sn].floorshade = actor[j].t_data[0]; - - if (sector[sn].ceilingshade < m) - sector[sn].ceilingshade = m; - else if (sector[sn].ceilingshade > actor[j].t_data[1]) - sector[sn].ceilingshade = actor[j].t_data[1]; - - } - j = nextspritestat[j]; - } - } - break; - case 10: - - if ((sc->lotag&0xff) == 27 || (sc->floorz > sc->ceilingz && (sc->lotag&0xff) != 23) || sc->lotag == (int16_t) 32791) - { - j = 1; - - if ((sc->lotag&0xff) != 27) - TRAVERSE_CONNECT(p) - if (sc->lotag != 30 && sc->lotag != 31 && sc->lotag != 0) - if (s->sectnum == sprite[g_player[p].ps->i].sectnum) - j = 0; - - if (j == 1) - { - if (t[0] > sh) - switch (sector[s->sectnum].lotag) - { - case 20: - case 21: - case 22: - case 26: - if (GetAnimationGoal(§or[s->sectnum].ceilingz) >= 0) - break; - default: - G_ActivateBySector(s->sectnum,i); - t[0] = 0; - break; - } - else t[0]++; - } - } - else t[0]=0; - break; - case 11: //Swingdoor - - if (t[5] > 0) - { - t[5]--; - break; - } - - if (t[4]) - { - int32_t endwall = sc->wallptr+sc->wallnum; - - for (j=sc->wallptr; j= 0) - { - if (sprite[k].extra > 0 && A_CheckEnemySprite(&sprite[k]) && clipinsidebox(sprite[k].x,sprite[k].y,j,256L) == 1) - goto BOLT; - k = nextspritestat[k]; - } - - k = headspritestat[STAT_PLAYER]; - while (k >= 0) - { - if (sprite[k].owner >= 0 && clipinsidebox(sprite[k].x,sprite[k].y,j,144L) == 1) - { - t[5] = 8; // Delay - k = (SP>>3)*t[3]; - t[2]-=k; - t[4]-=k; - A_MoveSector(i); - setsprite(i,(vec3_t *)s); - goto BOLT; - } - k = nextspritestat[k]; - } - } - - k = (SP>>3)*t[3]; - t[2]+=k; - t[4]+=k; - A_MoveSector(i); - setsprite(i,(vec3_t *)s); - - if (t[4] <= -511 || t[4] >= 512) - { - t[4] = 0; - t[2] &= 0xffffff00; - A_MoveSector(i); - setsprite(i,(vec3_t *)s); - break; - } - } - break; - case 12: - if (t[0] == 3 || t[3] == 1) //Lights going off - { - sc->floorpal = 0; - sc->ceilingpal = 0; - - wal = &wall[sc->wallptr]; - for (j = sc->wallnum; j > 0; j--, wal++) - if (wal->hitag != 1) - { - wal->shade = t[1]; - wal->pal = 0; - } - - sc->floorshade = t[1]; - sc->ceilingshade = t[2]; - t[0]=0; - - j = headspritesect[SECT]; - while (j >= 0) - { - if (sprite[j].cstat&16 && A_CheckSpriteFlags(j,SPRITE_NOSHADE) == 0) - { - if (sc->ceilingstat&1) - sprite[j].shade = sc->ceilingshade; - else sprite[j].shade = sc->floorshade; - } - j = nextspritesect[j]; - - } - - if (t[3] == 1) KILLIT(i); - } - if (t[0] == 1) //Lights flickering on - { - if (sc->floorshade > s->shade) - { - sc->floorpal = s->pal; - sc->ceilingpal = s->pal; - - sc->floorshade -= 2; - sc->ceilingshade -= 2; - - wal = &wall[sc->wallptr]; - for (j=sc->wallnum; j>0; j--,wal++) - if (wal->hitag != 1) - { - wal->pal = s->pal; - wal->shade -= 2; - } - } - else t[0] = 2; - - j = headspritesect[SECT]; - while (j >= 0) - { - if (sprite[j].cstat&16) - { - if (sc->ceilingstat&1 && A_CheckSpriteFlags(j,SPRITE_NOSHADE) == 0) - sprite[j].shade = sc->ceilingshade; - else sprite[j].shade = sc->floorshade; - } - j = nextspritesect[j]; - } - } - break; - - - case 13: - if (t[2]) - { - j = (SP<<5)|1; - - if (s->ang == 512) - { - if (s->owner) - { - if (klabs(t[0]-sc->ceilingz) >= j) - sc->ceilingz += ksgn(t[0]-sc->ceilingz)*j; - else sc->ceilingz = t[0]; - } - else - { - if (klabs(t[1]-sc->floorz) >= j) - sc->floorz += ksgn(t[1]-sc->floorz)*j; - else sc->floorz = t[1]; - } - } - else - { - if (klabs(t[1]-sc->floorz) >= j) - sc->floorz += ksgn(t[1]-sc->floorz)*j; - else sc->floorz = t[1]; - if (klabs(t[0]-sc->ceilingz) >= j) - sc->ceilingz += ksgn(t[0]-sc->ceilingz)*j; - sc->ceilingz = t[0]; - } - - if (t[3] == 1) - { - //Change the shades - - t[3]++; - sc->ceilingstat ^= 1; - - if (s->ang == 512) - { - wal = &wall[sc->wallptr]; - for (j=sc->wallnum; j>0; j--,wal++) - wal->shade = s->shade; - - sc->floorshade = s->shade; - - if (g_player[0].ps->one_parallax_sectnum >= 0) - { - sc->ceilingpicnum = - sector[g_player[0].ps->one_parallax_sectnum].ceilingpicnum; - sc->ceilingshade = - sector[g_player[0].ps->one_parallax_sectnum].ceilingshade; - } - } - } - t[2]++; - if (t[2] > 256) - KILLIT(i); - } - - - if (t[2] == 4 && s->ang != 512) - for (x=0; x<7; x++) RANDOMSCRAP; - break; - - - case 15: - - if (t[4]) - { - s->xvel = 16; - - if (t[4] == 1) //Opening - { - if (t[3] >= (SP>>3)) - { - t[4] = 0; //Turn off the sliders - A_CallSound(s->sectnum,i); - break; - } - t[3]++; - } - else if (t[4] == 2) - { - if (t[3]<1) - { - t[4] = 0; - A_CallSound(s->sectnum,i); - break; - } - t[3]--; - } - - A_MoveSector(i); - setsprite(i,(vec3_t *)s); - } - break; - - case 16: //Reactor - - t[2]+=32; - if (sc->floorzceilingz) s->shade=0; - - else if (sc->ceilingz < t[3]) - { - - //The following code check to see if - //there is any other sprites in the sector. - //If there isn't, then kill this sectoreffector - //itself..... - - j = headspritesect[s->sectnum]; - while (j >= 0) - { - if (sprite[j].picnum == REACTOR || sprite[j].picnum == REACTOR2) - break; - j = nextspritesect[j]; - } - if (j == -1) - { - KILLIT(i); - } - else s->shade=1; - } - - if (s->shade) sc->ceilingz+=1024; - else sc->ceilingz-=512; - - A_MoveSector(i); - setsprite(i,(vec3_t *)s); - - break; - - case 17: - - q = t[0]*(SP<<2); - - sc->ceilingz += q; - sc->floorz += q; - - j = headspritesect[s->sectnum]; - while (j >= 0) - { - if (sprite[j].statnum == STAT_PLAYER && sprite[j].owner >= 0) - { - p = sprite[j].yvel; - if (numplayers < 2 && !g_netServer) - g_player[p].ps->opos.z = g_player[p].ps->pos.z; - g_player[p].ps->pos.z += q; - g_player[p].ps->truefz += q; - g_player[p].ps->truecz += q; - if (g_netServer || numplayers > 1) - g_player[p].ps->opos.z = g_player[p].ps->pos.z; - } - if (sprite[j].statnum != STAT_EFFECTOR) - { - actor[j].bposz = sprite[j].z; - sprite[j].z += q; - } - - actor[j].floorz = sc->floorz; - actor[j].ceilingz = sc->ceilingz; - - j = nextspritesect[j]; - } - - if (t[0]) //If in motion - { - if (klabs(sc->floorz-t[2]) <= SP) - { - G_ActivateWarpElevators(i,0); - break; - } - - if (t[0]==-1) - { - if (sc->floorz > t[3]) - break; - } - else if (sc->ceilingz < t[4]) break; - - if (t[1] == 0) break; - t[1] = 0; - - j = headspritestat[STAT_EFFECTOR]; - while (j >= 0) - { - if (i != j && (sprite[j].lotag) == 17) - if ((sc->hitag-t[0]) == - (sector[sprite[j].sectnum].hitag) - && sh == (sprite[j].hitag)) - break; - j = nextspritestat[j]; - } - - if (j == -1) break; - - k = headspritesect[s->sectnum]; - while (k >= 0) - { - nextk = nextspritesect[k]; - - if (sprite[k].statnum == STAT_PLAYER && sprite[k].owner >= 0) - { - p = sprite[k].yvel; - - g_player[p].ps->pos.x += sprite[j].x-s->x; - g_player[p].ps->pos.y += sprite[j].y-s->y; - g_player[p].ps->pos.z = sector[sprite[j].sectnum].floorz-(sc->floorz-g_player[p].ps->pos.z); - - actor[k].floorz = sector[sprite[j].sectnum].floorz; - actor[k].ceilingz = sector[sprite[j].sectnum].ceilingz; - - g_player[p].ps->bobposx = g_player[p].ps->opos.x = g_player[p].ps->pos.x; - g_player[p].ps->bobposy = g_player[p].ps->opos.y = g_player[p].ps->pos.y; - g_player[p].ps->opos.z = g_player[p].ps->pos.z; - - g_player[p].ps->truefz = actor[k].floorz; - g_player[p].ps->truecz = actor[k].ceilingz; - g_player[p].ps->bobcounter = 0; - - changespritesect(k,sprite[j].sectnum); - g_player[p].ps->cursectnum = sprite[j].sectnum; - } - else if (sprite[k].statnum != STAT_EFFECTOR) - { - sprite[k].x += - sprite[j].x-s->x; - sprite[k].y += - sprite[j].y-s->y; - sprite[k].z = sector[sprite[j].sectnum].floorz- - (sc->floorz-sprite[k].z); - - Bmemcpy(&actor[k].bposx, &sprite[k], sizeof(vec3_t)); - - changespritesect(k,sprite[j].sectnum); - setsprite(k,(vec3_t *)&sprite[k]); - - actor[k].floorz = sector[sprite[j].sectnum].floorz; - actor[k].ceilingz = sector[sprite[j].sectnum].ceilingz; - - } - k = nextk; - } - } - break; - - case 18: - if (t[0]) - { - if (s->pal) - { - if (s->ang == 512) - { - sc->ceilingz -= sc->extra; - if (sc->ceilingz <= t[1]) - { - sc->ceilingz = t[1]; - KILLIT(i); - } - } - else - { - sc->floorz += sc->extra; - j = headspritesect[s->sectnum]; - while (j >= 0) - { - if (sprite[j].picnum == APLAYER && sprite[j].owner >= 0) - if (g_player[sprite[j].yvel].ps->on_ground == 1) - g_player[sprite[j].yvel].ps->pos.z += sc->extra; - if (sprite[j].zvel == 0 && sprite[j].statnum != STAT_EFFECTOR && sprite[j].statnum != STAT_PROJECTILE) - { - actor[j].bposz = sprite[j].z += sc->extra; - actor[j].floorz = sc->floorz; - } - j = nextspritesect[j]; - } - if (sc->floorz >= t[1]) - { - sc->floorz = t[1]; - KILLIT(i); - } - } - } - else - { - if (s->ang == 512) - { - sc->ceilingz += sc->extra; - if (sc->ceilingz >= s->z) - { - sc->ceilingz = s->z; - KILLIT(i); - } - } - else - { - sc->floorz -= sc->extra; - j = headspritesect[s->sectnum]; - while (j >= 0) - { - if (sprite[j].picnum == APLAYER && sprite[j].owner >= 0) - if (g_player[sprite[j].yvel].ps->on_ground == 1) - g_player[sprite[j].yvel].ps->pos.z -= sc->extra; - if (sprite[j].zvel == 0 && sprite[j].statnum != STAT_EFFECTOR && sprite[j].statnum != STAT_PROJECTILE) - { - actor[j].bposz = sprite[j].z -= sc->extra; - actor[j].floorz = sc->floorz; - } - j = nextspritesect[j]; - } - if (sc->floorz <= s->z) - { - sc->floorz = s->z; - KILLIT(i); - } - } - } - - t[2]++; - if (t[2] >= s->hitag) - { - t[2] = 0; - t[0] = 0; - } - } - break; - - case 19: //Battlestar galactia shields - - if (t[0]) - { - if (t[0] == 1) - { - t[0]++; - x = sc->wallptr; - q = x+sc->wallnum; - for (j=x; j= 0) - { - wall[wall[j].nextwall].overpicnum = 0; - wall[wall[j].nextwall].cstat &= (128+32+8+4+2); - } - } - } - - if (sc->ceilingz < sc->floorz) - sc->ceilingz += SP; - else - { - sc->ceilingz = sc->floorz; - - j = headspritestat[STAT_EFFECTOR]; - while (j >= 0) - { - if (sprite[j].lotag == 0 && sprite[j].hitag==sh) - { - q = sprite[sprite[j].owner].sectnum; - sector[sprite[j].sectnum].floorpal = sector[sprite[j].sectnum].ceilingpal = - sector[q].floorpal; - sector[sprite[j].sectnum].floorshade = sector[sprite[j].sectnum].ceilingshade = - sector[q].floorshade; - - actor[sprite[j].owner].t_data[0] = 2; - } - j = nextspritestat[j]; - } - KILLIT(i); - } - } - else //Not hit yet - { - IFHITSECT - { - P_DoQuote(QUOTE_UNLOCKED,g_player[myconnectindex].ps); - - l = headspritestat[STAT_EFFECTOR]; - while (l >= 0) - { - x = sprite[l].lotag&0x7fff; - switch (x) - { - case 0: - if (sprite[l].hitag == sh) - { - q = sprite[l].sectnum; - sector[q].floorshade = - sector[q].ceilingshade = - sprite[sprite[l].owner].shade; - sector[q].floorpal = - sector[q].ceilingpal = - sprite[sprite[l].owner].pal; - } - break; - - case 1: - case 12: - // case 18: - case 19: - - if (sh == sprite[l].hitag) - if (actor[l].t_data[0] == 0) - { - actor[l].t_data[0] = 1; //Shut them all on - sprite[l].owner = i; - } - - break; - } - l = nextspritestat[l]; - } - } - } - - break; - - case 20: //Extend-o-bridge - - if (t[0] == 0) break; - if (t[0] == 1) s->xvel = 8; - else s->xvel = -8; - - if (s->xvel) //Moving - { - x = (s->xvel*sintable[(s->ang+512)&2047])>>14; - l = (s->xvel*sintable[s->ang&2047])>>14; - - t[3] += s->xvel; - - s->x += x; - s->y += l; - - if (t[3] <= 0 || (t[3]>>6) >= (SP>>6)) - { - s->x -= x; - s->y -= l; - t[0] = 0; - A_CallSound(s->sectnum,i); - break; - } - - j = headspritesect[s->sectnum]; - while (j >= 0) - { - nextj = nextspritesect[j]; - - if (sprite[j].statnum != STAT_EFFECTOR && sprite[j].zvel == 0) - { - sprite[j].x += x; - sprite[j].y += l; - setsprite(j,(vec3_t *)&sprite[j]); - if (sector[sprite[j].sectnum].floorstat&2) - if (sprite[j].statnum == STAT_ZOMBIEACTOR) - A_Fall(j); - } - j = nextj; - } - - dragpoint((int16_t)t[1],wall[t[1]].x+x,wall[t[1]].y+l); - dragpoint((int16_t)t[2],wall[t[2]].x+x,wall[t[2]].y+l); - - TRAVERSE_CONNECT(p) - if (g_player[p].ps->cursectnum == s->sectnum && g_player[p].ps->on_ground) - { - g_player[p].ps->pos.x += x; - g_player[p].ps->pos.y += l; - - g_player[p].ps->opos.x = g_player[p].ps->pos.x; - g_player[p].ps->opos.y = g_player[p].ps->pos.y; - - g_player[p].ps->pos.z += PHEIGHT; - setsprite(g_player[p].ps->i,(vec3_t *)g_player[p].ps); - g_player[p].ps->pos.z -= PHEIGHT; - } - - sc->floorxpanning-=x>>3; - sc->floorypanning-=l>>3; - - sc->ceilingxpanning-=x>>3; - sc->ceilingypanning-=l>>3; - } - - break; - - case 21: // Cascading effect - - if (t[0] == 0) break; - - if (s->ang == 1536) - l = (intptr_t) &sc->ceilingz; - else - l = (intptr_t) &sc->floorz; - - if (t[0] == 1) //Decide if the s->sectnum should go up or down - { - s->zvel = ksgn(s->z-*(int32_t *)l) * (SP<<4); - t[0]++; - } - - if (sc->extra == 0) - { - *(int32_t *)l += s->zvel; - - if (klabs(*(int32_t *)l-s->z) < 1024) - { - *(int32_t *)l = s->z; - KILLIT(i); //All done - } - } - else sc->extra--; - break; - - case 22: - - if (t[1]) - { - if (GetAnimationGoal(§or[t[0]].ceilingz) >= 0) - sc->ceilingz += sc->extra*9; - else t[1] = 0; - } - break; - - case 24: - case 34: - - if (t[4]) break; - - x = (SP*sintable[(s->ang+512)&2047])>>18; - l = (SP*sintable[s->ang&2047])>>18; - - k = 0; - - j = headspritesect[s->sectnum]; - while (j >= 0) - { - nextj = nextspritesect[j]; - if (sprite[j].zvel >= 0) - switch (sprite[j].statnum) - { - case STAT_MISC: - switch (DynamicTileMap[sprite[j].picnum]) - { - case BLOODPOOL__STATIC: - case PUKE__STATIC: - case FOOTPRINTS__STATIC: - case FOOTPRINTS2__STATIC: - case FOOTPRINTS3__STATIC: - case FOOTPRINTS4__STATIC: - case BULLETHOLE__STATIC: - case BLOODSPLAT1__STATIC: - case BLOODSPLAT2__STATIC: - case BLOODSPLAT3__STATIC: - case BLOODSPLAT4__STATIC: - sprite[j].xrepeat = sprite[j].yrepeat = 0; - j = nextj; - continue; - case LASERLINE__STATIC: - j = nextj; - continue; - } - case STAT_STANDABLE: - if (sprite[j].picnum == TRIPBOMB) break; - case STAT_ACTOR: - case STAT_DEFAULT: - if ( - sprite[j].picnum == BOLT1 || - sprite[j].picnum == BOLT1+1 || - sprite[j].picnum == BOLT1+2 || - sprite[j].picnum == BOLT1+3 || - sprite[j].picnum == SIDEBOLT1 || - sprite[j].picnum == SIDEBOLT1+1 || - sprite[j].picnum == SIDEBOLT1+2 || - sprite[j].picnum == SIDEBOLT1+3 || - A_CheckSwitchTile(j) - ) - break; - - if (!(sprite[j].picnum >= CRANE && sprite[j].picnum <= (CRANE+3))) - { - if (sprite[j].z > (actor[j].floorz-(16<<8))) - { - actor[j].bposx = sprite[j].x; - actor[j].bposy = sprite[j].y; - - sprite[j].x += x>>2; - sprite[j].y += l>>2; - - setsprite(j,(vec3_t *)&sprite[j]); - - if (sector[sprite[j].sectnum].floorstat&2) - if (sprite[j].statnum == STAT_ZOMBIEACTOR) - A_Fall(j); - } - } - break; - } - j = nextj; - } - - p = myconnectindex; - if (g_player[p].ps->cursectnum == s->sectnum && g_player[p].ps->on_ground) - if (klabs(g_player[p].ps->pos.z-g_player[p].ps->truefz) < PHEIGHT+(9<<8)) - { - fricxv += x<<3; - fricyv += l<<3; - } - - sc->floorxpanning += SP>>7; - - break; - - case 35: - if (sc->ceilingz > s->z) - for (j = 0; j < 8; j++) - { - s->ang += krand()&511; - k = A_Spawn(i,SMALLSMOKE); - sprite[k].xvel = 96+(krand()&127); - A_SetSprite(k,CLIPMASK0); - setsprite(k,(vec3_t *)&sprite[k]); - if (rnd(16)) - A_Spawn(i,EXPLOSION2); - } - - switch (t[0]) - { - case 0: - sc->ceilingz += s->yvel; - if (sc->ceilingz > sc->floorz) - sc->floorz = sc->ceilingz; - if (sc->ceilingz > s->z+(32<<8)) - t[0]++; - break; - case 1: - sc->ceilingz-=(s->yvel<<2); - if (sc->ceilingz < t[4]) - { - sc->ceilingz = t[4]; - t[0] = 0; - } - break; - } - break; - - case 25: //PISTONS - - if (t[4] == 0) break; - - if (sc->floorz <= sc->ceilingz) - s->shade = 0; - else if (sc->ceilingz <= t[3]) - s->shade = 1; - - if (s->shade) - { - sc->ceilingz += SP<<4; - if (sc->ceilingz > sc->floorz) - sc->ceilingz = sc->floorz; - } - else - { - sc->ceilingz -= SP<<4; - if (sc->ceilingz < t[3]) - sc->ceilingz = t[3]; - } - - break; - - case 26: - - s->xvel = 32; - l = (s->xvel*sintable[(s->ang+512)&2047])>>14; - x = (s->xvel*sintable[s->ang&2047])>>14; - - s->shade++; - if (s->shade > 7) - { - s->x = t[3]; - s->y = t[4]; - sc->floorz -= ((s->zvel*s->shade)-s->zvel); - s->shade = 0; - } - else - sc->floorz += s->zvel; - - j = headspritesect[s->sectnum]; - while (j >= 0) - { - nextj = nextspritesect[j]; - if (sprite[j].statnum != STAT_EFFECTOR && sprite[j].statnum != STAT_PLAYER) - { - actor[j].bposx = sprite[j].x; - actor[j].bposy = sprite[j].y; - - sprite[j].x += l; - sprite[j].y += x; - - sprite[j].z += s->zvel; - setsprite(j,(vec3_t *)&sprite[j]); - } - j = nextj; - } - - p = myconnectindex; - if (sprite[g_player[p].ps->i].sectnum == s->sectnum && g_player[p].ps->on_ground) - { - fricxv += l<<5; - fricyv += x<<5; - } - - TRAVERSE_CONNECT(p) - if (sprite[g_player[p].ps->i].sectnum == s->sectnum && g_player[p].ps->on_ground) - g_player[p].ps->pos.z += s->zvel; - - A_MoveSector(i); - setsprite(i,(vec3_t *)s); - - break; - - - case 27: - - if (ud.recstat == 0 || !ud.democams) break; - - actor[i].tempang = s->ang; - - p = A_FindPlayer(s,&x); - if (sprite[g_player[p].ps->i].extra > 0 && myconnectindex == screenpeek) - { - if (t[0] < 0) - { - ud.camerasprite = i; - t[0]++; - } - else if (ud.recstat == 2 && g_player[p].ps->newowner == -1) - { - if (cansee(s->x,s->y,s->z,SECT,g_player[p].ps->pos.x,g_player[p].ps->pos.y,g_player[p].ps->pos.z,g_player[p].ps->cursectnum)) - { - if (x < (int32_t)((unsigned)sh)) - { - ud.camerasprite = i; - t[0] = 999; - s->ang += G_GetAngleDelta(s->ang,getangle(g_player[p].ps->pos.x-s->x,g_player[p].ps->pos.y-s->y))>>3; - SP = 100+((s->z-g_player[p].ps->pos.z)/257); - - } - else if (t[0] == 999) - { - if (ud.camerasprite == i) - t[0] = 0; - else t[0] = -10; - ud.camerasprite = i; - - } - } - else - { - s->ang = getangle(g_player[p].ps->pos.x-s->x,g_player[p].ps->pos.y-s->y); - - if (t[0] == 999) - { - if (ud.camerasprite == i) - t[0] = 0; - else t[0] = -20; - ud.camerasprite = i; - } - } - } - } - break; - case 28: - if (t[5] > 0) - { - t[5]--; - break; - } - - if (T1 == 0) - { - p = A_FindPlayer(s,&x); - if (x > 15500) - break; - T1 = 1; - T2 = 64 + (krand()&511); - T3 = 0; - } - else - { - T3++; - if (T3 > T2) - { - T1 = 0; - g_player[screenpeek].ps->visibility = ud.const_visibility; - break; - } - else if (T3 == (T2>>1)) - A_PlaySound(THUNDER,i); - else if (T3 == (T2>>3)) - A_PlaySound(LIGHTNING_SLAP,i); - else if (T3 == (T2>>2)) - { - j = headspritestat[STAT_DEFAULT]; - while (j >= 0) - { - if (sprite[j].picnum == NATURALLIGHTNING && sprite[j].hitag == s->hitag) - sprite[j].cstat |= 32768; - j = nextspritestat[j]; - } - } - else if (T3 > (T2>>3) && T3 < (T2>>2)) - { - if (cansee(s->x,s->y,s->z,s->sectnum,g_player[screenpeek].ps->pos.x,g_player[screenpeek].ps->pos.y,g_player[screenpeek].ps->pos.z,g_player[screenpeek].ps->cursectnum)) - j = 1; - else j = 0; - - if (rnd(192) && (T3&1)) - { - if (j) - g_player[screenpeek].ps->visibility = 0; - } - else if (j) - g_player[screenpeek].ps->visibility = ud.const_visibility; - - j = headspritestat[STAT_DEFAULT]; - while (j >= 0) - { - if (sprite[j].picnum == NATURALLIGHTNING && sprite[j].hitag == s->hitag) - { - if (rnd(32) && (T3&1)) - { - sprite[j].cstat &= 32767; - A_Spawn(j,SMALLSMOKE); - - p = A_FindPlayer(s,&x); - x = ldist(&sprite[g_player[p].ps->i], &sprite[j]); - if (x < 768) - { - if (!A_CheckSoundPlaying(g_player[p].ps->i,DUKE_LONGTERM_PAIN)) - A_PlaySound(DUKE_LONGTERM_PAIN,g_player[p].ps->i); - A_PlaySound(SHORT_CIRCUIT,g_player[p].ps->i); - sprite[g_player[p].ps->i].extra -= 8+(krand()&7); - g_player[p].ps->pals.f = 32; - g_player[p].ps->pals.r = 16; - g_player[p].ps->pals.g = 0; - g_player[p].ps->pals.b = 0; - } - break; - } - else sprite[j].cstat |= 32768; - } - - j = nextspritestat[j]; - } - } - } - break; - case 29: - s->hitag += 64; - l = mulscale12((int32_t)s->yvel,sintable[s->hitag&2047]); - sc->floorz = s->z + l; - break; - case 31: // True Drop Floor - if (t[0] == 1) - { - // Choose dir - - if (t[3] > 0) - { - t[3]--; - break; - } - - if (t[2] == 1) // Retract - { - if (SA != 1536) - { - if (klabs(sc->floorz - s->z) < SP) - { - sc->floorz = s->z; - t[2] = 0; - t[0] = 0; - t[3] = s->hitag; - A_CallSound(s->sectnum,i); - } - else - { - l = ksgn(s->z-sc->floorz)*SP; - sc->floorz += l; - - j = headspritesect[s->sectnum]; - while (j >= 0) - { - if (sprite[j].picnum == APLAYER && sprite[j].owner >= 0) - if (g_player[sprite[j].yvel].ps->on_ground == 1) - g_player[sprite[j].yvel].ps->pos.z += l; - if (sprite[j].zvel == 0 && sprite[j].statnum != STAT_EFFECTOR && sprite[j].statnum != STAT_PROJECTILE) - { - actor[j].bposz = sprite[j].z += l; - actor[j].floorz = sc->floorz; - } - j = nextspritesect[j]; - } - } - } - else - { - if (klabs(sc->floorz - t[1]) < SP) - { - sc->floorz = t[1]; - A_CallSound(s->sectnum,i); - t[2] = 0; - t[0] = 0; - t[3] = s->hitag; - } - else - { - l = ksgn(t[1]-sc->floorz)*SP; - sc->floorz += l; - - j = headspritesect[s->sectnum]; - while (j >= 0) - { - if (sprite[j].picnum == APLAYER && sprite[j].owner >= 0) - if (g_player[sprite[j].yvel].ps->on_ground == 1) - g_player[sprite[j].yvel].ps->pos.z += l; - if (sprite[j].zvel == 0 && sprite[j].statnum != STAT_EFFECTOR && sprite[j].statnum != STAT_PROJECTILE) - { - actor[j].bposz = sprite[j].z += l; - actor[j].floorz = sc->floorz; - } - j = nextspritesect[j]; - } - } - } - break; - } - - if ((s->ang&2047) == 1536) - { - if (klabs(s->z-sc->floorz) < SP) - { - A_CallSound(s->sectnum,i); - t[0] = 0; - t[2] = 1; - t[3] = s->hitag; - } - else - { - l = ksgn(s->z-sc->floorz)*SP; - sc->floorz += l; - - j = headspritesect[s->sectnum]; - while (j >= 0) - { - if (sprite[j].picnum == APLAYER && sprite[j].owner >= 0) - if (g_player[sprite[j].yvel].ps->on_ground == 1) - g_player[sprite[j].yvel].ps->pos.z += l; - if (sprite[j].zvel == 0 && sprite[j].statnum != STAT_EFFECTOR && sprite[j].statnum != STAT_PROJECTILE) - { - actor[j].bposz = sprite[j].z += l; - actor[j].floorz = sc->floorz; - } - j = nextspritesect[j]; - } - } - } - else - { - if (klabs(sc->floorz-t[1]) < SP) - { - t[0] = 0; - A_CallSound(s->sectnum,i); - t[2] = 1; - t[3] = s->hitag; - } - else - { - l = ksgn(s->z-t[1])*SP; - sc->floorz -= l; - - j = headspritesect[s->sectnum]; - while (j >= 0) - { - if (sprite[j].picnum == APLAYER && sprite[j].owner >= 0) - if (g_player[sprite[j].yvel].ps->on_ground == 1) - g_player[sprite[j].yvel].ps->pos.z -= l; - if (sprite[j].zvel == 0 && sprite[j].statnum != STAT_EFFECTOR && sprite[j].statnum != STAT_PROJECTILE) - { - actor[j].bposz = sprite[j].z -= l; - actor[j].floorz = sc->floorz; - } - j = nextspritesect[j]; - } - } - } - } - break; - - case 32: // True Drop Ceiling - if (t[0] == 1) - { - // Choose dir - - if (t[2] == 1) // Retract - { - if (SA != 1536) - { - if (klabs(sc->ceilingz - s->z) < - (SP<<1)) - { - sc->ceilingz = s->z; - A_CallSound(s->sectnum,i); - t[2] = 0; - t[0] = 0; - } - else sc->ceilingz += - ksgn(s->z-sc->ceilingz)*SP; - } - else - { - if (klabs(sc->ceilingz - t[1]) < - (SP<<1)) - { - sc->ceilingz = t[1]; - A_CallSound(s->sectnum,i); - t[2] = 0; - t[0] = 0; - } - else sc->ceilingz += - ksgn(t[1]-sc->ceilingz)*SP; - } - break; - } - - if ((s->ang&2047) == 1536) - { - if (klabs(sc->ceilingz-s->z) < - (SP<<1)) - { - t[0] = 0; - t[2] = !t[2]; - A_CallSound(s->sectnum,i); - sc->ceilingz = s->z; - } - else sc->ceilingz += - ksgn(s->z-sc->ceilingz)*SP; - } - else - { - if (klabs(sc->ceilingz-t[1]) < (SP<<1)) - { - t[0] = 0; - t[2] = !t[2]; - A_CallSound(s->sectnum,i); - } - else sc->ceilingz -= ksgn(s->z-t[1])*SP; - } - } - break; - - case 33: - if (g_earthquakeTime > 0 && (krand()&7) == 0) - RANDOMSCRAP; - break; - case 36: - - if (t[0]) - { - if (t[0] == 1) - A_Shoot(i,sc->extra); - else if (t[0] == GAMETICSPERSEC*5) - t[0] = 0; - t[0]++; - } - break; - - case 128: //SE to control glass breakage - - wal = &wall[t[2]]; - - if (wal->cstat|32) - { - wal->cstat &= (255-32); - wal->cstat |= 16; - if (wal->nextwall >= 0) - { - wall[wal->nextwall].cstat &= (255-32); - wall[wal->nextwall].cstat |= 16; - } - } - else break; - - wal->overpicnum++; - if (wal->nextwall >= 0) - wall[wal->nextwall].overpicnum++; - - if (t[0] < t[1]) t[0]++; - else - { - wal->cstat &= (128+32+8+4+2); - if (wal->nextwall >= 0) - wall[wal->nextwall].cstat &= (128+32+8+4+2); - KILLIT(i); - } - break; - - case 130: - if (t[0] > 80) - { - KILLIT(i); - } - else t[0]++; - - x = sc->floorz-sc->ceilingz; - - if (rnd(64)) - { - k = A_Spawn(i,EXPLOSION2); - sprite[k].xrepeat = sprite[k].yrepeat = 2+(krand()&7); - sprite[k].z = sc->floorz-(krand()%x); - sprite[k].ang += 256-(krand()%511); - sprite[k].xvel = krand()&127; - A_SetSprite(k,CLIPMASK0); - } - break; - case 131: - if (t[0] > 40) - { - KILLIT(i); - } - else t[0]++; - - x = sc->floorz-sc->ceilingz; - - if (rnd(32)) - { - k = A_Spawn(i,EXPLOSION2); - sprite[k].xrepeat = sprite[k].yrepeat = 2+(krand()&3); - sprite[k].z = sc->floorz-(krand()%x); - sprite[k].ang += 256-(krand()%511); - sprite[k].xvel = krand()&127; - A_SetSprite(k,CLIPMASK0); - } - break; -#ifdef POLYMER - case 49: - { - if (!A_CheckSpriteFlags(i, SPRITE_NOLIGHT) && getrendermode() == 4 && - !(A_CheckSpriteFlags(i, SPRITE_USEACTIVATOR) && sector[sprite[i].sectnum].lotag & 16384)) - { - if (actor[i].lightptr == NULL) - { -#pragma pack(push,1) - _prlight mylight; -#pragma pack(pop) - mylight.sector = SECT; - Bmemcpy(&mylight, &sprite[i], sizeof(int32_t) * 3); - mylight.range = SHT; - mylight.color[0] = sprite[i].xvel; - mylight.color[1] = sprite[i].yvel; - mylight.color[2] = sprite[i].zvel; - mylight.radius = 0; - mylight.angle = SA; - mylight.horiz = SH; - mylight.minshade = sprite[i].xoffset; - mylight.maxshade = sprite[i].yoffset; - mylight.tilenum = 0; - - if (CS & 2) - { - if (CS & 512) - mylight.priority = PR_LIGHT_PRIO_LOW; - else - mylight.priority = PR_LIGHT_PRIO_HIGH; - } - else - mylight.priority = PR_LIGHT_PRIO_MAX; - - actor[i].lightId = polymer_addlight(&mylight); - if (actor[i].lightId >= 0) - actor[i].lightptr = &prlights[actor[i].lightId]; - break; - } - - if (Bmemcmp(&sprite[i], actor[i].lightptr, sizeof(int32_t) * 3)) - { - Bmemcpy(actor[i].lightptr, &sprite[i], sizeof(int32_t) * 3); - actor[i].lightptr->sector = sprite[i].sectnum; - actor[i].lightptr->flags.invalidate = 1; - } - if (SHT != actor[i].lightptr->range) - { - actor[i].lightptr->range = SHT; - actor[i].lightptr->flags.invalidate = 1; - } - if ((sprite[i].xvel != actor[i].lightptr->color[0]) || - (sprite[i].yvel != actor[i].lightptr->color[1]) || - (sprite[i].zvel != actor[i].lightptr->color[2])) - { - actor[i].lightptr->color[0] = sprite[i].xvel; - actor[i].lightptr->color[1] = sprite[i].yvel; - actor[i].lightptr->color[2] = sprite[i].zvel; - } - } - break; - } - case 50: - { - if (!A_CheckSpriteFlags(i, SPRITE_NOLIGHT) && getrendermode() == 4 && - !(A_CheckSpriteFlags(i, SPRITE_USEACTIVATOR) && sector[sprite[i].sectnum].lotag & 16384)) - { - if (actor[i].lightptr == NULL) - { -#pragma pack(push,1) - _prlight mylight; -#pragma pack(pop) - - mylight.sector = SECT; - Bmemcpy(&mylight, &sprite[i], sizeof(int32_t) * 3); - mylight.range = SHT; - mylight.color[0] = sprite[i].xvel; - mylight.color[1] = sprite[i].yvel; - mylight.color[2] = sprite[i].zvel; - mylight.radius = (256-(SS+128))<<1; - mylight.faderadius = (int16_t)(mylight.radius * 0.75f); - mylight.angle = SA; - mylight.horiz = SH; - mylight.minshade = sprite[i].xoffset; - mylight.maxshade = sprite[i].yoffset; - mylight.tilenum = actor[i].picnum; - - if (CS & 2) - { - if (CS & 512) - mylight.priority = PR_LIGHT_PRIO_LOW; - else - mylight.priority = PR_LIGHT_PRIO_HIGH; - } - else - mylight.priority = PR_LIGHT_PRIO_MAX; - - actor[i].lightId = polymer_addlight(&mylight); - if (actor[i].lightId >= 0) - actor[i].lightptr = &prlights[actor[i].lightId]; - break; - } - - if (Bmemcmp(&sprite[i], actor[i].lightptr, sizeof(int32_t) * 3)) - { - Bmemcpy(actor[i].lightptr, &sprite[i], sizeof(int32_t) * 3); - actor[i].lightptr->sector = sprite[i].sectnum; - actor[i].lightptr->flags.invalidate = 1; - } - if (SHT != actor[i].lightptr->range) - { - actor[i].lightptr->range = SHT; - actor[i].lightptr->flags.invalidate = 1; - } - if ((sprite[i].xvel != actor[i].lightptr->color[0]) || - (sprite[i].yvel != actor[i].lightptr->color[1]) || - (sprite[i].zvel != actor[i].lightptr->color[2])) - { - actor[i].lightptr->color[0] = sprite[i].xvel; - actor[i].lightptr->color[1] = sprite[i].yvel; - actor[i].lightptr->color[2] = sprite[i].zvel; - } - if (((256-(SS+128))<<1) != actor[i].lightptr->radius) - { - actor[i].lightptr->radius = (256-(SS+128))<<1; - actor[i].lightptr->faderadius = (int16_t)(actor[i].lightptr->radius * 0.75f); - actor[i].lightptr->flags.invalidate = 1; - } - if (SA != actor[i].lightptr->angle) - { - actor[i].lightptr->angle = SA; - actor[i].lightptr->flags.invalidate = 1; - } - if (SH != actor[i].lightptr->horiz) - { - actor[i].lightptr->horiz = SH; - actor[i].lightptr->flags.invalidate = 1; - } - actor[i].lightptr->tilenum = actor[i].picnum; - } - - break; - } -#endif // POLYMER - - } -BOLT: - i = nexti; - } - - //Sloped sin-wave floors! - for (i=headspritestat[STAT_EFFECTOR]; i>=0; i=nextspritestat[i]) - { - s = &sprite[i]; - if (s->lotag != 29) continue; - sc = §or[s->sectnum]; - if (sc->wallnum != 4) continue; - wal = &wall[sc->wallptr+2]; - alignflorslope(s->sectnum,wal->x,wal->y,sector[wal->nextsector].floorz); - } -} - -void A_PlayAlertSound(int32_t i) -{ - if (sprite[i].extra > 0) - switch (DynamicTileMap[PN]) - { - case LIZTROOPONTOILET__STATIC: - case LIZTROOPJUSTSIT__STATIC: - case LIZTROOPSHOOT__STATIC: - case LIZTROOPJETPACK__STATIC: - case LIZTROOPDUCKING__STATIC: - case LIZTROOPRUNNING__STATIC: - case LIZTROOP__STATIC: - A_PlaySound(PRED_RECOG,i); - break; - case LIZMAN__STATIC: - case LIZMANSPITTING__STATIC: - case LIZMANFEEDING__STATIC: - case LIZMANJUMP__STATIC: - A_PlaySound(CAPT_RECOG,i); - break; - case PIGCOP__STATIC: - case PIGCOPDIVE__STATIC: - A_PlaySound(PIG_RECOG,i); - break; - case RECON__STATIC: - A_PlaySound(RECO_RECOG,i); - break; - case DRONE__STATIC: - A_PlaySound(DRON_RECOG,i); - break; - case COMMANDER__STATIC: - case COMMANDERSTAYPUT__STATIC: - A_PlaySound(COMM_RECOG,i); - break; - case ORGANTIC__STATIC: - A_PlaySound(TURR_RECOG,i); - break; - case OCTABRAIN__STATIC: - case OCTABRAINSTAYPUT__STATIC: - A_PlaySound(OCTA_RECOG,i); - break; - case BOSS1__STATIC: - S_PlaySound(BOS1_RECOG); - break; - case BOSS2__STATIC: - if (sprite[i].pal == 1) - S_PlaySound(BOS2_RECOG); - else S_PlaySound(WHIPYOURASS); - break; - case BOSS3__STATIC: - if (sprite[i].pal == 1) - S_PlaySound(BOS3_RECOG); - else S_PlaySound(RIPHEADNECK); - break; - case BOSS4__STATIC: - case BOSS4STAYPUT__STATIC: - if (sprite[i].pal == 1) - S_PlaySound(BOS4_RECOG); - S_PlaySound(BOSS4_FIRSTSEE); - break; - case GREENSLIME__STATIC: - A_PlaySound(SLIM_RECOG,i); - break; - } -} - -int32_t A_CheckEnemyTile(int32_t pn) -{ - //this case can't be handled by the dynamictostatic system because it adds - //stuff to the value from names.h so handling separately - if ((pn >= GREENSLIME) && (pn <= GREENSLIME+7)) return 1; - - if (A_CheckSpriteTileFlags(pn,SPRITE_BADGUY)) return 1; - - if (ActorType[pn]) return 1; - - switch (DynamicTileMap[pn]) - { - case SHARK__STATIC: - case RECON__STATIC: - case DRONE__STATIC: - case LIZTROOPONTOILET__STATIC: - case LIZTROOPJUSTSIT__STATIC: - case LIZTROOPSTAYPUT__STATIC: - case LIZTROOPSHOOT__STATIC: - case LIZTROOPJETPACK__STATIC: - case LIZTROOPDUCKING__STATIC: - case LIZTROOPRUNNING__STATIC: - case LIZTROOP__STATIC: - case OCTABRAIN__STATIC: - case COMMANDER__STATIC: - case COMMANDERSTAYPUT__STATIC: - case PIGCOP__STATIC: - case EGG__STATIC: - case PIGCOPSTAYPUT__STATIC: - case PIGCOPDIVE__STATIC: - case LIZMAN__STATIC: - case LIZMANSPITTING__STATIC: - case LIZMANFEEDING__STATIC: - case LIZMANJUMP__STATIC: - case ORGANTIC__STATIC: - case BOSS1__STATIC: - case BOSS2__STATIC: - case BOSS3__STATIC: - case BOSS4__STATIC: - //case GREENSLIME: - //case GREENSLIME+1: - //case GREENSLIME+2: - //case GREENSLIME+3: - //case GREENSLIME+4: - //case GREENSLIME+5: - //case GREENSLIME+6: - //case GREENSLIME+7: - case RAT__STATIC: - case ROTATEGUN__STATIC: - return 1; - } - return 0; -} - -inline int32_t A_CheckEnemySprite(spritetype *s) -{ - return(A_CheckEnemyTile(s->picnum)); -} - -int32_t A_CheckSwitchTile(int32_t i) -{ - int32_t j; - //MULTISWITCH has 4 states so deal with it separately - if ((PN >= MULTISWITCH) && (PN <=MULTISWITCH+3)) return 1; - // ACCESSSWITCH and ACCESSSWITCH2 are only active in 1 state so deal with them separately - if ((PN == ACCESSSWITCH) || (PN == ACCESSSWITCH2)) return 1; - //loop to catch both states of switches - for (j=1; j>=0; j--) - { - switch (DynamicTileMap[PN-j]) - { - case HANDPRINTSWITCH__STATIC: - //case HANDPRINTSWITCH+1: - case ALIENSWITCH__STATIC: - //case ALIENSWITCH+1: - case MULTISWITCH__STATIC: - //case MULTISWITCH+1: - //case MULTISWITCH+2: - //case MULTISWITCH+3: - //case ACCESSSWITCH: - //case ACCESSSWITCH2: - case PULLSWITCH__STATIC: - //case PULLSWITCH+1: - case HANDSWITCH__STATIC: - //case HANDSWITCH+1: - case SLOTDOOR__STATIC: - //case SLOTDOOR+1: - case LIGHTSWITCH__STATIC: - //case LIGHTSWITCH+1: - case SPACELIGHTSWITCH__STATIC: - //case SPACELIGHTSWITCH+1: - case SPACEDOORSWITCH__STATIC: - //case SPACEDOORSWITCH+1: - case FRANKENSTINESWITCH__STATIC: - //case FRANKENSTINESWITCH+1: - case LIGHTSWITCH2__STATIC: - //case LIGHTSWITCH2+1: - case POWERSWITCH1__STATIC: - //case POWERSWITCH1+1: - case LOCKSWITCH1__STATIC: - //case LOCKSWITCH1+1: - case POWERSWITCH2__STATIC: - //case POWERSWITCH2+1: - case DIPSWITCH__STATIC: - //case DIPSWITCH+1: - case DIPSWITCH2__STATIC: - //case DIPSWITCH2+1: - case TECHSWITCH__STATIC: - //case TECHSWITCH+1: - case DIPSWITCH3__STATIC: - //case DIPSWITCH3+1: - return 1; - } - } - return 0; -} - -void G_MoveWorld(void) -{ - G_MoveZombieActors(); //ST 2 - G_MoveWeapons(); //ST 4 - G_MoveTransports(); //ST 9 - - G_MovePlayers(); //ST 10 - G_MoveFallers(); //ST 12 - G_MoveMisc(); //ST 5 - - G_MoveActors(); //ST 1 - G_MoveEffectors(); //ST 3 - - G_MoveStandables(); //ST 6 - - { - int32_t i, p, j, k = MAXSTATUS-1, pl; - - do - { - i = headspritestat[k]; - - while (i >= 0) - { -#ifdef POLYMER - if (getrendermode() == 4) - { - spritetype *s = &sprite[i]; - - if ((sprite[i].picnum != SECTOREFFECTOR && (s->cstat & 32768)) || A_CheckSpriteFlags(i, SPRITE_NOLIGHT) || - (A_CheckSpriteFlags(i, SPRITE_USEACTIVATOR) && sector[sprite[i].sectnum].lotag & 16384)) - { - if (actor[i].lightptr != NULL) - { - polymer_deletelight(actor[i].lightId); - actor[i].lightId = -1; - actor[i].lightptr = NULL; - } - } - else - { - - if (actor[i].lightptr != NULL && actor[i].lightcount) - { - if (!(--actor[i].lightcount)) - { - polymer_deletelight(actor[i].lightId); - actor[i].lightId = -1; - actor[i].lightptr = NULL; - } - } - - switch (DynamicTileMap[sprite[i].picnum-1]) - { - case DIPSWITCH__STATIC: - case DIPSWITCH2__STATIC: - case DIPSWITCH3__STATIC: - case PULLSWITCH__STATIC: - case SLOTDOOR__STATIC: - case LIGHTSWITCH__STATIC: - case SPACELIGHTSWITCH__STATIC: - case SPACEDOORSWITCH__STATIC: - case FRANKENSTINESWITCH__STATIC: - case POWERSWITCH1__STATIC: - case LOCKSWITCH1__STATIC: - case POWERSWITCH2__STATIC: - case TECHSWITCH__STATIC: - case ACCESSSWITCH__STATIC: - case ACCESSSWITCH2__STATIC: - { - int32_t x, y; - - if ((s->cstat & 32768) || A_CheckSpriteFlags(i, SPRITE_NOLIGHT) || - !inside(s->x+((sintable[(s->ang+512)&2047])>>9), s->y+((sintable[(s->ang)&2047])>>9), s->sectnum)) - { - if (actor[i].lightptr != NULL) - { - polymer_deletelight(actor[i].lightId); - actor[i].lightId = -1; - actor[i].lightptr = NULL; - } - break; - } - - x = ((sintable[(s->ang+512)&2047])>>7); - y = ((sintable[(s->ang)&2047])>>7); - - s->x += x; - s->y += y; - - G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), 1024, 48+(255<<8)+(48<<16),PR_LIGHT_PRIO_LOW); - s->x -= x; - s->y -= y; - } - break; - } - - switch (DynamicTileMap[sprite[i].picnum]) - { - case DIPSWITCH__STATIC: - case DIPSWITCH2__STATIC: - case DIPSWITCH3__STATIC: - case PULLSWITCH__STATIC: - case SLOTDOOR__STATIC: - case LIGHTSWITCH__STATIC: - case SPACELIGHTSWITCH__STATIC: - case SPACEDOORSWITCH__STATIC: - case FRANKENSTINESWITCH__STATIC: - case POWERSWITCH1__STATIC: - case LOCKSWITCH1__STATIC: - case POWERSWITCH2__STATIC: - case TECHSWITCH__STATIC: - case ACCESSSWITCH__STATIC: - case ACCESSSWITCH2__STATIC: - { - int32_t x, y; - - if ((s->cstat & 32768) || A_CheckSpriteFlags(i, SPRITE_NOLIGHT) || - !inside(s->x+((sintable[(s->ang+512)&2047])>>9), s->y+((sintable[(s->ang)&2047])>>9), s->sectnum)) - { - if (actor[i].lightptr != NULL) - { - polymer_deletelight(actor[i].lightId); - actor[i].lightId = -1; - actor[i].lightptr = NULL; - } - break; - } - - x = ((sintable[(s->ang+512)&2047])>>7); - y = ((sintable[(s->ang)&2047])>>7); - - s->x += x; - s->y += y; - - G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), 768, 255+(48<<8)+(48<<16),PR_LIGHT_PRIO_LOW); - s->x -= x; - s->y -= y; - } - break; - - case ATOMICHEALTH__STATIC: - G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), LIGHTRAD2 * 3, 128+(128<<8)+(255<<16),PR_LIGHT_PRIO_HIGH_GAME); - break; - - case FIRE__STATIC: - case FIRE2__STATIC: - case BURNING__STATIC: - case BURNING2__STATIC: - { - uint32_t color; - /* - if (Actor[i].floorz - Actor[i].ceilingz < 128) break; - if (s->z > Actor[i].floorz+2048) break; - */ - - switch (s->pal) - { - case 1: color = 128+(128<<8)+(255<<16); break; - case 2: color = 255+(48<<8)+(48<<16); break; - case 8: color = 48+(255<<8)+(48<<16); break; - default: color = 255+(95<<8); break; - } - - G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), LIGHTRAD2, color, PR_LIGHT_PRIO_HIGH_GAME); - } - break; - - case OOZFILTER__STATIC: - if (s->xrepeat > 4) - G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), 4096, 128+(255<<8)+(128<<16),PR_LIGHT_PRIO_HIGH_GAME); - break; - case FLOORFLAME__STATIC: - case FIREBARREL__STATIC: - case FIREVASE__STATIC: - G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), LIGHTRAD, 255+(95<<8),PR_LIGHT_PRIO_HIGH_GAME); - break; - - case EXPLOSION2__STATIC: - if (!actor[i].lightcount) - { - int32_t x = ((sintable[(s->ang+512)&2047])>>6); - int32_t y = ((sintable[(s->ang)&2047])>>6); - - s->x -= x; - s->y -= y; - - G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), LIGHTRAD, 255+(95<<8), - s->yrepeat > 32 ? PR_LIGHT_PRIO_HIGH_GAME : PR_LIGHT_PRIO_LOW_GAME); - - s->x += x; - s->y += y; - } - break; - case FORCERIPPLE__STATIC: - case TRANSPORTERBEAM__STATIC: - G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), LIGHTRAD, 80+(80<<8)+(255<<16),PR_LIGHT_PRIO_LOW_GAME); - break; - case GROWSPARK__STATIC: - { - int32_t x = ((sintable[(s->ang+512)&2047])>>6); - int32_t y = ((sintable[(s->ang)&2047])>>6); - - s->x -= x; - s->y -= y; - - G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), 2048, 255+(95<<8),PR_LIGHT_PRIO_HIGH_GAME); - - s->x += x; - s->y += y; - } - break; - case SHRINKEREXPLOSION__STATIC: - { - int32_t x = ((sintable[(s->ang+512)&2047])>>6); - int32_t y = ((sintable[(s->ang)&2047])>>6); - - s->x -= x; - s->y -= y; - - G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), 2048, 128+(255<<8)+(128<<16),PR_LIGHT_PRIO_HIGH_GAME); - - s->x += x; - s->y += y; - } - break; - case FREEZEBLAST__STATIC: - G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), LIGHTRAD<<2, 128+(128<<8)+(255<<16),PR_LIGHT_PRIO_HIGH_GAME); - break; - case COOLEXPLOSION1__STATIC: - G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), LIGHTRAD<<2, 128+(0<<8)+(255<<16),PR_LIGHT_PRIO_HIGH_GAME); - break; - case SHRINKSPARK__STATIC: - G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), LIGHTRAD, 128+(255<<8)+(128<<16),PR_LIGHT_PRIO_HIGH_GAME); - break; - case FIRELASER__STATIC: - G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), 64 * s->yrepeat, 255+(95<<8),PR_LIGHT_PRIO_LOW_GAME); - break; - case RPG__STATIC: - G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), 128 * s->yrepeat, 255+(95<<8),PR_LIGHT_PRIO_LOW_GAME); - break; - case SHOTSPARK1__STATIC: - if (actor[i].t_data[2] == 0) // check for first frame of action - { - int32_t x = ((sintable[(s->ang+512)&2047])>>7); - int32_t y = ((sintable[(s->ang)&2047])>>7); - - s->x -= x; - s->y -= y; - - G_AddGameLight(0, i, ((s->yrepeat*tilesizy[s->picnum])<<1), 16 * s->yrepeat, 255+(95<<8),PR_LIGHT_PRIO_LOW_GAME); - actor[i].lightcount = 1; - - s->x += x; - s->y += y; - } - break; - } - } - } -#endif - if (!apScriptGameEvent[EVENT_GAME] || A_CheckSpriteFlags(i, SPRITE_NOEVENTCODE)) - { - i = nextspritestat[i]; - continue; - } - - j = nextspritestat[i]; - - pl = A_FindPlayer(&sprite[i],&p); - VM_OnEvent(EVENT_GAME,i, pl, p); - i = j; - } - } - while (k--); - } - - G_DoSectorAnimations(); - G_MoveFX(); //ST 11 -} - diff --git a/polymer-perf/eduke32/source/actors.h b/polymer-perf/eduke32/source/actors.h deleted file mode 100644 index 2185067fd..000000000 --- a/polymer-perf/eduke32/source/actors.h +++ /dev/null @@ -1,202 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#ifndef __actors_h__ -#define __actors_h__ - -#define MAXSLEEPDIST 16384 -#define SLEEPTIME 1536 -#define ZOFFSET (1<<8) - -#define STAT_DEFAULT 0 -#define STAT_ACTOR 1 -#define STAT_ZOMBIEACTOR 2 -#define STAT_EFFECTOR 3 -#define STAT_PROJECTILE 4 -#define STAT_MISC 5 -#define STAT_STANDABLE 6 -#define STAT_LOCATOR 7 -#define STAT_ACTIVATOR 8 -#define STAT_TRANSPORT 9 -#define STAT_PLAYER 10 -#define STAT_FX 11 -#define STAT_FALLER 12 -#define STAT_DUMMYPLAYER 13 - -// Defines the motion characteristics of an actor -enum amoveflags_t { - face_player = 1, - geth = 2, - getv = 4, - random_angle = 8, - face_player_slow = 16, - spin = 32, - face_player_smart = 64, - fleeenemy = 128, - jumptoplayer = 257, - seekplayer = 512, - furthestdir = 1024, - dodgebullet = 4096 -}; - -// Defines for 'useractor' keyword -enum uactortypes_t { - notenemy, - enemy, - enemystayput -}; - -#pragma pack(push,1) -typedef struct { - int32_t workslike, cstat; // 8b - int32_t hitradius, range, flashcolor; // 12b - int16_t spawns, sound, isound, vel; // 8b - int16_t decal, trail, tnum, drop; // 8b - int16_t offset, bounces, bsound; // 6b - int16_t toffset; // 2b - int16_t extra, extra_rand; // 4b - int8_t sxrepeat, syrepeat, txrepeat, tyrepeat; // 4b - int8_t shade, xrepeat, yrepeat, pal; // 4b - int8_t velmult; // 1b - uint8_t clipdist; // 1b - int8_t filler[6]; // 6b -} projectile_t; - -typedef struct { - intptr_t t_data[10]; // 40b/80b sometimes used to hold pointers to con code - - int16_t picnum,ang,extra,owner; //8b - int16_t movflag,tempang,timetosleep; //6b - - int32_t flags, bposx,bposy,bposz; //16b - int32_t floorz,ceilingz,lastvx,lastvy; //16b - int32_t lasttransport; //4b - - int16_t lightId, lightcount, lightmaxrange, cgg; //8b - int16_t actorstayput, dispicnum, shootzvel; // 6b - -#ifdef POLYMER - _prlight *lightptr; //4b/8b -#else - void *lightptr; -#endif - - projectile_t *projectile; //4b/8b - - int8_t filler[16]; // pad struct to 128 bytes -} actor_t; - -// this struct needs to match the beginning of actor_t above -typedef struct { - intptr_t t_data[10]; // 40b/80b sometimes used to hold pointers to con code - - int16_t picnum,ang,extra,owner; //8b - int16_t movflag,tempang,timetosleep; // 6b - - int32_t flags; // 4b -} netactor_t; -#pragma pack(pop) - -enum sflags_t { - SPRITE_SHADOW = 0x00000001, - SPRITE_NVG = 0x00000002, - SPRITE_NOSHADE = 0x00000004, - SPRITE_PROJECTILE = 0x00000008, - SPRITE_DECAL = 0x00000010, - SPRITE_BADGUY = 0x00000020, - SPRITE_NOPAL = 0x00000040, - SPRITE_NOEVENTCODE = 0x00000080, - SPRITE_NOLIGHT = 0x00000100, - SPRITE_USEACTIVATOR = 0x00000200, - SPRITE_NULL = 0x00000400, // null sprite in multiplayer -}; - -// custom projectiles -enum pflags_t { - PROJECTILE_HITSCAN = 0x00000001, - PROJECTILE_RPG = 0x00000002, - PROJECTILE_BOUNCESOFFWALLS = 0x00000004, - PROJECTILE_BOUNCESOFFMIRRORS = 0x00000008, - PROJECTILE_KNEE = 0x00000010, - PROJECTILE_WATERBUBBLES = 0x00000020, - PROJECTILE_TIMED = 0x00000040, - PROJECTILE_BOUNCESOFFSPRITES = 0x00000080, - PROJECTILE_SPIT = 0x00000100, - PROJECTILE_COOLEXPLOSION1 = 0x00000200, - PROJECTILE_BLOOD = 0x00000400, - PROJECTILE_LOSESVELOCITY = 0x00000800, - PROJECTILE_NOAIM = 0x00001000, - PROJECTILE_RANDDECALSIZE = 0x00002000, - PROJECTILE_EXPLODEONTIMER = 0x00004000, - PROJECTILE_RPG_IMPACT = 0x00008000, - PROJECTILE_RADIUS_PICNUM = 0x00010000, - PROJECTILE_ACCURATE_AUTOAIM = 0x00020000, - PROJECTILE_FORCEIMPACT = 0x00040000, - PROJECTILE_REALCLIPDIST = 0x00080000, - PROJECTILE_ACCURATE = 0x00100000, -}; - -extern actor_t actor[MAXSPRITES]; -extern char ActorType[MAXTILES]; -extern int16_t SpriteCacheList[MAXTILES][3]; -extern int32_t SpriteFlags[MAXTILES]; -extern int32_t block_deletesprite; -extern int32_t g_noEnemies; -extern int32_t otherp; -extern int32_t ticrandomseed; -extern intptr_t *actorLoadEventScrptr[MAXTILES]; -extern intptr_t *actorscrptr[MAXTILES]; -extern intptr_t *g_parsingActorPtr; -extern projectile_t DefaultProjectileData[MAXTILES]; -extern projectile_t ProjectileData[MAXTILES]; -extern projectile_t SpriteProjectile[MAXSPRITES]; - -void A_AddToDeleteQueue(int32_t i); -int32_t A_CheckEnemySprite(spritetype *s); -int32_t A_CheckEnemyTile(int32_t pn); -int32_t A_CheckSwitchTile(int32_t i); -void A_DeleteSprite(int32_t s); -void A_DoGuts(int32_t sp,int32_t gtype,int32_t n); -void A_DoGutsDir(int32_t sp,int32_t gtype,int32_t n); -int32_t A_IncurDamage(int32_t sn); -void A_MoveCyclers(void); -void A_MoveDummyPlayers(void); -int32_t A_MoveSprite(int32_t spritenum,const vec3_t *change,uint32_t cliptype); -void A_PlayAlertSound(int32_t i); -void A_RadiusDamage(int32_t i,int32_t r,int32_t hp1,int32_t hp2,int32_t hp3,int32_t hp4); -int32_t A_SetSprite(int32_t i,uint32_t cliptype); -void A_SpawnMultiple(int32_t sp,int32_t pic,int32_t n); - -void G_AddGameLight(int32_t radius,int32_t srcsprite,int32_t zoffset,int32_t range,int32_t color,int32_t priority); -int32_t G_CheckForSpaceCeiling(int32_t sectnum); -int32_t G_CheckForSpaceFloor(int32_t sectnum); -void G_DoInterpolations(int32_t smoothratio); -void G_MoveWorld(void); -extern inline void G_RestoreInterpolations(void); -void G_SetInterpolation(int32_t *posptr); -void G_StopInterpolation(int32_t *posptr); -extern inline void G_UpdateInterpolations(void); - -void Sect_ClearInterpolation(int32_t i); -void Sect_SetInterpolation(int32_t i); - -#endif diff --git a/polymer-perf/eduke32/source/anim.c b/polymer-perf/eduke32/source/anim.c deleted file mode 100644 index 71824e6ad..000000000 --- a/polymer-perf/eduke32/source/anim.c +++ /dev/null @@ -1,312 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#include "duke3d.h" -#include "animlib.h" -#include "mouse.h" -#include "compat.h" - -void endanimsounds(int32_t fr) -{ - switch (ud.volume_number) - { - case 0: - break; - case 1: - switch (fr) - { - case 1: - S_PlaySound(WIND_AMBIENCE); - break; - case 26: - S_PlaySound(ENDSEQVOL2SND1); - break; - case 36: - S_PlaySound(ENDSEQVOL2SND2); - break; - case 54: - S_PlaySound(THUD); - break; - case 62: - S_PlaySound(ENDSEQVOL2SND3); - break; - case 75: - S_PlaySound(ENDSEQVOL2SND4); - break; - case 81: - S_PlaySound(ENDSEQVOL2SND5); - break; - case 115: - S_PlaySound(ENDSEQVOL2SND6); - break; - case 124: - S_PlaySound(ENDSEQVOL2SND7); - break; - } - break; - case 2: - switch (fr) - { - case 1: - S_PlaySound(WIND_REPEAT); - break; - case 98: - S_PlaySound(DUKE_GRUNT); - break; - case 82+20: - S_PlaySound(THUD); - S_PlaySound(SQUISHED); - break; - case 104+20: - S_PlaySound(ENDSEQVOL3SND3); - break; - case 114+20: - S_PlaySound(ENDSEQVOL3SND2); - break; - case 158: - S_PlaySound(PIPEBOMB_EXPLODE); - break; - } - break; - } -} - -void logoanimsounds(int32_t fr) -{ - switch (fr) - { - case 1: - S_PlaySound(FLY_BY); - break; - case 19: - S_PlaySound(PIPEBOMB_EXPLODE); - break; - } -} - -void intro4animsounds(int32_t fr) -{ - switch (fr) - { - case 1: - S_PlaySound(INTRO4_B); - break; - case 12: - case 34: - S_PlaySound(SHORT_CIRCUIT); - break; - case 18: - S_PlaySound(INTRO4_5); - break; - } -} - -void first4animsounds(int32_t fr) -{ - switch (fr) - { - case 1: - S_PlaySound(INTRO4_1); - break; - case 12: - S_PlaySound(INTRO4_2); - break; - case 7: - S_PlaySound(INTRO4_3); - break; - case 26: - S_PlaySound(INTRO4_4); - break; - } -} - -void intro42animsounds(int32_t fr) -{ - switch (fr) - { - case 10: - S_PlaySound(INTRO4_6); - break; - } -} - -void endanimvol41(int32_t fr) -{ - switch (fr) - { - case 3: - S_PlaySound(DUKE_UNDERWATER); - break; - case 35: - S_PlaySound(VOL4ENDSND1); - break; - } -} - -void endanimvol42(int32_t fr) -{ - switch (fr) - { - case 11: - S_PlaySound(DUKE_UNDERWATER); - break; - case 20: - S_PlaySound(VOL4ENDSND1); - break; - case 39: - S_PlaySound(VOL4ENDSND2); - break; - case 50: - FX_StopAllSounds(); - break; - } -} - -void endanimvol43(int32_t fr) -{ - switch (fr) - { - case 1: - S_PlaySound(BOSS4_DEADSPEECH); - break; - case 40: - S_PlaySound(VOL4ENDSND1); - S_PlaySound(DUKE_UNDERWATER); - break; - case 50: - S_PlaySound(BIGBANG); - break; - } -} - -void G_PlayAnim(const char *fn,char t) -{ - char *animbuf; - int32_t i, length=0, numframes=0; -#ifdef USE_OPENGL - int32_t ogltexfiltermode=gltexfiltermode; -#endif - int32_t handle=-1; - int32_t frametime = 0; - - // return; - - if (t != 7 && t != 9 && t != 10 && t != 11) - KB_FlushKeyboardQueue(); - - if (KB_KeyWaiting()) - { - FX_StopAllSounds(); - goto ENDOFANIMLOOP; - } - - handle = kopen4load((char *)fn,0); - if (handle == -1) return; - length = kfilelength(handle); - - walock[TILE_ANIM] = 219+t; - - allocache((intptr_t *)&animbuf,length+1,&walock[TILE_ANIM]); - - tilesizx[TILE_ANIM] = 200; - tilesizy[TILE_ANIM] = 320; - - kread(handle,animbuf,length); - kclose(handle); - - ANIM_LoadAnim(animbuf); - numframes = ANIM_NumFrames(); - anim_pal = ANIM_GetPalette(); - - basepaltable[ANIMPAL] = anim_pal; - - //setpalette(0L,256L,tempbuf); - //setbrightness(ud.brightness>>2,tempbuf,2); - P_SetGamePalette(g_player[myconnectindex].ps,ANIMPAL,10); - -#ifdef USE_OPENGL - gltexfiltermode = 0; - gltexapplyprops(); -#endif - - ototalclock = totalclock + 10; - - for (i=1; i 4 && totalclock > frametime + 60) - { - OSD_Printf("WARNING: slowdown in %s, skipping playback\n",fn); - goto ENDOFANIMLOOP; - } - - frametime = totalclock; - - waloff[TILE_ANIM] = (intptr_t)ANIM_DrawFrame(i); - invalidatetile(TILE_ANIM, 0, 1<<4); // JBF 20031228 - - while (totalclock < ototalclock) - { - handleevents(); - Net_GetPackets(); - - if (KB_KeyWaiting() || MOUSE_GetButtons()&LEFT_MOUSE) - goto ENDOFANIMLOOP; - - if (g_restorePalette == 1) - { - P_SetGamePalette(g_player[myconnectindex].ps,ANIMPAL,0); - g_restorePalette = 0; - } - - rotatesprite(0<<16,0<<16,65536L,512,TILE_ANIM,0,0,2+4+8+16+64+(ud.bgstretch?1024:0), 0,0,xdim-1,ydim-1); - nextpage(); - } - - if (t == 10) ototalclock += 14; - else if (t == 9) ototalclock += 10; - else if (t == 7) ototalclock += 18; - else if (t == 6) ototalclock += 14; - else if (t == 5) ototalclock += 9; - else if (ud.volume_number == 3) ototalclock += 10; - else if (ud.volume_number == 2) ototalclock += 10; - else if (ud.volume_number == 1) ototalclock += 18; - else ototalclock += 10; - - if (t == 8) endanimvol41(i); - else if (t == 10) endanimvol42(i); - else if (t == 11) endanimvol43(i); - else if (t == 9) intro42animsounds(i); - else if (t == 7) intro4animsounds(i); - else if (t == 6) first4animsounds(i); - else if (t == 5) logoanimsounds(i); - else if (t < 4) endanimsounds(i); - } - -ENDOFANIMLOOP: -#ifdef USE_OPENGL - gltexfiltermode = ogltexfiltermode; - gltexapplyprops(); -#endif - MOUSE_ClearButton(LEFT_MOUSE); - ANIM_FreeAnim(); - walock[TILE_ANIM] = 1; -} diff --git a/polymer-perf/eduke32/source/anim.h b/polymer-perf/eduke32/source/anim.h deleted file mode 100644 index 6e68be0e9..000000000 --- a/polymer-perf/eduke32/source/anim.h +++ /dev/null @@ -1,35 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#ifndef __anim_h__ -#define __anim_h__ - -void G_PlayAnim(const char *fn,char t); -void endanimvol43(int32_t fr); -void endanimvol42(int32_t fr); -void endanimvol41(int32_t fr); -void intro42animsounds(int32_t fr); -void first4animsounds(int32_t fr); -void intro4animsounds(int32_t fr); -void logoanimsounds(int32_t fr); -void endanimsounds(int32_t fr); -#endif diff --git a/polymer-perf/eduke32/source/astub.c b/polymer-perf/eduke32/source/astub.c deleted file mode 100644 index 5eeff82d1..000000000 --- a/polymer-perf/eduke32/source/astub.c +++ /dev/null @@ -1,11497 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#include "compat.h" -#include "build.h" -#include "editor.h" -#include "pragmas.h" -#include "baselayer.h" -#include "names.h" -#include "osd.h" -#include "osdfuncs.h" -#include "cache1d.h" - -#include "mapster32.h" -#include "keys.h" - -#include "keyboard.h" -#include "scriptfile.h" -#include "crc32.h" - -#include "sounds_mapster32.h" -#include "fx_man.h" - -#include "macros.h" -#include "quicklz.h" - -#include "m32script.h" -#include "m32def.h" - -#include "rev.h" - -#ifdef _WIN32 -#define WIN32_LEAN_AND_MEAN -#include -#include -#endif - -#include - -static int32_t floor_over_floor; - -// static char *startwin_labeltext = "Starting Mapster32..."; -static char setupfilename[]= "mapster32.cfg"; -static char defaultduke3dgrp[BMAX_PATH] = "duke3d.grp"; -static char *g_grpNamePtr = defaultduke3dgrp; -static int32_t fixmapbeforesaving = 0; -static int32_t lastsave = -180*60; -static int32_t NoAutoLoad = 0; -static int32_t spnoclip=1; - -static char default_tiles_cfg[] = "tiles.cfg"; -static int32_t pathsearchmode_oninit; - -// Sound in Mapster32 -static char defaultgamecon[] = "game.con"; -static char *gamecon = defaultgamecon; - -#pragma pack(push,1) -sound_t g_sounds[MAXSOUNDS]; -#pragma pack(pop) - -static int16_t g_definedsndnum[MAXSOUNDS]; // maps parse order index to g_sounds index -static int16_t g_sndnum[MAXSOUNDS]; // maps current order index to g_sounds index -int32_t g_numsounds = 0; -static int32_t lastupdate, mousecol, mouseadd = 1, bstatus; - -#if !defined(_WIN32) -static int32_t usecwd = 0; -#endif - -static struct strllist -{ - struct strllist *next; - char *str; -} -*CommandPaths = NULL, *CommandGrps = NULL; - -const char *scripthist[SCRIPTHISTSIZ]; -int32_t scripthistend = 0; - -int32_t showambiencesounds=2; - -int32_t autocorruptcheck = 0; -static int32_t corruptchecktimer; -static int32_t curcorruptthing=-1; - -int32_t corruptlevel=0, numcorruptthings=0, corruptthings[MAXCORRUPTTHINGS]; - -static uint32_t templenrepquot=1; - -//////////////////// Key stuff //////////////////// - -#define eitherALT (keystatus[KEYSC_LALT] || keystatus[KEYSC_RALT]) -#define eitherCTRL (keystatus[KEYSC_LCTRL] || keystatus[KEYSC_RCTRL]) -#define eitherSHIFT (keystatus[KEYSC_LSHIFT] || keystatus[KEYSC_RSHIFT]) - -#define PRESSED_KEYSC(Key) (keystatus[KEYSC_##Key] && !(keystatus[KEYSC_##Key]=0)) - - -//////////////////// Aiming //////////////////// -static const char *Typestr[] = { "Wall", "Ceiling", "Floor", "Sprite", "Wall" }; -static const char *typestr[] = { "wall", "ceiling", "floor", "sprite", "wall" }; -static const char *Typestr_wss[] = { "Wall", "Sector", "Sector", "Sprite", "Wall" }; -/*static const char *typestr_wss[] = { "wall", "sector", "sector", "sprite", "wall" };*/ - -/** The following macros multiplex between identically named fields of sector/wall/sprite, - * based on a macro parameter or the currently aimed at object (AIMED_ versions). - * They can be used on either side of an assignment. */ - -// select wall, only makes a difference with walls that have 'swap bottom of walls' bit set -#define SELECT_WALL() (AIMING_AT_WALL ? searchbottomwall : searchwall) - -#define SECFLD(i, Field) (sector[i].Field) -#define WALFLD(i, Field) (wall[i].Field) -#define SPRFLD(i, Field) (sprite[i].Field) - -// valid fields: z, stat, picnum, heinum, shade, pal, xpanning, ypanning -#define CEILINGFLOOR(iSec, Field) (*(AIMING_AT_CEILING ? &(sector[iSec].ceiling##Field) : &(sector[iSec].floor##Field))) -#define AIMED_CEILINGFLOOR(Field) CEILINGFLOOR(searchsector, Field) - -#define AIMED_SEL_WALL(Field) WALFLD(SELECT_WALL(), Field) - -// selects from wall proper or its mask -#define OVR_WALL(iWal, Field) (*(AIMING_AT_WALL ? &WALFLD(iWal, Field) : &(wall[iWal].over##Field))) -#define AIMED_SELOVR_WALL(Field) OVR_WALL(SELECT_WALL(), Field) - -// the base macro to construct field multiplexing macros: wall and sector cases undetermined -#define MUXBASE(Field, SectorCase, WallCase) (*(AIMING_AT_CEILING_OR_FLOOR ? (SectorCase) : \ - (AIMING_AT_WALL_OR_MASK ? (WallCase) : \ - &SPRFLD(searchwall, Field)))) - -#define SFBASE_CF(Field, WallCase) MUXBASE(Field, &AIMED_CEILINGFLOOR(Field), WallCase) - -#define SFBASE_(Field, WallCase) MUXBASE(Field, &SECFLD(searchsector,Field), WallCase) - -#define AIMED(Field) SFBASE_(Field, &WALFLD(searchwall, Field)) -#define AIMED_SEL(Field) SFBASE_(Field, &AIMED_SEL_WALL(Field)) -//#define AIMED_CF(Field) SFBASE_CF(Field, &WALFLD(searchwall,Field)) -#define AIMED_CF_SEL(Field) SFBASE_CF(Field, &AIMED_SEL_WALL(Field)) - -// OVR makes sense only with picnum -//#define AIMED_OVR_PICNUM SFBASE_CF(picnum, &OVR_WALL(searchwall, picnum)) -#define AIMED_SELOVR_PICNUM SFBASE_CF(picnum, &AIMED_SELOVR_WALL(picnum)) - - -static const char *ONOFF_[] = {"OFF","ON"}; -#define ONOFF(b) (ONOFF_[!!(b)]) - - -static CACHE1D_FIND_REC *finddirs=NULL, *findfiles=NULL, *finddirshigh=NULL, *findfileshigh=NULL; -static int32_t numdirs=0, numfiles=0; -static int32_t currentlist=0; -static int32_t tsign, mouseaction=0, mouseax=0, mouseay=0; -static int32_t repeatcountx, repeatcounty; -static int32_t infobox=3; // bit0: current window, bit1: mouse pointer, the variable should be renamed - -static char wallshades[MAXWALLS]; -static char sectorshades[MAXSECTORS][2]; -static char spriteshades[MAXSPRITES]; -static char wallpals[MAXWALLS]; -static char sectorpals[MAXSECTORS][2]; -static char spritepals[MAXSPRITES]; -static char wallflag[MAXWALLS]; - -// tile marking in tile selector for custom creation of tile groups -static int16_t tilemarked[(MAXTILES+7)>>3]; - -#ifdef POLYMER -static int16_t spritelightid[MAXSPRITES]; -_prlight *spritelightptr[MAXSPRITES]; - -static void DeletePolymerLights() -{ - int32_t i; - for (i=0; i0; i++,col--) - CLEARLINES2D(i, 1, (col<<24)|(col<<16)|(col<<8)|col); - CLEARLINES2D(i, ydim-i, 0); - enddrawing(); -} - -void message(const char *fmt, ...) -{ - char tmpstr[256]; - va_list va; - - va_start(va, fmt); - Bvsnprintf(tmpstr, 256, fmt, va); - va_end(va); - - Bstrcpy(getmessage,tmpstr); - - getmessageleng = Bstrlen(getmessage); - getmessagetimeoff = totalclock+120*2; - lastmessagetime = totalclock; - - if (!mouseaction) - OSD_Printf("%s\n", tmpstr); -} - -typedef struct _mapundo -{ - int32_t numsectors; - int32_t numwalls; - int32_t numsprites; - - sectortype *sectors; - walltype *walls; - spritetype *sprites; - - int32_t revision; - - uint32_t sectcrc, wallcrc, spritecrc; - uint32_t sectsiz, wallsiz, spritesiz; - - struct _mapundo *next; // 'redo' loads this - struct _mapundo *prev; // 'undo' loads this -} mapundo_t; - -mapundo_t *mapstate = NULL; - -int32_t map_revision = 1; - -#define QADDNSZ 400 - -void create_map_snapshot(void) -{ - int32_t j; - uint32_t tempcrc; - - /* - if (mapstate->prev == NULL && mapstate->next != NULL) // should be the first map version - mapstate = mapstate->next; - */ - - if (mapstate == NULL) - { - mapstate = (mapundo_t *)Bcalloc(1, sizeof(mapundo_t)); - mapstate->revision = map_revision = 1; - mapstate->prev = mapstate->next = NULL; - } - else - { - if (mapstate->next != NULL) - { - mapundo_t *cur = mapstate->next; - cur->prev = NULL; - - while (cur->next) - cur = cur->next; - - do - { - if (cur->sectors && (cur->prev == NULL || (cur->sectcrc != cur->prev->sectcrc))) - Bfree(cur->sectors); - if (cur->walls && (cur->prev == NULL || (cur->wallcrc != cur->prev->wallcrc))) - Bfree(cur->walls); - if (cur->sprites && (cur->prev == NULL || (cur->spritecrc != cur->prev->spritecrc))) - Bfree(cur->sprites); - if (!cur->prev) - { - Bfree(cur); - break; - } - - cur = cur->prev; - Bfree(cur->next); - } - while (cur); - } - - mapstate->next = (mapundo_t *)Bcalloc(1, sizeof(mapundo_t)); - mapstate->next->prev = mapstate; - - mapstate = mapstate->next; - mapstate->revision = ++map_revision; - } - - fixspritesectors(); - updatenumsprites(); - - mapstate->numsectors = numsectors; - mapstate->numwalls = numwalls; - mapstate->numsprites = numsprites; - - tempcrc = crc32once((uint8_t *)§or[0],sizeof(sectortype) * numsectors); - - - if (numsectors) - { - if (mapstate->prev && mapstate->prev->sectcrc == tempcrc) - { - mapstate->sectors = mapstate->prev->sectors; - mapstate->sectsiz = mapstate->prev->sectsiz; - mapstate->sectcrc = tempcrc; - /* OSD_Printf("found a match between undo sectors\n"); */ - } - else - { - mapstate->sectors = (sectortype *)Bcalloc(1, sizeof(sectortype) * numsectors + QADDNSZ); - mapstate->sectsiz = j = qlz_compress(§or[0], (char *)&mapstate->sectors[0], - sizeof(sectortype) * numsectors, state_compress); - mapstate->sectors = (sectortype *)Brealloc(mapstate->sectors, j); - mapstate->sectcrc = tempcrc; - } - - if (numwalls) - { - tempcrc = crc32once((uint8_t *)&wall[0],sizeof(walltype) * numwalls); - - - if (mapstate->prev && mapstate->prev->wallcrc == tempcrc) - { - mapstate->walls = mapstate->prev->walls; - mapstate->wallsiz = mapstate->prev->wallsiz; - mapstate->wallcrc = tempcrc; - /* OSD_Printf("found a match between undo walls\n"); */ - } - else - { - mapstate->walls = (walltype *)Bcalloc(1, sizeof(walltype) * numwalls + QADDNSZ); - mapstate->wallsiz = j = qlz_compress(&wall[0], (char *)&mapstate->walls[0], - sizeof(walltype) * numwalls, state_compress); - mapstate->walls = (walltype *)Brealloc(mapstate->walls, j); - mapstate->wallcrc = tempcrc; - } - } - - if (numsprites) - { - tempcrc = crc32once((uint8_t *)&sprite[0],sizeof(spritetype) * MAXSPRITES); - - if (mapstate->prev && mapstate->prev->spritecrc == tempcrc) - { - mapstate->sprites = mapstate->prev->sprites; - mapstate->spritesiz = mapstate->prev->spritesiz; - mapstate->spritecrc = tempcrc; - /*OSD_Printf("found a match between undo sprites\n");*/ - } - else - { - int32_t i = 0; - spritetype *tspri = (spritetype *)Bcalloc(1, sizeof(spritetype) * numsprites + 1), - *spri = &tspri[0]; - mapstate->sprites = (spritetype *)Bcalloc(1, sizeof(spritetype) * numsprites + QADDNSZ); - - for (j=0; jspritesiz = j = qlz_compress(&tspri[0], (char *)&mapstate->sprites[0], - sizeof(spritetype) * numsprites, state_compress); - mapstate->sprites = (spritetype *)Brealloc(mapstate->sprites, j); - mapstate->spritecrc = tempcrc; - Bfree(tspri); - } - } - } - - CheckMapCorruption(6, 0); -} - -void map_undoredo_free(void) -{ - if (mapstate) - { - while (mapstate->next) - mapstate = mapstate->next; - - while (mapstate->prev) - { - mapundo_t *state = mapstate->prev; - if (mapstate->sectors && (mapstate->sectcrc != mapstate->prev->sectcrc)) Bfree(mapstate->sectors); - if (mapstate->walls && (mapstate->wallcrc != mapstate->prev->wallcrc)) Bfree(mapstate->walls); - if (mapstate->sprites && (mapstate->spritecrc != mapstate->prev->spritecrc)) Bfree(mapstate->sprites); - Bfree(mapstate); - mapstate = state; - } - - if (mapstate->sectors) Bfree(mapstate->sectors); - if (mapstate->walls) Bfree(mapstate->walls); - if (mapstate->sprites) Bfree(mapstate->sprites); - - Bfree(mapstate); - mapstate = NULL; - } - - map_revision = 1; -} - -int32_t map_undoredo(int32_t dir) -{ - int32_t i; - - if (mapstate == NULL) return 1; - - if (dir) - { - if (mapstate->next == NULL || !mapstate->next->numsectors) return 1; - - // while (map_revision+1 != mapstate->revision && mapstate->next) - mapstate = mapstate->next; - } - else - { - if (mapstate->prev == NULL || !mapstate->prev->numsectors) return 1; - - // while (map_revision-1 != mapstate->revision && mapstate->prev) - mapstate = mapstate->prev; - } - - numsectors = mapstate->numsectors; - numwalls = mapstate->numwalls; - numsprites = mapstate->numsprites; - map_revision = mapstate->revision; - - initspritelists(); - - Bmemset(show2dsector, 0, sizeof(show2dsector)); - Bmemset(show2dsprite, 0, sizeof(show2dsprite)); - Bmemset(show2dwall, 0, sizeof(show2dwall)); - Bmemset(hlsectorbitmap, 0, sizeof(hlsectorbitmap)); - - if (mapstate->numsectors) - { - qlz_decompress((const char *)&mapstate->sectors[0], §or[0], state_decompress); - - if (mapstate->numwalls) - qlz_decompress((const char *)&mapstate->walls[0], &wall[0], state_decompress); - - if (mapstate->numsprites) - qlz_decompress((const char *)&mapstate->sprites[0], &sprite[0], state_decompress); - } - - updatenumsprites(); - - for (i=0; inext) numdirs++; - for (r = findfiles; r; r=r->next) numfiles++; - - finddirshigh = finddirs; - findfileshigh = findfiles; - currentlist = 0; - if (findfileshigh) currentlist = 1; - - return(0); -} - -const char *ExtGetVer(void) -{ - return s_buildRev; -} - -void ExtLoadMap(const char *mapname) -{ - int32_t i; - int32_t sky=0; - - getmessageleng = 0; - getmessagetimeoff = 0; - - Bstrcpy(levelname,mapname); - pskyoff[0]=0; - for (i=0; i<8; i++) pskyoff[i]=0; - - for (i=0; i= MAX_TILE_GROUPS || s_TileGroups[group].szText == NULL) - { - // group isn't valid. - return 0; - } - for (temp=0; temp 10000 && lotag < 32767) - Bsprintf(tempbuf,"1 TIME SOUND"); - // else Bsprintf(tempbuf,"%hu",lotag); - break; - } - return(tempbuf); -} - -const char *ExtGetSectorCaption(int16_t sectnum) -{ - static char tempbuf[64]; - - Bmemset(tempbuf, 0, sizeof(tempbuf)); - - if (qsetmode != 200 && ((onnames!=1 && onnames!=4 && onnames!=7) || onnames==8)) - return tempbuf; - - if (qsetmode == 200 || (sector[sectnum].lotag|sector[sectnum].hitag)) - { - Bstrcpy(lo, ExtGetSectorType(sector[sectnum].lotag)); - if (qsetmode != 200) - Bsprintf(tempbuf,"%hu,%hu %s", sector[sectnum].hitag, sector[sectnum].lotag, lo); - else - Bsprintf(tempbuf,"%hu %s", sector[sectnum].lotag, lo); - } - return(tempbuf); -} - -const char *ExtGetWallCaption(int16_t wallnum) -{ - static char tempbuf[64]; - - Bmemset(tempbuf,0,sizeof(tempbuf)); - - if (wall[wallnum].cstat & (1<<14)) - { - Bsprintf(tempbuf,"%d", wallength(wallnum)); - wall[wallnum].cstat &= ~(1<<14); - return(tempbuf); - } - - if (!(onnames==2 || onnames==4)) - { - tempbuf[0] = 0; - return(tempbuf); - } - - // HERE - - if ((wall[wallnum].lotag|wall[wallnum].hitag) == 0) - tempbuf[0] = 0; - else - Bsprintf(tempbuf, "%hu,%hu", wall[wallnum].hitag, wall[wallnum].lotag); - - return(tempbuf); -} //end - -const char *SectorEffectorTagText(int32_t lotag) -{ - static char tempbuf[64]; - - static const char *tags[] = - { - "ROTATED SECTOR", // 0 - "PIVOT SPRITE FOR SE 0", - "EARTHQUAKE", - "RANDOM LIGHTS AFTER SHOT OUT", - "RANDOM LIGHTS", - "(UNKNOWN)", // 5 - "SUBWAY", - "TRANSPORT", - "UP OPEN DOOR LIGHTS", - "DOWN OPEN DOOR LIGHTS", - "DOOR AUTO CLOSE (H=DELAY)", // 10 - "ROTATE SECTOR DOOR", - "LIGHT SWITCH", - "EXPLOSIVE", - "SUBWAY CAR", - "SLIDE DOOR (ST 25)", // 15 - "ROTATE REACTOR SECTOR", - "ELEVATOR TRANSPORT (ST 15)", - "INCREMENTAL SECTOR RISE/FALL", - "CEILING FALL ON EXPLOSION", - "BRIDGE (ST 27)", // 20 - "DROP FLOOR (ST 28)", - "TEETH DOOR (ST 29)", - "1-WAY SE7 DESTINATION (H=SE 7)", - "CONVAYER BELT", - "ENGINE", // 25 - "(UNKNOWN)", - "CAMERA FOR PLAYBACK", - "LIGHTNING (H= TILE#4890)", - "FLOAT", - "2 WAY TRAIN (ST=31)", // 30 - "FLOOR RISE", - "CEILING FALL", - "SPAWN JIB W/QUAKE", - }; - - Bmemset(tempbuf,0,sizeof(tempbuf)); - - if (lotag>=0 && lotag<(int32_t)(sizeof(tags)/sizeof(tags[0]))) - Bsprintf(tempbuf, "%d: %s", lotag, tags[lotag]); - else - switch (lotag) - { - case 36: - Bsprintf(tempbuf,"%d: SKRINK RAY SHOOTER",lotag); - break; - case 49: - Bsprintf(tempbuf,"%d: POINT LIGHT",lotag); - break; - case 50: - Bsprintf(tempbuf,"%d: SPOTLIGHT",lotag); - break; - default: - Bsprintf(tempbuf,"%d: (UNKNOWN)",lotag); - break; - } - - return (tempbuf); -} - -const char *MusicAndSFXTagText(int32_t lotag) -{ - static char tempbuf[16]; - - Bmemset(tempbuf, 0, sizeof(tempbuf)); - - if (g_numsounds <= 0) - return tempbuf; - - if (lotag>0 && lotag<999 && g_sounds[lotag].definedname) - return g_sounds[lotag].definedname; - - if (lotag>=1000 && lotag<2000) - Bsprintf(tempbuf, "REVERB"); - return tempbuf; -} - -const char *SectorEffectorText(int32_t spritenum) -{ - static char tempbuf[64]; - - Bmemset(tempbuf, 0, sizeof(tempbuf)); - Bmemset(lo, 0, sizeof(lo)); - - Bstrcpy(lo, SectorEffectorTagText(sprite[spritenum].lotag)); - if (!lo[5]) // tags are 5 chars or less - SpriteName(spritenum, tempbuf); - else - Bsprintf(tempbuf, "SE %s",lo); - - return (tempbuf); -} - -const char *ExtGetSpriteCaption(int16_t spritenum) -{ - static char tempbuf[1024]; - int32_t retfast = 0; - - Bmemset(tempbuf,0,sizeof(tempbuf)); - - if (!(onnames>=3 && onnames<=8) || (onnames==7 && sprite[spritenum].picnum!=SECTOREFFECTOR)) - retfast = 1; - if (onnames==5 && !tileInGroup(tilegroupItems, sprite[spritenum].picnum)) - retfast = 1; - if (onnames==6 && sprite[spritenum].picnum != sprite[cursprite].picnum) - retfast = 1; - - if (retfast) - return(tempbuf); - - if ((sprite[spritenum].lotag|sprite[spritenum].hitag) == 0) - { - SpriteName(spritenum,lo); - if (lo[0]!=0) - { - if (sprite[spritenum].pal==1) Bsprintf(tempbuf,"%s (MULTIPLAYER)",lo); - else Bsprintf(tempbuf,"%s",lo); - } - } - else if (sprite[spritenum].picnum==SECTOREFFECTOR) - { - if (onnames!=8) - { - Bsprintf(lo,"%s",SectorEffectorText(spritenum)); - Bsprintf(tempbuf,"%s, %hu",lo,sprite[spritenum].hitag); - } - } - else - { - SpriteName(spritenum,lo); - if (sprite[spritenum].extra != -1) - Bsprintf(tempbuf,"%hu,%hu,%d %s",sprite[spritenum].hitag,sprite[spritenum].lotag,sprite[spritenum].extra,lo); - else - Bsprintf(tempbuf,"%hu,%hu %s",sprite[spritenum].hitag,sprite[spritenum].lotag,lo); - } - - return(tempbuf); - -} //end - -//printext16 parameters: -//printext16(int32_t xpos, int32_t ypos, int16_t col, int16_t backcol, -// char name[82], char fontsize) -// xpos 0-639 (top left) -// ypos 0-479 (top left) -// col 0-15 -// backcol 0-15, -1 is transparent background -// name -// fontsize 0=8*8, 1=3*5 - -//drawline16 parameters: -// drawline16(int32_t x1, int32_t y1, int32_t x2, int32_t y2, char col) -// x1, x2 0-639 -// y1, y2 0-143 (status bar is 144 high, origin is top-left of STATUS BAR) -// col 0-15 - -static void PrintStatus(const char *string, int32_t num, int32_t x, int32_t y, int32_t color) -{ - Bsprintf(tempbuf, "%s %d", string, num); - printext16(x*8, ydim-STATUS2DSIZ+y*8, editorcolors[color], -1, tempbuf, 0); -} - -void ExtShowSectorData(int16_t sectnum) //F5 -{ - int32_t x,x2,y; - int32_t i,yi; - int32_t secrets=0; - int32_t totalactors1=0,totalactors2=0,totalactors3=0,totalactors4=0; - int32_t totalrespawn=0; - - UNREFERENCED_PARAMETER(sectnum); - if (qsetmode==200) - return; - - for (i=0; i=0 && sprite[i].picnum=MAXTILES) - continue; - - switch (pic) - { - case CASES_LIZTROOP: - numsprite[LIZTROOP]++; - break; - case PIGCOP: case PIGCOPSTAYPUT: case PIGCOPDIVE: - numsprite[PIGCOP]++; - break; - case LIZMAN: case LIZMANSTAYPUT: case LIZMANSPITTING: case LIZMANFEEDING: case LIZMANJUMP: - numsprite[LIZMAN]++; - break; - case CASES_BOSS1: - if (runi==0 || sprite[i].pal==0) - numsprite[BOSS1]++; - else - multisprite[BOSS1]++; - break; - case COMMANDER: - case COMMANDERSTAYPUT: - numsprite[COMMANDER]++; - break; - case OCTABRAIN: - case OCTABRAINSTAYPUT: - numsprite[OCTABRAIN]++; - break; - case RECON: case DRONE: case ROTATEGUN: case EGG: case ORGANTIC: case GREENSLIME: - case BOSS2: case BOSS3: case TANK: case NEWBEAST: case NEWBEASTSTAYPUT: case BOSS4: - numsprite[pic]++; - break; - default: - break; - } - } - -#undef CASES_LIZTROOP -#undef CASES_BOSS1 - - total=0; - for (i=0; ixmax) xmax=x; - } - tempbuf[x]=0; - - if (do3d) - printext256(xx*4,(y*6)+2,whitecol,-1,tempbuf,1); - else - printext16(xx*4,ydim-STATUS2DSIZ+(y*6)+2,editorcolors[11],-1,tempbuf,1); - - x=0; - y++; - if (y>18) - { - col++; - y=6; - xx+=xmax; - xmax=0; - } - } - enddrawing(); - - kclose(fp); - -}// end ShowFileText - -// PK_ vvvv -typedef struct helppage_ -{ - int32_t numlines; - char line[][80]; // C99 flexible array member -} helppage_t; - -static helppage_t **helppage=NULL; -static int32_t numhelppages=0; - -static int32_t emptyline(const char *start) -{ - int32_t i; - for (i=0; i<80; i++) - { - if (start[i]=='\n' || !start[i]) break; - if (start[i]!=' ' && start[i]!='\t' && start[i]!='\r') - return 0; - } - return 1; -} - -static int32_t newpage(const char *start) -{ - int32_t i; - for (i=80-1; i>=0; i--) - { - if (start[i] == '^' && start[i+1] == 'P') - return 1; - } - return 0; -} - -#define IHELP_INITPAGES 32 -#define IHELP_INITLINES 16 - -static void ReadHelpFile(const char *name) -{ - BFILE *fp; - int32_t i, j, k, numallocpages; - int32_t pos, charsread=0; - helppage_t *hp; - char skip=0; - - initprintf("Loading \"%s\"\n",name); - - if ((fp=fopenfrompath(name,"rb")) == NULL) - { - initprintf("Error initializing integrated help: file \"%s\" not found.\n", name); - return; - } - - helppage=Bmalloc(IHELP_INITPAGES * sizeof(helppage_t *)); - numallocpages=IHELP_INITPAGES; - if (!helppage) goto HELPFILE_ERROR; - - i=0; - while (!Bfeof(fp) && !ferror(fp)) - { - while (!Bfeof(fp)) // skip empty lines - { - pos = ftell(fp); - if (Bfgets(tempbuf, 80, fp) == NULL) break; - charsread = ftell(fp)-pos; - if (!newpage(tempbuf)) - { - break; - } - } - - if (Bfeof(fp) || charsread<=0) break; - - hp=Bcalloc(1,sizeof(helppage_t) + IHELP_INITLINES*80); - if (!hp) goto HELPFILE_ERROR; - hp->numlines = IHELP_INITLINES; - - if (charsread == 79 && tempbuf[78]!='\n') skip=1; - j=0; - - do - { - if (j >= hp->numlines) - { - hp=Brealloc(hp, sizeof(helppage_t) + 2*hp->numlines*80); - if (!hp) goto HELPFILE_ERROR; - hp->numlines *= 2; - } - - // limit the line length to 78 chars and probably get rid of the CR - if (charsread>0) - { - tempbuf[charsread-1]=0; - if (tempbuf[charsread-2]==0x0d) tempbuf[charsread-2]=0; - } - - Bmemcpy(hp->line[j], tempbuf, 80); - - for (k=charsread; k<80; k++) hp->line[j][k]=0; - - if (skip) - { - while (fgetc(fp)!='\n' && !Bfeof(fp)) /*skip rest of line*/; - skip=0; - } - - pos = ftell(fp); - if (Bfgets(tempbuf, 80, fp) == NULL) break; - charsread = ftell(fp)-pos; - if (charsread == 79 && tempbuf[78]!='\n') skip=1; - - j++; - - } - while (!newpage(tempbuf) && !Bfeof(fp) && charsread>0); - - hp=Brealloc(hp, sizeof(helppage_t) + j*80); - if (!hp) goto HELPFILE_ERROR; - hp->numlines=j; - - if (i >= numallocpages) - { - helppage = Brealloc(helppage, 2*numallocpages*sizeof(helppage_t *)); - numallocpages *= 2; - if (!helppage) goto HELPFILE_ERROR; - } - helppage[i] = hp; - i++; - } - - helppage = Brealloc(helppage, i*sizeof(helppage_t *)); - if (!helppage) goto HELPFILE_ERROR; - numhelppages = i; - - Bfclose(fp); - return; - -HELPFILE_ERROR: - - Bfclose(fp); - initprintf("ReadHelpFile(): ERROR allocating memory.\n"); - return; -} - -// why can't MSVC allocate an array of variable size?! -#define IHELP_NUMDISPLINES 110 // ((overridepm16y>>4)+(overridepm16y>>5)+(overridepm16y>>7)-2) -#define IHELP_PATLEN 45 -extern int32_t overridepm16y; // influences clearmidstatbar16() - -static void IntegratedHelp() -{ - if (!helppage) return; - - overridepm16y = ydim;//3*STATUS2DSIZ; - - { - int32_t i, j; - static int32_t curhp=0, curline=0; - int32_t highlighthp=-1, highlightline=-1, lasthighlighttime=0; - char disptext[IHELP_NUMDISPLINES][80]; - char oldpattern[IHELP_PATLEN+1]; - - Bmemset(oldpattern, 0, sizeof(char)); - // clearmidstatbar16(); - - while (keystatus[KEYSC_ESC]==0 && keystatus[KEYSC_Q]==0 && keystatus[KEYSC_F1]==0) - { - begindrawing(); - CLEARLINES2D(0, ydim, 0); - enddrawing(); - - idle_waitevent(); - if (handleevents()) - quitevent = 0; - - // printmessage16("Help mode, press to exit"); - - if (PRESSED_KEYSC(T)) // goto table of contents - { - curhp=0; - curline=0; - } - else if (PRESSED_KEYSC(G)) // goto arbitrary page - { - curhp=getnumber16("Goto page: ", 0, numhelppages-1, 0); - curline=0; - } - else if (PRESSED_KEYSC(UP)) // scroll up - { - if (curline>0) curline--; - } - else if (PRESSED_KEYSC(DOWN)) // scroll down - { - if (curline + 32/*+IHELP_NUMDISPLINES*/ < helppage[curhp]->numlines) curline++; - } - else if (PRESSED_KEYSC(PGUP)) // scroll one page up - { - i=IHELP_NUMDISPLINES; - while (i>0 && curline>0) i--, curline--; - } - else if (PRESSED_KEYSC(PGDN)) // scroll one page down - { - i=IHELP_NUMDISPLINES; - while (i>0 && curline + 32/*+IHELP_NUMDISPLINES*/ < helppage[curhp]->numlines) i--, curline++; - } - else if (PRESSED_KEYSC(SPACE)) // goto next paragraph - { - for (i=curline, j=0; i < helppage[curhp]->numlines; i++) - { - if (emptyline(helppage[curhp]->line[i])) { j=1; continue; } - if (j==1 && !emptyline(helppage[curhp]->line[i])) { j=2; break; } - } - if (j==2) - { - if (i + 32 /*+IHELP_NUMDISPLINES*/ < helppage[curhp]->numlines) - curline=i; - else if (helppage[curhp]->numlines - 32/*-IHELP_NUMDISPLINES*/ > curline) - curline = helppage[curhp]->numlines - 32/*-IHELP_NUMDISPLINES*/; - } - } - else if (PRESSED_KEYSC(BS)) // goto prev paragraph - { - for (i=curline-1, j=0; i>=0; i--) - { - if (!emptyline(helppage[curhp]->line[i])) { j=1; continue; } - if (j==1 && emptyline(helppage[curhp]->line[i])) { j=2; break; } - } - if (j==2 || i==-1) curline=i+1; - } - else if (PRESSED_KEYSC(HOME)) // goto beginning of page - { - curline=0; - } - else if (PRESSED_KEYSC(END)) // goto end of page - { - if ((curline=helppage[curhp]->numlines - 32/*-IHELP_NUMDISPLINES*/) >= 0) /**/; - else curline=0; - } - else if (PRESSED_KEYSC(LEFT) || PRESSED_KEYSC(LBRACK)) // prev page - { - if (curhp>0) - { - curhp--; - curline=0; - } - } - else if (PRESSED_KEYSC(RIGHT) || PRESSED_KEYSC(RBRACK)) // next page - { - if (curhp 0) - { - if (i > 0 && (ch == 8 || ch == 127)) - { - i--; - pattern[i] = 0; - } - else if (i < IHELP_PATLEN && ch >= 32 && ch < 128) - { - pattern[i++] = ch; - pattern[i] = 0; - } - } - } - - if (bad==1) - { - keystatus[KEYSC_ESC] = keystatus[KEYSC_Q] = keystatus[KEYSC_F1] = 0; - } - - if (bad==2) - { - keystatus[KEYSC_ENTER] = 0; - - for (i=curhp; inumlines; j++) - { - // entering an empty pattern will search with the last used pattern - if (strstr(helppage[i]->line[j], pattern[0]?pattern:oldpattern)) - { - curhp = i; - - if ((curline=j) <= helppage[i]->numlines - 32 /*-IHELP_NUMDISPLINES*/) /**/; - else if ((curline=helppage[i]->numlines- 32 /*-IHELP_NUMDISPLINES*/) >= 0) /**/; - else curline=0; - - highlighthp = i; - highlightline = j; - lasthighlighttime = totalclock; - goto ENDFOR1; - } - } - } -ENDFOR1: - if (pattern[0]) - Bmemcpy(oldpattern, pattern, IHELP_PATLEN+1); - } - } - else // '1'-'0' on the upper row - { - for (i=2; i<=11; i++) - if (keystatus[i]) break; - if (i--<12 && inumlines) - _printmessage16("%s", helppage[0]->line[curhp]); - else - _printmessage16("%d. (Untitled page)", curhp); - - for (i=0; j=(curhp==0)?(i+curline+1):(i+curline), - inumlines; i++) - { - if (ydim-overridepm16y+28+i*9+32 >= ydim) - break; - Bmemcpy(disptext[i], helppage[curhp]->line[j], 80); - printext16(8, ydim-overridepm16y+28+i*9, editorcolors[10], - (j==highlightline && curhp==highlighthp - && totalclock-lasthighlighttime<120*5) ? - editorcolors[1] : -1, - disptext[i], 0); - } - - showframe(1); - } - - overridepm16y = -1; - // i=ydim16; - // ydim16=ydim; - // drawline16(0,ydim-STATUS2DSIZ,xdim-1,ydim-STATUS2DSIZ,editorcolors[1]); - // ydim16=i; - // // printmessage16(""); - // showframe(1); - - keystatus[KEYSC_ESC] = keystatus[KEYSC_Q] = keystatus[KEYSC_F1] = 0; - } -} - -#define SOUND_NUMDISPLINES IHELP_NUMDISPLINES -//extern char SoundToggle; - -static int32_t compare_sounds_s(int16_t k1, int16_t k2) -{ - return (int32_t)k1 - (int32_t)k2; -} -static int32_t compare_sounds_d(int16_t k1, int16_t k2) -{ - sound_t *s1 = &g_sounds[k1], *s2 = &g_sounds[k2]; - char *n1 = s1->definedname, *n2 = s2->definedname; - - if (!n1 && !n2) return 0; - if (!n1) return -1; - if (!n2) return 1; - return Bstrcasecmp(n1, n2); -} -static int32_t compare_sounds_f(int16_t k1, int16_t k2) -{ - sound_t *s1 = &g_sounds[k1], *s2 = &g_sounds[k2]; - char *n1 = s1->filename, *n2 = s2->filename; - - if (!n1 && !n2) return 0; - if (!n1) return -1; - if (!n2) return 1; - return Bstrcasecmp(n1, n2); -} -static int32_t compare_sounds_1(int16_t k1, int16_t k2) -{ - return (g_sounds[k2].m&1) - (g_sounds[k1].m&1); -} -static int32_t compare_sounds_2(int16_t k1, int16_t k2) -{ - return (g_sounds[k2].m&2) - (g_sounds[k1].m&2); -} -static int32_t compare_sounds_3(int16_t k1, int16_t k2) -{ - return (g_sounds[k2].m&4) - (g_sounds[k1].m&4); -} -static int32_t compare_sounds_4(int16_t k1, int16_t k2) -{ - return (g_sounds[k2].m&8) - (g_sounds[k1].m&8); -} -static int32_t compare_sounds_5(int16_t k1, int16_t k2) -{ - return (g_sounds[k2].m&16) - (g_sounds[k1].m&16); -} - - -static int32_t sort_sounds(int32_t how) -{ - int32_t (*compare_sounds)(int16_t, int16_t) = NULL; - - int32_t ms, ofs, l, lb, r, rb, d, n, k1, k2; - int16_t *src, *dst, *source, *dest, *tmp; - - n = g_numsounds; - src = source = g_sndnum; - dest = Bmalloc(sizeof(int16_t) * n); - dst = dest; - if (!dest) return -1; - - switch (how) - { - case 'g': // restore original order - Bmemcpy(g_sndnum, g_definedsndnum, sizeof(int16_t)*n); - return 0; - case 's': - compare_sounds = compare_sounds_s; - break; - case 'd': - compare_sounds = compare_sounds_d; - break; - case 'f': - compare_sounds = compare_sounds_f; - break; - case '1': - compare_sounds = compare_sounds_1; - break; - case '2': - compare_sounds = compare_sounds_2; - break; - case '3': - compare_sounds = compare_sounds_3; - break; - case '4': - compare_sounds = compare_sounds_4; - break; - case '5': - compare_sounds = compare_sounds_5; - break; - default: - return -2; - } - - for (ms=1; ms= lb) - { - dst[d++] = src[r++]; - continue; - } - if (r >= rb) - { - dst[d++] = src[l++]; - continue; - } - k1 = src[l]; - k2 = src[r]; - if (compare_sounds(k1, k2) <= 0) - { - dst[d++] = src[l++]; - continue; - } - dst[d++] = src[r++]; - } - } - tmp = src; - src = dst; - dst = tmp; - } - if (src != source) - Bmemcpy(source, src, sizeof(int16_t) * n); - - Bfree(dest); - return 0; -} - -static void SoundDisplay() -{ - if (g_numsounds <= 0) return; - - overridepm16y = ydim;//3*STATUS2DSIZ; - - { - int32_t i, j; - // cursnd is the first displayed line, cursnd+curofs is where the cursor is - static int32_t cursnd=0, curofs=0; - char disptext[SOUND_NUMDISPLINES][80]; - - // SoundToggle = 1; - - while (keystatus[KEYSC_ESC]==0 && keystatus[KEYSC_Q]==0 && keystatus[KEYSC_F2]==0 - && keystatus[buildkeys[BK_MODE2D_3D]]==0) // quickjump to 3d mode - { - begindrawing(); - CLEARLINES2D(0, ydim16, 0); - enddrawing(); - - idle_waitevent(); - if (handleevents()) - quitevent = 0; - -// drawgradient(); - - begindrawing(); - printext16(9, ydim2d-overridepm16y+9, editorcolors[4], -1, "Sound Index", 0); - printext16(8, ydim2d-overridepm16y+8, editorcolors[12], -1, "Sound Index", 0); - printext16(8 + 11*8 + 2*8, ydim2d-overridepm16y+8, editorcolors[15], -1, "(SPACE:play, S:sort)", 0); - enddrawing(); - - if (PRESSED_KEYSC(G)) // goto specified sound# - { - _printmessage16(" "); - j = getnumber16("Goto sound#: ", 0, g_numsounds-1, 0); - for (i=0; i=g_numsounds- 32/*SOUND_NUMDISPLINES*/) - cursnd = g_numsounds-32/*SOUND_NUMDISPLINES*/, curofs = i-cursnd; - else - curofs = 32/*SOUND_NUMDISPLINES*//2, cursnd = i-curofs; - } - } - else if (PRESSED_KEYSC(UP)) // scroll up - { - if (curofs>0) curofs--; - else if (cursnd>0) cursnd--; - } - else if (PRESSED_KEYSC(DOWN)) // scroll down - { - if (curofs<32/*SOUND_NUMDISPLINES*/-1 && cursnd+curofs0 && curofs>0) - i--, curofs--; - while (i>0 && cursnd>0) - i--, cursnd--; - } - else if (PRESSED_KEYSC(PGDN)) // scroll one page down - { - i=SOUND_NUMDISPLINES; - - while (i>0 && curofs<32/*SOUND_NUMDISPLINES*/-1 && cursnd+curofs0 && cursnd+32/*SOUND_NUMDISPLINES*/ < g_numsounds) - i--, cursnd++; - } - else if (PRESSED_KEYSC(SPACE) || PRESSED_KEYSC(ENTER)) // play/stop sound - { - int32_t j = cursnd+curofs; - int32_t k = g_sndnum[j]; - - if (S_CheckSoundPlaying(0, k) > 0) - S_StopSound(k); - else - S_PlaySound(k); - } - else if (PRESSED_KEYSC(HOME)) // goto first sound# - { - cursnd = curofs = 0; - } - else if (PRESSED_KEYSC(END)) // goto last sound# - { - if ((cursnd=g_numsounds-32/*SOUND_NUMDISPLINES*/) >= 0) - curofs=32/*SOUND_NUMDISPLINES*/-1; - else - { - cursnd = 0; - curofs = g_numsounds-1; - } - } - - _printmessage16(" FILE NAME PITCH RANGE PRI FLAGS VOLUME"); - for (i=0; j=cursnd+i, i= ydim) break; - - Bsprintf(disptext[i], - "%4d .................... ................ %6d:%-6d %3d %c%c%c%c%c %6d", - // 5678901234567890X23456789012345678901234567 - k, snd->ps, snd->pe, snd->pr, - snd->m&1 ? 'R':'-', snd->m&2 ? 'M':'-', snd->m&4 ? 'D':'-', - snd->m&8 ? 'P':'-', snd->m&16 ? 'G':'-', snd->vo); - for (l = Bsnprintf(disptext[i]+5, 20, "%s", snd->definedname); l<20; l++) - disptext[i][5+l] = ' '; - if (snd->filename) - { - l = Bstrlen(snd->filename); - if (l<=16) - cp = snd->filename; - else - cp = snd->filename + l-15; - for (m = Bsnprintf(disptext[i]+26, 16, "%s", cp); m<16; m++) - disptext[i][26+m] = ' '; - if (l>16) - disptext[i][26] = disptext[i][27] = disptext[i][28] = '.'; - } - - printext16(8, ydim-overridepm16y+28+i*9, - keystatus[KEYSC_S]?editorcolors[8] : (S_CheckSoundPlaying(-1, k) ? editorcolors[2] : editorcolors[10]), - j==cursnd+curofs ? editorcolors[1] : -1, - disptext[i], 0); - } - - if (keystatus[KEYSC_S]) // sorting - { - - char ch, bad=0; - - _printmessage16("Sort by: (S)oundnum (D)ef (F)ile ori(g) or flags (12345)"); - showframe(1); - - i=0; - bflushchars(); - while (bad == 0) - { - idle_waitevent(); - if (handleevents()) - quitevent = 0; - - ch = bgetchar(); - - if (keystatus[1]) bad = 1; - - else if (ch == 's' || ch == 'd' || ch == 'f' || ch == 'g' || - ch == '1' || ch == '2' || ch == '3' || ch == '4' || ch == '5') - { - bad = 2; - sort_sounds(ch); - } - } - - if (bad==1) - { - keystatus[KEYSC_ESC] = keystatus[KEYSC_Q] = keystatus[KEYSC_F2] = 0; - } - - if (bad==2) - { - keystatus[KEYSC_S] = keystatus[KEYSC_D] = keystatus[KEYSC_F] = 0; - keystatus[KEYSC_G] = keystatus[KEYSC_1] = keystatus[KEYSC_2] = 0; - keystatus[KEYSC_3] = keystatus[KEYSC_4] = keystatus[KEYSC_5] = 0; - } - } - else - showframe(1); - } - - overridepm16y = -1; - // i=ydim16; - // ydim16=ydim; - // drawline16(0,ydim-STATUS2DSIZ,xdim-1,ydim-STATUS2DSIZ,editorcolors[1]); - // ydim16=i; - // // printmessage16(""); - // showframe(1); - - FX_StopAllSounds(); - S_ClearSoundLocks(); - // SoundToggle = 0; - - keystatus[KEYSC_ESC] = keystatus[KEYSC_Q] = keystatus[KEYSC_F2] = 0; - } -} -// PK_ ^^^^ - -// from sector.c -static int32_t dist(spritetype *s1,spritetype *s2) -{ - int32_t x = klabs(s1->x-s2->x); - int32_t y = klabs(s1->y-s2->y); - int32_t z = klabs((s1->z-s2->z)>>4); - - if (x>4) + (t>>2) + (t>>3)); - } -} - -extern int32_t NumVoices; -extern int32_t g_numEnvSoundsPlaying; -int32_t AmbienceToggle = 1; //SoundToggle; -int32_t ParentalLock = 0; -#undef T1 -#define T1 (s->filler) - -// adapted from actors.c -static void M32_MoveFX(void) -{ - int32_t i, j; - int32_t x, ht; - spritetype *s; - - for (i=headspritestat[0]; i>=0; i=nextspritestat[i]) - { - s = &sprite[i]; - - if (s->picnum != MUSICANDSFX) - { - if (T1&1) - { - T1 &= (~1); - S_StopEnvSound(s->lotag, i); - } - } - else if (s->sectnum>=0) - { - ht = s->hitag; - - if (s->lotag < 999 && (unsigned)sector[s->sectnum].lotag < 9 && - AmbienceToggle && sector[s->sectnum].floorz != sector[s->sectnum].ceilingz) - { - if ((g_sounds[s->lotag].m&2)) - { - x = dist((spritetype *)&pos,s); - if (x < ht && (T1&1) == 0 && FX_VoiceAvailable(g_sounds[s->lotag].pr-1)) - { - if (g_numEnvSoundsPlaying == NumVoices) - { - for (j = headspritestat[0]; j >= 0; j = nextspritestat[j]) - { - if (s->picnum == MUSICANDSFX && j != i && sprite[j].lotag < 999 && - (sprite[j].filler&1) == 1 && dist(&sprite[j],(spritetype *)&pos) > x) - { - S_StopEnvSound(sprite[j].lotag,j); - break; - } - - } - if (j == -1) continue; - } - A_PlaySound(s->lotag,i); - T1 |= 1; - } - if (x >= ht && (T1&1) == 1) - { - T1 &= (~1); - S_StopEnvSound(s->lotag,i); - } - } - } - } - } -} -#undef T1 - - -///__ShowHelpText__ - -void ExtShowSpriteData(int16_t spritenum) //F6 -{ - UNREFERENCED_PARAMETER(spritenum); - if (qsetmode != 200) - ShowFileText("sehelp.hlp", 0); - /* if (qsetmode == 200) // In 3D mode - return; - - while (KEY_PRESSED(KEYSC_F6)); - ResetKeys(); - ContextHelp(spritenum); // Get context sensitive help */ -}// end ExtShowSpriteData - -// Floor Over Floor (duke3d) - -// If standing in sector with SE42 or SE44 -// then draw viewing to SE41 and raise all =hi SE43 cielings. - -// If standing in sector with SE43 or SE45 -// then draw viewing to SE40 and lower all =hi SE42 floors. - -static int32_t fofsizex = -1; -static int32_t fofsizey = -1; -#if 0 -static void ResetFOFSize() -{ - if (fofsizex != -1) tilesizx[FOF] = fofsizex; - if (fofsizey != -1) tilesizy[FOF] = fofsizey; -} -#endif -static void ExtSE40Draw(int32_t spnum,int32_t x,int32_t y,int32_t z,int16_t a,int16_t h) -{ - static int32_t tempsectorz[MAXSECTORS]; - static int32_t tempsectorpicnum[MAXSECTORS]; - - int32_t i=0,j=0,k=0; - int32_t floor1=0,floor2=0,ok=0,fofmode=0,draw_both=0; - int32_t offx,offy,offz; - - if (sprite[spnum].ang!=512) return; - - // Things are a little different now, as we allow for masked transparent - // floors and ceilings. So the FOF textures is no longer required - // if (!(gotpic[FOF>>3]&(1<<(FOF&7)))) - // return; - // gotpic[FOF>>3] &= ~(1<<(FOF&7)); - - if (tilesizx[562]) - { - fofsizex = tilesizx[562]; - tilesizx[562] = 0; - } - if (tilesizy[562]) - { - fofsizey = tilesizy[562]; - tilesizy[562] = 0; - } - - floor1=spnum; - - if (sprite[spnum].lotag==42) fofmode=40; - if (sprite[spnum].lotag==43) fofmode=41; - if (sprite[spnum].lotag==44) fofmode=40; - if (sprite[spnum].lotag==45) fofmode=41; - - // fofmode=sprite[spnum].lotag-2; - - // sectnum=sprite[j].sectnum; - // sectnum=cursectnum; - ok++; - - /* recursive? - for(j=0;j= 1024) - offz = sprite[floor2].z; - else if (fofmode==41) - offz = SPRITESEC(floor2).floorz; - else - offz = SPRITESEC(floor2).ceilingz; - - if (sprite[floor1].ang >= 1024) - offz -= sprite[floor1].z; - else if (fofmode==40) - offz -= SPRITESEC(floor1).floorz; - else - offz -= SPRITESEC(floor1).ceilingz; - - // if(ok==2) { Message("no floor2",RED); return; } - - for (j=0; j lastupdate) - { - mousecol += mouseadd; - if (mousecol >= 30 || mousecol <= 0) - { - mouseadd = -mouseadd; - mousecol += mouseadd; - } - lastupdate = totalclock + 3; - } - - switch (whitecol) - { - case 1: // Shadow Warrior - col = whitecol+mousecol; - break; - case 31: // Duke Nukem 3D - col = whitecol-mousecol; - break; - default: - col = whitecol; - break; - } - - if (col != whitecol) - { - for (i=((xdim > 640)?3:2); i<=((xdim > 640)?7:3); i++) - { - plotpixel(searchx+i,searchy,col); - plotpixel(searchx-i,searchy,col); - plotpixel(searchx,searchy-i,col); - plotpixel(searchx,searchy+i,col); - } - - for (i=1; i<=((xdim > 640)?2:1); i++) - { - plotpixel(searchx+i,searchy,whitecol); - plotpixel(searchx-i,searchy,whitecol); - plotpixel(searchx,searchy-i,whitecol); - plotpixel(searchx,searchy+i,whitecol); - } - - i = (xdim > 640)?8:4; - - plotpixel(searchx+i,searchy,0); - plotpixel(searchx-i,searchy,0); - plotpixel(searchx,searchy-i,0); - plotpixel(searchx,searchy+i,0); - } - - if (xdim > 640) - { - for (i=1; i<=4; i++) - { - plotpixel(searchx+i,searchy,whitecol); - plotpixel(searchx-i,searchy,whitecol); - plotpixel(searchx,searchy-i,whitecol); - plotpixel(searchx,searchy+i,whitecol); - } - } -} - -static int32_t AskIfSure(const char *text) -{ - int32_t retval=1; - - if (qsetmode == 200) - { - begindrawing(); //{{{ - printext256(0,0,whitecol,0,text?text:"Are you sure you want to proceed?",0); - enddrawing(); //}}} - } - else - { - _printmessage16("%s", text?text:"Are you sure you want to proceed?"); - } - - showframe(1); - - while ((keystatus[KEYSC_ESC]|keystatus[KEYSC_ENTER]|keystatus[KEYSC_SPACE]|keystatus[KEYSC_N]) == 0) - { - idle_waitevent(); - - if (handleevents()) - { - if (quitevent) - { - retval = 1; - break; - } - } - - if (PRESSED_KEYSC(Y) || PRESSED_KEYSC(ENTER)) - { - retval = 0; - break; - } - } - - if (PRESSED_KEYSC(ESC)) - retval = 1; - - return(retval); -} - -static int32_t IsValidTile(int32_t idTile) -{ - return (idTile>=0 && idTile= 0) - { - int32_t tempint; - - tempint = localartfreq[temp]; - localartfreq[temp] = localartfreq[temp+gap]; - localartfreq[temp+gap] = tempint; - - tempint = localartlookup[temp]; - localartlookup[temp] = localartlookup[temp+gap]; - localartlookup[temp+gap] = tempint; - - if (iTile == temp) - iTile = temp + gap; - else if (iTile == temp + gap) - iTile = temp; - - temp -= gap; - } - } - gap >>= 1; - } - while (gap > 0); - - // - // Set up count of number of used tiles - // - - localartlookupnum = 0; - while (localartfreq[localartlookupnum] > 0) - localartlookupnum++; - - // - // Check : If no tiles used at all then switch to displaying all tiles - // - - if (!localartfreq[0]) - { - localartlookupnum = MAXTILES; - - for (i = 0; i < MAXTILES; i++) - { - localartlookup[i] = i; - localartfreq[i] = 0; // Terrible bodge : zero tilefreq's not displayed in tile view. Still, when in Rome ... :-) - } - - iTile = idInitialTile; - } - - // - // - // - - iTopLeftTile = iTile - (iTile % nXTiles); - iTopLeftTile = clamp(iTopLeftTile, 0, MAXTILES-nDisplayedTiles); - - zoomsz = ZoomToThumbSize[s_Zoom]; - - searchx = ((iTile-iTopLeftTile)%nXTiles)*zoomsz + zoomsz/2; - searchy = ((iTile-iTopLeftTile)/nXTiles)*zoomsz + zoomsz/2; - - //////////////////////////////// - // Start of key handling code // - //////////////////////////////// - - while ((keystatus[KEYSC_ENTER]|keystatus[KEYSC_ESC]|(bstatus&1)) == 0) // <- Presumably one of these is escape key ?? - { - zoomsz = ZoomToThumbSize[s_Zoom]; - - DrawTiles(iTopLeftTile, (iTile >= localartlookupnum) ? localartlookupnum-1 : iTile, - nXTiles, nYTiles, zoomsz, moffset, - (tilesel_showerr && (iTile==iLastTile || (tilesel_showerr=0)))); - - iLastTile = iTile; - - idle_waitevent_timeout(500); - // SDL seems to miss mousewheel events when rotated slowly. - // These kludgy things seem to make it better, but I'm not sure. - - if (handleevents()) - quitevent = 0; - - getmousevalues(&mousedx,&mousedy,&bstatus); - searchx += mousedx; - searchy += mousedy; - - if (bstatus&2) - { - moffset += mousedy*2; - searchy += mousedy; - searchx -= mousedx; - - if ((moffset < 0 && iTopLeftTile > localartlookupnum-nDisplayedTiles-1) - || (moffset > 0 && iTopLeftTile==0)) - { - moffset=0; - searchy -= mousedy*2; - } - - while (moffset > zoomsz) - { - iTopLeftTile -= nXTiles; - moffset -= zoomsz; - } - while (moffset < -zoomsz) - { - iTopLeftTile += nXTiles; - moffset += zoomsz; - } - } - - // Keep the pointer visible at all times. - temp = min(zoomsz/2, 12); - searchx = clamp(searchx, temp, xdim-temp); - searchy = clamp(searchy, temp, ydim-temp); - - scrollmode = !(eitherCTRL^revertCTRL); - if (bstatus&16 && scrollmode && iTopLeftTile > 0) - { - mouseb &= ~16; - iTopLeftTile -= (nXTiles*scrollamount); - } - else if (bstatus&32 && scrollmode && iTopLeftTile < localartlookupnum-nDisplayedTiles-1) - { - mouseb &= ~32; - iTopLeftTile += (nXTiles*scrollamount); - } - - mtile = iTile = searchx/zoomsz + ((searchy-moffset)/zoomsz)*nXTiles + iTopLeftTile; - while (iTile >= iTopLeftTile + nDisplayedTiles) - { - iTile -= nXTiles; - mtile = iTile; - } - - // These two lines are so obvious I don't need to comment them ...;-) - synctics = totalclock-lockclock; - lockclock += synctics; - - // Zoom in / out using numeric key pad's / and * keys - if (((keystatus[KEYSC_gSLASH] || (!scrollmode && bstatus&16)) && s_Zoom<(signed)(NUM_ZOOMS-1)) - || ((keystatus[KEYSC_gSTAR] || (!scrollmode && bstatus&32)) && s_Zoom>0)) - { - if (PRESSED_KEYSC(gSLASH) || (!scrollmode && bstatus&16)) - { - mouseb &= ~16; - bstatus &= ~16; - - // Watch out : If editor window is small, then the next zoom level - // might get so large that even one tile might not fit ! - if (ZoomToThumbSize[s_Zoom+1]<=xdim && ZoomToThumbSize[s_Zoom+1]<=ydim) - { - // Phew, plenty of room. - s_Zoom++; - } - } - else - { - keystatus[KEYSC_gSTAR] = 0; - mouseb &= ~32; - bstatus &= ~32; - s_Zoom--; - } - - zoomsz = ZoomToThumbSize[s_Zoom]; - - if (iTile >= localartlookupnum) - iTile = localartlookupnum-1; - - // Calculate new num of tiles to display - nXTiles = xdim / zoomsz; - nYTiles = ydim / zoomsz; - // Refuse to draw less than half of a row. - if (zoomsz/2 < 12) - nYTiles--; - nDisplayedTiles = nXTiles * nYTiles; - - // Determine if the top-left displayed tile needs to - // alter in order to display selected tile - iTopLeftTile = iTile - (iTile % nXTiles); - iTopLeftTile = clamp(iTopLeftTile, 0, MAXTILES - nDisplayedTiles); - - // scroll window so mouse points the same tile as it was before zooming - iTopLeftTile -= searchx/zoomsz + ((searchy-moffset)/zoomsz)*nXTiles + iTopLeftTile-iTile; - } - - if (PRESSED_KEYSC(LEFT)) - { - if (eitherCTRL) // same as HOME, for consistency with CTRL-UP/DOWN - iTile = (iTile/nXTiles)*nXTiles; - else - iTile--; - } - - if (PRESSED_KEYSC(RIGHT)) - { - if (eitherCTRL) // same as END, for consistency with CTRL-UP/DOWN - iTile = ((iTile+nXTiles)/nXTiles)*nXTiles - 1; - else - iTile++; - } - - if (PRESSED_KEYSC(UP)) - { - if (eitherCTRL) - while (iTile-nXTiles >= iTopLeftTile) - iTile -= nXTiles; - else - iTile -= nXTiles; - } - - if (PRESSED_KEYSC(DOWN)) - { - if (eitherCTRL) - while (iTile+nXTiles < iTopLeftTile + nDisplayedTiles) - iTile += nXTiles; - else - iTile += nXTiles; - } - - if (PRESSED_KEYSC(PGUP)) - { - if (eitherCTRL) - iTile = 0; - else - iTile -= nDisplayedTiles; - } - - if (PRESSED_KEYSC(PGDN)) - { - if (eitherCTRL) - iTile = localartlookupnum-1; - else - iTile += nDisplayedTiles; - } - - if (PRESSED_KEYSC(HOME)) - { - if (eitherCTRL) - iTile = iTopLeftTile; - else - iTile = (iTile/nXTiles)*nXTiles; - } - - if (PRESSED_KEYSC(END)) - { - if (eitherCTRL) - iTile = iTopLeftTile + nDisplayedTiles - 1; - else - iTile = ((iTile+nXTiles)/nXTiles)*nXTiles - 1; - } - - // 'V' KEYPRESS - if (PRESSED_KEYSC(V)) - iTile = SelectAllTiles(iTile); - - // 'G' KEYPRESS - Goto frame - if (PRESSED_KEYSC(G)) - { - if (eitherCTRL) - { - if (OnSaveTileGroup() == 0) - { -// iTile = SelectAllTiles(iTile); - Bmemset(tilemarked, 0, sizeof(tilemarked)); - mark_lastk = -1; - noTilesMarked = 1; - } - } - else - iTile = OnGotoTile(iTile); - } - - // 'U' KEYPRESS : go straight to user defined art - if (PRESSED_KEYSC(U)) - { - SelectAllTiles(iTile); - iTile = FIRST_USER_ART_TILE; - } - - // 'A' KEYPRESS : Go straight to start of Atomic edition's art - if (PRESSED_KEYSC(A)) - { - SelectAllTiles(iTile); - iTile = FIRST_ATOMIC_TILE; - } - - // 'E' KEYPRESS : Go straight to start of extended art - if (PRESSED_KEYSC(E)) - { - SelectAllTiles(iTile); - - if (iTile == FIRST_EXTENDED_TILE) - iTile = SECOND_EXTENDED_TILE; - else iTile = FIRST_EXTENDED_TILE; - } - - // 'T' KEYPRESS = Select from pre-defined tileset - if (PRESSED_KEYSC(T)) - iTile = OnSelectTile(iTile); - - if (PRESSED_KEYSC(Z)) - s_TileZoom = !s_TileZoom; - - // - // Ensure tilenum is within valid range - // - iTile = clamp(iTile, 0, min(MAXTILES-1, localartlookupnum+nDisplayedTiles-1)); - - // 'S' KEYPRESS: search for named tile - if (PRESSED_KEYSC(S)) - { - static char laststr[25] = ""; - const char *searchstr = getstring_simple("Search for tile name: ", laststr, MAXTILES-1); - static char buf[2][25]; - - if (searchstr && searchstr[0]) - { - int32_t i, i0, slen=Bstrlen(searchstr)-1; - - Bstrncpy(laststr, searchstr, 25); - laststr[24] = 0; - i0 = localartlookup[iTile]; - - Bmemcpy(buf[0], laststr, 25); - Bstrupr(buf[0]); - - for (i=(i0+1)%MAXTILES; i!=i0; i=(i+1)%MAXTILES) - { - Bmemcpy(buf[1], names[i], 25); - buf[1][24]=0; - Bstrupr(buf[1]); - - if ((searchstr[0]=='^' && !Bstrncmp(buf[1], buf[0]+1, slen)) || - (searchstr[0]!='^' && strstr(buf[1], buf[0]))) - { - SelectAllTiles(i); - iTile = i; - break; - } - } - } - } - - // - // Adjust top-left to ensure tilenum is within displayed range of tiles - // - - while (iTile < iTopLeftTile - (moffset<0)?nXTiles:0) - iTopLeftTile -= nXTiles; - - while (iTile >= iTopLeftTile + nDisplayedTiles) - iTopLeftTile += nXTiles; - - iTopLeftTile = clamp(iTopLeftTile, 0, MAXTILES - nDisplayedTiles); - - - // SPACE keypress: mark/unmark selected tile - if (PRESSED_KEYSC(SPACE)) - { - if (iTile < localartlookupnum && IsValidTile(localartlookup[iTile])) - { - if (keystatus[KEYSC_LCTRL] && keystatus[KEYSC_RSHIFT]) - { - Bmemset(tilemarked, 0, sizeof(tilemarked)); - mark_lastk = -1; - noTilesMarked = 1; - } - else - { - int32_t k=iTile, kend, dir; - - if (noTilesMarked) - { - noTilesMarked = 0; - TMPERRMSG_PRINT("Beginning marking tiles. To group, press Ctrl-G. To reset, press LCtrl-RShift-SPACE."); - } - - if (mark_lastk>=0 && eitherCTRL) - { - kend = mark_lastk; - dir = ksgn(mark_lastk-k); - } - else - { - kend = k; - dir = 0; - } - - mark_lastk = k; - - for (; dir==0 || dir*(kend-k)>=1; k+=dir) - { - tilemarked[localartlookup[k]>>3] ^= (1<<(localartlookup[k]&7)); - if (dir==0) - break; - } - } - } - } - - if ((keystatus[KEYSC_ENTER] || (bstatus&1)) == 0) // uh ? Not escape key ? - { - idSelectedTile = idInitialTile; - } - else - { - if (iTile < localartlookupnum) - { - // Convert tile num from index to actual tile num - idSelectedTile = localartlookup[iTile]; - - // Check : if invalid tile selected, return original tile num - if (!IsValidTile(idSelectedTile)) - idSelectedTile = idInitialTile; - } - else - { - idSelectedTile = idInitialTile; - } - } - if (mtile!=iTile) // if changed by keyboard, update mouse cursor - { - searchx = ((iTile-iTopLeftTile)%nXTiles) * zoomsz + zoomsz/2; - searchy = ((iTile-iTopLeftTile)/nXTiles) * zoomsz + zoomsz/2 + moffset; - } - } - - searchx=omousex; - searchy=omousey; - - keystatus[KEYSC_ESC] = 0; - keystatus[KEYSC_ENTER] = 0; - - return idSelectedTile; -} - -// Dir = 0 (zoom out) or 1 (zoom in) -//void OnZoomInOut( int32_t *pZoom, int32_t Dir /*0*/ ) -//{ -//} - -static int32_t OnSaveTileGroup() -{ - int32_t i, n=0; - char hotkey; - const char *cp, *name; - - if (tile_groups==MAX_TILE_GROUPS) - TMPERRMSG_RETURN("Cannot save tile group: maximum number of groups (%d) exceeded.", MAX_TILE_GROUPS); - - for (i=0; i>3]&(1<<(i&7))); - - if (n==0) - TMPERRMSG_RETURN("Cannot save tile group: no tiles marked."); - else if (n > MAX_TILE_GROUP_ENTRIES) - TMPERRMSG_RETURN("Cannot save tile group: too many tiles in group. Have %d, max is %d.", - n, MAX_TILE_GROUP_ENTRIES); - - cp = getstring_simple("Hotkey for new group: ", "", 1); - if (!cp || !*cp) - return 1; - - hotkey = Btoupper(cp[0]); - if (!isalpha(hotkey)) - TMPERRMSG_RETURN("Hotkey must be alphabetic."); - - for (i=0; i>3]&(1<<((i)&7)))) - Bfprintf(fp, "\n"); - Bfprintf(fp, "tilegroup \"%s\"\n{\n", name); - Bfprintf(fp, TTAB "hotkey \"%c\"\n\n", hotkey); - - if (!(s_TileGroups[tile_groups].pIds = Bmalloc(n * sizeof(s_TileGroups[tile_groups].pIds[0])))) - TMPERRMSG_RETURN("Out of memory."); - - j = 0; - // tileranges for consecutive runs of 3 or more tiles - for (i=0; i=0 && !TBITCHK(i)) - { - if (names[lasti][0] && names[i-1][0]) - Bfprintf(fp, TTAB "tilerange %s %s\n", names[lasti], names[i-1]); - else - Bfprintf(fp, TTAB "tilerange %d %d\n", lasti, i-1); - - for (k=lasti; k>3] &= ~(1<<(k&7)); - } - - lasti = -1; - } - else if (lasti==-1 && TBITCHK(i)) - { - if (TBITCHK(i+1) && TBITCHK(i+2)) - { - lasti = i; - i += 2; - } - } - } - if (lasti>=0 && lasti<=MAXTILES-3) - { - for (k=lasti; k>3] &= ~(1<<(k&7)); - } - Bfprintf(fp, TTAB "tilerange %d %d\n", lasti, MAXTILES-1); - } - Bfprintf(fp, "\n"); - - // throw them all in a tiles{...} group else - Bfprintf(fp, TTAB "tiles\n" TTAB "{\n"); - for (i=0; i80) - { - Bfprintf(fp, "\n"); - col = 0; - } - } - } - if (col>0) - Bfprintf(fp, "\n"); - Bfprintf(fp, TTAB "}\n"); -#undef TBITCHK -#undef TTAB - Bfprintf(fp, "}\n"); - - Bfclose(fp); - - if (!(s_TileGroups[tile_groups].szText = Bstrdup(name))) - { - Bfree(s_TileGroups[tile_groups].pIds); - TMPERRMSG_RETURN("Out of memory."); - } - - s_TileGroups[tile_groups].nIds = n; - s_TileGroups[tile_groups].key1 = Btoupper(hotkey); - s_TileGroups[tile_groups].key2 = Btolower(hotkey); - s_TileGroups[tile_groups].color1 = s_TileGroups[tile_groups].color2 = 0; - tile_groups++; - - TMPERRMSG_PRINT("Wrote and installed new tile group."); - } - - return 0; -} - - -static int32_t OnGotoTile(int32_t iTile) -{ - int32_t iTemp, iNewTile; - char ch; - char szTemp[128]; - - //Automatically press 'V' - iTile = SelectAllTiles(iTile); - - bflushchars(); - - iNewTile = iTemp = 0; //iTile; //PK - - while (keystatus[KEYSC_ESC] == 0) - { - if (handleevents()) - quitevent = 0; - - idle_waitevent(); - - ch = bgetchar(); - - Bsprintf(szTemp, "Goto tile: %d_ ", iNewTile); - printext256(0, 0, whitecol, 0, szTemp, 0); - showframe(1); - - if (ch >= '0' && ch <= '9') - { - iTemp = (iNewTile*10) + (ch-'0'); - if (iTemp < MAXTILES) - iNewTile = iTemp; - } - else if (ch == 8) - { - iNewTile /= 10; - } - else if (ch == 13) - { - iTile = iNewTile; - break; - } - } - - clearkeys(); - - return iTile; -} - - -static int32_t LoadTileSet(const int32_t idCurrentTile, const int32_t *pIds, const int32_t nIds) -{ - int32_t iNewTile = 0; - int32_t i; - - localartlookupnum = nIds; - - for (i = 0; i < localartlookupnum; i++) - { - localartlookup[i] = pIds[i]; - // REM : Could we still utilise localartfreq[] to mark - // which tiles are currently used in the map ? Set to 0xFFFF perhaps ? - localartfreq[i] = 0; - - if (idCurrentTile == pIds[i]) - iNewTile = i; - } - - return iNewTile; -} - -static int32_t OnSelectTile(int32_t iTile) -{ - int32_t bDone = 0; - int32_t i; - char ch; - - if (tile_groups <= 0) - { - TMPERRMSG_PRINT("No tile groups loaded. Check for existence of `%s'.", default_tiles_cfg); - return iTile; - } - - SelectAllTiles(iTile); - - bflushchars(); - - setpolymost2dview(); - clearview(0); - - // - // Await appropriate selection keypress. - // - - bDone = 0; - - while (keystatus[KEYSC_ESC] == 0 && !bDone) - { - if (handleevents()) - quitevent = 0; - - idle_waitevent(); - - // - // Display the description strings for each available tile group - // - for (i = 0; i < tile_groups; i++) - { - if (s_TileGroups[i].szText != NULL) - { - if ((i+2)*16 > ydimgame) break; - Bsprintf(tempbuf,"(%c) %s",s_TileGroups[i].key1,s_TileGroups[i].szText); - printext256(10L, (i+1)*16, whitecol, -1, tempbuf, 0); - } - } - showframe(1); - - ch = bgetchar(); - - for (i = 0; i < tile_groups; i++) - { - if (s_TileGroups[i].pIds != NULL && s_TileGroups[i].key1) - if ((ch == s_TileGroups[i].key1) || (ch == s_TileGroups[i].key2)) - { - iTile = LoadTileSet(iTile, s_TileGroups[i].pIds, s_TileGroups[i].nIds); - bDone = 1; - } - } - } - - showframe(1); - - clearkeys(); - - return iTile; -} - -static const char *GetTilePixels(int32_t idTile) -{ - char *pPixelData = 0; - - if (idTile >= 0 && idTile < MAXTILES) - { - if (!waloff[idTile]) - loadtile(idTile); - - if (IsValidTile(idTile)) - pPixelData = (char *)waloff[idTile]; - } - - return pPixelData; -} - -static int32_t DrawTiles(int32_t iTopLeft, int32_t iSelected, int32_t nXTiles, int32_t nYTiles, - int32_t TileDim, int32_t offset, int32_t showmsg) -{ - int32_t XTile, YTile; - int32_t iTile, idTile; - int32_t XPos, YPos; - int32_t XOffset, YOffset; - int32_t i, marked; - const char *pRawPixels; - int32_t TileSizeX, TileSizeY; - int32_t DivInc,MulInc; - char *pScreen; - char szT[128]; - - begindrawing(); - - setpolymost2dview(); - - clearview(0); - - for (YTile = 0-(offset>0); YTile < nYTiles+(offset<0)+1; YTile++) - { - for (XTile = 0; XTile < nXTiles; XTile++) - { - iTile = iTopLeft + XTile + (YTile * nXTiles); - - if (iTile>=0 && iTile < localartlookupnum) - { - idTile = localartlookup[ iTile ]; - - // Get pointer to tile's raw pixel data - pRawPixels = GetTilePixels(idTile); - - if (pRawPixels != NULL) - { - XPos = XTile * TileDim; - YPos = YTile * TileDim+offset; - - if (polymost_drawtilescreen(XPos, YPos, idTile, TileDim, s_TileZoom)) - { - TileSizeX = tilesizx[ idTile ]; - TileSizeY = tilesizy[ idTile ]; - - DivInc = 1; - MulInc = 1; - - while ((TileSizeX/DivInc > TileDim) || (TileSizeY/DivInc) > TileDim) - { - DivInc++; - } - - if (DivInc == 1 && s_TileZoom) - { - while ((TileSizeX*(MulInc+1)) <= TileDim && (TileSizeY*(MulInc+1)) <= TileDim) - { - MulInc++; - } - } - - TileSizeX = (TileSizeX / DivInc) * MulInc; - TileSizeY = (TileSizeY / DivInc) * MulInc; - - for (YOffset = 0; YOffset < TileSizeY; YOffset++) - { - int32_t y=YPos+YOffset; - if (y>=0 && y= 0 && YPos <= ydim-20) - { - Bsprintf(szT, "%d", localartfreq[iTile]); - printext256(XPos, YPos, whitecol, -1, szT, 1); - } - } - - marked = (IsValidTile(idTile) && tilemarked[idTile>>3]&(1<<(idTile&7))); - - // - // Draw white box around currently selected tile or marked tile - // p1=(x1, y1), p2=(x1+TileDim-1, y1+TileDim-1) - // - if (iTile == iSelected || marked) - { - int32_t x1 = ((iTile-iTopLeft) % nXTiles)*TileDim; - int32_t y1 = ((iTile - ((iTile-iTopLeft) % nXTiles) - iTopLeft)/nXTiles)*TileDim + offset; - int32_t x2 = x1+TileDim-1; - int32_t y2 = y1+TileDim-1; - - char markedcol = editorcolors[14]; - - setpolymost2dview(); - - y1=max(y1, 0); - y2=min(y2, ydim-1); - - { - // box - int32_t xx[] = {x1, x1, x2, x2, x1}; - int32_t yy[] = {y1, y2, y2, y1, y1}; - plotlines2d(xx, yy, 5, iTile==iSelected ? whitecol : markedcol); - } - - // cross - if (marked) - { - int32_t xx[] = {x1, x2}; - int32_t yy[] = {y1, y2}; - - plotlines2d(xx, yy, 2, markedcol); - swaplong(&yy[0], &yy[1]); - plotlines2d(xx, yy, 2, markedcol); - } - } - } - } - } - - if (iSelected < 0 || iSelected >= MAXTILES) - { - enddrawing(); - return 1; - } - - idTile = localartlookup[ iSelected ]; - - // Draw info bar at bottom. - - // Clear out behind the text for improved visibility. - //drawline256(0, (ydim-12)<<12, xdim<<12, (ydim-12)<<12, whitecol); - for (i=ydim-12; i>2,ydim-10,whitecol,-1,szT,0); - - // EditArt offset flags. - Bsprintf(szT,"%d, %d", (int8_t)((picanm[idTile]>>8)&0xFF), (int8_t)((picanm[idTile]>>16)&0xFF)); - printext256((xdim>>2)+100,ydim-10,whitecol,-1,szT,0); - - // EditArt animation flags. - if (picanm[idTile]&0xc0) - { - static const char *anmtype[] = {"", "Osc", "Fwd", "Bck"}; - - Bsprintf(szT,"%s %d", anmtype[(picanm[idTile]&0xc0)>>6], picanm[idTile]&0x3f); - printext256((xdim>>2)+100+14*8,ydim-10,whitecol,-1,szT,0); - } - - if (showmsg) - TMPERRMSG_SHOW(0); - - m32_showmouse(); - - enddrawing(); - showframe(1); - - return(0); - -} - -#undef TMPERRMSG_SHOW -#undef TMPERRMSG_PRINT -#undef TMPERRMSG_RETURN - - -static int32_t spriteonceilingz(int32_t searchwall) -{ -// int32_t z=sprite[searchwall].z; - - int32_t z = getceilzofslope(searchsector,sprite[searchwall].x,sprite[searchwall].y); - int32_t tmphei = spriteheight(searchwall, NULL); - - if (sprite[searchwall].cstat&128) - z -= tmphei>>1; - if ((sprite[searchwall].cstat&48) != 32) - z += tmphei; - return z; -} - -static int32_t spriteongroundz(int32_t searchwall) -{ -// int32_t z=sprite[searchwall].z; - - int32_t z = getflorzofslope(searchsector,sprite[searchwall].x,sprite[searchwall].y); - - if (sprite[searchwall].cstat&128) - z -= spriteheight(searchwall, NULL)>>1; - return z; -} - -#define WIND1X 3 -#define WIND1Y 150 - -static void tileinfo_doprint(int32_t x, int32_t y, char *buf, const char *label, int32_t value, int32_t pos) -{ - int32_t small = (xdimgame<=640), i = ydimgame>>6; - Bsprintf(buf,"%s:%4d",label,value); - printext256(x+2, y+2+i*pos, 0, -1, buf, small); - printext256(x, y+i*pos, whitecol, -1, buf, small); -} - -static void drawtileinfo(const char *title,int32_t x,int32_t y,int32_t picnum,int32_t shade,int32_t pal,int32_t cstat,int32_t lotag,int32_t hitag,int32_t extra) -{ - char buf[64]; - int32_t small = (xdimgame<=640); - int32_t scale=65536; - int32_t x1; - int32_t oviewingrange=viewingrange, oyxaspect=yxaspect; - - x1 = x+80; - if (small) - x1 /= 2; - - x1 *= 320.0/xdimgame; - scale /= (max(tilesizx[picnum],tilesizy[picnum])/24.0); - - setaspect(65536L, (int32_t)divscale16(ydim*320L,xdim*200L)); - // +1024: prevents rotatesprite from setting aspect itself - rotatesprite((x1+13)<<16,(y+11)<<16,scale,0, picnum,shade,pal, 2+1024, 0,0,xdim-1,ydim-1); - setaspect(oviewingrange, oyxaspect); - - x *= xdimgame/320.0; - y *= ydimgame/200.0; - - begindrawing(); - printext256(x+2,y+2,0,-1,title,small); - printext256(x,y,255-13,-1,title,small); - - tileinfo_doprint(x, y, buf, "Pic", picnum, 1); - tileinfo_doprint(x, y, buf, "Shd", shade, 2); - tileinfo_doprint(x, y, buf, "Pal", pal, 3); - tileinfo_doprint(x, y, buf, "Cst", cstat, 4); - tileinfo_doprint(x, y, buf, "Lot", lotag, 5); - tileinfo_doprint(x, y, buf, "Hit", hitag, 6); - tileinfo_doprint(x, y, buf, "Ext", extra, 7); - - enddrawing(); -} -//int32_t snap=0; -//int32_t saveval1,saveval2,saveval3; - -static inline void getnumber_dochar(char *ptr, int32_t num) -{ - *ptr = (char) num; -} - -static inline void getnumber_doint16_t(int16_t *ptr, int32_t num) -{ - *ptr = (int16_t) num; -} - -static inline void getnumber_doint32(int32_t *ptr, int32_t num) -{ - *ptr = (int32_t) num; -} - -static inline void getnumber_doint64(int64_t *ptr, int32_t num) -{ - *ptr = (int64_t) num; -} - -static void getnumberptr256(const char *namestart, void *num, int32_t bytes, int32_t maxnumber, char sign, void *(func)(int32_t)) -{ - char buffer[80], ch; - int32_t n, danum = 0, oldnum; - - switch (bytes) - { - case 1: - danum = *(char *)num; - break; - case 2: - danum = *(int16_t *)num; - break; - case 4: - danum = *(int32_t *)num; - break; - case 8: - danum = *(int64_t *)num; - break; - } - - oldnum = danum; - bflushchars(); - while (keystatus[0x1] == 0) - { - if (handleevents()) - quitevent = 0; - - drawrooms(pos.x,pos.y,pos.z,ang,horiz,cursectnum); - ExtAnalyzeSprites(); - drawmasks(); -#ifdef POLYMER - if (rendmode == 4 && searchit == 2) - { - polymer_editorpick(); - drawrooms(pos.x,pos.y,pos.z,ang,horiz,cursectnum); - ExtAnalyzeSprites(); - drawmasks(); - } -#endif - - ch = bgetchar(); - - if (keystatus[0x1]) break; - - clearkeys(); - - mouseb = 0; - searchx = osearchx; - searchy = osearchy; - - ExtCheckKeys(); - - Bsprintf(buffer,"%s%d",namestart,danum); - if (totalclock & 32) Bstrcat(buffer,"_ "); - printmessage256(0, 0, buffer); - if (func != NULL) - { - Bsprintf(buffer,"%s",(char *)func((int32_t)danum)); - printmessage256(0, 9, buffer); - } - showframe(1); - - if (ch >= '0' && ch <= '9') - { - if (danum >= 0) - { - n = (danum*10)+(ch-'0'); - if (n <= maxnumber) danum = n; - } - else if (sign) - { - n = (danum*10)-(ch-'0'); - if (n >= -maxnumber) danum = n; - } - } - else if (ch == 8 || ch == 127) // backspace - { - danum /= 10; - } - else if (ch == 13) - { - if (danum != oldnum) - asksave = 1; - oldnum = danum; - break; - } - else if (ch == '-' && sign) // negate - { - danum = -danum; - } - switch (bytes) - { - case 1: - getnumber_dochar(num, danum); - break; - case 2: - getnumber_doint16_t(num, danum); - break; - case 4: - getnumber_doint32(num, danum); - break; - case 8: - getnumber_doint64(num, danum); - break; - } - } - clearkeys(); - - lockclock = totalclock; //Reset timing - - switch (bytes) - { - case 1: - getnumber_dochar(num, oldnum); - break; - case 2: - getnumber_doint16_t(num, oldnum); - break; - case 4: - getnumber_doint32(num, oldnum); - break; - case 8: - getnumber_doint64(num, oldnum); - break; - } -} - -#if 0 -int64_t ldistsqr(spritetype *s1,spritetype *s2) -{ - return (((int64_t)(s2->x - s1->x))*((int64_t)(s2->x - s1->x)) + - ((int64_t)(s2->y - s1->y))*((int64_t)(s2->y - s1->y))); -} -#endif - -static void TextEntryMode(int16_t startspr) -{ - char ch, buffer[80], doingspace=0; - int16_t daang = 0, t, alphidx, basetile, linebegspr, curspr, cursor; - int32_t i, j, k, dax = 0, day = 0; - static uint8_t hgap=0, vgap=4; - static uint8_t spcgap[MAX_ALPHABETS], firstrun=1; - spritetype *sp; - - int16_t *spritenums; - int32_t stackallocsize=32, numletters=0; - - if (firstrun) - { - firstrun=0; - for (i=0; i=MAXSPRITES || - sprite[startspr].statnum == MAXSTATUS) - return; - - if (numalphabets == 0) - { - message("Alphabet configuration not read."); - return; - } - - if ((sprite[startspr].cstat&16) == 0) - { - message("Must point at a wall-aligned text sprite."); - return; - } - - t = sprite[startspr].picnum; - alphidx = -1; - for (i=0; i>8)&255); - sprite[startspr].yoffset = -(((picanm[t])>>16)&255); - - spritenums = Bmalloc(stackallocsize * sizeof(int16_t)); - if (!spritenums) goto ERROR_NOMEMORY; - - cursor = insertsprite(sprite[startspr].sectnum,0); - if (cursor < 0) goto ERROR_TOOMANYSPRITES; - - updatenumsprites(); - - sp = &sprite[cursor]; - Bmemcpy(sp, &sprite[startspr], sizeof(spritetype)); - sp->yoffset = 0; - sp->picnum = SMALLFNTCURSOR; - sp->xrepeat = clamp(sp->xrepeat/tilesizx[sp->picnum], 2, 255); - sp->yrepeat = clamp((sp->yrepeat*tilesizy[sprite[startspr].picnum])/tilesizy[sp->picnum], 4, 255); - sp->pal = 0; - sp->cstat = 18; - - bflushchars(); - while (keystatus[0x1] == 0) - { - if (handleevents()) - quitevent = 0; - - - if (PRESSED_KEYSC(UP)) // vertical gap in pixels (32 x-units) - vgap += (vgap<255); - - if (PRESSED_KEYSC(DOWN)) - vgap -= (vgap>0); - - if (PRESSED_KEYSC(RIGHT)) // horizontal gap in half pixels - hgap += (hgap<255); - - if (PRESSED_KEYSC(LEFT)) - hgap -= (hgap>0); - - if (PRESSED_KEYSC(INSERT)) // space gap in half pixels - spcgap[alphidx] += (spcgap[alphidx]<255); - - if (PRESSED_KEYSC(DELETE)) - spcgap[alphidx] -= (spcgap[alphidx]>1); - - if (PRESSED_KEYSC(HOME)) // shade - sprite[linebegspr].shade += (sprite[linebegspr].shade<127); - - if (PRESSED_KEYSC(END)) - sprite[linebegspr].shade -= (sprite[linebegspr].shade>-128); - - if (PRESSED_KEYSC(PGUP)) // pal - sprite[linebegspr].pal += (sprite[linebegspr].pal<255); - - if (PRESSED_KEYSC(PGDN)) - sprite[linebegspr].pal -= (sprite[linebegspr].pal>0); - - drawrooms(pos.x,pos.y,pos.z,ang,horiz,cursectnum); - ExtAnalyzeSprites(); - drawmasks(); -#ifdef POLYMER - if (rendmode == 4 && searchit == 2) - { - polymer_editorpick(); - drawrooms(pos.x,pos.y,pos.z,ang,horiz,cursectnum); - ExtAnalyzeSprites(); - drawmasks(); - } -#endif - - ch = bgetchar(); - - if (keystatus[0x1]) break; - - clearkeys(); - - mouseb = 0; - searchx = osearchx; - searchy = osearchy; - - ExtCheckKeys(); - - printmessage256(0,0,"^251Text entry mode.^31 Navigation keys change vars."); - Bsprintf(buffer, "Hgap=%d, Vgap=%d, SPCgap=%d, Shd=%d, Pal=%d", - hgap, vgap, spcgap[alphidx], sprite[linebegspr].shade, sprite[linebegspr].pal); - printmessage256(0, 9, buffer); - showframe(1); - - // --- - sp = &sprite[curspr]; - if (!doingspace) - { - dax = sp->x; day = sp->y; - daang = sp->ang; - } - - j = sp->xrepeat*(hgap+tilesizx[sp->picnum]+2); - { - vec3_t vect; - vect.x = dax + ((j*sintable[daang])>>17); - vect.y = day - ((j*sintable[(daang+512)&2047])>>17); - vect.z = sp->z; - setsprite(cursor,&vect); - } - - if (ch>=33 && ch<=126 && alphabets[alphidx].pic[ch-33] >= 0) - { - int16_t sect; - - // mapping char->tilenum - t = alphabets[alphidx].pic[ch-33]; - j = sp->xrepeat*(hgap+tilesizx[sp->picnum]+tilesizx[t]); - - dax += (j*sintable[daang])>>17; - day -= (j*sintable[(daang+512)&2047])>>17; - dax += (j*sintable[(sprite[curspr].ang+2560)&2047])>>17; - day += (j*sintable[(sprite[curspr].ang+2048)&2047])>>17; - - sect = sprite[curspr].sectnum; - updatesector(dax,day,§); - if (numsprites < MAXSPRITES && sect >= 0) - { - i = insertsprite(sect,0); - Bmemcpy(&sprite[i], &sprite[linebegspr], sizeof(spritetype)); - sprite[i].sectnum = sect; - - sprite[i].x = dax, sprite[i].y = day; - sprite[i].picnum = t; - sprite[i].ang = daang; - - sprite[i].xoffset = -(((picanm[sprite[i].picnum])>>8)&255); - sprite[i].yoffset = -(((picanm[sprite[i].picnum])>>16)&255); - sprite[i].xoffset += alphabets[alphidx].xofs[(int32_t)ch-33]; - sprite[i].yoffset += alphabets[alphidx].yofs[(int32_t)ch-33]; - - DoSpriteOrnament(i); - - for (k=0; k= stackallocsize) - { - stackallocsize *= 2; - spritenums = Brealloc(spritenums, stackallocsize*sizeof(int16_t)); - if (!spritenums) goto ERROR_NOMEMORY; - } - spritenums[numletters++] = i; - } - } - else if (ch == 32) - { - dax += ((sp->xrepeat*spcgap[alphidx]*sintable[daang])>>17); - day -= ((sp->xrepeat*spcgap[alphidx]*sintable[(daang+512)&2047])>>17); - doingspace = 1; - } - else if (ch == 8) // backspace - { - if (doingspace) - doingspace = 0; - else if (numletters > 0) - { - int16_t last = spritenums[numletters-1]; - - if (sprite[last].z != sprite[linebegspr].z) // only "delete" line break - { - sprite[linebegspr].z = sprite[last].z; - curspr = last; - } - else if (numletters > 1) - { - int16_t sectolast = spritenums[numletters-2]; - - if (sprite[last].z == sprite[sectolast].z) - curspr = sectolast; - else // if we delete the first letter on the line - curspr = linebegspr; - - numletters--; - deletesprite(last); - - updatenumsprites(); - asksave = 1; - } - else - { - numletters--; - deletesprite(last); - curspr = linebegspr; - updatenumsprites(); - asksave = 1; - } - } - else - { - sprite[linebegspr].z -= ((sprite[linebegspr].yrepeat*(vgap+tilesizy[basetile]))<<2); - asksave = 1; - } - } - else if (ch == 13) // enter - { - sprite[linebegspr].z += ((sprite[linebegspr].yrepeat*(vgap+tilesizy[basetile]))<<2); - curspr = linebegspr; - doingspace = 0; - asksave = 1; - } - } - -ERROR_TOOMANYSPRITES: - if (cursor < 0) message("Too many sprites in map!"); - else deletesprite(cursor); - updatenumsprites(); - -ERROR_NOMEMORY: - if (spritenums) Bfree(spritenums); - else message("Out of memory!"); - - clearkeys(); - - lockclock = totalclock; //Reset timing -} - -static void mouseaction_movesprites(int32_t *sumxvect, int32_t *sumyvect, int32_t yangofs, int32_t mousexory) -{ - int32_t xvect,yvect, daxvect,dayvect, ii, spi; - int32_t units, gridlock = (eitherCTRL && grid > 0 && grid < 9); - spritetype *sp = &sprite[searchwall]; - int16_t tsect = sp->sectnum; - vec3_t tvec = { sp->x, sp->y, sp->z }; - - xvect = -((mousexory*(int32_t)sintable[(ang+yangofs+512)&2047])<<3); - yvect = -((mousexory*(int32_t)sintable[(ang+yangofs)&2047])<<3); - - if (gridlock) - { - units = 1<<(11-grid); - - if ((tvec.x & (units-1)) || (tvec.y & (units-1))) - { - daxvect = ((tvec.x & ~(units-1)) - tvec.x)<<14; - dayvect = ((tvec.y & ~(units-1)) - tvec.y)<<14; - } - else - { - units <<= 14; - - *sumxvect += xvect; - *sumyvect += yvect; - - if (klabs(*sumxvect) >= units) - { - daxvect = ((*sumxvect)/units)*units; - *sumxvect %= units; - } - else - daxvect = 0; - - if (klabs(*sumyvect) >= units) - { - dayvect = ((*sumyvect)/units)*units; - *sumyvect %= units; - } - else - dayvect = 0; - } - } - else - { - daxvect = xvect; - dayvect = yvect; - } - - if (highlightcnt<=0 || (show2dsprite[searchwall>>3] & (1<<(searchwall&7)))==0) - { - clipmove(&tvec, &tsect, daxvect,dayvect, sp->clipdist,64<<4,64<<4, spnoclip?1:CLIPMASK0); - setsprite(searchwall, &tvec); - } - else - { - xvect = daxvect; - yvect = dayvect; - - // test run - for (ii=0; ii 0 && AmbienceToggle) - { - M32_MoveFX(); - S_Update(); - } - - if (usedcount && !helpon) - { -#if 0 - if (!AIMING_AT_SPRITE) - { - count=0; - for (i=0; i -1 && searchsector < numsectors) - { - char lines[8][64]; - int32_t dist, height1=0,height2=0,height3=0, num=0; - int32_t x,y; - int16_t w; - - if (infobox&1) - { - height2 = sector[searchsector].floorz - sector[searchsector].ceilingz; - - switch (searchstat) - { - case SEARCH_WALL: - case SEARCH_MASKWALL: - w = SELECT_WALL(); - drawtileinfo("Current", WIND1X,WIND1Y, - AIMING_AT_WALL ? wall[w].picnum : wall[w].overpicnum, - wall[w].shade, wall[w].pal, wall[searchwall].cstat, - wall[searchwall].lotag, wall[searchwall].hitag,wall[searchwall].extra); - - dist = wallength(searchwall); - - if (wall[searchwall].nextsector >= 0 && wall[searchwall].nextsector < numsectors) - { - int32_t nextsect = wall[searchwall].nextsector; - height1 = sector[searchsector].floorz - sector[nextsect].floorz; - height2 = sector[nextsect].floorz - sector[nextsect].ceilingz; - height3 = sector[nextsect].ceilingz - sector[searchsector].ceilingz; - } - - Bsprintf(lines[num++],"Panning: %d, %d", wall[w].xpanning, wall[w].ypanning); - Bsprintf(lines[num++],"Repeat: %d, %d", wall[searchwall].xrepeat, wall[searchwall].yrepeat); - Bsprintf(lines[num++],"Overpic: %d", wall[searchwall].overpicnum); - lines[num++][0]=0; - - if (getmessageleng) - break; - - Bsprintf(lines[num++],"^251Wall %d^31", searchwall); - - if (wall[searchwall].nextsector!=-1) - Bsprintf(lines[num++],"LoHeight:%d, HiHeight:%d, Length:%d",height1,height3,dist); - else - Bsprintf(lines[num++],"Height:%d, Length:%d",height2,dist); - break; - - case SEARCH_CEILING: - case SEARCH_FLOOR: - drawtileinfo("Current", WIND1X, WIND1Y, AIMED_CEILINGFLOOR(picnum), AIMED_CEILINGFLOOR(shade), - AIMED_CEILINGFLOOR(pal), AIMED_CEILINGFLOOR(stat), - sector[searchsector].lotag, sector[searchsector].hitag, sector[searchsector].extra); - - Bsprintf(lines[num++],"Panning: %d, %d", AIMED_CEILINGFLOOR(xpanning), AIMED_CEILINGFLOOR(ypanning)); - Bsprintf(lines[num++],"%sZ: %d", Typestr[searchstat], AIMED_CEILINGFLOOR(z)); - Bsprintf(lines[num++],"Slope: %d", AIMED_CEILINGFLOOR(heinum)); - lines[num++][0]=0; - - if (getmessageleng) - break; - - Bsprintf(lines[num++],"^251Sector %d^31 %s, Lotag:%s", searchsector, typestr[searchstat], ExtGetSectorCaption(searchsector)); - Bsprintf(lines[num++],"Height: %d, Visibility:%d", height2, sector[searchsector].visibility); - break; - - case SEARCH_SPRITE: - drawtileinfo("Current", WIND1X, WIND1Y, sprite[searchwall].picnum, sprite[searchwall].shade, - sprite[searchwall].pal, sprite[searchwall].cstat, sprite[searchwall].lotag, - sprite[searchwall].hitag, sprite[searchwall].extra); - - Bsprintf(lines[num++], "Repeat: %d,%d", sprite[searchwall].xrepeat, sprite[searchwall].yrepeat); - Bsprintf(lines[num++], "PosXY: %d,%d%s", sprite[searchwall].x, sprite[searchwall].y, - sprite[searchwall].xoffset|sprite[searchwall].yoffset ? " ^251*":""); - Bsprintf(lines[num++], "PosZ: "" %d", sprite[searchwall].z);// prevents tab character - lines[num++][0]=0; - - if (getmessageleng) - break; - - if (sprite[searchwall].picnum<0 || sprite[searchwall].picnum>=MAXTILES) - break; - - if (names[sprite[searchwall].picnum][0]) - { - if (sprite[searchwall].picnum==SECTOREFFECTOR) - Bsprintf(lines[num++],"^251Sprite %d^31 %s", searchwall, SectorEffectorText(searchwall)); - else - Bsprintf(lines[num++],"^251Sprite %d^31 %s", searchwall, names[sprite[searchwall].picnum]); - } - else Bsprintf(lines[num++],"^251Sprite %d^31, picnum %d", searchwall, sprite[searchwall].picnum); - - Bsprintf(lines[num++], "Elevation:%d", - getflorzofslope(searchsector, sprite[searchwall].x, sprite[searchwall].y) - sprite[searchwall].z); - break; - } - } - - x = WIND1X*(xdimgame/320.); - y = WIND1Y*(ydimgame/200.); - y += (ydimgame>>6)*8; - - if (getmessageleng) - { - while (num < 4) - lines[num++][0] = 0; - Bsprintf(lines[num++],"^251%s",getmessage); - } - - begindrawing(); - for (i=0; i>6; - } - enddrawing(); - } - - VM_OnEvent(EVENT_PREKEYS3D, -1); - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(V)) // ' V - { - if (AIMING_AT_CEILING_OR_FLOOR) - getnumberptr256("Sector visibility: ", §or[searchsector].visibility, sizeof(sector[0].visibility), 255, 0, NULL); - } - - if (keystatus[KEYSC_SEMI] && PRESSED_KEYSC(V)) // ; V - { - int16_t currsector; - uint8_t visval; - - if (highlightsectorcnt == -1) - { - message("You didn't select any sectors!"); - return; - } - - visval = getnumber256("Visibility of selected sectors: ", sector[searchsector].visibility, 255, 0); - - if (AskIfSure(0)) - return; - - for (i=0; i= 0) - NEXTWALL(searchwall).overpicnum = tempint; - - if (AIMING_AT_SPRITE) - correct_sprite_yoffset(searchwall); - - if (oldtile != tempint) - asksave = 1; - } - } - - if (PRESSED_KEYSC(3)) /* 3 (toggle floor-over-floor (cduke3d only) */ - { - floor_over_floor = !floor_over_floor; - // if (!floor_over_floor) ResetFOFSize(); - message("Floor-over-floor display %s",floor_over_floor?"enabled":"disabled"); - } - - if (PRESSED_KEYSC(F3)) - { - mlook = !mlook; - message("Mouselook: %s",mlook?"enabled":"disabled"); - } - - if (PRESSED_KEYSC(F4)) - { - AmbienceToggle = !AmbienceToggle; - message("Ambience sounds: %s",AmbienceToggle?"enabled":"disabled"); - if (!AmbienceToggle) - { - FX_StopAllSounds(); - S_ClearSoundLocks(); - } - } - - // PK - if (PRESSED_KEYSC(F5)) - { - unrealedlook = !unrealedlook; - message("UnrealEd mouse navigation: %s",unrealedlook?"enabled":"disabled"); - } - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(DELETE)) // ' del - { - if (AIMING_AT_WALL_OR_MASK) - { - wall[searchwall].cstat = 0; - message("Wall %d cstat = 0", searchwall); - } - else if (AIMING_AT_SPRITE) - { - sprite[searchwall].cstat = 0; - message("Sprite %d cstat = 0", searchwall); - } - } - - // 'P and ;P - Will copy palette to all sectors/walls/sprites highlighted with R-Alt key - if ((keystatus[KEYSC_QUOTE] || keystatus[KEYSC_SEMI]) && PRESSED_KEYSC(P)) // ' P ; P - { - int16_t w, start_wall, end_wall, currsector; - int8_t pal[4]; - - if (highlightsectorcnt == -1) - { - message("You didn't select any sectors!"); - return; - } - - if (keystatus[KEYSC_QUOTE]) - { - pal[0] = getnumber256("Ceiling palette: ", -1, MAXPALOOKUPS-1, 1); - pal[1] = getnumber256("Floor palette: ", -1, MAXPALOOKUPS-1, 1); - pal[2] = getnumber256("Wall palette: ", -1, MAXPALOOKUPS-1, 1); - pal[3] = getnumber256("Sprite palette: ", -1, MAXPALOOKUPS-1, 1); - } - else - { - pal[0] = getnumber256("Global palette: ", 0, MAXPALOOKUPS-1, 0); - pal[1] = pal[2] = pal[3] = pal[0]; - } - - if (AskIfSure(0)) return; - - for (i = 0; i < highlightsectorcnt; i++) - { - currsector = highlightsector[i]; - - if (pal[0] > -1) - sector[currsector].ceilingpal = pal[0]; - if (pal[1] > -1) - sector[currsector].floorpal = pal[1]; - - // Do all the walls in the sector - start_wall = sector[currsector].wallptr; - end_wall = start_wall + sector[currsector].wallnum; - - if (pal[2] > -1) - for (w = start_wall; w < end_wall; w++) - wall[w].pal = pal[2]; - - if (pal[3] > -1) - { - for (k=0; k= 0) - { - j = nextspritesect[w]; - sprite[w].pal = pal[3]; - w = j; - } - } - } - } - - message("Palettes changed"); - } - - if (PRESSED_KEYSC(DELETE)) - { - if (AIMING_AT_SPRITE) - { - deletesprite(searchwall); - updatenumsprites(); - message("Sprite %d deleted",searchwall); - if (AmbienceToggle) - { - sprite[searchwall].filler &= (~1); - S_StopEnvSound(sprite[searchwall].lotag, searchwall); - } - asksave = 1; - } - } - - if (PRESSED_KEYSC(F6)) //F6 - { - autospritehelp = !autospritehelp; - message("Automatic SECTOREFFECTOR help %s", autospritehelp?"enabled":"disabled"); - } - if (PRESSED_KEYSC(F7)) //F7 - { - autosecthelp = !autosecthelp; - message("Automatic sector tag help %s", autosecthelp?"enabled":"disabled"); - } - - if (autospritehelp && helpon==0) - { - if (AIMING_AT_SPRITE && sprite[searchwall].picnum==SECTOREFFECTOR) - ShowFileText("sehelp.hlp", 1); - else if (AIMING_AT_CEILING_OR_FLOOR) - ShowFileText("sthelp.hlp", 1); - } - - if (AIMING_AT_WALL_OR_MASK && PRESSED_KEYSC(PERIOD)) - { - AutoAlignWalls(searchwall, 0); - message("Wall %d autoalign", searchwall); - } - - - tsign = 0; - tsign -= PRESSED_KEYSC(COMMA); - tsign += PRESSED_KEYSC(PERIOD); - - if (tsign) // , . Search & fix panning to the left/right (3D) - { - if (AIMING_AT_SPRITE) - { - sprite[searchwall].ang += tsign<<(!eitherSHIFT*7); - sprite[searchwall].ang &= 2047; - message("Sprite %d angle: %d", searchwall, sprite[searchwall].ang); - } - } - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(L)) // ' L - { - i = noclip; - noclip = 1; - - switch (searchstat) - { - case SEARCH_CEILING: - getnumberptr256("Sector ceilingz: ", §or[searchsector].ceilingz, - sizeof(sector[0].ceilingz), BZ_MAX, 1, NULL); - if (!(sector[searchsector].ceilingstat&2)) - { - sector[searchsector].ceilingstat |= 2; - sector[searchsector].ceilingheinum = 0; - } - getnumberptr256("Sector ceiling slope: ", §or[searchsector].ceilingheinum, - sizeof(sector[0].ceilingheinum), 32767, 1, NULL); - break; - case SEARCH_FLOOR: - getnumberptr256("Sector floorz: ", §or[searchsector].floorz, - sizeof(sector[0].floorz), BZ_MAX, 1, NULL); - if (!(sector[searchsector].floorstat&2)) - { - sector[searchsector].floorheinum = 0; - sector[searchsector].floorstat |= 2; - } - getnumberptr256("Sector floor slope: ", §or[searchsector].floorheinum, - sizeof(sector[0].floorheinum), 32767, 1, NULL); - break; - - case SEARCH_SPRITE: - getnumberptr256("Sprite x: ", &sprite[searchwall].x, sizeof(sprite[0].x), editorgridextent-1, 1, NULL); - getnumberptr256("Sprite y: ", &sprite[searchwall].y, sizeof(sprite[0].y), editorgridextent-1, 1, NULL); - getnumberptr256("Sprite z: ", &sprite[searchwall].z, sizeof(sprite[0].z), BZ_MAX, 1, NULL); - getnumberptr256("Sprite angle: ", &sprite[searchwall].ang, sizeof(sprite[0].ang), 2047, 0, NULL); - break; - } - - if (sector[searchsector].ceilingheinum == 0) - sector[searchsector].ceilingstat &= ~2; - else - sector[searchsector].ceilingstat |= 2; - - if (sector[searchsector].floorheinum == 0) - sector[searchsector].floorstat &= ~2; - else - sector[searchsector].floorstat |= 2; - - asksave = 1; - noclip = i; - } - - - getzrange(&pos, cursectnum, &hiz, &hihit, &loz, &lohit, 128L, CLIPMASK0); - - if (PRESSED_KEYSC(CAPS) || (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(Z))) // CAPS LOCK - { - zmode = (zmode+1)%3; - if (zmode == 1) - zlock = (loz-pos.z)&0xfffffc00; - switch (zmode) - { - case 0: message("Zmode = Gravity"); break; - case 1: message("Zmode = Locked/Sector"); break; - case 2: message("Zmode = Locked/Free"); break; - } - } - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(M)) // 'M - { - if (ASSERT_AIMING) - { - Bsprintf(tempbuf, "%s extra: ", Typestr_wss[searchstat]); - getnumberptr256(tempbuf, &AIMED(extra), sizeof(int16_t), BTAG_MAX, 1, NULL); - asksave = 1; - } - } - - if (PRESSED_KEYSC(1) && ASSERT_AIMING) // 1 (make 1-way wall) - { - if (!AIMING_AT_SPRITE) - { - wall[searchwall].cstat ^= 32; - message("Wall %d one side masking bit %s", searchwall, ONOFF(wall[searchwall].cstat&32)); - } - else - { - i = sprite[searchwall].cstat; - i ^= 64; - if ((i&48) == 32) - { - i &= ~8; - if ((i&64) && pos.z>sprite[searchwall].z) - i |= 8; - } - message("Sprite %d one sided bit %s", searchwall, ONOFF(i&64)); - sprite[searchwall].cstat = i; - } - asksave = 1; - } - - if (PRESSED_KEYSC(2)) // 2 (bottom wall swapping) - { - if (searchstat != SEARCH_SPRITE) - { - wall[searchwall].cstat ^= 2; - message("Wall %d bottom texture swap bit %s", searchwall, ONOFF(wall[searchwall].cstat&2)); - asksave = 1; - } - } - - if (PRESSED_KEYSC(O)) // O (top/bottom orientation - for doors) - { - if (AIMING_AT_WALL_OR_MASK) - { - int16_t w = SELECT_WALL(); - wall[w].cstat ^= 4; - message("Wall %d %s orientation", w, wall[w].cstat&4?"bottom":"top"); - asksave = 1; - } - else if (AIMING_AT_SPRITE) // O (ornament onto wall) (2D) - { - DoSpriteOrnament(searchwall); - message("Sprite %d ornament onto wall", searchwall); - asksave = 1; - } - } - - if (PRESSED_KEYSC(M)) // M (masking walls) - { - if (!AIMING_AT_SPRITE && ASSERT_AIMING) - { - int16_t next = wall[searchwall].nextwall; - - if (next >= 0) - { - wall[searchwall].cstat ^= 16; - message("Wall %d masking bit %s", searchwall, ONOFF(wall[searchwall].cstat&16)); - - wall[searchwall].cstat &= ~8; - - if (wall[searchwall].cstat&16) - { - if (!eitherSHIFT) - { - wall[next].cstat |= 8; //auto other-side flip - wall[next].cstat |= 16; - wall[next].overpicnum = wall[searchwall].overpicnum; - } - } - else - { - if (!eitherSHIFT) - { - wall[next].cstat &= ~8; //auto other-side unflip - wall[next].cstat &= ~16; - } - } - - wall[searchwall].cstat &= ~32; - if (!eitherSHIFT) - wall[next].cstat &= ~32; - - asksave = 1; - } - } - } - - if (PRESSED_KEYSC(H)) // H (hitscan sensitivity) - { - if (keystatus[KEYSC_QUOTE]) - { - if (ASSERT_AIMING) - { - Bsprintf(tempbuf, "%s hitag: ", Typestr_wss[searchstat]); - getnumberptr256(tempbuf, &AIMED(hitag), sizeof(int16_t), BTAG_MAX, 0, NULL); - } - } - else - { - if (AIMING_AT_SPRITE) - { - sprite[searchwall].cstat ^= 256; - message("Sprite %d hitscan sensitivity bit %s", searchwall, ONOFF(sprite[searchwall].cstat&256)); - asksave = 1; - } - else - { - wall[searchwall].cstat ^= 64; - - if (wall[searchwall].nextwall >= 0 && !eitherSHIFT) - { - NEXTWALL(searchwall).cstat &= ~64; - NEXTWALL(searchwall).cstat |= (wall[searchwall].cstat&64); - } - message("Wall %d hitscan sensitivity bit %s", searchwall, ONOFF(wall[searchwall].cstat&64)); - - asksave = 1; - } - } - } - - smooshyalign = keystatus[KEYSC_gKP5]; - repeatpanalign = eitherSHIFT || eitherALT || (bstatus&2); - - { - static int32_t omlook; - - if (mlook == 2) - { - mlook = omlook; - } - else if (!unrealedlook && (bstatus&4)) - { - omlook = mlook; - mlook = 2; - } - } - - // PK: no btn: wheel changes shade - if ((bstatus&(16|32) && !(bstatus&(1|2|4))) || keystatus[KEYSC_gMINUS] || keystatus[KEYSC_gPLUS]) - { - // if (bstatus&1) - // mlook = 2; - tsign = 0; - if (bstatus&32 || PRESSED_KEYSC(gMINUS)) // - - tsign = 1; - if (bstatus&16 || PRESSED_KEYSC(gPLUS)) // + - tsign = -1; - - if (tsign) - { - mouseb &= ~(16|32); - bstatus &= ~(16|32); - - if (eitherALT) //ALT - { - if (eitherCTRL) //CTRL - { - if (tsign==1) - visibility <<= (visibility < 16384); - else - visibility >>= (visibility > 32); - message("Global visibility %d", visibility); - } - else - { - k=eitherSHIFT?1:16; - - if (highlightsectorcnt >= 0) - for (i=0; i 0) - { - for (i=0; i 0) - { - sector[searchsector].visibility += tsign; - - if (tsign==1) - { - if (sector[searchsector].visibility == 240) - sector[searchsector].visibility = 239; - } - else if (sector[searchsector].visibility == 239) - sector[searchsector].visibility = 240; - k--; - } - message("Sector %d visibility %d",searchsector,sector[searchsector].visibility); - asksave = 1; - } - } - else // if !eitherALT - { - k = 0; - if (highlightsectorcnt >= 0) - { - for (i=0; i1->3->2->0 - - i = wall[searchbottomwall].cstat; - i = ((i>>3)&1)+((i>>7)&2); //3-x,8-y - - i = next[i]; - message("Wall %d flip %d",searchwall,i); - - i = ((i&1)<<3)+((i&2)<<7); - wall[searchbottomwall].cstat &= ~0x0108; - wall[searchbottomwall].cstat |= i; - asksave = 1; - } - else if (AIMING_AT_CEILING_OR_FLOOR) //8-way ceiling/floor flipping (bits 2,4,5) - { - static const int32_t next[8] = { 6, 7, 4, 5, 0, 1, 3, 2 }; // 0->6->3->5->1->7->2->4->0 - int16_t *stat = AIMING_AT_CEILING ? §or[searchsector].ceilingstat : §or[searchsector].floorstat; - - i = *stat; - i = (i&0x4)+((i>>4)&3); - i = next[i]; - message("Sector %d flip %d", searchsector, i); - i = (i&0x4)+((i&3)<<4); - *stat &= ~0x34; - *stat |= i; - asksave = 1; - } - else if (AIMING_AT_SPRITE) - { - i = sprite[searchwall].cstat; - if (((i&48) == 32) && ((i&64) == 0)) - { - sprite[searchwall].cstat &= ~0xc; - sprite[searchwall].cstat |= ((i&4)^4); - message("Sprite %d flip bit %s",searchwall, ONOFF(sprite[searchwall].cstat&4)); - } - else - { - int32_t next[4] = { 1, 3, 0, 2 }; // 0->1->3->2->0 - i = ((i>>2)&3); - - i = next[i]; - message("Sprite %d flip %d",searchwall,i); - - sprite[searchwall].cstat &= ~0xc; - sprite[searchwall].cstat |= (i<<2); - } - asksave = 1; - } - } - } - - - if (keystatus[KEYSC_HOME]) - updownunits = 256; - else if (keystatus[KEYSC_END]) - updownunits = 512; - else - updownunits = 1024; - - mouseaction=0; - if (eitherALT && (bstatus&1)) - { - mousex=0; mskip=1; - if (mousey!=0) - { - updownunits=klabs(mousey*128); - mouseaction=1; - } - } - - - tsign = 0; - if (ASSERT_AIMING) - { - // PK: PGUP/PGDN, rmb only & mwheel - tsign -= (PRESSED_KEYSC(PGUP) || (mouseaction && mousey<0) || ((bstatus&18)==18 && !(bstatus&1))); - tsign += (PRESSED_KEYSC(PGDN) || (mouseaction && mousey>0) || ((bstatus&34)==34 && !(bstatus&1))); - } - - if (tsign) - { - k = 0; - if (highlightsectorcnt >= 0) - { - for (i=0; i=0 && (eitherALT && !(bstatus&1))) ? - wall[searchwall].nextsector : searchsector); - int32_t tmphei; - - for (j=0; j<(k?k:1); j++, sect=highlightsector[j]) - { - for (i=headspritesect[sect]; i!=-1; i=nextspritesect[i]) - { - tmphei = spriteheight(i, NULL); - - tempint = getceilzofslope(sect, sprite[i].x, sprite[i].y); - tempint += tmphei; - - if (sprite[i].cstat&128) - tempint += tmphei>>1; - - if (sprite[i].z == tempint) - sprite[i].z += tsign * (updownunits << (eitherCTRL<<1)); // JBF 20031128 - } - - sector[sect].ceilingz += tsign * (updownunits << (eitherCTRL<<1)); // JBF 20031128 - message("Sector %d ceilingz = %d", sect, sector[sect].ceilingz); - } - } - else if (AIMING_AT_FLOOR) - { - int16_t sect = k ? highlightsector[0] : searchsector; - - for (j=0; j<(k?k:1); j++, sect=highlightsector[j]) - { - for (i=headspritesect[sect]; i!=-1; i=nextspritesect[i]) - { - tempint = getflorzofslope(sect,sprite[i].x,sprite[i].y); - - if (sprite[i].cstat&128) - tempint += spriteheight(i, NULL)>>1; - - if (sprite[i].z == tempint) - sprite[i].z += tsign * (updownunits << (eitherCTRL<<1)); // JBF 20031128 - } - - sector[sect].floorz += tsign * (updownunits << (eitherCTRL<<1)); // JBF 20031128 - message("Sector %d floorz = %d",sect,sector[sect].floorz); - } - } - - if (sector[searchsector].floorz < sector[searchsector].ceilingz) - { - if (tsign==-1) - sector[searchsector].floorz = sector[searchsector].ceilingz; - else - sector[searchsector].ceilingz = sector[searchsector].floorz; - } - - if (AIMING_AT_SPRITE) - { - if (eitherCTRL && !eitherALT) //CTRL - put sprite on ceiling/floor - { - if (tsign==-1) - sprite[searchwall].z = spriteonceilingz(searchwall); - else - sprite[searchwall].z = spriteongroundz(searchwall); - } - else - { - k = 0; - if (highlightcnt >= 0) - for (i=0; i= 0) - { - int32_t thisSec = ms/1000; - int32_t x = (xdim <= 640); - int32_t chars = Bsprintf(tempbuf, "%2u ms (%3u fps)", howlong, LastCount); - - if (!x) - { - printext256(windowx2-(chars<<3)+1,windowy1+2,0,-1,tempbuf,x); - printext256(windowx2-(chars<<3),windowy1+1,COLOR_WHITE,-1,tempbuf,x); - } - else - { - printext256(windowx2-(chars<<2)+1,windowy1+2,0,-1,tempbuf,x); - printext256(windowx2-(chars<<2),windowy1+1,COLOR_WHITE,-1,tempbuf,x); - } - - if (LastSec < thisSec) - { - LastCount = FrameCount / (thisSec - LastSec); - LastSec = thisSec; - FrameCount = 0; - } - FrameCount++; - } - LastMS = ms; - } - - tempbuf[0] = 0; - - if ((bstatus&(4|2|1))==4 && !unrealedlook) //PK - Bsprintf(tempbuf,"VIEW"); - else if ((bstatus&(2|1))==2) - Bsprintf(tempbuf,"Z%s", keystatus[KEYSC_HOME]?" 256":keystatus[KEYSC_END]?" 512":""); - else if ((bstatus&(2|1))==1) - Bsprintf(tempbuf,"LOCK"); - - if (bstatus&1) - { - Bsprintf(tempbuf,"LOCK"); - switch (searchstat) - { - case SEARCH_WALL: - case SEARCH_MASKWALL: - if (eitherALT) - Bsprintf(tempbuf,"CEILING Z %s", eitherCTRL?"512":""); - else if (eitherSHIFT) - Bsprintf(tempbuf,"PAN %s", eitherCTRL?"8":""); - else if (eitherCTRL) - Bsprintf(tempbuf,"SCALE"); - break; - case SEARCH_CEILING: - case SEARCH_FLOOR: - if (eitherALT) - Bsprintf(tempbuf,"%s Z %s", AIMING_AT_CEILING?"CEILING":"FLOOR", eitherCTRL?"512":""); - else if (eitherSHIFT) - Bsprintf(tempbuf,"PAN"); - else if (eitherCTRL) - Bsprintf(tempbuf,"SLOPE"); - break; - case SEARCH_SPRITE: - if (eitherALT) - Bsprintf(tempbuf,"MOVE Z %s", eitherCTRL?"1024":""); - else if (eitherSHIFT) - Bsprintf(tempbuf,"MOVE XY %s", eitherCTRL?"GRID":""); - else if (eitherCTRL) - Bsprintf(tempbuf,"SIZE"); - break; - } - } - - if (tempbuf[0] != 0) - { - i = (Bstrlen(tempbuf)<<3)+6; - i = max((searchx+i)-(xdim-1), 0); - - j = max((searchy+16)-(ydim-1), 0); - - // printext16(searchx+6-i,searchy+6-j,11,-1,tempbuf,0); - printext256(searchx+4+2-i, searchy+4+2-j, 0,-1,tempbuf,!(xdimgame > 640)); - printext256(searchx+4-i, searchy+4-j, whitecol,-1,tempbuf,!(xdimgame > 640)); - - // printext256(searchx+4+2,searchy+4+2,0,-1,tempbuf,!(xdimgame > 640)); - // printext256(searchx+4,searchy+4,whitecol,-1,tempbuf,!(xdimgame > 640)); - } - if (helpon==1) - { - int32_t small = !(xdimgame > 640); - for (i=0; i=0 && sector[cursectnum].lotag==2) - { - if (sector[cursectnum].ceilingpicnum==FLOORSLIME) - SetSLIMEPalette(); - else - SetWATERPalette(); - } - else SetGAMEPalette(); - - if (keystatus[buildkeys[BK_MODE2D_3D]]) // Enter - { - SetGAMEPalette(); - FX_StopAllSounds(); - S_ClearSoundLocks(); - -#ifdef POLYMER - DeletePolymerLights(); -#endif - } - - //Stick this in 3D part of ExtCheckKeys - //Also choose your own key scan codes - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(D)) // ' d - /* { ShowHelpText("SectorEffector"); } */ - { - skill = (skill+1)%MAXSKILL; - message("%s", SKILLMODE[skill]); - // printext256(1*4,1*8,11,-1,tempbuf,0); - } - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(I)) // ' i - { - showinvisibility = !showinvisibility; - message("Invisible sprite preview %s", showinvisibility?"enabled":"disabled"); - } - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(X)) // ' x - { - shadepreview = !shadepreview; - message("Map shade preview %s", shadepreview?"enabled":"disabled"); - -#ifdef POLYMER - DeletePolymerLights(); -#endif - } - - - /* if (keystatus[KEYSC_QUOTE] && keystatus[KEYSC_G]) // ' g - { - keystatus[KEYSC_G] = 0; - tabgraphic++; - if (tabgraphic > 2) tabgraphic = 0; - if (tabgraphic) message("Graphics ON"); - else message("Graphics OFF"); - }*/ - - /* if (keystatus[KEYSC_QUOTE] && keystatus[KEYSC_R]) // ' r - { - keystatus[KEYSC_R] = 0; - framerateon=!framerateon; - if (framerateon) message("Framerate ON"); - else message("Framerate OFF"); - }*/ - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(W)) // ' w - { - nosprites = (nosprites+1)%MAXNOSPRITES; - message("%s", SPRDSPMODE[nosprites]); - } - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(Y)) // ' y - { - purpleon = !purpleon; - if (nosprites>3) nosprites=0; - message("Purple %s", ONOFF(purpleon)); - } - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(C)) // ' C - { - if (AIMING_AT_WALL_OR_MASK) - { - for (i=0; i= 0) && !eitherSHIFT) - { - NEXTWALL(searchwall).cstat &= ~(1+64); - NEXTWALL(searchwall).cstat |= (wall[searchwall].cstat&1); - } - - message("Wall %d blocking bit %s", searchwall, ONOFF(wall[searchwall].cstat&1)); - asksave = 1; - } - } - - // N (set "spritenoshade" bit) - if (PRESSED_KEYSC(N) && !eitherCTRL && !keystatus[KEYSC_QUOTE]) - { - if (AIMING_AT_SPRITE) - { - sprite[searchwall].cstat ^= 2048; - message("Sprite %d spritenoshade bit: %s", searchwall, ONOFF(sprite[searchwall].cstat&2048)); - } - } - - if (PRESSED_KEYSC(T)) // T (transluscence for sprites/masked walls) - { - if (AIMING_AT_CEILING_OR_FLOOR) //Set masked/transluscent ceilings/floors - { - int32_t nexti[4] = { 128, 256, 384, 0 }; - int16_t *stat = &AIMED_CEILINGFLOOR(stat); - i = (*stat&(128+256))>>7; - i = nexti[i]; - *stat &= ~(128+256); - *stat |= i; - asksave = 1; - } - - if (keystatus[KEYSC_QUOTE]) - { - if (ASSERT_AIMING) - { - Bsprintf(tempbuf, "%s lotag: ", Typestr_wss[searchstat]); - AIMED(lotag) = getnumber256(tempbuf, AIMED(lotag), BTAG_MAX, 0); - } - } - else if (eitherCTRL) - { - if (AIMING_AT_SPRITE) - TextEntryMode(searchwall); - } - else - { - if (AIMING_AT_SPRITE) - { - if ((sprite[searchwall].cstat&2) == 0) - sprite[searchwall].cstat |= 2; - else if ((sprite[searchwall].cstat&512) == 0) - sprite[searchwall].cstat |= 512; - else - sprite[searchwall].cstat &= ~(2+512); - asksave = 1; - } - else if (AIMING_AT_MASKWALL) - { - if ((wall[searchwall].cstat&128) == 0) - wall[searchwall].cstat |= 128; - else if ((wall[searchwall].cstat&512) == 0) - wall[searchwall].cstat |= 512; - else - wall[searchwall].cstat &= ~(128+512); - - if (wall[searchwall].nextwall >= 0) - { - NEXTWALL(searchwall).cstat &= ~(128+512); - NEXTWALL(searchwall).cstat |= (wall[searchwall].cstat&(128+512)); - } - asksave = 1; - } - } - } - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(ENTER)) // ' ENTER - { - AIMED_SELOVR_PICNUM = temppicnum; - message("Pasted picnum only"); - - if (AIMING_AT_SPRITE) - correct_sprite_yoffset(searchwall); - } - - i = 512; - if (keystatus[KEYSC_RSHIFT]) i = 8; - if (keystatus[KEYSC_LSHIFT]) i = 1; - mouseaction=0; - - if (eitherCTRL && !eitherSHIFT && (bstatus&1) && AIMING_AT_CEILING_OR_FLOOR) - { - mousex=0; mskip=1; - if (mousey) - { - i=klabs(mousey*2); - mouseaction=1; - } - } - - tsign = 0; - if (ASSERT_AIMING) - { - tsign -= (PRESSED_KEYSC(LBRACK) || (mouseaction && mousey<0)); // [ - tsign += (PRESSED_KEYSC(RBRACK) || (mouseaction && mousey>0)); // ] - } - - if (tsign) - { - if (eitherALT) - { - int32_t ns=wall[searchwall].nextsector, sx=wall[searchwall].x, sy=wall[searchwall].y; - - if (ns >= 0 && !mouseaction) - { - if (AIMING_AT_CEILING || (tsign < 0 && AIMING_AT_WALL_OR_MASK)) - { - alignceilslope(searchsector, sx, sy, getceilzofslope(ns, sx, sy)); - message("Sector %d align ceiling to wall %d", searchsector, searchwall); - } - if (AIMING_AT_FLOOR || (tsign > 0 && AIMING_AT_WALL_OR_MASK)) - { - alignflorslope(searchsector, sx, sy, getflorzofslope(ns, sx, sy)); - message("Sector %d align floor to wall %d", searchsector, searchwall); - } - } - } - else - { - if (AIMING_AT_CEILING_OR_FLOOR) - { - if (!(AIMED_CEILINGFLOOR(stat)&2)) - AIMED_CEILINGFLOOR(heinum) = 0; - - AIMED_CEILINGFLOOR(heinum) = clamp(AIMED_CEILINGFLOOR(heinum) + tsign*i, -32768, 32767); - - message("Sector %d ceiling slope = %d",searchsector,AIMED_CEILINGFLOOR(heinum)); - } - } - - if (sector[searchsector].ceilingheinum == 0) - sector[searchsector].ceilingstat &= ~2; - else - sector[searchsector].ceilingstat |= 2; - - if (sector[searchsector].floorheinum == 0) - sector[searchsector].floorstat &= ~2; - else - sector[searchsector].floorstat |= 2; - asksave = 1; - } - - - if ((bstatus&1) && eitherSHIFT) - mskip=1; - - if ((bstatus&1) && eitherSHIFT && AIMING_AT_CEILING_OR_FLOOR && (mousex|mousey)) - { - int32_t fw,x1,y1,x2,y2,stat,ma,a=0; - - stat = AIMING_AT_FLOOR ? sector[searchsector].floorstat : sector[searchsector].ceilingstat; - if (stat&64) // align to first wall - { - fw=sector[searchsector].wallptr; - x1=wall[fw].x,y1=wall[fw].y; - x2=POINT2(fw).x,y2=POINT2(fw).y; - a=getangle(x1-x2,y1-y2); - } - mouseax+=mousex; mouseay+=mousey; - ma=getangle(mouseax,mouseay); - ma+=ang-a; - - i = stat; - i = (i&0x4)+((i>>4)&3); - if (stat&64) // align to first wall - switch (i) - { - case 0:break; - case 1:ma=-ma; break; - case 2:ma=1024-ma; break; - case 3:ma+=1024; break; - case 4:ma=-512-ma; break; - case 5:ma+=512; break; - case 6:ma-=512; break; - case 7:ma=512-ma; break; - } - else - switch (i) - { - case 0:ma=-ma; break; - case 1:break; - case 2:ma+=1024; break; - case 3:ma=1024-ma; break; - case 4:ma-=512; break; - case 5:ma=512-ma; break; - case 6:ma=-512-ma; break; - case 7:ma+=512; break; - } - - a = ksqrt(mouseax*mouseax + mouseay*mouseay); - if (a) - { - int32_t mult = (stat&8) ? 8192 : 8192*2; - x1 = -a*sintable[(ma+2048)&2047]/mult; - y1 = -a*sintable[(ma+1536)&2047]/mult; - - if (x1||y1) - { - mouseax=0; - mouseay=0; - - if (AIMING_AT_CEILING_OR_FLOOR) - { - changedir = 1-2*(x1<0); - x1 = klabs(x1); - - while (x1--) - AIMED_CEILINGFLOOR(xpanning) = changechar(AIMED_CEILINGFLOOR(xpanning),changedir,0,0); - - changedir = 1-2*(y1<0); - y1 = klabs(y1); - - while (y1--) - AIMED_CEILINGFLOOR(ypanning) = changechar(AIMED_CEILINGFLOOR(ypanning),changedir,0,0); - - message("Sector %d %s panning: %d, %d", searchsector, typestr[searchstat], - AIMED_CEILINGFLOOR(xpanning), AIMED_CEILINGFLOOR(ypanning)); - } - asksave=1; - } - } - mousex=0; - mousey=0; - } - - - smooshyalign = keystatus[KEYSC_gKP5]; - repeatpanalign = eitherSHIFT || eitherALT; - - //////////////////// - updownunits=1; - mouseaction=0; - - if (!mouseb) - { - mouseax=0; - mouseay=0; - } - - if ((bstatus&1) && !AIMING_AT_CEILING_OR_FLOOR) - { - if (eitherSHIFT) - { - mskip=1; - if (mousex) - { - mouseaction = 1; - mouseax += mousex; - updownunits = klabs(mouseax/2); - if (updownunits) - mouseax=0; - } - } - else if (eitherCTRL && !eitherALT) - { - mskip=1; - if (mousex) - { - mouseaction = 2; - repeatpanalign = 0; - updownunits = klabs(mouseax+=mousex)/(16 - 12*AIMING_AT_SPRITE); - if (updownunits) - mouseax=0; - } - } - } - - if (keystatus[KEYSC_gLEFT] || keystatus[KEYSC_gRIGHT] || mouseaction) // 4 & 6 (keypad) - { - if (repeatcountx == 0 || repeatcountx > 32 || mouseaction) - { - changedir = 0; - if (keystatus[KEYSC_gLEFT] || mousex>0) - changedir = -1; - if (keystatus[KEYSC_gRIGHT] || mousex<0) - changedir = 1; - - if (AIMING_AT_WALL_OR_MASK) - { - if (repeatpanalign == 0) - { - while (updownunits--) - wall[searchwall].xrepeat = changechar(wall[searchwall].xrepeat, changedir, smooshyalign, 1); - message("Wall %d repeat: %d, %d", searchwall, wall[searchwall].xrepeat, wall[searchwall].yrepeat); - } - else - { - int16_t w = SELECT_WALL(); - - if (mouseaction) - { - i = wall[w].cstat; - i &= (8|256); - - if (i==8 || i==256) - changedir*=-1; - - if (eitherCTRL) - updownunits *= 8; - } - - while (updownunits--) - wall[w].xpanning = changechar(wall[w].xpanning, changedir, smooshyalign, 0); - message("Wall %d panning: %d, %d", w, wall[w].xpanning, wall[w].ypanning); - } - asksave = 1; - } - else if (AIMING_AT_CEILING_OR_FLOOR) - { - while (updownunits--) - AIMED_CEILINGFLOOR(xpanning) = changechar(AIMED_CEILINGFLOOR(xpanning), changedir, smooshyalign, 0); - message("Sector %d %s panning: %d, %d", searchsector, typestr[searchstat], - AIMED_CEILINGFLOOR(xpanning), AIMED_CEILINGFLOOR(ypanning)); - asksave = 1; - } - else if (AIMING_AT_SPRITE) - { - static int32_t sumxvect=0, sumyvect=0; - - if (mouseaction==1) - mouseaction_movesprites(&sumxvect, &sumyvect, 1536, mousex); - else - { - sumxvect = sumyvect = 0; - if (mouseaction==2) - changedir *= -1; - while (updownunits--) - sprite[searchwall].xrepeat = changechar(sprite[searchwall].xrepeat, changedir, smooshyalign, 1); - if (sprite[searchwall].xrepeat < 4) - sprite[searchwall].xrepeat = 4; - message("Sprite %d repeat: %d, %d", searchwall, sprite[searchwall].xrepeat, sprite[searchwall].yrepeat); - } - } - asksave = 1; - repeatcountx = max(1,repeatcountx-2); - } - repeatcountx += synctics; - } - else - repeatcountx = 0; - - - //////////////////// - updownunits=1; - mouseaction=0; - - if ((bstatus&1) && !AIMING_AT_CEILING_OR_FLOOR) - { - if (eitherSHIFT) - { - mskip=1; - if (mousey) - { - mouseaction = 1; - updownunits = klabs(mousey); - - if (!AIMING_AT_SPRITE) - updownunits = klabs((int32_t)(mousey*128./tilesizy[wall[searchwall].picnum])); - } - } - else if (eitherCTRL && !eitherALT) - { - mskip=1; - if (mousey) - { - mouseaction = 2; - repeatpanalign = 0; - mouseay += mousey; - updownunits = klabs(mouseay)/(32 - 28*AIMING_AT_SPRITE); - if (updownunits) - mouseay=0; - } - } - } - - if (!mouseb) - { - mouseax=0; - mouseay=0; - } - - if (keystatus[KEYSC_gUP] || keystatus[KEYSC_gDOWN] || mouseaction) // 2 & 8 (keypad) - { - if (repeatcounty == 0 || repeatcounty > 32 || mouseaction) - { - changedir = 0; - if (keystatus[KEYSC_gUP] || mousey>0) - changedir = -1; - if (keystatus[KEYSC_gDOWN] || mousey<0) - changedir = 1; - - if (AIMING_AT_WALL_OR_MASK) - { - if (repeatpanalign == 0) - { - while (updownunits--) - wall[searchwall].yrepeat = changechar(wall[searchwall].yrepeat, changedir, smooshyalign, 1); - message("Wall %d repeat: %d, %d", searchwall, wall[searchwall].xrepeat, wall[searchwall].yrepeat); - } - else - { - int16_t w = AIMING_AT_WALL?searchbottomwall:searchwall; - if (mouseaction && eitherCTRL) - updownunits *= 8; - while (updownunits--) - wall[w].ypanning = changechar(wall[w].ypanning, changedir, smooshyalign, 0); - message("Wall %d panning: %d, %d", w, wall[w].xpanning, wall[w].ypanning); - } - } - else if (AIMING_AT_CEILING_OR_FLOOR) - { - while (updownunits--) - AIMED_CEILINGFLOOR(ypanning) = changechar(AIMED_CEILINGFLOOR(ypanning), changedir, smooshyalign, 0); - message("Sector %d %s panning: %d, %d", searchsector, typestr[searchstat], - AIMED_CEILINGFLOOR(xpanning), AIMED_CEILINGFLOOR(ypanning)); - asksave = 1; - } - else if (AIMING_AT_SPRITE) - { - static int32_t sumxvect=0, sumyvect=0; - - if (mouseaction==1) - mouseaction_movesprites(&sumxvect, &sumyvect, 2048, mousey); - else - { - sumxvect = sumyvect = 0; - while (updownunits--) - sprite[searchwall].yrepeat = changechar(sprite[searchwall].yrepeat, changedir, smooshyalign, 1); - if (sprite[searchwall].yrepeat < 4) - sprite[searchwall].yrepeat = 4; - message("Sprite %d repeat: %d, %d", searchwall, sprite[searchwall].xrepeat, sprite[searchwall].yrepeat); - } - } - asksave = 1; - repeatcounty = max(1,repeatcounty-2); - } - repeatcounty += synctics; - } - else - repeatcounty = 0; - - //////////////////// - - if (PRESSED_KEYSC(F11)) //F11 - brightness - { - static int16_t brightness = -1; - - if (brightness==-1) - brightness = ((int16_t)((vid_gamma-1.0)*10.0))&15; - - brightness = brightness + (1-2*eitherSHIFT); - brightness &= 15; - - vid_gamma = 1.0 + ((float)brightness / 10.0); - setbrightness(brightness, 0, 0); - message("Brightness: %d/16", brightness+1); - } - - if (PRESSED_KEYSC(TAB)) //TAB - { - if (ASSERT_AIMING) - { - tempshade = AIMED_CF_SEL(shade); - temppal = AIMED_CF_SEL(pal); - templotag = AIMED_SEL(lotag); - temphitag = AIMED_SEL(hitag); - tempextra = AIMED_SEL(extra); - - if (AIMING_AT_WALL_OR_MASK) - { - temppicnum = AIMED_SELOVR_WALL(picnum); - tempxrepeat = AIMED_SEL_WALL(xrepeat); - tempxrepeat = max(1, tempxrepeat); - tempyrepeat = AIMED_SEL_WALL(yrepeat); - tempcstat = AIMED_SEL_WALL(cstat); - templenrepquot = divscale12(wallength(searchwall), tempxrepeat); - } - else if (AIMING_AT_CEILING_OR_FLOOR) - { - temppicnum = AIMED_CEILINGFLOOR(picnum); - tempvis = sector[searchsector].visibility; - tempxrepeat = AIMED_CEILINGFLOOR(xpanning); - tempyrepeat = AIMED_CEILINGFLOOR(ypanning); - tempcstat = AIMED_CEILINGFLOOR(stat); - } - else if (AIMING_AT_SPRITE) - { - temppicnum = sprite[searchwall].picnum; - tempxrepeat = sprite[searchwall].xrepeat; - tempyrepeat = sprite[searchwall].yrepeat; - tempcstat = sprite[searchwall].cstat; - tempxvel = sprite[searchwall].xvel; - tempyvel = sprite[searchwall].yvel; - tempzvel = sprite[searchwall].zvel; - } - - somethingintab = searchstat; - } - } - - if (PRESSED_KEYSC(ENTER)) // ENTER -- paste clipboard contents - { - extern char pskysearch[MAXSECTORS]; - int16_t daang; - int32_t dashade[2]; - - if (eitherSHIFT) - { - if (AIMING_AT_WALL_OR_MASK && eitherCTRL) //Ctrl-shift Enter (auto-shade) - { - dashade[0] = 127; - dashade[1] = -128; - - i = searchwall; - do - { - if (dashade[0] > (int32_t)wall[i].shade) - dashade[0] = wall[i].shade; - if (dashade[1] < (int32_t)wall[i].shade) - dashade[1] = wall[i].shade; - - i = wall[i].point2; - } - while (i != searchwall); - - daang = getangle(POINT2(searchwall).x-wall[searchwall].x, POINT2(searchwall).y-wall[searchwall].y); - - i = searchwall; - do - { - j = getangle(POINT2(i).x-wall[i].x,POINT2(i).y-wall[i].y); - k = (j+2048-daang)&2047; - if (k > 1024) - k = 2048-k; - - wall[i].shade = dashade[0]+mulscale10(k, dashade[1]-dashade[0]); - - i = wall[i].point2; - } - while (i != searchwall); - - message("Wall %d auto-shaded", searchwall); - } - else if (somethingintab < 255) - { - if (ASSERT_AIMING) - { - AIMED_CF_SEL(shade) = tempshade; - AIMED_CF_SEL(pal) = temppal; - - if (AIMING_AT_CEILING_OR_FLOOR) - { - if (somethingintab == SEARCH_CEILING || somethingintab == SEARCH_FLOOR) - sector[searchsector].visibility = tempvis; - } - - message("Pasted shading+pal"); - asksave = 1; - } - } - } - else if (AIMING_AT_WALL_OR_MASK && eitherCTRL && somethingintab < 255) //Either ctrl key - { - i = searchwall; - do - { - wall[i].picnum = temppicnum; - wall[i].shade = tempshade; - wall[i].pal = temppal; - - if (somethingintab == SEARCH_WALL || somethingintab == SEARCH_MASKWALL) - { - wall[i].xrepeat = tempxrepeat; - wall[i].yrepeat = tempyrepeat; - wall[i].cstat = tempcstat; - fixxrepeat(i, templenrepquot); - } - - i = wall[i].point2; - } - while (i != searchwall); - - message("Pasted picnum+shading+pal"); - asksave = 1; - } - else if (AIMING_AT_CEILING_OR_FLOOR && eitherCTRL && somethingintab < 255) //Either ctrl key - { - Bmemset(pskysearch, 0, numsectors); - - i = searchsector; - if (CEILINGFLOOR(i, stat)&1) - pskysearch[i] = 1; - - while (pskysearch[i] == 1) - { - CEILINGFLOOR(i, picnum) = temppicnum; - CEILINGFLOOR(i, shade) = tempshade; - CEILINGFLOOR(i, pal) = temppal; - - if (somethingintab == SEARCH_CEILING || somethingintab == SEARCH_FLOOR) - { - CEILINGFLOOR(i, xpanning) = tempxrepeat; - CEILINGFLOOR(i, ypanning) = tempyrepeat; - CEILINGFLOOR(i, stat) = tempcstat; - } - pskysearch[i] = 2; - - startwall = sector[i].wallptr; - endwall = startwall + sector[i].wallnum - 1; - - for (j=startwall; j<=endwall; j++) - { - k = wall[j].nextsector; - if (k >= 0) - if ((CEILINGFLOOR(k, stat)&1) > 0) - if (pskysearch[k] == 0) - pskysearch[k] = 1; - } - - for (j=0; j= 0) - NEXTWALL(searchwall).overpicnum = temppicnum; - - wall[searchwall].shade = tempshade; - wall[searchwall].pal = temppal; - - if (somethingintab == SEARCH_MASKWALL) - { - wall[searchwall].xrepeat = tempxrepeat; - wall[searchwall].yrepeat = tempyrepeat; - wall[searchwall].cstat = tempcstat; - wall[searchwall].lotag = templotag; - wall[searchwall].hitag = temphitag; - wall[searchwall].extra = tempextra; - fixxrepeat(searchwall, templenrepquot); - } - asksave = 1; - } - else if (AIMING_AT_CEILING_OR_FLOOR) - { - AIMED_CEILINGFLOOR(picnum) = temppicnum; - AIMED_CEILINGFLOOR(shade) = tempshade; - AIMED_CEILINGFLOOR(pal) = temppal; - - if (somethingintab == SEARCH_CEILING || somethingintab == SEARCH_FLOOR) - { - AIMED_CEILINGFLOOR(xpanning) = tempxrepeat; - AIMED_CEILINGFLOOR(ypanning) = tempyrepeat; - AIMED_CEILINGFLOOR(stat) = tempcstat; - - sector[searchsector].visibility = tempvis; - sector[searchsector].lotag = templotag; - sector[searchsector].hitag = temphitag; - sector[searchsector].extra = tempextra; - } - asksave = 1; - } - else if (AIMING_AT_SPRITE) - { - sprite[searchwall].picnum = temppicnum; - - if (tilesizx[temppicnum] <= 0 || tilesizy[temppicnum] <= 0) - { - j = 0; - for (k=0; k 0 && tilesizy[k] > 0) - { - j = k; - break; - } - sprite[searchwall].picnum = j; - } - - sprite[searchwall].shade = tempshade; - sprite[searchwall].pal = temppal; - - if (somethingintab == SEARCH_SPRITE) - { - sprite[searchwall].xrepeat = max(tempxrepeat, 1); - sprite[searchwall].yrepeat = max(tempyrepeat, 1); - sprite[searchwall].cstat = tempcstat; - sprite[searchwall].lotag = templotag; - sprite[searchwall].hitag = temphitag; - sprite[searchwall].extra = tempextra; - sprite[searchwall].xvel = tempxvel; - sprite[searchwall].yvel = tempyvel; - sprite[searchwall].zvel = tempzvel; - } - else - correct_sprite_yoffset(searchwall); - } - message("Pasted clipboard"); - asksave = 1; - } - } - - if (PRESSED_KEYSC(C)) - { - if (eitherALT) // Alt-C picnum replacer - { - if (somethingintab < 255) - { - switch (searchstat) - { - case SEARCH_WALL: - j = wall[searchbottomwall].picnum; - for (i=0; i=0: forwards -{ - char did_wrap = 0, outofgrid=0; - int32_t i, j, k = 0; - - dir = 1-2*(dir<0); - - for (gs_cursprite += dir;; gs_cursprite += dir) - { - if (gs_cursprite < 0 || gs_cursprite >= MAXSPRITES) - { - if (did_wrap) - break; - - did_wrap = 1; - gs_cursprite &= (MAXSPRITES-1); - } - - if (sprite[gs_cursprite].statnum == MAXSTATUS) continue; - - for (i=0; i<3; i++) - for (j=0; i==1 ? j<6 : j<7; j++) - { - if (!gs_spriteTagInterested[i][j]) continue; - - if (i==0) - { - switch (j) - { - case 0: k = sprite[gs_cursprite].x; break; - case 1: k = sprite[gs_cursprite].y; break; - case 2: k = sprite[gs_cursprite].z; break; - case 3: k = sprite[gs_cursprite].sectnum; break; - case 4: k = sprite[gs_cursprite].statnum; break; - case 5: k = (uint16_t)sprite[gs_cursprite].hitag; break; - case 6: k = (uint16_t)sprite[gs_cursprite].lotag; break; - } - } - else if (i==1) - { - switch (j) - { - case 0: - k = sprite[gs_cursprite].cstat; - k &= gs_spriteTagValue[1][0]; - break; - case 1: k = sprite[gs_cursprite].shade; break; - case 2: k = sprite[gs_cursprite].pal; break; - case 3: - k = gs_spriteTagValue[1][3]; - if (k != sprite[gs_cursprite].xrepeat && - k != sprite[gs_cursprite].yrepeat) - goto NEXTSPRITE; - break; - case 4: - k = gs_spriteTagValue[1][4]; - if (k != sprite[gs_cursprite].xoffset && - k != sprite[gs_cursprite].yoffset) - goto NEXTSPRITE; - break; - case 5: k = sprite[gs_cursprite].picnum; break; - } - } - else if (i==2) - { - switch (j) - { - case 0: k = sprite[gs_cursprite].ang; break; - case 1: k = (uint16_t)sprite[gs_cursprite].xvel; break; - case 2: k = (uint16_t)sprite[gs_cursprite].yvel; break; - case 3: k = (uint16_t)sprite[gs_cursprite].zvel; break; - case 4: k = (uint16_t)sprite[gs_cursprite].owner; break; - case 5: k = sprite[gs_cursprite].clipdist; break; - case 6: k = sprite[gs_cursprite].extra; break; - } - } - - if (k != gs_spriteTagValue[i][j]) goto NEXTSPRITE; - } - - // found matching sprite - if (pos.x >= -editorgridextent && pos.x <= editorgridextent && - pos.y >= -editorgridextent && pos.y <= editorgridextent) - { - pos.x = sprite[gs_cursprite].x; - pos.y = sprite[gs_cursprite].y; - if (pos.z >= -editorgridextent<<4 && pos.z <= editorgridextent<<4) - pos.z = sprite[gs_cursprite].z; - ang = sprite[gs_cursprite].ang; - } - else - outofgrid = 1; - - printmessage16("%s Sprite seach%s: found sprite %d%s", dir<0 ? "<" : ">", - did_wrap ? " (wrap)" : "", gs_cursprite, outofgrid?"(outside grid)":""); - did_wrap = 0; - return; - -NEXTSPRITE: - ; - } - printmessage16("%s Sprite search: none found", dir<0 ? "<" : ">"); -} - -extern int32_t graphicsmode; - -static void Keys2d(void) -{ - int32_t i=0, j, k; - int32_t smooshy, changedir; - static int32_t repeatcnt[2] = {0,0}; // was repeatcountx, repeatcounty - int32_t tcursectornum; - -// for(i=0;i<0x50;i++) if(keystatus[i]==1) Bsprintf(tempbuf,"key %d",i); printmessage16(tempbuf); - - tcursectornum = -1; - for (i=0; i= 16384) - { - drawgradient(); - showspritedata(pointhighlight&16383, 0); - } - else if (linehighlight >= 0 /* && ((bstatus&1) || sectorofwall(linehighlight)==tcursectornum)*/) - { - drawgradient(); - showwalldata(linehighlight, 0); - } - } - else if (tcursectornum >= 0) - { - drawgradient(); - showsectordata(tcursectornum, 0); - } - } - else if (!(keystatus[KEYSC_F5]|keystatus[KEYSC_F6]|keystatus[KEYSC_F7]|keystatus[KEYSC_F8]) && !eitherSHIFT) - { - static int32_t counter = 0; - static int32_t omx = 0, omy = 0; - /* - static int32_t opointhighlight, olinehighlight, ocursectornum; - if (pointhighlight == opointhighlight && linehighlight == olinehighlight && tcursectornum == ocursectornum) - */ - if (omx == mousxplc && omy == mousyplc) - { - if (counter < 6) - counter++; - } - else if (counter > 0) - counter--; - - omx = mousxplc; - omy = mousyplc; - - /* - opointhighlight = pointhighlight; - olinehighlight = linehighlight; - ocursectornum = tcursectornum; - */ - - if (totalclock < lastpm16time + 120*2) - _printmessage16("%s", lastpm16buf); - else if (counter >= 2 && totalclock >= 120*6) - { - if (pointhighlight >= 16384) - { - i = pointhighlight-16384; - showspritedata(i, 1); - - if (sprite[i].picnum==SECTOREFFECTOR) - _printmessage16("^10%s", SectorEffectorText(i)); - } - else if (linehighlight >= 0 && ((bstatus&1) || sectorofwall(linehighlight)==tcursectornum)) - showwalldata(linehighlight, 1); - else if (tcursectornum >= 0) - showsectordata(tcursectornum, 1); - } - } - -///__bigcomment__ - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(Z)) // ' z - { - editorzrange[0] = getnumber16("Upper Z range: ", editorzrange[0], INT32_MAX, 1); - editorzrange[1] = getnumber16("Lower Z range: ", editorzrange[1], INT32_MAX, 1); - // printmessage16(""); - } - - if (PRESSED_KEYSC(T)) // T (tag) - { - char buffer[80]; - - if (eitherCTRL) //Ctrl-T - { - extern int32_t showtags; - - showtags ^= 1; - printmessage16("Show tags %s", ONOFF(showtags)); - } - else if (eitherALT) //ALT - { - if (pointhighlight >= 16384) - { - i = pointhighlight-16384; - Bsprintf(buffer,"Sprite (%d) Lo-tag: ", i); - sprite[i].lotag = _getnumber16(buffer, sprite[i].lotag, BTAG_MAX, 0, sprite[i].picnum==SECTOREFFECTOR ? - (void *)SectorEffectorTagText : NULL); - } - else if (linehighlight >= 0) - { - i = linehighlight; - Bsprintf(buffer,"Wall (%d) Lo-tag: ", i); - wall[i].lotag = getnumber16(buffer, wall[i].lotag, BTAG_MAX, 0); - } - } - else - { - for (i=0; i0) - { - m32_setkeyfilter(0); - IntegratedHelp(); - m32_setkeyfilter(1); - } - else - printmessage16("m32help.hlp invalid or not found!"); - } - - if (PRESSED_KEYSC(F2)) - if (g_numsounds > 0) - { - m32_setkeyfilter(0); - SoundDisplay(); - m32_setkeyfilter(1); - } - - // F3: side view toggle (handled in build.c) - - getpoint(searchx,searchy, &mousxplc,&mousyplc); - ppointhighlight = getpointhighlight(mousxplc,mousyplc, ppointhighlight); - - if ((ppointhighlight&0xc000) == 16384) - { - // sprite[ppointhighlight&16383].cstat ^= 1; - cursprite = ppointhighlight&16383; - } - - if (keystatus[KEYSC_F9]) // F9 f1=3b - ShowFileText("sthelp.hlp", 0); - - /* start Mapster32 */ - - if (PRESSED_KEYSC(F4)) - { - showfirstwall = !showfirstwall; - message("Sector firstwall highlight %s", showfirstwall?"enabled":"disabled"); - } - - if (PRESSED_KEYSC(M)) // M (tag) - { - if (eitherALT) //ALT - { - if (pointhighlight >= 16384) - { - i = pointhighlight-16384; - Bsprintf(tempbuf, "Sprite %d Extra: ", i); - sprite[i].extra = getnumber16(tempbuf, sprite[i].extra, BTAG_MAX, 1); - } - else if (linehighlight >= 0) - { - i = linehighlight; - Bsprintf(tempbuf,"Wall %d Extra: ",i); - wall[i].extra = getnumber16(tempbuf,wall[i].extra,BTAG_MAX,1); - } - } - else - { - for (i=0; i 32) - { - changedir = 1-(j&2); - - if ((ppointhighlight&0xc000) == 16384 && (sprite[cursprite].cstat & 48)) - { - uint8_t *repeat = (k==0) ? &sprite[cursprite].xrepeat : &sprite[cursprite].yrepeat; - *repeat = max(4, changechar(*repeat, changedir, smooshy, 1)); - message("Sprite %d repeat: %d, %d", cursprite, sprite[cursprite].xrepeat, sprite[cursprite].yrepeat); - } - else - { - for (i=0; i= 16384) - { - const char *aligntype[4] = { "view", "wall", "floor", "???" }; - - i = sprite[cursprite].cstat; - if ((i&48) < 32) - i += 16; - else - i &= ~48; - sprite[cursprite].cstat = i; - - message("Sprite %d now %s aligned", cursprite, aligntype[(i&48)/16]); - asksave = 1; - } - } - - if (keystatus[KEYSC_QUOTE] && keystatus[KEYSC_S]) // ' S - { - if (pointhighlight >= 16384) - { - keystatus[KEYSC_S] = 0; - Bsprintf(tempbuf, "Sprite %d xrepeat: ", cursprite); - sprite[cursprite].xrepeat = getnumber16(tempbuf, sprite[cursprite].xrepeat, 255, 0); - Bsprintf(tempbuf, "Sprite %d yrepeat: ", cursprite); - sprite[cursprite].yrepeat = getnumber16(tempbuf, sprite[cursprite].yrepeat, 255, 0); - printmessage16("Sprite %d updated", i); - } - } - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(F)) // ' F - { - FuncMenu(); - } - - tsign = 0; - if (PRESSED_KEYSC(LBRACK)) // [ search backward - tsign = -1; - if (PRESSED_KEYSC(RBRACK)) // ] search forward - tsign = +1; - - if (tsign) - { - if (eitherALT && numcorruptthings>0) - { - int32_t wrap=0, x, y, z; - - if (curcorruptthing<0 || curcorruptthing>=numcorruptthings) - curcorruptthing = 0; - else - { - curcorruptthing += tsign; - wrap = (curcorruptthing<0 || curcorruptthing>=numcorruptthings); - curcorruptthing += numcorruptthings; - curcorruptthing %= numcorruptthings; - } - - k = corruptthings[curcorruptthing]; - j = -1; - switch (k&CORRUPT_MASK) - { - case 0: - printmessage16("MAP LIMITS EXCEEDED!"); - x = y = z = 0; - break; - case CORRUPT_SECTOR: - i = k&(MAXSECTORS-1); - j = 0; - x = wall[sector[i].wallptr].x; - y = wall[sector[i].wallptr].y; - z = pos.z; - break; - case CORRUPT_WALL: - i = k&(MAXWALLS-1); - j = 1; - x = wall[i].x; - y = wall[i].y; - z = pos.z; - break; - case CORRUPT_SPRITE: - i = k&(MAXSPRITES-1); - j = 2; - x = sprite[i].x; - y = sprite[i].y; - z = sprite[i].z; - break; - default: - k = 0; - x = y = z = 0; - break; - } - - if (k) - { - static const char *secwalspr[3] = {"sector", "wall", "sprite"}; - if (x>=-editorgridextent && x<=editorgridextent && - y>=-editorgridextent && y<=editorgridextent) - { - pos.x = x; - pos.y = y; - pos.z = z; - } - else x=editorgridextent+1; - - printmessage16("#%d: %s Corrupt %s %d%s", curcorruptthing+1, tsign<0?"<":">", secwalspr[j], - i, (x==editorgridextent+1) ? " (outside grid)" : (wrap ? " (wrap)" : "")); - } - } - else if (wallsprite==0) - { - SearchSectors(tsign); - } - else if (wallsprite==1) - { - if ((tsign<0 && curwallnum>0) || (tsign>0 && curwallnum=0 && i"); - return; - } - curwallnum--; - } - printmessage16("%s Wall search: none found", tsign<0?"<":">"); - } - else if (wallsprite==2) - DoSpriteSearch(tsign); - -///__old_sprite_search_1__ - -///__old_sprite_search_2__ - - } - - if (PRESSED_KEYSC(G)) // G (grid on/off) - { - if (autogrid) - { - grid = 8*eitherSHIFT; - - autogrid = 0; - } - else - { - grid += (1-2*eitherSHIFT); - if (grid == -1 || grid == 9) - { - autogrid = 1; - grid = 0; - } - } - - if (autogrid) - printmessage16("Grid size: 9 (autosize)"); - else if (!grid) - printmessage16("Grid off"); - else - printmessage16("Grid size: %d (%d units)", grid, 2048>>grid); - } - - if (autogrid) - { - grid = min(zoom+512, 65536); - grid = scale(grid, 6, 6144); - grid = clamp(grid, 0, 7); - } - - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(L)) // ' L (set sprite/wall coordinates) - { - if (pointhighlight >= 16384) - { - i = pointhighlight - 16384; - Bsprintf(tempbuf, "Sprite %d x: ", i); - sprite[i].x = getnumber16(tempbuf, sprite[i].x, editorgridextent-1, 1); - Bsprintf(tempbuf, "Sprite %d y: ", i); - sprite[i].y = getnumber16(tempbuf, sprite[i].y, editorgridextent-1, 1); - Bsprintf(tempbuf, "Sprite %d z: ", i); - sprite[i].z = getnumber16(tempbuf, sprite[i].z, BZ_MAX, 1); - Bsprintf(tempbuf, "Sprite %d angle: ", i); - sprite[i].ang = getnumber16(tempbuf, sprite[i].ang, 2048, 1); - sprite[i].ang &= 2047; - printmessage16("Sprite %d updated", i); - } - else if (pointhighlight >= 0) - { - i = linehighlight; - j = wall[i].x; - k = wall[i].y; - - Bsprintf(tempbuf, "Wall %d x: ", i); - j = getnumber16(tempbuf, j, editorgridextent, 1); - Bsprintf(tempbuf, "Wall %d y: ", i); - k = getnumber16(tempbuf, k, editorgridextent, 1); - dragpoint(i, j, k); - printmessage16("Wall %d updated", i); - } - } - - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(3)) // ' 3 - { - onnames = (onnames+1)%8; - printmessage16("Mode %d %s", onnames, SpriteMode[onnames]); - // clearmidstatbar16(); - // for(i=0;i= 16384) - { - swapshort(&sprite[cursprite].lotag, &sprite[cursprite].hitag); - printmessage16("Sprite %d tags swapped", cursprite); - } - else if (linehighlight >= 0) - { - swapshort(&wall[linehighlight].lotag, &wall[linehighlight].hitag); - printmessage16("Wall %d tags swapped", linehighlight); - } - } - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(J)) // ' J - { - pos.x = getnumber16("X-coordinate: ", pos.x, editorgridextent, 1); - pos.y = getnumber16("Y-coordinate: ", pos.y, editorgridextent, 1); - printmessage16("Current pos now (%d, %d)", pos.x, pos.y); - } -}// end key2d - -static void InitCustomColors(void) -{ - /* blue */ - /* vgapal16[9*4+0] = 63; - vgapal16[9*4+1] = 31; - vgapal16[9*4+2] = 7; */ - int32_t i; - palette_t *edcol; - /* - - char vgapal16[4*256] = - { - 00,00,00,00, 42,00,00,00, 00,42,00,00, 42,42,00,00, 00,00,42,00, - 42,00,42,00, 00,21,42,00, 42,42,42,00, 21,21,21,00, 63,21,21,00, - 21,63,21,00, 63,63,21,00, 21,21,63,00, 63,21,63,00, 21,63,63,00, - 63,63,63,00 - }; - */ - /* editorcolors[0] = getclosestcol(0,0,0); - editorcolors[1] = getclosestcol(0,0,42); - editorcolors[2] = getclosestcol(0,42,0); - editorcolors[3] = getclosestcol(0,42,42); - editorcolors[4] = getclosestcol(42,0,0); - editorcolors[5] = getclosestcol(0,0,0); - */ - - vgapal16[9*4+0] = 63; - vgapal16[9*4+1] = 31; - vgapal16[9*4+2] = 7; - - /* orange */ - vgapal16[31*4+0] = 20; // blue - vgapal16[31*4+1] = 45; // green - vgapal16[31*4+2] = 60; // red - - vgapal16[39*4+0] = 36; - vgapal16[39*4+1] = 53; - vgapal16[39*4+2] = 63; - - - /* light yellow */ - vgapal16[22*4+0] = 51; - vgapal16[22*4+1] = 63; - vgapal16[22*4+2] = 63; - - /* grey */ - vgapal16[23*4+0] = 45; - vgapal16[23*4+1] = 45; - vgapal16[23*4+2] = 45; - - /* blue */ - vgapal16[24*4+0] = 51; - vgapal16[24*4+1] = 41; - vgapal16[24*4+2] = 12; - - vgapal16[32*4+0] = 60; - vgapal16[32*4+1] = 50; - vgapal16[32*4+2] = 21; - - // grid color - vgapal16[25*4+0] = 19; - vgapal16[25*4+1] = 17; - vgapal16[25*4+2] = 17; - - vgapal16[26*4+0] = 24; - vgapal16[26*4+1] = 24; - vgapal16[26*4+2] = 24; - - vgapal16[33*4+0] = 0;//15; // blue - vgapal16[33*4+1] = 0;//30; // green - vgapal16[33*4+2] = 48;//45; // red - - vgapal16[41*4+0] = 0;//24; - vgapal16[41*4+1] = 0;//40; - vgapal16[41*4+2] = 63;//48; - - for (i = 0; i<256; i++) - { - edcol = (palette_t *)&vgapal16[4*i]; - editorcolors[i] = getclosestcol(edcol->b,edcol->g,edcol->r); - } -} - -void ExtPreSaveMap(void) -{ - if (fixmapbeforesaving) - { - int32_t i, startwall, j, endwall; - - for (i=0; i=0; i--) - sector[i].wallnum = sector[i+1].wallptr-sector[i].wallptr; - sector[numsectors-1].wallnum = numwalls - sector[numsectors-1].wallptr; - - for (i=0; i\t\tOverride NAMES.H\n" -#if defined RENDERTYPEWIN || (defined RENDERTYPESDL && !defined __APPLE__ && defined HAVE_GTK2) - "-setup\t\tDisplays the configuration dialog\n" -#endif -#if !defined(_WIN32) - "-usecwd\t\tRead game data and configuration file from working directory\n" -#endif - "\n-?, -help, --help\tDisplay this help message and exit" - ; - Bsprintf(tempbuf, "Mapster32 %s %s", VERSION, s_buildRev); - wm_msgbox(tempbuf, "%s", s); -} - -static void AddGamePath(const char *buffer) -{ - struct strllist *s; - s = (struct strllist *)Bcalloc(1,sizeof(struct strllist)); - s->str = Bstrdup(buffer); - - if (CommandPaths) - { - struct strllist *t; - for (t = CommandPaths; t->next; t=t->next) ; - t->next = s; - return; - } - CommandPaths = s; -} - -static void G_AddGroup(const char *buffer) -{ - struct strllist *s; - s = (struct strllist *)Bcalloc(1,sizeof(struct strllist)); - s->str = Bstrdup(buffer); - if (Bstrchr(s->str,'.') == 0) - Bstrcat(s->str,".grp"); - - if (CommandGrps) - { - struct strllist *t; - for (t = CommandGrps; t->next; t=t->next) ; - t->next = s; - return; - } - CommandGrps = s; -} - -#define COPYARG(i) \ - Bmemcpy(&testplay_addparam[j], argv[i], lengths[i]); \ - j += lengths[i]; \ - testplay_addparam[j++] = ' '; - -#if defined(RENDERTYPEWIN) && defined(USE_OPENGL) -extern char forcegl; -#endif - -static void G_CheckCommandLine(int32_t argc, const char **argv) -{ - int32_t i = 1, j, maxlen=0, *lengths; - char *c, *k; - - mapster32_fullpath = (char *)argv[0]; - - if (argc > 1) - { - lengths = Bmalloc(argc*sizeof(int32_t)); - for (j=1; j i+1) - { - G_AddGroup(argv[i+1]); - COPYARG(i); - COPYARG(i+1); - i++; - } - i++; - continue; - } - - if (!Bstrcasecmp(c+1,"game_dir")) - { - if (argc > i+1) - { -#ifdef USE_OPENGL - extern char TEXCACHEFILE[BMAX_PATH]; - - Bsprintf(tempbuf,"%s/%s",argv[i+1],TEXCACHEFILE); - Bstrcpy(TEXCACHEFILE,tempbuf); -#endif - AddGamePath(argv[i+1]); - - COPYARG(i); - COPYARG(i+1); - i++; - } - i++; - continue; - } - if (!Bstrcasecmp(c+1,"cfg")) - { - if (argc > i+1) - { - Bstrcpy(setupfilename,argv[i+1]); - i++; - } - i++; - continue; - } - if (!Bstrcasecmp(c+1,"gamegrp")) - { - if (argc > i+1) - { - Bstrcpy(defaultduke3dgrp,argv[i+1]); - COPYARG(i); - COPYARG(i+1); - i++; - } - i++; - continue; - } - if (!Bstrcasecmp(c+1,"nam")) - { - Bstrcpy(g_grpNamePtr, "nam.grp"); - COPYARG(i); - i++; - continue; - } - if (!Bstrcasecmp(c+1,"namesfile")) - { - g_namesFileName = argv[i+1]; - i++; - continue; - } - if (!Bstrcasecmp(c+1,"ww2gi")) - { - Bstrcpy(g_grpNamePtr, "ww2gi.grp"); - COPYARG(i); - i++; - continue; - } - if (!Bstrcasecmp(c+1,"check")) - { - initprintf("Map pointer checking on saving enabled\n"); - fixmapbeforesaving = 1; - i++; - continue; - } - if (!Bstrcasecmp(c+1,"nocheck")) - { - initprintf("Map pointer checking disabled\n"); - fixmapbeforesaving = 0; - i++; - continue; - } - if (!Bstrcasecmp(c+1,"noautoload")) - { - initprintf("Autoload disabled\n"); - NoAutoLoad = 1; - COPYARG(i); - i++; - continue; - } -#if !defined(_WIN32) - if (!Bstrcasecmp(c+1,"usecwd")) - { - usecwd = 1; - COPYARG(i); - i++; - continue; - } -#endif -#if defined(RENDERTYPEWIN) && defined(USE_OPENGL) - if (!Bstrcasecmp(c+1,"forcegl")) - { - forcegl = 1; - i++; - continue; - } -#endif - } - - if ((*c == '-') -#ifdef _WIN32 - || (*c == '/') -#endif -) - { - c++; - switch (*c) - { - case 'h': - case 'H': - c++; - if (*c) - { - defsfilename = c; - COPYARG(i); - initprintf("Using DEF file: %s.\n",defsfilename); - } - break; - case 'j': - case 'J': - c++; - if (!*c) break; - AddGamePath(c); - COPYARG(i); - break; - case 'g': - case 'G': - c++; - if (!*c) break; - G_AddGroup(c); - COPYARG(i); - break; - case 'x': - case 'X': - c++; - if (!*c) break; - gamecon = c; - COPYARG(i); - break; - } - } - else - { - k = Bstrrchr(c,'.'); - if (k) - { - if (!Bstrcasecmp(k,".grp") || !Bstrcasecmp(k,".zip")) - { - COPYARG(i); - G_AddGroup(argv[i++]); - continue; - } - else if (!Bstrcasecmp(k,".def")) - { - COPYARG(i); - defsfilename = (char *)argv[i++]; - initprintf("Using DEF file: %s.\n",defsfilename); - continue; - } - else if (!Bstrcasecmp(k,".con")) - { - COPYARG(i); - gamecon = (char *)argv[i++]; - continue; - } - } - } - i++; - } - - Bfree(lengths); - - if (j > 0) - { - testplay_addparam[j-1] = 0; - testplay_addparam = Brealloc(testplay_addparam, j*sizeof(char)); - } - else - { - Bfree(testplay_addparam); - testplay_addparam = NULL; - } - } -} -#undef COPYARG - -int32_t ExtPreInit(int32_t argc,const char **argv) -{ - wm_setapptitle("Mapster32"); - -#ifdef _WIN32 - tempbuf[GetModuleFileName(NULL,tempbuf,BMAX_PATH)] = 0; - Bcorrectfilename(tempbuf,1); - //chdir(tempbuf); -#endif - - OSD_SetLogFile("mapster32.log"); - OSD_SetVersion("Mapster32" " " VERSION,0,2); - initprintf("Mapster32 %s %s\n", VERSION, s_buildRev); - initprintf("Compiled %s\n", __DATE__" "__TIME__); - // initprintf("Copyright (c) 2008 EDuke32 team\n"); - - G_CheckCommandLine(argc,argv); - - return 0; -} - -static int32_t atoi_safe(const char *str) -{ - return (int32_t)strtol(str, NULL, 10); -} - -static int32_t osdcmd_quit(const osdfuncparm_t *parm) -{ - UNREFERENCED_PARAMETER(parm); - clearfilenames(); - ExtUnInit(); - uninitengine(); - - exit(0); -} - -static int32_t osdcmd_editorgridextent(const osdfuncparm_t *parm) -{ - int32_t i; - extern int32_t editorgridextent; - - if (parm->numparms == 0) - { - OSD_Printf("\"editorgridextent\" is \"%d\"\n", editorgridextent); - return OSDCMD_SHOWHELP; - } - else if (parm->numparms != 1) - return OSDCMD_SHOWHELP; - - i = Batol(parm->parms[0]); - - if (i >= 65536 && i <= BXY_MAX) - { - editorgridextent = i; - OSD_Printf("editorgridextent %d\n", editorgridextent); - } - else - OSD_Printf("editorgridextent: value out of range (65536 to %d)\n", BXY_MAX); - - return OSDCMD_OK; -} - -static int32_t osdcmd_addpath(const osdfuncparm_t *parm) -{ - char pathname[BMAX_PATH]; - - if (parm->numparms != 1) return OSDCMD_SHOWHELP; - - Bstrcpy(pathname,parm->parms[0]); - addsearchpath(pathname); - return OSDCMD_OK; -} - -static int32_t osdcmd_initgroupfile(const osdfuncparm_t *parm) -{ - char file[BMAX_PATH]; - - if (parm->numparms != 1) return OSDCMD_SHOWHELP; - - Bstrcpy(file,parm->parms[0]); - initgroupfile(file); - return OSDCMD_OK; -} - -static int32_t osdcmd_sensitivity(const osdfuncparm_t *parm) -{ - if (parm->numparms != 1) - { - OSD_Printf("\"sensitivity\" is \"%.2f\"\n",msens); - return OSDCMD_SHOWHELP; - } - msens = atof(parm->parms[0]); - OSD_Printf("sensitivity %.2f\n",msens); - return OSDCMD_OK; -} - -static int32_t osdcmd_noclip(const osdfuncparm_t *parm) -{ - UNREFERENCED_PARAMETER(parm); - noclip = !noclip; - OSD_Printf("Clipping %s\n", noclip?"disabled":"enabled"); - - return OSDCMD_OK; -} - -static int32_t osdcmd_testplay_addparam(const osdfuncparm_t *parm) -{ - int32_t slen; - - if (parm->numparms != 1) - { - OSD_Printf("additional parameters for test playing: %s%s%s\n", - testplay_addparam ? "\"" : "", - testplay_addparam ? testplay_addparam : "", - testplay_addparam ? "\"" : ""); - return OSDCMD_OK; - } - - slen = Bstrlen(parm->parms[0]); - - if (slen > 0) - { - if (!testplay_addparam) - testplay_addparam = Bmalloc(slen+1); - else - testplay_addparam = Brealloc(testplay_addparam, slen+1); - - Bmemcpy(testplay_addparam, parm->parms[0], slen); - testplay_addparam[slen] = 0; - } - else - { - if (testplay_addparam) - { - Bfree(testplay_addparam); - testplay_addparam = NULL; - } - } - - return OSDCMD_OK; -} - - -//PK vvv ------------ -static int32_t osdcmd_vars_pk(const osdfuncparm_t *parm) -{ - int32_t showval = (parm->numparms < 1); - - // this is something of a misnomer, since it's actually accel+decel - if (!Bstrcasecmp(parm->name, "pk_turnaccel")) - { - if (showval) - OSD_Printf("Turning acceleration+declaration is %d\n", pk_turnaccel); - else - { - pk_turnaccel = atoi_safe(parm->parms[0]); - pk_turnaccel = pk_turnaccel<=pk_turndecel ? (pk_turndecel+1):pk_turnaccel; - pk_turnaccel = pk_turnaccel>256 ? 256:pk_turnaccel; - } - } - else if (!Bstrcasecmp(parm->name, "pk_turndecel")) - { - if (showval) - OSD_Printf("Turning deceleration is %d\n", pk_turndecel); - else - { - pk_turndecel = atoi_safe(parm->parms[0]); - pk_turndecel = pk_turndecel<=0 ? 1:pk_turndecel; - pk_turndecel = pk_turndecel>=pk_turnaccel ? (pk_turnaccel-1):pk_turndecel; - pk_turndecel = pk_turndecel>128 ? 128:pk_turndecel; - } - } - else if (!Bstrcasecmp(parm->name, "pk_quickmapcycling")) - { - OSD_Printf("Quick map cycling ((LShift-)Ctrl-X): %s\n", - (quickmapcycling = !quickmapcycling) ? "enabled":"disabled"); - } - else if (!Bstrcasecmp(parm->name, "pk_uedaccel")) - { - if (parm->numparms==1) - { - pk_uedaccel = atoi_safe(parm->parms[0]); - pk_uedaccel = pk_uedaccel<0 ? 0:pk_uedaccel; - pk_uedaccel = pk_uedaccel>5 ? 5:pk_uedaccel; - } - - if (parm->numparms <= 1) - OSD_Printf("UnrealEd mouse navigation acceleration is %d\n", pk_uedaccel); - else - return OSDCMD_SHOWHELP; - } - else if (!Bstrcasecmp(parm->name, "osd_tryscript")) - { - m32_osd_tryscript = !m32_osd_tryscript; - OSD_Printf("Try M32 script execution on invalid OSD command: %s\n", m32_osd_tryscript?"on":"off"); - } - else if (!Bstrcasecmp(parm->name, "sideview_reversehorizrot")) - { - sideview_reversehrot = !sideview_reversehrot; - OSD_Printf("Side view reverse horizontal rotation: %s\n", sideview_reversehrot?"on":"off"); - } - else if (!Bstrcasecmp(parm->name, "script_expertmode")) - { - m32_script_expertmode = !m32_script_expertmode; - if (m32_script_expertmode) - OSD_Printf("M32 Script expert mode ENABLED. Be sure to know what you are doing!\n"); - else - OSD_Printf("M32 Script expert mode DISABLED.\n"); - } - else if (!Bstrcasecmp(parm->name, "show_heightindicators")) - { - static const char *how[3] = {"none", "two-sided walls only", "all"}; - - if (parm->numparms == 1) - showheightindicators = clamp(atoi_safe(parm->parms[0]), 0, 2); - - if (parm->numparms <= 1) - OSD_Printf("height indicators: %s\n", how[showheightindicators]); - else - return OSDCMD_SHOWHELP; - } - else if (!Bstrcasecmp(parm->name, "show_ambiencesounds")) - { - static const char *how[3] = {"none", "current sector only", "all"}; - - if (parm->numparms == 1) - showambiencesounds = clamp(atoi_safe(parm->parms[0]), 0, 2); - - if (parm->numparms <= 1) - OSD_Printf("ambience sound circles: %s\n", how[showambiencesounds]); - else - return OSDCMD_SHOWHELP; - } - else if (!Bstrcasecmp(parm->name, "corruptcheck")) - { - int32_t tryfix = parm->numparms>=1 && !Bstrcasecmp(parm->parms[0], "tryfix"); - - if (parm->numparms == 1 || tryfix) - { - if (!Bstrcasecmp(parm->parms[0], "now")) - { - if (CheckMapCorruption(1, 0)==0) - OSD_Printf("All OK.\n"); - return OSDCMD_OK; - } - else if (tryfix) - { - uint64_t whicherrs = parm->numparms==1 ? 0xffffffffffffffffull : 0; - - if (whicherrs==0) - { - int32_t i, n, m; - char *endptr; - for (i=1; inumparms; i++) - { - n = (int32_t)Bstrtol(parm->parms[i], &endptr, 10); - if (endptr != parm->parms[i]) - { - if (*endptr=='-') - { - m = (int32_t)Bstrtol(endptr+1, NULL, 10); - if (n>=1 && n<=m && m<=MAXCORRUPTTHINGS) - { - uint64_t mask = 0xffffffffffffffffull; - m = m-n+1; - mask >>= (MAXCORRUPTTHINGS-m); - mask <<= (n-1); - - whicherrs |= mask; - } - } - else - { - if (n>=1 && n<=MAXCORRUPTTHINGS) - whicherrs |= (1ull<<(n-1)); - } - } - } - } - - CheckMapCorruption(3, whicherrs); - return OSDCMD_OK; - } - else if (isdigit(parm->parms[0][0])) - { - autocorruptcheck = clamp(atoi_safe(parm->parms[0]), 0, 3600); - corruptchecktimer = totalclock + 120*autocorruptcheck; - } - } - - if (parm->numparms <= 1) - { - if (autocorruptcheck) - OSD_Printf("auto corruption check: %d seconds\n", autocorruptcheck); - else - OSD_Printf("auto corruption check: off\n"); - } - else if (!tryfix) - return OSDCMD_SHOWHELP; - } - - return OSDCMD_OK; -} - -#ifdef USE_OPENGL -static int32_t osdcmd_tint(const osdfuncparm_t *parm) -{ - int32_t i; - palette_t *p; - - if (parm->numparms==1) - { - i = atoi_safe(parm->parms[0]); - if (i>=0 && ir, p->g, p->b, p->f); - } - } - else if (parm->numparms==0) - { - OSD_Printf("Hightile tintings:\n"); - for (i=0,p=&hictinting[0]; ir, p->g, p->b, p->f); - } - else if (parm->numparms>=2) - { - i = atoi_safe(parm->parms[0]); - if (i<0 || i>=MAXPALOOKUPS-RESERVEDPALS) - return OSDCMD_SHOWHELP; - - p = &hictinting[i]; - p->r = atoi_safe(parm->parms[1]); - p->g = (parm->numparms>=3) ? atoi_safe(parm->parms[2]) : 255; - p->b = (parm->numparms>=4) ? atoi_safe(parm->parms[3]) : 255; - p->f = (parm->numparms>=5) ? atoi_safe(parm->parms[4])&HICEFFECTMASK : 0; - } - return OSDCMD_OK; -} -#endif - -// M32 script vvv -static int32_t osdcmd_include(const osdfuncparm_t *parm) -{ - if (parm->numparms != 1) - return OSDCMD_SHOWHELP; - C_Compile(parm->parms[0], 1); - return OSDCMD_OK; -} - -static int32_t osdcmd_scriptinfo(const osdfuncparm_t *parm) -{ - UNREFERENCED_PARAMETER(parm); - C_CompilationInfo(); - return OSDCMD_OK; -} - -#ifdef DEBUGGINGAIDS -extern void X_Disasm(ofstype beg, int32_t size); - -static int32_t osdcmd_disasm(const osdfuncparm_t *parm) -{ - int32_t i; - - if (parm->numparms != 2) - return OSDCMD_SHOWHELP; - - if (!isdigit(parm->parms[1][0])) - return OSDCMD_SHOWHELP; - - i=atoi_safe(parm->parms[1]); - - if (parm->parms[0][0]=='s') - { - if (i>=0 && i=0 && i=0) - X_Disasm(aEventOffsets[i], aEventSizes[i]); - } - return OSDCMD_OK; -} -#endif - -static int32_t osdcmd_do(const osdfuncparm_t *parm) -{ - intptr_t oscrofs; - char *tp; - int32_t i, j, slen, ofs; - int32_t onumconstants=g_numSavedConstants; - - if (parm->numparms==0) - return OSDCMD_SHOWHELP; - - oscrofs = (g_scriptPtr-script); - - ofs = 2*(parm->numparms>0); // true if "do" command - slen = Bstrlen(parm->raw+ofs); - tp = Bmalloc(slen+2); - if (!tp) goto OUTOFMEM; - Bmemcpy(tp, parm->raw+ofs, slen); - - // needed so that subsequent commands won't execute old stuff. - tp[slen] = '\n'; - tp[slen+1] = '\0'; - - g_didDefineSomething = 0; - - C_Compile(tp, 0); - - if (parm->numparms>=0) - Bfree(tp); - - if (g_numCompilerErrors) - { -// g_scriptPtr = script + oscrofs; // handled in C_Compile() - return OSDCMD_OK; - } - - for (i=0,j=0; i=0) - j++; - - if (g_didDefineSomething == 0) - { - g_numSavedConstants = onumconstants; - - *g_scriptPtr = CON_RETURN + (g_lineNumber<<12); - g_scriptPtr = script + oscrofs; - - insptr = script + oscrofs; - Bmemcpy(&vm, &vm_default, sizeof(vmstate_t)); - - if (qsetmode==200 && AIMING_AT_SPRITE) - { - vm.g_i = searchwall; - vm.g_sp = &sprite[vm.g_i]; - } - - VM_Execute(0); - - if (vm.updatehighlight) - { - update_highlight(); - vm.updatehighlight = 0; - } - - if (!(vm.flags&VMFLAG_ERROR)) - { - int32_t idx, dosave=1; - - for (i=1; i<=4; i++) - { - idx = (scripthistend-i)&(SCRIPTHISTSIZ-1); - if (!scripthist[idx]) - break; - else if (!Bstrcmp(scripthist[idx], parm->raw)) - { - dosave = 0; - break; - } - } - - if (dosave) - { - if (scripthist[scripthistend]) - Bfree((void *)scripthist[scripthistend]); - scripthist[scripthistend] = Bstrdup(parm->raw); - scripthistend++; - scripthistend %= SCRIPTHISTSIZ; - } - } -// asksave = 1; // handled in Access(Sprite|Sector|Wall) - } - - return OSDCMD_OK; -OUTOFMEM: - message("OUT OF MEMORY!\n"); - return OSDCMD_OK; -} - -void M32RunScript(const char *s) -{ - osdfuncparm_t parm; - - parm.numparms = -1; - parm.raw = s; - - osdcmd_do(&parm); -} - -static int32_t osdcmd_endisableevent(const osdfuncparm_t *parm) -{ - int32_t i, j, enable; - - if (!label) return OSDCMD_OK; - - if (parm->numparms < 1) - { - OSD_Printf("--- Defined events:\n"); - for (i=0; i= 0) - OSD_Printf("%s (%d): %s\n", label+(i*MAXLABELLEN), i, aEventEnabled[i]?"on":"off"); - return OSDCMD_OK; - } - - enable = !Bstrcasecmp(parm->name, "enableevent"); - - if (parm->numparms == 1) - { - if (!Bstrcasecmp(parm->parms[0], "all") || !Bstrcasecmp(parm->parms[0], "a")) - { - for (i=0; inumparms; i++) - { - char buf[64] = "EVENT_", buf2[64]; - - if (isdigit(parm->parms[i][0])) - { - j = atoi_safe(parm->parms[i]); - Bsprintf(buf2, "event %d", j); - } - else if (!Bstrncmp(parm->parms[i], "EVENT_", 6)) - { - j = hash_find(&h_labels, parm->parms[i]); - Bstrncpy(buf2, parm->parms[i], sizeof(buf2)); - buf2[sizeof(buf2)-1] = '\0'; - } - else - { - Bstrncat(buf, parm->parms[i], sizeof(buf)-6-1); - j = hash_find(&h_labels, buf); - Bmemcpy(buf2, buf, sizeof(buf2)); - } - - if (j>=0 && j: adds path to game filesystem", osdcmd_addpath); - - OSD_RegisterFunction("editorgridextent","editorgridextent: sets the size of the 2D mode editing grid",osdcmd_editorgridextent); - - OSD_RegisterFunction("initgroupfile","initgroupfile : adds a grp file into the game filesystem", osdcmd_initgroupfile); - - OSD_RegisterFunction("noclip","noclip: toggles clipping mode", osdcmd_noclip); - - OSD_RegisterFunction("quit","quit: exits the editor immediately", osdcmd_quit); - OSD_RegisterFunction("exit","exit: exits the editor immediately", osdcmd_quit); - - OSD_RegisterFunction("sensitivity","sensitivity : changes the mouse sensitivity", osdcmd_sensitivity); - - //PK - OSD_RegisterFunction("pk_turnaccel", "pk_turnaccel : sets turning acceleration+deceleration", osdcmd_vars_pk); - OSD_RegisterFunction("pk_turndecel", "pk_turndecel : sets turning deceleration", osdcmd_vars_pk); - OSD_RegisterFunction("pk_uedaccel", "pk_uedaccel : sets UnrealEd movement speed factor (0-5, exponentially)", osdcmd_vars_pk); - OSD_RegisterFunction("pk_quickmapcycling", "pk_quickmapcycling: toggles quick cycling of maps with (Shift-)Ctrl-X", osdcmd_vars_pk); - OSD_RegisterFunction("testplay_addparam", "testplay_addparam \"string\": sets additional parameters for test playing", osdcmd_testplay_addparam); - OSD_RegisterFunction("show_heightindicators", "show_heightindicators {0, 1 or 2}: sets display of height indicators in 2D mode", osdcmd_vars_pk); - OSD_RegisterFunction("show_ambiencesounds", "show_ambiencesounds {0, 1 or 2}>: sets display of MUSICANDSFX circles in 2D mode", osdcmd_vars_pk); - OSD_RegisterFunction("corruptcheck", "corruptcheck {|now|tryfix}: sets auto corruption check interval if given, otherwise as indicated", osdcmd_vars_pk); -#ifdef USE_OPENGL - OSD_RegisterFunction("tint", "tint : queries or sets hightile tinting", osdcmd_tint); -#endif - - // M32 script - OSD_RegisterFunction("include", "include : compiles one or more M32 script files", osdcmd_include); - OSD_RegisterFunction("do", "do (m32 script ...): executes M32 script statements", osdcmd_do); - OSD_RegisterFunction("script_info", "script_info: shows information about compiled M32 script", osdcmd_scriptinfo); - OSD_RegisterFunction("script_expertmode", "script_expertmode: toggles M32 script expert mode", osdcmd_vars_pk); - OSD_RegisterFunction("enableevent", "enableevent {all|EVENT_...|(event number)}", osdcmd_endisableevent); - OSD_RegisterFunction("disableevent", "disableevent {all|EVENT_...|(event number)}", osdcmd_endisableevent); - OSD_RegisterFunction("osd_tryscript", "osd_tryscript: toggles execution of M32 script on invalid OSD command", osdcmd_vars_pk); - OSD_RegisterFunction("sideview_reversehorizrot", "sideview_reversehorizrot: toggles reversion of Q and W keys in side view mode", osdcmd_vars_pk); -#ifdef DEBUGGINGAIDS - OSD_RegisterFunction("disasm", "disasm [s|e] ", osdcmd_disasm); -#endif - return 0; -} - -#define DUKEOSD -#ifdef DUKEOSD -#if 0 -void GAME_drawosdchar(int32_t x, int32_t y, char ch, int32_t shade, int32_t pal) -{ - int32_t ac; - - if (ch == 32) return; - ac = ch-'!'+STARTALPHANUM; - if (ac < STARTALPHANUM || ac > ENDALPHANUM) return; - - rotatesprite(((x<<3)+x)<<16, (y<<3)<<16, 65536l, 0, ac, shade, pal, 8|16, 0, 0, xdim-1, ydim-1); -} - -void GAME_drawosdstr(int32_t x, int32_t y, char *ch, int32_t len, int32_t shade, int32_t pal) -{ - int32_t ac; - - for (x = (x<<3)+x; len>0; len--, ch++, x++) - { - if (*ch == 32) - { - x+=5; - continue; - } - ac = *ch-'!'+STARTALPHANUM; - if (ac < STARTALPHANUM || ac > ENDALPHANUM) return; - - rotatesprite(x<<16, (y<<3)<<16, 65536l, 0, ac, shade, pal, 8|16, 0, 0, xdim-1, ydim-1); - if (*ch >= '0' && *ch <= '9') x+=8; - else x += tilesizx[ac]; - } -} -#endif - -static int32_t GetTime(void) -{ - return totalclock; -} - -#if 0 -void GAME_drawosdcursor(int32_t x, int32_t y, int32_t type, int32_t lastkeypress) -{ - int32_t ac; - - if (type) ac = SMALLFNTCURSOR; - else ac = '_'-'!'+STARTALPHANUM; - - if (!((GetTime()-lastkeypress) & 0x40l)) - rotatesprite(((x<<3)+x)<<16, ((y<<3)+(type?-1:2))<<16, 65536l, 0, ac, 0, 8, 8|16, 0, 0, xdim-1, ydim-1); -} - -int32_t GAME_getcolumnwidth(int32_t w) -{ - return w/9; -} - -int32_t GAME_getrowheight(int32_t w) -{ - return w>>3; -} -#endif - -//#define BGTILE 311 -//#define BGTILE 1156 -#define BGTILE 1141 // BIGHOLE -#define BORDTILE 3250 // VIEWBORDER -#define BITSTH 1+32+8+16 // high translucency -#define BITSTL 1+8+16 // low translucency -#define BITS 8+16+64 // solid -#define SHADE 16 -#define PALETTE 4 -void GAME_clearbackground(int32_t numcols, int32_t numrows) -{ - UNREFERENCED_PARAMETER(numcols); - -#ifdef USE_OPENGL -// if (getrendermode() < 3) bits = BITS; -// else - if (rendmode>=3 && qsetmode==200) - { - int32_t x, y, xsiz, ysiz, tx2, ty2; - int32_t daydim, bits; - - bits = BITSTL; - - daydim = numrows<<3; - - xsiz = tilesizx[BGTILE]; - tx2 = xdim/xsiz; - ysiz = tilesizy[BGTILE]; - ty2 = daydim/ysiz; - - setpolymost2dview(); - - for (x=0; x<=tx2; x++) - for (y=0; y<=ty2; y++) - rotatesprite(x*xsiz<<16,y*ysiz<<16,65536L,0,BGTILE,SHADE,PALETTE,bits,0,0,xdim,daydim); - - xsiz = tilesizy[BORDTILE]; - tx2 = xdim/xsiz; - ysiz = tilesizx[BORDTILE]; - - for (x=0; x<=tx2; x++) - rotatesprite(x*xsiz<<16,(daydim+ysiz+1)<<16,65536L,1536, - BORDTILE,SHADE-12,PALETTE,BITS,0,0,xdim,daydim+ysiz+1); - - return; - } -#endif - - CLEARLINES2D(0, min(ydim, numrows*8+8), editorcolors[16]); -} - -static void m32_osdsetfunctions() -{ - OSD_SetFunctions( -/* - GAME_drawosdchar, - GAME_drawosdstr, - GAME_drawosdcursor, - GAME_getcolumnwidth, - GAME_getrowheight, -*/ - 0,0,0,0,0, - GAME_clearbackground, - /*(int32_t( *)(void))*/GetTime, - NULL - ); -} - - -#endif - -enum -{ - T_EOF = -2, - T_ERROR = -1, - T_INCLUDE = 0, - T_DEFINE = 1, - T_LOADGRP, - T_TILEGROUP, - T_TILE, - T_TILERANGE, - T_HOTKEY, - T_TILES, - T_NOAUTOLOAD, - T_COLORS, - - T_ALPHABET, - T_MAP, - T_MAPA, - T_MAPRANGE, - T_MAPRANGEA, - T_OFFSET, - T_OFFSETA, - - T_DEFINESOUND, -}; - -typedef struct -{ - const char *text; - int32_t tokenid; -} -tokenlist; - -static int32_t getatoken(scriptfile *sf, const tokenlist *tl, int32_t ntokens) -{ - char *tok; - int32_t i; - - if (!sf) return T_ERROR; - tok = scriptfile_gettoken(sf); - if (!tok) return T_EOF; - - for (i=0; iname); - initprintf("Using group file '%s'.\n", tempbuf); - initgroupfile(tempbuf); - findfiles = findfiles->next; - } - } -} - -int32_t parsegroupfiles(scriptfile *script) -{ - int32_t tokn; - char *cmdtokptr; - - tokenlist grptokens[] = - { - { "include", T_INCLUDE }, - { "#include", T_INCLUDE }, - { "loadgrp", T_LOADGRP }, - { "noautoload", T_NOAUTOLOAD } - }; - - while (1) - { - tokn = getatoken(script,grptokens,sizeof(grptokens)/sizeof(tokenlist)); - cmdtokptr = script->ltextptr; - switch (tokn) - { - case T_LOADGRP: - { - char *fn; - - pathsearchmode = 1; - if (!scriptfile_getstring(script,&fn)) - { - int32_t j = initgroupfile(fn); - - if (j == -1) - initprintf("Could not find group file '%s'.\n",fn); - else - { - initprintf("Using group file '%s'.\n",fn); - if (!NoAutoLoad) - DoAutoload(fn); - } - - } - pathsearchmode = 0; - } - break; - case T_INCLUDE: - { - char *fn; - if (!scriptfile_getstring(script,&fn)) - { - scriptfile *included; - - included = scriptfile_fromfile(fn); - if (!included) - { - initprintf("Warning: Failed including %s on line %s:%d\n", - fn, script->filename,scriptfile_getlinum(script,cmdtokptr)); - } - else - { - parsegroupfiles(included); - scriptfile_close(included); - } - } - break; - } - break; - case T_NOAUTOLOAD: - NoAutoLoad = 1; - break; - case T_EOF: - return(0); - default: - break; - } - } - return 0; -} - -int32_t loadgroupfiles(const char *fn) -{ - scriptfile *script; - - script = scriptfile_fromfile(fn); - if (!script) return -1; - - parsegroupfiles(script); - - scriptfile_close(script); - scriptfile_clearsymbols(); - - return 0; -} - -int32_t parsetilegroups(scriptfile *script) -{ - int32_t tokn; - char *cmdtokptr; - - tokenlist tgtokens[] = - { - { "include", T_INCLUDE }, - { "#include", T_INCLUDE }, - { "define", T_DEFINE }, - { "#define", T_DEFINE }, - { "tilegroup", T_TILEGROUP }, - { "spritehotkey", T_HOTKEY }, - { "alphabet", T_ALPHABET }, - }; - - while (1) - { - tokn = getatoken(script,tgtokens,sizeof(tgtokens)/sizeof(tokenlist)); - cmdtokptr = script->ltextptr; - switch (tokn) - { - case T_HOTKEY: - { - int32_t i, j; - if (scriptfile_getsymbol(script,&i)) break; - if (scriptfile_getsymbol(script,&j)) break; - if (i < 0 || i > 9 || j < 0 || j >= MAXTILES) break; - prefixtiles[i] = j; - break; - } - case T_INCLUDE: - { - char *fn; - if (!scriptfile_getstring(script,&fn)) - { - scriptfile *included; - - included = scriptfile_fromfile(fn); - if (!included) - { - initprintf("Warning: Failed including %s on line %s:%d\n", - fn, script->filename,scriptfile_getlinum(script,cmdtokptr)); - } - else - { - parsetilegroups(included); - scriptfile_close(included); - } - } - break; - } - case T_DEFINE: - { - char *name; - int32_t number; - - if (scriptfile_getstring(script,&name)) break; - if (scriptfile_getsymbol(script,&number)) break; - if (scriptfile_addsymbolvalue(name,number) < 0) - initprintf("Warning: Symbol %s was NOT redefined to %d on line %s:%d\n", - name,number,script->filename,scriptfile_getlinum(script,cmdtokptr)); - break; - } - case T_TILEGROUP: - { - char *end, *name; - int32_t i; - - if (tile_groups >= MAX_TILE_GROUPS) break; - if (scriptfile_getstring(script,&name)) break; - if (scriptfile_getbraces(script,&end)) break; - - s_TileGroups[tile_groups].pIds = Bcalloc(MAX_TILE_GROUP_ENTRIES, sizeof(int32_t)); - s_TileGroups[tile_groups].szText = Bstrdup(name); - - while (script->textptr < end) - { - tokenlist tgtokens2[] = - { - { "tilegroup", T_TILEGROUP }, - { "tile", T_TILE }, - { "tilerange", T_TILERANGE }, - { "hotkey", T_HOTKEY }, - { "tiles", T_TILES }, - { "colors", T_COLORS }, - }; - - int32_t token = getatoken(script,tgtokens2,sizeof(tgtokens2)/sizeof(tokenlist)); - switch (token) - { - case T_TILE: - { - if (scriptfile_getsymbol(script,&i)) break; - if (i >= 0 && i < MAXTILES && s_TileGroups[tile_groups].nIds < MAX_TILE_GROUP_ENTRIES) - s_TileGroups[tile_groups].pIds[s_TileGroups[tile_groups].nIds++] = i; - // OSD_Printf("added tile %d to group %d\n",i,g); - break; - } - case T_TILERANGE: - { - int32_t j; - if (scriptfile_getsymbol(script,&i)) break; - if (scriptfile_getsymbol(script,&j)) break; - if (i < 0 || i >= MAXTILES || j < 0 || j >= MAXTILES) break; - while (s_TileGroups[tile_groups].nIds < MAX_TILE_GROUP_ENTRIES && i <= j) - { - s_TileGroups[tile_groups].pIds[s_TileGroups[tile_groups].nIds++] = i++; - // OSD_Printf("added tile %d to group %d\n",i,g); - } - break; - } - case T_COLORS: - { - int32_t j; - if (scriptfile_getsymbol(script, &i)) break; - if (scriptfile_getsymbol(script, &j)) break; - if (i < 0 || i >= 256 || j < 0 || j >= 256) break; - s_TileGroups[tile_groups].color1 = i; - s_TileGroups[tile_groups].color2 = j; - break; - } - case T_HOTKEY: - { - char *c; - if (scriptfile_getstring(script,&c)) break; - s_TileGroups[tile_groups].key1 = Btoupper(c[0]); - s_TileGroups[tile_groups].key2 = Btolower(c[0]); - break; - } - case T_TILES: - { - char *end2; - if (scriptfile_getbraces(script,&end2)) break; - while (script->textptr < end2-1) - { - if (!scriptfile_getsymbol(script,&i)) - { - if (i >= 0 && i < MAXTILES && s_TileGroups[tile_groups].nIds < MAX_TILE_GROUP_ENTRIES) - s_TileGroups[tile_groups].pIds[s_TileGroups[tile_groups].nIds++] = i; - // OSD_Printf("added tile %d to group %d\n",i,g); - } - } - break; - } - } - } - - s_TileGroups[tile_groups].pIds = Brealloc(s_TileGroups[tile_groups].pIds, - s_TileGroups[tile_groups].nIds*sizeof(int32_t)); - tile_groups++; - break; - } - case T_ALPHABET: - { - char *end; - int32_t i, j, k; - - if (numalphabets >= MAX_ALPHABETS) - { - OSD_Printf("Too many alphabet definitions (max: %d).\n", MAX_ALPHABETS); - break; - } - - if (scriptfile_getbraces(script,&end)) break; - - for (i=0; itextptr < end) - { - tokenlist alphtokens2[] = - { - { "map", T_MAP }, - { "mapa", T_MAPA }, - { "maprange", T_MAPRANGE }, - { "maprangea", T_MAPRANGEA }, - { "offset", T_OFFSET }, - { "offseta", T_OFFSETA }, - }; - - int32_t token = getatoken(script,alphtokens2,sizeof(alphtokens2)/sizeof(tokenlist)); - switch (token) - { - case T_MAP: // map , e.g. map 46 3002 - { - if (scriptfile_getnumber(script,&i)) break; - if (scriptfile_getsymbol(script,&j)) break; - - if (i>=33 && i<=126 && j>= 0 && j , e.g. map ".,!?" 3002 - { - char *s; - if (scriptfile_getstring(script,&s)) break; - if (scriptfile_getsymbol(script,&i)) break; - - for (; *s; s++, i++) - { - if (*s>=33 && *s<=126 && i>= 0 && i , e.g. map 33 126 STARTALPHANUM - // maprangea , e.g. map "!" "~" STARTALPHANUM - case T_MAPRANGE: - case T_MAPRANGEA: - { - if (token==T_MAPRANGE) - { - if (scriptfile_getnumber(script,&i)) break; - if (scriptfile_getnumber(script,&j)) break; - } - else - { - char *c1, *c2; - if (scriptfile_getstring(script,&c1)) break; - if (scriptfile_getstring(script,&c2)) break; - i=*c1; - j=*c2; - } - if (scriptfile_getsymbol(script,&k)) break; - - if (i>126 || j<33) break; - for (; i<=j && k=33 && i<=126) - alphabets[numalphabets].pic[i-33] = k; - } - break; - } - case T_OFFSET: // offset - { - if (scriptfile_getnumber(script, &i)) break; - if (scriptfile_getnumber(script, &j)) break; - if (scriptfile_getnumber(script, &k)) break; - - if (i >= 33 && i <= 126) - { - alphabets[numalphabets].xofs[i-33] = j; - alphabets[numalphabets].yofs[i-33] = k; - } - break; - } - case T_OFFSETA: // offseta - { - char *s; - if (scriptfile_getstring(script, &s)) break; - if (scriptfile_getnumber(script, &i)) break; - if (scriptfile_getnumber(script, &j)) break; - - for (; *s; s++) - if (*s >= 33 && *s <= 126) - { - alphabets[numalphabets].xofs[(*s)-33] = i; - alphabets[numalphabets].yofs[(*s)-33] = j; - } - break; - } - } - } - numalphabets++; - break; - } - case T_EOF: - return(0); - default: - break; - } - } - return 0; -} - -static int32_t loadtilegroups(const char *fn) -{ - int32_t i, j; - scriptfile *script; - TileGroup blank = { NULL, 0, NULL, 0, 0, 0, 0}; - - script = scriptfile_fromfile(fn); - if (!script) return -1; - - for (i=0; i= 0 ; j--) - { - // Apply the colors to all tiles in the group. - spritecol2d[s_TileGroups[i].pIds[j]][0] = s_TileGroups[i].color1; - spritecol2d[s_TileGroups[i].pIds[j]][1] = s_TileGroups[i].color2; - } - } - } - - return 0; -} - -/// vvv Parse CON files partially to get sound definitions -static int32_t parseconsounds(scriptfile *script) -{ - int32_t tokn; - char *cmdtokptr; - int32_t num_invalidsounds=0; - - tokenlist cstokens[] = - { - { "include", T_INCLUDE }, - { "#include", T_INCLUDE }, - { "define", T_DEFINE }, - { "#define", T_DEFINE }, - { "definesound", T_DEFINESOUND }, - }; - - while (1) - { - tokn = getatoken(script,cstokens,sizeof(cstokens)/sizeof(tokenlist)); - cmdtokptr = script->ltextptr; - switch (tokn) - { - case T_INCLUDE: - { - char *fn; - if (!scriptfile_getstring(script,&fn)) - { - scriptfile *included; - - included = scriptfile_fromfile(fn); - if (!included) - { - initprintf("Warning: Failed including %s on line %s:%d\n", - fn, script->filename,scriptfile_getlinum(script,cmdtokptr)); - } - else - { - int32_t tmp = parseconsounds(included); - scriptfile_close(included); - if (tmp < 0) return tmp; - } - } - break; - } - case T_DEFINE: - { - char *name; - int32_t number; - - if (scriptfile_getstring(script,&name)) break; - if (scriptfile_getsymbol(script,&number)) break; - if (scriptfile_addsymbolvalue(name,number) < 0) - initprintf("Warning: Symbol %s was NOT redefined to %d on line %s:%d\n", - name,number,script->filename,scriptfile_getlinum(script,cmdtokptr)); - break; - } - case T_DEFINESOUND: - { - char *definedname, *filename; - int32_t sndnum, ps, pe, pr, m, vo; - int32_t slen; - - if (scriptfile_getsymbol(script, &sndnum)) break; - - definedname = Bstrdup(script->ltextptr); - if (!definedname) return -1; - - if (sndnum < 0 || sndnum >= MAXSOUNDS) - { - initprintf("Warning: invalid sound definition %s (sound number < 0 or >= MAXSOUNDS) on line %s:%d\n", - definedname, script->filename,scriptfile_getlinum(script,cmdtokptr)); - num_invalidsounds++; - break; - } - - if (scriptfile_getstring(script, &filename)) - { - Bfree(definedname); - num_invalidsounds++; - break; - } - - slen = Bstrlen(filename); - if (slen >= BMAX_PATH) - { - initprintf("Warning: invalid sound definition %s (filename too long) on line %s:%d\n", - definedname, script->filename,scriptfile_getlinum(script,cmdtokptr)); - Bfree(definedname); - num_invalidsounds++; - break; - } - - if (g_sounds[sndnum].filename == NULL) - g_sounds[sndnum].filename = Bcalloc(slen+1,sizeof(uint8_t)); - // Hopefully noone does memcpy(..., g_sounds[].filename, BMAX_PATH) - if (!g_sounds[sndnum].filename) - { - Bfree(definedname); - return -1; - } - Bmemcpy(g_sounds[sndnum].filename, filename, slen+1); - - if (scriptfile_getnumber(script, &ps)) goto BAD; - if (scriptfile_getnumber(script, &pe)) goto BAD; - if (scriptfile_getnumber(script, &pr)) goto BAD; - if (scriptfile_getnumber(script, &m)) goto BAD; - if (ParentalLock && (m&8)) goto BAD; - if (scriptfile_getnumber(script, &vo)) goto BAD; - if (0) - { -BAD: - Bfree(definedname); - Bfree(g_sounds[sndnum].filename); - g_sounds[sndnum].filename = NULL; - num_invalidsounds++; - break; - } - - g_sounds[sndnum].definedname = definedname; // we want to keep it for display purposes - g_sounds[sndnum].ps = ps; - g_sounds[sndnum].pe = pe; - g_sounds[sndnum].pr = pr; - g_sounds[sndnum].m = m; - g_sounds[sndnum].vo = vo; - g_sndnum[g_numsounds] = g_definedsndnum[g_numsounds] = sndnum; - g_numsounds++; - if (g_numsounds == MAXSOUNDS) - goto END; - break; - } - case T_EOF: - goto END; - default: - break; - } - } -END: - return g_numsounds; -} - -static int32_t loadconsounds(const char *fn) -{ - scriptfile *script; - int32_t ret; - - initprintf("Loading sounds from '%s'\n",fn); - - script = scriptfile_fromfile(fn); - if (!script) - { - initprintf("Error loading sounds: file '%s' not found.\n", fn); - return -1; - } - ret = parseconsounds(script); - if (ret < 0) - initprintf("There was an error parsing '%s'.\n", fn); - else if (ret == 0) - initprintf("'%s' doesn't contain sound definitions. No sounds loaded.\n", fn); - else - initprintf("Loaded %d sound definitions.\n", ret); - - scriptfile_close(script); - scriptfile_clearsymbols(); - return ret; -} - -void ExtPreLoadMap(void) -{ -} - -/// ^^^ - -static void m32script_interrupt_handler(int signo) -{ - if (signo==SIGINT) - { - vm.flags |= VMFLAG_ERROR; - OSD_Printf("M32 script execution interrupted.\n"); - Bmemset(aEventEnabled, 0, sizeof(aEventEnabled)); - } -} - -int32_t ExtInit(void) -{ - int32_t rv = 0; - int32_t i; - char cwd[BMAX_PATH]; - -#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) - addsearchpath("/usr/share/games/jfduke3d"); - addsearchpath("/usr/local/share/games/jfduke3d"); - addsearchpath("/usr/share/games/eduke32"); - addsearchpath("/usr/local/share/games/eduke32"); -#elif defined(__APPLE__) - addsearchpath("/Library/Application Support/JFDuke3D"); - addsearchpath("/Library/Application Support/EDuke32"); -#endif - - if (getcwd(cwd,BMAX_PATH)) - { -#if defined(__APPLE__) - /* Dirty hack on OS X to also look for gamedata inside the application bundle - rhoenie 08/08 */ - char seekinappcontainer[BMAX_PATH]; - Bsnprintf(seekinappcontainer,sizeof(seekinappcontainer),"%s/EDuke32.app/", cwd); - addsearchpath(seekinappcontainer); -#endif - addsearchpath(cwd); - Bstrcpy(program_origcwd, cwd); - } - else - program_origcwd[0] = '\0'; - - if (CommandPaths) - { - struct strllist *s; - while (CommandPaths) - { - s = CommandPaths->next; - addsearchpath(CommandPaths->str); - - Bfree(CommandPaths->str); - Bfree(CommandPaths); - CommandPaths = s; - } - } - -#if defined(_WIN32) - if (!access("user_profiles_enabled", F_OK)) -#else - if (usecwd == 0 && access("user_profiles_disabled", F_OK)) -#endif - { - char *homedir; - int32_t asperr; - - if ((homedir = Bgethomedir())) - { - Bsnprintf(cwd,sizeof(cwd),"%s/" -#if defined(_WIN32) - "EDuke32 Settings" -#elif defined(__APPLE__) - "Library/Application Support/EDuke32" -#else - ".eduke32" -#endif - ,homedir); - asperr = addsearchpath(cwd); - if (asperr == -2) - { - if (Bmkdir(cwd,S_IRWXU) == 0) asperr = addsearchpath(cwd); - else asperr = -1; - } - if (asperr == 0) - chdir(cwd); - Bfree(homedir); - } - } - - // JBF 20031220: Because it's annoying renaming GRP files whenever I want to test different game data - if (getenv("DUKE3DGRP")) - { - g_grpNamePtr = getenv("DUKE3DGRP"); - initprintf("Using %s as main GRP file\n", g_grpNamePtr); - } - - i = initgroupfile(g_grpNamePtr); - - if (!NoAutoLoad) - { - static const char *extensions[3] = { "*.grp", "*.zip", "*.pk3" }; - int32_t exti; - - for (exti=0; exti<3; exti++) - { - getfilenames("autoload", extensions[exti]); - while (findfiles) - { - Bsprintf(tempbuf,"autoload/%s",findfiles->name); - initprintf("Using group file '%s'.\n",tempbuf); - initgroupfile(tempbuf); - findfiles = findfiles->next; - } - } - - if (i != -1) - DoAutoload(g_grpNamePtr); - } - - if (getenv("DUKE3DDEF")) - { - defsfilename = getenv("DUKE3DDEF"); - initprintf("Using '%s' as definitions file\n", defsfilename); - } - loadgroupfiles(defsfilename); - - { - struct strllist *s; - int32_t j; - - pathsearchmode = 1; - while (CommandGrps) - { - s = CommandGrps->next; - j = initgroupfile(CommandGrps->str); - if (j == -1) initprintf("Could not find group file '%s'.\n",CommandGrps->str); - else - { - initprintf("Using group file '%s'.\n",CommandGrps->str); - if (!NoAutoLoad) - DoAutoload(CommandGrps->str); - } - - Bfree(CommandGrps->str); - Bfree(CommandGrps); - CommandGrps = s; - } - pathsearchmode = 0; - } - - bpp = 32; - -#ifdef USE_OPENGL - glusetexcache = -1; - - if (Bstrcmp(setupfilename, "mapster32.cfg")) - initprintf("Using config file '%s'.\n",setupfilename); - - if (loadsetup(setupfilename) < 0) - initprintf("Configuration file not found, using defaults.\n"), rv = 1; - - if (glusetexcache == -1) - { - int32_t i; -#if 0 - i=wm_ynbox("Texture Cache", - "Would you like to enable the on-disk texture cache?\n\n" - "You generally want to say 'yes' here, especially if using the HRP."); -#else - i = 1; -#endif - if (i) - glusetexcompr = 1, glusetexcache = 2; - else glusetexcache = 0; - } -#endif - - Bmemcpy(buildkeys, default_buildkeys, NUMBUILDKEYS); //Trick to make build use setup.dat keys - - if (initengine()) - { - initprintf("There was a problem initializing the engine.\n"); - return -1; - } - - setbasepaltable(basepaltable, BASEPALCOUNT); - - kensplayerheight = 40; //32 - zmode = 2; - zlock = kensplayerheight<<8; - - ReadGamePalette(); - // InitWater(); - - InitCustomColors(); - - getmessageleng = 0; - getmessagetimeoff = 0; - - Bsprintf(apptitle, "Mapster32 %s %s", VERSION, s_buildRev); - autosavetimer = totalclock+120*autosave; - -#if defined(DUKEOSD) - m32_osdsetfunctions(); -#endif - - OSD_SetParameters(0,2, 0,0, 4,0); - registerosdcommands(); - - // backup pathsearchmode so that a later open - // will hopefully be the same file - pathsearchmode_oninit = pathsearchmode; - loadtilegroups(default_tiles_cfg); - - ReadHelpFile("m32help.hlp"); - - signal(SIGINT, m32script_interrupt_handler); - - return rv; -} - -#ifdef RENDERTYPEWIN -void app_crashhandler(void) -{ - if (levelname[0]) - { - char *f = strstr(levelname,".map"); - - if (f) - Bstrcpy(f,"_crash.map"); - else Bstrcat(f,"_crash.map"); - - SaveBoard(f, 1); - } -} -#endif - -void ExtUnInit(void) -{ - int32_t i; - // setvmode(0x03); - writesetup(setupfilename); - - S_SoundShutdown(); - uninitgroupfile(); - - for (i = MAX_TILE_GROUPS-1; i >= 0; i--) - { - if (s_TileGroups[i].pIds != NULL) - Bfree(s_TileGroups[i].pIds); - if (s_TileGroups[i].szText != NULL) - Bfree(s_TileGroups[i].szText); - } - for (i = numhelppages-1; i >= 0; i--) Bfree(helppage[i]); - if (helppage) Bfree(helppage); -} - -void ExtPreCheckKeys(void) // just before drawrooms -{ - int32_t i = 0, ii; - int32_t radius, xp1, yp1; - int32_t col; - int32_t picnum, frames; - int32_t ang = 0, flags, shade; - - if (qsetmode == 200) //In 3D mode - { - if (shadepreview) - { - int32_t i = 0; - for (i=0; i= 0) - { - if (!wallflag[wall[w].nextwall]) - { - wallshades[wall[w].nextwall] = NEXTWALL(w).shade; - NEXTWALL(w).shade = sprite[i].shade; - wallpals[wall[w].nextwall] = NEXTWALL(w).pal; - NEXTWALL(w).pal = sprite[i].pal; - wallflag[wall[w].nextwall] = 1; - } - } */ - } - sectorshades[isec][0] = sector[isec].floorshade; - sectorshades[isec][1] = sector[isec].ceilingshade; - sector[isec].floorshade = sprite[i].shade; - sector[isec].ceilingshade = sprite[i].shade; - sectorpals[isec][0] = sector[isec].floorpal; - sectorpals[isec][1] = sector[isec].ceilingpal; - sector[isec].floorpal = sprite[i].pal; - sector[isec].ceilingpal = sprite[i].pal; - w = headspritesect[isec]; - while (w >= 0) - { - if (w == i) { w = nextspritesect[w]; continue; } - spriteshades[w] = sprite[w].shade; - sprite[w].shade = sprite[i].shade; - spritepals[w] = sprite[w].pal; - sprite[w].pal = sprite[i].pal; - w = nextspritesect[w]; - } - } - else if (sprite[i].picnum == SECTOREFFECTOR && (sprite[i].lotag == 49 || sprite[i].lotag == 50)) - { -#ifdef POLYMER - if (sprite[i].lotag == 49) - { - if (getrendermode() == 4) - { - if (spritelightptr[i] == NULL) - { -#pragma pack(push,1) - _prlight mylight; -#pragma pack(pop) - mylight.sector = SECT; - Bmemcpy(&mylight, &sprite[i], sizeof(vec3_t)); - mylight.range = SHT; - mylight.color[0] = sprite[i].xvel; - mylight.color[1] = sprite[i].yvel; - mylight.color[2] = sprite[i].zvel; - mylight.radius = 0; - mylight.angle = SA; - mylight.horiz = SH; - mylight.minshade = sprite[i].xoffset; - mylight.maxshade = sprite[i].yoffset; - mylight.tilenum = 0; - - if (CS & 2) - { - if (CS & 512) - mylight.priority = PR_LIGHT_PRIO_LOW; - else - mylight.priority = PR_LIGHT_PRIO_HIGH; - } - else - mylight.priority = PR_LIGHT_PRIO_MAX; - - spritelightid[i] = polymer_addlight(&mylight); - if (spritelightid[i] >= 0) - spritelightptr[i] = &prlights[spritelightid[i]]; - } - else - { - if (Bmemcmp(&sprite[i], spritelightptr[i], sizeof(vec3_t))) - { - Bmemcpy(spritelightptr[i], &sprite[i], sizeof(vec3_t)); - spritelightptr[i]->sector = sprite[i].sectnum; - spritelightptr[i]->flags.invalidate = 1; - } - if (SHT != spritelightptr[i]->range) - { - spritelightptr[i]->range = SHT; - spritelightptr[i]->flags.invalidate = 1; - } - if ((sprite[i].xvel != spritelightptr[i]->color[0]) || - (sprite[i].yvel != spritelightptr[i]->color[1]) || - (sprite[i].zvel != spritelightptr[i]->color[2])) - { - spritelightptr[i]->color[0] = sprite[i].xvel; - spritelightptr[i]->color[1] = sprite[i].yvel; - spritelightptr[i]->color[2] = sprite[i].zvel; - } - } - } - } - if (sprite[i].lotag == 50) - { - if (getrendermode() == 4) - { - if (spritelightptr[i] == NULL) - { -#pragma pack(push,1) - _prlight mylight; -#pragma pack(pop) - - mylight.sector = SECT; - Bmemcpy(&mylight, &sprite[i], sizeof(vec3_t)); - mylight.range = SHT; - mylight.color[0] = sprite[i].xvel; - mylight.color[1] = sprite[i].yvel; - mylight.color[2] = sprite[i].zvel; - mylight.radius = (256-(SS+128))<<1; - mylight.faderadius = (int16_t)(mylight.radius * 0.75f); - mylight.angle = SA; - mylight.horiz = SH; - mylight.minshade = sprite[i].xoffset; - mylight.maxshade = sprite[i].yoffset; - mylight.tilenum = OW; - - if (CS & 2) - { - if (CS & 512) - mylight.priority = PR_LIGHT_PRIO_LOW; - else - mylight.priority = PR_LIGHT_PRIO_HIGH; - } - else - mylight.priority = PR_LIGHT_PRIO_MAX; - - spritelightid[i] = polymer_addlight(&mylight); - if (spritelightid[i] >= 0) - spritelightptr[i] = &prlights[spritelightid[i]]; - } - else - { - if (Bmemcmp(&sprite[i], spritelightptr[i], sizeof(vec3_t))) - { - Bmemcpy(spritelightptr[i], &sprite[i], sizeof(vec3_t)); - spritelightptr[i]->sector = sprite[i].sectnum; - spritelightptr[i]->flags.invalidate = 1; - } - if (SHT != spritelightptr[i]->range) - { - spritelightptr[i]->range = SHT; - spritelightptr[i]->flags.invalidate = 1; - } - if ((sprite[i].xvel != spritelightptr[i]->color[0]) || - (sprite[i].yvel != spritelightptr[i]->color[1]) || - (sprite[i].zvel != spritelightptr[i]->color[2])) - { - spritelightptr[i]->color[0] = sprite[i].xvel; - spritelightptr[i]->color[1] = sprite[i].yvel; - spritelightptr[i]->color[2] = sprite[i].zvel; - } - if (((256-(SS+128))<<1) != spritelightptr[i]->radius) - { - spritelightptr[i]->radius = (256-(SS+128))<<1; - spritelightptr[i]->faderadius = (int16_t)(spritelightptr[i]->radius * 0.75f); - spritelightptr[i]->flags.invalidate = 1; - } - if (SA != spritelightptr[i]->angle) - { - spritelightptr[i]->angle = SA; - spritelightptr[i]->flags.invalidate = 1; - } - if (SH != spritelightptr[i]->horiz) - { - spritelightptr[i]->horiz = SH; - spritelightptr[i]->flags.invalidate = 1; - } - spritelightptr[i]->tilenum = OW; - } - } - } -#endif // POLYMER - } - } - } - - if (floor_over_floor) SE40Code(pos.x,pos.y,pos.z,ang,horiz); - if (purpleon) clearview(255); - - return; - } - - - begindrawing(); //{{{ - - // if (cursectornum >= 0) - // fillsector(cursectornum, 31); - - if (graphicsmode && !m32_sideview && zoom >= 256) - { - for (i=ii=0; ix-pos.x,tspr->y-pos.y); - k = (((sprite[i].ang+3072+128-k)&2047)>>8)&7; - //This guy has only 5 pictures for 8 angles (3 are x-flipped) - if (k <= 4) - { - picnum += k; - ang = 0; - flags &= ~4; - } - else - { - picnum += 8-k; - ang = 1024; - flags |= 4; - } - } - - if (graphicsmode == 2) - { - if (frames==2) picnum+=((((4-(totalclock>>5)))&1)*5); - if (frames==4) picnum+=((((4-(totalclock>>5)))&3)*5); - if (frames==5) picnum+=(((totalclock>>5)%5))*5; - } - - if (tilesizx[picnum] == 0) - picnum -= 5; //Hack, for actors - } - break; - default: - break; - } - - xp1 = mulscale14(sprite[i].x-pos.x,zoom); - yp1 = mulscale14(sprite[i].y-pos.y-(tilesizy[picnum]<<2),zoom); - if (i+16384 != pointhighlight || !(totalclock&32)) - { - shade = sprite[i].shade; - if (shade < 6) - shade = 6; - } - - xp1 += halfxdim16; - yp1 += midydim16; - - ydim16 = ydim-STATUS2DSIZ2; - - if (xp1 < 4 || xp1 > xdim-6 || yp1 < 4 || yp1 > ydim16-6) - continue; - rotatesprite(xp1<<16,yp1<<16,zoom<<5,ang,picnum, - shade,sprite[i].pal,flags,0,0,xdim-1,ydim16-1); - } - } - - if (showambiencesounds) - { - for (ii=0; ii=0; i=nextspritesect[i]) - { - if (sprite[i].picnum != MUSICANDSFX /*|| zoom < 256*/ ) - continue; - - if (showambiencesounds==1 && sprite[i].sectnum!=cursectnum) - continue; - - screencoords(&xp1,&yp1, sprite[i].x-pos.x,sprite[i].y-pos.y, zoom); - if (m32_sideview) - yp1 += getscreenvdisp(sprite[i].z-pos.z, zoom); - - radius = mulscale14(sprite[i].hitag,zoom); - col = 6; - if (i+16384 == pointhighlight) - if (totalclock & 32) col += (2<<2); - drawlinepat = 0xf0f0f0f0; - drawcircle16(halfxdim16+xp1, midydim16+yp1, radius, scalescreeny(16384), editorcolors[(int32_t)col]); - drawlinepat = 0xffffffff; - // radius = mulscale15(sprite[i].hitag,zoom); - // drawcircle16(halfxdim16+xp1, midydim16+yp1, radius, col); - } - } - - enddrawing(); //}}} -} - -void ExtAnalyzeSprites(void) -{ - int32_t i, k; - spritetype *tspr; - int32_t frames=0, l; - - for (i=0,tspr=&tsprite[0]; ipicnum<11) tspr->xrepeat=0; - - if (nosprites==1||nosprites==3) - switch (tspr->picnum) - { - case SEENINE : - tspr->xrepeat=0; - } - - if (showinvisibility && (tspr->cstat&32768)) - { - tspr->pal = 6; - tspr->cstat &= ~32768; - tspr->cstat |= 2+512; - } - - if (shadepreview && !(tspr->cstat & 16)) - { - if (tspr->sectnum<0) - continue; - - if (sector[tspr->sectnum].ceilingstat&1) - { - l = sector[tspr->sectnum].ceilingshade; - if (sector[tspr->sectnum].ceilingpal != 0 && sector[tspr->sectnum].ceilingpal < num_tables) - tspr->pal=sector[tspr->sectnum].ceilingpal; - } - else - { - l = sector[tspr->sectnum].floorshade; - if (sector[tspr->sectnum].floorpal != 0 && sector[tspr->sectnum].floorpal < num_tables) - tspr->pal=sector[tspr->sectnum].floorpal; - } - - if ((tspr->owner>=0 && (sprite[tspr->owner].cstat&2048)==0)) - { - l = clamp(l, -127, 127); -// tspr->shade = l; - } - } - - switch (tspr->picnum) - { - // 5-frame walk - case 1550 : // Shark - frames=5; - // 2-frame walk - case 1445 : // duke kick - case LIZTROOPDUCKING : - case 2030 : // pig shot - case OCTABRAIN : - case PIGCOPDIVE : - case 2190 : // liz capt shot - case BOSS1SHOOT : - case BOSS1LOB : - case LIZTROOPSHOOT : - if (frames==0) frames=2; - - // 4-frame walk - case 1491 : // duke crawl - case LIZTROOP : - case LIZTROOPRUNNING : - case PIGCOP : - case LIZMAN : - case BOSS1 : - case BOSS2 : - case BOSS3 : - case BOSS4 : - case NEWBEAST: - if (frames==0) frames=4; - case LIZTROOPJETPACK : - case DRONE : - case COMMANDER : - case TANK : - case RECON : - if (frames==0) frames = 10; - case ROTATEGUN : - case CAMERA1: - case APLAYER : - if (frames==0) frames=1; - case GREENSLIME : - case PIGCOPSTAYPUT : - case LIZMANSTAYPUT: - case LIZTROOPSTAYPUT : - case LIZMANSPITTING : - case LIZMANFEEDING : - case LIZMANJUMP : - case NEWBEASTSTAYPUT : - case BOSS1STAYPUT : - if (skill!=4) - { - if (tspr->lotag>skill+1) - { - tspr->xrepeat=0; - tspr->cstat=32768; - break; - } - } - if (nosprites==2||nosprites==3) - { - tspr->xrepeat=0; - tspr->cstat=32768; - } - // else tspr->cstat&=32767; - -#ifdef USE_OPENGL - if (!usemodels || md_tilehasmodel(tspr->picnum,tspr->pal) < 0) -#endif - { - if (frames!=0) - { - if (frames==10) frames=0; - k = getangle(tspr->x-pos.x,tspr->y-pos.y); - k = (((tspr->ang+3072+128-k)&2047)>>8)&7; - //This guy has only 5 pictures for 8 angles (3 are x-flipped) - if (k <= 4) - { - tspr->picnum += k; - tspr->cstat &= ~4; //clear x-flipping bit - } - else - { - tspr->picnum += 8-k; - tspr->cstat |= 4; //set x-flipping bit - } - } - - if (frames==2) tspr->picnum += (((4-(totalclock>>5)))&1)*5; - if (frames==4) tspr->picnum += (((4-(totalclock>>5)))&3)*5; - if (frames==5) tspr->picnum += ((totalclock>>5)%5)*5; - - if (tilesizx[tspr->picnum] == 0) - tspr->picnum -= 5; //Hack, for actors - } - break; - default: - break; - - } - } - - VM_OnEvent(EVENT_ANALYZESPRITES, -1); -} - -#define MESSAGEX 3 // (xdimgame>>1) -#define MESSAGEY 3 // ((i/charsperline)<<3)+(ydimgame-(ydimgame>>3))-(((getmessageleng-1)/charsperline)<<3) - -static void Keys2d3d(void) -{ - int32_t i; - - if (mapstate == NULL) - { - // map_revision = 0; - create_map_snapshot(); // initial map state - // Bfree(mapstate->next); - // mapstate = mapstate->prev; - } - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(A)) // 'A - { - if (qsetmode == 200) - autosave = autosave?0:getnumber256("Autosave interval, in seconds: ",180,3600,0); - else - autosave = autosave?0:getnumber16("Autosave interval, in seconds: ",180,3600,0); - - if (autosave) message("Autosave enabled, interval: %d seconds",autosave); - else message("Autosave disabled"); - } - - if (keystatus[KEYSC_QUOTE] && PRESSED_KEYSC(N)) // 'N - { - noclip = !noclip; - message("Clipping %s", noclip?"disabled":"enabled"); - } - - if (eitherCTRL && PRESSED_KEYSC(N)) // CTRL+N - { - spnoclip = !spnoclip; - message("Sprite clipping %s", spnoclip?"disabled":"enabled"); - } - - if (eitherCTRL) //CTRL - { - if (PRESSED_KEYSC(P)) // Ctrl-P: Map playtesting - { - if (qsetmode != 200) - test_map(eitherALT); - } - - if (keystatus[KEYSC_S]) // S - { - if (levelname[0]) - { - keystatus[KEYSC_S] = 0; - - i = CheckMapCorruption(4, 0); - if (i<4) - { - SaveBoard(levelname, 0); - - message("Board saved"); - asksave = 0; - lastsave=totalclock; - } - else - message("Map is heavily corrupted, not saving. See OSD for details."); - } - } - if (keystatus[KEYSC_L]) // L - { - if (totalclock < (lastsave + 120*10) || !AskIfSure("Are you sure you want to load the last saved map?")) - { - int32_t sposx=pos.x,sposy=pos.y,sposz=pos.z,sang=ang; - char *f; - - if (pathsearchmode) f = levelname; - else - { - // virtual filesystem mode can't save to directories so drop the file into - // the current directory - f = Bstrrchr(levelname, '/'); - if (!f) f = levelname; else f++; - } - - lastsave=totalclock; - // sectorhighlightstat = -1; - // newnumwalls = -1; - // joinsector[0] = -1; - // circlewall = -1; - // circlepoints = 7; - - if (LoadBoard(f, 0)) - message("Invalid map format."); - - pos.x=sposx; pos.y=sposy; pos.z=sposz; ang=sang; - updatesectorz(pos.x, pos.y, pos.z, &cursectnum); - - keystatus[KEYSC_L] = 0; - } - } - } - - if (keystatus[buildkeys[BK_MODE2D_3D]]) // Enter - { - getmessageleng = 0; - getmessagetimeoff = 0; -#if defined(DUKEOSD) - m32_osdsetfunctions(); -#endif - } - - if (getmessageleng > 0) - { - if (qsetmode != 200) - printmessage16("%s", getmessage); - if (totalclock > getmessagetimeoff) - getmessageleng = 0; - } - -} -#undef EDUKE32_EXEC -#undef EDUKE32_LOCALEXEC - -void ExtCheckKeys(void) -{ - static int32_t soundinit = 0; - static int32_t lastbstatus = 0; - - if (!soundinit) - { - g_numsounds = 0; - loadconsounds(gamecon); - if (g_numsounds > 0) - { - if (S_SoundStartup() != 0) - S_SoundShutdown(); - } - soundinit = 1; - } - - if (qsetmode == 200 && shadepreview) - { - int32_t i = 0; - int32_t w, isec, start_wall, end_wall; - - for (i=0; i= 0) - { - if (wallflag[wall[w].nextwall]) - { - NEXTWALL(w).shade = wallshades[wall[w].nextwall]; - NEXTWALL(w).pal = wallpals[wall[w].nextwall]; - wallflag[wall[w].nextwall] = 0; - } - } -#endif - } - sector[isec].floorshade = sectorshades[isec][0]; - sector[isec].ceilingshade = sectorshades[isec][1]; - sector[isec].floorpal = sectorpals[isec][0]; - sector[isec].ceilingpal = sectorpals[isec][1]; - - for (w=headspritesect[isec]; w>=0; w=nextspritesect[w]) - { - if (w == i) - continue; - sprite[w].shade = spriteshades[w]; - sprite[w].pal = spritepals[w]; - w = nextspritesect[w]; - } - - } - } - - lastbstatus = bstatus; - readmousebstatus(&bstatus); - - Keys2d3d(); - - if (qsetmode == 200) //In 3D mode - { - Keys3d(); - editinput(); - if (infobox&2) - m32_showmouse(); - } - else - { - Keys2d(); - - if (autocorruptcheck>0 && totalclock > corruptchecktimer) - { - if (CheckMapCorruption(3, 0)>=3) - printmessage16("Corruption detected. See OSD for details."); - corruptchecktimer = totalclock + 120*autocorruptcheck; - } - } - - if (asksave == 1) - asksave++; - else if (asksave == 2 && (bstatus + lastbstatus) == 0 && mapstate) - { - int32_t i; - // check keys so that e.g. bulk deletions won't produce - // as much revisions as deleted sprites - for (i=sizeof(keystatus)/sizeof(keystatus[0])-1; i>=0; i--) - if (keystatus[i]) - break; - if (i==-1) - { - create_map_snapshot(); - asksave++; - } - } - else if (asksave == 3) - asksave++; - - if (totalclock > autosavetimer && autosave) - { - if (asksave == 4) - { - if (CheckMapCorruption(6, 0)>=4) - { - SaveBoard("autosave_corrupt.map", 1); - message("Board autosaved to AUTOSAVE_CORRUPT.MAP"); - } - else - { - SaveBoard("autosave.map", 0); - message("Board autosaved to AUTOSAVE.MAP"); - } - - asksave++; - } - autosavetimer = totalclock+120*autosave; - } - - if (PRESSED_KEYSC(F12)) //F12 - { - screencapture("captxxxx.tga", keystatus[KEYSC_LSHIFT]|keystatus[KEYSC_RSHIFT]); - message("Saved screenshot %04d", capturecount-1); - } -} - - -//// port of a.m32's corruptchk //// -// returns value from 0 (all OK) to 5 (panic!) -#define CCHK_PANIC OSDTEXT_DARKRED "PANIC!!!^O " -//#define CCHKPREF OSDTEXT_RED "^O" -#define CCHK_CORRECTED OSDTEXT_GREEN " -> " - -#define CORRUPTCHK_PRINT(errlev, what, fmt, ...) do \ -{ \ - bad = max(bad, errlev); \ - if (numcorruptthings>=MAXCORRUPTTHINGS) \ - goto too_many_errors; \ - corruptthings[numcorruptthings++] = what; \ - if (errlev >= printfromlev) \ - OSD_Printf("#%d: " fmt "\n", numcorruptthings, ## __VA_ARGS__); \ -} while (0) - -static int32_t walls_are_consistent(int32_t nw, int32_t j) -{ - return (wall[j].x==POINT2(nw).x && wall[j].y==POINT2(nw).y - && POINT2(j).x==wall[nw].x && POINT2(j).y==wall[nw].y); -} - -static void suggest_nextsector_correction(int32_t nw, int32_t j) -{ - if (nw>=0 && nw=0 && nwMAXSECTORS) - CORRUPTCHK_PRINT(5, 0, CCHK_PANIC "SECTOR LIMIT EXCEEDED (MAXSECTORS=%d)!!!", MAXSECTORS); - - if (numwalls>MAXWALLS) - CORRUPTCHK_PRINT(5, 0, CCHK_PANIC "WALL LIMIT EXCEEDED (MAXWALLS=%d)!!!", MAXWALLS); - - if (numsectors>MAXSECTORS || numwalls>MAXWALLS) - { - corruptlevel = bad; - return bad; - } - - seen_nextwalls = Bcalloc((numwalls+7)>>3,1); - if (!seen_nextwalls) return 5; - lastnextwallsource = Bmalloc(numwalls*sizeof(lastnextwallsource[0])); - if (!lastnextwallsource) { Bfree(seen_nextwalls); return 5; } - - for (i=0; i numwalls) - CORRUPTCHK_PRINT(4, CORRUPT_SECTOR|i, "SECTOR[%d].WALLPTR=%d out of range (numwalls=%d)", i, w0, numw); - - if (w0 != ewall) - CORRUPTCHK_PRINT(4, CORRUPT_SECTOR|i, "SECTOR[%d].WALLPTR=%d inconsistent, expected %d", i, w0, ewall); - - if (numw <= 1) - CORRUPTCHK_PRINT(5, CORRUPT_SECTOR|i, CCHK_PANIC "SECTOR[%d].WALLNUM=%d INVALID!!!", i, numw); - else if (numw==2) - CORRUPTCHK_PRINT(3, CORRUPT_SECTOR|i, "SECTOR[%d].WALLNUM=2, expected at least 3", i); - - ewall += numw; - - endwall = w0 + numw; - if (endwall > numwalls) - CORRUPTCHK_PRINT(4, CORRUPT_SECTOR|i, "SECTOR[%d]: wallptr+wallnum=%d out of range: numwalls=%d", i, endwall, numwalls); - - errlevel = max(errlevel, bad); - - if (bad<4) - { - endwall--; - - for (j=w0; j<=endwall; j++) - { - bad = 0; - - if (wall[j].point2 < w0 || wall[j].point2 > endwall) - { - if (wall[j].point2 < 0 || wall[j].point2 >= MAXWALLS) - CORRUPTCHK_PRINT(5, CORRUPT_WALL|j, CCHK_PANIC "WALL[%d].POINT2=%d INVALID!!!", - j, wall[j].point2); - else - CORRUPTCHK_PRINT(4, CORRUPT_WALL|j, "WALL[%d].POINT2=%d out of range [%d, %d]", - j, wall[j].point2, w0, endwall); - } - - nw = wall[j].nextwall; - ns = wall[j].nextsector; - - if (nw >= numwalls) - CORRUPTCHK_PRINT(4, CORRUPT_WALL|j, "WALL[%d].NEXTWALL=%d out of range: numwalls=%d", - j, nw, numwalls); - - if (ns >= numsectors) - CORRUPTCHK_PRINT(4, CORRUPT_WALL|j, "WALL[%d].NEXTSECTOR=%d out of range: numsectors=%d", - j, ns, numsectors); - - if (nw>=w0 && nw<=endwall) - CORRUPTCHK_PRINT(4, CORRUPT_WALL|j, "WALL[%d].NEXTWALL is its own sector's wall", j); - - if (ns == i) - { - if (!bad) - { - int32_t onumct = numcorruptthings; - CORRUPTCHK_PRINT(4, CORRUPT_WALL|j, "WALL[%d].NEXTSECTOR is its own sector", j); - if (onumct < MAXCORRUPTTHINGS) - { - if (tryfixing & (1ull<=printfromlev) - suggest_nextsector_correction(nw, j); - } - } - } - - if (nw>=0 && nw>3]&(1<<(nw&7))) - { - int16_t nwnw, lnws; - int32_t onumct = numcorruptthings; - - lnws = lastnextwallsource[nw]; - CORRUPTCHK_PRINT(3, CORRUPT_WALL|j, "WALL[%d].NEXTWALL=%d already referenced from wall %d", - j, nw, lnws); - nwnw = wall[nw].nextwall; - if (onumct < MAXCORRUPTTHINGS && (nwnw==j || nwnw==lnws)) - { - int32_t walltoclear = nwnw==j ? lnws : j; - if (tryfixing & (1ull<= printfromlev) - OSD_Printf(" wall[%d].nextwall=%d, suggest clearing wall %d's nextwall and nextsector tags to -1\n", - nw, nwnw, walltoclear); - } - } - else - { - seen_nextwalls[nw>>3] |= 1<<(nw&7); - lastnextwallsource[nw] = j; - } - } - - if (bad<4) - { - int32_t onumct = numcorruptthings; - if ((ns^nw)<0) - { - CORRUPTCHK_PRINT(4, CORRUPT_WALL|j, "WALL[%d].NEXTSECTOR=%d and .NEXTWALL=%d inconsistent:" - " missing one next pointer", j, ns, nw); - if (onumct < MAXCORRUPTTHINGS) - { - if (tryfixing & (1ull<=printfromlev) - suggest_nextsector_correction(nw, j); - } - } - else if (ns>=0) - { - if (nw=sector[ns].wallptr+sector[ns].wallnum) - { - CORRUPTCHK_PRINT(4, CORRUPT_WALL|j, "WALL[%d].NEXTWALL=%d out of .NEXTSECTOR=%d's bounds", - j, nw, ns); - if (onumct < MAXCORRUPTTHINGS) - { - if (tryfixing & (1ull<= printfromlev) - { - OSD_Printf(" sector %d's walls: [%d .. %d]\n", ns, - sector[ns].wallptr, sector[ns].wallptr+sector[ns].wallnum-1); - suggest_nextsector_correction(nw, j); - } - } - } -#if 0 - // this one usually appears together with the "already referenced" corruption - else if (wall[nw].nextsector != i || wall[nw].nextwall != j) - { - CORRUPTCHK_PRINT(4, CORRUPT_WALL|nw, "WALL %d nextwall's backreferences inconsistent. Expected nw=%d, ns=%d; got nw=%d, ns=%d", - nw, i, j, wall[nw].nextsector, wall[nw].nextwall); - } -#endif - } - } - - errlevel = max(errlevel, bad); - } - } - } - - bad = 0; - for (i=0; i=numsectors) - CORRUPTCHK_PRINT(2, CORRUPT_SPRITE|i, "SPRITE[%d].SECTNUM=%d. Expect problems!", i, sprite[i].sectnum); - - if (sprite[i].picnum<0 || sprite[i].picnum>=MAXTILES) - { - sprite[i].picnum = 0; - CORRUPTCHK_PRINT(0, CORRUPT_SPRITE|i, "SPRITE[%d].PICNUM=%d out of range, resetting to 0", i, sprite[i].picnum); - } - } - - if (0) - { -too_many_errors: - if (printfromlev<=errlevel) - OSD_Printf("!! too many errors, stopping. !!\n"); - } - - errlevel = max(errlevel, bad); - - if (errlevel) - { - if (printfromlev<=errlevel) - OSD_Printf("-- corruption level: %d\n", errlevel); - } - - if (seen_nextwalls) - { - Bfree(seen_nextwalls); - Bfree(lastnextwallsource); - } - - corruptlevel = errlevel; - - return errlevel; -} -//// - -void faketimerhandler(void) -{ - sampletimer(); -} - -void SetBOSS1Palette(void) -{ - if (acurpalette==3) return; - acurpalette=3; - setbrightness(GAMMA_CALC,5,0); -} - -void SetSLIMEPalette(void) -{ - if (acurpalette==2) return; - acurpalette=2; - setbrightness(GAMMA_CALC,2,0); -} - -void SetWATERPalette(void) -{ - if (acurpalette==1) return; - acurpalette=1; - setbrightness(GAMMA_CALC,1,0); -} - -void SetGAMEPalette(void) -{ - if (acurpalette==0) return; - acurpalette=0; - setbrightness(GAMMA_CALC,6,0); -} - -static void SearchSectors(int32_t dir) // <0: backwards, >=0: forwards -{ - int32_t ii=0; - dir = 1-2*(dir<0); - - if (cursector_lotag!=0) - { - if ((dir>0 && cursectornum=0)) - cursectornum += dir; - - for (ii=cursectornum; ii>=0 && ii"); - cursectornum = ii; - return; - } - } - } - printmessage16("%s Sector search: none found", dir<0?"<":">"); -} - - -//////////////////// manual editing //////////////////// -// Build edit originally by Ed Coolidge - -static char med_disptext[80]; -static char med_edittext[80]; -static const char *med_typename=""; -static int32_t med_dispwidth=24; -static int32_t med_editval=0; -static int32_t med_thenum=-1; - -static void handlemed(int32_t dohex, const char *disp_membername, const char *edit_membername, - void *themember, int32_t thesizeof, int32_t themax, int32_t sign) -{ - int32_t i, val; - - if (thesizeof==sizeof(int8_t)) - { - if (sign) - val = *(int8_t *)themember; - else - val = *(uint8_t *)themember; - } - else if (thesizeof==sizeof(int16_t)) - val = *(int16_t *)themember; - else //if (thesizeof==sizeof(int32_t)) - val = *(int32_t *)themember; - - if (dohex) - i=Bsprintf(med_disptext,"%s: %x", disp_membername, val); - else - i=Bsprintf(med_disptext,"%s: %d", disp_membername, val); - - for (; i to exit"); - - if (PRESSED_KEYSC(DOWN)) - { - if (*row < rowmax) - { - med_printcurline(xpos, ypos, *row, 0); - (*row)++; - } - } - - if (PRESSED_KEYSC(UP)) - { - if (*row > 0) - { - med_printcurline(xpos, ypos, *row, 0); - (*row)--; - } - } - - if (PRESSED_KEYSC(ENTER)) - med_editval = 1; -} - -static void EditSectorData(int16_t sectnum) -{ - int32_t col=1, row=0, rowmax = 6, i = -1; - int32_t xpos = 208, ypos = ydim-STATUS2DSIZ+48; - - med_editval = 0; - - med_dispwidth = 24; - med_disptext[med_dispwidth] = 0; - - med_typename = "Sector"; - med_thenum = sectnum; - - drawgradient(); - - showsectordata(sectnum, 0); - - while (keystatus[KEYSC_ESC] == 0) - { - med_handlecommon(xpos, ypos, &row, rowmax); - - if (PRESSED_KEYSC(LEFT)) - { - if (col == 2) - { - med_printcurline(xpos, ypos, row, 0); - col = 1; - xpos = 208; - rowmax = 6; - med_dispwidth = 24; - med_disptext[med_dispwidth] = 0; - if (row > rowmax) row = rowmax; - } - } - if (PRESSED_KEYSC(RIGHT)) - { - if (col == 1) - { - med_printcurline(xpos, ypos, row, 0); - col = 2; - xpos = 408; - rowmax = 6; - med_dispwidth = 24; - med_disptext[med_dispwidth] = 0; - if (row > rowmax) row = rowmax; - } - } - - if (col == 1) - { - switch (row) - { - case 0: - handlemed(1, "Flags (hex)", "Ceiling Flags", §or[sectnum].ceilingstat, - sizeof(sector[sectnum].ceilingstat), 65535, 0); - break; - case 1: - for (i=Bsprintf(med_disptext,"(X,Y)pan: %d, %d",sector[sectnum].ceilingxpanning,sector[sectnum].ceilingypanning); i < med_dispwidth; i++) med_disptext[i] = ' '; - if (med_editval) - { - Bsprintf(med_edittext,"Sector %d Ceiling X Pan: ",sectnum); - printmessage16("%s", med_edittext); - sector[sectnum].ceilingxpanning = (char)getnumber16(med_edittext,(int32_t)sector[sectnum].ceilingxpanning,256L,0); - Bsprintf(med_edittext,"Sector %d Ceiling Y Pan: ",sectnum); - printmessage16("%s", med_edittext); - sector[sectnum].ceilingypanning = (char)getnumber16(med_edittext,(int32_t)sector[sectnum].ceilingypanning,256L,0); - } - break; - case 2: - handlemed(0, "Shade byte", "Ceiling Shade", §or[sectnum].ceilingshade,sizeof(sector[sectnum].ceilingshade), 128L, 1); - break; - case 3: - handlemed(0, "Z-coordinate", "Ceiling Z-coordinate", §or[sectnum].ceilingz, - sizeof(sector[sectnum].ceilingz), BZ_MAX, 1); - break; - case 4: - handlemed(0, "Tile number", "Ceiling Tile Number", §or[sectnum].ceilingpicnum, - sizeof(sector[sectnum].ceilingpicnum), MAXTILES, 0); - break; - case 5: - handlemed(0, "Ceiling heinum", "Ceiling Heinum", §or[sectnum].ceilingheinum, - sizeof(sector[sectnum].ceilingheinum), 32767, 1); - break; - case 6: - handlemed(0, "Palookup number", "Ceiling Palookup Number", §or[sectnum].ceilingpal, - sizeof(sector[sectnum].ceilingpal), MAXPALOOKUPS-1, 0); - break; - } - } - else if (col == 2) - { - switch (row) - { - case 0: - handlemed(1, "Flags (hex)", "Floor Flags", §or[sectnum].floorstat, - sizeof(sector[sectnum].floorstat), 65535, 0); - break; - - case 1: - for (i=Bsprintf(med_disptext,"(X,Y)pan: %d, %d",sector[sectnum].floorxpanning,sector[sectnum].floorypanning); i < med_dispwidth; i++) med_disptext[i] = ' '; - if (med_editval) - { - Bsprintf(med_edittext,"Sector %d Floor X Pan: ",sectnum); - printmessage16("%s", med_edittext); - sector[sectnum].floorxpanning = (char)getnumber16(med_edittext,(int32_t)sector[sectnum].floorxpanning,256,0); - Bsprintf(med_edittext,"Sector %d Floor Y Pan: ",sectnum); - printmessage16("%s", med_edittext); - sector[sectnum].floorypanning = (char)getnumber16(med_edittext,(int32_t)sector[sectnum].floorypanning,256,0); - } - break; - - case 2: - handlemed(0, "Shade byte", "Floor Shade", §or[sectnum].floorshade, - sizeof(sector[sectnum].floorshade), 128, 1); - break; - case 3: - handlemed(0, "Z-coordinate", "Floor Z-coordinate", §or[sectnum].floorz, - sizeof(sector[sectnum].floorz), BZ_MAX, 1); //2147483647L,-2147483648L - break; - case 4: - handlemed(0, "Tile number", "Floor Tile Number", §or[sectnum].floorpicnum, - sizeof(sector[sectnum].floorpicnum), MAXTILES, 0); - break; - case 5: - handlemed(0, "Floor heinum", "Floor Heinum", §or[sectnum].floorheinum, - sizeof(sector[sectnum].floorheinum), 32767, 1); - break; - case 6: - handlemed(0, "Palookup number", "Floor Palookup Number", §or[sectnum].floorpal, - sizeof(sector[sectnum].floorpal), MAXPALOOKUPS-1, 0); - break; - } - } - - med_printcurline(xpos, ypos, row, 1); - if (med_editval) - med_editval = 0; - - showframe(1); - } - - med_printcurline(xpos, ypos, row, 0); - // printmessage16(""); - - showframe(1); - keystatus[KEYSC_ESC] = 0; -} - -static void EditWallData(int16_t wallnum) -{ - int32_t row=0, i = -1; - int32_t xpos = 208, ypos = ydim-STATUS2DSIZ+48; - - med_editval = 0; - - med_dispwidth = 24; - med_disptext[med_dispwidth] = 0; - - med_typename = "Wall"; - med_thenum = wallnum; - - drawgradient(); - - showwalldata(wallnum, 0); - - while (keystatus[KEYSC_ESC] == 0) - { - med_handlecommon(xpos, ypos, &row, 6); - - switch (row) - { - case 0: - handlemed(1, "Flags (hex)", "Flags", &wall[wallnum].cstat, - sizeof(wall[wallnum].cstat), 65535, 0); - break; - case 1: - handlemed(0, "Shade", "Shade", &wall[wallnum].shade, - sizeof(wall[wallnum].shade), 128, 1); - break; - case 2: - handlemed(0, "Pal", "Pal", &wall[wallnum].pal, - sizeof(wall[wallnum].pal), MAXPALOOKUPS-1, 0); - break; - case 3: - for (i=Bsprintf(med_disptext,"(X,Y)repeat: %d, %d",wall[wallnum].xrepeat,wall[wallnum].yrepeat); i < med_dispwidth; i++) med_disptext[i] = ' '; - if (med_editval) - { - Bsprintf(med_edittext,"Wall %d X Repeat: ",wallnum); - printmessage16("%s", med_edittext); - wall[wallnum].xrepeat = (char)getnumber16(med_edittext,(int32_t)wall[wallnum].xrepeat,255,0); - Bsprintf(med_edittext,"Wall %d Y Repeat: ",wallnum); - printmessage16("%s", med_edittext); - wall[wallnum].yrepeat = (char)getnumber16(med_edittext,(int32_t)wall[wallnum].yrepeat,255,0); - } - break; - case 4: - for (i=Bsprintf(med_disptext,"(X,Y)pan: %d, %d",wall[wallnum].xpanning,wall[wallnum].ypanning); i < med_dispwidth; i++) med_disptext[i] = ' '; - if (med_editval) - { - Bsprintf(med_edittext,"Wall %d X Pan: ",wallnum); - printmessage16("%s", med_edittext); - wall[wallnum].xpanning = (char)getnumber16(med_edittext,(int32_t)wall[wallnum].xpanning,255,0); - Bsprintf(med_edittext,"Wall %d Y Pan: ",wallnum); - printmessage16("%s", med_edittext); - wall[wallnum].ypanning = (char)getnumber16(med_edittext,(int32_t)wall[wallnum].ypanning,255,0); - } - break; - case 5: - handlemed(0, "Tile number", "Tile number", &wall[wallnum].picnum, - sizeof(wall[wallnum].picnum), MAXTILES, 0); - break; - - case 6: - handlemed(0, "OverTile number", "OverTile number", &wall[wallnum].overpicnum, - sizeof(wall[wallnum].overpicnum), MAXTILES, 0); - break; - } - - med_printcurline(xpos, ypos, row, 1); - if (med_editval) - { - med_editval = 0; - //showwalldata(wallnum, 0); - //// printmessage16(""); - } - - showframe(1); - } - - med_printcurline(xpos, ypos, row, 0); - // printmessage16(""); - - showframe(1); - keystatus[KEYSC_ESC] = 0; -} - -static void EditSpriteData(int16_t spritenum) -{ - int32_t col=0, row=0, rowmax=4, i = -1; - int32_t xpos = 8, ypos = ydim-STATUS2DSIZ+48; - - med_editval = 0; - - med_dispwidth = 24; - med_disptext[med_dispwidth] = 0; - - med_typename = "Sprite"; - med_thenum = spritenum; - - drawgradient(); - - // clearmidstatbar16(); - - showspritedata(spritenum, 0); - - while (keystatus[KEYSC_ESC] == 0) - { - med_handlecommon(xpos, ypos, &row, rowmax); - - if (PRESSED_KEYSC(LEFT)) - { - switch (col) - { - case 1: - { - med_printcurline(xpos, ypos, row, 0); - col = 0; - xpos = 8; - rowmax = 4; - med_dispwidth = 23; - med_disptext[med_dispwidth] = 0; - if (row > rowmax) row = rowmax; - } - break; - case 2: - { - med_printcurline(xpos, ypos, row, 0); - col = 1; - xpos = 208; - rowmax = 5; - med_dispwidth = 24; - med_disptext[med_dispwidth] = 0; - if (row > rowmax) row = rowmax; - } - break; - } - } - if (PRESSED_KEYSC(RIGHT)) - { - switch (col) - { - case 0: - { - med_printcurline(xpos, ypos, row, 0); - col = 1; - xpos = 208; - rowmax = 5; - med_dispwidth = 24; - med_disptext[med_dispwidth] = 0; - if (row > rowmax) row = rowmax; - } - break; - case 1: - { - med_printcurline(xpos, ypos, row, 0); - col = 2; - xpos = 408; - rowmax = 6; - med_dispwidth = 26; - med_disptext[med_dispwidth] = 0; - if (row > rowmax) row = rowmax; - } - break; - } - } - - switch (col) - { - case 0: - { - switch (row) - { - case 0: - handlemed(0, "X-coordinate", "X-coordinate", &sprite[spritenum].x, - sizeof(sprite[spritenum].x), 131072, 1); - break; - case 1: - handlemed(0, "Y-coordinate", "Y-coordinate", &sprite[spritenum].y, - sizeof(sprite[spritenum].y), 131072, 1); - break; - case 2: - handlemed(0, "Z-coordinate", "Z-coordinate", &sprite[spritenum].z, - sizeof(sprite[spritenum].z), BZ_MAX, 1); //2147483647L,-2147483648L - break; - case 3: - i = sprite[spritenum].sectnum; - handlemed(0, "Sectnum", "Sectnum", &sprite[spritenum].sectnum, - sizeof(sprite[spritenum].sectnum), numsectors-1, 0); - if (i != sprite[spritenum].sectnum) - { - swapshort(&i, &sprite[spritenum].sectnum); - changespritesect(spritenum,i); - } - break; - case 4: - i = sprite[spritenum].statnum; - handlemed(0, "Statnum", "Statnum", &sprite[spritenum].statnum, - sizeof(sprite[spritenum].statnum), MAXSTATUS-1, 0); - if (i != sprite[spritenum].statnum) - { - swapshort(&i, &sprite[spritenum].statnum); - changespritestat(spritenum,i); - } - break; - } - } - break; - case 1: - { - switch (row) - { - case 0: - handlemed(1, "Flags (hex)", "Flags", &sprite[spritenum].cstat, - sizeof(sprite[spritenum].cstat), 65535, 0); - break; - case 1: - handlemed(0, "Shade", "Shade", &sprite[spritenum].shade, - sizeof(sprite[spritenum].shade), 128, 1); - break; - case 2: - handlemed(0, "Pal", "Pal", &sprite[spritenum].pal, - sizeof(sprite[spritenum].pal), MAXPALOOKUPS-1, 0); - break; - case 3: - { - for (i=Bsprintf(med_disptext,"(X,Y)repeat: %d, %d",sprite[spritenum].xrepeat,sprite[spritenum].yrepeat); i < med_dispwidth; i++) med_disptext[i] = ' '; - if (med_editval) - { - Bsprintf(med_edittext,"Sprite %d X Repeat: ",spritenum); - printmessage16("%s", med_edittext); - sprite[spritenum].xrepeat = (char)getnumber16(med_edittext,(int32_t)sprite[spritenum].xrepeat,255,0); - Bsprintf(med_edittext,"Sprite %d Y Repeat: ",spritenum); - printmessage16("%s", med_edittext); - sprite[spritenum].yrepeat = (char)getnumber16(med_edittext,(int32_t)sprite[spritenum].yrepeat,255,0); - } - } - break; - case 4: - { - for (i=Bsprintf(med_disptext,"(X,Y)offset: %d, %d",sprite[spritenum].xoffset,sprite[spritenum].yoffset); i < med_dispwidth; i++) med_disptext[i] = ' '; - if (med_editval) - { - Bsprintf(med_edittext,"Sprite %d X Offset: ",spritenum); - printmessage16("%s", med_edittext); - sprite[spritenum].xoffset = (char)getnumber16(med_edittext,(int32_t)sprite[spritenum].xoffset,128,1); - Bsprintf(med_edittext,"Sprite %d Y Offset: ",spritenum); - printmessage16("%s", med_edittext); - sprite[spritenum].yoffset = (char)getnumber16(med_edittext,(int32_t)sprite[spritenum].yoffset,128,1); - } - } - break; - case 5: - handlemed(0, "Tile number", "Tile number", &sprite[spritenum].picnum, - sizeof(sprite[spritenum].picnum), MAXTILES-1, 0); - break; - } - } - break; - case 2: - { - switch (row) - { - case 0: - handlemed(0, "Angle (2048 degrees)", "Angle", &sprite[spritenum].ang, - sizeof(sprite[spritenum].ang), 2048, 1); - if (med_editval) - sprite[spritenum].ang &= 2047; - break; - case 1: - handlemed(0, "X-Velocity", "X-Velocity", &sprite[spritenum].xvel, - sizeof(sprite[spritenum].xvel), 65535, 1); - break; - case 2: - handlemed(0, "Y-Velocity", "Y-Velocity", &sprite[spritenum].yvel, - sizeof(sprite[spritenum].yvel), 65535, 1); - break; - case 3: - handlemed(0, "Z-Velocity", "Z-Velocity", &sprite[spritenum].zvel, - sizeof(sprite[spritenum].zvel), 65535, 1); - break; - case 4: - handlemed(0, "Owner", "Owner", &sprite[spritenum].owner, - sizeof(sprite[spritenum].owner), MAXSPRITES-1, 1); - break; - case 5: - handlemed(0, "Clipdist", "Clipdist", &sprite[spritenum].clipdist, - sizeof(sprite[spritenum].clipdist), 255, 0); - break; - case 6: - handlemed(0, "Extra", "Extra", &sprite[spritenum].extra, - sizeof(sprite[spritenum].extra), BTAG_MAX, 1); - break; - } - } - break; - } - - med_printcurline(xpos, ypos, row, 1); - if (med_editval) - med_editval = 0; - - showframe(1); - } - - med_printcurline(xpos, ypos, row, 0); - // printmessage16(""); - showframe(1); - - keystatus[KEYSC_ESC] = 0; -} - -#define TWENTYFIVE_BLANKS " " - -static void GenericSpriteSearch() -{ - char disptext[80]; - char edittext[80]; - static int32_t col=0, row=0; - int32_t i, j, k; - int32_t rowmax[3]= {6,5,6}, dispwidth[3] = {24,24,28}; - int32_t xpos[3] = {8,200,400}, ypos = ydim-STATUS2DSIZ+48; - - static const char *labels[7][3] = - { - {"X-coordinate", "Flags (hex)", "Angle (2048 degrees)"}, - {"Y-coordinate", "Shade", "X-Velocity"}, - {"Z-coordinate", "Pal", "Y-Velocity"}, - {"Sectnum", "(X/Y)repeat", "Z-Velocity"}, - {"Statnum", "(X/Y)offset", "Owner"}, - {"Hitag", "Tile number", "Clipdist"}, - {"Lotag", "", "Extra"} - }; - - static int32_t maxval[7][3] = - { - { BXY_MAX , 65535 , 2048 }, - { BXY_MAX , 128 , 65535 }, - { BZ_MAX , MAXPALOOKUPS-1, 65535 }, - { MAXSECTORS-1, 128 , 65535 }, - { MAXSTATUS-1 , 128 , MAXSPRITES-1 }, - { BTAG_MAX , MAXTILES-1 , 256 }, - { BTAG_MAX , 0 , BTAG_MAX } - }; - - static char sign[7][3] = - { - {1, 0, 1}, - {1, 1, 1}, - {1, 0, 1}, - {0, 0, 1}, - {0, 1, 0}, - {0, 0, 0}, - {0, 0, 1} - }; - - clearmidstatbar16(); - - drawgradient(); - - printext16(xpos[0], ypos-2*8, editorcolors[10], editorcolors[0], "Sprite search", 0); - - for (i=0; i<3; i++) - for (j=0; j<=rowmax[i]; j++) - { - if (gs_spriteTagInterested[i][j]) - k=Bsprintf(disptext, "%s: %d", labels[j][i], gs_spriteTagValue[i][j]); - else - k=Bsprintf(disptext, "%s: ^7any", labels[j][i]); -// for (; k to exit"); - - if (PRESSED_KEYSC(DOWN)) - { - if (row < rowmax[col]) - { - printext16(xpos[col],ypos+row*8,editorcolors[11],editorcolors[0],disptext,0); - row++; - } - } - if (PRESSED_KEYSC(UP)) - { - if (row > 0) - { - printext16(xpos[col],ypos+row*8,editorcolors[11],editorcolors[0],disptext,0); - row--; - } - } - if (PRESSED_KEYSC(LEFT)) - { - if (col > 0) - { - printext16(xpos[col],ypos+row*8,editorcolors[11],editorcolors[0],disptext,0); - col--; - disptext[dispwidth[col]] = 0; - if (row > rowmax[col]) row = rowmax[col]; - } - } - if (PRESSED_KEYSC(RIGHT)) - { - if (col < 2) - { - printext16(xpos[col],ypos+row*8,editorcolors[11],editorcolors[0],disptext,0); - col++; - disptext[dispwidth[col]] = 0; - if (row > rowmax[col]) row = rowmax[col]; - } - } - if (PRESSED_KEYSC(ENTER)) - { - Bsprintf(edittext, "%s: ", labels[row][col]); - printmessage16("%s", edittext); - i = getnumber16(edittext, gs_spriteTagInterested[col][row] ? gs_spriteTagValue[col][row] : 0, - maxval[row][col], sign[row][col]); - if (col == 2 && row == 0) i = (i+2048)&2047; // angle - gs_spriteTagValue[col][row] = i; - gs_spriteTagInterested[col][row] = 1; - - if (col == 1 && row == 5) // picnum - { - printext16(xpos[1], ypos-2*8, editorcolors[14], editorcolors[0], TWENTYFIVE_BLANKS, 0); - if (names[i][0]) - printext16(xpos[1], ypos-2*8, editorcolors[14], editorcolors[0], names[i], 0); - } - } - if (PRESSED_KEYSC(BS) || PRESSED_KEYSC(DELETE)) - { - gs_spriteTagInterested[col][row] = 0; - - if (col == 1 && row == 5) // picnum - printext16(xpos[1], ypos-2*8, editorcolors[14], editorcolors[0], TWENTYFIVE_BLANKS, 0); - } - - i = gs_spriteTagInterested[col][row]; - if (i) - { - if (col == 1 && row == 0) // flags - k = Bsprintf(disptext, "%s: %x", labels[row][col], gs_spriteTagValue[col][row]); - else - k = Bsprintf(disptext, "%s: %d", labels[row][col], gs_spriteTagValue[col][row]); - } - else - k = Bsprintf(disptext, "%s: ^7any", labels[row][col]); - // v-------^^ - for (; k x2_max) x2_max = x2; - y += MENU_Y_SPACING; - } - while (++i < numopts); - // drawline16(x-1,y,x2_max+1,y,1); - // drawline16(x-1,MENU_BASE_Y-4,x-1,y,1); - - // x2 = - printext16(x,MENU_BASE_Y,editorcolors[11],-1,"Special functions",0); - // drawline16(x-1,MENU_BASE_Y-4,x2+1,MENU_BASE_Y-4,1); - // drawline16(x2_max+1,MENU_BASE_Y+16-4,x2_max+1,y-1,1); - //drawline16(x2+1,MENU_BASE_Y+16-1,x2_max+1,MENU_BASE_Y+16-1,1); -} - -static void FuncMenu(void) -{ - char disptext[80]; - int32_t col=0, row=0, rowmax=7, dispwidth = 24, editval = 0, i = -1, j; - int32_t xpos = 8, ypos = MENU_BASE_Y+16; - - drawgradient(); - - disptext[dispwidth] = 0; - // clearmidstatbar16(); - - FuncMenuOpts(); - - while (!editval && keystatus[KEYSC_ESC] == 0) - { - idle_waitevent(); - if (handleevents()) - quitevent = 0; - - _printmessage16("Select an option, press to exit"); - if (PRESSED_KEYSC(DOWN)) - { - if (row < rowmax) - { - printext16(xpos,ypos+row*MENU_Y_SPACING,editorcolors[11],editorcolors[0],disptext,0); - row++; - } - } - if (PRESSED_KEYSC(UP)) - { - if (row > 0) - { - printext16(xpos,ypos+row*MENU_Y_SPACING,editorcolors[11],editorcolors[0],disptext,0); - row--; - } - } -#if 0 - if (PRESSED_KEYSC(LEFT)) - { - /* if (col == 2) - { - printext16(xpos,ypos+row*8,editorcolors[11],0,disptext,0); - col = 1; - xpos = 200; - rowmax = 6; - dispwidth = 24; - disptext[dispwidth] = 0; - if (row > rowmax) row = rowmax; - } - else */ - if (col == 1) - { - printext16(xpos,ypos+row*8,editorcolors[11],0,disptext,0); - col = 0; - xpos = 8; - rowmax = 7; - dispwidth = 24; - disptext[dispwidth] = 0; - if (row > rowmax) row = rowmax; - } - } - - if (PRESSED_KEYSC(RIGHT)) - { - if (col == 0) - { - printext16(xpos,ypos+row*8,editorcolors[11],0,disptext,0); - col = 1; - xpos = 200; - rowmax = 0; - dispwidth = 24; - disptext[dispwidth] = 0; - if (row > rowmax) row = rowmax; - } - /* else if (col == 1) - { - printext16(xpos,ypos+row*8,editorcolors[11],0,disptext,0); - col = 2; - xpos = 400; - rowmax = 6; - dispwidth = 26; - disptext[dispwidth] = 0; - if (row > rowmax) row = rowmax; - } */ - } -#endif - if (PRESSED_KEYSC(ENTER)) - editval = 1; - - switch (col) - { - case 0: - switch (row) - { - case 0: - { - for (i=Bsprintf(disptext,"%s",FuncMenuStrings[row]); i < dispwidth; i++) disptext[i] = ' '; - if (editval) - { - j = 0; - for (i=0; i= 0) - { - int32_t k = 0; - for (j=0; j= 0) - { - sprite[w].x = (int32_t)(sprite[w].x*size); - sprite[w].y = (int32_t)(sprite[w].y*size); - sprite[w].z = (int32_t)(sprite[w].z*size); - sprite[w].xrepeat = min(max((int32_t)(sprite[w].xrepeat*size),1),255); - sprite[w].yrepeat = min(max((int32_t)(sprite[w].yrepeat*size),1),255); - w = nextspritesect[w]; - } - } - printmessage16("Map scaled"); - } - else printmessage16("Aborted"); - } - } - break; - case 6: - { - for (i=Bsprintf(disptext,"%s",FuncMenuStrings[row]); i < dispwidth; i++) disptext[i] = ' '; - if (editval) - { - j=getnumber16("Shade divisor: ",1,128,1); - if (j!=1) - { - for (i=0; i>4)/j; - } - printmessage16("Visibility adjusted"); - } - else printmessage16("Aborted"); - } - } - break; - } - break; - } - printext16(xpos,ypos+row*MENU_Y_SPACING,editorcolors[11],editorcolors[1],disptext,0); - - showframe(1); - } - - printext16(xpos,ypos+row*MENU_Y_SPACING,editorcolors[11],editorcolors[0],disptext,0); - /*clearmidstatbar16();*/ - - showframe(1); - keystatus[KEYSC_ESC] = 0; -} diff --git a/polymer-perf/eduke32/source/config.c b/polymer-perf/eduke32/source/config.c deleted file mode 100644 index 7f3127b31..000000000 --- a/polymer-perf/eduke32/source/config.c +++ /dev/null @@ -1,1065 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -/* -#include -#include -#include -#include -#include -*/ - -#include "baselayer.h" -#include "duke3d.h" -#include "scriplib.h" -#include "osd.h" -#include "osdcmds.h" -#include "osdfuncs.h" - -// we load this in to get default button and key assignments -// as well as setting up function mappings - -#define __SETUP__ // JBF 20031211 -#include "_functio.h" - -/* -=================== -= -= CONFIG_FunctionNameToNum -= -=================== -*/ - -hashtable_t h_gamefuncs = { NUMGAMEFUNCTIONS<<1, NULL }; - -int32_t CONFIG_FunctionNameToNum(char *func) -{ - int32_t i; - - i = hash_find(&h_gamefuncs,func); - - if (i < 0) - { - char *str = Bstrtolower(Bstrdup(func)); - i = hash_find(&h_gamefuncs,str); - Bfree(str); - - return i; - } - - return i; -} - -/* -=================== -= -= CONFIG_FunctionNumToName -= -=================== -*/ - -char *CONFIG_FunctionNumToName(int32_t func) -{ - if ((unsigned)func >= (unsigned)NUMGAMEFUNCTIONS) - return NULL; - return gamefunctions[func]; -} - -/* -=================== -= -= CONFIG_AnalogNameToNum -= -=================== -*/ - - -int32_t CONFIG_AnalogNameToNum(char *func) -{ - - if (!Bstrcasecmp(func,"analog_turning")) - { - return analog_turning; - } - if (!Bstrcasecmp(func,"analog_strafing")) - { - return analog_strafing; - } - if (!Bstrcasecmp(func,"analog_moving")) - { - return analog_moving; - } - if (!Bstrcasecmp(func,"analog_lookingupanddown")) - { - return analog_lookingupanddown; - } - - return -1; -} - - -char *CONFIG_AnalogNumToName(int32_t func) -{ - switch (func) - { - case analog_turning: - return "analog_turning"; - case analog_strafing: - return "analog_strafing"; - case analog_moving: - return "analog_moving"; - case analog_lookingupanddown: - return "analog_lookingupanddown"; - } - - return NULL; -} - - -/* -=================== -= -= CONFIG_SetDefaults -= -=================== -*/ - -void CONFIG_SetDefaultKeys(int32_t type) -{ - int32_t i,f; - - Bmemset(ud.config.KeyboardKeys, 0xff, sizeof(ud.config.KeyboardKeys)); - Bmemset(&KeyBindings,0,sizeof(KeyBindings)); - Bmemset(&MouseBindings,0,sizeof(MouseBindings)); - - if (type == 1) - { - for (i=0; i < (int32_t)(sizeof(oldkeydefaults)/sizeof(oldkeydefaults[0])); i+=3) - { - f = CONFIG_FunctionNameToNum((char *)oldkeydefaults[i+0]); - if (f == -1) continue; - ud.config.KeyboardKeys[f][0] = KB_StringToScanCode((char *)oldkeydefaults[i+1]); - ud.config.KeyboardKeys[f][1] = KB_StringToScanCode((char *)oldkeydefaults[i+2]); - - if (f == gamefunc_Show_Console) OSD_CaptureKey(ud.config.KeyboardKeys[f][0]); - else CONFIG_MapKey(f, ud.config.KeyboardKeys[f][0], 0, ud.config.KeyboardKeys[f][1], 0); - } - return; - } - - for (i=0; i < (int32_t)(sizeof(keydefaults)/sizeof(keydefaults[0])); i+=3) - { - f = CONFIG_FunctionNameToNum(keydefaults[i+0]); - if (f == -1) continue; - ud.config.KeyboardKeys[f][0] = KB_StringToScanCode(keydefaults[i+1]); - ud.config.KeyboardKeys[f][1] = KB_StringToScanCode(keydefaults[i+2]); - - if (f == gamefunc_Show_Console) OSD_CaptureKey(ud.config.KeyboardKeys[f][0]); - else CONFIG_MapKey(f, ud.config.KeyboardKeys[f][0], 0, ud.config.KeyboardKeys[f][1], 0); - } -} - -void CONFIG_SetDefaults(void) -{ - // JBF 20031211 - int32_t i; - - ud.config.scripthandle = -1; - ud.config.ScreenWidth = 1024; - ud.config.ScreenHeight = 768; - ud.config.ScreenMode = 0; -#ifdef USE_OPENGL - ud.config.ScreenBPP = 32; -#else - ud.config.ScreenBPP = 8; -#endif - ud.config.useprecache = 1; - ud.config.ForceSetup = 1; - ud.config.NoAutoLoad = 1; - ud.config.AmbienceToggle = 1; - ud.config.AutoAim = 1; - ud.config.FXDevice = 0; - ud.config.FXVolume = 225; -#if defined(_WIN32) - ud.config.MixRate = 44100; -#else - ud.config.MixRate = 48000; -#endif - ud.config.MouseBias = 0; - ud.config.MouseDeadZone = 0; - ud.config.MusicDevice = 0; - ud.config.MusicToggle = 1; - ud.config.MusicVolume = 195; - g_myAimMode = g_player[0].ps->aim_mode = 1; - ud.config.NumBits = 16; - ud.config.NumChannels = 2; - ud.config.NumVoices = 32; - ud.config.ReverseStereo = 0; - ud.auto_run = 1; - ud.config.ShowOpponentWeapons = 0; - ud.config.SmoothInput = 1; - ud.config.SoundToggle = 1; - ud.althud = 1; - ud.automsg = 0; - ud.autovote = 0; - ud.brightness = 8; - ud.camerasprite = -1; - ud.color = 0; - ud.crosshair = 1; - ud.crosshairscale = 50; - ud.obituaries = 1; - ud.democams = 1; - ud.detail = 1; - ud.drawweapon = 1; - ud.idplayers = 1; - ud.levelstats = 0; - ud.lockout = 0; - ud.m_ffire = 1; - ud.m_marker = 1; - ud.mouseaiming = 0; - ud.mouseflip = 1; - ud.msgdisptime = 120; - ud.pwlockout[0] = '\0'; - ud.runkey_mode = 0; - ud.screen_size = 4; - ud.screen_tilting = 1; - ud.shadows = 1; - ud.statusbarmode = 0; - ud.statusbarscale = 100; - ud.team = 0; - ud.viewbob = 1; - ud.weaponsway = 1; - ud.weaponswitch = 3; // new+empty - ud.angleinterpolation = 0; - ud.config.UseJoystick = 0; - ud.config.UseMouse = 1; - ud.config.VoiceToggle = 5; // bitfield, 1 = local, 2 = dummy, 4 = other players in DM - ud.display_bonus_screen = 1; - ud.show_level_text = 1; - ud.configversion = 0; - ud.weaponscale = 100; - ud.textscale = 100; - - ud.config.CheckForUpdates = 1; - - Bstrcpy(ud.rtsname, "DUKE.RTS"); - Bstrcpy(szPlayerName, "Duke"); - - Bstrcpy(ud.ridecule[0], "An inspiration for birth control."); - Bstrcpy(ud.ridecule[1], "You're gonna die for that!"); - Bstrcpy(ud.ridecule[2], "It hurts to be you."); - Bstrcpy(ud.ridecule[3], "Lucky Son of a Bitch."); - Bstrcpy(ud.ridecule[4], "Hmmm....Payback time."); - Bstrcpy(ud.ridecule[5], "You bottom dwelling scum sucker."); - Bstrcpy(ud.ridecule[6], "Damn, you're ugly."); - Bstrcpy(ud.ridecule[7], "Ha ha ha...Wasted!"); - Bstrcpy(ud.ridecule[8], "You suck!"); - Bstrcpy(ud.ridecule[9], "AARRRGHHHHH!!!"); - - // JBF 20031211 - - CONFIG_SetDefaultKeys(0); - - memset(ud.config.MouseFunctions, -1, sizeof(ud.config.MouseFunctions)); - for (i=0; i=4) continue; - ud.config.MouseFunctions[i][1] = CONFIG_FunctionNameToNum(mouseclickeddefaults[i]); - CONTROL_MapButton(ud.config.MouseFunctions[i][1], i, 1, controldevice_mouse); - } - - memset(ud.config.MouseDigitalFunctions, -1, sizeof(ud.config.MouseDigitalFunctions)); - for (i=0; i=0; i--) - { - if (ud.config.KeyboardKeys[i][0] == ii[k] || ud.config.KeyboardKeys[i][1] == ii[k]) - { - Bsprintf(buf,"gamefunc_%s; ",CONFIG_FunctionNumToName(i)); - Bstrcat(tempbuf,buf); - } - } - Bstrncpy(KeyBindings[ii[k]].cmd,tempbuf, MAXBINDSTRINGLENGTH-1); - - i = Bstrlen(KeyBindings[ii[k]].cmd); - if (i) - KeyBindings[ii[k]].cmd[i-2] = 0; // cut off the trailing "; " - } -} - -/* -=================== -= -= CONFIG_SetupMouse -= -=================== -*/ - -void CONFIG_SetupMouse(void) -{ - int32_t i; - char str[80]; - char temp[80]; - int32_t scale; - - if (ud.config.scripthandle < 0) return; - - for (i=0; i= 0) - { - char dummybuf[64]; - - for (dummy = 0; dummy < 10; dummy++) - { - commmacro[13] = dummy+'0'; - SCRIPT_GetString(ud.config.scripthandle, "Comm Setup",commmacro,&ud.ridecule[dummy][0]); - } - - SCRIPT_GetString(ud.config.scripthandle, "Comm Setup","PlayerName",&tempbuf[0]); - - while (Bstrlen(OSD_StripColors(dummybuf,tempbuf)) > 10) - tempbuf[Bstrlen(tempbuf)-1] = '\0'; - - Bstrncpy(szPlayerName,tempbuf,sizeof(szPlayerName)-1); - szPlayerName[sizeof(szPlayerName)-1] = '\0'; - - SCRIPT_GetString(ud.config.scripthandle, "Comm Setup","RTSName",&ud.rtsname[0]); - - SCRIPT_GetNumber(ud.config.scripthandle, "Setup","ConfigVersion",&ud.configversion); - SCRIPT_GetNumber(ud.config.scripthandle, "Setup","ForceSetup",&ud.config.ForceSetup); - SCRIPT_GetNumber(ud.config.scripthandle, "Setup","NoAutoLoad",&ud.config.NoAutoLoad); - -// #ifdef _WIN32 - if (g_noSetup == 0 && g_modDir[0] == '/') - { - struct stat st; - SCRIPT_GetString(ud.config.scripthandle, "Setup","ModDir",&g_modDir[0]); - - if (Bstat(g_modDir, &st)) - { - if ((st.st_mode & S_IFDIR) != S_IFDIR) - { - initprintf("Invalid mod dir in cfg!\n"); - Bsprintf(g_modDir,"/"); - } - } - } -// #endif - - { - extern char defaultduke3dgrp[BMAX_PATH]; - if (!Bstrcmp(defaultduke3dgrp,"duke3d.grp")) - SCRIPT_GetString(ud.config.scripthandle, "Setup","SelectedGRP",&g_grpNamePtr[0]); - } - - if (!NAM) - { - SCRIPT_GetNumber(ud.config.scripthandle, "Screen Setup", "Out",&ud.lockout); - SCRIPT_GetString(ud.config.scripthandle, "Screen Setup","Password",&ud.pwlockout[0]); - } - - SCRIPT_GetNumber(ud.config.scripthandle, "Screen Setup", "ScreenHeight",&ud.config.ScreenHeight); - SCRIPT_GetNumber(ud.config.scripthandle, "Screen Setup", "ScreenMode",&ud.config.ScreenMode); - SCRIPT_GetNumber(ud.config.scripthandle, "Screen Setup", "ScreenWidth",&ud.config.ScreenWidth); - -#ifdef RENDERTYPEWIN - { - SCRIPT_GetNumber(ud.config.scripthandle, "Screen Setup", "WindowPositioning", (int32_t *)&windowpos); - windowx = -1; - SCRIPT_GetNumber(ud.config.scripthandle, "Screen Setup", "WindowPosX", (int32_t *)&windowx); - windowy = -1; - SCRIPT_GetNumber(ud.config.scripthandle, "Screen Setup", "WindowPosY", (int32_t *)&windowy); - } -#endif - - SCRIPT_GetNumber(ud.config.scripthandle, "Screen Setup", "ScreenBPP", &ud.config.ScreenBPP); - if (ud.config.ScreenBPP < 8) ud.config.ScreenBPP = 32; - -#ifdef POLYMER - SCRIPT_GetNumber(ud.config.scripthandle, "Screen Setup", "Polymer", &dummy); - if (dummy > 0 && ud.config.ScreenBPP >= 16) glrendmode = 4; - else glrendmode = 3; -#endif - - /* - - SCRIPT_GetNumber(ud.config.scripthandle, "Misc", "Color",&ud.color); - G_CheckPlayerColor((int32_t *)&ud.color,-1); - g_player[0].ps->palookup = g_player[0].pcolor = ud.color; - tempbuf[0] = 0; - SCRIPT_GetString(ud.config.scripthandle, "Misc", "CrosshairColor",&tempbuf[0]); - if (tempbuf[0]) - { - char *ptr = strtok(tempbuf,","); - palette_t temppal; - char *palptr = (char *)&temppal; - - i = 0; - while (ptr != NULL && i < 3) - { - palptr[i++] = atoi(ptr); - ptr = strtok(NULL,","); - } - if (i == 3) - { - Bmemcpy(&CrosshairColors,&temppal,sizeof(palette_t)); - DefaultCrosshairColors.f = 1; - } - } - */ - - SCRIPT_GetNumber(ud.config.scripthandle, "Misc", "Executions",&ud.executions); - - // weapon choices are defaulted in G_CheckCommandLine, which may override them - if (!g_forceWeaponChoice) - for (i=0; i<10; i++) - { - Bsprintf(buf,"WeaponChoice%d",i); - dummy = -1; - SCRIPT_GetNumber(ud.config.scripthandle, "Misc", buf, &dummy); - if (dummy >= 0) g_player[0].wchoice[i] = dummy; - } - -#ifdef _WIN32 - SCRIPT_GetNumber(ud.config.scripthandle, "Updates", "CheckForUpdates", &ud.config.CheckForUpdates); - SCRIPT_GetNumber(ud.config.scripthandle, "Updates", "LastUpdateCheck", &ud.config.LastUpdateCheck); -#endif - - } - -// CONFIG_ReadKeys(); - - //CONFIG_SetupMouse(ud.config.scripthandle); - //CONFIG_SetupJoystick(ud.config.scripthandle); - ud.config.setupread = 1; - return 0; -} - -/* -=================== -= -= CONFIG_WriteSetup -= -=================== -*/ - -void CONFIG_WriteBinds(void) // save binds and aliases to _settings.cfg -{ - int32_t i; - FILE *fp; - char *ptr = Bstrdup(setupfilename); - char tempbuf[128]; - - if (!Bstrcmp(setupfilename, SETUPFILENAME)) - Bsprintf(tempbuf, "settings.cfg"); - else Bsprintf(tempbuf, "%s_settings.cfg", strtok(ptr, ".")); - - fp = fopen(tempbuf, "wt"); - - if (fp) - { - symbol_t *symb; - - fprintf(fp,"// this file automatically generated by EDuke32\n"); - fprintf(fp,"// these settings take precedence over your main cfg file\n"); - fprintf(fp,"// do not modify if you lack common sense\n"); - - fprintf(fp,"unbindall\n"); - - for (i=0; inext) - if (symb->func == (void *)OSD_ALIAS) - fprintf(fp,"alias \"%s\" \"%s\"\n", symb->name, symb->help); - - /* for (i = 0; i < sizeof(cvar)/sizeof(cvarmappings); i++) - if (!(cvar[i].type&CVAR_NOSAVE)) - fprintf(fp,"%s \"%d\"\n",cvar[i].name,*(int32_t*)cvar[i].var); - */ - OSD_WriteCvars(fp); - fclose(fp); - if (!Bstrcmp(setupfilename, SETUPFILENAME)) - OSD_Printf("Wrote settings.cfg\n"); - else OSD_Printf("Wrote %s_settings.cfg\n",ptr); - - Bfree(ptr); - return; - } - - if (!Bstrcmp(setupfilename, SETUPFILENAME)) - OSD_Printf("Error writing settings.cfg: %s\n", strerror(errno)); - else OSD_Printf("Error writing %s_settings.cfg: %s\n",ptr,strerror(errno)); - - Bfree(ptr); -} - -void CONFIG_WriteSetup(uint32_t flags) -{ - int32_t dummy; - char tempbuf[1024]; - - if (!ud.config.setupread) return; - - if (ud.config.scripthandle < 0) - ud.config.scripthandle = SCRIPT_Init(setupfilename); - - SCRIPT_PutNumber(ud.config.scripthandle, "Misc", "Executions",++ud.executions,FALSE,FALSE); - - SCRIPT_PutNumber(ud.config.scripthandle, "Setup","ConfigVersion",BYTEVERSION_JF,FALSE,FALSE); - SCRIPT_PutNumber(ud.config.scripthandle, "Setup", "ForceSetup",ud.config.ForceSetup,FALSE,FALSE); - SCRIPT_PutNumber(ud.config.scripthandle, "Setup", "NoAutoLoad",ud.config.NoAutoLoad,FALSE,FALSE); - -#ifdef POLYMER - SCRIPT_PutNumber(ud.config.scripthandle, "Screen Setup", "Polymer",glrendmode == 4 && bpp > 8,FALSE,FALSE); -#endif - - SCRIPT_PutNumber(ud.config.scripthandle, "Screen Setup", "ScreenBPP",ud.config.ScreenBPP,FALSE,FALSE); // JBF 20040523 - SCRIPT_PutNumber(ud.config.scripthandle, "Screen Setup", "ScreenHeight",ud.config.ScreenHeight,FALSE,FALSE); // JBF 20031206 - SCRIPT_PutNumber(ud.config.scripthandle, "Screen Setup", "ScreenMode",ud.config.ScreenMode,FALSE,FALSE); // JBF 20031206 - SCRIPT_PutNumber(ud.config.scripthandle, "Screen Setup", "ScreenWidth",ud.config.ScreenWidth,FALSE,FALSE); // JBF 20031206 - - - SCRIPT_PutString(ud.config.scripthandle, "Setup","SelectedGRP",&g_grpNamePtr[0]); - - if (g_noSetup == 0) - SCRIPT_PutString(ud.config.scripthandle, "Setup","ModDir",&g_modDir[0]); - - // exit early after only updating the values that can be changed from the startup window - if (flags & 1) - { - SCRIPT_Save(ud.config.scripthandle, setupfilename); - SCRIPT_Free(ud.config.scripthandle); - OSD_Printf("Updated %s\n",setupfilename); - - return; - } - -#ifdef RENDERTYPEWIN - SCRIPT_PutNumber(ud.config.scripthandle, "Screen Setup", "WindowPositioning", windowpos, FALSE, FALSE); - SCRIPT_PutNumber(ud.config.scripthandle, "Screen Setup", "WindowPosX", windowx, FALSE, FALSE); - SCRIPT_PutNumber(ud.config.scripthandle, "Screen Setup", "WindowPosY", windowy, FALSE, FALSE); -#endif - - for (dummy=0; dummy<10; dummy++) - { - Bsprintf(buf,"WeaponChoice%d",dummy); - SCRIPT_PutNumber(ud.config.scripthandle, "Misc",buf,g_player[myconnectindex].wchoice[dummy],FALSE,FALSE); - } - - if (!NAM) - { - SCRIPT_PutNumber(ud.config.scripthandle, "Screen Setup", "Out",ud.lockout,FALSE,FALSE); - SCRIPT_PutString(ud.config.scripthandle, "Screen Setup", "Password",ud.pwlockout); - } - -#ifdef _WIN32 - SCRIPT_PutNumber(ud.config.scripthandle, "Updates", "CheckForUpdates", ud.config.CheckForUpdates, FALSE, FALSE); - SCRIPT_PutNumber(ud.config.scripthandle, "Updates", "LastUpdateCheck", ud.config.LastUpdateCheck, FALSE, FALSE); -#endif - - for (dummy=0; dummy= (MAXMOUSEBUTTONS-2)) continue; - - if (CONFIG_FunctionNumToName(ud.config.MouseFunctions[dummy][1])) - { - Bsprintf(buf,"MouseButtonClicked%d",dummy); - SCRIPT_PutString(ud.config.scripthandle,"Controls", buf, CONFIG_FunctionNumToName(ud.config.MouseFunctions[dummy][1])); - } - } - - for (dummy=0; dummygm |= MODE_MENU; - else g_player[myconnectindex].ps->gm &= ~MODE_MENU; - g_player[myconnectindex].ps->gm &= ~MODE_GAME; - g_player[myconnectindex].ps->gm |= MODE_DEMO; -} - -void demo_preparewarp(void) -{ - if (!g_demo_paused) - { - g_demo_soundToggle = ud.config.SoundToggle; - ud.config.SoundToggle = 0; - } - FX_StopAllSounds(); - S_ClearSoundLocks(); -} - -extern int32_t sv_loadsnapshot(int32_t fil, int32_t *ret_hasdiffs, int32_t *ret_demoticcnt, int32_t *ret_synccompress); - -int32_t G_OpenDemoRead(int32_t g_whichDemo) // 0 = mine -{ - char d[14]; - int32_t i; - - Bstrcpy(d, "edemo_.edm"); - - if (g_whichDemo == 10) - d[5] = 'x'; - else - d[5] = '0' + g_whichDemo; - - if (g_whichDemo == 1 && firstdemofile[0] != 0) - { - if ((g_demo_recFilePtr = kopen4loadfrommod(firstdemofile,g_loadFromGroupOnly)) == -1) return(0); - } - else if ((g_demo_recFilePtr = kopen4loadfrommod(d,g_loadFromGroupOnly)) == -1) return(0); - - i=sv_loadsnapshot(g_demo_recFilePtr, &demo_hasdiffs, &g_demo_totalCnt, &demo_synccompress); - if (i==0) - { - demo_hasseeds = demo_synccompress&2; - demo_synccompress &= 1; - - i = g_demo_totalCnt/(TICRATE/TICSPERFRAME); - OSD_Printf("demo duration: %d min %d sec\n", i/60, i%60); - - g_demo_cnt=1; - ud.reccnt = 0; - - ud.god = ud.cashman = ud.eog = ud.showallmap = 0; - ud.clipping = ud.scrollmode = ud.overhead_on = 0; //= ud.pause_on = 0; - - // G_NewGame(ud.volume_number,ud.level_number,ud.player_skill); - // G_ResetTimers(); - totalclock = ototalclock = lockclock = 0; - - return 1; - } - else - { - OSD_Printf(OSD_ERROR "There were errors opening demo %d (code: %d).\n", g_whichDemo, i); - kclose(g_demo_recFilePtr); - return 0; - } -#if 0 -corrupt: - OSD_Printf(OSD_ERROR "Demo %d header is corrupt.\n",g_whichDemo); - ud.reccnt = 0; - kclose(g_demo_recFilePtr); - return 0; -#endif -} - -#if KRANDDEBUG -extern void krd_enable(int32_t which); -extern int32_t krd_print(const char *filename); -#endif - -void G_OpenDemoWrite(void) -{ - char d[14]; - int32_t i, demonum=1; - extern int32_t sv_saveandmakesnapshot(FILE* fil, int32_t recdiffs, int32_t diffcompress, int32_t synccompress); - - if (ud.recstat == 2) kclose(g_demo_recFilePtr); - - if ((g_player[myconnectindex].ps->gm&MODE_GAME) && g_player[myconnectindex].ps->dead_flag) - { - Bstrcpy(ScriptQuotes[QUOTE_RESERVED4], "CANNOT START DEMO RECORDING WHEN DEAD!"); - P_DoQuote(QUOTE_RESERVED4, g_player[myconnectindex].ps); - ud.recstat = ud.m_recstat = 0; - return; - } - - if (demorec_diffs_cvar && !demorec_force_cvar) - for (i=1; i>12) && script[i+1]>=0 && script[i+1]>24); - - TRAVERSE_CONNECT(i) - { - Bmemcpy(&recsync[ud.reccnt], g_player[i].sync, sizeof(input_t)); - ud.reccnt++; - } - - if (ud.reccnt > RECSYNCBUFSIZ-MAXPLAYERS || (demorec_diffs && (g_demo_cnt%demorec_difftics == 0))) - dowritesync(); -} - -void G_CloseDemoWrite(void) -{ - extern void sv_freemem(); - - if (ud.recstat == 1) - { - if (ud.reccnt > 0) - dowritesync(); - - fwrite("EnD!", 4, 1, g_demo_filePtr); - - if (fseek(g_demo_filePtr, 20, SEEK_SET)) - perror("G_CloseDemoWrite: fseek"); - else - fwrite(&g_demo_cnt, sizeof(g_demo_cnt), 1, g_demo_filePtr); - - ud.recstat = ud.m_recstat = 0; - fclose(g_demo_filePtr); - - sv_freemem(); - - Bstrcpy(ScriptQuotes[QUOTE_RESERVED4], "DEMO RECORDING STOPPED"); - P_DoQuote(QUOTE_RESERVED4, g_player[myconnectindex].ps); - } -#if KRANDDEBUG - krd_print("krandrec.log"); -#endif -} - -static int32_t g_whichDemo = 1; -extern int32_t sv_updatestate(int32_t frominit); - -static int32_t doupdatestate(int32_t frominit) -{ - int32_t j,k; - j = g_player[myconnectindex].ps->gm&MODE_MENU; - k = sv_updatestate(frominit); - // tmpdifftime = g_demo_cnt+12; - dorestoremodes(j); - if (k) OSD_Printf("sv_updatestate() returned %d.\n", k); - return k; -} - -#define CORRUPT(code) do { corruptcode=code; goto corrupt; } while(0) - -#define DOREADSYNC(code) do \ -{ \ - uint16_t si; \ - int32_t i; \ - if (kread(g_demo_recFilePtr, &si, sizeof(uint16_t)) != (int32_t)sizeof(uint16_t)) CORRUPT(code); \ - i = si; \ - if (demo_hasseeds) \ -{ \ - if (kread(g_demo_recFilePtr, g_demo_seedbuf, i) != i) CORRUPT(code); \ -} \ - if (demo_synccompress) \ -{ \ - if (kdfread(recsync, sizeof(input_t), i, g_demo_recFilePtr) != i) CORRUPT(code+1); \ -} \ - else \ - if (kread(g_demo_recFilePtr, recsync, sizeof(input_t)*i) != (int32_t)sizeof(input_t)*i) CORRUPT(code+2); \ - ud.reccnt = i; \ -} while (0) - - -int32_t G_PlaybackDemo(void) -{ - int32_t bigi, j, k, initsyncofs = 0, lastsyncofs = 0, lastsynctic = 0, lastsyncclock = 0; - int32_t foundemo = 0, corruptcode, outofsync=0; - static int32_t in_menu = 0; - // static int32_t tmpdifftime=0; - - if (ready2send) return 0; - -RECHECK: - -#if KRANDDEBUG - if (foundemo) - krd_print("krandplay.log"); -#endif - - in_menu = g_player[myconnectindex].ps->gm&MODE_MENU; - - pub = NUMPAGES; - pus = NUMPAGES; - - flushperms(); - if ((!g_netServer && ud.multimode < 2)) foundemo = G_OpenDemoRead(g_whichDemo); - if (foundemo == 0) - { - if (g_whichDemo > 1) - { - g_whichDemo = 1; - goto RECHECK; - } - fadepal(0,0,0, 0,63,7); - P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 1); // JBF 20040308 - G_DrawBackground(); - M_DisplayMenus(); - //g_player[myconnectindex].ps->palette = palette; - nextpage(); - fadepal(0,0,0, 63,0,-7); - ud.reccnt = 0; - } - else - { - ud.recstat = 2; - g_whichDemo++; - if (g_whichDemo == 10) g_whichDemo = 1; - - g_player[myconnectindex].ps->gm &= ~MODE_GAME; - g_player[myconnectindex].ps->gm |= MODE_DEMO; - - // if (G_EnterLevel(MODE_DEMO)) - // { - // OSD_Printf("G_PlaybackDemo: G_EnterLevel\n"); - // ud.recstat = foundemo = 0; - // } - // - lastsyncofs = ktell(g_demo_recFilePtr); - initsyncofs = lastsyncofs; - lastsynctic = g_demo_cnt; - lastsyncclock = totalclock; - outofsync = 0; -#if KRANDDEBUG - krd_enable(2); -#endif - } - - if (foundemo == 0 || in_menu || KB_KeyWaiting() || numplayers > 1) - { - FX_StopAllSounds(); - S_ClearSoundLocks(); - g_player[myconnectindex].ps->gm |= MODE_MENU; - } - - ready2send = 0; - bigi = 0; - - KB_FlushKeyboardQueue(); - - // OSD_Printf("ticcnt=%d, total=%d\n", g_demo_cnt, g_demo_totalCnt); - while (g_demo_cnt < g_demo_totalCnt || foundemo==0) - { - if (foundemo && (!g_demo_paused || g_demo_goalCnt)) - { - if (g_demo_goalCnt>0 && g_demo_goalCnt < g_demo_cnt) // rewind - { - k = g_player[myconnectindex].ps->gm&MODE_MENU; - if (g_demo_goalCnt > lastsynctic) - { - if (doupdatestate(0)==0) - { - g_demo_cnt = lastsynctic; - klseek(g_demo_recFilePtr, lastsyncofs, SEEK_SET); - ud.reccnt = 0; - - totalclock = ototalclock = lockclock = lastsyncclock; - } - else CORRUPT(-1); - } - else - { - //loadfrombeg: - // j = sv_loadsnapshot(g_demo_recFilePtr, &g_demo_totalCnt); - j = doupdatestate(1); - if (!j) - { - klseek(g_demo_recFilePtr, initsyncofs, SEEK_SET); - g_levelTextTime = 0; - - g_demo_cnt = 1; - ud.reccnt = 0; - - // ud.god = ud.cashman = ud.eog = ud.showallmap = 0; - // ud.clipping = ud.scrollmode = ud.overhead_on = ud.pause_on = 0; - - totalclock = ototalclock = lockclock = 0; - } - else CORRUPT(0); - } - dorestoremodes(k); - } - - while (totalclock >= (lockclock+TICSPERFRAME) - // || (ud.reccnt > (TICRATE/TICSPERFRAME)*2 && ud.pause_on) - || (g_demo_goalCnt>0 && g_demo_cnt0 && ud.reccnt/ud.multimode >= g_demo_goalCnt-g_demo_cnt)) - { - doupdatestate(0); - } - } - } - else if (Bmemcmp(tmpbuf, "EnD!", 4)==0) - goto nextdemo; - else CORRUPT(12); - - if (0) - { -corrupt: - OSD_Printf(OSD_ERROR "Demo %d is corrupt (code %d).\n", g_whichDemo-1, corruptcode); -nextdemo: - foundemo = 0; - ud.reccnt = 0; - kclose(g_demo_recFilePtr); - g_player[myconnectindex].ps->gm |= MODE_MENU; - if (g_demo_goalCnt>0) - { - g_demo_goalCnt=0; - ud.config.SoundToggle = g_demo_soundToggle; - } - goto RECHECK; - } - } - - if (demo_hasseeds) - outofsync = (uint8_t)(randomseed>>24) != g_demo_seedbuf[bigi]; - - TRAVERSE_CONNECT(j) - { - copybufbyte(&recsync[bigi], &inputfifo[0][j], sizeof(input_t)); - bigi++; - ud.reccnt--; - } - g_demo_cnt++; - - if (!g_demo_paused) - { - // assumption that ud.multimode doesn't change in a demo may not be true - // sometime in the future v v v v v v v v v - if (g_demo_goalCnt==0 || !demo_hasdiffs || ud.reccnt/ud.multimode>=g_demo_goalCnt-g_demo_cnt) - G_DoMoveThings(); // increases lockclock by TICSPERFRAME - else - lockclock += TICSPERFRAME; - } - else - { - k = ud.config.SoundToggle; - ud.config.SoundToggle = 0; - G_DoMoveThings(); - ud.config.SoundToggle = k; - } - - ototalclock += TICSPERFRAME; - - if (g_demo_goalCnt > 0) - { - totalclock += TICSPERFRAME; - - // OSD_Printf("t:%d, l+T:%d; cnt:%d, goal:%d%s", totalclock, (lockclock+TICSPERFRAME), - // g_demo_cnt, g_demo_goalCnt, g_demo_cnt>=g_demo_goalCnt?" ":"\n"); - if (g_demo_cnt>=g_demo_goalCnt) - { - g_demo_goalCnt = 0; - ud.config.SoundToggle = g_demo_soundToggle; - } - } - } - } - else if (foundemo && g_demo_paused) - { - totalclock = lockclock; - } - - if (foundemo == 0) - G_DrawBackground(); - else - { - G_HandleLocalKeys(); - - // j = min(max((totalclock-lockclock)*(65536/TICSPERFRAME),0),65536); - - j = min(max((totalclock - ototalclock) * (65536 / 4),0),65536); - if (g_demo_paused && g_demo_rewind) - j = 65536-j; - - G_DrawRooms(screenpeek,j); - G_DisplayRest(j); - - if ((g_player[myconnectindex].ps->gm&MODE_MENU) == 0) - { - if (demoplay_showsync && outofsync) - gametext(160,100,"OUT OF SYNC",0,2+8+16); - - if (g_demo_showStats) - { - // if (g_demo_cnt 1) && g_player[myconnectindex].ps->gm) - Net_GetPackets(); - - if (g_player[myconnectindex].gotvote == 0 && voting != -1 && voting != myconnectindex) - gametext(160,60,"PRESS F1 TO ACCEPT, F2 TO DECLINE",0,2+8+16); - } - - if ((g_player[myconnectindex].ps->gm&MODE_MENU) && (g_player[myconnectindex].ps->gm&MODE_EOL)) - goto RECHECK; - - if (KB_KeyPressed(sc_Escape) && (g_player[myconnectindex].ps->gm&MODE_MENU) == 0 && (g_player[myconnectindex].ps->gm&MODE_TYPE) == 0) - { - KB_ClearKeyDown(sc_Escape); - FX_StopAllSounds(); - S_ClearSoundLocks(); - g_player[myconnectindex].ps->gm |= MODE_MENU; - ChangeToMenu(0); - S_MenuSound(); - } - - if (g_player[myconnectindex].ps->gm&MODE_TYPE) - { - Net_EnterMessage(); - if ((g_player[myconnectindex].ps->gm&MODE_TYPE) != MODE_TYPE) - g_player[myconnectindex].ps->gm = MODE_MENU; - } - else - { - if (ud.recstat != 2) - M_DisplayMenus(); - if ((g_netServer || ud.multimode > 1) && g_currentMenu != 20003 && g_currentMenu != 20005 && g_currentMenu != 210) - { - ControlInfo noshareinfo; - CONTROL_GetInput(&noshareinfo); - if (BUTTON(gamefunc_SendMessage)) - { - KB_FlushKeyboardQueue(); - CONTROL_ClearButton(gamefunc_SendMessage); - g_player[myconnectindex].ps->gm = MODE_TYPE; - typebuf[0] = 0; - inputloc = 0; - } - } - } - - G_PrintGameQuotes(); - - if (ud.last_camsprite != ud.camerasprite) - { - ud.last_camsprite = ud.camerasprite; - ud.camera_time = totalclock+(TICRATE*2); - } - - if (VOLUMEONE) - { - if (ud.show_help == 0 && (g_player[myconnectindex].ps->gm&MODE_MENU) == 0) - rotatesprite((320-50)<<16,9<<16,65536L,0,BETAVERSION,0,0,2+8+16+128,0,0,xdim-1,ydim-1); - } - handleevents(); - Net_GetPackets(); - nextpage(); - - if (g_player[myconnectindex].ps->gm == MODE_GAME) - { - if (foundemo) - { -#if KRANDDEBUG - krd_print("krandplay.log"); -#endif - kclose(g_demo_recFilePtr); - } - return 0; - } - } - ud.multimode = numplayers; // fixes 2 infinite loops after watching demo - kclose(g_demo_recFilePtr); - -#if 0 - { - uint32_t crcv; - // sync checker - + initcrc32table(); - crc32init(&crcv); - crc32block(&crcv, (char *)wall, sizeof(wall)); - crc32block(&crcv, (char *)sector, sizeof(sector)); - crc32block(&crcv, (char *)sprite, sizeof(sprite)); - crc32finish(&crcv); - initprintf("Checksum = %08X\n",crcv); - } -#endif - - if (g_player[myconnectindex].ps->gm&MODE_MENU) goto RECHECK; -#if KRANDDEBUG - if (foundemo) - krd_print("krandplay.log"); -#endif - return 1; -} diff --git a/polymer-perf/eduke32/source/demo.h b/polymer-perf/eduke32/source/demo.h deleted file mode 100644 index 93d5bad88..000000000 --- a/polymer-perf/eduke32/source/demo.h +++ /dev/null @@ -1,60 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#ifndef __demo_h__ -#define __demo_h__ - -extern FILE *g_demo_filePtr; -extern char firstdemofile[80]; - -extern int32_t demoplay_diffs; -extern int32_t demoplay_showsync; -extern int32_t demorec_diffcompress_cvar; -extern int32_t demorec_diffs_cvar; -extern int32_t demorec_difftics_cvar; -extern int32_t demorec_force_cvar; -extern int32_t demorec_seeds_cvar; -extern int32_t demorec_synccompress_cvar; -extern int32_t g_demo_cnt; -extern int32_t g_demo_goalCnt; -extern int32_t g_demo_paused; -extern int32_t g_demo_recFilePtr; -extern int32_t g_demo_rewind; -extern int32_t g_demo_showStats; -extern int32_t g_demo_soundToggle; -extern int32_t g_demo_totalCnt; - -int32_t G_OpenDemoRead(int32_t g_whichDemo); -int32_t G_PlaybackDemo(void); -int32_t sv_loadsnapshot(int32_t fil,int32_t *ret_hasdiffs,int32_t *ret_demoticcnt,int32_t *ret_synccompress); -int32_t sv_updatestate(int32_t frominit); -void demo_preparewarp(void); -void G_CloseDemoWrite(void); -void G_DemoRecord(void); -void G_OpenDemoWrite(void); - -#if KRANDDEBUG -int32_t krd_print(const char *filename); -void krd_enable(int32_t which); -#endif - -#endif diff --git a/polymer-perf/eduke32/source/duke3d.h b/polymer-perf/eduke32/source/duke3d.h deleted file mode 100644 index b926975d6..000000000 --- a/polymer-perf/eduke32/source/duke3d.h +++ /dev/null @@ -1,128 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#ifndef __duke3d_h__ -#define __duke3d_h__ - -#ifdef __cplusplus -extern "C" { -#endif - -// JBF -#include "compat.h" -#include "a.h" -#include "build.h" - -#ifdef POLYMER - #include "polymer.h" -#else -#ifdef USE_OPENGL - #include "polymost.h" -#endif -#endif - -#include "cache1d.h" -#include "pragmas.h" -#include "baselayer.h" -#include "file_lib.h" -#include "keyboard.h" -#include "mathutil.h" -#include "fx_man.h" - -#define APPNAME "EDuke32" -#define VERSION "2.0.0devel" -#define HEAD2 APPNAME" "VERSION - -#define GAME_DUKE 0 -#define GAME_NAM 1 -#define GAME_WW2 3 - -#define VOLUMEALL (g_Shareware == 0) -#define PLUTOPAK (g_scriptVersion == 14) -#define VOLUMEONE (g_Shareware == 1) - -#define NAM (g_gameType & GAME_NAM) -#define WW2GI (g_gameType & GAME_WW2) - -// increase by 3, because atomic GRP adds 1, and Shareware adds 2 -#define BYTEVERSION_JF 198 -#define BYTEVERSION_13 27 -#define BYTEVERSION_14 116 -#define BYTEVERSION_15 117 -#define BYTEVERSION (BYTEVERSION_JF+(PLUTOPAK?1:(VOLUMEONE<<1))) - -#define NUMPAGES 1 - -#define RECSYNCBUFSIZ 2520 //2520 is the (LCM of 1-8)*3 -#define MOVEFIFOSIZ 2 - -#define MAXVOLUMES 7 -#define MAXLEVELS 32 -#define MAXGAMETYPES 16 - -// used as a constant to satisfy all of the calculations written with ticrate = 26 in mind -#define GAMETICSPERSEC 26 -#define REALGAMETICSPERSEC 30 -// this used to be TICRATE/GAMETICSPERSEC, which was 120/26 = 4.615~ truncated to 4 by integer division -#define TICSPERFRAME 4 -#define TICRATE 120 - -#define NO 0 -#define YES 1 - -#define PACKBUF_SIZE 2048 - -#define TILE_SAVESHOT (MAXTILES-1) -#define TILE_LOADSHOT (MAXTILES-3) -#define TILE_TILT (MAXTILES-2) -#define TILE_ANIM (MAXTILES-4) -#define TILE_VIEWSCR (MAXTILES-5) - -// JBF 20040604: sync is a function on some platforms -#define sync dsync - -#include "namesdyn.h" -#include "function.h" -#include "macros.h" -#include "gamedefs.h" -#include "config.h" -#include "sounds.h" -#include "control.h" -#include "_rts.h" -#include "rts.h" -#include "soundefs.h" -#include "music.h" -#include "player.h" -#include "actors.h" -#include "quotes.h" -#include "global.h" -#include "sector.h" -#include "net.h" -#include "game.h" -#include "gamedef.h" -#include "gameexec.h" -#include "gamevars.h" - -#ifdef __cplusplus -} -#endif -#endif diff --git a/polymer-perf/eduke32/source/enet/Makefile b/polymer-perf/eduke32/source/enet/Makefile deleted file mode 100644 index b6620ebd7..000000000 --- a/polymer-perf/eduke32/source/enet/Makefile +++ /dev/null @@ -1,48 +0,0 @@ -include ../../Makefile.common -include ../../$(EROOT)/Makefile.shared - -OBJ=obj -OBJNAME=libenet.a -SRC=src -INC=include - -CFLAGS=$(BASECFLAGS) $(F_NO_STACK_PROTECTOR) -# for BUILD_ECHOFLAGS: -OURCFLAGS=$(CFLAGS) -CPPFLAGS=-I$(INC) -I$(SRC) -I../../$(EROOT)/include - - -OBJECTS=$(OBJ)/callbacks.o \ - $(OBJ)/host.o \ - $(OBJ)/list.o \ - $(OBJ)/packet.o \ - $(OBJ)/peer.o \ - $(OBJ)/protocol.o \ - $(OBJ)/compress.o - -ifeq ($(PLATFORM),WINDOWS) - OBJECTS+= $(OBJ)/win32.o - OBJNAME=libenet_win32.a - OBJ=obj_win -else - OBJECTS+= $(OBJ)/unix.o -endif - -# OBJECTS=$(SOURCES:%.c=$(OBJ)/%.o) - -$(OBJNAME): $(OBJECTS) - $(BUILD_ECHOFLAGS) - $(ARCHIVE_STATUS) - if $(AR) cr $@ $^; then $(ARCHIVE_OK); else $(ARCHIVE_FAILED); fi - -$(OBJECTS): $(OBJ)/%.o: $(SRC)/%.c $(INC)/enet/*.h - -mkdir -p $(OBJ) - $(COMPILE_STATUS) - if $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi - -ifeq ($(PRETTY_OUTPUT),1) -.SILENT: -endif -.PHONY: clean -clean: - -rm -f $(OBJECTS) $(OBJNAME) diff --git a/polymer-perf/eduke32/source/enet/Makefile.msvc b/polymer-perf/eduke32/source/enet/Makefile.msvc deleted file mode 100644 index 6fc69b565..000000000 --- a/polymer-perf/eduke32/source/enet/Makefile.msvc +++ /dev/null @@ -1,46 +0,0 @@ -OBJ=obj.msc -INC=include -SRC=src -ENETLIB=libenet.lib - -!ifdef DEBUG -# debugging options -flags_cl=/Od /Zi -flags_link=/DEBUG -flags_lib= -!else -# release options -flags_cl=/Ox /GL /arch:SSE -flags_link=/RELEASE /LTCG -flags_lib=/LTCG -!endif - -CC=cl -LINK=link /opt:ref /nologo - -CFLAGS=$(CFLAGS) /nologo /MT /J $(flags_cl) $(TARGETOPTS) /I$(INC) /I$(SRC) -!ifdef DEBUG -CFLAGS=$(CFLAGS) /DDEBUGGINGAIDS -!endif - -CFLAGS=$(CFLAGS) /DRENDERTYPE$(RENDERTYPE)=1 /D "_CRT_SECURE_NO_DEPRECATE" /W2 /Iinclude/msvc /DWIN32 - -OBJECTS=$(OBJ)\callbacks.o \ - $(OBJ)\host.o \ - $(OBJ)\list.o \ - $(OBJ)\packet.o \ - $(OBJ)\peer.o \ - $(OBJ)\protocol.o \ - $(OBJ)\win32.o \ - $(OBJ)\compress.o - -{$(SRC)}.c{$(OBJ)}.o: - $(CC) /c $(CFLAGS) /Fo$@ $< - -enet: $(ENETLIB) -$(ENETLIB): $(OBJECTS) - lib $(flags_lib) /out:$@ /nologo $** - -clean: - -del /Q $(OBJ)\* $(ENETLIB) - diff --git a/polymer-perf/eduke32/source/enet/include/enet/callbacks.h b/polymer-perf/eduke32/source/enet/include/enet/callbacks.h deleted file mode 100644 index 340a4a989..000000000 --- a/polymer-perf/eduke32/source/enet/include/enet/callbacks.h +++ /dev/null @@ -1,27 +0,0 @@ -/** - @file callbacks.h - @brief ENet callbacks -*/ -#ifndef __ENET_CALLBACKS_H__ -#define __ENET_CALLBACKS_H__ - -#include - -typedef struct _ENetCallbacks -{ - void * (ENET_CALLBACK * malloc) (size_t size); - void (ENET_CALLBACK * free) (void * memory); - void (ENET_CALLBACK * no_memory) (void); -} ENetCallbacks; - -/** @defgroup callbacks ENet internal callbacks - @{ - @ingroup private -*/ -extern void * enet_malloc (size_t); -extern void enet_free (void *); - -/** @} */ - -#endif /* __ENET_CALLBACKS_H__ */ - diff --git a/polymer-perf/eduke32/source/enet/include/enet/enet.h b/polymer-perf/eduke32/source/enet/include/enet/enet.h deleted file mode 100644 index b572590ec..000000000 --- a/polymer-perf/eduke32/source/enet/include/enet/enet.h +++ /dev/null @@ -1,540 +0,0 @@ -/** - @file enet.h - @brief ENet public header file -*/ -#ifndef __ENET_ENET_H__ -#define __ENET_ENET_H__ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include - -#ifdef WIN32 -#include "enet/win32.h" -#else -#include "enet/unix.h" -#endif - -#include "enet/types.h" -#include "enet/protocol.h" -#include "enet/list.h" -#include "enet/callbacks.h" - -#define ENET_VERSION_MAJOR 1 -#define ENET_VERSION_MINOR 3 -#define ENET_VERSION_PATCH 1 -#define ENET_VERSION_CREATE(major, minor, patch) (((major)<<16) | ((minor)<<8) | (patch)) -#define ENET_VERSION ENET_VERSION_CREATE(ENET_VERSION_MAJOR, ENET_VERSION_MINOR, ENET_VERSION_PATCH) - -typedef enet_uint32 ENetVersion; - -typedef enum _ENetSocketType -{ - ENET_SOCKET_TYPE_STREAM = 1, - ENET_SOCKET_TYPE_DATAGRAM = 2 -} ENetSocketType; - -typedef enum _ENetSocketWait -{ - ENET_SOCKET_WAIT_NONE = 0, - ENET_SOCKET_WAIT_SEND = (1 << 0), - ENET_SOCKET_WAIT_RECEIVE = (1 << 1) -} ENetSocketWait; - -typedef enum _ENetSocketOption -{ - ENET_SOCKOPT_NONBLOCK = 1, - ENET_SOCKOPT_BROADCAST = 2, - ENET_SOCKOPT_RCVBUF = 3, - ENET_SOCKOPT_SNDBUF = 4, - ENET_SOCKOPT_REUSEADDR = 5 -} ENetSocketOption; - -enum -{ - ENET_HOST_ANY = 0, /**< specifies the default server host */ - ENET_HOST_BROADCAST = 0xFFFFFFFF, /**< specifies a subnet-wide broadcast */ - - ENET_PORT_ANY = 0 /**< specifies that a port should be automatically chosen */ -}; - -/** - * Portable internet address structure. - * - * The host must be specified in network byte-order, and the port must be in host - * byte-order. The constant ENET_HOST_ANY may be used to specify the default - * server host. The constant ENET_HOST_BROADCAST may be used to specify the - * broadcast address (255.255.255.255). This makes sense for enet_host_connect, - * but not for enet_host_create. Once a server responds to a broadcast, the - * address is updated from ENET_HOST_BROADCAST to the server's actual IP address. - */ -typedef struct _ENetAddress -{ - enet_uint32 host; - enet_uint16 port; -} ENetAddress; - -/** - * Packet flag bit constants. - * - * The host must be specified in network byte-order, and the port must be in - * host byte-order. The constant ENET_HOST_ANY may be used to specify the - * default server host. - - @sa ENetPacket -*/ -typedef enum _ENetPacketFlag -{ - /** packet must be received by the target peer and resend attempts should be - * made until the packet is delivered */ - ENET_PACKET_FLAG_RELIABLE = (1 << 0), - /** packet will not be sequenced with other packets - * not supported for reliable packets - */ - ENET_PACKET_FLAG_UNSEQUENCED = (1 << 1), - /** packet will not allocate data, and user must supply it instead */ - ENET_PACKET_FLAG_NO_ALLOCATE = (1 << 2) -} ENetPacketFlag; - -struct _ENetPacket; -typedef void (ENET_CALLBACK * ENetPacketFreeCallback) (struct _ENetPacket *); - -/** - * ENet packet structure. - * - * An ENet data packet that may be sent to or received from a peer. The shown - * fields should only be read and never modified. The data field contains the - * allocated data for the packet. The dataLength fields specifies the length - * of the allocated data. The flags field is either 0 (specifying no flags), - * or a bitwise-or of any combination of the following flags: - * - * ENET_PACKET_FLAG_RELIABLE - packet must be received by the target peer - * and resend attempts should be made until the packet is delivered - * - * ENET_PACKET_FLAG_UNSEQUENCED - packet will not be sequenced with other packets - * (not supported for reliable packets) - * - * ENET_PACKET_FLAG_NO_ALLOCATE - packet will not allocate data, and user must supply it instead - - @sa ENetPacketFlag - */ -typedef struct _ENetPacket -{ - size_t referenceCount; /**< internal use only */ - enet_uint32 flags; /**< bitwise-or of ENetPacketFlag constants */ - enet_uint8 * data; /**< allocated data for packet */ - size_t dataLength; /**< length of data */ - ENetPacketFreeCallback freeCallback; /**< function to be called when the packet is no longer in use */ -} ENetPacket; - -typedef struct _ENetAcknowledgement -{ - ENetListNode acknowledgementList; - enet_uint32 sentTime; - ENetProtocol command; -} ENetAcknowledgement; - -typedef struct _ENetOutgoingCommand -{ - ENetListNode outgoingCommandList; - enet_uint16 reliableSequenceNumber; - enet_uint16 unreliableSequenceNumber; - enet_uint32 sentTime; - enet_uint32 roundTripTimeout; - enet_uint32 roundTripTimeoutLimit; - enet_uint32 fragmentOffset; - enet_uint16 fragmentLength; - enet_uint16 sendAttempts; - ENetProtocol command; - ENetPacket * packet; -} ENetOutgoingCommand; - -typedef struct _ENetIncomingCommand -{ - ENetListNode incomingCommandList; - enet_uint16 reliableSequenceNumber; - enet_uint16 unreliableSequenceNumber; - ENetProtocol command; - enet_uint32 fragmentCount; - enet_uint32 fragmentsRemaining; - enet_uint32 * fragments; - ENetPacket * packet; -} ENetIncomingCommand; - -typedef enum _ENetPeerState -{ - ENET_PEER_STATE_DISCONNECTED = 0, - ENET_PEER_STATE_CONNECTING = 1, - ENET_PEER_STATE_ACKNOWLEDGING_CONNECT = 2, - ENET_PEER_STATE_CONNECTION_PENDING = 3, - ENET_PEER_STATE_CONNECTION_SUCCEEDED = 4, - ENET_PEER_STATE_CONNECTED = 5, - ENET_PEER_STATE_DISCONNECT_LATER = 6, - ENET_PEER_STATE_DISCONNECTING = 7, - ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT = 8, - ENET_PEER_STATE_ZOMBIE = 9 -} ENetPeerState; - -#ifndef ENET_BUFFER_MAXIMUM -#define ENET_BUFFER_MAXIMUM (1 + 2 * ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS) -#endif - -enum -{ - ENET_HOST_RECEIVE_BUFFER_SIZE = 256 * 1024, - ENET_HOST_SEND_BUFFER_SIZE = 256 * 1024, - ENET_HOST_BANDWIDTH_THROTTLE_INTERVAL = 1000, - ENET_HOST_DEFAULT_MTU = 1400, - - ENET_PEER_DEFAULT_ROUND_TRIP_TIME = 500, - ENET_PEER_DEFAULT_PACKET_THROTTLE = 32, - ENET_PEER_PACKET_THROTTLE_SCALE = 32, - ENET_PEER_PACKET_THROTTLE_COUNTER = 7, - ENET_PEER_PACKET_THROTTLE_ACCELERATION = 2, - ENET_PEER_PACKET_THROTTLE_DECELERATION = 2, - ENET_PEER_PACKET_THROTTLE_INTERVAL = 5000, - ENET_PEER_PACKET_LOSS_SCALE = (1 << 16), - ENET_PEER_PACKET_LOSS_INTERVAL = 10000, - ENET_PEER_WINDOW_SIZE_SCALE = 64 * 1024, - ENET_PEER_TIMEOUT_LIMIT = 32, - ENET_PEER_TIMEOUT_MINIMUM = 5000, - ENET_PEER_TIMEOUT_MAXIMUM = 30000, - ENET_PEER_PING_INTERVAL = 500, - ENET_PEER_UNSEQUENCED_WINDOWS = 64, - ENET_PEER_UNSEQUENCED_WINDOW_SIZE = 1024, - ENET_PEER_FREE_UNSEQUENCED_WINDOWS = 32, - ENET_PEER_RELIABLE_WINDOWS = 16, - ENET_PEER_RELIABLE_WINDOW_SIZE = 0x1000, - ENET_PEER_FREE_RELIABLE_WINDOWS = 8 -}; - -typedef struct _ENetChannel -{ - enet_uint16 outgoingReliableSequenceNumber; - enet_uint16 outgoingUnreliableSequenceNumber; - enet_uint16 usedReliableWindows; - enet_uint16 reliableWindows [ENET_PEER_RELIABLE_WINDOWS]; - enet_uint16 incomingReliableSequenceNumber; - ENetList incomingReliableCommands; - ENetList incomingUnreliableCommands; -} ENetChannel; - -/** - * An ENet peer which data packets may be sent or received from. - * - * No fields should be modified unless otherwise specified. - */ -typedef struct _ENetPeer -{ - ENetListNode dispatchList; - struct _ENetHost * host; - enet_uint16 outgoingPeerID; - enet_uint16 incomingPeerID; - enet_uint32 connectID; - enet_uint8 outgoingSessionID; - enet_uint8 incomingSessionID; - ENetAddress address; /**< Internet address of the peer */ - void * data; /**< Application private data, may be freely modified */ - ENetPeerState state; - ENetChannel * channels; - size_t channelCount; /**< Number of channels allocated for communication with peer */ - enet_uint32 incomingBandwidth; /**< Downstream bandwidth of the client in bytes/second */ - enet_uint32 outgoingBandwidth; /**< Upstream bandwidth of the client in bytes/second */ - enet_uint32 incomingBandwidthThrottleEpoch; - enet_uint32 outgoingBandwidthThrottleEpoch; - enet_uint32 incomingDataTotal; - enet_uint32 outgoingDataTotal; - enet_uint32 lastSendTime; - enet_uint32 lastReceiveTime; - enet_uint32 nextTimeout; - enet_uint32 earliestTimeout; - enet_uint32 packetLossEpoch; - enet_uint32 packetsSent; - enet_uint32 packetsLost; - enet_uint32 packetLoss; /**< mean packet loss of reliable packets as a ratio with respect to the constant ENET_PEER_PACKET_LOSS_SCALE */ - enet_uint32 packetLossVariance; - enet_uint32 packetThrottle; - enet_uint32 packetThrottleLimit; - enet_uint32 packetThrottleCounter; - enet_uint32 packetThrottleEpoch; - enet_uint32 packetThrottleAcceleration; - enet_uint32 packetThrottleDeceleration; - enet_uint32 packetThrottleInterval; - enet_uint32 lastRoundTripTime; - enet_uint32 lowestRoundTripTime; - enet_uint32 lastRoundTripTimeVariance; - enet_uint32 highestRoundTripTimeVariance; - enet_uint32 roundTripTime; /**< mean round trip time (RTT), in milliseconds, between sending a reliable packet and receiving its acknowledgement */ - enet_uint32 roundTripTimeVariance; - enet_uint32 mtu; - enet_uint32 windowSize; - enet_uint32 reliableDataInTransit; - enet_uint16 outgoingReliableSequenceNumber; - ENetList acknowledgements; - ENetList sentReliableCommands; - ENetList sentUnreliableCommands; - ENetList outgoingReliableCommands; - ENetList outgoingUnreliableCommands; - ENetList dispatchedCommands; - int needsDispatch; - enet_uint16 incomingUnsequencedGroup; - enet_uint16 outgoingUnsequencedGroup; - enet_uint32 unsequencedWindow [ENET_PEER_UNSEQUENCED_WINDOW_SIZE / 32]; - enet_uint32 eventData; -} ENetPeer; - -/** An ENet packet compressor for compressing UDP packets before socket sends or receives. - */ -typedef struct _ENetCompressor -{ - /** Context data for the compressor. Must be non-NULL. */ - void * context; - /** Compresses from inBuffers[0:inBufferCount-1], containing inLimit bytes, to outData, outputting at most outLimit bytes. Should return 0 on failure. */ - size_t (ENET_CALLBACK * compress) (void * context, const ENetBuffer * inBuffers, size_t inBufferCount, size_t inLimit, enet_uint8 * outData, size_t outLimit); - /** Decompresses from inData, containing inLimit bytes, to outData, outputting at most outLimit bytes. Should return 0 on failure. */ - size_t (ENET_CALLBACK * decompress) (void * context, const enet_uint8 * inData, size_t inLimit, enet_uint8 * outData, size_t outLimit); - /** Destroys the context when compression is disabled or the host is destroyed. May be NULL. */ - void (ENET_CALLBACK * destroy) (void * context); -} ENetCompressor; - -/** Callback that computes the checksum of the data held in buffers[0:bufferCount-1] */ -typedef enet_uint32 (ENET_CALLBACK * ENetChecksumCallback) (const ENetBuffer * buffers, size_t bufferCount); - -/** An ENet host for communicating with peers. - * - * No fields should be modified unless otherwise stated. - - @sa enet_host_create() - @sa enet_host_destroy() - @sa enet_host_connect() - @sa enet_host_service() - @sa enet_host_flush() - @sa enet_host_broadcast() - @sa enet_host_compress() - @sa enet_host_compress_with_range_coder() - @sa enet_host_channel_limit() - @sa enet_host_bandwidth_limit() - @sa enet_host_bandwidth_throttle() - */ -typedef struct _ENetHost -{ - ENetSocket socket; - ENetAddress address; /**< Internet address of the host */ - enet_uint32 incomingBandwidth; /**< downstream bandwidth of the host */ - enet_uint32 outgoingBandwidth; /**< upstream bandwidth of the host */ - enet_uint32 bandwidthThrottleEpoch; - enet_uint32 mtu; - enet_uint32 randomSeed; - int recalculateBandwidthLimits; - ENetPeer * peers; /**< array of peers allocated for this host */ - size_t peerCount; /**< number of peers allocated for this host */ - size_t channelLimit; /**< maximum number of channels allowed for connected peers */ - enet_uint32 serviceTime; - ENetList dispatchQueue; - int continueSending; - size_t packetSize; - enet_uint16 headerFlags; - ENetProtocol commands [ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS]; - size_t commandCount; - ENetBuffer buffers [ENET_BUFFER_MAXIMUM]; - size_t bufferCount; - ENetChecksumCallback checksum; /**< callback the user can set to enable packet checksums for this host */ - ENetCompressor compressor; - enet_uint8 packetData [2][ENET_PROTOCOL_MAXIMUM_MTU]; - ENetAddress receivedAddress; - enet_uint8 * receivedData; - size_t receivedDataLength; - enet_uint32 totalSentData; /**< total data sent, user should reset to 0 as needed to prevent overflow */ - enet_uint32 totalSentPackets; /**< total UDP packets sent, user should reset to 0 as needed to prevent overflow */ - enet_uint32 totalReceivedData; /**< total data received, user should reset to 0 as needed to prevent overflow */ - enet_uint32 totalReceivedPackets; /**< total UDP packets received, user should reset to 0 as needed to prevent overflow */ -} ENetHost; - -/** - * An ENet event type, as specified in @ref ENetEvent. - */ -typedef enum _ENetEventType -{ - /** no event occurred within the specified time limit */ - ENET_EVENT_TYPE_NONE = 0, - - /** a connection request initiated by enet_host_connect has completed. - * The peer field contains the peer which successfully connected. - */ - ENET_EVENT_TYPE_CONNECT = 1, - - /** a peer has disconnected. This event is generated on a successful - * completion of a disconnect initiated by enet_pper_disconnect, if - * a peer has timed out, or if a connection request intialized by - * enet_host_connect has timed out. The peer field contains the peer - * which disconnected. The data field contains user supplied data - * describing the disconnection, or 0, if none is available. - */ - ENET_EVENT_TYPE_DISCONNECT = 2, - - /** a packet has been received from a peer. The peer field specifies the - * peer which sent the packet. The channelID field specifies the channel - * number upon which the packet was received. The packet field contains - * the packet that was received; this packet must be destroyed with - * enet_packet_destroy after use. - */ - ENET_EVENT_TYPE_RECEIVE = 3 -} ENetEventType; - -/** - * An ENet event as returned by enet_host_service(). - - @sa enet_host_service - */ -typedef struct _ENetEvent -{ - ENetEventType type; /**< type of the event */ - ENetPeer * peer; /**< peer that generated a connect, disconnect or receive event */ - enet_uint8 channelID; /**< channel on the peer that generated the event, if appropriate */ - enet_uint32 data; /**< data associated with the event, if appropriate */ - ENetPacket * packet; /**< packet associated with the event, if appropriate */ -} ENetEvent; - -/** @defgroup global ENet global functions - @{ -*/ - -/** - Initializes ENet globally. Must be called prior to using any functions in - ENet. - @returns 0 on success, < 0 on failure -*/ -ENET_API int enet_initialize (void); - -/** - Initializes ENet globally and supplies user-overridden callbacks. Must be called prior to using any functions in ENet. Do not use enet_initialize() if you use this variant. Make sure the ENetCallbacks structure is zeroed out so that any additional callbacks added in future versions will be properly ignored. - - @param version the constant ENET_VERSION should be supplied so ENet knows which version of ENetCallbacks struct to use - @param inits user-overriden callbacks where any NULL callbacks will use ENet's defaults - @returns 0 on success, < 0 on failure -*/ -ENET_API int enet_initialize_with_callbacks (ENetVersion version, const ENetCallbacks * inits); - -/** - Shuts down ENet globally. Should be called when a program that has - initialized ENet exits. -*/ -ENET_API void enet_deinitialize (void); - -/** @} */ - -/** @defgroup private ENet private implementation functions */ - -/** - Returns the wall-time in milliseconds. Its initial value is unspecified - unless otherwise set. - */ -ENET_API enet_uint32 enet_time_get (void); -/** - Sets the current wall-time in milliseconds. - */ -ENET_API void enet_time_set (enet_uint32); - -/** @defgroup socket ENet socket functions - @{ -*/ -ENET_API ENetSocket enet_socket_create (ENetSocketType); -ENET_API int enet_socket_bind (ENetSocket, const ENetAddress *); -ENET_API int enet_socket_listen (ENetSocket, int); -ENET_API ENetSocket enet_socket_accept (ENetSocket, ENetAddress *); -ENET_API int enet_socket_connect (ENetSocket, const ENetAddress *); -ENET_API int enet_socket_send (ENetSocket, const ENetAddress *, const ENetBuffer *, size_t); -ENET_API int enet_socket_receive (ENetSocket, ENetAddress *, ENetBuffer *, size_t); -ENET_API int enet_socket_wait (ENetSocket, enet_uint32 *, enet_uint32); -ENET_API int enet_socket_set_option (ENetSocket, ENetSocketOption, int); -ENET_API void enet_socket_destroy (ENetSocket); -ENET_API int enet_socketset_select (ENetSocket, ENetSocketSet *, ENetSocketSet *, enet_uint32); - -/** @} */ - -/** @defgroup Address ENet address functions - @{ -*/ -/** Attempts to resolve the host named by the parameter hostName and sets - the host field in the address parameter if successful. - @param address destination to store resolved address - @param hostName host name to lookup - @retval 0 on success - @retval < 0 on failure - @returns the address of the given hostName in address on success -*/ -ENET_API int enet_address_set_host (ENetAddress * address, const char * hostName); - -/** Gives the printable form of the ip address specified in the address parameter. - @param address address printed - @param hostName destination for name, must not be NULL - @param nameLength maximum length of hostName. - @returns the null-terminated name of the host in hostName on success - @retval 0 on success - @retval < 0 on failure -*/ -ENET_API int enet_address_get_host_ip (const ENetAddress * address, char * hostName, size_t nameLength); - -/** Attempts to do a reverse lookup of the host field in the address parameter. - @param address address used for reverse lookup - @param hostName destination for name, must not be NULL - @param nameLength maximum length of hostName. - @returns the null-terminated name of the host in hostName on success - @retval 0 on success - @retval < 0 on failure -*/ -ENET_API int enet_address_get_host (const ENetAddress * address, char * hostName, size_t nameLength); - -/** @} */ - -ENET_API ENetPacket * enet_packet_create (const void *, size_t, enet_uint32); -ENET_API void enet_packet_destroy (ENetPacket *); -ENET_API int enet_packet_resize (ENetPacket *, size_t); -extern enet_uint32 enet_crc32 (const ENetBuffer *, size_t); - -ENET_API ENetHost * enet_host_create (const ENetAddress *, size_t, size_t, enet_uint32, enet_uint32); -ENET_API void enet_host_destroy (ENetHost *); -ENET_API ENetPeer * enet_host_connect (ENetHost *, const ENetAddress *, size_t, enet_uint32); -ENET_API int enet_host_check_events (ENetHost *, ENetEvent *); -ENET_API int enet_host_service (ENetHost *, ENetEvent *, enet_uint32); -ENET_API void enet_host_flush (ENetHost *); -ENET_API void enet_host_broadcast (ENetHost *, enet_uint8, ENetPacket *); -ENET_API void enet_host_compress (ENetHost *, const ENetCompressor *); -ENET_API int enet_host_compress_with_range_coder (ENetHost * host); -ENET_API void enet_host_channel_limit (ENetHost *, size_t); -ENET_API void enet_host_bandwidth_limit (ENetHost *, enet_uint32, enet_uint32); -extern void enet_host_bandwidth_throttle (ENetHost *); - -ENET_API int enet_peer_send (ENetPeer *, enet_uint8, ENetPacket *); -ENET_API ENetPacket * enet_peer_receive (ENetPeer *, enet_uint8 * channelID); -ENET_API void enet_peer_ping (ENetPeer *); -ENET_API void enet_peer_reset (ENetPeer *); -ENET_API void enet_peer_disconnect (ENetPeer *, enet_uint32); -ENET_API void enet_peer_disconnect_now (ENetPeer *, enet_uint32); -ENET_API void enet_peer_disconnect_later (ENetPeer *, enet_uint32); -ENET_API void enet_peer_throttle_configure (ENetPeer *, enet_uint32, enet_uint32, enet_uint32); -extern int enet_peer_throttle (ENetPeer *, enet_uint32); -extern void enet_peer_reset_queues (ENetPeer *); -extern void enet_peer_setup_outgoing_command (ENetPeer *, ENetOutgoingCommand *); -extern ENetOutgoingCommand * enet_peer_queue_outgoing_command (ENetPeer *, const ENetProtocol *, ENetPacket *, enet_uint32, enet_uint16); -extern ENetIncomingCommand * enet_peer_queue_incoming_command (ENetPeer *, const ENetProtocol *, ENetPacket *, enet_uint32); -extern ENetAcknowledgement * enet_peer_queue_acknowledgement (ENetPeer *, const ENetProtocol *, enet_uint16); -extern void enet_peer_dispatch_incoming_unreliable_commands (ENetPeer *, ENetChannel *); -extern void enet_peer_dispatch_incoming_reliable_commands (ENetPeer *, ENetChannel *); - -ENET_API void * enet_range_coder_create (void); -ENET_API void enet_range_coder_destroy (void *); -ENET_API size_t enet_range_coder_compress (void *, const ENetBuffer *, size_t, size_t, enet_uint8 *, size_t); -ENET_API size_t enet_range_coder_decompress (void *, const enet_uint8 *, size_t, enet_uint8 *, size_t); - -extern size_t enet_protocol_command_size (enet_uint8); - -#ifdef __cplusplus -} -#endif - -#endif /* __ENET_ENET_H__ */ - diff --git a/polymer-perf/eduke32/source/enet/include/enet/list.h b/polymer-perf/eduke32/source/enet/include/enet/list.h deleted file mode 100644 index d7b260084..000000000 --- a/polymer-perf/eduke32/source/enet/include/enet/list.h +++ /dev/null @@ -1,43 +0,0 @@ -/** - @file list.h - @brief ENet list management -*/ -#ifndef __ENET_LIST_H__ -#define __ENET_LIST_H__ - -#include - -typedef struct _ENetListNode -{ - struct _ENetListNode * next; - struct _ENetListNode * previous; -} ENetListNode; - -typedef ENetListNode * ENetListIterator; - -typedef struct _ENetList -{ - ENetListNode sentinel; -} ENetList; - -extern void enet_list_clear (ENetList *); - -extern ENetListIterator enet_list_insert (ENetListIterator, void *); -extern void * enet_list_remove (ENetListIterator); -extern ENetListIterator enet_list_move (ENetListIterator, void *, void *); - -extern size_t enet_list_size (ENetList *); - -#define enet_list_begin(list) ((list) -> sentinel.next) -#define enet_list_end(list) (& (list) -> sentinel) - -#define enet_list_empty(list) (enet_list_begin (list) == enet_list_end (list)) - -#define enet_list_next(iterator) ((iterator) -> next) -#define enet_list_previous(iterator) ((iterator) -> previous) - -#define enet_list_front(list) ((void *) (list) -> sentinel.next) -#define enet_list_back(list) ((void *) (list) -> sentinel.previous) - -#endif /* __ENET_LIST_H__ */ - diff --git a/polymer-perf/eduke32/source/enet/include/enet/protocol.h b/polymer-perf/eduke32/source/enet/include/enet/protocol.h deleted file mode 100644 index 19f7e45de..000000000 --- a/polymer-perf/eduke32/source/enet/include/enet/protocol.h +++ /dev/null @@ -1,196 +0,0 @@ -/** - @file protocol.h - @brief ENet protocol -*/ -#ifndef __ENET_PROTOCOL_H__ -#define __ENET_PROTOCOL_H__ - -#include "enet/types.h" - -enum -{ - ENET_PROTOCOL_MINIMUM_MTU = 576, - ENET_PROTOCOL_MAXIMUM_MTU = 4096, - ENET_PROTOCOL_MAXIMUM_PACKET_COMMANDS = 32, - ENET_PROTOCOL_MINIMUM_WINDOW_SIZE = 4096, - ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE = 32768, - ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT = 1, - ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT = 255, - ENET_PROTOCOL_MAXIMUM_PEER_ID = 0xFFF -}; - -typedef enum _ENetProtocolCommand -{ - ENET_PROTOCOL_COMMAND_NONE = 0, - ENET_PROTOCOL_COMMAND_ACKNOWLEDGE = 1, - ENET_PROTOCOL_COMMAND_CONNECT = 2, - ENET_PROTOCOL_COMMAND_VERIFY_CONNECT = 3, - ENET_PROTOCOL_COMMAND_DISCONNECT = 4, - ENET_PROTOCOL_COMMAND_PING = 5, - ENET_PROTOCOL_COMMAND_SEND_RELIABLE = 6, - ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE = 7, - ENET_PROTOCOL_COMMAND_SEND_FRAGMENT = 8, - ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED = 9, - ENET_PROTOCOL_COMMAND_BANDWIDTH_LIMIT = 10, - ENET_PROTOCOL_COMMAND_THROTTLE_CONFIGURE = 11, - ENET_PROTOCOL_COMMAND_COUNT = 12, - - ENET_PROTOCOL_COMMAND_MASK = 0x0F -} ENetProtocolCommand; - -typedef enum _ENetProtocolFlag -{ - ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE = (1 << 7), - ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED = (1 << 6), - - ENET_PROTOCOL_HEADER_FLAG_COMPRESSED = (1 << 14), - ENET_PROTOCOL_HEADER_FLAG_SENT_TIME = (1 << 15), - ENET_PROTOCOL_HEADER_FLAG_MASK = ENET_PROTOCOL_HEADER_FLAG_COMPRESSED | ENET_PROTOCOL_HEADER_FLAG_SENT_TIME, - - ENET_PROTOCOL_HEADER_SESSION_MASK = (3 << 12), - ENET_PROTOCOL_HEADER_SESSION_SHIFT = 12 -} ENetProtocolFlag; - -#ifdef _MSC_VER_ -#pragma pack(push, 1) -#define ENET_PACKED -#elif defined(__GNUC__) -#define ENET_PACKED __attribute__ ((packed)) -#else -#define ENET_PACKED -#endif - -typedef struct _ENetProtocolHeader -{ - enet_uint16 peerID; - enet_uint16 sentTime; -} ENET_PACKED ENetProtocolHeader; - -typedef struct _ENetProtocolCommandHeader -{ - enet_uint8 command; - enet_uint8 channelID; - enet_uint16 reliableSequenceNumber; -} ENET_PACKED ENetProtocolCommandHeader; - -typedef struct _ENetProtocolAcknowledge -{ - ENetProtocolCommandHeader header; - enet_uint16 receivedReliableSequenceNumber; - enet_uint16 receivedSentTime; -} ENET_PACKED ENetProtocolAcknowledge; - -typedef struct _ENetProtocolConnect -{ - ENetProtocolCommandHeader header; - enet_uint16 outgoingPeerID; - enet_uint8 incomingSessionID; - enet_uint8 outgoingSessionID; - enet_uint32 mtu; - enet_uint32 windowSize; - enet_uint32 channelCount; - enet_uint32 incomingBandwidth; - enet_uint32 outgoingBandwidth; - enet_uint32 packetThrottleInterval; - enet_uint32 packetThrottleAcceleration; - enet_uint32 packetThrottleDeceleration; - enet_uint32 connectID; - enet_uint32 data; -} ENET_PACKED ENetProtocolConnect; - -typedef struct _ENetProtocolVerifyConnect -{ - ENetProtocolCommandHeader header; - enet_uint16 outgoingPeerID; - enet_uint8 incomingSessionID; - enet_uint8 outgoingSessionID; - enet_uint32 mtu; - enet_uint32 windowSize; - enet_uint32 channelCount; - enet_uint32 incomingBandwidth; - enet_uint32 outgoingBandwidth; - enet_uint32 packetThrottleInterval; - enet_uint32 packetThrottleAcceleration; - enet_uint32 packetThrottleDeceleration; - enet_uint32 connectID; -} ENET_PACKED ENetProtocolVerifyConnect; - -typedef struct _ENetProtocolBandwidthLimit -{ - ENetProtocolCommandHeader header; - enet_uint32 incomingBandwidth; - enet_uint32 outgoingBandwidth; -} ENET_PACKED ENetProtocolBandwidthLimit; - -typedef struct _ENetProtocolThrottleConfigure -{ - ENetProtocolCommandHeader header; - enet_uint32 packetThrottleInterval; - enet_uint32 packetThrottleAcceleration; - enet_uint32 packetThrottleDeceleration; -} ENET_PACKED ENetProtocolThrottleConfigure; - -typedef struct _ENetProtocolDisconnect -{ - ENetProtocolCommandHeader header; - enet_uint32 data; -} ENET_PACKED ENetProtocolDisconnect; - -typedef struct _ENetProtocolPing -{ - ENetProtocolCommandHeader header; -} ENET_PACKED ENetProtocolPing; - -typedef struct _ENetProtocolSendReliable -{ - ENetProtocolCommandHeader header; - enet_uint16 dataLength; -} ENET_PACKED ENetProtocolSendReliable; - -typedef struct _ENetProtocolSendUnreliable -{ - ENetProtocolCommandHeader header; - enet_uint16 unreliableSequenceNumber; - enet_uint16 dataLength; -} ENET_PACKED ENetProtocolSendUnreliable; - -typedef struct _ENetProtocolSendUnsequenced -{ - ENetProtocolCommandHeader header; - enet_uint16 unsequencedGroup; - enet_uint16 dataLength; -} ENET_PACKED ENetProtocolSendUnsequenced; - -typedef struct _ENetProtocolSendFragment -{ - ENetProtocolCommandHeader header; - enet_uint16 startSequenceNumber; - enet_uint16 dataLength; - enet_uint32 fragmentCount; - enet_uint32 fragmentNumber; - enet_uint32 totalLength; - enet_uint32 fragmentOffset; -} ENET_PACKED ENetProtocolSendFragment; - -typedef union _ENetProtocol -{ - ENetProtocolCommandHeader header; - ENetProtocolAcknowledge acknowledge; - ENetProtocolConnect connect; - ENetProtocolVerifyConnect verifyConnect; - ENetProtocolDisconnect disconnect; - ENetProtocolPing ping; - ENetProtocolSendReliable sendReliable; - ENetProtocolSendUnreliable sendUnreliable; - ENetProtocolSendUnsequenced sendUnsequenced; - ENetProtocolSendFragment sendFragment; - ENetProtocolBandwidthLimit bandwidthLimit; - ENetProtocolThrottleConfigure throttleConfigure; -} ENET_PACKED ENetProtocol; - -#ifdef _MSC_VER_ -#pragma pack(pop) -#endif - -#endif /* __ENET_PROTOCOL_H__ */ - diff --git a/polymer-perf/eduke32/source/enet/include/enet/time.h b/polymer-perf/eduke32/source/enet/include/enet/time.h deleted file mode 100644 index c82a54603..000000000 --- a/polymer-perf/eduke32/source/enet/include/enet/time.h +++ /dev/null @@ -1,18 +0,0 @@ -/** - @file time.h - @brief ENet time constants and macros -*/ -#ifndef __ENET_TIME_H__ -#define __ENET_TIME_H__ - -#define ENET_TIME_OVERFLOW 86400000 - -#define ENET_TIME_LESS(a, b) ((a) - (b) >= ENET_TIME_OVERFLOW) -#define ENET_TIME_GREATER(a, b) ((b) - (a) >= ENET_TIME_OVERFLOW) -#define ENET_TIME_LESS_EQUAL(a, b) (! ENET_TIME_GREATER (a, b)) -#define ENET_TIME_GREATER_EQUAL(a, b) (! ENET_TIME_LESS (a, b)) - -#define ENET_TIME_DIFFERENCE(a, b) ((a) - (b) >= ENET_TIME_OVERFLOW ? (b) - (a) : (a) - (b)) - -#endif /* __ENET_TIME_H__ */ - diff --git a/polymer-perf/eduke32/source/enet/include/enet/types.h b/polymer-perf/eduke32/source/enet/include/enet/types.h deleted file mode 100644 index ab010a4b1..000000000 --- a/polymer-perf/eduke32/source/enet/include/enet/types.h +++ /dev/null @@ -1,13 +0,0 @@ -/** - @file types.h - @brief type definitions for ENet -*/ -#ifndef __ENET_TYPES_H__ -#define __ENET_TYPES_H__ - -typedef unsigned char enet_uint8; /**< unsigned 8-bit type */ -typedef unsigned short enet_uint16; /**< unsigned 16-bit type */ -typedef unsigned int enet_uint32; /**< unsigned 32-bit type */ - -#endif /* __ENET_TYPES_H__ */ - diff --git a/polymer-perf/eduke32/source/enet/include/enet/unix.h b/polymer-perf/eduke32/source/enet/include/enet/unix.h deleted file mode 100644 index 087015e51..000000000 --- a/polymer-perf/eduke32/source/enet/include/enet/unix.h +++ /dev/null @@ -1,45 +0,0 @@ -/** - @file unix.h - @brief ENet Unix header -*/ -#ifndef __ENET_UNIX_H__ -#define __ENET_UNIX_H__ - -#include -#include -#include -#include -#include - -typedef int ENetSocket; - -enum -{ - ENET_SOCKET_NULL = -1 -}; - -#define ENET_HOST_TO_NET_16(value) (htons (value)) /**< macro that converts host to net byte-order of a 16-bit value */ -#define ENET_HOST_TO_NET_32(value) (htonl (value)) /**< macro that converts host to net byte-order of a 32-bit value */ - -#define ENET_NET_TO_HOST_16(value) (ntohs (value)) /**< macro that converts net to host byte-order of a 16-bit value */ -#define ENET_NET_TO_HOST_32(value) (ntohl (value)) /**< macro that converts net to host byte-order of a 32-bit value */ - -typedef struct -{ - void * data; - size_t dataLength; -} ENetBuffer; - -#define ENET_CALLBACK - -#define ENET_API extern - -typedef fd_set ENetSocketSet; - -#define ENET_SOCKETSET_EMPTY(sockset) FD_ZERO (& (sockset)) -#define ENET_SOCKETSET_ADD(sockset, socket) FD_SET (socket, & (sockset)) -#define ENET_SOCKETSET_REMOVE(sockset, socket) FD_CLEAR (socket, & (sockset)) -#define ENET_SOCKETSET_CHECK(sockset, socket) FD_ISSET (socket, & (sockset)) - -#endif /* __ENET_UNIX_H__ */ - diff --git a/polymer-perf/eduke32/source/enet/include/enet/utility.h b/polymer-perf/eduke32/source/enet/include/enet/utility.h deleted file mode 100644 index e48a476be..000000000 --- a/polymer-perf/eduke32/source/enet/include/enet/utility.h +++ /dev/null @@ -1,12 +0,0 @@ -/** - @file utility.h - @brief ENet utility header -*/ -#ifndef __ENET_UTILITY_H__ -#define __ENET_UTILITY_H__ - -#define ENET_MAX(x, y) ((x) > (y) ? (x) : (y)) -#define ENET_MIN(x, y) ((x) < (y) ? (x) : (y)) - -#endif /* __ENET_UTILITY_H__ */ - diff --git a/polymer-perf/eduke32/source/enet/include/enet/win32.h b/polymer-perf/eduke32/source/enet/include/enet/win32.h deleted file mode 100644 index a20fb24dd..000000000 --- a/polymer-perf/eduke32/source/enet/include/enet/win32.h +++ /dev/null @@ -1,60 +0,0 @@ -/** - @file win32.h - @brief ENet Win32 header -*/ -#ifndef __ENET_WIN32_H__ -#define __ENET_WIN32_H__ - -#ifdef ENET_BUILDING_LIB -#ifdef _MSC_VER -#pragma warning (disable: 4996) // 'strncpy' was declared deprecated -#pragma warning (disable: 4267) // size_t to int conversion -#pragma warning (disable: 4244) // 64bit to 32bit int -#pragma warning (disable: 4018) // signed/unsigned mismatch -#endif -#endif - -#include -#include - -typedef SOCKET ENetSocket; - -enum -{ - ENET_SOCKET_NULL = INVALID_SOCKET -}; - -#define ENET_HOST_TO_NET_16(value) (htons (value)) -#define ENET_HOST_TO_NET_32(value) (htonl (value)) - -#define ENET_NET_TO_HOST_16(value) (ntohs (value)) -#define ENET_NET_TO_HOST_32(value) (ntohl (value)) - -typedef struct -{ - size_t dataLength; - void * data; -} ENetBuffer; - -#define ENET_CALLBACK __cdecl - -#if defined ENET_DLL -#if defined ENET_BUILDING_LIB -#define ENET_API __declspec( dllexport ) -#else -#define ENET_API __declspec( dllimport ) -#endif /* ENET_BUILDING_LIB */ -#else /* !ENET_DLL */ -#define ENET_API extern -#endif /* ENET_DLL */ - -typedef fd_set ENetSocketSet; - -#define ENET_SOCKETSET_EMPTY(sockset) FD_ZERO (& (sockset)) -#define ENET_SOCKETSET_ADD(sockset, socket) FD_SET (socket, & (sockset)) -#define ENET_SOCKETSET_REMOVE(sockset, socket) FD_CLEAR (socket, & (sockset)) -#define ENET_SOCKETSET_CHECK(sockset, socket) FD_ISSET (socket, & (sockset)) - -#endif /* __ENET_WIN32_H__ */ - - diff --git a/polymer-perf/eduke32/source/enet/src/callbacks.c b/polymer-perf/eduke32/source/enet/src/callbacks.c deleted file mode 100644 index f94128256..000000000 --- a/polymer-perf/eduke32/source/enet/src/callbacks.c +++ /dev/null @@ -1,47 +0,0 @@ -/** - @file callbacks.c - @brief ENet callback functions -*/ -#define ENET_BUILDING_LIB 1 -#include "enet/enet.h" - -static ENetCallbacks callbacks = { malloc, free, abort }; - -int -enet_initialize_with_callbacks (ENetVersion version, const ENetCallbacks * inits) -{ - if (version < ENET_VERSION_CREATE (1, 3, 0)) - return -1; - - if (inits -> malloc != NULL || inits -> free != NULL) - { - if (inits -> malloc == NULL || inits -> free == NULL) - return -1; - - callbacks.malloc = inits -> malloc; - callbacks.free = inits -> free; - } - - if (inits -> no_memory != NULL) - callbacks.no_memory = inits -> no_memory; - - return enet_initialize (); -} - -void * -enet_malloc (size_t size) -{ - void * memory = callbacks.malloc (size); - - if (memory == NULL) - callbacks.no_memory (); - - return memory; -} - -void -enet_free (void * memory) -{ - callbacks.free (memory); -} - diff --git a/polymer-perf/eduke32/source/enet/src/compress.c b/polymer-perf/eduke32/source/enet/src/compress.c deleted file mode 100644 index 784489a78..000000000 --- a/polymer-perf/eduke32/source/enet/src/compress.c +++ /dev/null @@ -1,654 +0,0 @@ -/** - @file compress.c - @brief An adaptive order-2 PPM range coder -*/ -#define ENET_BUILDING_LIB 1 -#include -#include "enet/enet.h" - -typedef struct _ENetSymbol -{ - /* binary indexed tree of symbols */ - enet_uint8 value; - enet_uint8 count; - enet_uint16 under; - enet_uint16 left, right; - - /* context defined by this symbol */ - enet_uint16 symbols; - enet_uint16 escapes; - enet_uint16 total; - enet_uint16 parent; -} ENetSymbol; - -/* adaptation constants tuned aggressively for small packet sizes rather than large file compression */ -enum -{ - ENET_RANGE_CODER_TOP = 1<<24, - ENET_RANGE_CODER_BOTTOM = 1<<16, - - ENET_CONTEXT_SYMBOL_DELTA = 3, - ENET_CONTEXT_SYMBOL_MINIMUM = 1, - ENET_CONTEXT_ESCAPE_MINIMUM = 1, - - ENET_SUBCONTEXT_ORDER = 2, - ENET_SUBCONTEXT_SYMBOL_DELTA = 2, - ENET_SUBCONTEXT_ESCAPE_DELTA = 5 -}; - -/* context exclusion roughly halves compression speed, so disable for now */ -#undef ENET_CONTEXT_EXCLUSION - -typedef struct _ENetRangeCoder -{ - /* only allocate enough symbols for reasonable MTUs, would need to be larger for large file compression */ - ENetSymbol symbols[4096]; -} ENetRangeCoder; - -void * -enet_range_coder_create (void) -{ - ENetRangeCoder * rangeCoder = (ENetRangeCoder *) enet_malloc (sizeof (ENetRangeCoder)); - if (rangeCoder == NULL) - return NULL; - - return rangeCoder; -} - -void -enet_range_coder_destroy (void * context) -{ - ENetRangeCoder * rangeCoder = (ENetRangeCoder *) context; - if (rangeCoder == NULL) - return; - - enet_free (rangeCoder); -} - -#define ENET_SYMBOL_CREATE(symbol, value_, count_) \ -{ \ - symbol = & rangeCoder -> symbols [nextSymbol ++]; \ - symbol -> value = value_; \ - symbol -> count = count_; \ - symbol -> under = count_; \ - symbol -> left = 0; \ - symbol -> right = 0; \ - symbol -> symbols = 0; \ - symbol -> escapes = 0; \ - symbol -> total = 0; \ - symbol -> parent = 0; \ -} - -#define ENET_CONTEXT_CREATE(context, escapes_, minimum) \ -{ \ - ENET_SYMBOL_CREATE (context, 0, 0); \ - (context) -> escapes = escapes_; \ - (context) -> total = escapes_ + 256*minimum; \ - (context) -> symbols = 0; \ -} - -static enet_uint16 -enet_symbol_rescale (ENetSymbol * symbol) -{ - enet_uint16 total = 0; - for (;;) - { - symbol -> count -= symbol->count >> 1; - symbol -> under = symbol -> count; - if (symbol -> left) - symbol -> under += enet_symbol_rescale (symbol + symbol -> left); - total += symbol -> under; - if (! symbol -> right) break; - symbol += symbol -> right; - } - return total; -} - -#define ENET_CONTEXT_RESCALE(context, minimum) \ -{ \ - (context) -> total = (context) -> symbols ? enet_symbol_rescale ((context) + (context) -> symbols) : 0; \ - (context) -> escapes -= (context) -> escapes >> 1; \ - (context) -> total += (context) -> escapes + 256*minimum; \ -} - -#define ENET_RANGE_CODER_OUTPUT(value) \ -{ \ - if (outData >= outEnd) \ - return 0; \ - * outData ++ = value; \ -} - -#define ENET_RANGE_CODER_ENCODE(under, count, total) \ -{ \ - encodeRange /= (total); \ - encodeLow += (under) * encodeRange; \ - encodeRange *= (count); \ - for (;;) \ - { \ - if((encodeLow ^ (encodeLow + encodeRange)) >= ENET_RANGE_CODER_TOP) \ - { \ - if(encodeRange >= ENET_RANGE_CODER_BOTTOM) break; \ - encodeRange = -encodeLow & (ENET_RANGE_CODER_BOTTOM - 1); \ - } \ - ENET_RANGE_CODER_OUTPUT (encodeLow >> 24); \ - encodeRange <<= 8; \ - encodeLow <<= 8; \ - } \ -} - -#define ENET_RANGE_CODER_FLUSH \ -{ \ - while (encodeLow) \ - { \ - ENET_RANGE_CODER_OUTPUT (encodeLow >> 24); \ - encodeLow <<= 8; \ - } \ -} - -#define ENET_RANGE_CODER_FREE_SYMBOLS \ -{ \ - if (nextSymbol >= sizeof (rangeCoder -> symbols) / sizeof (ENetSymbol) - ENET_SUBCONTEXT_ORDER ) \ - { \ - nextSymbol = 0; \ - ENET_CONTEXT_CREATE (root, ENET_CONTEXT_ESCAPE_MINIMUM, ENET_CONTEXT_SYMBOL_MINIMUM); \ - predicted = 0; \ - order = 0; \ - } \ -} - -#define ENET_CONTEXT_ENCODE(context, symbol_, value_, under_, count_, update, minimum) \ -{ \ - under_ = value*minimum; \ - count_ = minimum; \ - if (! (context) -> symbols) \ - { \ - ENET_SYMBOL_CREATE (symbol_, value_, update); \ - (context) -> symbols = symbol_ - (context); \ - } \ - else \ - { \ - ENetSymbol * node = (context) + (context) -> symbols; \ - for (;;) \ - { \ - if (value_ < node -> value) \ - { \ - node -> under += update; \ - if (node -> left) { node += node -> left; continue; } \ - ENET_SYMBOL_CREATE (symbol_, value_, update); \ - node -> left = symbol_ - node; \ - } \ - else \ - if (value_ > node -> value) \ - { \ - under_ += node -> under; \ - if (node -> right) { node += node -> right; continue; } \ - ENET_SYMBOL_CREATE (symbol_, value_, update); \ - node -> right = symbol_ - node; \ - } \ - else \ - { \ - count_ += node -> count; \ - under_ += node -> under - node -> count; \ - node -> under += update; \ - node -> count += update; \ - symbol_ = node; \ - } \ - break; \ - } \ - } \ -} - -#ifdef ENET_CONTEXT_EXCLUSION -static const ENetSymbol emptyContext = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - -#define ENET_CONTEXT_WALK(context, body) \ -{ \ - const ENetSymbol * node = (context) + (context) -> symbols; \ - const ENetSymbol * stack [256]; \ - size_t stackSize = 0; \ - while (node -> left) \ - { \ - stack [stackSize ++] = node; \ - node += node -> left; \ - } \ - for (;;) \ - { \ - body; \ - if (node -> right) \ - { \ - node += node -> right; \ - while (node -> left) \ - { \ - stack [stackSize ++] = node; \ - node += node -> left; \ - } \ - } \ - else \ - if (stackSize <= 0) \ - break; \ - else \ - node = stack [-- stackSize]; \ - } \ -} - -#define ENET_CONTEXT_ENCODE_EXCLUDE(context, value_, under, total, minimum) \ -ENET_CONTEXT_WALK(context, { \ - if (node -> value != value_) \ - { \ - enet_uint16 parentCount = rangeCoder -> symbols [node -> parent].count + minimum; \ - if (node -> value < value_) \ - under -= parentCount; \ - total -= parentCount; \ - } \ -}) -#endif - -size_t -enet_range_coder_compress (void * context, const ENetBuffer * inBuffers, size_t inBufferCount, size_t inLimit, enet_uint8 * outData, size_t outLimit) -{ - ENetRangeCoder * rangeCoder = (ENetRangeCoder *) context; - enet_uint8 * outStart = outData, * outEnd = & outData [outLimit]; - const enet_uint8 * inData, * inEnd; - enet_uint32 encodeLow = 0, encodeRange = ~0; - ENetSymbol * root; - enet_uint16 predicted = 0; - size_t order = 0, nextSymbol = 0; - - if (rangeCoder == NULL || inBufferCount <= 0 || inLimit <= 0) - return 0; - - inData = (const enet_uint8 *) inBuffers -> data; - inEnd = & inData [inBuffers -> dataLength]; - inBuffers ++; - inBufferCount --; - - ENET_CONTEXT_CREATE (root, ENET_CONTEXT_ESCAPE_MINIMUM, ENET_CONTEXT_SYMBOL_MINIMUM); - - for (;;) - { - ENetSymbol * subcontext, * symbol; -#ifdef ENET_CONTEXT_EXCLUSION - const ENetSymbol * childContext = & emptyContext; -#endif - enet_uint8 value; - enet_uint16 count, under, * parent = & predicted, total; - if (inData >= inEnd) - { - if (inBufferCount <= 0) - break; - inData = (const enet_uint8 *) inBuffers -> data; - inEnd = & inData [inBuffers -> dataLength]; - inBuffers ++; - inBufferCount --; - } - value = * inData ++; - - for (subcontext = & rangeCoder -> symbols [predicted]; - subcontext != root; -#ifdef ENET_CONTEXT_EXCLUSION - childContext = subcontext, -#endif - subcontext = & rangeCoder -> symbols [subcontext -> parent]) - { - ENET_CONTEXT_ENCODE (subcontext, symbol, value, under, count, ENET_SUBCONTEXT_SYMBOL_DELTA, 0); - * parent = symbol - rangeCoder -> symbols; - parent = & symbol -> parent; - total = subcontext -> total; -#ifdef ENET_CONTEXT_EXCLUSION - if (childContext -> total > ENET_SUBCONTEXT_SYMBOL_DELTA + ENET_SUBCONTEXT_ESCAPE_DELTA) - ENET_CONTEXT_ENCODE_EXCLUDE (childContext, value, under, total, 0); -#endif - if (count > 0) - { - ENET_RANGE_CODER_ENCODE (subcontext -> escapes + under, count, total); - } - else - { - if (subcontext -> escapes > 0 && subcontext -> escapes < total) - ENET_RANGE_CODER_ENCODE (0, subcontext -> escapes, total); - subcontext -> escapes += ENET_SUBCONTEXT_ESCAPE_DELTA; - subcontext -> total += ENET_SUBCONTEXT_ESCAPE_DELTA; - } - subcontext -> total += ENET_SUBCONTEXT_SYMBOL_DELTA; - if (count > 0xFF - 2*ENET_SUBCONTEXT_SYMBOL_DELTA || subcontext -> total > ENET_RANGE_CODER_BOTTOM - 0x100) - ENET_CONTEXT_RESCALE (subcontext, 0); - if (count > 0) goto nextInput; - } - - ENET_CONTEXT_ENCODE (root, symbol, value, under, count, ENET_CONTEXT_SYMBOL_DELTA, ENET_CONTEXT_SYMBOL_MINIMUM); - * parent = symbol - rangeCoder -> symbols; - parent = & symbol -> parent; - total = root -> total; -#ifdef ENET_CONTEXT_EXCLUSION - if (childContext -> total > ENET_SUBCONTEXT_SYMBOL_DELTA + ENET_SUBCONTEXT_ESCAPE_DELTA) - ENET_CONTEXT_ENCODE_EXCLUDE (childContext, value, under, total, ENET_CONTEXT_SYMBOL_MINIMUM); -#endif - ENET_RANGE_CODER_ENCODE (root -> escapes + under, count, total); - root -> total += ENET_CONTEXT_SYMBOL_DELTA; - if (count > 0xFF - 2*ENET_CONTEXT_SYMBOL_DELTA + ENET_CONTEXT_SYMBOL_MINIMUM || root -> total > ENET_RANGE_CODER_BOTTOM - 0x100) - ENET_CONTEXT_RESCALE (root, ENET_CONTEXT_SYMBOL_MINIMUM); - - nextInput: - if (order >= ENET_SUBCONTEXT_ORDER) - predicted = rangeCoder -> symbols [predicted].parent; - else - order ++; - ENET_RANGE_CODER_FREE_SYMBOLS; - } - - ENET_RANGE_CODER_FLUSH; - - return (size_t) (outData - outStart); -} - -#define ENET_RANGE_CODER_SEED \ -{ \ - if (inData < inEnd) decodeCode |= * inData ++ << 24; \ - if (inData < inEnd) decodeCode |= * inData ++ << 16; \ - if (inData < inEnd) decodeCode |= * inData ++ << 8; \ - if (inData < inEnd) decodeCode |= * inData ++; \ -} - -#define ENET_RANGE_CODER_READ(total) ((decodeCode - decodeLow) / (decodeRange /= (total))) - -#define ENET_RANGE_CODER_DECODE(under, count, total) \ -{ \ - decodeLow += (under) * decodeRange; \ - decodeRange *= (count); \ - for (;;) \ - { \ - if((decodeLow ^ (decodeLow + decodeRange)) >= ENET_RANGE_CODER_TOP) \ - { \ - if(decodeRange >= ENET_RANGE_CODER_BOTTOM) break; \ - decodeRange = -decodeLow & (ENET_RANGE_CODER_BOTTOM - 1); \ - } \ - decodeCode <<= 8; \ - if (inData < inEnd) \ - decodeCode |= * inData ++; \ - decodeRange <<= 8; \ - decodeLow <<= 8; \ - } \ -} - -#define ENET_CONTEXT_DECODE(context, symbol_, code, value_, under_, count_, update, minimum, createRoot, visitNode, createRight, createLeft) \ -{ \ - under_ = 0; \ - count_ = minimum; \ - if (! (context) -> symbols) \ - { \ - createRoot; \ - } \ - else \ - { \ - ENetSymbol * node = (context) + (context) -> symbols; \ - for (;;) \ - { \ - enet_uint16 after = under_ + node -> under + (node -> value + 1)*minimum, before = node -> count + minimum; \ - visitNode; \ - if (code >= after) \ - { \ - under_ += node -> under; \ - if (node -> right) { node += node -> right; continue; } \ - createRight; \ - } \ - else \ - if (code < after - before) \ - { \ - node -> under += update; \ - if (node -> left) { node += node -> left; continue; } \ - createLeft; \ - } \ - else \ - { \ - value_ = node -> value; \ - count_ += node -> count; \ - under_ = after - before; \ - node -> under += update; \ - node -> count += update; \ - symbol_ = node; \ - } \ - break; \ - } \ - } \ -} - -#define ENET_CONTEXT_TRY_DECODE(context, symbol_, code, value_, under_, count_, update, minimum, exclude) \ -ENET_CONTEXT_DECODE (context, symbol_, code, value_, under_, count_, update, minimum, return 0, exclude (node -> value, after, before), return 0, return 0) - -#define ENET_CONTEXT_ROOT_DECODE(context, symbol_, code, value_, under_, count_, update, minimum, exclude) \ -ENET_CONTEXT_DECODE (context, symbol_, code, value_, under_, count_, update, minimum, \ - { \ - value_ = code / minimum; \ - under_ = code - code%minimum; \ - ENET_SYMBOL_CREATE (symbol_, value_, update); \ - (context) -> symbols = symbol_ - (context); \ - }, \ - exclude (node -> value, after, before), \ - { \ - value_ = node->value + 1 + (code - after)/minimum; \ - under_ = code - (code - after)%minimum; \ - ENET_SYMBOL_CREATE (symbol_, value_, update); \ - node -> right = symbol_ - node; \ - }, \ - { \ - value_ = node->value - 1 - (after - before - code - 1)/minimum; \ - under_ = code - (after - before - code - 1)%minimum; \ - ENET_SYMBOL_CREATE (symbol_, value_, update); \ - node -> left = symbol_ - node; \ - }) \ - -#ifdef ENET_CONTEXT_EXCLUSION -typedef struct _ENetExclude -{ - enet_uint8 value; - enet_uint16 under; -} ENetExclude; - -#define ENET_CONTEXT_DECODE_EXCLUDE(context, total, minimum) \ -{ \ - enet_uint16 under = 0; \ - nextExclude = excludes; \ - ENET_CONTEXT_WALK (context, { \ - under += rangeCoder -> symbols [node -> parent].count + minimum; \ - nextExclude -> value = node -> value; \ - nextExclude -> under = under; \ - nextExclude ++; \ - }); \ - total -= under; \ -} - -#define ENET_CONTEXT_EXCLUDED(value_, after, before) \ -{ \ - size_t low = 0, high = nextExclude - excludes; \ - for(;;) \ - { \ - size_t mid = (low + high) >> 1; \ - const ENetExclude * exclude = & excludes [mid]; \ - if (value_ < exclude -> value) \ - { \ - if (low + 1 < high) \ - { \ - high = mid; \ - continue; \ - } \ - if (exclude > excludes) \ - after -= exclude [-1].under; \ - } \ - else \ - { \ - if (value_ > exclude -> value) \ - { \ - if (low + 1 < high) \ - { \ - low = mid; \ - continue; \ - } \ - } \ - else \ - before = 0; \ - after -= exclude -> under; \ - } \ - break; \ - } \ -} -#endif - -#define ENET_CONTEXT_NOT_EXCLUDED(value_, after, before) - -size_t -enet_range_coder_decompress (void * context, const enet_uint8 * inData, size_t inLimit, enet_uint8 * outData, size_t outLimit) -{ - ENetRangeCoder * rangeCoder = (ENetRangeCoder *) context; - enet_uint8 * outStart = outData, * outEnd = & outData [outLimit]; - const enet_uint8 * inEnd = & inData [inLimit]; - enet_uint32 decodeLow = 0, decodeCode = 0, decodeRange = ~0; - ENetSymbol * root; - enet_uint16 predicted = 0; - size_t order = 0, nextSymbol = 0; -#ifdef ENET_CONTEXT_EXCLUSION - ENetExclude excludes [256]; - ENetExclude * nextExclude = excludes; -#endif - - if (rangeCoder == NULL || inLimit <= 0) - return 0; - - ENET_CONTEXT_CREATE (root, ENET_CONTEXT_ESCAPE_MINIMUM, ENET_CONTEXT_SYMBOL_MINIMUM); - - ENET_RANGE_CODER_SEED; - - for (;;) - { - ENetSymbol * subcontext, * symbol, * patch; -#ifdef ENET_CONTEXT_EXCLUSION - const ENetSymbol * childContext = & emptyContext; -#endif - enet_uint8 value = 0; - enet_uint16 code, under, count, bottom, * parent = & predicted, total; - - for (subcontext = & rangeCoder -> symbols [predicted]; - subcontext != root; -#ifdef ENET_CONTEXT_EXCLUSION - childContext = subcontext, -#endif - subcontext = & rangeCoder -> symbols [subcontext -> parent]) - { - if (subcontext -> escapes <= 0) - continue; - total = subcontext -> total; -#ifdef ENET_CONTEXT_EXCLUSION - if (childContext -> total > 0) - ENET_CONTEXT_DECODE_EXCLUDE (childContext, total, 0); -#endif - if (subcontext -> escapes >= total) - continue; - code = ENET_RANGE_CODER_READ (total); - if (code < subcontext -> escapes) - { - ENET_RANGE_CODER_DECODE (0, subcontext -> escapes, total); - continue; - } - code -= subcontext -> escapes; -#ifdef ENET_CONTEXT_EXCLUSION - if (childContext -> total > 0) - { - ENET_CONTEXT_TRY_DECODE (subcontext, symbol, code, value, under, count, ENET_SUBCONTEXT_SYMBOL_DELTA, 0, ENET_CONTEXT_EXCLUDED); - } - else -#endif - { - ENET_CONTEXT_TRY_DECODE (subcontext, symbol, code, value, under, count, ENET_SUBCONTEXT_SYMBOL_DELTA, 0, ENET_CONTEXT_NOT_EXCLUDED); - } - bottom = symbol - rangeCoder -> symbols; - ENET_RANGE_CODER_DECODE (subcontext -> escapes + under, count, total); - subcontext -> total += ENET_SUBCONTEXT_SYMBOL_DELTA; - if (count > 0xFF - 2*ENET_SUBCONTEXT_SYMBOL_DELTA || subcontext -> total > ENET_RANGE_CODER_BOTTOM - 0x100) - ENET_CONTEXT_RESCALE (subcontext, 0); - goto patchContexts; - } - - total = root -> total; -#ifdef ENET_CONTEXT_EXCLUSION - if (childContext -> total > 0) - ENET_CONTEXT_DECODE_EXCLUDE (childContext, total, ENET_CONTEXT_SYMBOL_MINIMUM); -#endif - code = ENET_RANGE_CODER_READ (total); - if (code < root -> escapes) - { - ENET_RANGE_CODER_DECODE (0, root -> escapes, total); - break; - } - code -= root -> escapes; -#ifdef ENET_CONTEXT_EXCLUSION - if (childContext -> total > 0) - { - ENET_CONTEXT_ROOT_DECODE (root, symbol, code, value, under, count, ENET_CONTEXT_SYMBOL_DELTA, ENET_CONTEXT_SYMBOL_MINIMUM, ENET_CONTEXT_EXCLUDED); - } - else -#endif - { - ENET_CONTEXT_ROOT_DECODE (root, symbol, code, value, under, count, ENET_CONTEXT_SYMBOL_DELTA, ENET_CONTEXT_SYMBOL_MINIMUM, ENET_CONTEXT_NOT_EXCLUDED); - } - bottom = symbol - rangeCoder -> symbols; - ENET_RANGE_CODER_DECODE (root -> escapes + under, count, total); - root -> total += ENET_CONTEXT_SYMBOL_DELTA; - if (count > 0xFF - 2*ENET_CONTEXT_SYMBOL_DELTA + ENET_CONTEXT_SYMBOL_MINIMUM || root -> total > ENET_RANGE_CODER_BOTTOM - 0x100) - ENET_CONTEXT_RESCALE (root, ENET_CONTEXT_SYMBOL_MINIMUM); - - patchContexts: - for (patch = & rangeCoder -> symbols [predicted]; - patch != subcontext; - patch = & rangeCoder -> symbols [patch -> parent]) - { - ENET_CONTEXT_ENCODE (patch, symbol, value, under, count, ENET_SUBCONTEXT_SYMBOL_DELTA, 0); - * parent = symbol - rangeCoder -> symbols; - parent = & symbol -> parent; - if (count <= 0) - { - patch -> escapes += ENET_SUBCONTEXT_ESCAPE_DELTA; - patch -> total += ENET_SUBCONTEXT_ESCAPE_DELTA; - } - patch -> total += ENET_SUBCONTEXT_SYMBOL_DELTA; - if (count > 0xFF - 2*ENET_SUBCONTEXT_SYMBOL_DELTA || patch -> total > ENET_RANGE_CODER_BOTTOM - 0x100) - ENET_CONTEXT_RESCALE (patch, 0); - } - * parent = bottom; - - ENET_RANGE_CODER_OUTPUT (value); - - if (order >= ENET_SUBCONTEXT_ORDER) - predicted = rangeCoder -> symbols [predicted].parent; - else - order ++; - ENET_RANGE_CODER_FREE_SYMBOLS; - } - - return (size_t) (outData - outStart); -} - -/** @defgroup host ENet host functions - @{ -*/ - -/** Sets the packet compressor the host should use to the default range coder. - @param host host to enable the range coder for - @returns 0 on success, < 0 on failure -*/ -int -enet_host_compress_with_range_coder (ENetHost * host) -{ - ENetCompressor compressor; - memset (& compressor, 0, sizeof (compressor)); - compressor.context = enet_range_coder_create(); - if (compressor.context == NULL) - return -1; - compressor.compress = enet_range_coder_compress; - compressor.decompress = enet_range_coder_decompress; - compressor.destroy = enet_range_coder_destroy; - enet_host_compress (host, & compressor); - return 0; -} - -/** @} */ - - diff --git a/polymer-perf/eduke32/source/enet/src/host.c b/polymer-perf/eduke32/source/enet/src/host.c deleted file mode 100644 index 8bb2433fe..000000000 --- a/polymer-perf/eduke32/source/enet/src/host.c +++ /dev/null @@ -1,479 +0,0 @@ -/** - @file host.c - @brief ENet host management functions -*/ -#define ENET_BUILDING_LIB 1 -#include -#include -#include "enet/enet.h" - -/** @defgroup host ENet host functions - @{ -*/ - -/** Creates a host for communicating to peers. - - @param address the address at which other peers may connect to this host. If NULL, then no peers may connect to the host. - @param peerCount the maximum number of peers that should be allocated for the host. - @param channelLimit the maximum number of channels allowed; if 0, then this is equivalent to ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT - @param incomingBandwidth downstream bandwidth of the host in bytes/second; if 0, ENet will assume unlimited bandwidth. - @param outgoingBandwidth upstream bandwidth of the host in bytes/second; if 0, ENet will assume unlimited bandwidth. - - @returns the host on success and NULL on failure - - @remarks ENet will strategically drop packets on specific sides of a connection between hosts - to ensure the host's bandwidth is not overwhelmed. The bandwidth parameters also determine - the window size of a connection which limits the amount of reliable packets that may be in transit - at any given time. -*/ -ENetHost * -enet_host_create (const ENetAddress * address, size_t peerCount, size_t channelLimit, enet_uint32 incomingBandwidth, enet_uint32 outgoingBandwidth) -{ - ENetHost * host; - ENetPeer * currentPeer; - - if (peerCount > ENET_PROTOCOL_MAXIMUM_PEER_ID) - return NULL; - - host = (ENetHost *) enet_malloc (sizeof (ENetHost)); - if (host == NULL) - return NULL; - - host -> peers = (ENetPeer *) enet_malloc (peerCount * sizeof (ENetPeer)); - if (host -> peers == NULL) - { - enet_free (host); - - return NULL; - } - memset (host -> peers, 0, peerCount * sizeof (ENetPeer)); - - host -> socket = enet_socket_create (ENET_SOCKET_TYPE_DATAGRAM); - if (host -> socket == ENET_SOCKET_NULL || (address != NULL && enet_socket_bind (host -> socket, address) < 0)) - { - if (host -> socket != ENET_SOCKET_NULL) - enet_socket_destroy (host -> socket); - - enet_free (host -> peers); - enet_free (host); - - return NULL; - } - - enet_socket_set_option (host -> socket, ENET_SOCKOPT_NONBLOCK, 1); - enet_socket_set_option (host -> socket, ENET_SOCKOPT_BROADCAST, 1); - enet_socket_set_option (host -> socket, ENET_SOCKOPT_RCVBUF, ENET_HOST_RECEIVE_BUFFER_SIZE); - enet_socket_set_option (host -> socket, ENET_SOCKOPT_SNDBUF, ENET_HOST_SEND_BUFFER_SIZE); - - if (address != NULL) - host -> address = * address; - - if (! channelLimit || channelLimit > ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT) - channelLimit = ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT; - else - if (channelLimit < ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT) - channelLimit = ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT; - - host -> randomSeed = (enet_uint32) time(NULL) + (enet_uint32) (size_t) host; - host -> randomSeed = (host -> randomSeed << 16) | (host -> randomSeed >> 16); - host -> channelLimit = channelLimit; - host -> incomingBandwidth = incomingBandwidth; - host -> outgoingBandwidth = outgoingBandwidth; - host -> bandwidthThrottleEpoch = 0; - host -> recalculateBandwidthLimits = 0; - host -> mtu = ENET_HOST_DEFAULT_MTU; - host -> peerCount = peerCount; - host -> commandCount = 0; - host -> bufferCount = 0; - host -> checksum = NULL; - host -> receivedAddress.host = ENET_HOST_ANY; - host -> receivedAddress.port = 0; - host -> receivedData = NULL; - host -> receivedDataLength = 0; - - host -> totalSentData = 0; - host -> totalSentPackets = 0; - host -> totalReceivedData = 0; - host -> totalReceivedPackets = 0; - - host -> compressor.context = NULL; - host -> compressor.compress = NULL; - host -> compressor.decompress = NULL; - host -> compressor.destroy = NULL; - - enet_list_clear (& host -> dispatchQueue); - - for (currentPeer = host -> peers; - currentPeer < & host -> peers [host -> peerCount]; - ++ currentPeer) - { - currentPeer -> host = host; - currentPeer -> incomingPeerID = currentPeer - host -> peers; - currentPeer -> outgoingSessionID = currentPeer -> incomingSessionID = 0xFF; - currentPeer -> data = NULL; - - enet_list_clear (& currentPeer -> acknowledgements); - enet_list_clear (& currentPeer -> sentReliableCommands); - enet_list_clear (& currentPeer -> sentUnreliableCommands); - enet_list_clear (& currentPeer -> outgoingReliableCommands); - enet_list_clear (& currentPeer -> outgoingUnreliableCommands); - enet_list_clear (& currentPeer -> dispatchedCommands); - - enet_peer_reset (currentPeer); - } - - return host; -} - -/** Destroys the host and all resources associated with it. - @param host pointer to the host to destroy -*/ -void -enet_host_destroy (ENetHost * host) -{ - ENetPeer * currentPeer; - - enet_socket_destroy (host -> socket); - - for (currentPeer = host -> peers; - currentPeer < & host -> peers [host -> peerCount]; - ++ currentPeer) - { - enet_peer_reset (currentPeer); - } - - if (host -> compressor.context != NULL && host -> compressor.destroy) - (* host -> compressor.destroy) (host -> compressor.context); - - enet_free (host -> peers); - enet_free (host); -} - -/** Initiates a connection to a foreign host. - @param host host seeking the connection - @param address destination for the connection - @param channelCount number of channels to allocate - @param data user data supplied to the receiving host - @returns a peer representing the foreign host on success, NULL on failure - @remarks The peer returned will have not completed the connection until enet_host_service() - notifies of an ENET_EVENT_TYPE_CONNECT event for the peer. -*/ -ENetPeer * -enet_host_connect (ENetHost * host, const ENetAddress * address, size_t channelCount, enet_uint32 data) -{ - ENetPeer * currentPeer; - ENetChannel * channel; - ENetProtocol command; - - if (channelCount < ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT) - channelCount = ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT; - else - if (channelCount > ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT) - channelCount = ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT; - - for (currentPeer = host -> peers; - currentPeer < & host -> peers [host -> peerCount]; - ++ currentPeer) - { - if (currentPeer -> state == ENET_PEER_STATE_DISCONNECTED) - break; - } - - if (currentPeer >= & host -> peers [host -> peerCount]) - return NULL; - - currentPeer -> channels = (ENetChannel *) enet_malloc (channelCount * sizeof (ENetChannel)); - if (currentPeer -> channels == NULL) - return NULL; - currentPeer -> channelCount = channelCount; - currentPeer -> state = ENET_PEER_STATE_CONNECTING; - currentPeer -> address = * address; - currentPeer -> connectID = ++ host -> randomSeed; - - if (host -> outgoingBandwidth == 0) - currentPeer -> windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; - else - currentPeer -> windowSize = (host -> outgoingBandwidth / - ENET_PEER_WINDOW_SIZE_SCALE) * - ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; - - if (currentPeer -> windowSize < ENET_PROTOCOL_MINIMUM_WINDOW_SIZE) - currentPeer -> windowSize = ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; - else - if (currentPeer -> windowSize > ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE) - currentPeer -> windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; - - for (channel = currentPeer -> channels; - channel < & currentPeer -> channels [channelCount]; - ++ channel) - { - channel -> outgoingReliableSequenceNumber = 0; - channel -> outgoingUnreliableSequenceNumber = 0; - channel -> incomingReliableSequenceNumber = 0; - - enet_list_clear (& channel -> incomingReliableCommands); - enet_list_clear (& channel -> incomingUnreliableCommands); - - channel -> usedReliableWindows = 0; - memset (channel -> reliableWindows, 0, sizeof (channel -> reliableWindows)); - } - - command.header.command = ENET_PROTOCOL_COMMAND_CONNECT | ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE; - command.header.channelID = 0xFF; - command.connect.outgoingPeerID = ENET_HOST_TO_NET_16 (currentPeer -> incomingPeerID); - command.connect.incomingSessionID = currentPeer -> incomingSessionID; - command.connect.outgoingSessionID = currentPeer -> outgoingSessionID; - command.connect.mtu = ENET_HOST_TO_NET_32 (currentPeer -> mtu); - command.connect.windowSize = ENET_HOST_TO_NET_32 (currentPeer -> windowSize); - command.connect.channelCount = ENET_HOST_TO_NET_32 (channelCount); - command.connect.incomingBandwidth = ENET_HOST_TO_NET_32 (host -> incomingBandwidth); - command.connect.outgoingBandwidth = ENET_HOST_TO_NET_32 (host -> outgoingBandwidth); - command.connect.packetThrottleInterval = ENET_HOST_TO_NET_32 (currentPeer -> packetThrottleInterval); - command.connect.packetThrottleAcceleration = ENET_HOST_TO_NET_32 (currentPeer -> packetThrottleAcceleration); - command.connect.packetThrottleDeceleration = ENET_HOST_TO_NET_32 (currentPeer -> packetThrottleDeceleration); - command.connect.connectID = currentPeer -> connectID; - command.connect.data = ENET_HOST_TO_NET_32 (data); - - enet_peer_queue_outgoing_command (currentPeer, & command, NULL, 0, 0); - - return currentPeer; -} - -/** Queues a packet to be sent to all peers associated with the host. - @param host host on which to broadcast the packet - @param channelID channel on which to broadcast - @param packet packet to broadcast -*/ -void -enet_host_broadcast (ENetHost * host, enet_uint8 channelID, ENetPacket * packet) -{ - ENetPeer * currentPeer; - - for (currentPeer = host -> peers; - currentPeer < & host -> peers [host -> peerCount]; - ++ currentPeer) - { - if (currentPeer -> state != ENET_PEER_STATE_CONNECTED) - continue; - - enet_peer_send (currentPeer, channelID, packet); - } - - if (packet -> referenceCount == 0) - enet_packet_destroy (packet); -} - -/** Sets the packet compressor the host should use to compress and decompress packets. - @param host host to enable or disable compression for - @param compressor callbacks for for the packet compressor; if NULL, then compression is disabled -*/ -void -enet_host_compress (ENetHost * host, const ENetCompressor * compressor) -{ - if (host -> compressor.context != NULL && host -> compressor.destroy) - (* host -> compressor.destroy) (host -> compressor.context); - - if (compressor) - host -> compressor = * compressor; - else - host -> compressor.context = NULL; -} - -/** Limits the maximum allowed channels of future incoming connections. - @param host host to limit - @param channelLimit the maximum number of channels allowed; if 0, then this is equivalent to ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT -*/ -void -enet_host_channel_limit (ENetHost * host, size_t channelLimit) -{ - if (! channelLimit || channelLimit > ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT) - channelLimit = ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT; - else - if (channelLimit < ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT) - channelLimit = ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT; - - host -> channelLimit = channelLimit; -} - - -/** Adjusts the bandwidth limits of a host. - @param host host to adjust - @param incomingBandwidth new incoming bandwidth - @param outgoingBandwidth new outgoing bandwidth - @remarks the incoming and outgoing bandwidth parameters are identical in function to those - specified in enet_host_create(). -*/ -void -enet_host_bandwidth_limit (ENetHost * host, enet_uint32 incomingBandwidth, enet_uint32 outgoingBandwidth) -{ - host -> incomingBandwidth = incomingBandwidth; - host -> outgoingBandwidth = outgoingBandwidth; - host -> recalculateBandwidthLimits = 1; -} - -void -enet_host_bandwidth_throttle (ENetHost * host) -{ - enet_uint32 timeCurrent = enet_time_get (), - elapsedTime = timeCurrent - host -> bandwidthThrottleEpoch, - peersTotal = 0, - dataTotal = 0, - peersRemaining, - bandwidth, - throttle = 0, - bandwidthLimit = 0; - int needsAdjustment; - ENetPeer * peer; - ENetProtocol command; - - if (elapsedTime < ENET_HOST_BANDWIDTH_THROTTLE_INTERVAL) - return; - - for (peer = host -> peers; - peer < & host -> peers [host -> peerCount]; - ++ peer) - { - if (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) - continue; - - ++ peersTotal; - dataTotal += peer -> outgoingDataTotal; - } - - if (peersTotal == 0) - return; - - peersRemaining = peersTotal; - needsAdjustment = 1; - - if (host -> outgoingBandwidth == 0) - bandwidth = ~0; - else - bandwidth = (host -> outgoingBandwidth * elapsedTime) / 1000; - - while (peersRemaining > 0 && needsAdjustment != 0) - { - needsAdjustment = 0; - - if (dataTotal < bandwidth) - throttle = ENET_PEER_PACKET_THROTTLE_SCALE; - else - throttle = (bandwidth * ENET_PEER_PACKET_THROTTLE_SCALE) / dataTotal; - - for (peer = host -> peers; - peer < & host -> peers [host -> peerCount]; - ++ peer) - { - enet_uint32 peerBandwidth; - - if ((peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) || - peer -> incomingBandwidth == 0 || - peer -> outgoingBandwidthThrottleEpoch == timeCurrent) - continue; - - peerBandwidth = (peer -> incomingBandwidth * elapsedTime) / 1000; - if ((throttle * peer -> outgoingDataTotal) / ENET_PEER_PACKET_THROTTLE_SCALE <= peerBandwidth) - continue; - - peer -> packetThrottleLimit = (peerBandwidth * - ENET_PEER_PACKET_THROTTLE_SCALE) / peer -> outgoingDataTotal; - - if (peer -> packetThrottleLimit == 0) - peer -> packetThrottleLimit = 1; - - if (peer -> packetThrottle > peer -> packetThrottleLimit) - peer -> packetThrottle = peer -> packetThrottleLimit; - - peer -> outgoingBandwidthThrottleEpoch = timeCurrent; - - - needsAdjustment = 1; - -- peersRemaining; - bandwidth -= peerBandwidth; - dataTotal -= peerBandwidth; - } - } - - if (peersRemaining > 0) - for (peer = host -> peers; - peer < & host -> peers [host -> peerCount]; - ++ peer) - { - if ((peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) || - peer -> outgoingBandwidthThrottleEpoch == timeCurrent) - continue; - - peer -> packetThrottleLimit = throttle; - - if (peer -> packetThrottle > peer -> packetThrottleLimit) - peer -> packetThrottle = peer -> packetThrottleLimit; - } - - if (host -> recalculateBandwidthLimits) - { - host -> recalculateBandwidthLimits = 0; - - peersRemaining = peersTotal; - bandwidth = host -> incomingBandwidth; - needsAdjustment = 1; - - if (bandwidth == 0) - bandwidthLimit = 0; - else - while (peersRemaining > 0 && needsAdjustment != 0) - { - needsAdjustment = 0; - bandwidthLimit = bandwidth / peersRemaining; - - for (peer = host -> peers; - peer < & host -> peers [host -> peerCount]; - ++ peer) - { - if ((peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) || - peer -> incomingBandwidthThrottleEpoch == timeCurrent) - continue; - - if (peer -> outgoingBandwidth > 0 && - peer -> outgoingBandwidth >= bandwidthLimit) - continue; - - peer -> incomingBandwidthThrottleEpoch = timeCurrent; - - needsAdjustment = 1; - -- peersRemaining; - bandwidth -= peer -> outgoingBandwidth; - } - } - - for (peer = host -> peers; - peer < & host -> peers [host -> peerCount]; - ++ peer) - { - if (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) - continue; - - command.header.command = ENET_PROTOCOL_COMMAND_BANDWIDTH_LIMIT | ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE; - command.header.channelID = 0xFF; - command.bandwidthLimit.outgoingBandwidth = ENET_HOST_TO_NET_32 (host -> outgoingBandwidth); - - if (peer -> incomingBandwidthThrottleEpoch == timeCurrent) - command.bandwidthLimit.incomingBandwidth = ENET_HOST_TO_NET_32 (peer -> outgoingBandwidth); - else - command.bandwidthLimit.incomingBandwidth = ENET_HOST_TO_NET_32 (bandwidthLimit); - - enet_peer_queue_outgoing_command (peer, & command, NULL, 0, 0); - } - } - - host -> bandwidthThrottleEpoch = timeCurrent; - - for (peer = host -> peers; - peer < & host -> peers [host -> peerCount]; - ++ peer) - { - peer -> incomingDataTotal = 0; - peer -> outgoingDataTotal = 0; - } -} - -/** @} */ diff --git a/polymer-perf/eduke32/source/enet/src/list.c b/polymer-perf/eduke32/source/enet/src/list.c deleted file mode 100644 index 1c1a8dfaa..000000000 --- a/polymer-perf/eduke32/source/enet/src/list.c +++ /dev/null @@ -1,75 +0,0 @@ -/** - @file list.c - @brief ENet linked list functions -*/ -#define ENET_BUILDING_LIB 1 -#include "enet/enet.h" - -/** - @defgroup list ENet linked list utility functions - @ingroup private - @{ -*/ -void -enet_list_clear (ENetList * list) -{ - list -> sentinel.next = & list -> sentinel; - list -> sentinel.previous = & list -> sentinel; -} - -ENetListIterator -enet_list_insert (ENetListIterator position, void * data) -{ - ENetListIterator result = (ENetListIterator) data; - - result -> previous = position -> previous; - result -> next = position; - - result -> previous -> next = result; - position -> previous = result; - - return result; -} - -void * -enet_list_remove (ENetListIterator position) -{ - position -> previous -> next = position -> next; - position -> next -> previous = position -> previous; - - return position; -} - -ENetListIterator -enet_list_move (ENetListIterator position, void * dataFirst, void * dataLast) -{ - ENetListIterator first = (ENetListIterator) dataFirst, - last = (ENetListIterator) dataLast; - - first -> previous -> next = last -> next; - last -> next -> previous = first -> previous; - - first -> previous = position -> previous; - last -> next = position; - - first -> previous -> next = first; - position -> previous = last; - - return first; -} - -size_t -enet_list_size (ENetList * list) -{ - size_t size = 0; - ENetListIterator position; - - for (position = enet_list_begin (list); - position != enet_list_end (list); - position = enet_list_next (position)) - ++ size; - - return size; -} - -/** @} */ diff --git a/polymer-perf/eduke32/source/enet/src/packet.c b/polymer-perf/eduke32/source/enet/src/packet.c deleted file mode 100644 index 2fc9a10e8..000000000 --- a/polymer-perf/eduke32/source/enet/src/packet.c +++ /dev/null @@ -1,157 +0,0 @@ -/** - @file packet.c - @brief ENet packet management functions -*/ -#include -#define ENET_BUILDING_LIB 1 -#include "enet/enet.h" - -/** @defgroup Packet ENet packet functions - @{ -*/ - -/** Creates a packet that may be sent to a peer. - @param dataContents initial contents of the packet's data; the packet's data will remain uninitialized if dataContents is NULL. - @param dataLength size of the data allocated for this packet - @param flags flags for this packet as described for the ENetPacket structure. - @returns the packet on success, NULL on failure -*/ -ENetPacket * -enet_packet_create (const void * data, size_t dataLength, enet_uint32 flags) -{ - ENetPacket * packet = (ENetPacket *) enet_malloc (sizeof (ENetPacket)); - if (packet == NULL) - return NULL; - - if (flags & ENET_PACKET_FLAG_NO_ALLOCATE) - packet -> data = (enet_uint8 *) data; - else - { - packet -> data = (enet_uint8 *) enet_malloc (dataLength); - if (packet -> data == NULL) - { - enet_free (packet); - return NULL; - } - - if (data != NULL) - memcpy (packet -> data, data, dataLength); - } - - packet -> referenceCount = 0; - packet -> flags = flags; - packet -> dataLength = dataLength; - packet -> freeCallback = NULL; - - return packet; -} - -/** Destroys the packet and deallocates its data. - @param packet packet to be destroyed -*/ -void -enet_packet_destroy (ENetPacket * packet) -{ - if (packet -> freeCallback != NULL) - (* packet -> freeCallback) (packet); - if (! (packet -> flags & ENET_PACKET_FLAG_NO_ALLOCATE)) - enet_free (packet -> data); - enet_free (packet); -} - -/** Attempts to resize the data in the packet to length specified in the - dataLength parameter - @param packet packet to resize - @param dataLength new size for the packet data - @returns 0 on success, < 0 on failure -*/ -int -enet_packet_resize (ENetPacket * packet, size_t dataLength) -{ - enet_uint8 * newData; - - if (dataLength <= packet -> dataLength || (packet -> flags & ENET_PACKET_FLAG_NO_ALLOCATE)) - { - packet -> dataLength = dataLength; - - return 0; - } - - newData = (enet_uint8 *) enet_malloc (dataLength); - if (newData == NULL) - return -1; - - memcpy (newData, packet -> data, packet -> dataLength); - enet_free (packet -> data); - - packet -> data = newData; - packet -> dataLength = dataLength; - - return 0; -} - -static int initializedCRC32 = 0; -static enet_uint32 crcTable [256]; - -static enet_uint32 -reflect_crc (int val, int bits) -{ - int result = 0, bit; - - for (bit = 0; bit < bits; bit ++) - { - if(val & 1) result |= 1 << (bits - 1 - bit); - val >>= 1; - } - - return result; -} - -static void -initialize_crc32 () -{ - int byte; - - for (byte = 0; byte < 256; ++ byte) - { - enet_uint32 crc = reflect_crc (byte, 8) << 24; - int offset; - - for(offset = 0; offset < 8; ++ offset) - { - if (crc & 0x80000000) - crc = (crc << 1) ^ 0x04c11db7; - else - crc <<= 1; - } - - crcTable [byte] = reflect_crc (crc, 32); - } - - initializedCRC32 = 1; -} - -enet_uint32 -enet_crc32 (const ENetBuffer * buffers, size_t bufferCount) -{ - enet_uint32 crc = 0xFFFFFFFF; - - if (! initializedCRC32) initialize_crc32 (); - - while (bufferCount -- > 0) - { - const enet_uint8 * data = (const enet_uint8 *) buffers -> data, - * dataEnd = & data [buffers -> dataLength]; - - while (data < dataEnd) - { - crc = (crc >> 8) ^ crcTable [(crc & 0xFF) ^ *data++]; - } - - ++ buffers; - } - - return ENET_HOST_TO_NET_32 (~ crc); -} - -/** @} */ diff --git a/polymer-perf/eduke32/source/enet/src/peer.c b/polymer-perf/eduke32/source/enet/src/peer.c deleted file mode 100644 index e1c117f89..000000000 --- a/polymer-perf/eduke32/source/enet/src/peer.c +++ /dev/null @@ -1,818 +0,0 @@ -/** - @file peer.c - @brief ENet peer management functions -*/ -#include -#define ENET_BUILDING_LIB 1 -#include "enet/enet.h" - -/** @defgroup peer ENet peer functions - @{ -*/ - -/** Configures throttle parameter for a peer. - - Unreliable packets are dropped by ENet in response to the varying conditions - of the Internet connection to the peer. The throttle represents a probability - that an unreliable packet should not be dropped and thus sent by ENet to the peer. - The lowest mean round trip time from the sending of a reliable packet to the - receipt of its acknowledgement is measured over an amount of time specified by - the interval parameter in milliseconds. If a measured round trip time happens to - be significantly less than the mean round trip time measured over the interval, - then the throttle probability is increased to allow more traffic by an amount - specified in the acceleration parameter, which is a ratio to the ENET_PEER_PACKET_THROTTLE_SCALE - constant. If a measured round trip time happens to be significantly greater than - the mean round trip time measured over the interval, then the throttle probability - is decreased to limit traffic by an amount specified in the deceleration parameter, which - is a ratio to the ENET_PEER_PACKET_THROTTLE_SCALE constant. When the throttle has - a value of ENET_PEER_PACKET_THROTTLE_SCALE, on unreliable packets are dropped by - ENet, and so 100% of all unreliable packets will be sent. When the throttle has a - value of 0, all unreliable packets are dropped by ENet, and so 0% of all unreliable - packets will be sent. Intermediate values for the throttle represent intermediate - probabilities between 0% and 100% of unreliable packets being sent. The bandwidth - limits of the local and foreign hosts are taken into account to determine a - sensible limit for the throttle probability above which it should not raise even in - the best of conditions. - - @param peer peer to configure - @param interval interval, in milliseconds, over which to measure lowest mean RTT; the default value is ENET_PEER_PACKET_THROTTLE_INTERVAL. - @param acceleration rate at which to increase the throttle probability as mean RTT declines - @param deceleration rate at which to decrease the throttle probability as mean RTT increases -*/ -void -enet_peer_throttle_configure (ENetPeer * peer, enet_uint32 interval, enet_uint32 acceleration, enet_uint32 deceleration) -{ - ENetProtocol command; - - peer -> packetThrottleInterval = interval; - peer -> packetThrottleAcceleration = acceleration; - peer -> packetThrottleDeceleration = deceleration; - - command.header.command = ENET_PROTOCOL_COMMAND_THROTTLE_CONFIGURE | ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE; - command.header.channelID = 0xFF; - - command.throttleConfigure.packetThrottleInterval = ENET_HOST_TO_NET_32 (interval); - command.throttleConfigure.packetThrottleAcceleration = ENET_HOST_TO_NET_32 (acceleration); - command.throttleConfigure.packetThrottleDeceleration = ENET_HOST_TO_NET_32 (deceleration); - - enet_peer_queue_outgoing_command (peer, & command, NULL, 0, 0); -} - -int -enet_peer_throttle (ENetPeer * peer, enet_uint32 rtt) -{ - if (peer -> lastRoundTripTime <= peer -> lastRoundTripTimeVariance) - { - peer -> packetThrottle = peer -> packetThrottleLimit; - } - else - if (rtt < peer -> lastRoundTripTime) - { - peer -> packetThrottle += peer -> packetThrottleAcceleration; - - if (peer -> packetThrottle > peer -> packetThrottleLimit) - peer -> packetThrottle = peer -> packetThrottleLimit; - - return 1; - } - else - if (rtt > peer -> lastRoundTripTime + 2 * peer -> lastRoundTripTimeVariance) - { - if (peer -> packetThrottle > peer -> packetThrottleDeceleration) - peer -> packetThrottle -= peer -> packetThrottleDeceleration; - else - peer -> packetThrottle = 0; - - return -1; - } - - return 0; -} - -/** Queues a packet to be sent. - @param peer destination for the packet - @param channelID channel on which to send - @param packet packet to send - @retval 0 on success - @retval < 0 on failure -*/ -int -enet_peer_send (ENetPeer * peer, enet_uint8 channelID, ENetPacket * packet) -{ - ENetChannel * channel = & peer -> channels [channelID]; - ENetProtocol command; - size_t fragmentLength; - - if (peer -> state != ENET_PEER_STATE_CONNECTED || - channelID >= peer -> channelCount) - return -1; - - fragmentLength = peer -> mtu - sizeof (ENetProtocolHeader) - sizeof (ENetProtocolSendFragment); - if (peer -> host -> checksum != NULL) - fragmentLength -= sizeof(enet_uint32); - - if (packet -> dataLength > fragmentLength) - { - enet_uint16 startSequenceNumber = ENET_HOST_TO_NET_16 (channel -> outgoingReliableSequenceNumber + 1); - enet_uint32 fragmentCount = ENET_HOST_TO_NET_32 ((packet -> dataLength + fragmentLength - 1) / fragmentLength), - fragmentNumber, - fragmentOffset; - ENetList fragments; - ENetOutgoingCommand * fragment; - - enet_list_clear (& fragments); - - for (fragmentNumber = 0, - fragmentOffset = 0; - fragmentOffset < packet -> dataLength; - ++ fragmentNumber, - fragmentOffset += fragmentLength) - { - if (packet -> dataLength - fragmentOffset < fragmentLength) - fragmentLength = packet -> dataLength - fragmentOffset; - - fragment = (ENetOutgoingCommand *) enet_malloc (sizeof (ENetOutgoingCommand)); - if (fragment == NULL) - { - while (! enet_list_empty (& fragments)) - { - fragment = (ENetOutgoingCommand *) enet_list_remove (enet_list_begin (& fragments)); - - enet_free (fragment); - } - - return -1; - } - - fragment -> fragmentOffset = fragmentOffset; - fragment -> fragmentLength = fragmentLength; - fragment -> packet = packet; - fragment -> command.header.command = ENET_PROTOCOL_COMMAND_SEND_FRAGMENT | ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE; - fragment -> command.header.channelID = channelID; - fragment -> command.sendFragment.startSequenceNumber = startSequenceNumber; - fragment -> command.sendFragment.dataLength = ENET_HOST_TO_NET_16 (fragmentLength); - fragment -> command.sendFragment.fragmentCount = fragmentCount; - fragment -> command.sendFragment.fragmentNumber = ENET_HOST_TO_NET_32 (fragmentNumber); - fragment -> command.sendFragment.totalLength = ENET_HOST_TO_NET_32 (packet -> dataLength); - fragment -> command.sendFragment.fragmentOffset = ENET_NET_TO_HOST_32 (fragmentOffset); - - enet_list_insert (enet_list_end (& fragments), fragment); - } - - packet -> referenceCount += fragmentNumber; - - while (! enet_list_empty (& fragments)) - { - fragment = (ENetOutgoingCommand *) enet_list_remove (enet_list_begin (& fragments)); - - enet_peer_setup_outgoing_command (peer, fragment); - } - - return 0; - } - - command.header.channelID = channelID; - - if (packet -> flags & ENET_PACKET_FLAG_RELIABLE) - { - command.header.command = ENET_PROTOCOL_COMMAND_SEND_RELIABLE | ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE; - command.sendReliable.dataLength = ENET_HOST_TO_NET_16 (packet -> dataLength); - } - else - if (packet -> flags & ENET_PACKET_FLAG_UNSEQUENCED) - { - command.header.command = ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED | ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED; - command.sendUnsequenced.unsequencedGroup = ENET_HOST_TO_NET_16 (peer -> outgoingUnsequencedGroup + 1); - command.sendUnsequenced.dataLength = ENET_HOST_TO_NET_16 (packet -> dataLength); - } - else - if (channel -> outgoingUnreliableSequenceNumber >= 0xFFFF) - { - command.header.command = ENET_PROTOCOL_COMMAND_SEND_RELIABLE | ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE; - command.sendReliable.dataLength = ENET_HOST_TO_NET_16 (packet -> dataLength); - } - else - { - command.header.command = ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE; - command.sendUnreliable.unreliableSequenceNumber = ENET_HOST_TO_NET_16 (channel -> outgoingUnreliableSequenceNumber + 1); - command.sendUnreliable.dataLength = ENET_HOST_TO_NET_16 (packet -> dataLength); - } - - if (enet_peer_queue_outgoing_command (peer, & command, packet, 0, packet -> dataLength) == NULL) - return -1; - - return 0; -} - -/** Attempts to dequeue any incoming queued packet. - @param peer peer to dequeue packets from - @param channelID holds the channel ID of the channel the packet was received on success - @returns a pointer to the packet, or NULL if there are no available incoming queued packets -*/ -ENetPacket * -enet_peer_receive (ENetPeer * peer, enet_uint8 * channelID) -{ - ENetIncomingCommand * incomingCommand; - ENetPacket * packet; - - if (enet_list_empty (& peer -> dispatchedCommands)) - return NULL; - - incomingCommand = (ENetIncomingCommand *) enet_list_remove (enet_list_begin (& peer -> dispatchedCommands)); - - if (channelID != NULL) - * channelID = incomingCommand -> command.header.channelID; - - packet = incomingCommand -> packet; - - -- packet -> referenceCount; - - if (incomingCommand -> fragments != NULL) - enet_free (incomingCommand -> fragments); - - enet_free (incomingCommand); - - return packet; -} - -static void -enet_peer_reset_outgoing_commands (ENetList * queue) -{ - ENetOutgoingCommand * outgoingCommand; - - while (! enet_list_empty (queue)) - { - outgoingCommand = (ENetOutgoingCommand *) enet_list_remove (enet_list_begin (queue)); - - if (outgoingCommand -> packet != NULL) - { - -- outgoingCommand -> packet -> referenceCount; - - if (outgoingCommand -> packet -> referenceCount == 0) - enet_packet_destroy (outgoingCommand -> packet); - } - - enet_free (outgoingCommand); - } -} - -static void -enet_peer_reset_incoming_commands (ENetList * queue) -{ - ENetIncomingCommand * incomingCommand; - - while (! enet_list_empty (queue)) - { - incomingCommand = (ENetIncomingCommand *) enet_list_remove (enet_list_begin (queue)); - - if (incomingCommand -> packet != NULL) - { - -- incomingCommand -> packet -> referenceCount; - - if (incomingCommand -> packet -> referenceCount == 0) - enet_packet_destroy (incomingCommand -> packet); - } - - if (incomingCommand -> fragments != NULL) - enet_free (incomingCommand -> fragments); - - enet_free (incomingCommand); - } -} - -void -enet_peer_reset_queues (ENetPeer * peer) -{ - ENetChannel * channel; - - if (peer -> needsDispatch) - { - enet_list_remove (& peer -> dispatchList); - - peer -> needsDispatch = 0; - } - - while (! enet_list_empty (& peer -> acknowledgements)) - enet_free (enet_list_remove (enet_list_begin (& peer -> acknowledgements))); - - enet_peer_reset_outgoing_commands (& peer -> sentReliableCommands); - enet_peer_reset_outgoing_commands (& peer -> sentUnreliableCommands); - enet_peer_reset_outgoing_commands (& peer -> outgoingReliableCommands); - enet_peer_reset_outgoing_commands (& peer -> outgoingUnreliableCommands); - enet_peer_reset_incoming_commands (& peer -> dispatchedCommands); - - if (peer -> channels != NULL && peer -> channelCount > 0) - { - for (channel = peer -> channels; - channel < & peer -> channels [peer -> channelCount]; - ++ channel) - { - enet_peer_reset_incoming_commands (& channel -> incomingReliableCommands); - enet_peer_reset_incoming_commands (& channel -> incomingUnreliableCommands); - } - - enet_free (peer -> channels); - } - - peer -> channels = NULL; - peer -> channelCount = 0; -} - -/** Forcefully disconnects a peer. - @param peer peer to forcefully disconnect - @remarks The foreign host represented by the peer is not notified of the disconnection and will timeout - on its connection to the local host. -*/ -void -enet_peer_reset (ENetPeer * peer) -{ - peer -> outgoingPeerID = ENET_PROTOCOL_MAXIMUM_PEER_ID; - peer -> connectID = 0; - - peer -> state = ENET_PEER_STATE_DISCONNECTED; - - peer -> incomingBandwidth = 0; - peer -> outgoingBandwidth = 0; - peer -> incomingBandwidthThrottleEpoch = 0; - peer -> outgoingBandwidthThrottleEpoch = 0; - peer -> incomingDataTotal = 0; - peer -> outgoingDataTotal = 0; - peer -> lastSendTime = 0; - peer -> lastReceiveTime = 0; - peer -> nextTimeout = 0; - peer -> earliestTimeout = 0; - peer -> packetLossEpoch = 0; - peer -> packetsSent = 0; - peer -> packetsLost = 0; - peer -> packetLoss = 0; - peer -> packetLossVariance = 0; - peer -> packetThrottle = ENET_PEER_DEFAULT_PACKET_THROTTLE; - peer -> packetThrottleLimit = ENET_PEER_PACKET_THROTTLE_SCALE; - peer -> packetThrottleCounter = 0; - peer -> packetThrottleEpoch = 0; - peer -> packetThrottleAcceleration = ENET_PEER_PACKET_THROTTLE_ACCELERATION; - peer -> packetThrottleDeceleration = ENET_PEER_PACKET_THROTTLE_DECELERATION; - peer -> packetThrottleInterval = ENET_PEER_PACKET_THROTTLE_INTERVAL; - peer -> lastRoundTripTime = ENET_PEER_DEFAULT_ROUND_TRIP_TIME; - peer -> lowestRoundTripTime = ENET_PEER_DEFAULT_ROUND_TRIP_TIME; - peer -> lastRoundTripTimeVariance = 0; - peer -> highestRoundTripTimeVariance = 0; - peer -> roundTripTime = ENET_PEER_DEFAULT_ROUND_TRIP_TIME; - peer -> roundTripTimeVariance = 0; - peer -> mtu = peer -> host -> mtu; - peer -> reliableDataInTransit = 0; - peer -> outgoingReliableSequenceNumber = 0; - peer -> windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; - peer -> incomingUnsequencedGroup = 0; - peer -> outgoingUnsequencedGroup = 0; - peer -> eventData = 0; - - memset (peer -> unsequencedWindow, 0, sizeof (peer -> unsequencedWindow)); - - enet_peer_reset_queues (peer); -} - -/** Sends a ping request to a peer. - @param peer destination for the ping request - @remarks ping requests factor into the mean round trip time as designated by the - roundTripTime field in the ENetPeer structure. Enet automatically pings all connected - peers at regular intervals, however, this function may be called to ensure more - frequent ping requests. -*/ -void -enet_peer_ping (ENetPeer * peer) -{ - ENetProtocol command; - - if (peer -> state != ENET_PEER_STATE_CONNECTED) - return; - - command.header.command = ENET_PROTOCOL_COMMAND_PING | ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE; - command.header.channelID = 0xFF; - - enet_peer_queue_outgoing_command (peer, & command, NULL, 0, 0); -} - -/** Force an immediate disconnection from a peer. - @param peer peer to disconnect - @param data data describing the disconnection - @remarks No ENET_EVENT_DISCONNECT event will be generated. The foreign peer is not - guarenteed to receive the disconnect notification, and is reset immediately upon - return from this function. -*/ -void -enet_peer_disconnect_now (ENetPeer * peer, enet_uint32 data) -{ - ENetProtocol command; - - if (peer -> state == ENET_PEER_STATE_DISCONNECTED) - return; - - if (peer -> state != ENET_PEER_STATE_ZOMBIE && - peer -> state != ENET_PEER_STATE_DISCONNECTING) - { - enet_peer_reset_queues (peer); - - command.header.command = ENET_PROTOCOL_COMMAND_DISCONNECT | ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED; - command.header.channelID = 0xFF; - command.disconnect.data = ENET_HOST_TO_NET_32 (data); - - enet_peer_queue_outgoing_command (peer, & command, NULL, 0, 0); - - enet_host_flush (peer -> host); - } - - enet_peer_reset (peer); -} - -/** Request a disconnection from a peer. - @param peer peer to request a disconnection - @param data data describing the disconnection - @remarks An ENET_EVENT_DISCONNECT event will be generated by enet_host_service() - once the disconnection is complete. -*/ -void -enet_peer_disconnect (ENetPeer * peer, enet_uint32 data) -{ - ENetProtocol command; - - if (peer -> state == ENET_PEER_STATE_DISCONNECTING || - peer -> state == ENET_PEER_STATE_DISCONNECTED || - peer -> state == ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT || - peer -> state == ENET_PEER_STATE_ZOMBIE) - return; - - enet_peer_reset_queues (peer); - - command.header.command = ENET_PROTOCOL_COMMAND_DISCONNECT; - command.header.channelID = 0xFF; - command.disconnect.data = ENET_HOST_TO_NET_32 (data); - - if (peer -> state == ENET_PEER_STATE_CONNECTED || peer -> state == ENET_PEER_STATE_DISCONNECT_LATER) - command.header.command |= ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE; - else - command.header.command |= ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED; - - enet_peer_queue_outgoing_command (peer, & command, NULL, 0, 0); - - if (peer -> state == ENET_PEER_STATE_CONNECTED || peer -> state == ENET_PEER_STATE_DISCONNECT_LATER) - peer -> state = ENET_PEER_STATE_DISCONNECTING; - else - { - enet_host_flush (peer -> host); - enet_peer_reset (peer); - } -} - -/** Request a disconnection from a peer, but only after all queued outgoing packets are sent. - @param peer peer to request a disconnection - @param data data describing the disconnection - @remarks An ENET_EVENT_DISCONNECT event will be generated by enet_host_service() - once the disconnection is complete. -*/ -void -enet_peer_disconnect_later (ENetPeer * peer, enet_uint32 data) -{ - if ((peer -> state == ENET_PEER_STATE_CONNECTED || peer -> state == ENET_PEER_STATE_DISCONNECT_LATER) && - ! (enet_list_empty (& peer -> outgoingReliableCommands) && - enet_list_empty (& peer -> outgoingUnreliableCommands) && - enet_list_empty (& peer -> sentReliableCommands))) - { - peer -> state = ENET_PEER_STATE_DISCONNECT_LATER; - peer -> eventData = data; - } - else - enet_peer_disconnect (peer, data); -} - -ENetAcknowledgement * -enet_peer_queue_acknowledgement (ENetPeer * peer, const ENetProtocol * command, enet_uint16 sentTime) -{ - ENetAcknowledgement * acknowledgement; - - if (command -> header.channelID < peer -> channelCount) - { - ENetChannel * channel = & peer -> channels [command -> header.channelID]; - enet_uint16 reliableWindow = command -> header.reliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE, - currentWindow = channel -> incomingReliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE; - - if (command -> header.reliableSequenceNumber < channel -> incomingReliableSequenceNumber) - reliableWindow += ENET_PEER_RELIABLE_WINDOWS; - - if (reliableWindow >= currentWindow + ENET_PEER_FREE_RELIABLE_WINDOWS - 1 && reliableWindow <= currentWindow + ENET_PEER_FREE_RELIABLE_WINDOWS) - return NULL; - } - - acknowledgement = (ENetAcknowledgement *) enet_malloc (sizeof (ENetAcknowledgement)); - if (acknowledgement == NULL) - return NULL; - - peer -> outgoingDataTotal += sizeof (ENetProtocolAcknowledge); - - acknowledgement -> sentTime = sentTime; - acknowledgement -> command = * command; - - enet_list_insert (enet_list_end (& peer -> acknowledgements), acknowledgement); - - return acknowledgement; -} - -void -enet_peer_setup_outgoing_command (ENetPeer * peer, ENetOutgoingCommand * outgoingCommand) -{ - ENetChannel * channel = & peer -> channels [outgoingCommand -> command.header.channelID]; - - peer -> outgoingDataTotal += enet_protocol_command_size (outgoingCommand -> command.header.command) + outgoingCommand -> fragmentLength; - - if (outgoingCommand -> command.header.channelID == 0xFF) - { - ++ peer -> outgoingReliableSequenceNumber; - - outgoingCommand -> reliableSequenceNumber = peer -> outgoingReliableSequenceNumber; - outgoingCommand -> unreliableSequenceNumber = 0; - } - else - if (outgoingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE) - { - ++ channel -> outgoingReliableSequenceNumber; - channel -> outgoingUnreliableSequenceNumber = 0; - - outgoingCommand -> reliableSequenceNumber = channel -> outgoingReliableSequenceNumber; - outgoingCommand -> unreliableSequenceNumber = 0; - } - else - if (outgoingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_FLAG_UNSEQUENCED) - { - ++ peer -> outgoingUnsequencedGroup; - - outgoingCommand -> reliableSequenceNumber = 0; - outgoingCommand -> unreliableSequenceNumber = 0; - } - else - { - ++ channel -> outgoingUnreliableSequenceNumber; - - outgoingCommand -> reliableSequenceNumber = channel -> outgoingReliableSequenceNumber; - outgoingCommand -> unreliableSequenceNumber = channel -> outgoingUnreliableSequenceNumber; - } - - outgoingCommand -> sendAttempts = 0; - outgoingCommand -> sentTime = 0; - outgoingCommand -> roundTripTimeout = 0; - outgoingCommand -> roundTripTimeoutLimit = 0; - outgoingCommand -> command.header.reliableSequenceNumber = ENET_HOST_TO_NET_16 (outgoingCommand -> reliableSequenceNumber); - - if (outgoingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE) - enet_list_insert (enet_list_end (& peer -> outgoingReliableCommands), outgoingCommand); - else - enet_list_insert (enet_list_end (& peer -> outgoingUnreliableCommands), outgoingCommand); -} - -ENetOutgoingCommand * -enet_peer_queue_outgoing_command (ENetPeer * peer, const ENetProtocol * command, ENetPacket * packet, enet_uint32 offset, enet_uint16 length) -{ - ENetOutgoingCommand * outgoingCommand = (ENetOutgoingCommand *) enet_malloc (sizeof (ENetOutgoingCommand)); - if (outgoingCommand == NULL) - return NULL; - - outgoingCommand -> command = * command; - outgoingCommand -> fragmentOffset = offset; - outgoingCommand -> fragmentLength = length; - outgoingCommand -> packet = packet; - if (packet != NULL) - ++ packet -> referenceCount; - - enet_peer_setup_outgoing_command (peer, outgoingCommand); - - return outgoingCommand; -} - -void -enet_peer_dispatch_incoming_unreliable_commands (ENetPeer * peer, ENetChannel * channel) -{ - ENetListIterator currentCommand; - - for (currentCommand = enet_list_begin (& channel -> incomingUnreliableCommands); - currentCommand != enet_list_end (& channel -> incomingUnreliableCommands); - currentCommand = enet_list_next (currentCommand)) - { - ENetIncomingCommand * incomingCommand = (ENetIncomingCommand *) currentCommand; - - if ((incomingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_MASK) == ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE && - incomingCommand -> reliableSequenceNumber != channel -> incomingReliableSequenceNumber) - break; - } - - if (currentCommand == enet_list_begin (& channel -> incomingUnreliableCommands)) - return; - - enet_list_move (enet_list_end (& peer -> dispatchedCommands), enet_list_begin (& channel -> incomingUnreliableCommands), enet_list_previous (currentCommand)); - - if (! peer -> needsDispatch) - { - enet_list_insert (enet_list_end (& peer -> host -> dispatchQueue), & peer -> dispatchList); - - peer -> needsDispatch = 1; - } -} - -void -enet_peer_dispatch_incoming_reliable_commands (ENetPeer * peer, ENetChannel * channel) -{ - ENetListIterator currentCommand; - - for (currentCommand = enet_list_begin (& channel -> incomingReliableCommands); - currentCommand != enet_list_end (& channel -> incomingReliableCommands); - currentCommand = enet_list_next (currentCommand)) - { - ENetIncomingCommand * incomingCommand = (ENetIncomingCommand *) currentCommand; - - if (incomingCommand -> fragmentsRemaining > 0 || - incomingCommand -> reliableSequenceNumber != (enet_uint16) (channel -> incomingReliableSequenceNumber + 1)) - break; - - channel -> incomingReliableSequenceNumber = incomingCommand -> reliableSequenceNumber; - - if (incomingCommand -> fragmentCount > 0) - channel -> incomingReliableSequenceNumber += incomingCommand -> fragmentCount - 1; - } - - if (currentCommand == enet_list_begin (& channel -> incomingReliableCommands)) - return; - - enet_list_move (enet_list_end (& peer -> dispatchedCommands), enet_list_begin (& channel -> incomingReliableCommands), enet_list_previous (currentCommand)); - - if (! peer -> needsDispatch) - { - enet_list_insert (enet_list_end (& peer -> host -> dispatchQueue), & peer -> dispatchList); - - peer -> needsDispatch = 1; - } - - enet_peer_dispatch_incoming_unreliable_commands (peer, channel); -} - -ENetIncomingCommand * -enet_peer_queue_incoming_command (ENetPeer * peer, const ENetProtocol * command, ENetPacket * packet, enet_uint32 fragmentCount) -{ - static ENetIncomingCommand dummyCommand; - - ENetChannel * channel = & peer -> channels [command -> header.channelID]; - enet_uint32 unreliableSequenceNumber = 0, reliableSequenceNumber; - enet_uint16 reliableWindow, currentWindow; - ENetIncomingCommand * incomingCommand; - ENetListIterator currentCommand; - - if (peer -> state == ENET_PEER_STATE_DISCONNECT_LATER) - goto freePacket; - - if ((command -> header.command & ENET_PROTOCOL_COMMAND_MASK) != ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED) - { - reliableSequenceNumber = command -> header.reliableSequenceNumber; - reliableWindow = reliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE; - currentWindow = channel -> incomingReliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE; - - if (reliableSequenceNumber < channel -> incomingReliableSequenceNumber) - reliableWindow += ENET_PEER_RELIABLE_WINDOWS; - - if (reliableWindow < currentWindow || reliableWindow >= currentWindow + ENET_PEER_FREE_RELIABLE_WINDOWS - 1) - goto freePacket; - } - - switch (command -> header.command & ENET_PROTOCOL_COMMAND_MASK) - { - case ENET_PROTOCOL_COMMAND_SEND_FRAGMENT: - case ENET_PROTOCOL_COMMAND_SEND_RELIABLE: - if (reliableSequenceNumber == channel -> incomingReliableSequenceNumber) - goto freePacket; - - for (currentCommand = enet_list_previous (enet_list_end (& channel -> incomingReliableCommands)); - currentCommand != enet_list_end (& channel -> incomingReliableCommands); - currentCommand = enet_list_previous (currentCommand)) - { - incomingCommand = (ENetIncomingCommand *) currentCommand; - - if (reliableSequenceNumber >= channel -> incomingReliableSequenceNumber) - { - if (incomingCommand -> reliableSequenceNumber < channel -> incomingReliableSequenceNumber) - continue; - } - else - if (incomingCommand -> reliableSequenceNumber >= channel -> incomingReliableSequenceNumber) - break; - - if (incomingCommand -> reliableSequenceNumber <= reliableSequenceNumber) - { - if (incomingCommand -> reliableSequenceNumber < reliableSequenceNumber) - break; - - goto freePacket; - } - } - break; - - case ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE: - unreliableSequenceNumber = ENET_NET_TO_HOST_16 (command -> sendUnreliable.unreliableSequenceNumber); - - for (currentCommand = enet_list_previous (enet_list_end (& channel -> incomingUnreliableCommands)); - currentCommand != enet_list_end (& channel -> incomingUnreliableCommands); - currentCommand = enet_list_previous (currentCommand)) - { - incomingCommand = (ENetIncomingCommand *) currentCommand; - - if ((incomingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_MASK) != ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE) - continue; - - if (reliableSequenceNumber >= channel -> incomingReliableSequenceNumber) - { - if (incomingCommand -> reliableSequenceNumber < channel -> incomingReliableSequenceNumber) - continue; - } - else - if (incomingCommand -> reliableSequenceNumber >= channel -> incomingReliableSequenceNumber) - break; - - if (incomingCommand -> reliableSequenceNumber < reliableSequenceNumber) - break; - - if (incomingCommand -> reliableSequenceNumber > reliableSequenceNumber) - continue; - - if (incomingCommand -> unreliableSequenceNumber <= unreliableSequenceNumber) - { - if (incomingCommand -> unreliableSequenceNumber < unreliableSequenceNumber) - break; - - goto freePacket; - } - } - break; - - case ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED: - currentCommand = enet_list_end (& channel -> incomingUnreliableCommands); - break; - - default: - goto freePacket; - } - - incomingCommand = (ENetIncomingCommand *) enet_malloc (sizeof (ENetIncomingCommand)); - if (incomingCommand == NULL) - goto notifyError; - - incomingCommand -> reliableSequenceNumber = command -> header.reliableSequenceNumber; - incomingCommand -> unreliableSequenceNumber = unreliableSequenceNumber & 0xFFFF; - incomingCommand -> command = * command; - incomingCommand -> fragmentCount = fragmentCount; - incomingCommand -> fragmentsRemaining = fragmentCount; - incomingCommand -> packet = packet; - incomingCommand -> fragments = NULL; - - if (fragmentCount > 0) - { - incomingCommand -> fragments = (enet_uint32 *) enet_malloc ((fragmentCount + 31) / 32 * sizeof (enet_uint32)); - if (incomingCommand -> fragments == NULL) - { - enet_free (incomingCommand); - - goto notifyError; - } - memset (incomingCommand -> fragments, 0, (fragmentCount + 31) / 32 * sizeof (enet_uint32)); - } - - if (packet != NULL) - ++ packet -> referenceCount; - - enet_list_insert (enet_list_next (currentCommand), incomingCommand); - - switch (command -> header.command & ENET_PROTOCOL_COMMAND_MASK) - { - case ENET_PROTOCOL_COMMAND_SEND_FRAGMENT: - case ENET_PROTOCOL_COMMAND_SEND_RELIABLE: - enet_peer_dispatch_incoming_reliable_commands (peer, channel); - break; - - default: - enet_peer_dispatch_incoming_unreliable_commands (peer, channel); - break; - } - - return incomingCommand; - -freePacket: - if (fragmentCount > 0) - goto notifyError; - - if (packet != NULL && packet -> referenceCount == 0) - enet_packet_destroy (packet); - - return & dummyCommand; - -notifyError: - if (packet != NULL && packet -> referenceCount == 0) - enet_packet_destroy (packet); - - return NULL; -} - -/** @} */ diff --git a/polymer-perf/eduke32/source/enet/src/protocol.c b/polymer-perf/eduke32/source/enet/src/protocol.c deleted file mode 100644 index 39d95bc52..000000000 --- a/polymer-perf/eduke32/source/enet/src/protocol.c +++ /dev/null @@ -1,1710 +0,0 @@ -/** - @file protocol.c - @brief ENet protocol functions -*/ -#include -#include -#define ENET_BUILDING_LIB 1 -#include "enet/utility.h" -#include "enet/time.h" -#include "enet/enet.h" - -#ifndef UNREFERENCED_PARAMETER -# define UNREFERENCED_PARAMETER(x) x=x -#endif - -static size_t commandSizes [ENET_PROTOCOL_COMMAND_COUNT] = -{ - 0, - sizeof (ENetProtocolAcknowledge), - sizeof (ENetProtocolConnect), - sizeof (ENetProtocolVerifyConnect), - sizeof (ENetProtocolDisconnect), - sizeof (ENetProtocolPing), - sizeof (ENetProtocolSendReliable), - sizeof (ENetProtocolSendUnreliable), - sizeof (ENetProtocolSendFragment), - sizeof (ENetProtocolSendUnsequenced), - sizeof (ENetProtocolBandwidthLimit), - sizeof (ENetProtocolThrottleConfigure), -}; - -size_t -enet_protocol_command_size (enet_uint8 commandNumber) -{ - return commandSizes [commandNumber & ENET_PROTOCOL_COMMAND_MASK]; -} - -static int -enet_protocol_dispatch_incoming_commands (ENetHost * host, ENetEvent * event) -{ - while (! enet_list_empty (& host -> dispatchQueue)) - { - ENetPeer * peer = (ENetPeer *) enet_list_remove (enet_list_begin (& host -> dispatchQueue)); - - peer -> needsDispatch = 0; - - switch (peer -> state) - { - case ENET_PEER_STATE_CONNECTION_PENDING: - case ENET_PEER_STATE_CONNECTION_SUCCEEDED: - peer -> state = ENET_PEER_STATE_CONNECTED; - - event -> type = ENET_EVENT_TYPE_CONNECT; - event -> peer = peer; - event -> data = peer -> eventData; - - return 1; - - case ENET_PEER_STATE_ZOMBIE: - host -> recalculateBandwidthLimits = 1; - - event -> type = ENET_EVENT_TYPE_DISCONNECT; - event -> peer = peer; - event -> data = peer -> eventData; - - enet_peer_reset (peer); - - return 1; - - case ENET_PEER_STATE_CONNECTED: - if (enet_list_empty (& peer -> dispatchedCommands)) - continue; - - event -> packet = enet_peer_receive (peer, & event -> channelID); - if (event -> packet == NULL) - continue; - - event -> type = ENET_EVENT_TYPE_RECEIVE; - event -> peer = peer; - - if (! enet_list_empty (& peer -> dispatchedCommands)) - { - peer -> needsDispatch = 1; - - enet_list_insert (enet_list_end (& host -> dispatchQueue), & peer -> dispatchList); - } - - return 1; - default: - break; - } - } - - return 0; -} - -static void -enet_protocol_dispatch_state (ENetHost * host, ENetPeer * peer, ENetPeerState state) -{ - peer -> state = state; - - if (! peer -> needsDispatch) - { - enet_list_insert (enet_list_end (& host -> dispatchQueue), & peer -> dispatchList); - - peer -> needsDispatch = 1; - } -} - -static void -enet_protocol_notify_connect (ENetHost * host, ENetPeer * peer, ENetEvent * event) -{ - host -> recalculateBandwidthLimits = 1; - - if (event != NULL) - { - peer -> state = ENET_PEER_STATE_CONNECTED; - - event -> type = ENET_EVENT_TYPE_CONNECT; - event -> peer = peer; - event -> data = peer -> eventData; - } - else - enet_protocol_dispatch_state (host, peer, peer -> state == ENET_PEER_STATE_CONNECTING ? ENET_PEER_STATE_CONNECTION_SUCCEEDED : ENET_PEER_STATE_CONNECTION_PENDING); -} - -static void -enet_protocol_notify_disconnect (ENetHost * host, ENetPeer * peer, ENetEvent * event) -{ - if (peer -> state >= ENET_PEER_STATE_CONNECTION_PENDING) - host -> recalculateBandwidthLimits = 1; - - if (peer -> state != ENET_PEER_STATE_CONNECTING && peer -> state < ENET_PEER_STATE_CONNECTION_SUCCEEDED) - enet_peer_reset (peer); - else - if (event != NULL) - { - event -> type = ENET_EVENT_TYPE_DISCONNECT; - event -> peer = peer; - event -> data = 0; - - enet_peer_reset (peer); - } - else - { - peer -> eventData = 0; - - enet_protocol_dispatch_state (host, peer, ENET_PEER_STATE_ZOMBIE); - } -} - -static void -enet_protocol_remove_sent_unreliable_commands (ENetPeer * peer) -{ - ENetOutgoingCommand * outgoingCommand; - - while (! enet_list_empty (& peer -> sentUnreliableCommands)) - { - outgoingCommand = (ENetOutgoingCommand *) enet_list_front (& peer -> sentUnreliableCommands); - - enet_list_remove (& outgoingCommand -> outgoingCommandList); - - if (outgoingCommand -> packet != NULL) - { - -- outgoingCommand -> packet -> referenceCount; - - if (outgoingCommand -> packet -> referenceCount == 0) - enet_packet_destroy (outgoingCommand -> packet); - } - - enet_free (outgoingCommand); - } -} - -static ENetProtocolCommand -enet_protocol_remove_sent_reliable_command (ENetPeer * peer, enet_uint16 reliableSequenceNumber, enet_uint8 channelID) -{ - ENetOutgoingCommand * outgoingCommand; - ENetListIterator currentCommand; - ENetProtocolCommand commandNumber; - int wasSent = 1; - - for (currentCommand = enet_list_begin (& peer -> sentReliableCommands); - currentCommand != enet_list_end (& peer -> sentReliableCommands); - currentCommand = enet_list_next (currentCommand)) - { - outgoingCommand = (ENetOutgoingCommand *) currentCommand; - - if (outgoingCommand -> reliableSequenceNumber == reliableSequenceNumber && - outgoingCommand -> command.header.channelID == channelID) - break; - } - - if (currentCommand == enet_list_end (& peer -> sentReliableCommands)) - { - for (currentCommand = enet_list_begin (& peer -> outgoingReliableCommands); - currentCommand != enet_list_end (& peer -> outgoingReliableCommands); - currentCommand = enet_list_next (currentCommand)) - { - outgoingCommand = (ENetOutgoingCommand *) currentCommand; - - if (outgoingCommand -> sendAttempts < 1) return ENET_PROTOCOL_COMMAND_NONE; - - if (outgoingCommand -> reliableSequenceNumber == reliableSequenceNumber && - outgoingCommand -> command.header.channelID == channelID) - break; - } - - if (currentCommand == enet_list_end (& peer -> outgoingReliableCommands)) - return ENET_PROTOCOL_COMMAND_NONE; - - wasSent = 0; - } - - if (channelID < peer -> channelCount) - { - ENetChannel * channel = & peer -> channels [channelID]; - enet_uint16 reliableWindow = reliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE; - if (channel -> reliableWindows [reliableWindow] > 0) - { - -- channel -> reliableWindows [reliableWindow]; - if (! channel -> reliableWindows [reliableWindow]) - channel -> usedReliableWindows &= ~ (1 << reliableWindow); - } - } - - commandNumber = (ENetProtocolCommand) (outgoingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_MASK); - - enet_list_remove (& outgoingCommand -> outgoingCommandList); - - if (outgoingCommand -> packet != NULL) - { - if (wasSent) - peer -> reliableDataInTransit -= outgoingCommand -> fragmentLength; - - -- outgoingCommand -> packet -> referenceCount; - - if (outgoingCommand -> packet -> referenceCount == 0) - enet_packet_destroy (outgoingCommand -> packet); - } - - enet_free (outgoingCommand); - - if (enet_list_empty (& peer -> sentReliableCommands)) - return commandNumber; - - outgoingCommand = (ENetOutgoingCommand *) enet_list_front (& peer -> sentReliableCommands); - - peer -> nextTimeout = outgoingCommand -> sentTime + outgoingCommand -> roundTripTimeout; - - return commandNumber; -} - -static ENetPeer * -enet_protocol_handle_connect (ENetHost * host, ENetProtocolHeader * header, ENetProtocol * command) -{ - enet_uint8 incomingSessionID, outgoingSessionID; - enet_uint32 mtu, windowSize; - ENetChannel * channel; - size_t channelCount; - ENetPeer * currentPeer; - ENetProtocol verifyCommand; - - UNREFERENCED_PARAMETER(header); - - channelCount = ENET_NET_TO_HOST_32 (command -> connect.channelCount); - - if (channelCount < ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT || - channelCount > ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT) - return NULL; - - for (currentPeer = host -> peers; - currentPeer < & host -> peers [host -> peerCount]; - ++ currentPeer) - { - if (currentPeer -> state != ENET_PEER_STATE_DISCONNECTED && - currentPeer -> address.host == host -> receivedAddress.host && - currentPeer -> address.port == host -> receivedAddress.port && - currentPeer -> connectID == command -> connect.connectID) - return NULL; - } - - for (currentPeer = host -> peers; - currentPeer < & host -> peers [host -> peerCount]; - ++ currentPeer) - { - if (currentPeer -> state == ENET_PEER_STATE_DISCONNECTED) - break; - } - - if (currentPeer >= & host -> peers [host -> peerCount]) - return NULL; - - if (channelCount > host -> channelLimit) - channelCount = host -> channelLimit; - currentPeer -> channels = (ENetChannel *) enet_malloc (channelCount * sizeof (ENetChannel)); - if (currentPeer -> channels == NULL) - return NULL; - currentPeer -> channelCount = channelCount; - currentPeer -> state = ENET_PEER_STATE_ACKNOWLEDGING_CONNECT; - currentPeer -> connectID = command -> connect.connectID; - currentPeer -> address = host -> receivedAddress; - currentPeer -> outgoingPeerID = ENET_NET_TO_HOST_16 (command -> connect.outgoingPeerID); - currentPeer -> incomingBandwidth = ENET_NET_TO_HOST_32 (command -> connect.incomingBandwidth); - currentPeer -> outgoingBandwidth = ENET_NET_TO_HOST_32 (command -> connect.outgoingBandwidth); - currentPeer -> packetThrottleInterval = ENET_NET_TO_HOST_32 (command -> connect.packetThrottleInterval); - currentPeer -> packetThrottleAcceleration = ENET_NET_TO_HOST_32 (command -> connect.packetThrottleAcceleration); - currentPeer -> packetThrottleDeceleration = ENET_NET_TO_HOST_32 (command -> connect.packetThrottleDeceleration); - currentPeer -> eventData = ENET_NET_TO_HOST_32 (command -> connect.data); - - incomingSessionID = command -> connect.incomingSessionID == 0xFF ? currentPeer -> outgoingSessionID : command -> connect.incomingSessionID; - incomingSessionID = (incomingSessionID + 1) & (ENET_PROTOCOL_HEADER_SESSION_MASK >> ENET_PROTOCOL_HEADER_SESSION_SHIFT); - if (incomingSessionID == currentPeer -> outgoingSessionID) - incomingSessionID = (incomingSessionID + 1) & (ENET_PROTOCOL_HEADER_SESSION_MASK >> ENET_PROTOCOL_HEADER_SESSION_SHIFT); - currentPeer -> outgoingSessionID = incomingSessionID; - - outgoingSessionID = command -> connect.outgoingSessionID == 0xFF ? currentPeer -> incomingSessionID : command -> connect.outgoingSessionID; - outgoingSessionID = (outgoingSessionID + 1) & (ENET_PROTOCOL_HEADER_SESSION_MASK >> ENET_PROTOCOL_HEADER_SESSION_SHIFT); - if (outgoingSessionID == currentPeer -> incomingSessionID) - outgoingSessionID = (outgoingSessionID + 1) & (ENET_PROTOCOL_HEADER_SESSION_MASK >> ENET_PROTOCOL_HEADER_SESSION_SHIFT); - currentPeer -> incomingSessionID = outgoingSessionID; - - for (channel = currentPeer -> channels; - channel < & currentPeer -> channels [channelCount]; - ++ channel) - { - channel -> outgoingReliableSequenceNumber = 0; - channel -> outgoingUnreliableSequenceNumber = 0; - channel -> incomingReliableSequenceNumber = 0; - - enet_list_clear (& channel -> incomingReliableCommands); - enet_list_clear (& channel -> incomingUnreliableCommands); - - channel -> usedReliableWindows = 0; - memset (channel -> reliableWindows, 0, sizeof (channel -> reliableWindows)); - } - - mtu = ENET_NET_TO_HOST_32 (command -> connect.mtu); - - if (mtu < ENET_PROTOCOL_MINIMUM_MTU) - mtu = ENET_PROTOCOL_MINIMUM_MTU; - else - if (mtu > ENET_PROTOCOL_MAXIMUM_MTU) - mtu = ENET_PROTOCOL_MAXIMUM_MTU; - - currentPeer -> mtu = mtu; - - if (host -> outgoingBandwidth == 0 && - currentPeer -> incomingBandwidth == 0) - currentPeer -> windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; - else - if (host -> outgoingBandwidth == 0 || - currentPeer -> incomingBandwidth == 0) - currentPeer -> windowSize = (ENET_MAX (host -> outgoingBandwidth, currentPeer -> incomingBandwidth) / - ENET_PEER_WINDOW_SIZE_SCALE) * - ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; - else - currentPeer -> windowSize = (ENET_MIN (host -> outgoingBandwidth, currentPeer -> incomingBandwidth) / - ENET_PEER_WINDOW_SIZE_SCALE) * - ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; - - if (currentPeer -> windowSize < ENET_PROTOCOL_MINIMUM_WINDOW_SIZE) - currentPeer -> windowSize = ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; - else - if (currentPeer -> windowSize > ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE) - currentPeer -> windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; - - if (host -> incomingBandwidth == 0) - windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; - else - windowSize = (host -> incomingBandwidth / ENET_PEER_WINDOW_SIZE_SCALE) * - ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; - - if (windowSize > ENET_NET_TO_HOST_32 (command -> connect.windowSize)) - windowSize = ENET_NET_TO_HOST_32 (command -> connect.windowSize); - - if (windowSize < ENET_PROTOCOL_MINIMUM_WINDOW_SIZE) - windowSize = ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; - else - if (windowSize > ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE) - windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; - - verifyCommand.header.command = ENET_PROTOCOL_COMMAND_VERIFY_CONNECT | ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE; - verifyCommand.header.channelID = 0xFF; - verifyCommand.verifyConnect.outgoingPeerID = ENET_HOST_TO_NET_16 (currentPeer -> incomingPeerID); - verifyCommand.verifyConnect.incomingSessionID = incomingSessionID; - verifyCommand.verifyConnect.outgoingSessionID = outgoingSessionID; - verifyCommand.verifyConnect.mtu = ENET_HOST_TO_NET_16 (currentPeer -> mtu); - verifyCommand.verifyConnect.windowSize = ENET_HOST_TO_NET_32 (windowSize); - verifyCommand.verifyConnect.channelCount = ENET_HOST_TO_NET_32 (channelCount); - verifyCommand.verifyConnect.incomingBandwidth = ENET_HOST_TO_NET_32 (host -> incomingBandwidth); - verifyCommand.verifyConnect.outgoingBandwidth = ENET_HOST_TO_NET_32 (host -> outgoingBandwidth); - verifyCommand.verifyConnect.packetThrottleInterval = ENET_HOST_TO_NET_32 (currentPeer -> packetThrottleInterval); - verifyCommand.verifyConnect.packetThrottleAcceleration = ENET_HOST_TO_NET_32 (currentPeer -> packetThrottleAcceleration); - verifyCommand.verifyConnect.packetThrottleDeceleration = ENET_HOST_TO_NET_32 (currentPeer -> packetThrottleDeceleration); - verifyCommand.verifyConnect.connectID = currentPeer -> connectID; - - enet_peer_queue_outgoing_command (currentPeer, & verifyCommand, NULL, 0, 0); - - return currentPeer; -} - -static int -enet_protocol_handle_send_reliable (ENetHost * host, ENetPeer * peer, const ENetProtocol * command, enet_uint8 ** currentData) -{ - ENetPacket * packet; - size_t dataLength; - - if (command -> header.channelID >= peer -> channelCount || - (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER)) - return -1; - - dataLength = ENET_NET_TO_HOST_16 (command -> sendReliable.dataLength); - * currentData += dataLength; - if (* currentData > & host -> receivedData [host -> receivedDataLength]) - return -1; - - packet = enet_packet_create ((const enet_uint8 *) command + sizeof (ENetProtocolSendReliable), - dataLength, - ENET_PACKET_FLAG_RELIABLE); - if (packet == NULL || - enet_peer_queue_incoming_command (peer, command, packet, 0) == NULL) - return -1; - - return 0; -} - -static int -enet_protocol_handle_send_unsequenced (ENetHost * host, ENetPeer * peer, const ENetProtocol * command, enet_uint8 ** currentData) -{ - ENetPacket * packet; - enet_uint32 unsequencedGroup, index; - size_t dataLength; - - if (command -> header.channelID >= peer -> channelCount || - (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER)) - return -1; - - dataLength = ENET_NET_TO_HOST_16 (command -> sendUnsequenced.dataLength); - * currentData += dataLength; - if (* currentData > & host -> receivedData [host -> receivedDataLength]) - return -1; - - unsequencedGroup = ENET_NET_TO_HOST_16 (command -> sendUnsequenced.unsequencedGroup); - index = unsequencedGroup % ENET_PEER_UNSEQUENCED_WINDOW_SIZE; - - if (unsequencedGroup < peer -> incomingUnsequencedGroup) - unsequencedGroup += 0x10000; - - if (unsequencedGroup >= (enet_uint32) peer -> incomingUnsequencedGroup + ENET_PEER_FREE_UNSEQUENCED_WINDOWS * ENET_PEER_UNSEQUENCED_WINDOW_SIZE) - return 0; - - unsequencedGroup &= 0xFFFF; - - if (unsequencedGroup - index != peer -> incomingUnsequencedGroup) - { - peer -> incomingUnsequencedGroup = unsequencedGroup - index; - - memset (peer -> unsequencedWindow, 0, sizeof (peer -> unsequencedWindow)); - } - else - if (peer -> unsequencedWindow [index / 32] & (1 << (index % 32))) - return 0; - - packet = enet_packet_create ((const enet_uint8 *) command + sizeof (ENetProtocolSendUnsequenced), - dataLength, - ENET_PACKET_FLAG_UNSEQUENCED); - if (packet == NULL || - enet_peer_queue_incoming_command (peer, command, packet, 0) == NULL) - return -1; - - peer -> unsequencedWindow [index / 32] |= 1 << (index % 32); - - return 0; -} - -static int -enet_protocol_handle_send_unreliable (ENetHost * host, ENetPeer * peer, const ENetProtocol * command, enet_uint8 ** currentData) -{ - ENetPacket * packet; - size_t dataLength; - - if (command -> header.channelID >= peer -> channelCount || - (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER)) - return -1; - - dataLength = ENET_NET_TO_HOST_16 (command -> sendUnreliable.dataLength); - * currentData += dataLength; - if (* currentData > & host -> receivedData [host -> receivedDataLength]) - return -1; - - packet = enet_packet_create ((const enet_uint8 *) command + sizeof (ENetProtocolSendUnreliable), - dataLength, - 0); - if (packet == NULL || - enet_peer_queue_incoming_command (peer, command, packet, 0) == NULL) - return -1; - - return 0; -} - -static int -enet_protocol_handle_send_fragment (ENetHost * host, ENetPeer * peer, const ENetProtocol * command, enet_uint8 ** currentData) -{ - enet_uint32 fragmentNumber, - fragmentCount, - fragmentOffset, - fragmentLength, - startSequenceNumber, - totalLength; - ENetChannel * channel; - enet_uint16 startWindow, currentWindow; - ENetListIterator currentCommand; - ENetIncomingCommand * startCommand = NULL; - - if (command -> header.channelID >= peer -> channelCount || - (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER)) - return -1; - - fragmentLength = ENET_NET_TO_HOST_16 (command -> sendFragment.dataLength); - * currentData += fragmentLength; - if (* currentData > & host -> receivedData [host -> receivedDataLength]) - return -1; - - channel = & peer -> channels [command -> header.channelID]; - startSequenceNumber = ENET_NET_TO_HOST_16 (command -> sendFragment.startSequenceNumber); - startWindow = startSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE; - currentWindow = channel -> incomingReliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE; - - if (startSequenceNumber < channel -> incomingReliableSequenceNumber) - startWindow += ENET_PEER_RELIABLE_WINDOWS; - - if (startWindow < currentWindow || startWindow >= currentWindow + ENET_PEER_FREE_RELIABLE_WINDOWS - 1) - return 0; - - fragmentNumber = ENET_NET_TO_HOST_32 (command -> sendFragment.fragmentNumber); - fragmentCount = ENET_NET_TO_HOST_32 (command -> sendFragment.fragmentCount); - fragmentOffset = ENET_NET_TO_HOST_32 (command -> sendFragment.fragmentOffset); - totalLength = ENET_NET_TO_HOST_32 (command -> sendFragment.totalLength); - - if (fragmentOffset >= totalLength || - fragmentOffset + fragmentLength > totalLength || - fragmentNumber >= fragmentCount) - return -1; - - for (currentCommand = enet_list_previous (enet_list_end (& channel -> incomingReliableCommands)); - currentCommand != enet_list_end (& channel -> incomingReliableCommands); - currentCommand = enet_list_previous (currentCommand)) - { - ENetIncomingCommand * incomingCommand = (ENetIncomingCommand *) currentCommand; - - if (startSequenceNumber >= channel -> incomingReliableSequenceNumber) - { - if (incomingCommand -> reliableSequenceNumber < channel -> incomingReliableSequenceNumber) - continue; - } - else - if (incomingCommand -> reliableSequenceNumber >= channel -> incomingReliableSequenceNumber) - break; - - if (incomingCommand -> reliableSequenceNumber <= startSequenceNumber) - { - if (incomingCommand -> reliableSequenceNumber < startSequenceNumber) - break; - - if ((incomingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_MASK) != ENET_PROTOCOL_COMMAND_SEND_FRAGMENT || - totalLength != incomingCommand -> packet -> dataLength || - fragmentCount != incomingCommand -> fragmentCount) - return -1; - - startCommand = incomingCommand; - break; - } - } - - if (startCommand == NULL) - { - ENetProtocol hostCommand = * command; - ENetPacket * packet = enet_packet_create (NULL, totalLength, ENET_PACKET_FLAG_RELIABLE); - if (packet == NULL) - return -1; - - hostCommand.header.reliableSequenceNumber = startSequenceNumber; - hostCommand.sendFragment.startSequenceNumber = startSequenceNumber; - hostCommand.sendFragment.dataLength = fragmentLength; - hostCommand.sendFragment.fragmentNumber = fragmentNumber; - hostCommand.sendFragment.fragmentCount = fragmentCount; - hostCommand.sendFragment.fragmentOffset = fragmentOffset; - hostCommand.sendFragment.totalLength = totalLength; - - startCommand = enet_peer_queue_incoming_command (peer, & hostCommand, packet, fragmentCount); - if (startCommand == NULL) - return -1; - } - - if ((startCommand -> fragments [fragmentNumber / 32] & (1 << (fragmentNumber % 32))) == 0) - { - -- startCommand -> fragmentsRemaining; - - startCommand -> fragments [fragmentNumber / 32] |= (1 << (fragmentNumber % 32)); - - if (fragmentOffset + fragmentLength > startCommand -> packet -> dataLength) - fragmentLength = startCommand -> packet -> dataLength - fragmentOffset; - - memcpy (startCommand -> packet -> data + fragmentOffset, - (enet_uint8 *) command + sizeof (ENetProtocolSendFragment), - fragmentLength); - - if (startCommand -> fragmentsRemaining <= 0) - enet_peer_dispatch_incoming_reliable_commands (peer, channel); - } - - return 0; -} - -static int -enet_protocol_handle_ping (ENetHost * host, ENetPeer * peer, const ENetProtocol * command) -{ - UNREFERENCED_PARAMETER(host); - UNREFERENCED_PARAMETER(peer); - UNREFERENCED_PARAMETER(command); - - return 0; -} - -static int -enet_protocol_handle_bandwidth_limit (ENetHost * host, ENetPeer * peer, const ENetProtocol * command) -{ - peer -> incomingBandwidth = ENET_NET_TO_HOST_32 (command -> bandwidthLimit.incomingBandwidth); - peer -> outgoingBandwidth = ENET_NET_TO_HOST_32 (command -> bandwidthLimit.outgoingBandwidth); - - if (peer -> incomingBandwidth == 0 && host -> outgoingBandwidth == 0) - peer -> windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; - else - peer -> windowSize = (ENET_MIN (peer -> incomingBandwidth, host -> outgoingBandwidth) / - ENET_PEER_WINDOW_SIZE_SCALE) * ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; - - if (peer -> windowSize < ENET_PROTOCOL_MINIMUM_WINDOW_SIZE) - peer -> windowSize = ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; - else - if (peer -> windowSize > ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE) - peer -> windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; - - return 0; -} - -static int -enet_protocol_handle_throttle_configure (ENetHost * host, ENetPeer * peer, const ENetProtocol * command) -{ - UNREFERENCED_PARAMETER(host); - - peer -> packetThrottleInterval = ENET_NET_TO_HOST_32 (command -> throttleConfigure.packetThrottleInterval); - peer -> packetThrottleAcceleration = ENET_NET_TO_HOST_32 (command -> throttleConfigure.packetThrottleAcceleration); - peer -> packetThrottleDeceleration = ENET_NET_TO_HOST_32 (command -> throttleConfigure.packetThrottleDeceleration); - - return 0; -} - -static int -enet_protocol_handle_disconnect (ENetHost * host, ENetPeer * peer, const ENetProtocol * command) -{ - if (peer -> state == ENET_PEER_STATE_ZOMBIE || peer -> state == ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT) - return 0; - - enet_peer_reset_queues (peer); - - if (peer -> state == ENET_PEER_STATE_CONNECTION_SUCCEEDED) - enet_protocol_dispatch_state (host, peer, ENET_PEER_STATE_ZOMBIE); - else - if (peer -> state != ENET_PEER_STATE_CONNECTED && peer -> state != ENET_PEER_STATE_DISCONNECT_LATER) - { - if (peer -> state == ENET_PEER_STATE_CONNECTION_PENDING) host -> recalculateBandwidthLimits = 1; - - enet_peer_reset (peer); - } - else - if (command -> header.command & ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE) - peer -> state = ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT; - else - enet_protocol_dispatch_state (host, peer, ENET_PEER_STATE_ZOMBIE); - - if (peer -> state != ENET_PEER_STATE_DISCONNECTED) - peer -> eventData = ENET_NET_TO_HOST_32 (command -> disconnect.data); - - return 0; -} - -static int -enet_protocol_handle_acknowledge (ENetHost * host, ENetEvent * event, ENetPeer * peer, const ENetProtocol * command) -{ - enet_uint32 roundTripTime, - receivedSentTime, - receivedReliableSequenceNumber; - ENetProtocolCommand commandNumber; - - receivedSentTime = ENET_NET_TO_HOST_16 (command -> acknowledge.receivedSentTime); - receivedSentTime |= host -> serviceTime & 0xFFFF0000; - if ((receivedSentTime & 0x8000) > (host -> serviceTime & 0x8000)) - receivedSentTime -= 0x10000; - - if (ENET_TIME_LESS (host -> serviceTime, receivedSentTime)) - return 0; - - peer -> lastReceiveTime = host -> serviceTime; - peer -> earliestTimeout = 0; - - roundTripTime = ENET_TIME_DIFFERENCE (host -> serviceTime, receivedSentTime); - - enet_peer_throttle (peer, roundTripTime); - - peer -> roundTripTimeVariance -= peer -> roundTripTimeVariance / 4; - - if (roundTripTime >= peer -> roundTripTime) - { - peer -> roundTripTime += (roundTripTime - peer -> roundTripTime) / 8; - peer -> roundTripTimeVariance += (roundTripTime - peer -> roundTripTime) / 4; - } - else - { - peer -> roundTripTime -= (peer -> roundTripTime - roundTripTime) / 8; - peer -> roundTripTimeVariance += (peer -> roundTripTime - roundTripTime) / 4; - } - - if (peer -> roundTripTime < peer -> lowestRoundTripTime) - peer -> lowestRoundTripTime = peer -> roundTripTime; - - if (peer -> roundTripTimeVariance > peer -> highestRoundTripTimeVariance) - peer -> highestRoundTripTimeVariance = peer -> roundTripTimeVariance; - - if (peer -> packetThrottleEpoch == 0 || - ENET_TIME_DIFFERENCE (host -> serviceTime, peer -> packetThrottleEpoch) >= peer -> packetThrottleInterval) - { - peer -> lastRoundTripTime = peer -> lowestRoundTripTime; - peer -> lastRoundTripTimeVariance = peer -> highestRoundTripTimeVariance; - peer -> lowestRoundTripTime = peer -> roundTripTime; - peer -> highestRoundTripTimeVariance = peer -> roundTripTimeVariance; - peer -> packetThrottleEpoch = host -> serviceTime; - } - - receivedReliableSequenceNumber = ENET_NET_TO_HOST_16 (command -> acknowledge.receivedReliableSequenceNumber); - - commandNumber = enet_protocol_remove_sent_reliable_command (peer, receivedReliableSequenceNumber, command -> header.channelID); - - switch (peer -> state) - { - case ENET_PEER_STATE_ACKNOWLEDGING_CONNECT: - if (commandNumber != ENET_PROTOCOL_COMMAND_VERIFY_CONNECT) - return -1; - - enet_protocol_notify_connect (host, peer, event); - break; - - case ENET_PEER_STATE_DISCONNECTING: - if (commandNumber != ENET_PROTOCOL_COMMAND_DISCONNECT) - return -1; - - enet_protocol_notify_disconnect (host, peer, event); - break; - - case ENET_PEER_STATE_DISCONNECT_LATER: - if (enet_list_empty (& peer -> outgoingReliableCommands) && - enet_list_empty (& peer -> outgoingUnreliableCommands) && - enet_list_empty (& peer -> sentReliableCommands)) - enet_peer_disconnect (peer, peer -> eventData); - break; - default: - break; - } - - return 0; -} - -static int -enet_protocol_handle_verify_connect (ENetHost * host, ENetEvent * event, ENetPeer * peer, const ENetProtocol * command) -{ - enet_uint32 mtu, windowSize; - size_t channelCount; - - if (peer -> state != ENET_PEER_STATE_CONNECTING) - return 0; - - channelCount = ENET_NET_TO_HOST_32 (command -> verifyConnect.channelCount); - - if (channelCount < ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT || channelCount > ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT || - ENET_NET_TO_HOST_32 (command -> verifyConnect.packetThrottleInterval) != peer -> packetThrottleInterval || - ENET_NET_TO_HOST_32 (command -> verifyConnect.packetThrottleAcceleration) != peer -> packetThrottleAcceleration || - ENET_NET_TO_HOST_32 (command -> verifyConnect.packetThrottleDeceleration) != peer -> packetThrottleDeceleration || - command -> verifyConnect.connectID != peer -> connectID) - { - peer -> eventData = 0; - - enet_protocol_dispatch_state (host, peer, ENET_PEER_STATE_ZOMBIE); - - return -1; - } - - enet_protocol_remove_sent_reliable_command (peer, 1, 0xFF); - - if (channelCount < peer -> channelCount) - peer -> channelCount = channelCount; - - peer -> outgoingPeerID = ENET_NET_TO_HOST_16 (command -> verifyConnect.outgoingPeerID); - peer -> incomingSessionID = command -> verifyConnect.incomingSessionID; - peer -> outgoingSessionID = command -> verifyConnect.outgoingSessionID; - - mtu = ENET_NET_TO_HOST_32 (command -> verifyConnect.mtu); - - if (mtu < ENET_PROTOCOL_MINIMUM_MTU) - mtu = ENET_PROTOCOL_MINIMUM_MTU; - else - if (mtu > ENET_PROTOCOL_MAXIMUM_MTU) - mtu = ENET_PROTOCOL_MAXIMUM_MTU; - - if (mtu < peer -> mtu) - peer -> mtu = mtu; - - windowSize = ENET_NET_TO_HOST_32 (command -> verifyConnect.windowSize); - - if (windowSize < ENET_PROTOCOL_MINIMUM_WINDOW_SIZE) - windowSize = ENET_PROTOCOL_MINIMUM_WINDOW_SIZE; - - if (windowSize > ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE) - windowSize = ENET_PROTOCOL_MAXIMUM_WINDOW_SIZE; - - if (windowSize < peer -> windowSize) - peer -> windowSize = windowSize; - - peer -> incomingBandwidth = ENET_NET_TO_HOST_32 (command -> verifyConnect.incomingBandwidth); - peer -> outgoingBandwidth = ENET_NET_TO_HOST_32 (command -> verifyConnect.outgoingBandwidth); - - enet_protocol_notify_connect (host, peer, event); - return 0; -} - -static int -enet_protocol_handle_incoming_commands (ENetHost * host, ENetEvent * event) -{ - ENetProtocolHeader * header; - ENetProtocol * command; - ENetPeer * peer; - enet_uint8 * currentData; - size_t headerSize; - enet_uint16 peerID, flags; - enet_uint8 sessionID; - - if (host -> receivedDataLength < (size_t) & ((ENetProtocolHeader *) 0) -> sentTime) - return 0; - - header = (ENetProtocolHeader *) host -> receivedData; - - peerID = ENET_NET_TO_HOST_16 (header -> peerID); - sessionID = (peerID & ENET_PROTOCOL_HEADER_SESSION_MASK) >> ENET_PROTOCOL_HEADER_SESSION_SHIFT; - flags = peerID & ENET_PROTOCOL_HEADER_FLAG_MASK; - peerID &= ~ (ENET_PROTOCOL_HEADER_FLAG_MASK | ENET_PROTOCOL_HEADER_SESSION_MASK); - - headerSize = (flags & ENET_PROTOCOL_HEADER_FLAG_SENT_TIME ? sizeof (ENetProtocolHeader) : (size_t) & ((ENetProtocolHeader *) 0) -> sentTime); - if (host -> checksum != NULL) - headerSize += sizeof (enet_uint32); - - if (peerID == ENET_PROTOCOL_MAXIMUM_PEER_ID) - peer = NULL; - else - if (peerID >= host -> peerCount) - return 0; - else - { - peer = & host -> peers [peerID]; - - if (peer -> state == ENET_PEER_STATE_DISCONNECTED || - peer -> state == ENET_PEER_STATE_ZOMBIE || - (host -> receivedAddress.host != peer -> address.host && - peer -> address.host != ENET_HOST_BROADCAST) || - (peer -> outgoingPeerID < ENET_PROTOCOL_MAXIMUM_PEER_ID && - sessionID != peer -> incomingSessionID)) - return 0; - } - - if (flags & ENET_PROTOCOL_HEADER_FLAG_COMPRESSED) - { - size_t originalSize; - if (host -> compressor.context == NULL || host -> compressor.decompress == NULL) - return 0; - - originalSize = host -> compressor.decompress (host -> compressor.context, - host -> receivedData + headerSize, - host -> receivedDataLength - headerSize, - host -> packetData [1] + headerSize, - sizeof (host -> packetData [1]) - headerSize); - if (originalSize <= 0 || originalSize > sizeof (host -> packetData [1]) - headerSize) - return 0; - - memcpy (host -> packetData [1], header, headerSize); - host -> receivedData = host -> packetData [1]; - host -> receivedDataLength = headerSize + originalSize; - } - - if (host -> checksum != NULL) - { - enet_uint32 * checksum = (enet_uint32 *) & host -> receivedData [headerSize - sizeof (enet_uint32)], - desiredChecksum = * checksum; - ENetBuffer buffer; - - * checksum = peer != NULL ? peer -> connectID : 0; - - buffer.data = host -> receivedData; - buffer.dataLength = host -> receivedDataLength; - - if (host -> checksum (& buffer, 1) != desiredChecksum) - return 0; - } - - if (peer != NULL) - { - peer -> address.host = host -> receivedAddress.host; - peer -> address.port = host -> receivedAddress.port; - peer -> incomingDataTotal += host -> receivedDataLength; - } - - currentData = host -> receivedData + headerSize; - - while (currentData < & host -> receivedData [host -> receivedDataLength]) - { - enet_uint8 commandNumber; - size_t commandSize; - - command = (ENetProtocol *) currentData; - - if (currentData + sizeof (ENetProtocolCommandHeader) > & host -> receivedData [host -> receivedDataLength]) - break; - - commandNumber = command -> header.command & ENET_PROTOCOL_COMMAND_MASK; - if (commandNumber >= ENET_PROTOCOL_COMMAND_COUNT) - break; - - commandSize = commandSizes [commandNumber]; - if (commandSize == 0 || currentData + commandSize > & host -> receivedData [host -> receivedDataLength]) - break; - - currentData += commandSize; - - if (peer == NULL && commandNumber != ENET_PROTOCOL_COMMAND_CONNECT) - break; - - command -> header.reliableSequenceNumber = ENET_NET_TO_HOST_16 (command -> header.reliableSequenceNumber); - - switch (command -> header.command & ENET_PROTOCOL_COMMAND_MASK) - { - case ENET_PROTOCOL_COMMAND_ACKNOWLEDGE: - if (enet_protocol_handle_acknowledge (host, event, peer, command)) - goto commandError; - break; - - case ENET_PROTOCOL_COMMAND_CONNECT: - peer = enet_protocol_handle_connect (host, header, command); - if (peer == NULL) - goto commandError; - break; - - case ENET_PROTOCOL_COMMAND_VERIFY_CONNECT: - if (enet_protocol_handle_verify_connect (host, event, peer, command)) - goto commandError; - break; - - case ENET_PROTOCOL_COMMAND_DISCONNECT: - if (enet_protocol_handle_disconnect (host, peer, command)) - goto commandError; - break; - - case ENET_PROTOCOL_COMMAND_PING: - if (enet_protocol_handle_ping (host, peer, command)) - goto commandError; - break; - - case ENET_PROTOCOL_COMMAND_SEND_RELIABLE: - if (enet_protocol_handle_send_reliable (host, peer, command, & currentData)) - goto commandError; - break; - - case ENET_PROTOCOL_COMMAND_SEND_UNRELIABLE: - if (enet_protocol_handle_send_unreliable (host, peer, command, & currentData)) - goto commandError; - break; - - case ENET_PROTOCOL_COMMAND_SEND_UNSEQUENCED: - if (enet_protocol_handle_send_unsequenced (host, peer, command, & currentData)) - goto commandError; - break; - - case ENET_PROTOCOL_COMMAND_SEND_FRAGMENT: - if (enet_protocol_handle_send_fragment (host, peer, command, & currentData)) - goto commandError; - break; - - case ENET_PROTOCOL_COMMAND_BANDWIDTH_LIMIT: - if (enet_protocol_handle_bandwidth_limit (host, peer, command)) - goto commandError; - break; - - case ENET_PROTOCOL_COMMAND_THROTTLE_CONFIGURE: - if (enet_protocol_handle_throttle_configure (host, peer, command)) - goto commandError; - break; - - default: - goto commandError; - } - - if (peer != NULL && - (command -> header.command & ENET_PROTOCOL_COMMAND_FLAG_ACKNOWLEDGE) != 0) - { - enet_uint16 sentTime; - - if (! (flags & ENET_PROTOCOL_HEADER_FLAG_SENT_TIME)) - break; - - sentTime = ENET_NET_TO_HOST_16 (header -> sentTime); - - switch (peer -> state) - { - case ENET_PEER_STATE_DISCONNECTING: - case ENET_PEER_STATE_ACKNOWLEDGING_CONNECT: - break; - - case ENET_PEER_STATE_ACKNOWLEDGING_DISCONNECT: - if ((command -> header.command & ENET_PROTOCOL_COMMAND_MASK) == ENET_PROTOCOL_COMMAND_DISCONNECT) - enet_peer_queue_acknowledgement (peer, command, sentTime); - break; - - default: - enet_peer_queue_acknowledgement (peer, command, sentTime); - break; - } - } - } - -commandError: - if (event != NULL && event -> type != ENET_EVENT_TYPE_NONE) - return 1; - - return 0; -} - -static int -enet_protocol_receive_incoming_commands (ENetHost * host, ENetEvent * event) -{ - for (;;) - { - int receivedLength; - ENetBuffer buffer; - - buffer.data = host -> packetData [0]; - buffer.dataLength = sizeof (host -> packetData [0]); - - receivedLength = enet_socket_receive (host -> socket, - & host -> receivedAddress, - & buffer, - 1); - - if (receivedLength < 0) - return -1; - - if (receivedLength == 0) - return 0; - - host -> receivedData = host -> packetData [0]; - host -> receivedDataLength = receivedLength; - - host -> totalReceivedData += receivedLength; - host -> totalReceivedPackets ++; - - switch (enet_protocol_handle_incoming_commands (host, event)) - { - case 1: - return 1; - - case -1: - return -1; - - default: - break; - } - } - - return -1; -} - -static void -enet_protocol_send_acknowledgements (ENetHost * host, ENetPeer * peer) -{ - ENetProtocol * command = & host -> commands [host -> commandCount]; - ENetBuffer * buffer = & host -> buffers [host -> bufferCount]; - ENetAcknowledgement * acknowledgement; - ENetListIterator currentAcknowledgement; - - currentAcknowledgement = enet_list_begin (& peer -> acknowledgements); - - while (currentAcknowledgement != enet_list_end (& peer -> acknowledgements)) - { - if (command >= & host -> commands [sizeof (host -> commands) / sizeof (ENetProtocol)] || - buffer >= & host -> buffers [sizeof (host -> buffers) / sizeof (ENetBuffer)] || - peer -> mtu - host -> packetSize < sizeof (ENetProtocolAcknowledge)) - { - host -> continueSending = 1; - - break; - } - - acknowledgement = (ENetAcknowledgement *) currentAcknowledgement; - - currentAcknowledgement = enet_list_next (currentAcknowledgement); - - buffer -> data = command; - buffer -> dataLength = sizeof (ENetProtocolAcknowledge); - - host -> packetSize += buffer -> dataLength; - - command -> header.command = ENET_PROTOCOL_COMMAND_ACKNOWLEDGE; - command -> header.channelID = acknowledgement -> command.header.channelID; - command -> acknowledge.receivedReliableSequenceNumber = ENET_HOST_TO_NET_16 (acknowledgement -> command.header.reliableSequenceNumber); - command -> acknowledge.receivedSentTime = ENET_HOST_TO_NET_16 (acknowledgement -> sentTime); - - if ((acknowledgement -> command.header.command & ENET_PROTOCOL_COMMAND_MASK) == ENET_PROTOCOL_COMMAND_DISCONNECT) - enet_protocol_dispatch_state (host, peer, ENET_PEER_STATE_ZOMBIE); - - enet_list_remove (& acknowledgement -> acknowledgementList); - enet_free (acknowledgement); - - ++ command; - ++ buffer; - } - - host -> commandCount = command - host -> commands; - host -> bufferCount = buffer - host -> buffers; -} - -static void -enet_protocol_send_unreliable_outgoing_commands (ENetHost * host, ENetPeer * peer) -{ - ENetProtocol * command = & host -> commands [host -> commandCount]; - ENetBuffer * buffer = & host -> buffers [host -> bufferCount]; - ENetOutgoingCommand * outgoingCommand; - ENetListIterator currentCommand; - - currentCommand = enet_list_begin (& peer -> outgoingUnreliableCommands); - - while (currentCommand != enet_list_end (& peer -> outgoingUnreliableCommands)) - { - size_t commandSize; - - outgoingCommand = (ENetOutgoingCommand *) currentCommand; - commandSize = commandSizes [outgoingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_MASK]; - - if (command >= & host -> commands [sizeof (host -> commands) / sizeof (ENetProtocol)] || - buffer + 1 >= & host -> buffers [sizeof (host -> buffers) / sizeof (ENetBuffer)] || - peer -> mtu - host -> packetSize < commandSize || - (outgoingCommand -> packet != NULL && - peer -> mtu - host -> packetSize < commandSize + outgoingCommand -> packet -> dataLength)) - { - host -> continueSending = 1; - - break; - } - - currentCommand = enet_list_next (currentCommand); - - if (outgoingCommand -> packet != NULL) - { - peer -> packetThrottleCounter += ENET_PEER_PACKET_THROTTLE_COUNTER; - peer -> packetThrottleCounter %= ENET_PEER_PACKET_THROTTLE_SCALE; - - if (peer -> packetThrottleCounter > peer -> packetThrottle) - { - -- outgoingCommand -> packet -> referenceCount; - - if (outgoingCommand -> packet -> referenceCount == 0) - enet_packet_destroy (outgoingCommand -> packet); - - enet_list_remove (& outgoingCommand -> outgoingCommandList); - enet_free (outgoingCommand); - - continue; - } - } - - buffer -> data = command; - buffer -> dataLength = commandSize; - - host -> packetSize += buffer -> dataLength; - - * command = outgoingCommand -> command; - - enet_list_remove (& outgoingCommand -> outgoingCommandList); - - if (outgoingCommand -> packet != NULL) - { - ++ buffer; - - buffer -> data = outgoingCommand -> packet -> data; - buffer -> dataLength = outgoingCommand -> packet -> dataLength; - - host -> packetSize += buffer -> dataLength; - - enet_list_insert (enet_list_end (& peer -> sentUnreliableCommands), outgoingCommand); - } - else - enet_free (outgoingCommand); - - ++ command; - ++ buffer; - } - - host -> commandCount = command - host -> commands; - host -> bufferCount = buffer - host -> buffers; - - if (peer -> state == ENET_PEER_STATE_DISCONNECT_LATER && - enet_list_empty (& peer -> outgoingReliableCommands) && - enet_list_empty (& peer -> outgoingUnreliableCommands) && - enet_list_empty (& peer -> sentReliableCommands)) - enet_peer_disconnect (peer, peer -> eventData); -} - -static int -enet_protocol_check_timeouts (ENetHost * host, ENetPeer * peer, ENetEvent * event) -{ - ENetOutgoingCommand * outgoingCommand; - ENetListIterator currentCommand, insertPosition; - - currentCommand = enet_list_begin (& peer -> sentReliableCommands); - insertPosition = enet_list_begin (& peer -> outgoingReliableCommands); - - while (currentCommand != enet_list_end (& peer -> sentReliableCommands)) - { - outgoingCommand = (ENetOutgoingCommand *) currentCommand; - - currentCommand = enet_list_next (currentCommand); - - if (ENET_TIME_DIFFERENCE (host -> serviceTime, outgoingCommand -> sentTime) < outgoingCommand -> roundTripTimeout) - continue; - - if (peer -> earliestTimeout == 0 || - ENET_TIME_LESS (outgoingCommand -> sentTime, peer -> earliestTimeout)) - peer -> earliestTimeout = outgoingCommand -> sentTime; - - if (peer -> earliestTimeout != 0 && - (ENET_TIME_DIFFERENCE (host -> serviceTime, peer -> earliestTimeout) >= ENET_PEER_TIMEOUT_MAXIMUM || - (outgoingCommand -> roundTripTimeout >= outgoingCommand -> roundTripTimeoutLimit && - ENET_TIME_DIFFERENCE (host -> serviceTime, peer -> earliestTimeout) >= ENET_PEER_TIMEOUT_MINIMUM))) - { - enet_protocol_notify_disconnect (host, peer, event); - - return 1; - } - - if (outgoingCommand -> packet != NULL) - peer -> reliableDataInTransit -= outgoingCommand -> fragmentLength; - - ++ peer -> packetsLost; - - outgoingCommand -> roundTripTimeout *= 2; - - enet_list_insert (insertPosition, enet_list_remove (& outgoingCommand -> outgoingCommandList)); - - if (currentCommand == enet_list_begin (& peer -> sentReliableCommands) && - ! enet_list_empty (& peer -> sentReliableCommands)) - { - outgoingCommand = (ENetOutgoingCommand *) currentCommand; - - peer -> nextTimeout = outgoingCommand -> sentTime + outgoingCommand -> roundTripTimeout; - } - } - - return 0; -} - -static int -enet_protocol_send_reliable_outgoing_commands (ENetHost * host, ENetPeer * peer) -{ - ENetProtocol * command = & host -> commands [host -> commandCount]; - ENetBuffer * buffer = & host -> buffers [host -> bufferCount]; - ENetOutgoingCommand * outgoingCommand; - ENetListIterator currentCommand; - ENetChannel *channel; - enet_uint16 reliableWindow; - size_t commandSize; - int windowExceeded = 0, windowWrap = 0, canPing = 1; - - currentCommand = enet_list_begin (& peer -> outgoingReliableCommands); - - while (currentCommand != enet_list_end (& peer -> outgoingReliableCommands)) - { - outgoingCommand = (ENetOutgoingCommand *) currentCommand; - - channel = outgoingCommand -> command.header.channelID < peer -> channelCount ? & peer -> channels [outgoingCommand -> command.header.channelID] : NULL; - reliableWindow = outgoingCommand -> reliableSequenceNumber / ENET_PEER_RELIABLE_WINDOW_SIZE; - if (channel != NULL) - { - if (! windowWrap && - outgoingCommand -> sendAttempts < 1 && - ! (outgoingCommand -> reliableSequenceNumber % ENET_PEER_RELIABLE_WINDOW_SIZE) && - (channel -> reliableWindows [(reliableWindow + ENET_PEER_RELIABLE_WINDOWS - 1) % ENET_PEER_RELIABLE_WINDOWS] >= ENET_PEER_RELIABLE_WINDOW_SIZE || - channel -> usedReliableWindows & ((((1 << ENET_PEER_FREE_RELIABLE_WINDOWS) - 1) << reliableWindow) | - (((1 << ENET_PEER_FREE_RELIABLE_WINDOWS) - 1) >> (ENET_PEER_RELIABLE_WINDOW_SIZE - reliableWindow))))) - windowWrap = 1; - if (windowWrap) - { - currentCommand = enet_list_next (currentCommand); - - continue; - } - } - - if (outgoingCommand -> packet != NULL) - { - if (! windowExceeded) - { - enet_uint32 windowSize = (peer -> packetThrottle * peer -> windowSize) / ENET_PEER_PACKET_THROTTLE_SCALE; - - if (peer -> reliableDataInTransit + outgoingCommand -> fragmentLength > ENET_MAX (windowSize, peer -> mtu)) - windowExceeded = 1; - } - if (windowExceeded) - { - currentCommand = enet_list_next (currentCommand); - - continue; - } - } - - canPing = 0; - - commandSize = commandSizes [outgoingCommand -> command.header.command & ENET_PROTOCOL_COMMAND_MASK]; - if (command >= & host -> commands [sizeof (host -> commands) / sizeof (ENetProtocol)] || - buffer + 1 >= & host -> buffers [sizeof (host -> buffers) / sizeof (ENetBuffer)] || - peer -> mtu - host -> packetSize < commandSize || - (outgoingCommand -> packet != NULL && - (enet_uint16) (peer -> mtu - host -> packetSize) < (enet_uint16) (commandSize + outgoingCommand -> fragmentLength))) - { - host -> continueSending = 1; - - break; - } - - currentCommand = enet_list_next (currentCommand); - - if (channel != NULL && outgoingCommand -> sendAttempts < 1) - { - channel -> usedReliableWindows |= 1 << reliableWindow; - ++ channel -> reliableWindows [reliableWindow]; - } - - ++ outgoingCommand -> sendAttempts; - - if (outgoingCommand -> roundTripTimeout == 0) - { - outgoingCommand -> roundTripTimeout = peer -> roundTripTime + 4 * peer -> roundTripTimeVariance; - outgoingCommand -> roundTripTimeoutLimit = ENET_PEER_TIMEOUT_LIMIT * outgoingCommand -> roundTripTimeout; - } - - if (enet_list_empty (& peer -> sentReliableCommands)) - peer -> nextTimeout = host -> serviceTime + outgoingCommand -> roundTripTimeout; - - enet_list_insert (enet_list_end (& peer -> sentReliableCommands), - enet_list_remove (& outgoingCommand -> outgoingCommandList)); - - outgoingCommand -> sentTime = host -> serviceTime; - - buffer -> data = command; - buffer -> dataLength = commandSize; - - host -> packetSize += buffer -> dataLength; - host -> headerFlags |= ENET_PROTOCOL_HEADER_FLAG_SENT_TIME; - - * command = outgoingCommand -> command; - - if (outgoingCommand -> packet != NULL) - { - ++ buffer; - - buffer -> data = outgoingCommand -> packet -> data + outgoingCommand -> fragmentOffset; - buffer -> dataLength = outgoingCommand -> fragmentLength; - - host -> packetSize += outgoingCommand -> fragmentLength; - - peer -> reliableDataInTransit += outgoingCommand -> fragmentLength; - } - - ++ peer -> packetsSent; - - ++ command; - ++ buffer; - } - - host -> commandCount = command - host -> commands; - host -> bufferCount = buffer - host -> buffers; - - return canPing; -} - -static int -enet_protocol_send_outgoing_commands (ENetHost * host, ENetEvent * event, int checkForTimeouts) -{ - enet_uint8 headerData [sizeof (ENetProtocolHeader) + sizeof (enet_uint32)]; - ENetProtocolHeader * header = (ENetProtocolHeader *) headerData; - ENetPeer * currentPeer; - int sentLength; - size_t shouldCompress = 0; - - host -> continueSending = 1; - - while (host -> continueSending) - for (host -> continueSending = 0, - currentPeer = host -> peers; - currentPeer < & host -> peers [host -> peerCount]; - ++ currentPeer) - { - if (currentPeer -> state == ENET_PEER_STATE_DISCONNECTED || - currentPeer -> state == ENET_PEER_STATE_ZOMBIE) - continue; - - host -> headerFlags = 0; - host -> commandCount = 0; - host -> bufferCount = 1; - host -> packetSize = sizeof (ENetProtocolHeader); - - if (! enet_list_empty (& currentPeer -> acknowledgements)) - enet_protocol_send_acknowledgements (host, currentPeer); - - if (checkForTimeouts != 0 && - ! enet_list_empty (& currentPeer -> sentReliableCommands) && - ENET_TIME_GREATER_EQUAL (host -> serviceTime, currentPeer -> nextTimeout) && - enet_protocol_check_timeouts (host, currentPeer, event) == 1) - return 1; - - if ((enet_list_empty (& currentPeer -> outgoingReliableCommands) || - enet_protocol_send_reliable_outgoing_commands (host, currentPeer)) && - enet_list_empty (& currentPeer -> sentReliableCommands) && - ENET_TIME_DIFFERENCE (host -> serviceTime, currentPeer -> lastReceiveTime) >= ENET_PEER_PING_INTERVAL && - currentPeer -> mtu - host -> packetSize >= sizeof (ENetProtocolPing)) - { - enet_peer_ping (currentPeer); - enet_protocol_send_reliable_outgoing_commands (host, currentPeer); - } - - if (! enet_list_empty (& currentPeer -> outgoingUnreliableCommands)) - enet_protocol_send_unreliable_outgoing_commands (host, currentPeer); - - if (host -> commandCount == 0) - continue; - - if (currentPeer -> packetLossEpoch == 0) - currentPeer -> packetLossEpoch = host -> serviceTime; - else - if (ENET_TIME_DIFFERENCE (host -> serviceTime, currentPeer -> packetLossEpoch) >= ENET_PEER_PACKET_LOSS_INTERVAL && - currentPeer -> packetsSent > 0) - { - enet_uint32 packetLoss = currentPeer -> packetsLost * ENET_PEER_PACKET_LOSS_SCALE / currentPeer -> packetsSent; - -#ifdef ENET_DEBUG -#ifdef WIN32 - printf ( -#else - fprintf (stderr, -#endif - "peer %u: %f%%+-%f%% packet loss, %u+-%u ms round trip time, %f%% throttle, %u/%u outgoing, %u/%u incoming\n", currentPeer -> incomingPeerID, currentPeer -> packetLoss / (float) ENET_PEER_PACKET_LOSS_SCALE, currentPeer -> packetLossVariance / (float) ENET_PEER_PACKET_LOSS_SCALE, currentPeer -> roundTripTime, currentPeer -> roundTripTimeVariance, currentPeer -> packetThrottle / (float) ENET_PEER_PACKET_THROTTLE_SCALE, enet_list_size (& currentPeer -> outgoingReliableCommands), enet_list_size (& currentPeer -> outgoingUnreliableCommands), currentPeer -> channels != NULL ? enet_list_size (& currentPeer -> channels -> incomingReliableCommands) : 0, currentPeer -> channels != NULL ? enet_list_size (& currentPeer -> channels -> incomingUnreliableCommands) : 0); -#endif - - currentPeer -> packetLossVariance -= currentPeer -> packetLossVariance / 4; - - if (packetLoss >= currentPeer -> packetLoss) - { - currentPeer -> packetLoss += (packetLoss - currentPeer -> packetLoss) / 8; - currentPeer -> packetLossVariance += (packetLoss - currentPeer -> packetLoss) / 4; - } - else - { - currentPeer -> packetLoss -= (currentPeer -> packetLoss - packetLoss) / 8; - currentPeer -> packetLossVariance += (currentPeer -> packetLoss - packetLoss) / 4; - } - - currentPeer -> packetLossEpoch = host -> serviceTime; - currentPeer -> packetsSent = 0; - currentPeer -> packetsLost = 0; - } - - host -> buffers -> data = headerData; - if (host -> headerFlags & ENET_PROTOCOL_HEADER_FLAG_SENT_TIME) - { - header -> sentTime = ENET_HOST_TO_NET_16 (host -> serviceTime & 0xFFFF); - - host -> buffers -> dataLength = sizeof (ENetProtocolHeader); - } - else - host -> buffers -> dataLength = (size_t) & ((ENetProtocolHeader *) 0) -> sentTime; - - shouldCompress = 0; - if (host -> compressor.context != NULL && host -> compressor.compress != NULL) - { - size_t originalSize = host -> packetSize - sizeof(ENetProtocolHeader), - compressedSize = host -> compressor.compress (host -> compressor.context, - & host -> buffers [1], host -> bufferCount - 1, - originalSize, - host -> packetData [1], - originalSize); - if (compressedSize > 0 && compressedSize < originalSize) - { - host -> headerFlags |= ENET_PROTOCOL_HEADER_FLAG_COMPRESSED; - shouldCompress = compressedSize; -#ifdef ENET_DEBUG_COMPRESS -#ifdef WIN32 - printf ( -#else - fprintf (stderr, -#endif - "peer %u: compressed %u -> %u (%u%%)\n", currentPeer -> incomingPeerID, originalSize, compressedSize, (compressedSize * 100) / originalSize); -#endif - } - } - - if (currentPeer -> outgoingPeerID < ENET_PROTOCOL_MAXIMUM_PEER_ID) - host -> headerFlags |= currentPeer -> outgoingSessionID << ENET_PROTOCOL_HEADER_SESSION_SHIFT; - header -> peerID = ENET_HOST_TO_NET_16 (currentPeer -> outgoingPeerID | host -> headerFlags); - if (host -> checksum != NULL) - { - enet_uint32 * checksum = (enet_uint32 *) & headerData [host -> buffers -> dataLength]; - * checksum = currentPeer -> outgoingPeerID < ENET_PROTOCOL_MAXIMUM_PEER_ID ? currentPeer -> connectID : 0; - host -> buffers -> dataLength += sizeof (enet_uint32); - * checksum = host -> checksum (host -> buffers, host -> bufferCount); - } - - if (shouldCompress > 0) - { - host -> buffers [1].data = host -> packetData [1]; - host -> buffers [1].dataLength = shouldCompress; - host -> bufferCount = 2; - } - - currentPeer -> lastSendTime = host -> serviceTime; - - sentLength = enet_socket_send (host -> socket, & currentPeer -> address, host -> buffers, host -> bufferCount); - - enet_protocol_remove_sent_unreliable_commands (currentPeer); - - if (sentLength < 0) - return -1; - - host -> totalSentData += sentLength; - host -> totalSentPackets ++; - } - - return 0; -} - -/** Sends any queued packets on the host specified to its designated peers. - - @param host host to flush - @remarks this function need only be used in circumstances where one wishes to send queued packets earlier than in a call to enet_host_service(). - @ingroup host -*/ -void -enet_host_flush (ENetHost * host) -{ - host -> serviceTime = enet_time_get (); - - enet_protocol_send_outgoing_commands (host, NULL, 0); -} - -/** Checks for any queued events on the host and dispatches one if available. - - @param host host to check for events - @param event an event structure where event details will be placed if available - @retval > 0 if an event was dispatched - @retval 0 if no events are available - @retval < 0 on failure - @ingroup host -*/ -int -enet_host_check_events (ENetHost * host, ENetEvent * event) -{ - if (event == NULL) return -1; - - event -> type = ENET_EVENT_TYPE_NONE; - event -> peer = NULL; - event -> packet = NULL; - - return enet_protocol_dispatch_incoming_commands (host, event); -} - -/** Waits for events on the host specified and shuttles packets between - the host and its peers. - - @param host host to service - @param event an event structure where event details will be placed if one occurs - if event == NULL then no events will be delivered - @param timeout number of milliseconds that ENet should wait for events - @retval > 0 if an event occurred within the specified time limit - @retval 0 if no event occurred - @retval < 0 on failure - @remarks enet_host_service should be called fairly regularly for adequate performance - @ingroup host -*/ -int -enet_host_service (ENetHost * host, ENetEvent * event, enet_uint32 timeout) -{ - enet_uint32 waitCondition; - - if (event != NULL) - { - event -> type = ENET_EVENT_TYPE_NONE; - event -> peer = NULL; - event -> packet = NULL; - - switch (enet_protocol_dispatch_incoming_commands (host, event)) - { - case 1: - return 1; - - case -1: - perror ("Error dispatching incoming packets"); - - return -1; - - default: - break; - } - } - - host -> serviceTime = enet_time_get (); - - timeout += host -> serviceTime; - - do - { - if (ENET_TIME_DIFFERENCE (host -> serviceTime, host -> bandwidthThrottleEpoch) >= ENET_HOST_BANDWIDTH_THROTTLE_INTERVAL) - enet_host_bandwidth_throttle (host); - - switch (enet_protocol_send_outgoing_commands (host, event, 1)) - { - case 1: - return 1; - - case -1: - perror ("Error sending outgoing packets"); - - return -1; - - default: - break; - } - - switch (enet_protocol_receive_incoming_commands (host, event)) - { - case 1: - return 1; - - case -1: - perror ("Error receiving incoming packets"); - - return -1; - - default: - break; - } - - switch (enet_protocol_send_outgoing_commands (host, event, 1)) - { - case 1: - return 1; - - case -1: - perror ("Error sending outgoing packets"); - - return -1; - - default: - break; - } - - if (event != NULL) - { - switch (enet_protocol_dispatch_incoming_commands (host, event)) - { - case 1: - return 1; - - case -1: - perror ("Error dispatching incoming packets"); - - return -1; - - default: - break; - } - } - - host -> serviceTime = enet_time_get (); - - if (ENET_TIME_GREATER_EQUAL (host -> serviceTime, timeout)) - return 0; - - waitCondition = ENET_SOCKET_WAIT_RECEIVE; - - if (enet_socket_wait (host -> socket, & waitCondition, ENET_TIME_DIFFERENCE (timeout, host -> serviceTime)) != 0) - return -1; - - host -> serviceTime = enet_time_get (); - } while (waitCondition == ENET_SOCKET_WAIT_RECEIVE); - - return 0; -} - diff --git a/polymer-perf/eduke32/source/enet/src/unix.c b/polymer-perf/eduke32/source/enet/src/unix.c deleted file mode 100644 index 3b072490f..000000000 --- a/polymer-perf/eduke32/source/enet/src/unix.c +++ /dev/null @@ -1,438 +0,0 @@ -/** - @file unix.c - @brief ENet Unix system specific functions -*/ -#ifndef WIN32 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define ENET_BUILDING_LIB 1 -#include "enet/enet.h" - -#ifdef HAS_FCNTL -#include -#endif - -#ifdef __APPLE__ -#undef HAS_POLL -#endif - -#ifdef HAS_POLL -#include -#endif - -#ifndef __socklen_t_defined -typedef int socklen_t; -#endif - -#ifndef MSG_NOSIGNAL -#define MSG_NOSIGNAL 0 -#endif - -static enet_uint32 timeBase = 0; - -int -enet_initialize (void) -{ - return 0; -} - -void -enet_deinitialize (void) -{ -} - -enet_uint32 -enet_time_get (void) -{ - struct timeval timeVal; - - gettimeofday (& timeVal, NULL); - - return timeVal.tv_sec * 1000 + timeVal.tv_usec / 1000 - timeBase; -} - -void -enet_time_set (enet_uint32 newTimeBase) -{ - struct timeval timeVal; - - gettimeofday (& timeVal, NULL); - - timeBase = timeVal.tv_sec * 1000 + timeVal.tv_usec / 1000 - newTimeBase; -} - -int -enet_address_set_host (ENetAddress * address, const char * name) -{ - struct hostent * hostEntry = NULL; -#ifdef HAS_GETHOSTBYNAME_R - struct hostent hostData; - char buffer [2048]; - int errnum; - -#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) - gethostbyname_r (name, & hostData, buffer, sizeof (buffer), & hostEntry, & errnum); -#else - hostEntry = gethostbyname_r (name, & hostData, buffer, sizeof (buffer), & errnum); -#endif -#else - hostEntry = gethostbyname (name); -#endif - - if (hostEntry == NULL || - hostEntry -> h_addrtype != AF_INET) - { -#ifdef HAS_INET_PTON - if (! inet_pton (AF_INET, name, & address -> host)) -#else - if (! inet_aton (name, (struct in_addr *) & address -> host)) -#endif - return -1; - return 0; - } - - address -> host = * (enet_uint32 *) hostEntry -> h_addr_list [0]; - - return 0; -} - -int -enet_address_get_host_ip (const ENetAddress * address, char * name, size_t nameLength) -{ -#ifdef HAS_INET_NTOP - if (inet_ntop (AF_INET, & address -> host, name, nameLength) == NULL) -#else - char * addr = inet_ntoa (* (struct in_addr *) & address -> host); - if (addr != NULL) - strncpy (name, addr, nameLength); - else -#endif - return -1; - return 0; -} - -int -enet_address_get_host (const ENetAddress * address, char * name, size_t nameLength) -{ - struct in_addr in; - struct hostent * hostEntry = NULL; -#ifdef HAS_GETHOSTBYADDR_R - struct hostent hostData; - char buffer [2048]; - int errnum; - - in.s_addr = address -> host; - -#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) - gethostbyaddr_r ((char *) & in, sizeof (struct in_addr), AF_INET, & hostData, buffer, sizeof (buffer), & hostEntry, & errnum); -#else - hostEntry = gethostbyaddr_r ((char *) & in, sizeof (struct in_addr), AF_INET, & hostData, buffer, sizeof (buffer), & errnum); -#endif -#else - in.s_addr = address -> host; - - hostEntry = gethostbyaddr ((char *) & in, sizeof (struct in_addr), AF_INET); -#endif - - if (hostEntry == NULL) - return enet_address_get_host_ip (address, name, nameLength); - - strncpy (name, hostEntry -> h_name, nameLength); - - return 0; -} - -int -enet_socket_bind (ENetSocket socket, const ENetAddress * address) -{ - struct sockaddr_in sin; - - memset (& sin, 0, sizeof (struct sockaddr_in)); - - sin.sin_family = AF_INET; - - if (address != NULL) - { - sin.sin_port = ENET_HOST_TO_NET_16 (address -> port); - sin.sin_addr.s_addr = address -> host; - } - else - { - sin.sin_port = 0; - sin.sin_addr.s_addr = INADDR_ANY; - } - - return bind (socket, - (struct sockaddr *) & sin, - sizeof (struct sockaddr_in)); -} - -int -enet_socket_listen (ENetSocket socket, int backlog) -{ - return listen (socket, backlog < 0 ? SOMAXCONN : backlog); -} - -ENetSocket -enet_socket_create (ENetSocketType type) -{ - return socket (PF_INET, type == ENET_SOCKET_TYPE_DATAGRAM ? SOCK_DGRAM : SOCK_STREAM, 0); -} - -int -enet_socket_set_option (ENetSocket socket, ENetSocketOption option, int value) -{ - int result = -1; - switch (option) - { - case ENET_SOCKOPT_NONBLOCK: -#ifdef HAS_FCNTL - result = fcntl (socket, F_SETFL, O_NONBLOCK | fcntl (socket, F_GETFL)); -#else - result = ioctl (socket, FIONBIO, & value); -#endif - break; - - case ENET_SOCKOPT_BROADCAST: - result = setsockopt (socket, SOL_SOCKET, SO_BROADCAST, (char *) & value, sizeof (int)); - break; - - case ENET_SOCKOPT_REUSEADDR: - result = setsockopt (socket, SOL_SOCKET, SO_REUSEADDR, (char *) & value, sizeof (int)); - break; - - case ENET_SOCKOPT_RCVBUF: - result = setsockopt (socket, SOL_SOCKET, SO_RCVBUF, (char *) & value, sizeof (int)); - break; - - case ENET_SOCKOPT_SNDBUF: - result = setsockopt (socket, SOL_SOCKET, SO_SNDBUF, (char *) & value, sizeof (int)); - break; - - default: - break; - } - return result == -1 ? -1 : 0; -} - -int -enet_socket_connect (ENetSocket socket, const ENetAddress * address) -{ - struct sockaddr_in sin; - - memset (& sin, 0, sizeof (struct sockaddr_in)); - - sin.sin_family = AF_INET; - sin.sin_port = ENET_HOST_TO_NET_16 (address -> port); - sin.sin_addr.s_addr = address -> host; - - return connect (socket, (struct sockaddr *) & sin, sizeof (struct sockaddr_in)); -} - -ENetSocket -enet_socket_accept (ENetSocket socket, ENetAddress * address) -{ - int result; - struct sockaddr_in sin; - socklen_t sinLength = sizeof (struct sockaddr_in); - - result = accept (socket, - address != NULL ? (struct sockaddr *) & sin : NULL, - address != NULL ? & sinLength : NULL); - - if (result == -1) - return ENET_SOCKET_NULL; - - if (address != NULL) - { - address -> host = (enet_uint32) sin.sin_addr.s_addr; - address -> port = ENET_NET_TO_HOST_16 (sin.sin_port); - } - - return result; -} - -void -enet_socket_destroy (ENetSocket socket) -{ - close (socket); -} - -int -enet_socket_send (ENetSocket socket, - const ENetAddress * address, - const ENetBuffer * buffers, - size_t bufferCount) -{ - struct msghdr msgHdr; - struct sockaddr_in sin; - int sentLength; - - memset (& msgHdr, 0, sizeof (struct msghdr)); - - if (address != NULL) - { - memset (& sin, 0, sizeof (struct sockaddr_in)); - - sin.sin_family = AF_INET; - sin.sin_port = ENET_HOST_TO_NET_16 (address -> port); - sin.sin_addr.s_addr = address -> host; - - msgHdr.msg_name = & sin; - msgHdr.msg_namelen = sizeof (struct sockaddr_in); - } - - msgHdr.msg_iov = (struct iovec *) buffers; - msgHdr.msg_iovlen = bufferCount; - - sentLength = sendmsg (socket, & msgHdr, MSG_NOSIGNAL); - - if (sentLength == -1) - { - if (errno == EWOULDBLOCK) - return 0; - - return -1; - } - - return sentLength; -} - -int -enet_socket_receive (ENetSocket socket, - ENetAddress * address, - ENetBuffer * buffers, - size_t bufferCount) -{ - struct msghdr msgHdr; - struct sockaddr_in sin; - int recvLength; - - memset (& msgHdr, 0, sizeof (struct msghdr)); - - if (address != NULL) - { - msgHdr.msg_name = & sin; - msgHdr.msg_namelen = sizeof (struct sockaddr_in); - } - - msgHdr.msg_iov = (struct iovec *) buffers; - msgHdr.msg_iovlen = bufferCount; - - recvLength = recvmsg (socket, & msgHdr, MSG_NOSIGNAL); - - if (recvLength == -1) - { - if (errno == EWOULDBLOCK) - return 0; - - return -1; - } - -#ifdef HAS_MSGHDR_FLAGS - if (msgHdr.msg_flags & MSG_TRUNC) - return -1; -#endif - - if (address != NULL) - { - address -> host = (enet_uint32) sin.sin_addr.s_addr; - address -> port = ENET_NET_TO_HOST_16 (sin.sin_port); - } - - return recvLength; -} - -int -enet_socketset_select (ENetSocket maxSocket, ENetSocketSet * readSet, ENetSocketSet * writeSet, enet_uint32 timeout) -{ - struct timeval timeVal; - - timeVal.tv_sec = timeout / 1000; - timeVal.tv_usec = (timeout % 1000) * 1000; - - return select (maxSocket + 1, readSet, writeSet, NULL, & timeVal); -} - -int -enet_socket_wait (ENetSocket socket, enet_uint32 * condition, enet_uint32 timeout) -{ -#ifdef HAS_POLL - struct pollfd pollSocket; - int pollCount; - - pollSocket.fd = socket; - pollSocket.events = 0; - - if (* condition & ENET_SOCKET_WAIT_SEND) - pollSocket.events |= POLLOUT; - - if (* condition & ENET_SOCKET_WAIT_RECEIVE) - pollSocket.events |= POLLIN; - - pollCount = poll (& pollSocket, 1, timeout); - - if (pollCount < 0) - return -1; - - * condition = ENET_SOCKET_WAIT_NONE; - - if (pollCount == 0) - return 0; - - if (pollSocket.revents & POLLOUT) - * condition |= ENET_SOCKET_WAIT_SEND; - - if (pollSocket.revents & POLLIN) - * condition |= ENET_SOCKET_WAIT_RECEIVE; - - return 0; -#else - fd_set readSet, writeSet; - struct timeval timeVal; - int selectCount; - - timeVal.tv_sec = timeout / 1000; - timeVal.tv_usec = (timeout % 1000) * 1000; - - FD_ZERO (& readSet); - FD_ZERO (& writeSet); - - if (* condition & ENET_SOCKET_WAIT_SEND) - FD_SET (socket, & writeSet); - - if (* condition & ENET_SOCKET_WAIT_RECEIVE) - FD_SET (socket, & readSet); - - selectCount = select (socket + 1, & readSet, & writeSet, NULL, & timeVal); - - if (selectCount < 0) - return -1; - - * condition = ENET_SOCKET_WAIT_NONE; - - if (selectCount == 0) - return 0; - - if (FD_ISSET (socket, & writeSet)) - * condition |= ENET_SOCKET_WAIT_SEND; - - if (FD_ISSET (socket, & readSet)) - * condition |= ENET_SOCKET_WAIT_RECEIVE; - - return 0; -#endif -} - -#endif - diff --git a/polymer-perf/eduke32/source/enet/src/win32.c b/polymer-perf/eduke32/source/enet/src/win32.c deleted file mode 100644 index e1fae2330..000000000 --- a/polymer-perf/eduke32/source/enet/src/win32.c +++ /dev/null @@ -1,348 +0,0 @@ -/** - @file win32.c - @brief ENet Win32 system specific functions -*/ -#ifdef WIN32 - -#include -#define ENET_BUILDING_LIB 1 -#include "enet/enet.h" - -static enet_uint32 timeBase = 0; - -int -enet_initialize (void) -{ - WORD versionRequested = MAKEWORD (1, 1); - WSADATA wsaData; - - if (WSAStartup (versionRequested, & wsaData)) - return -1; - - if (LOBYTE (wsaData.wVersion) != 1|| - HIBYTE (wsaData.wVersion) != 1) - { - WSACleanup (); - - return -1; - } - - timeBeginPeriod (1); - - return 0; -} - -void -enet_deinitialize (void) -{ - timeEndPeriod (1); - - WSACleanup (); -} - -enet_uint32 -enet_time_get (void) -{ - return (enet_uint32) timeGetTime () - timeBase; -} - -void -enet_time_set (enet_uint32 newTimeBase) -{ - timeBase = (enet_uint32) timeGetTime () - newTimeBase; -} - -int -enet_address_set_host (ENetAddress * address, const char * name) -{ - struct hostent * hostEntry; - - hostEntry = gethostbyname (name); - if (hostEntry == NULL || - hostEntry -> h_addrtype != AF_INET) - { - unsigned long host = inet_addr (name); - if (host == INADDR_NONE) - return -1; - address -> host = host; - return 0; - } - - address -> host = * (enet_uint32 *) hostEntry -> h_addr_list [0]; - - return 0; -} - -int -enet_address_get_host_ip (const ENetAddress * address, char * name, size_t nameLength) -{ - char * addr = inet_ntoa (* (struct in_addr *) & address -> host); - if (addr == NULL) - return -1; - strncpy (name, addr, nameLength); - return 0; -} - -int -enet_address_get_host (const ENetAddress * address, char * name, size_t nameLength) -{ - struct in_addr in; - struct hostent * hostEntry; - - in.s_addr = address -> host; - - hostEntry = gethostbyaddr ((char *) & in, sizeof (struct in_addr), AF_INET); - if (hostEntry == NULL) - return enet_address_get_host_ip (address, name, nameLength); - - strncpy (name, hostEntry -> h_name, nameLength); - - return 0; -} - -int -enet_socket_bind (ENetSocket socket, const ENetAddress * address) -{ - struct sockaddr_in sin; - - memset (& sin, 0, sizeof (struct sockaddr_in)); - - sin.sin_family = AF_INET; - - if (address != NULL) - { - sin.sin_port = ENET_HOST_TO_NET_16 (address -> port); - sin.sin_addr.s_addr = address -> host; - } - else - { - sin.sin_port = 0; - sin.sin_addr.s_addr = INADDR_ANY; - } - - return bind (socket, - (struct sockaddr *) & sin, - sizeof (struct sockaddr_in)) == SOCKET_ERROR ? -1 : 0; -} - -int -enet_socket_listen (ENetSocket socket, int backlog) -{ - return listen (socket, backlog < 0 ? SOMAXCONN : backlog) == SOCKET_ERROR ? -1 : 0; -} - -ENetSocket -enet_socket_create (ENetSocketType type) -{ - return socket (PF_INET, type == ENET_SOCKET_TYPE_DATAGRAM ? SOCK_DGRAM : SOCK_STREAM, 0); -} - -int -enet_socket_set_option (ENetSocket socket, ENetSocketOption option, int value) -{ - int result = SOCKET_ERROR; - switch (option) - { - case ENET_SOCKOPT_NONBLOCK: - { - u_long nonBlocking = (u_long) value; - result = ioctlsocket (socket, FIONBIO, & nonBlocking); - break; - } - - case ENET_SOCKOPT_BROADCAST: - result = setsockopt (socket, SOL_SOCKET, SO_BROADCAST, (char *) & value, sizeof (int)); - break; - - case ENET_SOCKOPT_REUSEADDR: - result = setsockopt (socket, SOL_SOCKET, SO_REUSEADDR, (char *) & value, sizeof (int)); - break; - - case ENET_SOCKOPT_RCVBUF: - result = setsockopt (socket, SOL_SOCKET, SO_RCVBUF, (char *) & value, sizeof (int)); - break; - - case ENET_SOCKOPT_SNDBUF: - result = setsockopt (socket, SOL_SOCKET, SO_SNDBUF, (char *) & value, sizeof (int)); - break; - - default: - break; - } - return result == SOCKET_ERROR ? -1 : 0; -} - -int -enet_socket_connect (ENetSocket socket, const ENetAddress * address) -{ - struct sockaddr_in sin; - - memset (& sin, 0, sizeof (struct sockaddr_in)); - - sin.sin_family = AF_INET; - sin.sin_port = ENET_HOST_TO_NET_16 (address -> port); - sin.sin_addr.s_addr = address -> host; - - return connect (socket, (struct sockaddr *) & sin, sizeof (struct sockaddr_in)) == SOCKET_ERROR ? -1 : 0; -} - -ENetSocket -enet_socket_accept (ENetSocket socket, ENetAddress * address) -{ - SOCKET result; - struct sockaddr_in sin; - int sinLength = sizeof (struct sockaddr_in); - - result = accept (socket, - address != NULL ? (struct sockaddr *) & sin : NULL, - address != NULL ? & sinLength : NULL); - - if (result == INVALID_SOCKET) - return ENET_SOCKET_NULL; - - if (address != NULL) - { - address -> host = (enet_uint32) sin.sin_addr.s_addr; - address -> port = ENET_NET_TO_HOST_16 (sin.sin_port); - } - - return result; -} - -void -enet_socket_destroy (ENetSocket socket) -{ - closesocket (socket); -} - -int -enet_socket_send (ENetSocket socket, - const ENetAddress * address, - const ENetBuffer * buffers, - size_t bufferCount) -{ - struct sockaddr_in sin; - DWORD sentLength; - - if (address != NULL) - { - memset (& sin, 0, sizeof (struct sockaddr_in)); - - sin.sin_family = AF_INET; - sin.sin_port = ENET_HOST_TO_NET_16 (address -> port); - sin.sin_addr.s_addr = address -> host; - } - - if (WSASendTo (socket, - (LPWSABUF) buffers, - (DWORD) bufferCount, - & sentLength, - 0, - address != NULL ? (struct sockaddr *) & sin : 0, - address != NULL ? sizeof (struct sockaddr_in) : 0, - NULL, - NULL) == SOCKET_ERROR) - { - if (WSAGetLastError () == WSAEWOULDBLOCK) - return 0; - - return -1; - } - - return (int) sentLength; -} - -int -enet_socket_receive (ENetSocket socket, - ENetAddress * address, - ENetBuffer * buffers, - size_t bufferCount) -{ - INT sinLength = sizeof (struct sockaddr_in); - DWORD flags = 0, - recvLength; - struct sockaddr_in sin; - - if (WSARecvFrom (socket, - (LPWSABUF) buffers, - (DWORD) bufferCount, - & recvLength, - & flags, - address != NULL ? (struct sockaddr *) & sin : NULL, - address != NULL ? & sinLength : NULL, - NULL, - NULL) == SOCKET_ERROR) - { - switch (WSAGetLastError ()) - { - case WSAEWOULDBLOCK: - case WSAECONNRESET: - return 0; - } - - return -1; - } - - if (flags & MSG_PARTIAL) - return -1; - - if (address != NULL) - { - address -> host = (enet_uint32) sin.sin_addr.s_addr; - address -> port = ENET_NET_TO_HOST_16 (sin.sin_port); - } - - return (int) recvLength; -} - -int -enet_socketset_select (ENetSocket maxSocket, ENetSocketSet * readSet, ENetSocketSet * writeSet, enet_uint32 timeout) -{ - struct timeval timeVal; - - timeVal.tv_sec = timeout / 1000; - timeVal.tv_usec = (timeout % 1000) * 1000; - - return select (maxSocket + 1, readSet, writeSet, NULL, & timeVal); -} - -int -enet_socket_wait (ENetSocket socket, enet_uint32 * condition, enet_uint32 timeout) -{ - fd_set readSet, writeSet; - struct timeval timeVal; - int selectCount; - - timeVal.tv_sec = timeout / 1000; - timeVal.tv_usec = (timeout % 1000) * 1000; - - FD_ZERO (& readSet); - FD_ZERO (& writeSet); - - if (* condition & ENET_SOCKET_WAIT_SEND) - FD_SET (socket, & writeSet); - - if (* condition & ENET_SOCKET_WAIT_RECEIVE) - FD_SET (socket, & readSet); - - selectCount = select (socket + 1, & readSet, & writeSet, NULL, & timeVal); - - if (selectCount < 0) - return -1; - - * condition = ENET_SOCKET_WAIT_NONE; - - if (selectCount == 0) - return 0; - - if (FD_ISSET (socket, & writeSet)) - * condition |= ENET_SOCKET_WAIT_SEND; - - if (FD_ISSET (socket, & readSet)) - * condition |= ENET_SOCKET_WAIT_RECEIVE; - - return 0; -} - -#endif - diff --git a/polymer-perf/eduke32/source/function.h b/polymer-perf/eduke32/source/function.h deleted file mode 100644 index ce9f79c0e..000000000 --- a/polymer-perf/eduke32/source/function.h +++ /dev/null @@ -1,106 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -// function.h - -// file created by makehead.exe -// these headers contain default key assignments, as well as -// default button assignments and game function names -// axis defaults are also included - - -#ifndef _function_public_ -#define _function_public_ -#ifdef __cplusplus -extern "C" { -#endif - -#define NUMKEYENTRIES 56 -#define NUMGAMEFUNCTIONS 56 -#define MAXGAMEFUNCLEN 32 - -extern char gamefunctions[NUMGAMEFUNCTIONS][MAXGAMEFUNCLEN]; -extern char keydefaults[NUMGAMEFUNCTIONS*3][MAXGAMEFUNCLEN]; - -enum GameFunction_t - { - gamefunc_Move_Forward, - gamefunc_Move_Backward, - gamefunc_Turn_Left, - gamefunc_Turn_Right, - gamefunc_Strafe, - gamefunc_Fire, - gamefunc_Open, - gamefunc_Run, - gamefunc_AutoRun, - gamefunc_Jump, - gamefunc_Crouch, - gamefunc_Look_Up, - gamefunc_Look_Down, - gamefunc_Look_Left, - gamefunc_Look_Right, - gamefunc_Strafe_Left, - gamefunc_Strafe_Right, - gamefunc_Aim_Up, - gamefunc_Aim_Down, - gamefunc_Weapon_1, - gamefunc_Weapon_2, - gamefunc_Weapon_3, - gamefunc_Weapon_4, - gamefunc_Weapon_5, - gamefunc_Weapon_6, - gamefunc_Weapon_7, - gamefunc_Weapon_8, - gamefunc_Weapon_9, - gamefunc_Weapon_10, - gamefunc_Inventory, - gamefunc_Inventory_Left, - gamefunc_Inventory_Right, - gamefunc_Holo_Duke, - gamefunc_Jetpack, - gamefunc_NightVision, - gamefunc_MedKit, - gamefunc_TurnAround, - gamefunc_SendMessage, - gamefunc_Map, - gamefunc_Shrink_Screen, - gamefunc_Enlarge_Screen, - gamefunc_Center_View, - gamefunc_Holster_Weapon, - gamefunc_Show_Opponents_Weapon, - gamefunc_Map_Follow_Mode, - gamefunc_See_Coop_View, - gamefunc_Mouse_Aiming, - gamefunc_Toggle_Crosshair, - gamefunc_Steroids, - gamefunc_Quick_Kick, - gamefunc_Next_Weapon, - gamefunc_Previous_Weapon, - gamefunc_Show_Console, - gamefunc_Show_DukeMatch_Scores, - gamefunc_Dpad_Select, - gamefunc_Dpad_Aiming - }; -#ifdef __cplusplus -}; -#endif -#endif diff --git a/polymer-perf/eduke32/source/game.c b/polymer-perf/eduke32/source/game.c deleted file mode 100644 index 4a21fd370..000000000 --- a/polymer-perf/eduke32/source/game.c +++ /dev/null @@ -1,11368 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#include "duke3d.h" - -#include "scriplib.h" -#include "file_lib.h" -#include "mathutil.h" -#include "gamedefs.h" -#include "keyboard.h" -#include "mouse.h" // JBF 20030809 -#include "function.h" -#include "control.h" -#include "fx_man.h" -#include "sounds.h" -#include "config.h" -#include "osd.h" -#include "osdfuncs.h" -#include "osdcmds.h" -#include "scriptfile.h" -#include "grpscan.h" -#include "gamedef.h" -#include "kplib.h" -#include "crc32.h" -#include "hightile.h" -#include "control.h" -#include "quicklz.h" -#include "net.h" -#include "premap.h" -#include "gameexec.h" -#include "menus.h" -#include "savegame.h" -#include "anim.h" -#include "demo.h" - -#define ROTATESPRITE_MAX 2048 - -#if KRANDDEBUG -# define GAME_INLINE -# define GAME_STATIC -#else -# define GAME_INLINE inline -# define GAME_STATIC static -#endif - -#ifdef _WIN32 -#include "winlayer.h" -#define WIN32_LEAN_AND_MEAN -#include -#include -extern int32_t G_GetVersionFromWebsite(char *buffer); -#define UPDATEINTERVAL 604800 // 1w -#else -static int32_t usecwd = 0; -#include -#endif /* _WIN32 */ - -int32_t g_quitDeadline = 0; -int32_t g_scriptSanityChecks = 1; - -int32_t g_cameraDistance = 0, g_cameraClock = 0; -static int32_t g_quickExit; -static int32_t g_commandSetup = 0; -int32_t g_noSetup = 0; -static int32_t g_noAutoLoad = 0; -static int32_t g_noSound = 0; -static int32_t g_noMusic = 0; -static char *CommandMap = NULL; -static char *CommandName = NULL; -int32_t g_forceWeaponChoice = 0; - -static struct strllist -{ - struct strllist *next; - char *str; -} -*CommandPaths = NULL, *CommandGrps = NULL; - -char boardfilename[BMAX_PATH] = {0}, currentboardfilename[BMAX_PATH] = {0}; - -static char g_rootDir[BMAX_PATH]; -char g_modDir[BMAX_PATH] = "/"; - - -uint8_t water_pal[768],slime_pal[768],title_pal[768],dre_alms[768],ending_pal[768],*anim_pal; - -uint8_t *basepaltable[BASEPALCOUNT] = { palette, water_pal, slime_pal, dre_alms, title_pal, ending_pal, NULL }; - -static int32_t g_skipDefaultCons = 0; - -int32_t voting = -1; -int32_t vote_map = -1, vote_episode = -1; - -static int32_t g_Debug = 0; -static int32_t g_noLogoAnim = 0; -static int32_t g_noLogo = 0; - -char defaultduke3dgrp[BMAX_PATH] = "duke3d.grp"; -static char defaultduke3ddef[BMAX_PATH] = "duke3d.def"; -static char defaultconfilename[BMAX_PATH] = { "EDUKE.CON" }; - -char *g_grpNamePtr = defaultduke3dgrp; -char *g_defNamePtr = defaultduke3ddef; -char *g_scriptNamePtr = defaultconfilename; -char *g_gameNamePtr = NULL; - -extern int32_t lastvisinc; - -int32_t g_Shareware = 0; -int32_t g_gameType = 0; - -#define MAXUSERQUOTES 6 -int32_t quotebot, quotebotgoal; -static int32_t user_quote_time[MAXUSERQUOTES]; -static char user_quote[MAXUSERQUOTES][178]; -// char typebuflen,typebuf[41]; - -// This was 32 for a while, but I think lowering it to 24 will help things like the Dingoo. -// Ideally, we would look at our memory usage on our most cramped platform and figure out -// how much of that is needed for the underlying OS and things like SDL instead of guessing -static int32_t MAXCACHE1DSIZE = (24*1048576); - -int32_t tempwallptr; - -static int32_t nonsharedtimer; - -int32_t ticrandomseed; - -static void G_DrawCameraText(int16_t i); -GAME_STATIC GAME_INLINE int32_t G_MoveLoop(void); -static void G_DoOrderScreen(void); - -extern void computergetinput(int32_t snum, input_t *syn); - -#define quotepulseshade (sintable[(totalclock<<5)&2047]>>11) - -int32_t althud_numbertile = 2930; -int32_t althud_numberpal = 0; -int32_t althud_shadows = 1; -int32_t althud_flashing = 1; -int32_t hud_glowingquotes = 1; -int32_t hud_showmapname = 1; - -int32_t g_levelTextTime = 0; - -int32_t r_maxfps = 0; -uint32_t g_frameDelay = 0; - -#if defined(RENDERTYPEWIN) && defined(USE_OPENGL) -extern char forcegl; -#endif - -void M32RunScript(const char *s) { UNREFERENCED_PARAMETER(s); }; // needed for linking since it's referenced from build/src/osd.c - -int32_t kopen4loadfrommod(const char *filename, char searchfirst) -{ - static char fn[BMAX_PATH]; - int32_t r; - - Bsprintf(fn,"%s/%s",g_modDir,filename); - r = kopen4load(fn,searchfirst); - if (r < 0) - r = kopen4load(filename,searchfirst); - - return r; -} - -enum gametokens -{ - T_EOF = -2, - T_ERROR = -1, - T_INCLUDE = 0, - T_INTERFACE = 0, - T_LOADGRP = 1, - T_MODE = 1, - T_CACHESIZE = 2, - T_ALLOW = 2, - T_NOAUTOLOAD, - T_MUSIC, - T_SOUND, - T_FILE, - T_ID -}; - -typedef struct -{ - char *text; - int32_t tokenid; -} -tokenlist; - -static int32_t getatoken(scriptfile *sf, const tokenlist *tl, int32_t ntokens) -{ - char *tok; - int32_t i; - - if (!sf) return T_ERROR; - tok = scriptfile_gettoken(sf); - if (!tok) return T_EOF; - - for (i=ntokens-1; i>=0; i--) - { - if (!Bstrcasecmp(tok, tl[i].text)) - return tl[i].tokenid; - } - return T_ERROR; -} - -inline void G_SetStatusBarScale(int32_t sc) -{ - ud.statusbarscale = min(100,max(10,sc)); - G_UpdateScreenArea(); -} - -static inline int32_t sbarx(int32_t x) -{ - if (ud.screen_size == 4 /*|| ud.statusbarmode == 1*/) return scale(x<<16,ud.statusbarscale,100); - return (((320l<<16) - scale(320l<<16,ud.statusbarscale,100)) >> 1) + scale(x<<16,ud.statusbarscale,100); -} - -static inline int32_t sbarxr(int32_t x) -{ - if (ud.screen_size == 4 /*|| ud.statusbarmode == 1*/) return (320l<<16) - scale(x<<16,ud.statusbarscale,100); - return (((320l<<16) - scale(320l<<16,ud.statusbarscale,100)) >> 1) + scale(x<<16,ud.statusbarscale,100); -} - -static inline int32_t sbary(int32_t y) -{ - return ((200l<<16) - scale(200l<<16,ud.statusbarscale,100) + scale(y<<16,ud.statusbarscale,100)); -} - -static inline int32_t sbarsc(int32_t sc) -{ - return scale(sc,ud.statusbarscale,100); -} - -static inline int32_t textsc(int32_t sc) -{ - // prevent ridiculousness to a degree - if (xdim <= 320) return sc; - else if (xdim <= 640) return scale(sc,min(200,ud.textscale),100); - else if (xdim <= 800) return scale(sc,min(300,ud.textscale),100); - else if (xdim <= 1024) return scale(sc,min(350,ud.textscale),100); - return scale(sc,ud.textscale,100); -} - -static void G_PatchStatusBar(int32_t x1, int32_t y1, int32_t x2, int32_t y2) -{ - int32_t scl, tx, ty; - int32_t clx1,cly1,clx2,cly2,clofx,clofy; - - scl = sbarsc(65536); - tx = sbarx(0); - ty = sbary(200-tilesizy[BOTTOMSTATUSBAR]); - - clx1 = scale(scale(x1,xdim,320),ud.statusbarscale,100); - cly1 = scale(scale(y1,ydim,200),ud.statusbarscale,100); - clx2 = scale(scale(x2,xdim,320),ud.statusbarscale,100); - cly2 = scale(scale(y2,ydim,200),ud.statusbarscale,100); - clofx = (xdim - scale(xdim,ud.statusbarscale,100)) >> 1; - clofy = (ydim - scale(ydim,ud.statusbarscale,100)); - -// if (ud.statusbarmode == 0) - rotatesprite(tx,ty,scl,0,BOTTOMSTATUSBAR,4,0,10+16+64,clx1+clofx,cly1+clofy,clx2+clofx-1,cly2+clofy-1); -// else rotatesprite(tx,ty,scl,0,BOTTOMSTATUSBAR,4,0,10+16+64,clx1,cly1,clx2+clofx-1,cly2+clofy-1); -} - -void P_SetGamePalette(DukePlayer_t *player, uint8_t palid, int32_t set) -{ - if (palid >= BASEPALCOUNT) - palid = BASEPAL; - - if (player != g_player[screenpeek].ps) - { - player->palette = palid; - return; - } - - player->palette = palid; - - setbrightness(ud.brightness>>2, palid, set); -} - -int32_t G_PrintGameText(int32_t f, int32_t tile, int32_t x, int32_t y, const char *t, - int32_t s, int32_t p, int32_t o, - int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t z) -{ - int32_t ac; - char centre; - int32_t squishtext = ((f&2) != 0); - int32_t shift = 16, widthx = 320; - int32_t ox, oy, origx = x, origy = y; - - if (t == NULL) - return -1; - - if (o & ROTATESPRITE_MAX) - { - widthx = 320<<16; - shift = 0; - } - - if ((centre = (x == (widthx>>1)))) - { - const char *oldt = t; - int32_t newx = 0; - - do - { - int32_t i; - - if (*t == 32) - { - newx += ((((f & 8) ? 8 : 5) - squishtext) * z)>>16; - continue; - } - - if (*t == '^' && isdigit(*(t+1))) - { - t += 1 + isdigit(*(t+2)); - continue; - } - - ac = *t - '!' + tile; - - if (ac < tile || ac > (tile + 93)) break; - - newx += i = ((((f & 8) ? 8 : tilesizx[ac]) - squishtext) * z)>>16; - - if (*t >= '0' && *t <= '9') - newx -= i - ((8 * z)>>16); - } - while (*(++t)); - - t = oldt; - - x = (f & 4) ? - (xres>>1)-textsc(newx>>1) : - (widthx>>1)-((o & ROTATESPRITE_MAX)?newx<<15:newx>>1); - } - - ox = x; - oy = y; - - do - { - int32_t i; - - if (*t == 32) - { - x += ((((f & 8) ? 8 : 5) - squishtext) * z)>>16; - continue; - } - - if (*t == '^' && isdigit(*(t+1))) - { - char smallbuf[4]; - - if (!isdigit(*(++t+1))) - { - smallbuf[0] = *(t); - smallbuf[1] = '\0'; - p = atoi(smallbuf); - continue; - } - - smallbuf[0] = *(t++); - smallbuf[1] = *(t); - smallbuf[2] = '\0'; - p = atoi(smallbuf); - continue; - } - - ac = *t - '!' + tile; - - if (ac < tile || ac > (tile + 93)) - break; - - if (o&ROTATESPRITE_MAX) - { - ox = x += (x-ox)<<16; - oy = y += (y-oy)<<16; - } - - if (f&4) - rotatesprite(textsc(x<>16 : - ((tilesizx[ac] - squishtext) * z)>>16; - - if ((*t >= '0' && *t <= '9')) - x -= i - ((8 * z)>>16); - - if ((o&ROTATESPRITE_MAX) == 0) // wrapping long strings doesn't work for precise coordinates due to overflow - { - if (((f&4) ? textsc(x) : x) > (ud.config.ScreenWidth - USERQUOTE_RIGHTOFFSET)) - x = origx, y += (8 * z)>>16; - } - } - while (*(++t)); - - return x; -} - -int32_t G_GameTextLen(int32_t x,const char *t) -{ - int32_t ac; - - if (t == NULL) - return -1; - - do - { - if (*t == 32) - { - x+=5; - continue; - } - - ac = *t - '!' + STARTALPHANUM; - - if (ac < STARTALPHANUM || ac > (STARTALPHANUM + 93)) - break; - - x += (*t >= '0' && *t <= '9') ? 8 : tilesizx[ac]; - } - while (*(++t)); - - return (textsc(x)); -} - -inline int32_t mpgametext(int32_t y,const char *t,int32_t s,int32_t dabits) -{ - return(G_PrintGameText(4,STARTALPHANUM, 5,y,t,s,0,dabits,0, 0, xdim-1, ydim-1, 65536)); -} - -int32_t minitext_(int32_t x,int32_t y,const char *t,int32_t s,int32_t p,int32_t sb) -{ - int32_t ac; - char ch, cmode; - - cmode = (sb&ROTATESPRITE_MAX)!=0; - sb &= ROTATESPRITE_MAX-1; - - do - { - if (*t == '^' && isdigit(*(t+1))) - { - char smallbuf[4]; - if (!isdigit(*(++t+1))) - { - smallbuf[0] = *(t); - smallbuf[1] = '\0'; - p = atoi(smallbuf); - continue; - } - smallbuf[0] = *(t++); - smallbuf[1] = *(t); - smallbuf[2] = '\0'; - p = atoi(smallbuf); - continue; - } - ch = Btoupper(*t); - if (ch == 32) - { - x+=5; - continue; - } - else ac = ch - '!' + MINIFONT; - - if (cmode) rotatesprite(sbarx(x),sbary(y),sbarsc(65536L),0,ac,s,p,sb,0,0,xdim-1,ydim-1); - else rotatesprite(x<<16,y<<16,65536L,0,ac,s,p,sb,0,0,xdim-1,ydim-1); - x += 4; // tilesizx[ac]+1; - - } - while (*(++t)); - - return (x); -} - -void G_AddUserQuote(const char *daquote) -{ - int32_t i; - - for (i=MAXUSERQUOTES-1; i>0; i--) - { - Bstrcpy(user_quote[i],user_quote[i-1]); - user_quote_time[i] = user_quote_time[i-1]; - } - Bstrcpy(user_quote[0],daquote); - OSD_Printf("%s\n",daquote); - - user_quote_time[0] = ud.msgdisptime; - pub = NUMPAGES; -} - -void G_HandleSpecialKeys(void) -{ - // we need CONTROL_GetInput in order to pick up joystick button presses - if (CONTROL_Started && !(g_player[myconnectindex].ps->gm & MODE_GAME)) - { - ControlInfo noshareinfo; - CONTROL_GetInput(&noshareinfo); - } - -// CONTROL_ProcessBinds(); - - if (g_networkMode != NET_DEDICATED_SERVER && ALT_IS_PRESSED && KB_KeyPressed(sc_Enter)) - { - if (setgamemode(!ud.config.ScreenMode,ud.config.ScreenWidth,ud.config.ScreenHeight,ud.config.ScreenBPP)) - { - OSD_Printf(OSD_ERROR "Failed setting fullscreen video mode.\n"); - if (setgamemode(ud.config.ScreenMode, ud.config.ScreenWidth, ud.config.ScreenHeight, ud.config.ScreenBPP)) - G_GameExit("Failed to recover from failure to set fullscreen video mode.\n"); - } - else ud.config.ScreenMode = !ud.config.ScreenMode; - KB_ClearKeyDown(sc_Enter); - g_restorePalette = 1; - G_UpdateScreenArea(); - } - - if (KB_UnBoundKeyPressed(sc_F12)) - { - KB_ClearKeyDown(sc_F12); - screencapture("duke0000.tga",0); - P_DoQuote(QUOTE_SCREEN_SAVED,g_player[myconnectindex].ps); - } - - // only dispatch commands here when not in a game - if (!(g_player[myconnectindex].ps->gm & MODE_GAME)) - OSD_DispatchQueued(); - - if (g_quickExit == 0 && KB_KeyPressed(sc_LeftControl) && KB_KeyPressed(sc_LeftAlt) && (KB_KeyPressed(sc_Delete)||KB_KeyPressed(sc_End))) - { - g_quickExit = 1; - G_GameExit("Quick Exit."); - } -} - -void G_GameQuit(void) -{ - if (numplayers < 2) - G_GameExit(" "); - - if (g_gameQuit == 0) - { - g_gameQuit = 1; - g_quitDeadline = totalclock+120; - g_netDisconnect = 1; - } - - if ((totalclock > g_quitDeadline) && (g_gameQuit == 1)) - G_GameExit("Timed out."); -} - -extern int32_t cacnum; -extern cactype cac[]; - -static void G_ShowCacheLocks(void) -{ - int16_t i,k; - - k = 0; - for (i=cacnum-1; i>=0; i--) - if ((*cac[i].lock) >= 200) - { - Bsprintf(tempbuf,"Locked- %d: Leng:%d, Lock:%d",i,cac[i].leng,*cac[i].lock); - printext256(0L,k,31,-1,tempbuf,1); - k += 6; - } - - k += 6; - - for (i=10; i>=0; i--) - if (rts_lumplockbyte[i] >= 200) - { - Bsprintf(tempbuf,"RTS Locked %d:",i); - printext256(0L,k,31,-1,tempbuf,1); - k += 6; - } -} - -int32_t A_CheckInventorySprite(spritetype *s) -{ - switch (DynamicTileMap[s->picnum]) - { - case FIRSTAID__STATIC: - case STEROIDS__STATIC: - case HEATSENSOR__STATIC: - case BOOTS__STATIC: - case JETPACK__STATIC: - case HOLODUKE__STATIC: - case AIRTANK__STATIC: - return 1; - default: - return 0; - } -} - -void G_DrawTile(int32_t x, int32_t y, int32_t tilenum, int32_t shade, int32_t orientation) -{ - int32_t p = sector[g_player[screenpeek].ps->cursectnum].floorpal, a = 0; - - if (orientation&4) - a = 1024; - - rotatesprite((orientation&ROTATESPRITE_MAX)?x:(x<<16),(orientation&ROTATESPRITE_MAX)?y:(y<<16), - 65536L,a,tilenum,shade,p,2|orientation,windowx1,windowy1,windowx2,windowy2); -} - -void G_DrawTilePal(int32_t x, int32_t y, int32_t tilenum, int32_t shade, int32_t orientation, int32_t p) -{ - int32_t a = 0; - - if (orientation&4) - a = 1024; - - rotatesprite((orientation&ROTATESPRITE_MAX)?x:(x<<16),(orientation&ROTATESPRITE_MAX)?y:(y<<16), - 65536L,a,tilenum,shade,p,2|orientation,windowx1,windowy1,windowx2,windowy2); -} - -void G_DrawTileSmall(int32_t x, int32_t y, int32_t tilenum, int32_t shade, int32_t orientation) -{ - int32_t p = sector[g_player[screenpeek].ps->cursectnum].floorpal, a = 0; - - if (orientation&4) - a = 1024; - - rotatesprite((orientation&ROTATESPRITE_MAX)?x:(x<<16),(orientation&ROTATESPRITE_MAX)?y:(y<<16), - 32768L,a,tilenum,shade,p,2|orientation,windowx1,windowy1,windowx2,windowy2); -} - -void G_DrawTilePalSmall(int32_t x, int32_t y, int32_t tilenum, int32_t shade, int32_t orientation, int32_t p) -{ - int32_t a = 0; - - if (orientation&4) - a = 1024; - - rotatesprite((orientation&ROTATESPRITE_MAX)?x:(x<<16),(orientation&ROTATESPRITE_MAX)?y:(y<<16), - 32768L,a,tilenum,shade,p,2|orientation,windowx1,windowy1,windowx2,windowy2); -} - -#define POLYMOSTTRANS (1) -#define POLYMOSTTRANS2 (1|32) - -// draws inventory numbers in the HUD for both the full and mini status bars -static void G_DrawInvNum(int32_t x,int32_t y,char num1,char ha,int32_t sbits) -{ - char dabuf[80] = {0}; - int32_t shd = (x < 0); - - if (shd) x = -x; - - Bsprintf(dabuf,"%d",num1); - if (num1 > 99) - { - if (shd && ud.screen_size == 4 && getrendermode() >= 3 && althud_shadows) - { - rotatesprite(sbarx(x-4+1),sbary(y+1),sbarsc(65536L),0,THREEBYFIVE+dabuf[0]-'0',ha,4,POLYMOSTTRANS|sbits,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x+1),sbary(y+1),sbarsc(65536L),0,THREEBYFIVE+dabuf[1]-'0',ha,4,POLYMOSTTRANS|sbits,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x+4+1),sbary(y+1),sbarsc(65536L),0,THREEBYFIVE+dabuf[2]-'0',ha,4,POLYMOSTTRANS|sbits,0,0,xdim-1,ydim-1); - } - rotatesprite(sbarx(x-4),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[0]-'0',ha,0,sbits,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[1]-'0',ha,0,sbits,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x+4),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[2]-'0',ha,0,sbits,0,0,xdim-1,ydim-1); - return; - } - if (num1 > 9) - { - if (shd && ud.screen_size == 4 && getrendermode() >= 3 && althud_shadows) - { - rotatesprite(sbarx(x+1),sbary(y+1),sbarsc(65536L),0,THREEBYFIVE+dabuf[0]-'0',ha,4,POLYMOSTTRANS|sbits,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x+4+1),sbary(y+1),sbarsc(65536L),0,THREEBYFIVE+dabuf[1]-'0',ha,4,POLYMOSTTRANS|sbits,0,0,xdim-1,ydim-1); - } - - rotatesprite(sbarx(x),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[0]-'0',ha,0,sbits,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x+4),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[1]-'0',ha,0,sbits,0,0,xdim-1,ydim-1); - return; - } - rotatesprite(sbarx(x+4+1),sbary(y+1),sbarsc(65536L),0,THREEBYFIVE+dabuf[0]-'0',ha,4,sbits,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x+4),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[0]-'0',ha,0,sbits,0,0,xdim-1,ydim-1); -} - -static void G_DrawWeapNum(int16_t ind,int32_t x,int32_t y,int32_t num1, int32_t num2,int32_t ha) -{ - char dabuf[80] = {0}; - - rotatesprite(sbarx(x-7),sbary(y),sbarsc(65536L),0,THREEBYFIVE+ind+1,ha-10,7,10,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x-3),sbary(y),sbarsc(65536L),0,THREEBYFIVE+10,ha,0,10,0,0,xdim-1,ydim-1); - - if (VOLUMEONE && (ind > HANDBOMB_WEAPON || ind < 0)) - { - minitextshade(x+1,y-4,"ORDER",20,11,2+8+16+ROTATESPRITE_MAX); - return; - } - - rotatesprite(sbarx(x+9),sbary(y),sbarsc(65536L),0,THREEBYFIVE+11,ha,0,10,0,0,xdim-1,ydim-1); - - if (num1 > 99) num1 = 99; - if (num2 > 99) num2 = 99; - - Bsprintf(dabuf,"%d",num1); - if (num1 > 9) - { - rotatesprite(sbarx(x),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[0]-'0',ha,0,10,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x+4),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[1]-'0',ha,0,10,0,0,xdim-1,ydim-1); - } - else rotatesprite(sbarx(x+4),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[0]-'0',ha,0,10,0,0,xdim-1,ydim-1); - - Bsprintf(dabuf,"%d",num2); - if (num2 > 9) - { - rotatesprite(sbarx(x+13),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[0]-'0',ha,0,10,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x+17),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[1]-'0',ha,0,10,0,0,xdim-1,ydim-1); - return; - } - rotatesprite(sbarx(x+13),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[0]-'0',ha,0,10,0,0,xdim-1,ydim-1); -} - -static void G_DrawWeapNum2(char ind,int32_t x,int32_t y,int32_t num1, int32_t num2,char ha) -{ - char dabuf[80] = {0}; - - rotatesprite(sbarx(x-7),sbary(y),sbarsc(65536L),0,THREEBYFIVE+ind+1,ha-10,7,10,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x-4),sbary(y),sbarsc(65536L),0,THREEBYFIVE+10,ha,0,10,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x+13),sbary(y),sbarsc(65536L),0,THREEBYFIVE+11,ha,0,10,0,0,xdim-1,ydim-1); - - Bsprintf(dabuf,"%d",num1); - if (num1 > 99) - { - rotatesprite(sbarx(x),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[0]-'0',ha,0,10,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x+4),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[1]-'0',ha,0,10,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x+8),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[2]-'0',ha,0,10,0,0,xdim-1,ydim-1); - } - else if (num1 > 9) - { - rotatesprite(sbarx(x+4),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[0]-'0',ha,0,10,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x+8),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[1]-'0',ha,0,10,0,0,xdim-1,ydim-1); - } - else rotatesprite(sbarx(x+8),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[0]-'0',ha,0,10,0,0,xdim-1,ydim-1); - - Bsprintf(dabuf,"%d",num2); - if (num2 > 99) - { - rotatesprite(sbarx(x+17),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[0]-'0',ha,0,10,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x+21),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[1]-'0',ha,0,10,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x+25),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[2]-'0',ha,0,10,0,0,xdim-1,ydim-1); - } - else if (num2 > 9) - { - rotatesprite(sbarx(x+17),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[0]-'0',ha,0,10,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(x+21),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[1]-'0',ha,0,10,0,0,xdim-1,ydim-1); - return; - } - else - rotatesprite(sbarx(x+25),sbary(y),sbarsc(65536L),0,THREEBYFIVE+dabuf[0]-'0',ha,0,10,0,0,xdim-1,ydim-1); -} - -static void G_DrawWeapAmounts(DukePlayer_t *p,int32_t x,int32_t y,int32_t u) -{ - int32_t cw = p->curr_weapon; - - if (u&4) - { - if (u != -1) G_PatchStatusBar(88,178,88+37,178+6); //original code: (96,178,96+12,178+6); - G_DrawWeapNum2(PISTOL_WEAPON,x,y, - p->ammo_amount[PISTOL_WEAPON],p->max_ammo_amount[PISTOL_WEAPON], - 12-20*(cw == PISTOL_WEAPON)); - } - if (u&8) - { - if (u != -1) G_PatchStatusBar(88,184,88+37,184+6); //original code: (96,184,96+12,184+6); - G_DrawWeapNum2(SHOTGUN_WEAPON,x,y+6, - p->ammo_amount[SHOTGUN_WEAPON],p->max_ammo_amount[SHOTGUN_WEAPON], - (((p->gotweapon & (1<ammo_amount[CHAINGUN_WEAPON],p->max_ammo_amount[CHAINGUN_WEAPON], - (((p->gotweapon & (1<ammo_amount[RPG_WEAPON],p->max_ammo_amount[RPG_WEAPON], - (((p->gotweapon & (1<ammo_amount[HANDBOMB_WEAPON],p->max_ammo_amount[HANDBOMB_WEAPON], - (((!p->ammo_amount[HANDBOMB_WEAPON])|((p->gotweapon & (1<subweapon&(1<ammo_amount[GROW_WEAPON],p->max_ammo_amount[GROW_WEAPON], - (((p->gotweapon & (1<ammo_amount[SHRINKER_WEAPON],p->max_ammo_amount[SHRINKER_WEAPON], - (((p->gotweapon & (1<ammo_amount[DEVISTATOR_WEAPON],p->max_ammo_amount[DEVISTATOR_WEAPON], - (((p->gotweapon & (1<ammo_amount[TRIPBOMB_WEAPON],p->max_ammo_amount[TRIPBOMB_WEAPON], - (((p->gotweapon & (1<ammo_amount[FREEZE_WEAPON],p->max_ammo_amount[FREEZE_WEAPON], - (((p->gotweapon & (1<=0; k--) - { - p = DIGITALNUM+*(b+k)-'0'; - j += tilesizx[p]+1; - } - c = x-(j>>1); - - j = 0; - for (k=0; k=0; k--) - { - p = starttile+*(b+k)-'0'; - j += ((1+tilesizx[p])*z)>>16; - } - if (cs&ROTATESPRITE_MAX) j<<=16; - c = x-(j>>1); - - j = 0; - for (k=0; k>((cs&ROTATESPRITE_MAX)?0:16)); - } -} - -static void G_DrawAltDigiNum(int32_t x,int32_t y,int32_t n,char s,int32_t cs) -{ - int32_t i, j = 0, k, p, c; - char b[10]; - int32_t rev = (x < 0); - int32_t shd = (y < 0); - - if (rev) x = -x; - if (shd) y = -y; - - Bsnprintf(b,10,"%d",n); - i = Bstrlen(b); - - for (k=i-1; k>=0; k--) - { - p = althud_numbertile+*(b+k)-'0'; - j += tilesizx[p]+1; - } - c = x-(j>>1); - - if (rev) - { -// j = 0; - for (k=0; k= 3 && althud_shadows) - rotatesprite(sbarxr(c+j-1),sbary(y+1),sbarsc(65536L),0,p,s,4,cs|POLYMOSTTRANS2,0,0,xdim-1,ydim-1); - rotatesprite(sbarxr(c+j),sbary(y),sbarsc(65536L),0,p,s,althud_numberpal,cs,0,0,xdim-1,ydim-1); - j -= tilesizx[p]+1; - } - return; - } - j = 0; - for (k=0; k= 3 && althud_shadows) - rotatesprite(sbarx(c+j+1),sbary(y+1),sbarsc(65536L),0,p,s,4,cs|POLYMOSTTRANS2,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(c+j),sbary(y),sbarsc(65536L),0,p,s,althud_numberpal,cs,0,0,xdim-1,ydim-1); - j += tilesizx[p]+1; - } -} - -static void G_DrawInventory(DukePlayer_t *p) -{ - int32_t n, j = 0, xoff = 0, y; - - n = (p->inv_amount[GET_JETPACK] > 0)<<3; - if (n&8) j++; - n |= (p->inv_amount[GET_SCUBA] > 0)<<5; - if (n&32) j++; - n |= (p->inv_amount[GET_STEROIDS] > 0)<<1; - if (n&2) j++; - n |= (p->inv_amount[GET_HOLODUKE] > 0)<<2; - if (n&4) j++; - n |= (p->inv_amount[GET_FIRSTAID] > 0); - if (n&1) j++; - n |= (p->inv_amount[GET_HEATS] > 0)<<4; - if (n&16) j++; - n |= (p->inv_amount[GET_BOOTS] > 0)<<6; - if (n&64) j++; - - xoff = 160-(j*11); - - j = 0; - - y = 154; - - while (j <= 9) - { - if (n&(1<inven_icon == j+1) - rotatesprite((xoff-2)<<16,(y+19)<<16,65536L,1024,ARROW,-32,0,2+16,windowx1,windowy1,windowx2,windowy2); - } - - j++; - } -} - -void G_DrawFrags(void) -{ - int32_t i, j = 0; - - TRAVERSE_CONNECT(i) - if (i > j) j = i; - - rotatesprite(0,0,65600L,0,FRAGBAR,0,0,2+8+16+64,0,0,xdim-1,ydim-1); - if (j >= 4) rotatesprite(319,(8)<<16,65600L,0,FRAGBAR,0,0,10+16+64,0,0,xdim-1,ydim-1); - if (j >= 8) rotatesprite(319,(16)<<16,65600L,0,FRAGBAR,0,0,10+16+64,0,0,xdim-1,ydim-1); - if (j >= 12) rotatesprite(319,(24)<<16,65600L,0,FRAGBAR,0,0,10+16+64,0,0,xdim-1,ydim-1); - - TRAVERSE_CONNECT(i) - { - minitext(21+(73*(i&3)),2+((i&28)<<1),&g_player[i].user_name[0],/*sprite[g_player[i].ps->i].pal*/g_player[i].ps->palookup,2+8+16); - Bsprintf(tempbuf,"%d",g_player[i].ps->frag-g_player[i].ps->fraggedself); - minitext(17+50+(73*(i&3)),2+((i&28)<<1),tempbuf,/*sprite[g_player[i].ps->i].pal*/g_player[i].ps->palookup,2+8+16); - } -} - -#define SBY (200-tilesizy[BOTTOMSTATUSBAR]) - -static void G_DrawStatusBar(int32_t snum) -{ - DukePlayer_t *p = g_player[snum].ps; - int32_t i, j, o, ss = ud.screen_size, u; - int32_t permbit = 0; - - if (ss < 4) return; - - if (getrendermode() >= 3) pus = NUMPAGES; // JBF 20040101: always redraw in GL - - if ((g_netServer || (g_netServer || ud.multimode > 1)) && (GametypeFlags[ud.coop] & GAMETYPE_FRAGBAR)) - { - if (pus) - G_DrawFrags(); - else - { - TRAVERSE_CONNECT(i) - if (g_player[i].ps->frag != sbar.frag[i]) - { - G_DrawFrags(); - break; - } - - } - TRAVERSE_CONNECT(i) - if (i != myconnectindex) - sbar.frag[i] = g_player[i].ps->frag; - } - - if (ss == 4) //DRAW MINI STATUS BAR: - { - if (ud.althud) // althud - { - static int32_t ammo_sprites[MAX_WEAPONS]; - - if (!ammo_sprites[0]) - { - /* this looks stupid but it lets us initialize static memory to dynamic values - these values can be changed from the CONs with dynamic tile remapping - but we don't want to have to recreate the values in memory every time - the HUD is drawn */ - - int32_t asprites[MAX_WEAPONS] = { BOOTS, AMMO, SHOTGUNAMMO, - BATTERYAMMO, RPGAMMO, HBOMBAMMO, CRYSTALAMMO, DEVISTATORAMMO, - TRIPBOMBSPRITE, FREEZEAMMO+1, HBOMBAMMO, GROWAMMO - }; - Bmemcpy(ammo_sprites,asprites,sizeof(ammo_sprites)); - } - -// rotatesprite(sbarx(5+1),sbary(200-25+1),sbarsc(49152L),0,SIXPAK,0,4,10+16+1+32,0,0,xdim-1,ydim-1); -// rotatesprite(sbarx(5),sbary(200-25),sbarsc(49152L),0,SIXPAK,0,0,10+16,0,0,xdim-1,ydim-1); - if (getrendermode() >= 3 && althud_shadows) - rotatesprite(sbarx(2+1),sbary(200-21+1),sbarsc(49152L),0,COLA,0,4,10+16+256+POLYMOSTTRANS2,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(2),sbary(200-21),sbarsc(49152L),0,COLA,0,0,10+16+256,0,0,xdim-1,ydim-1); - - if (sprite[p->i].pal == 1 && p->last_extra < 2) - G_DrawAltDigiNum(40,-(200-22),1,-16,10+16+256); - else if (!althud_flashing || p->last_extra > (p->max_player_health>>2) || totalclock&32) - { - int32_t s = -8; - if (althud_flashing && p->last_extra > p->max_player_health) - s += (sintable[(totalclock<<5)&2047]>>10); - G_DrawAltDigiNum(40,-(200-22),p->last_extra,s,10+16+256); - } - - if (getrendermode() >= 3 && althud_shadows) - rotatesprite(sbarx(62+1),sbary(200-25+1),sbarsc(49152L),0,SHIELD,0,4,10+16+POLYMOSTTRANS2+256,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(62),sbary(200-25),sbarsc(49152L),0,SHIELD,0,0,10+16+256,0,0,xdim-1,ydim-1); - - { - int32_t lAmount=Gv_GetVarByLabel("PLR_MORALE",-1, p->i, snum); - if (lAmount == -1) lAmount = p->inv_amount[GET_SHIELD]; - G_DrawAltDigiNum(105,-(200-22),lAmount,-16,10+16+256); - } - - if (getrendermode() >= 3 && althud_shadows) - { - if (p->got_access&1) rotatesprite(sbarxr(39-1),sbary(200-43+1),sbarsc(32768),0,ACCESSCARD,0,4,10+16+POLYMOSTTRANS2+512,0,0,xdim-1,ydim-1); - if (p->got_access&4) rotatesprite(sbarxr(34-1),sbary(200-41+1),sbarsc(32768),0,ACCESSCARD,0,4,10+16+POLYMOSTTRANS2+512,0,0,xdim-1,ydim-1); - if (p->got_access&2) rotatesprite(sbarxr(29-1),sbary(200-39+1),sbarsc(32768),0,ACCESSCARD,0,4,10+16+POLYMOSTTRANS2+512,0,0,xdim-1,ydim-1); - } - - if (p->got_access&1) rotatesprite(sbarxr(39),sbary(200-43),sbarsc(32768),0,ACCESSCARD,0,0,10+16+512,0,0,xdim-1,ydim-1); - if (p->got_access&4) rotatesprite(sbarxr(34),sbary(200-41),sbarsc(32768),0,ACCESSCARD,0,23,10+16+512,0,0,xdim-1,ydim-1); - if (p->got_access&2) rotatesprite(sbarxr(29),sbary(200-39),sbarsc(32768),0,ACCESSCARD,0,21,10+16+512,0,0,xdim-1,ydim-1); - - i = (p->curr_weapon == PISTOL_WEAPON) ? 16384 : 32768; - - if (getrendermode() >= 3 && althud_shadows) - rotatesprite(sbarxr(57-1),sbary(200-15+1),sbarsc(i),0,ammo_sprites[p->curr_weapon],0,4,10+POLYMOSTTRANS2+512,0,0,xdim-1,ydim-1); - rotatesprite(sbarxr(57),sbary(200-15),sbarsc(i),0,ammo_sprites[p->curr_weapon],0,0,10+512,0,0,xdim-1,ydim-1); - - if (p->curr_weapon == HANDREMOTE_WEAPON) i = HANDBOMB_WEAPON; - else i = p->curr_weapon; - - if (p->curr_weapon != KNEE_WEAPON && - (!althud_flashing || totalclock&32 || p->ammo_amount[i] > (p->max_ammo_amount[i]/10))) - G_DrawAltDigiNum(-20,-(200-22),p->ammo_amount[i],-16,10+16+512); - - o = 102; - permbit = 0; - - if (p->inven_icon) - { - switch (p->inven_icon) - { - case 1: - i = FIRSTAID_ICON; - break; - case 2: - i = STEROIDS_ICON; - break; - case 3: - i = HOLODUKE_ICON; - break; - case 4: - i = JETPACK_ICON; - break; - case 5: - i = HEAT_ICON; - break; - case 6: - i = AIRTANK_ICON; - break; - case 7: - i = BOOT_ICON; - break; - default: - i = -1; - } - if (i >= 0) - { - if (getrendermode() >= 3 && althud_shadows) - rotatesprite(sbarx(231-o+1),sbary(200-21-2+1),sbarsc(65536L),0,i,0,4,10+16+permbit+POLYMOSTTRANS2+256,0,0,xdim-1,ydim-1); - rotatesprite(sbarx(231-o),sbary(200-21-2),sbarsc(65536L),0,i,0,0,10+16+permbit+256,0,0,xdim-1,ydim-1); - } - - if (getrendermode() >= 3 && althud_shadows) - minitext(292-30-o+1,190-3+1,"%",4,POLYMOSTTRANS+10+16+permbit+256 + ROTATESPRITE_MAX); - minitext(292-30-o,190-3,"%",6,10+16+permbit+256 + ROTATESPRITE_MAX); - - j = 0x80000000; - switch (p->inven_icon) - { - case 1: - i = p->inv_amount[GET_FIRSTAID]; - break; - case 2: - i = ((p->inv_amount[GET_STEROIDS]+3)>>2); - break; - case 3: - i = ((p->inv_amount[GET_HOLODUKE]+15)/24); - j = p->holoduke_on; - break; - case 4: - i = ((p->inv_amount[GET_JETPACK]+15)>>4); - j = p->jetpack_on; - break; - case 5: - i = p->inv_amount[GET_HEATS]/12; - j = p->heat_on; - break; - case 6: - i = ((p->inv_amount[GET_SCUBA]+63)>>6); - break; - case 7: - i = (p->inv_amount[GET_BOOTS]>>1); - break; - } - G_DrawInvNum(-(284-30-o),200-6-3,(uint8_t)i,0,10+permbit+256); - if (j > 0) - { - if (getrendermode() >= 3 && althud_shadows) - minitext(288-30-o+1,180-3+1,"ON",4,POLYMOSTTRANS+10+16+permbit+256 + ROTATESPRITE_MAX); - minitext(288-30-o,180-3,"ON",0,10+16+permbit+256 + ROTATESPRITE_MAX); - } - else if ((uint32_t)j != 0x80000000) - { - if (getrendermode() >= 3 && althud_shadows) - minitext(284-30-o+1,180-3+1,"OFF",4,POLYMOSTTRANS+10+16+permbit+256 + ROTATESPRITE_MAX); - minitext(284-30-o,180-3,"OFF",2,10+16+permbit+256 + ROTATESPRITE_MAX); - } - - if (p->inven_icon >= 6) - { - if (getrendermode() >= 3 && althud_shadows) - minitext(284-35-o+1,180-3+1,"AUTO",4,POLYMOSTTRANS+10+16+permbit+256 + ROTATESPRITE_MAX); - minitext(284-35-o,180-3,"AUTO",2,10+16+permbit+256 + ROTATESPRITE_MAX); - } - } - return; - } - - rotatesprite(sbarx(5),sbary(200-28),sbarsc(65536L),0,HEALTHBOX,0,21,10+16+256,0,0,xdim-1,ydim-1); - if (p->inven_icon) - rotatesprite(sbarx(69),sbary(200-30),sbarsc(65536L),0,INVENTORYBOX,0,21,10+16+256,0,0,xdim-1,ydim-1); - - if (sprite[p->i].pal == 1 && p->last_extra < 2) // frozen - G_DrawDigiNum(20,200-17,1,-16,10+16+256); - else G_DrawDigiNum(20,200-17,p->last_extra,-16,10+16+256); - - rotatesprite(sbarx(37),sbary(200-28),sbarsc(65536L),0,AMMOBOX,0,21,10+16+256,0,0,xdim-1,ydim-1); - - if (p->curr_weapon == HANDREMOTE_WEAPON) i = HANDBOMB_WEAPON; - else i = p->curr_weapon; - G_DrawDigiNum(53,200-17,p->ammo_amount[i],-16,10+16+256); - - o = 158; - permbit = 0; - if (p->inven_icon) - { - switch (p->inven_icon) - { - case 1: - i = FIRSTAID_ICON; - break; - case 2: - i = STEROIDS_ICON; - break; - case 3: - i = HOLODUKE_ICON; - break; - case 4: - i = JETPACK_ICON; - break; - case 5: - i = HEAT_ICON; - break; - case 6: - i = AIRTANK_ICON; - break; - case 7: - i = BOOT_ICON; - break; - default: - i = -1; - } - if (i >= 0) rotatesprite(sbarx(231-o),sbary(200-21),sbarsc(65536L),0,i,0,0,10+16+permbit+256,0,0,xdim-1,ydim-1); - - minitext(292-30-o,190,"%",6,10+16+permbit+256 + ROTATESPRITE_MAX); - - j = 0x80000000; - switch (p->inven_icon) - { - case 1: - i = p->inv_amount[GET_FIRSTAID]; - break; - case 2: - i = ((p->inv_amount[GET_STEROIDS]+3)>>2); - break; - case 3: - i = ((p->inv_amount[GET_HOLODUKE]+15)/24); - j = p->holoduke_on; - break; - case 4: - i = ((p->inv_amount[GET_JETPACK]+15)>>4); - j = p->jetpack_on; - break; - case 5: - i = p->inv_amount[GET_HEATS]/12; - j = p->heat_on; - break; - case 6: - i = ((p->inv_amount[GET_SCUBA]+63)>>6); - break; - case 7: - i = (p->inv_amount[GET_BOOTS]>>1); - break; - } - G_DrawInvNum(284-30-o,200-6,(uint8_t)i,0,10+permbit+256); - if (j > 0) minitext(288-30-o,180,"ON",0,10+16+permbit+256 + ROTATESPRITE_MAX); - else if ((uint32_t)j != 0x80000000) minitext(284-30-o,180,"OFF",2,10+16+permbit+256 + ROTATESPRITE_MAX); - if (p->inven_icon >= 6) minitext(284-35-o,180,"AUTO",2,10+16+permbit+256 + ROTATESPRITE_MAX); - } - return; - } - - //DRAW/UPDATE FULL STATUS BAR: - - if (pus) - { - pus = 0; - u = -1; - } - else u = 0; - - if (sbar.frag[myconnectindex] != p->frag) - { - sbar.frag[myconnectindex] = p->frag; - u |= 32768; - } - if (sbar.got_access != p->got_access) - { - sbar.got_access = p->got_access; - u |= 16384; - } - - if (sbar.last_extra != p->last_extra) - { - sbar.last_extra = p->last_extra; - u |= 1; - } - - { - int32_t lAmount=Gv_GetVarByLabel("PLR_MORALE",-1, p->i, snum); - if (lAmount == -1) - { - if (sbar.inv_amount[GET_SHIELD] != p->inv_amount[GET_SHIELD]) - { - sbar.inv_amount[GET_SHIELD] = p->inv_amount[GET_SHIELD]; - u |= 2; - } - - } - else - { - if (sbar.inv_amount[GET_SHIELD] != lAmount) - { - sbar.inv_amount[GET_SHIELD] = lAmount; - u |= 2; - } - - } - } - - if (sbar.curr_weapon != p->curr_weapon) - { - sbar.curr_weapon = p->curr_weapon; - u |= (4+8+16+32+64+128+256+512+1024+65536L); - } - - for (i=1; iammo_amount[i]) - { - sbar.ammo_amount[i] = p->ammo_amount[i]; - if (i < 9) - u |= ((2<gotweapon & (1<gotweapon & (1<inven_icon) - { - sbar.inven_icon = p->inven_icon; - u |= (2048+4096+8192); - } - if (sbar.holoduke_on != p->holoduke_on) - { - sbar.holoduke_on = p->holoduke_on; - u |= (4096+8192); - } - if (sbar.jetpack_on != p->jetpack_on) - { - sbar.jetpack_on = p->jetpack_on; - u |= (4096+8192); - } - if (sbar.heat_on != p->heat_on) - { - sbar.heat_on = p->heat_on; - u |= (4096+8192); - } - if (sbar.inv_amount[GET_FIRSTAID] != p->inv_amount[GET_FIRSTAID]) - { - sbar.inv_amount[GET_FIRSTAID] = p->inv_amount[GET_FIRSTAID]; - u |= 8192; - } - if (sbar.inv_amount[GET_STEROIDS] != p->inv_amount[GET_STEROIDS]) - { - sbar.inv_amount[GET_STEROIDS] = p->inv_amount[GET_STEROIDS]; - u |= 8192; - } - if (sbar.inv_amount[GET_HOLODUKE] != p->inv_amount[GET_HOLODUKE]) - { - sbar.inv_amount[GET_HOLODUKE] = p->inv_amount[GET_HOLODUKE]; - u |= 8192; - } - if (sbar.inv_amount[GET_JETPACK] != p->inv_amount[GET_JETPACK]) - { - sbar.inv_amount[GET_JETPACK] = p->inv_amount[GET_JETPACK]; - u |= 8192; - } - if (sbar.inv_amount[GET_HEATS] != p->inv_amount[GET_HEATS]) - { - sbar.inv_amount[GET_HEATS] = p->inv_amount[GET_HEATS]; - u |= 8192; - } - if (sbar.inv_amount[GET_SCUBA] != p->inv_amount[GET_SCUBA]) - { - sbar.inv_amount[GET_SCUBA] = p->inv_amount[GET_SCUBA]; - u |= 8192; - } - if (sbar.inv_amount[GET_BOOTS] != p->inv_amount[GET_BOOTS]) - { - sbar.inv_amount[GET_BOOTS] = p->inv_amount[GET_BOOTS]; - u |= 8192; - } - if (u == 0) return; - - //0 - update health - //1 - update armor - //2 - update PISTOL_WEAPON ammo - //3 - update SHOTGUN_WEAPON ammo - //4 - update CHAINGUN_WEAPON ammo - //5 - update RPG_WEAPON ammo - //6 - update HANDBOMB_WEAPON ammo - //7 - update SHRINKER_WEAPON ammo - //8 - update DEVISTATOR_WEAPON ammo - //9 - update TRIPBOMB_WEAPON ammo - //10 - update ammo display - //11 - update inventory icon - //12 - update inventory on/off - //13 - update inventory % - //14 - update keys - //15 - update kills - //16 - update FREEZE_WEAPON ammo - - if (u == -1) - { - G_PatchStatusBar(0,0,320,200); - if ((g_netServer || (g_netServer || ud.multimode > 1)) && (GametypeFlags[ud.coop] & GAMETYPE_FRAGBAR)) - rotatesprite(sbarx(277+1),sbary(SBY+7-1),sbarsc(65536L),0,KILLSICON,0,0,10+16,0,0,xdim-1,ydim-1); - } - if ((g_netServer || (g_netServer || ud.multimode > 1)) && (GametypeFlags[ud.coop] & GAMETYPE_FRAGBAR)) - { - if (u&32768) - { - if (u != -1) G_PatchStatusBar(276,SBY+17,299,SBY+17+10); - G_DrawDigiNum(287,SBY+17,max(p->frag-p->fraggedself,0),-16,10+16); - } - } - else - { - if (u&16384) - { - if (u != -1) G_PatchStatusBar(275,SBY+18,299,SBY+18+12); - if (p->got_access&4) rotatesprite(sbarx(275),sbary(SBY+16),sbarsc(65536L),0,ACCESS_ICON,0,23,10+16,0,0,xdim-1,ydim-1); - if (p->got_access&2) rotatesprite(sbarx(288),sbary(SBY+16),sbarsc(65536L),0,ACCESS_ICON,0,21,10+16,0,0,xdim-1,ydim-1); - if (p->got_access&1) rotatesprite(sbarx(281),sbary(SBY+23),sbarsc(65536L),0,ACCESS_ICON,0,0,10+16,0,0,xdim-1,ydim-1); - } - } - if (u&(4+8+16+32+64+128+256+512+65536L)) G_DrawWeapAmounts(p,96,SBY+16,u); - - if (u&1) - { - if (u != -1) G_PatchStatusBar(20,SBY+17,43,SBY+17+11); - if (sprite[p->i].pal == 1 && p->last_extra < 2) - G_DrawDigiNum(32,SBY+17,1,-16,10+16); - else G_DrawDigiNum(32,SBY+17,p->last_extra,-16,10+16); - } - if (u&2) - { - int32_t lAmount=Gv_GetVarByLabel("PLR_MORALE",-1, p->i, snum); - if (u != -1) G_PatchStatusBar(52,SBY+17,75,SBY+17+11); - if (lAmount == -1) - G_DrawDigiNum(64,SBY+17,p->inv_amount[GET_SHIELD],-16,10+16); - else - G_DrawDigiNum(64,SBY+17,lAmount,-16,10+16); - } - - if (u&1024) - { - if (u != -1) G_PatchStatusBar(196,SBY+17,219,SBY+17+11); - if (p->curr_weapon != KNEE_WEAPON) - { - if (p->curr_weapon == HANDREMOTE_WEAPON) i = HANDBOMB_WEAPON; - else i = p->curr_weapon; - G_DrawDigiNum(230-22,SBY+17,p->ammo_amount[i],-16,10+16); - } - } - - if (u&(2048+4096+8192)) - { - if (u != -1) - { - if (u&(2048+4096)) - { - G_PatchStatusBar(231,SBY+13,265,SBY+13+18); - } - else - { - G_PatchStatusBar(250,SBY+24,261,SBY+24+6); - } - - } - if (p->inven_icon) - { - o = 0; -// permbit = 128; - - if (u&(2048+4096)) - { - switch (p->inven_icon) - { - case 1: - i = FIRSTAID_ICON; - break; - case 2: - i = STEROIDS_ICON; - break; - case 3: - i = HOLODUKE_ICON; - break; - case 4: - i = JETPACK_ICON; - break; - case 5: - i = HEAT_ICON; - break; - case 6: - i = AIRTANK_ICON; - break; - case 7: - i = BOOT_ICON; - break; - } - rotatesprite(sbarx(231-o),sbary(SBY+13),sbarsc(65536L),0,i,0,0,10+16+permbit,0,0,xdim-1,ydim-1); - minitext(292-30-o,SBY+24,"%",6,10+16+permbit + ROTATESPRITE_MAX); - if (p->inven_icon >= 6) minitext(284-35-o,SBY+14,"AUTO",2,10+16+permbit + ROTATESPRITE_MAX); - } - if (u&(2048+4096)) - { - switch (p->inven_icon) - { - case 3: - j = p->holoduke_on; - break; - case 4: - j = p->jetpack_on; - break; - case 5: - j = p->heat_on; - break; - default: - j = 0x80000000; - } - if (j > 0) minitext(288-30-o,SBY+14,"ON",0,10+16+permbit + ROTATESPRITE_MAX); - else if ((uint32_t)j != 0x80000000) minitext(284-30-o,SBY+14,"OFF",2,10+16+permbit + ROTATESPRITE_MAX); - } - if (u&8192) - { - switch (p->inven_icon) - { - case 1: - i = p->inv_amount[GET_FIRSTAID]; - break; - case 2: - i = ((p->inv_amount[GET_STEROIDS]+3)>>2); - break; - case 3: - i = ((p->inv_amount[GET_HOLODUKE]+15)/24); - break; - case 4: - i = ((p->inv_amount[GET_JETPACK]+15)>>4); - break; - case 5: - i = p->inv_amount[GET_HEATS]/12; - break; - case 6: - i = ((p->inv_amount[GET_SCUBA]+63)>>6); - break; - case 7: - i = (p->inv_amount[GET_BOOTS]>>1); - break; - } - G_DrawInvNum(284-30-o,SBY+28,(uint8_t)i,0,10+permbit); - } - } - } -} - -#define COLOR_RED 248 -#define COLOR_WHITE 31 -#define LOW_FPS 30 - -static void G_PrintFPS(void) -{ - // adapted from ZDoom because I like it better than what we had - // applicable ZDoom code available under GPL from csDoom - static int32_t FrameCount = 0; - static int32_t LastCount = 0; - static int32_t LastSec = 0; - static int32_t LastMS = 0; - int32_t ms = getticks(); - int32_t howlong = ms - LastMS; - if (howlong >= 0) - { - int32_t thisSec = ms/1000; - int32_t x = (xdim <= 640); - - if (ud.tickrate) - { - int32_t chars = Bsprintf(tempbuf, "%d ms (%3u fps)", howlong, LastCount); - - printext256(windowx2-(chars<<(3-x))+1,windowy1+2,0,-1,tempbuf,x); - printext256(windowx2-(chars<<(3-x)),windowy1+1, - (LastCount < LOW_FPS) ? COLOR_RED : COLOR_WHITE,-1,tempbuf,x); - - // lag meter - if (g_netClientPeer) - { - chars = Bsprintf(tempbuf, "%d +- %d ms", (g_netClientPeer->lastRoundTripTime + g_netClientPeer->roundTripTime)/2, - (g_netClientPeer->lastRoundTripTimeVariance + g_netClientPeer->roundTripTimeVariance)/2); - - printext256(windowx2-(chars<<(3-x))+1,windowy1+10+2,0,-1,tempbuf,x); - printext256(windowx2-(chars<<(3-x)),windowy1+10+1,g_netClientPeer->lastRoundTripTime > 200 ? COLOR_RED : COLOR_WHITE,-1,tempbuf,x); - } - } - - if (thisSec - LastSec) - { - g_currentFrameRate = LastCount = FrameCount / (thisSec - LastSec); - LastSec = thisSec; - FrameCount = 0; - } - FrameCount++; - } - LastMS = ms; -} - -static void G_PrintCoords(int32_t snum) -{ - int32_t y = 16; - - if ((GametypeFlags[ud.coop] & GAMETYPE_FRAGBAR)) - { - if (ud.multimode > 4) - y = 32; - else if (g_netServer || (g_netServer || ud.multimode > 1)) - y = 24; - } - Bsprintf(tempbuf,"XYZ= (%d,%d,%d)",g_player[snum].ps->pos.x,g_player[snum].ps->pos.y,g_player[snum].ps->pos.z); - printext256(250L,y,31,-1,tempbuf,0); - Bsprintf(tempbuf,"A/H= %d,%d",g_player[snum].ps->ang,g_player[snum].ps->horiz); - printext256(250L,y+9L,31,-1,tempbuf,0); - Bsprintf(tempbuf,"ZV= %d",g_player[snum].ps->vel.z); - printext256(250L,y+18L,31,-1,tempbuf,0); - Bsprintf(tempbuf,"OG= %d",g_player[snum].ps->on_ground); - printext256(250L,y+27L,31,-1,tempbuf,0); - Bsprintf(tempbuf,"SECTL= %d",sector[g_player[snum].ps->cursectnum].lotag); - printext256(250L,y+36L,31,-1,tempbuf,0); - Bsprintf(tempbuf,"SEED= %d",randomseed); - printext256(250L,y+45L,31,-1,tempbuf,0); - Bsprintf(tempbuf,"THOLD= %d",g_player[snum].ps->transporter_hold); - printext256(250L,y+54L+7,31,-1,tempbuf,0); -} - -// this handles both multiplayer and item pickup message type text -// both are passed on to gametext - -void G_PrintGameQuotes(void) -{ - int32_t i, j, k, l; - - k = 1; - if (GTFLAGS(GAMETYPE_FRAGBAR) && ud.screen_size > 0 && (g_netServer || (g_netServer || ud.multimode > 1))) - { - j = 0; - k += 8; - TRAVERSE_CONNECT(i) - if (i > j) j = i; - - if (j >= 4 && j <= 8) k += 8; - else if (j > 8 && j <= 12) k += 16; - else if (j > 12) k += 24; - } - - if (g_player[screenpeek].ps->fta > 1 && (g_player[screenpeek].ps->ftq < QUOTE_RESERVED || g_player[screenpeek].ps->ftq > QUOTE_RESERVED3)) - { - if (g_player[screenpeek].ps->fta > 6) - k += 7; - else k += g_player[screenpeek].ps->fta; - } - - j = k; - - j = scale(j,ydim,200); - for (i=MAXUSERQUOTES-1; i>=0; i--) - { - if (user_quote_time[i] <= 0) continue; - k = user_quote_time[i]; - if (hud_glowingquotes) - { - if (k > 4) { mpgametext(j,user_quote[i],(sintable[((totalclock+(i<<2))<<5)&2047]>>11),2+8+16); j += textsc(8); } - else if (k > 2) { mpgametext(j,user_quote[i],(sintable[((totalclock+(i<<2))<<5)&2047]>>11),2+8+16+1); j += textsc(k<<1); } - else { mpgametext(j,user_quote[i],(sintable[((totalclock+(i<<2))<<5)&2047]>>11),2+8+16+1+32); j += textsc(k<<1); } - } - else - { - if (k > 4) { mpgametext(j,user_quote[i],0,2+8+16); j += textsc(8); } - else if (k > 2) { mpgametext(j,user_quote[i],0,2+8+16+1); j += textsc(k<<1); } - else { mpgametext(j,user_quote[i],0,2+8+16+1+32); j += textsc(k<<1); } - } - l = G_GameTextLen(USERQUOTE_LEFTOFFSET,OSD_StripColors(tempbuf,user_quote[i])); - while (l > (ud.config.ScreenWidth - USERQUOTE_RIGHTOFFSET)) - { - l -= (ud.config.ScreenWidth-USERQUOTE_RIGHTOFFSET); - if (k > 4) j += textsc(8); - else j += textsc(k<<1); - - } - } - - if ((klabs(quotebotgoal-quotebot) <= 16) && (ud.screen_size <= 8)) - quotebot += ksgn(quotebotgoal-quotebot); - else - quotebot = quotebotgoal; - - if (g_player[screenpeek].ps->fta <= 1) return; - - if (ScriptQuotes[g_player[screenpeek].ps->ftq] == NULL) - { - OSD_Printf(OSD_ERROR "%s %d null quote %d\n",__FILE__,__LINE__,g_player[screenpeek].ps->ftq); - return; - } - - k = 0; - - if (g_player[screenpeek].ps->ftq >= QUOTE_RESERVED && g_player[screenpeek].ps->ftq <= QUOTE_RESERVED3) - { - k = 140;//quotebot-8-4; - } - else if (GTFLAGS(GAMETYPE_FRAGBAR) && ud.screen_size > 0 && (g_netServer || ud.multimode > 1)) - { - j = 0; - k = 8; - TRAVERSE_CONNECT(i) - if (i > j) j = i; - - if (j >= 4 && j <= 8) k += 8; - else if (j > 8 && j <= 12) k += 16; - else if (j > 12) k += 24; - } - - j = g_player[screenpeek].ps->fta; - if (!hud_glowingquotes) - { - if (j > 4) gametext(320>>1,k,ScriptQuotes[g_player[screenpeek].ps->ftq],0,2+8+16); - else if (j > 2) gametext(320>>1,k,ScriptQuotes[g_player[screenpeek].ps->ftq],0,2+8+16+1); - else gametext(320>>1,k,ScriptQuotes[g_player[screenpeek].ps->ftq],0,2+8+16+1+32); - return; - } - if (j > 4) gametext(320>>1,k,ScriptQuotes[g_player[screenpeek].ps->ftq],quotepulseshade,2+8+16); - else if (j > 2) gametext(320>>1,k,ScriptQuotes[g_player[screenpeek].ps->ftq],quotepulseshade,2+8+16+1); - else gametext(320>>1,k,ScriptQuotes[g_player[screenpeek].ps->ftq],quotepulseshade,2+8+16+1+32); -} - -void P_DoQuote(int32_t q, DukePlayer_t *p) -{ - int32_t cq = 0; - - if (q & MAXQUOTES) - { - cq = 1; - q &= ~MAXQUOTES; - } - - if (ScriptQuotes[q] == NULL) - { - OSD_Printf(OSD_ERROR "%s %d null quote %d\n",__FILE__,__LINE__,q); - return; - } - - if (ud.fta_on == 0) - return; - - if (p->fta > 0 && q != QUOTE_RESERVED && q != QUOTE_RESERVED2) - if (p->ftq == QUOTE_RESERVED || p->ftq == QUOTE_RESERVED2) return; - - p->fta = 100; - - if (p->ftq != q) - { - if (p == g_player[screenpeek].ps) - { - if (cq) OSD_Printf(OSDTEXT_BLUE "%s\n",ScriptQuotes[q]); - else OSD_Printf("%s\n",ScriptQuotes[q]); - } - - p->ftq = q; - } - pub = NUMPAGES; - pus = NUMPAGES; -} - -void G_FadePalette(int32_t r,int32_t g,int32_t b,int32_t e) -{ - setpalettefade(r,g,b,e&63); - -// if (getrendermode() >= 3) pus = pub = NUMPAGES; // JBF 20040110: redraw the status bar next time - if ((e&128) == 0) - { - int32_t tc; - nextpage(); - for (tc = totalclock; totalclock < tc + 4; handleevents(), Net_GetPackets()); - } -} - -void fadepal(int32_t r, int32_t g, int32_t b, int32_t start, int32_t end, int32_t step) -{ - if (step > 0) - { - for (; start < end; start += step) - { - if (KB_KeyPressed(sc_Space)) - { - KB_ClearKeyDown(sc_Space); - return; - } - G_FadePalette(r,g,b,start); - } - } - else for (; start >= end; start += step) - { - if (KB_KeyPressed(sc_Space)) - { - KB_ClearKeyDown(sc_Space); - return; - } - G_FadePalette(r,g,b,start); - } -} - -void fadepaltile(int32_t r, int32_t g, int32_t b, int32_t start, int32_t end, int32_t step, int32_t tile) -{ - if (step > 0) - { - for (; start < end; start += step) - { - if (KB_KeyPressed(sc_Space)) - { - KB_ClearKeyDown(sc_Space); - return; - } - rotatesprite(0,0,65536L,0,tile,0,0,2+8+16+(ud.bgstretch?1024:0), 0,0,xdim-1,ydim-1); - G_FadePalette(r,g,b,start); - } - } - else for (; start >= end; start += step) - { - if (KB_KeyPressed(sc_Space)) - { - KB_ClearKeyDown(sc_Space); - return; - } - rotatesprite(0,0,65536L,0,tile,0,0,2+8+16+(ud.bgstretch?1024:0), 0,0,xdim-1,ydim-1); - G_FadePalette(r,g,b,start); - } -} - -static void G_DisplayExtraScreens(void) -{ - int32_t flags = Gv_GetVarByLabel("LOGO_FLAGS",255, -1, -1); - - S_StopMusic(); - FX_StopAllSounds(); - - if (!VOLUMEALL || flags & LOGO_SHAREWARESCREENS) - { - setview(0,0,xdim-1,ydim-1); - flushperms(); - //g_player[myconnectindex].ps->palette = palette; - P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 1); // JBF 20040308 - fadepal(0,0,0, 0,64,7); - KB_FlushKeyboardQueue(); - rotatesprite(0,0,65536L,0,3291,0,0,2+8+16+64+(ud.bgstretch?1024:0), 0,0,xdim-1,ydim-1); - fadepaltile(0,0,0, 63,0,-7, 3291); - while (!KB_KeyWaiting()) - { - handleevents(); - Net_GetPackets(); - } - - fadepaltile(0,0,0, 0,64,7, 3291); - KB_FlushKeyboardQueue(); - rotatesprite(0,0,65536L,0,3290,0,0,2+8+16+64+(ud.bgstretch?1024:0), 0,0,xdim-1,ydim-1); - fadepaltile(0,0,0, 63,0,-7,3290); - while (!KB_KeyWaiting()) - { - handleevents(); - Net_GetPackets(); - } - } - - if (flags & LOGO_TENSCREEN) - { - setview(0,0,xdim-1,ydim-1); - flushperms(); - //g_player[myconnectindex].ps->palette = palette; - P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 1); // JBF 20040308 - fadepal(0,0,0, 0,64,7); - KB_FlushKeyboardQueue(); - rotatesprite(0,0,65536L,0,TENSCREEN,0,0,2+8+16+64+(ud.bgstretch?1024:0), 0,0,xdim-1,ydim-1); - fadepaltile(0,0,0, 63,0,-7,TENSCREEN); - while (!KB_KeyWaiting() && totalclock < 2400) - { - handleevents(); - Net_GetPackets(); - } - } -} - -extern int32_t qsetmode; -extern int32_t g_doQuickSave; - -void G_GameExit(const char *t) -{ - if (*t != 0) g_player[myconnectindex].ps->palette = BASEPAL; - - if (ud.recstat == 1) G_CloseDemoWrite(); - else if (ud.recstat == 2) - { - if (g_demo_filePtr) fclose(g_demo_filePtr); - } // JBF: fixes crash on demo playback - - if (!g_quickExit) - { - if (playerswhenstarted > 1 && g_player[myconnectindex].ps->gm&MODE_GAME && GTFLAGS(GAMETYPE_SCORESHEET) && *t == ' ') - { - G_BonusScreen(1); - setgamemode(ud.config.ScreenMode,ud.config.ScreenWidth,ud.config.ScreenHeight,ud.config.ScreenBPP); - } - - if (*t != 0 && *(t+1) != 'V' && *(t+1) != 'Y') - G_DisplayExtraScreens(); - } - - if (*t != 0) initprintf("%s\n",t); - - if (qsetmode == 200) - G_Shutdown(); - - if (*t != 0) - { - if (!(t[0] == ' ' && t[1] == 0)) - { - char titlebuf[256]; - Bsprintf(titlebuf,HEAD2 " %s",s_buildRev); - wm_msgbox(titlebuf, "%s", (char *)t); - } - } - - uninitgroupfile(); - - exit(0); -} - -char inputloc = 0; - -int32_t _EnterText(int32_t small,int32_t x,int32_t y,char *t,int32_t dalen,int32_t c) -{ - char ch; - int32_t i; - - while ((ch = KB_Getch()) != 0 || (g_player[myconnectindex].ps->gm&MODE_MENU && MOUSE_GetButtons()&RIGHT_MOUSE)) - { - if (ch == asc_BackSpace) - { - if (inputloc > 0) - { - inputloc--; - *(t+inputloc) = 0; - } - } - else - { - if (ch == asc_Enter) - { - KB_ClearKeyDown(sc_Enter); - KB_ClearKeyDown(sc_kpad_Enter); - return (1); - } - else if (ch == asc_Escape || (g_player[myconnectindex].ps->gm&MODE_MENU && MOUSE_GetButtons()&RIGHT_MOUSE)) - { - KB_ClearKeyDown(sc_Escape); - MOUSE_ClearButton(RIGHT_MOUSE); - return (-1); - } - else if (ch >= 32 && inputloc < dalen && ch < 127) - { - ch = Btoupper(ch); - if (c != 997 || (ch >= '0' && ch <= '9')) - { - // JBF 20040508: so we can have numeric only if we want - *(t+inputloc) = ch; - *(t+inputloc+1) = 0; - inputloc++; - } - } - } - } - - if (c == 999) return(0); - if (c == 998) - { - char b[91],ii; - for (ii=0; iigm&MODE_TYPE) - x = mpgametext(y,b,c,2+8+16); - else x = gametext(x,y,b,c,2+8+16); - } - else - { - if (g_player[myconnectindex].ps->gm&MODE_TYPE) - x = mpgametext(y,t,c,2+8+16); - else x = gametext(x,y,t,c,2+8+16); - } - c = 4-(sintable[(totalclock<<4)&2047]>>11); - - i = G_GameTextLen(USERQUOTE_LEFTOFFSET,OSD_StripColors(tempbuf,t)); - while (i > (ud.config.ScreenWidth - USERQUOTE_RIGHTOFFSET)) - { - i -= (ud.config.ScreenWidth - USERQUOTE_RIGHTOFFSET); - if (small&1) - y += textsc(6); - y += 8; - } - - if (small&1) - rotatesprite(textsc(x)<<16,(y<<16),32768,0,SPINNINGNUKEICON+((totalclock>>3)%7),c,0,(small&1)?(8|16):2+8,0,0,xdim-1,ydim-1); - else rotatesprite((x+((small&1)?4:8))<<16,((y+((small&1)?0:4))<<16),32768,0,SPINNINGNUKEICON+((totalclock>>3)%7),c,0,(small&1)?(8|16):2+8,0,0,xdim-1,ydim-1); - return (0); -} - - -static inline void G_MoveClouds(void) -{ - int32_t i; - - if (totalclock <= cloudtotalclock || totalclock >= (cloudtotalclock-7)) - return; - - cloudtotalclock = totalclock+6; - - for (i=g_numClouds-1; i>=0; i--) - { - cloudx[i] += (sintable[(g_player[screenpeek].ps->ang+512)&2047]>>9); - cloudy[i] += (sintable[g_player[screenpeek].ps->ang&2047]>>9); - - sector[clouds[i]].ceilingxpanning = cloudx[i]>>6; - sector[clouds[i]].ceilingypanning = cloudy[i]>>6; - } -} - -static void G_DrawOverheadMap(int32_t cposx, int32_t cposy, int32_t czoom, int16_t cang) -{ - int32_t i, j, k, l, x1, y1, x2=0, y2=0, x3, y3, x4, y4, ox, oy, xoff, yoff; - int32_t dax, day, cosang, sinang, xspan, yspan, sprx, spry; - int32_t xrepeat, yrepeat, z1, z2, startwall, endwall, tilenum, daang; - int32_t xvect, yvect, xvect2, yvect2; - int16_t p; - char col; - walltype *wal, *wal2; - spritetype *spr; - int32_t oydim=ydim; - - ydim = (int32_t)((double)xdim * 0.625f); - setaspect(65536L,(int32_t)divscale16(ydim*320L,xdim*200L)); - ydim = oydim; - - xvect = sintable[(-cang)&2047] * czoom; - yvect = sintable[(1536-cang)&2047] * czoom; - xvect2 = mulscale16(xvect,yxaspect); - yvect2 = mulscale16(yvect,yxaspect); - - //Draw red lines - for (i=numsectors-1; i>=0; i--) - { - if (!(show2dsector[i>>3]&(1<<(i&7)))) continue; - - startwall = sector[i].wallptr; - endwall = sector[i].wallptr + sector[i].wallnum; - - z1 = sector[i].ceilingz; - z2 = sector[i].floorz; - - for (j=startwall,wal=&wall[startwall]; jnextwall; - if (k < 0) continue; - - //if ((show2dwall[j>>3]&(1<<(j&7))) == 0) continue; - //if ((k > j) && ((show2dwall[k>>3]&(1<<(k&7))) > 0)) continue; - - if (sector[wal->nextsector].ceilingz == z1) - if (sector[wal->nextsector].floorz == z2) - if (((wal->cstat|wall[wal->nextwall].cstat)&(16+32)) == 0) continue; - - col = 139; //red - if ((wal->cstat|wall[wal->nextwall].cstat)&1) col = 234; //magenta - - if (!(show2dsector[wal->nextsector>>3]&(1<<(wal->nextsector&7)))) - col = 24; - else continue; - - ox = wal->x-cposx; - oy = wal->y-cposy; - x1 = dmulscale16(ox,xvect,-oy,yvect)+(xdim<<11); - y1 = dmulscale16(oy,xvect2,ox,yvect2)+(ydim<<11); - - wal2 = &wall[wal->point2]; - ox = wal2->x-cposx; - oy = wal2->y-cposy; - x2 = dmulscale16(ox,xvect,-oy,yvect)+(xdim<<11); - y2 = dmulscale16(oy,xvect2,ox,yvect2)+(ydim<<11); - - drawline256(x1,y1,x2,y2,col); - } - } - - //Draw sprites - k = g_player[screenpeek].ps->i; - for (i=numsectors-1; i>=0; i--) - { - if (!(show2dsector[i>>3]&(1<<(i&7)))) continue; - for (j=headspritesect[i]; j>=0; j=nextspritesect[j]) - //if ((show2dsprite[j>>3]&(1<<(j&7))) > 0) - { - spr = &sprite[j]; - - if (j == k || (spr->cstat&0x8000) || spr->cstat == 257 || spr->xrepeat == 0) continue; - - col = 71; //cyan - if (spr->cstat&1) col = 234; //magenta - - sprx = spr->x; - spry = spr->y; - - if ((spr->cstat&257) != 0) switch (spr->cstat&48) - { - case 0: -// break; - - ox = sprx-cposx; - oy = spry-cposy; - x1 = dmulscale16(ox,xvect,-oy,yvect); - y1 = dmulscale16(oy,xvect2,ox,yvect2); - - ox = (sintable[(spr->ang+512)&2047]>>7); - oy = (sintable[(spr->ang)&2047]>>7); - x2 = dmulscale16(ox,xvect,-oy,yvect); - y2 = dmulscale16(oy,xvect,ox,yvect); - - x3 = mulscale16(x2,yxaspect); - y3 = mulscale16(y2,yxaspect); - - drawline256(x1-x2+(xdim<<11),y1-y3+(ydim<<11), - x1+x2+(xdim<<11),y1+y3+(ydim<<11),col); - drawline256(x1-y2+(xdim<<11),y1+x3+(ydim<<11), - x1+x2+(xdim<<11),y1+y3+(ydim<<11),col); - drawline256(x1+y2+(xdim<<11),y1-x3+(ydim<<11), - x1+x2+(xdim<<11),y1+y3+(ydim<<11),col); - break; - - case 16: - if (spr->picnum == LASERLINE) - { - x1 = sprx; - y1 = spry; - tilenum = spr->picnum; - xoff = (int32_t)((int8_t)((picanm[tilenum]>>8)&255))+((int32_t)spr->xoffset); - if ((spr->cstat&4) > 0) xoff = -xoff; - k = spr->ang; - l = spr->xrepeat; - dax = sintable[k&2047]*l; - day = sintable[(k+1536)&2047]*l; - l = tilesizx[tilenum]; - k = (l>>1)+xoff; - x1 -= mulscale16(dax,k); - x2 = x1+mulscale16(dax,l); - y1 -= mulscale16(day,k); - y2 = y1+mulscale16(day,l); - - ox = x1-cposx; - oy = y1-cposy; - x1 = dmulscale16(ox,xvect,-oy,yvect); - y1 = dmulscale16(oy,xvect2,ox,yvect2); - - ox = x2-cposx; - oy = y2-cposy; - x2 = dmulscale16(ox,xvect,-oy,yvect); - y2 = dmulscale16(oy,xvect2,ox,yvect2); - - drawline256(x1+(xdim<<11),y1+(ydim<<11), - x2+(xdim<<11),y2+(ydim<<11),col); - } - - break; - - case 32: - - tilenum = spr->picnum; - xoff = (int32_t)((int8_t)((picanm[tilenum]>>8)&255))+((int32_t)spr->xoffset); - yoff = (int32_t)((int8_t)((picanm[tilenum]>>16)&255))+((int32_t)spr->yoffset); - if ((spr->cstat&4) > 0) xoff = -xoff; - if ((spr->cstat&8) > 0) yoff = -yoff; - - k = spr->ang; - cosang = sintable[(k+512)&2047]; - sinang = sintable[k]; - xspan = tilesizx[tilenum]; - xrepeat = spr->xrepeat; - yspan = tilesizy[tilenum]; - yrepeat = spr->yrepeat; - - dax = ((xspan>>1)+xoff)*xrepeat; - day = ((yspan>>1)+yoff)*yrepeat; - x1 = sprx + dmulscale16(sinang,dax,cosang,day); - y1 = spry + dmulscale16(sinang,day,-cosang,dax); - l = xspan*xrepeat; - x2 = x1 - mulscale16(sinang,l); - y2 = y1 + mulscale16(cosang,l); - l = yspan*yrepeat; - k = -mulscale16(cosang,l); - x3 = x2+k; - x4 = x1+k; - k = -mulscale16(sinang,l); - y3 = y2+k; - y4 = y1+k; - - ox = x1-cposx; - oy = y1-cposy; - x1 = dmulscale16(ox,xvect,-oy,yvect); - y1 = dmulscale16(oy,xvect2,ox,yvect2); - - ox = x2-cposx; - oy = y2-cposy; - x2 = dmulscale16(ox,xvect,-oy,yvect); - y2 = dmulscale16(oy,xvect2,ox,yvect2); - - ox = x3-cposx; - oy = y3-cposy; - x3 = dmulscale16(ox,xvect,-oy,yvect); - y3 = dmulscale16(oy,xvect2,ox,yvect2); - - ox = x4-cposx; - oy = y4-cposy; - x4 = dmulscale16(ox,xvect,-oy,yvect); - y4 = dmulscale16(oy,xvect2,ox,yvect2); - - drawline256(x1+(xdim<<11),y1+(ydim<<11), - x2+(xdim<<11),y2+(ydim<<11),col); - - drawline256(x2+(xdim<<11),y2+(ydim<<11), - x3+(xdim<<11),y3+(ydim<<11),col); - - drawline256(x3+(xdim<<11),y3+(ydim<<11), - x4+(xdim<<11),y4+(ydim<<11),col); - - drawline256(x4+(xdim<<11),y4+(ydim<<11), - x1+(xdim<<11),y1+(ydim<<11),col); - - break; - } - } - } - - //Draw white lines - for (i=numsectors-1; i>=0; i--) - { - if (!(show2dsector[i>>3]&(1<<(i&7)))) continue; - - startwall = sector[i].wallptr; - endwall = sector[i].wallptr + sector[i].wallnum; - - k = -1; - for (j=startwall,wal=&wall[startwall]; jnextwall >= 0) continue; - - //if ((show2dwall[j>>3]&(1<<(j&7))) == 0) continue; - - if (tilesizx[wal->picnum] == 0) continue; - if (tilesizy[wal->picnum] == 0) continue; - - if (j == k) - { - x1 = x2; - y1 = y2; - } - else - { - ox = wal->x-cposx; - oy = wal->y-cposy; - x1 = dmulscale16(ox,xvect,-oy,yvect)+(xdim<<11); - y1 = dmulscale16(oy,xvect2,ox,yvect2)+(ydim<<11); - } - - k = wal->point2; - wal2 = &wall[k]; - ox = wal2->x-cposx; - oy = wal2->y-cposy; - x2 = dmulscale16(ox,xvect,-oy,yvect)+(xdim<<11); - y2 = dmulscale16(oy,xvect2,ox,yvect2)+(ydim<<11); - - drawline256(x1,y1,x2,y2,24); - } - } - - setaspect_new(); - - TRAVERSE_CONNECT(p) - { - if (ud.scrollmode && p == screenpeek) continue; - - ox = sprite[g_player[p].ps->i].x-cposx; - oy = sprite[g_player[p].ps->i].y-cposy; - daang = (sprite[g_player[p].ps->i].ang-cang)&2047; - if (p == screenpeek) - { - ox = 0; - oy = 0; - daang = 0; - } - x1 = mulscale(ox,xvect,16) - mulscale(oy,yvect,16); - y1 = mulscale(oy,xvect2,16) + mulscale(ox,yvect2,16); - - if (p == screenpeek || GTFLAGS(GAMETYPE_OTHERPLAYERSINMAP)) - { - if (sprite[g_player[p].ps->i].xvel > 16 && g_player[p].ps->on_ground) - i = APLAYERTOP+((totalclock>>4)&3); - else - i = APLAYERTOP; - - j = klabs(g_player[p].ps->truefz-g_player[p].ps->pos.z)>>8; - j = mulscale(czoom*(sprite[g_player[p].ps->i].yrepeat+j),yxaspect,16); - - if (j < 22000) j = 22000; - else if (j > (65536<<1)) j = (65536<<1); - - rotatesprite((x1<<4)+(xdim<<15),(y1<<4)+(ydim<<15),j,daang,i,sprite[g_player[p].ps->i].shade, - (g_player[p].ps->cursectnum > -1)?sector[g_player[p].ps->cursectnum].floorpal:0, - 0,windowx1,windowy1,windowx2,windowy2); - } - } -} - -#define CROSSHAIR_PAL (MAXPALOOKUPS-RESERVEDPALS-1) - -palette_t CrosshairColors = { 255, 255, 255, 0 }; -palette_t DefaultCrosshairColors = { 0, 0, 0, 0 }; -int32_t g_crosshairSum = 0; - -void G_GetCrosshairColor(void) -{ - // use the brightest color in the original 8-bit tile - int32_t bri = 0, j = 0, i; - int32_t ii; - char *ptr = (char *)waloff[CROSSHAIR]; - - if (DefaultCrosshairColors.f) - return; - - if (waloff[CROSSHAIR] == 0) - { - loadtile(CROSSHAIR); - ptr = (char *)waloff[CROSSHAIR]; - } - - ii = tilesizx[CROSSHAIR]*tilesizy[CROSSHAIR]; - - if (ii <= 0) return; - - do - { - if (*ptr != 255) - { - i = curpalette[(int32_t)*ptr].r+curpalette[(int32_t)*ptr].g+curpalette[(int32_t)*ptr].b; - if (i > j) { j = i; bri = *ptr; } - } - ptr++; - } - while (--ii); - - Bmemcpy(&CrosshairColors, &curpalette[bri], sizeof(palette_t)); - Bmemcpy(&DefaultCrosshairColors, &curpalette[bri], sizeof(palette_t)); - DefaultCrosshairColors.f = 1; // this flag signifies that the color has been detected -} - -void G_SetCrosshairColor(int32_t r, int32_t g, int32_t b) -{ - char *ptr = (char *)waloff[CROSSHAIR]; - int32_t i, ii; - - if (DefaultCrosshairColors.f == 0 || g_crosshairSum == r+(g<<1)+(b<<2)) return; - - g_crosshairSum = r+(g<<1)+(b<<2); - CrosshairColors.r = r; - CrosshairColors.g = g; - CrosshairColors.b = b; - - if (waloff[CROSSHAIR] == 0) - { - loadtile(CROSSHAIR); - ptr = (char *)waloff[CROSSHAIR]; - } - - ii = tilesizx[CROSSHAIR]*tilesizy[CROSSHAIR]; - if (ii <= 0) return; - - if (getrendermode() < 3) - i = getclosestcol(CrosshairColors.r>>2, CrosshairColors.g>>2, CrosshairColors.b>>2); - else i = getclosestcol(63, 63, 63); // use white in GL so we can tint it to the right color - - do - { - if (*ptr != 255) - *ptr = i; - ptr++; - } - while (--ii); - - for (i = 255; i >= 0; i--) - tempbuf[i] = i; - - makepalookup(CROSSHAIR_PAL,tempbuf,CrosshairColors.r>>2, CrosshairColors.g>>2, CrosshairColors.b>>2,1); - -#ifdef USE_OPENGL - Bmemcpy(&hictinting[CROSSHAIR_PAL], &CrosshairColors, sizeof(palette_t)); - hictinting[CROSSHAIR_PAL].f = 9; -#endif - invalidatetile(CROSSHAIR, -1, -1); -} - -#define SCORESHEETOFFSET -20 -static void G_ShowScores(void) -{ - int32_t t, i; - - if (playerswhenstarted > 1 && (GametypeFlags[ud.coop]&GAMETYPE_SCORESHEET)) - { - gametext(160,SCORESHEETOFFSET+58+2,"MULTIPLAYER TOTALS",0,2+8+16); - gametext(160,SCORESHEETOFFSET+58+10,MapInfo[(ud.volume_number*MAXLEVELS)+ud.last_level-1].name,0,2+8+16); - - t = 0; - minitext(70,SCORESHEETOFFSET+80,"NAME",8,2+8+16+ROTATESPRITE_MAX); - minitext(170,SCORESHEETOFFSET+80,"FRAGS",8,2+8+16+ROTATESPRITE_MAX); - minitext(200,SCORESHEETOFFSET+80,"DEATHS",8,2+8+16+ROTATESPRITE_MAX); - minitext(235,SCORESHEETOFFSET+80,"PING",8,2+8+16+ROTATESPRITE_MAX); - - for (i=playerswhenstarted-1; i>=0; i--) - { - if (!g_player[i].playerquitflag) - continue; - - minitext(70,SCORESHEETOFFSET+90+t,g_player[i].user_name,g_player[i].ps->palookup,2+8+16+ROTATESPRITE_MAX); - - Bsprintf(tempbuf,"%-4d",g_player[i].ps->frag); - minitext(170,SCORESHEETOFFSET+90+t,tempbuf,2,2+8+16+ROTATESPRITE_MAX); - - Bsprintf(tempbuf,"%-4d", g_player[i].frags[i] + g_player[i].ps->fraggedself); - minitext(200,SCORESHEETOFFSET+90+t,tempbuf,2,2+8+16+ROTATESPRITE_MAX); - - Bsprintf(tempbuf,"%-4d",g_player[i].ping); - minitext(235,SCORESHEETOFFSET+90+t,tempbuf,2,2+8+16+ROTATESPRITE_MAX); - - t += 7; - } - } -} -#undef SCORESHEETOFFSET - -void G_DisplayRest(int32_t smoothratio) -{ - int32_t a, i, j; - int32_t applyTint=0; - palette_t tempFade = { 0, 0, 0, 0 }; - palette_t tempTint = { 0, 0, 0, 0 }; - - DukePlayer_t *pp = g_player[screenpeek].ps; - walltype *wal; - int32_t cposx, cposy, cang; - -#ifdef USE_OPENGL - - // this takes care of fullscreen tint for OpenGL - if (getrendermode() >= 3) - { - if (pp->palette == WATERPAL) - { - static palette_t wp = { 224, 192, 255, 0 }; - Bmemcpy(&hictinting[MAXPALOOKUPS-1], &wp, sizeof(palette_t)); - } - else if (pp->palette == SLIMEPAL) - { - static palette_t sp = { 208, 255, 192, 0 }; - Bmemcpy(&hictinting[MAXPALOOKUPS-1], &sp, sizeof(palette_t)); - } - else - { - hictinting[MAXPALOOKUPS-1].r = 255; - hictinting[MAXPALOOKUPS-1].g = 255; - hictinting[MAXPALOOKUPS-1].b = 255; - } - } -#endif /* USE_OPENGL && POLYMOST */ - // this does pain tinting etc from the CON - if (pp->pals.f > 0 && pp->loogcnt == 0) // JBF 20040101: pals.f > 0 now >= 0 - { - Bmemcpy(&tempFade, &pp->pals, sizeof(palette_t)); - g_restorePalette = 1; // JBF 20040101 - applyTint = 1; - } - // reset a normal palette - else if (g_restorePalette) - { - P_SetGamePalette(pp,pp->palette,2); - g_restorePalette = 0; - } - // loogies courtesy of being snotted on - else if (pp->loogcnt > 0) - { - palette_t lp = { 0, 64, 0, pp->loogcnt>>1 }; - Bmemcpy(&tempFade, &lp, sizeof(palette_t)); - applyTint = 1; - } - if (tempFade.f > tempTint.f) - Bmemcpy(&tempTint, &tempFade, sizeof(palette_t)); - - if (ud.show_help) - { - switch (ud.show_help) - { - case 1: - rotatesprite(0,0,65536L,0,TEXTSTORY,0,0,10+16+64, 0,0,xdim-1,ydim-1); - break; - case 2: - rotatesprite(0,0,65536L,0,F1HELP,0,0,10+16+64, 0,0,xdim-1,ydim-1); - break; - } - - if (KB_KeyPressed(sc_Escape) || MOUSE_GetButtons()&RIGHT_MOUSE) - { - KB_ClearKeyDown(sc_Escape); - MOUSE_ClearButton(RIGHT_MOUSE); - ud.show_help = 0; - if ((!g_netServer && ud.multimode < 2) && ud.recstat != 2) - { - ready2send = 1; - totalclock = ototalclock; - } - G_UpdateScreenArea(); - } - if (tempTint.f > 0 || applyTint) G_FadePalette(tempTint.r,tempTint.g,tempTint.b,tempTint.f|128); - return; - } - - i = pp->cursectnum; - if (i > -1) - { - show2dsector[i>>3] |= (1<<(i&7)); - wal = &wall[sector[i].wallptr]; - for (j=sector[i].wallnum; j>0; j--,wal++) - { - i = wal->nextsector; - if (i < 0) continue; - if (wal->cstat&0x0071) continue; - if (wall[wal->nextwall].cstat&0x0071) continue; - if (sector[i].lotag == 32767) continue; - if (sector[i].ceilingz >= sector[i].floorz) continue; - show2dsector[i>>3] |= (1<<(i&7)); - } - } - - if (ud.camerasprite == -1) - { - if (ud.overhead_on != 2) - { - if (pp->newowner >= 0) - G_DrawCameraText(pp->newowner); - else - { - P_DisplayWeapon(screenpeek); - if (pp->over_shoulder_on == 0) - P_DisplayScuba(screenpeek); - } - G_MoveClouds(); - } - - if (ud.overhead_on > 0) - { - // smoothratio = min(max(smoothratio,0),65536); - smoothratio = min(max((totalclock - ototalclock) * (65536 / 4),0),65536); - G_DoInterpolations(smoothratio); - if (ud.scrollmode == 0) - { - if (pp->newowner == -1 && !ud.pause_on) - { - cposx = pp->opos.x+mulscale16((int32_t)(pp->pos.x-pp->opos.x),smoothratio); - cposy = pp->opos.y+mulscale16((int32_t)(pp->pos.y-pp->opos.y),smoothratio); - cang = pp->oang+mulscale16((int32_t)(((pp->ang+1024-pp->oang)&2047)-1024),smoothratio); - } - else - { - cposx = pp->opos.x; - cposy = pp->opos.y; - cang = pp->oang; - } - } - else - { - if (!ud.pause_on) - { - ud.fola += ud.folavel>>3; - ud.folx += (ud.folfvel*sintable[(512+2048-ud.fola)&2047])>>14; - ud.foly += (ud.folfvel*sintable[(512+1024-512-ud.fola)&2047])>>14; - } - cposx = ud.folx; - cposy = ud.foly; - cang = ud.fola; - } - - if (ud.overhead_on == 2) - { - clearview(0L); - drawmapview(cposx,cposy,pp->zoom,cang); - } - G_DrawOverheadMap(cposx,cposy,pp->zoom,cang); - - G_RestoreInterpolations(); - - if (ud.overhead_on == 2) - { - if (ud.screen_size > 0) a = 147; - else a = 179; - minitext(5,a+6,EpisodeNames[ud.volume_number],0,2+8+16+256); - minitext(5,a+6+6,MapInfo[ud.volume_number*MAXLEVELS + ud.level_number].name,0,2+8+16+256); - } - } - } - - if (pp->invdisptime > 0) G_DrawInventory(pp); - - aGameVars[g_iReturnVarID].val.lValue = 0; - if (apScriptGameEvent[EVENT_DISPLAYSBAR]) - VM_OnEvent(EVENT_DISPLAYSBAR, g_player[screenpeek].ps->i, screenpeek, -1); - if (aGameVars[g_iReturnVarID].val.lValue == 0) - G_DrawStatusBar(screenpeek); - - G_PrintGameQuotes(); - - if (ud.show_level_text && hud_showmapname && g_levelTextTime > 1) - { - int32_t bits = 10+16; - - if (g_levelTextTime < 3) - bits |= 1+32; - else if (g_levelTextTime < 5) - bits |= 1; - - if (MapInfo[(ud.volume_number*MAXLEVELS) + ud.level_number].name != NULL) - { - if (currentboardfilename[0] != 0 && ud.volume_number == 0 && ud.level_number == 7) - menutext_(160,75,-g_levelTextTime+22/*quotepulseshade*/,0,currentboardfilename,bits); - else menutext_(160,75,-g_levelTextTime+22/*quotepulseshade*/,0,MapInfo[(ud.volume_number*MAXLEVELS) + ud.level_number].name,bits); - } - } - - if (KB_KeyPressed(sc_Escape) && ud.overhead_on == 0 - && ud.show_help == 0 - && g_player[myconnectindex].ps->newowner == -1) - { - if ((g_player[myconnectindex].ps->gm&MODE_MENU) == MODE_MENU && g_currentMenu < 51) - { - KB_ClearKeyDown(sc_Escape); - g_player[myconnectindex].ps->gm &= ~MODE_MENU; - if ((!g_netServer && ud.multimode < 2) && ud.recstat != 2) - { - ready2send = 1; - totalclock = ototalclock; - g_cameraClock = totalclock; - g_cameraDistance = 65536L; - } - walock[TILE_SAVESHOT] = 199; - G_UpdateScreenArea(); - } - else if ((g_player[myconnectindex].ps->gm&MODE_MENU) != MODE_MENU && - g_player[myconnectindex].ps->newowner == -1 && - (g_player[myconnectindex].ps->gm&MODE_TYPE) != MODE_TYPE) - { - KB_ClearKeyDown(sc_Escape); - FX_StopAllSounds(); - S_ClearSoundLocks(); - - S_MenuSound(); - - g_player[myconnectindex].ps->gm |= MODE_MENU; - - if ((!g_netServer && ud.multimode < 2) && ud.recstat != 2) ready2send = 0; - - if (g_player[myconnectindex].ps->gm&MODE_GAME) ChangeToMenu(50); - else ChangeToMenu(0); - screenpeek = myconnectindex; - } - } - - if (apScriptGameEvent[EVENT_DISPLAYREST]) - VM_OnEvent(EVENT_DISPLAYREST, g_player[screenpeek].ps->i, screenpeek, -1); - - if (g_player[myconnectindex].ps->newowner == -1 && ud.overhead_on == 0 && ud.crosshair && ud.camerasprite == -1) - { - aGameVars[g_iReturnVarID].val.lValue = 0; - if (apScriptGameEvent[EVENT_DISPLAYCROSSHAIR]) - VM_OnEvent(EVENT_DISPLAYCROSSHAIR, g_player[screenpeek].ps->i, screenpeek, -1); - if (aGameVars[g_iReturnVarID].val.lValue == 0) - rotatesprite((160L-(g_player[myconnectindex].ps->look_ang>>1))<<16,100L<<16,scale(65536,ud.crosshairscale,100), - 0,CROSSHAIR,0,CROSSHAIR_PAL,2+1,windowx1,windowy1,windowx2,windowy2); - } -#if 0 - if (GametypeFlags[ud.coop] & GAMETYPE_TDM) - { - for (i=0; iteam == g_player[myconnectindex].ps->team) - { - j = min(max((G_GetAngleDelta(getangle(g_player[i].ps->pos.x-g_player[myconnectindex].ps->pos.x, - g_player[i].ps->pos.y-g_player[myconnectindex].ps->pos.y),g_player[myconnectindex].ps->ang))>>1,-160),160); - rotatesprite((160-j)<<16,100L<<16,65536L,0,DUKEICON,0,0,2+1,windowx1,windowy1,windowx2,windowy2); - } - } - } -#endif - - if (ud.pause_on==1 && (g_player[myconnectindex].ps->gm&MODE_MENU) == 0) - menutext(160,100,0,0,"GAME PAUSED"); - - if (ud.coords) - G_PrintCoords(screenpeek); - -#ifdef USE_OPENGL - { - extern int32_t mdpause; - - mdpause = 0; - if (ud.pause_on || (ud.recstat==2 && (g_demo_paused && g_demo_goalCnt==0)) || (g_player[myconnectindex].ps->gm&MODE_MENU && numplayers < 2)) - mdpause = 1; - } -#endif - - G_PrintFPS(); - - // JBF 20040124: display level stats in screen corner - if ((ud.overhead_on != 2 && ud.levelstats) && (g_player[myconnectindex].ps->gm&MODE_MENU) == 0) - { - if (ud.screen_size == 4) - { - i = scale(ud.althud?tilesizy[BIGALPHANUM]+10:tilesizy[INVENTORYBOX]+2,ud.statusbarscale,100); -// j = scale(scale(6,ud.config.ScreenWidth,320),ud.statusbarscale,100); - } - else if (ud.screen_size > 2) - { - i = scale(tilesizy[BOTTOMSTATUSBAR]+1,ud.statusbarscale,100); - // j = scale(2,ud.config.ScreenWidth,320); - } - else - { - i = 2; - // j = scale(2,ud.config.ScreenWidth,320); - } - j = scale(2,ud.config.ScreenWidth,320); - - Bsprintf(tempbuf,"T:^15%d:%02d.%02d", - (g_player[myconnectindex].ps->player_par/(REALGAMETICSPERSEC*60)), - (g_player[myconnectindex].ps->player_par/REALGAMETICSPERSEC)%60, - ((g_player[myconnectindex].ps->player_par%REALGAMETICSPERSEC)*33)/10 - ); - G_PrintGameText(13,STARTALPHANUM, j,scale(200-i,ud.config.ScreenHeight,200)-textsc(21),tempbuf,0,10,26,0, 0, xdim-1, ydim-1, 65536); - - if (ud.player_skill > 3 || ((g_netServer || ud.multimode > 1) && !GTFLAGS(GAMETYPE_PLAYERSFRIENDLY))) - Bsprintf(tempbuf,"K:^15%d",(ud.multimode>1 &&!GTFLAGS(GAMETYPE_PLAYERSFRIENDLY))? - g_player[myconnectindex].ps->frag-g_player[myconnectindex].ps->fraggedself:g_player[myconnectindex].ps->actors_killed); - else - { - if (g_player[myconnectindex].ps->actors_killed >= g_player[myconnectindex].ps->max_actors_killed) - Bsprintf(tempbuf,"K:%d/%d",g_player[myconnectindex].ps->actors_killed, - g_player[myconnectindex].ps->max_actors_killed>g_player[myconnectindex].ps->actors_killed? - g_player[myconnectindex].ps->max_actors_killed:g_player[myconnectindex].ps->actors_killed); - else - Bsprintf(tempbuf,"K:^15%d/%d",g_player[myconnectindex].ps->actors_killed, - g_player[myconnectindex].ps->max_actors_killed>g_player[myconnectindex].ps->actors_killed? - g_player[myconnectindex].ps->max_actors_killed:g_player[myconnectindex].ps->actors_killed); - } - G_PrintGameText(13,STARTALPHANUM, j,scale(200-i,ud.config.ScreenHeight,200)-textsc(14),tempbuf,0,10,26,0, 0, xdim-1, ydim-1, 65536); - - if (g_player[myconnectindex].ps->secret_rooms == g_player[myconnectindex].ps->max_secret_rooms) - Bsprintf(tempbuf,"S:%d/%d", g_player[myconnectindex].ps->secret_rooms,g_player[myconnectindex].ps->max_secret_rooms); - else Bsprintf(tempbuf,"S:^15%d/%d", g_player[myconnectindex].ps->secret_rooms,g_player[myconnectindex].ps->max_secret_rooms); - G_PrintGameText(13,STARTALPHANUM, j,scale(200-i,ud.config.ScreenHeight,200)-textsc(7),tempbuf,0,10,26,0, 0, xdim-1, ydim-1, 65536); - } - - if (g_player[myconnectindex].gotvote == 0 && voting != -1 && voting != myconnectindex) - { - Bsprintf(tempbuf,"%s^00 HAS CALLED A VOTE FOR MAP",g_player[voting].user_name); - gametext(160,40,tempbuf,0,2+8+16); - Bsprintf(tempbuf,"%s (E%dL%d)",MapInfo[vote_episode*MAXLEVELS + vote_map].name,vote_episode+1,vote_map+1); - gametext(160,48,tempbuf,0,2+8+16); - gametext(160,70,"PRESS F1 TO ACCEPT, F2 TO DECLINE",0,2+8+16); - } - - if (BUTTON(gamefunc_Show_DukeMatch_Scores)) G_ShowScores(); - - if (g_Debug) G_ShowCacheLocks(); - - if (VOLUMEONE) - { - if (ud.show_help == 0 && g_showShareware > 0 && (g_player[myconnectindex].ps->gm&MODE_MENU) == 0) - rotatesprite((320-50)<<16,9<<16,65536L,0,BETAVERSION,0,0,2+8+16+128,0,0,xdim-1,ydim-1); - } - - if (g_player[myconnectindex].ps->gm&MODE_TYPE) - Net_EnterMessage(); - else - M_DisplayMenus(); - - if (tempTint.f > 0 || applyTint) - G_FadePalette(tempTint.r,tempTint.g,tempTint.b,tempTint.f|128); -} - -static void G_DoThirdPerson(DukePlayer_t *pp, vec3_t *vect,int16_t *vsectnum, int32_t ang, int32_t horiz) -{ - spritetype *sp = &sprite[pp->i]; - int32_t i, hx, hy; - int32_t daang; - int32_t bakcstat = sp->cstat; - hitdata_t hitinfo; - vec3_t n = { (sintable[(ang+1536)&2047]>>4), - (sintable[(ang+1024)&2047]>>4), - (horiz-100)*128 - }; - - sp->cstat &= (int16_t)~0x101; - - updatesectorz(vect->x,vect->y,vect->z,vsectnum); - hitscan((const vec3_t *)vect,*vsectnum,n.x,n.y,n.z,&hitinfo,CLIPMASK1); - - if (*vsectnum < 0) - { - sp->cstat = bakcstat; - return; - } - - hx = hitinfo.pos.x-(vect->x); - hy = hitinfo.pos.y-(vect->y); - if (klabs(n.x)+klabs(n.y) > klabs(hx)+klabs(hy)) - { - *vsectnum = hitinfo.hitsect; - if (hitinfo.hitwall >= 0) - { - daang = getangle(wall[wall[hitinfo.hitwall].point2].x-wall[hitinfo.hitwall].x, - wall[wall[hitinfo.hitwall].point2].y-wall[hitinfo.hitwall].y); - - i = n.x*sintable[daang]+n.y*sintable[(daang+1536)&2047]; - if (klabs(n.x) > klabs(n.y)) hx -= mulscale28(n.x,i); - else hy -= mulscale28(n.y,i); - } - else if (hitinfo.hitsprite < 0) - { - if (klabs(n.x) > klabs(n.y)) hx -= (n.x>>5); - else hy -= (n.y>>5); - } - if (klabs(n.x) > klabs(n.y)) i = divscale16(hx,n.x); - else i = divscale16(hy,n.y); - if (i < g_cameraDistance) g_cameraDistance = i; - } - vect->x += mulscale16(n.x,g_cameraDistance); - vect->y += mulscale16(n.y,g_cameraDistance); - vect->z += mulscale16(n.z,g_cameraDistance); - - g_cameraDistance = min(g_cameraDistance+((totalclock-g_cameraClock)<<10),65536); - g_cameraClock = totalclock; - - updatesectorz(vect->x,vect->y,vect->z,vsectnum); - - sp->cstat = bakcstat; -} - -//REPLACE FULLY -void G_DrawBackground(void) -{ - int32_t dapicnum; - int32_t x,y,x1,y1,x2,y2,rx; - - flushperms(); - - dapicnum = BIGHOLE; - - if (tilesizx[dapicnum] == 0 || tilesizy[dapicnum] == 0) - { - pus = pub = NUMPAGES; - return; - } - - y1 = 0; - y2 = ydim; - if (g_player[myconnectindex].ps->gm &MODE_GAME || ud.recstat == 2) - { - if (GametypeFlags[ud.coop] & GAMETYPE_FRAGBAR) - { - if ((g_netServer || ud.multimode > 1)) y1 += scale(ydim,8,200); - if (ud.multimode > 4) y1 += scale(ydim,8,200); - } - } - else - { - // when not rendering a game, fullscreen wipe -#define MENUTILE (!getrendermode()?MENUSCREEN:LOADSCREEN) -// Gv_SetVar(g_iReturnVarID,tilesizx[MENUTILE]==320&&tilesizy[MENUTILE]==200?MENUTILE:BIGHOLE, -1, -1); - aGameVars[g_iReturnVarID].val.lValue = (tilesizx[MENUTILE]==320&&tilesizy[MENUTILE]==200?MENUTILE:BIGHOLE); - if (apScriptGameEvent[EVENT_GETMENUTILE]) - VM_OnEvent(EVENT_GETMENUTILE, -1, myconnectindex, -1); - if (Gv_GetVarByLabel("MENU_TILE", tilesizx[MENUTILE]==320&&tilesizy[MENUTILE]==200?0:1, -1, -1)) - { - for (y=y1; y 8) - { - // across top - for (y=0; y= 8 && ud.statusbarmode == 0) - { - /* - y1 = y2; - x2 = (xdim - scale(xdim,ud.statusbarscale,100)) >> 1; - x1 = xdim-x2; - x1 -= x1%tilesizx[dapicnum]; - for (y=y1-y1%tilesizy[dapicnum]; y> 1; - for (y=y2-y2%tilesizy[dapicnum]; y>1; x+=tilesizx[dapicnum]) - { - rotatesprite(x<<16,y<<16,65536L,0,dapicnum,8,0,8+16+64,0,y2,x2,ydim-1); - rotatesprite((xdim-x)<<16,y<<16,65536L,0,dapicnum,8,0,8+16+64,xdim-x2-1,y2,xdim-1,ydim-1); - } - - } - - if (ud.screen_size > 8) - { - y = 0; - if (GametypeFlags[ud.coop] & GAMETYPE_FRAGBAR) - { - if ((g_netServer || ud.multimode > 1)) y += 8; - if (ud.multimode > 4) y += 8; - } - - x1 = max(windowx1-4,0); - y1 = max(windowy1-4,y); - x2 = min(windowx2+4,xdim-1); - y2 = min(windowy2+4,scale(ydim,200-scale(tilesizy[BOTTOMSTATUSBAR],ud.statusbarscale,100),200)-1); - - for (y=y1+4; yyvel; - - if (klabs(sector[sp->sectnum].floorz - sp->z) < klabs(sector[sprite[sprite2].sectnum].floorz - sprite[sprite2].z)) - level = 1; - - x = ud.camera.x - sp->x; - y = ud.camera.y - sp->y; - z = ud.camera.z - (level ? sector[sp->sectnum].floorz : sector[sp->sectnum].ceilingz); - - sect = sprite[sprite2].sectnum; - updatesector(sprite[sprite2].x + x, sprite[sprite2].y + y, §); - - if (sect != -1) - { - int32_t renderz, picnum; - int16_t backupstat[MAXSECTORS]; - int32_t backupz[MAXSECTORS]; - int32_t i; - int32_t pix_diff, newz; - // initprintf("drawing ror\n"); - - if (level) - { - // renderz = sector[sprite[sprite2].sectnum].ceilingz; - renderz = sprite[sprite2].z - (sprite[sprite2].yrepeat * tilesizy[sprite[sprite2].picnum]<<1); - picnum = sector[sprite[sprite2].sectnum].ceilingpicnum; - sector[sprite[sprite2].sectnum].ceilingpicnum = 562; - tilesizx[562] = tilesizy[562] = 0; - - pix_diff = klabs(z) >> 8; - newz = - ((pix_diff / 128) + 1) * (128<<8); - - for (i = 0; i < numsectors; i++) - { - backupstat[i] = sector[i].ceilingstat; - backupz[i] = sector[i].ceilingz; - if (!ror_protectedsectors[i] || (ror_protectedsectors[i] && sp->lotag == 41)) - { - sector[i].ceilingstat = 1; - sector[i].ceilingz += newz; - } - } - } - else - { - // renderz = sector[sprite[sprite2].sectnum].floorz; - renderz = sprite[sprite2].z; - picnum = sector[sprite[sprite2].sectnum].floorpicnum; - sector[sprite[sprite2].sectnum].floorpicnum = 562; - tilesizx[562] = tilesizy[562] = 0; - - pix_diff = klabs(z) >> 8; - newz = ((pix_diff / 128) + 1) * (128<<8); - - for (i = 0; i < numsectors; i++) - { - backupstat[i] = sector[i].floorstat; - backupz[i] = sector[i].floorz; - if (!ror_protectedsectors[i] || (ror_protectedsectors[i] && sp->lotag == 41)) - { - sector[i].floorstat = 1; - sector[i].floorz = +newz; - } - } - } - -#ifdef POLYMER - if (getrendermode() == 4) - polymer_setanimatesprites(G_DoSpriteAnimations, ud.camera.x, ud.camera.y, ud.cameraang, smoothratio); -#endif - - drawrooms(sprite[sprite2].x + x, sprite[sprite2].y + y, - z + renderz, ud.cameraang, ud.camerahoriz, sect); - drawing_ror = 1 + level; - - // dupe the sprites touching the portal to the other sector - - if (drawing_ror == 2) // viewing from top - { - int32_t k = headspritesect[sp->sectnum]; - - while (k != -1) - { - if (sprite[k].picnum != SECTOREFFECTOR && (sprite[k].z >= sp->z)) - { - Bmemcpy((spritetype *)&tsprite[spritesortcnt],(spritetype *)&sprite[k],sizeof(spritetype)); - - tsprite[spritesortcnt].x += (sprite[sp->yvel].x-sp->x); - tsprite[spritesortcnt].y += (sprite[sp->yvel].y-sp->y); - tsprite[spritesortcnt].z = tsprite[spritesortcnt].z - sp->z + actor[sp->yvel].ceilingz; - tsprite[spritesortcnt].sectnum = sprite[sp->yvel].sectnum; - tsprite[spritesortcnt].owner = k; - - //OSD_Printf("duped sprite of pic %d at %d %d %d\n",tsprite[spritesortcnt].picnum,tsprite[spritesortcnt].x,tsprite[spritesortcnt].y,tsprite[spritesortcnt].z); - spritesortcnt++; - } - k = nextspritesect[k]; - } - } - - G_DoSpriteAnimations(ud.camera.x,ud.camera.y,ud.cameraang,smoothratio); - drawmasks(); - - if (level) - { - sector[sprite[sprite2].sectnum].ceilingpicnum = picnum; - for (i = 0; i < numsectors; i++) - { - sector[i].ceilingstat = backupstat[i]; - sector[i].ceilingz = backupz[i]; - } - } - else - { - sector[sprite[sprite2].sectnum].floorpicnum = picnum; - - for (i = 0; i < numsectors; i++) - { - sector[i].floorstat = backupstat[i]; - sector[i].floorz = backupz[i]; - } - } - } - } -} - -void G_DrawRooms(int32_t snum, int32_t smoothratio) -{ - int32_t dst,j,fz,cz; - int32_t tposx,tposy,i; - int16_t k; - DukePlayer_t *p = g_player[snum].ps; - int16_t tang; - int32_t tiltcx,tiltcy,tiltcs=0; // JBF 20030807 - - int32_t tmpyx=yxaspect, tmpvr=viewingrange; - - if (g_networkMode == NET_DEDICATED_SERVER) return; - - if (pub > 0 || getrendermode() >= 3) // JBF 20040101: redraw background always - { - if (getrendermode() >= 3 || ud.screen_size > 8 || (ud.screen_size == 8 && ud.statusbarscale<100)) - G_DrawBackground(); - pub = 0; - } - - if (ud.overhead_on == 2 || ud.show_help || (p->cursectnum == -1 && getrendermode() < 3)) - return; - - if (r_usenewaspect) - { - newaspect_enable = 1; - setaspect_new(); - } - -// smoothratio = min(max(smoothratio,0),65536); - smoothratio = min(max((totalclock - ototalclock) * (65536 / 4),0),65536); - - visibility = (int32_t)(p->visibility * (numplayers > 1 ? 1.f : r_ambientlightrecip)); - - if (ud.pause_on || g_player[snum].ps->on_crane > -1) smoothratio = 65536; - - ud.camerasect = p->cursectnum; - - G_DoInterpolations(smoothratio); - G_AnimateCamSprite(); - - if (ud.camerasprite >= 0) - { - spritetype *s = &sprite[ud.camerasprite]; - - if (s->yvel < 0) s->yvel = -100; - else if (s->yvel > 199) s->yvel = 300; - - ud.cameraang = actor[ud.camerasprite].tempang+ - mulscale16((int32_t)(((s->ang+1024-actor[ud.camerasprite].tempang)&2047)-1024),smoothratio); - - G_SE40(smoothratio); - -#ifdef POLYMER - if (getrendermode() == 4) - polymer_setanimatesprites(G_DoSpriteAnimations, s->x, s->y, ud.cameraang, smoothratio); -#endif - - drawrooms(s->x,s->y,s->z-(4<<8),ud.cameraang,s->yvel,s->sectnum); - - G_DoSpriteAnimations(s->x,s->y,ud.cameraang,smoothratio); - - drawmasks(); - } - else - { - i = divscale22(1,sprite[p->i].yrepeat+28); - - if (!r_usenewaspect) - { -// if (i != oyrepeat) - { - oyrepeat = i; - setaspect(oyrepeat,yxaspect); - } - } - else - { - tmpvr = i; - tmpyx = (65536*ydim*8)/(xdim*5); - } - - if (g_screenCapture) - { - walock[TILE_SAVESHOT] = 199; - if (waloff[TILE_SAVESHOT] == 0) - allocache(&waloff[TILE_SAVESHOT],200*320,&walock[TILE_SAVESHOT]); - setviewtotile(TILE_SAVESHOT,200L,320L); - } - else if (getrendermode() == 0 && ((ud.screen_tilting && p->rotscrnang) || ud.detail==0)) - { - if (ud.screen_tilting) tang = p->rotscrnang; - else tang = 0; - - if (xres <= 320 && yres <= 240) - { - // JBF 20030807: Increased tilted-screen quality - tiltcs = 1; - tiltcx = 320; - tiltcy = 200; - } - else - { - tiltcs = 2; - tiltcx = 640; - tiltcy = 400; - } - - walock[TILE_TILT] = 255; - if (waloff[TILE_TILT] == 0) - allocache(&waloff[TILE_TILT],tiltcx*tiltcx,&walock[TILE_TILT]); - if ((tang&1023) == 0) - setviewtotile(TILE_TILT,tiltcy>>(1-ud.detail),tiltcx>>(1-ud.detail)); - else - setviewtotile(TILE_TILT,tiltcx>>(1-ud.detail),tiltcx>>(1-ud.detail)); - if ((tang&1023) == 512) - { - //Block off unscreen section of 90ø tilted screen - j = ((tiltcx-(60*tiltcs))>>(1-ud.detail)); - for (i=((60*tiltcs)>>(1-ud.detail))-1; i>=0; i--) - { - startumost[i] = 1; - startumost[i+j] = 1; - startdmost[i] = 0; - startdmost[i+j] = 0; - } - } - - i = (tang&511); - if (i > 256) i = 512-i; - i = sintable[i+512]*8 + sintable[i]*5L; - setaspect(i>>1,yxaspect); - - tmpvr = i>>1; - tmpyx = (65536*ydim*8)/(xdim*5); - } - else if (getrendermode() > 0 && ud.screen_tilting /*&& (p->rotscrnang || p->orotscrnang)*/) - { -#ifdef USE_OPENGL - setrollangle(p->orotscrnang + mulscale16(((p->rotscrnang - p->orotscrnang + 1024)&2047)-1024,smoothratio)); -#endif - p->orotscrnang = p->rotscrnang; // JBF: save it for next time - } - - { - vec3_t cam = { p->opos.x+mulscale16((int32_t)(p->pos.x-p->opos.x),smoothratio), - p->opos.y+mulscale16((int32_t)(p->pos.y-p->opos.y),smoothratio), - p->opos.z+mulscale16((int32_t)(p->pos.z-p->opos.z),smoothratio) - }; - - Bmemcpy(&ud.camera, &cam, sizeof(vec3_t)); - ud.cameraang = p->oang+mulscale16((int32_t)(((p->ang+1024-p->oang)&2047)-1024),smoothratio); - ud.camerahoriz = p->ohoriz+p->ohorizoff+mulscale16((int32_t)(p->horiz+p->horizoff-p->ohoriz-p->ohorizoff),smoothratio); - } - ud.cameraang += p->look_ang; - - if (p->newowner >= 0) - { - ud.cameraang = p->ang+p->look_ang; - ud.camerahoriz = p->horiz+p->horizoff; - Bmemcpy(&ud.camera, p, sizeof(vec3_t)); - ud.camerasect = sprite[p->newowner].sectnum; - smoothratio = 65536L; - } - else if (ud.viewbob) // if (p->over_shoulder_on == 0) - { - if (p->over_shoulder_on) - ud.camera.z += (p->opyoff+mulscale16((int32_t)(p->pyoff-p->opyoff),smoothratio))>>3; - else ud.camera.z += p->opyoff+mulscale16((int32_t)(p->pyoff-p->opyoff),smoothratio); - } - if (p->over_shoulder_on) - { - ud.camera.z -= 3072; - G_DoThirdPerson(p,(vec3_t *)&ud,&ud.camerasect,ud.cameraang,ud.camerahoriz); - } - - cz = actor[p->i].ceilingz; - fz = actor[p->i].floorz; - - if (g_earthquakeTime > 0 && p->on_ground == 1) - { - ud.camera.z += 256-(((g_earthquakeTime)&1)<<9); - ud.cameraang += (2-((g_earthquakeTime)&2))<<2; - } - - if (sprite[p->i].pal == 1) ud.camera.z -= (18<<8); - - if (p->newowner >= 0) - ud.camerahoriz = 100+sprite[p->newowner].shade; - else if (p->spritebridge == 0) - { - if (ud.camera.z < (p->truecz + (4<<8))) ud.camera.z = cz + (4<<8); - else if (ud.camera.z > (p->truefz - (4<<8))) ud.camera.z = fz - (4<<8); - } - - if (ud.camerasect >= 0) - { - getzsofslope(ud.camerasect,ud.camera.x,ud.camera.y,&cz,&fz); - if (ud.camera.z < cz+(4<<8)) ud.camera.z = cz+(4<<8); - if (ud.camera.z > fz-(4<<8)) ud.camera.z = fz-(4<<8); - } - - if (ud.camerahoriz > HORIZ_MAX) ud.camerahoriz = HORIZ_MAX; - else if (ud.camerahoriz < HORIZ_MIN) ud.camerahoriz = HORIZ_MIN; - - if (apScriptGameEvent[EVENT_DISPLAYROOMS]) - VM_OnEvent(EVENT_DISPLAYROOMS, g_player[screenpeek].ps->i, screenpeek, -1); - - if (((gotpic[MIRROR>>3]&(1<<(MIRROR&7))) > 0) -#ifdef USE_OPENGL - && (getrendermode() != 4) -#endif - ) - { - dst = 0x7fffffff; - i = 0; - for (k=g_mirrorCount-1; k>=0; k--) - { - j = klabs(wall[g_mirrorWall[k]].x-ud.camera.x); - j += klabs(wall[g_mirrorWall[k]].y-ud.camera.y); - if (j < dst) dst = j, i = k; - } - - if (wall[g_mirrorWall[i]].overpicnum == MIRROR) - { - preparemirror(ud.camera.x,ud.camera.y,ud.camera.z,ud.cameraang,ud.camerahoriz,g_mirrorWall[i],g_mirrorSector[i],&tposx,&tposy,&tang); - - j = visibility; - visibility = (j>>1) + (j>>2); - - drawrooms(tposx,tposy,ud.camera.z,tang,ud.camerahoriz,g_mirrorSector[i]+MAXSECTORS); - - display_mirror = 1; - G_DoSpriteAnimations(tposx,tposy,tang,smoothratio); - display_mirror = 0; - - drawmasks(); - completemirror(); //Reverse screen x-wise in this function - visibility = j; - } - gotpic[MIRROR>>3] &= ~(1<<(MIRROR&7)); - } - - G_SE40(smoothratio); - -#ifdef POLYMER - if (getrendermode() == 4) - polymer_setanimatesprites(G_DoSpriteAnimations, ud.camera.x,ud.camera.y,ud.cameraang,smoothratio); -#endif - - drawrooms(ud.camera.x,ud.camera.y,ud.camera.z,ud.cameraang,ud.camerahoriz,ud.camerasect); - - // dupe the sprites touching the portal to the other sector - - if (ror_sprite != -1) - { - spritetype *sp = &sprite[ror_sprite]; - - // viewing from bottom - if (drawing_ror == 1) - { - int32_t k = headspritesect[sp->sectnum]; - - while (k != -1) - { - if (sprite[k].picnum != SECTOREFFECTOR && (sprite[k].z >= sp->z)) - { - Bmemcpy((spritetype *)&tsprite[spritesortcnt],(spritetype *)&sprite[k],sizeof(spritetype)); - - tsprite[spritesortcnt].x += (sprite[sp->yvel].x-sp->x); - tsprite[spritesortcnt].y += (sprite[sp->yvel].y-sp->y); - tsprite[spritesortcnt].z = tsprite[spritesortcnt].z - sp->z + actor[sp->yvel].ceilingz; - tsprite[spritesortcnt].sectnum = sprite[sp->yvel].sectnum; - tsprite[spritesortcnt].owner = k; - - //OSD_Printf("duped sprite of pic %d at %d %d %d\n",tsprite[spritesortcnt].picnum,tsprite[spritesortcnt].x,tsprite[spritesortcnt].y,tsprite[spritesortcnt].z); - spritesortcnt++; - } - k = nextspritesect[k]; - } - } - } - - G_DoSpriteAnimations(ud.camera.x,ud.camera.y,ud.cameraang,smoothratio); - - drawing_ror = 0; - drawmasks(); - - if (g_screenCapture == 1) - { - setviewback(); - g_screenCapture = 0; - // walock[TILE_SAVESHOT] = 1; - } - else if (getrendermode() == 0 && ((ud.screen_tilting && p->rotscrnang) || ud.detail==0)) - { - if (ud.screen_tilting) tang = p->rotscrnang; - else tang = 0; - - if (getrendermode() == 0) - { - setviewback(); - picanm[TILE_TILT] &= 0xff0000ff; - i = (tang&511); - if (i > 256) i = 512-i; - i = sintable[i+512]*8 + sintable[i]*5L; - if ((1-ud.detail) == 0) i >>= 1; - i>>=(tiltcs-1); // JBF 20030807 - rotatesprite(160<<16,100<<16,i,tang+512,TILE_TILT,0,0,4+2+64,windowx1,windowy1,windowx2,windowy2); - walock[TILE_TILT] = 199; - } - } - } - - G_RestoreInterpolations(); - - if (totalclock < lastvisinc) - { - if (klabs(p->visibility-ud.const_visibility) > 8) - p->visibility += (ud.const_visibility-p->visibility)>>2; - } - else p->visibility = ud.const_visibility; - - if (r_usenewaspect) - { - newaspect_enable = 0; - setaspect(tmpvr, tmpyx); - } -} - -static void G_DumpDebugInfo(void) -{ - int32_t i,j,x; - // FILE * fp=fopen("condebug.log","w"); - - OSD_Printf("Current gamevar values:\n"); - for (i=0; i= 0) - { - OSD_Printf("Sprite %d (%d,%d,%d) (picnum: %d)\n",j,sprite[j].x,sprite[j].y,sprite[j].z,sprite[j].picnum); - for (i=0; ipos.x,&g_player[myconnectindex].ps->pos.y, - &g_player[myconnectindex].ps->pos.z,&g_player[myconnectindex].ps->ang,&g_player[myconnectindex].ps->cursectnum); -} - -int32_t A_InsertSprite(int32_t whatsect,int32_t s_x,int32_t s_y,int32_t s_z,int32_t s_pn,int32_t s_s,int32_t s_xr,int32_t s_yr,int32_t s_a,int32_t s_ve,int32_t s_zv,int32_t s_ow,int32_t s_ss) -{ - int32_t p, i = insertsprite(whatsect,s_ss); - spritetype *s = &sprite[i]; - spritetype spr_temp = { s_x, s_y, s_z, 0, s_pn, s_s, 0, 0, 0, s_xr, s_yr, 0, 0, - whatsect, s_ss, s_a, s_ow, s_ve, 0, s_zv, 0, 0, 0 - }; - - if (i < 0) - { - G_DumpDebugInfo(); - OSD_Printf("Failed spawning pic %d spr from pic %d spr %d at x:%d,y:%d,z:%d,sect:%d\n", - s_pn,sprite[s_ow].picnum,s_ow,s_x,s_y,s_z,whatsect); - G_GameExit("Too many sprites spawned."); - } - - Bmemcpy(s, &spr_temp, sizeof(spritetype)); - Bmemset(&actor[i], 0, sizeof(actor_t)); - Bmemcpy(&actor[i].bposx, s, sizeof(vec3_t)); // update bposx/y/z - - actor[i].projectile = &SpriteProjectile[i]; - - if (s_ow > -1 && s_ow < MAXSPRITES) - { - actor[i].picnum = sprite[s_ow].picnum; - actor[i].floorz = actor[s_ow].floorz; - actor[i].ceilingz = actor[s_ow].ceilingz; - } - - actor[i].actorstayput = actor[i].extra = actor[i].lightId = -1; - actor[i].owner = s_ow; - - // sprpos[i].ang = sprpos[i].oldang = sprite[i].ang; - - if (actorscrptr[s_pn]) - { - s->extra = *actorscrptr[s_pn]; - T5 = *(actorscrptr[s_pn]+1); - T2 = *(actorscrptr[s_pn]+2); - s->hitag = *(actorscrptr[s_pn]+3); - } - - if (show2dsector[SECT>>3]&(1<<(SECT&7))) show2dsprite[i>>3] |= (1<<(i&7)); - else show2dsprite[i>>3] &= ~(1<<(i&7)); - - clearbufbyte(&spriteext[i], sizeof(spriteext_t), 0); - clearbufbyte(&spritesmooth[i], sizeof(spritesmooth_t), 0); - - A_ResetVars(i); - - lastupdate[i] = 0; - - if (apScriptGameEvent[EVENT_EGS]) - { - extern int32_t block_deletesprite; - int32_t pl=A_FindPlayer(s, &p); - - block_deletesprite++; - VM_OnEvent(EVENT_EGS, i, pl, p); - block_deletesprite--; - } - - return(i); -} - -int32_t A_Spawn(int32_t j, int32_t pn) -{ - int32_t i, s, startwall, endwall, sect, clostest=0; - int32_t x, y, d, p; - spritetype *sp; - - if (j >= 0) - { - i = A_InsertSprite(sprite[j].sectnum,sprite[j].x,sprite[j].y,sprite[j].z - ,pn,0,0,0,0,0,0,j,0); - actor[i].picnum = sprite[j].picnum; - } - else - { - i = pn; - - Bmemset(&actor[i], 0, sizeof(actor_t)); - Bmemcpy(&actor[i].bposx, &sprite[i], sizeof(vec3_t)); - - actor[i].picnum = PN; - - if (PN == SECTOREFFECTOR && SLT == 50) - actor[i].picnum = OW; - - actor[i].projectile = &SpriteProjectile[i]; - - OW = actor[i].owner = i; - - actor[i].floorz = sector[SECT].floorz; - actor[i].ceilingz = sector[SECT].ceilingz; - - actor[i].actorstayput = actor[i].lightId = actor[i].extra = -1; - - if (PN != SPEAKER && PN != LETTER && PN != DUCK && PN != TARGET && PN != TRIPBOMB && PN != VIEWSCREEN && PN != VIEWSCREEN2 && (CS&48)) - if (!(PN >= CRACK1 && PN <= CRACK4)) - { - if (SS == 127) goto SPAWN_END; - if (A_CheckSwitchTile(i) == 1 && (CS&16)) - { - if (PN != ACCESSSWITCH && PN != ACCESSSWITCH2 && sprite[i].pal) - { - if (((!g_netServer && ud.multimode < 2)) || ((g_netServer || ud.multimode > 1) && !GTFLAGS(GAMETYPE_DMSWITCHES))) - { - sprite[i].xrepeat = sprite[i].yrepeat = 0; - SLT = SHT = 0; - sprite[i].cstat = 32768; - goto SPAWN_END; - } - } - CS |= 257; - if (sprite[i].pal && PN != ACCESSSWITCH && PN != ACCESSSWITCH2) - sprite[i].pal = 0; - goto SPAWN_END; - } - - if (SHT) - { - changespritestat(i,12); - CS |= 257; - SH = g_impactDamage; - goto SPAWN_END; - } - } - - s = PN; - - if (CS&1) CS |= 256; - - if (actorscrptr[s]) - { - SH = *(actorscrptr[s]); - T5 = *(actorscrptr[s]+1); - T2 = *(actorscrptr[s]+2); - if (*(actorscrptr[s]+3) && SHT == 0) - SHT = *(actorscrptr[s]+3); - } - else T2 = T5 = 0; - } - - sp = &sprite[i]; - sect = sp->sectnum; - - //some special cases that can't be handled through the dynamictostatic system. - if (((sp->picnum >= BOLT1)&&(sp->picnum <= BOLT1+3))||((sp->picnum >= SIDEBOLT1)&&(sp->picnum <= SIDEBOLT1+3))) - { - T1 = sp->xrepeat; - T2 = sp->yrepeat; - sp->yvel = 0; - changespritestat(i,6); - } - else if (((sp->picnum >= CAMERA1)&&(sp->picnum <= CAMERA1+3))||(sp->picnum==CAMERAPOLE)||(sp->picnum==GENERICPOLE)) - { - if (sp->picnum != GENERICPOLE) - { - sp->extra = 1; - - if (g_damageCameras) sp->cstat = 257; - else sp->cstat = 0; - } - if ((!g_netServer && ud.multimode < 2) && sp->pal != 0) - { - sp->xrepeat = sp->yrepeat = 0; - changespritestat(i,5); - } - else - { - sp->pal = 0; - if (!(sp->picnum == CAMERAPOLE || sp->picnum == GENERICPOLE)) - { - sp->picnum = CAMERA1; - changespritestat(i, STAT_ACTOR); - } - } - } - else switch (DynamicTileMap[sp->picnum]) - { - default: - if (actorscrptr[sp->picnum]) - { - if (j == -1 && sp->lotag > ud.player_skill) - { - sp->xrepeat=sp->yrepeat=0; - changespritestat(i,5); - break; - } - - // Init the size - if (sp->xrepeat == 0 || sp->yrepeat == 0) - sp->xrepeat = sp->yrepeat = 1; - - if (ActorType[sp->picnum] & 3) - { - if (ud.monsters_off == 1) - { - sp->xrepeat=sp->yrepeat=0; - changespritestat(i,5); - break; - } - - A_Fall(i); - - if (ActorType[sp->picnum] & 2) - actor[i].actorstayput = sp->sectnum; - - g_player[myconnectindex].ps->max_actors_killed++; - sp->clipdist = 80; - if (j >= 0) - { - if (sprite[j].picnum == RESPAWN) - actor[i].tempang = sprite[i].pal = sprite[j].pal; - changespritestat(i, STAT_ACTOR); - } - else changespritestat(i, STAT_ZOMBIEACTOR); - } - else - { - sp->clipdist = 40; - sp->owner = i; - changespritestat(i, STAT_ACTOR); - } - - actor[i].timetosleep = 0; - - if (j >= 0) - sp->ang = sprite[j].ang; - } - break; - case FOF__STATIC: - sp->xrepeat = sp->yrepeat = 0; - changespritestat(i,5); - break; - case WATERSPLASH2__STATIC: - if (j >= 0) - { - setsprite(i,(vec3_t *)&sprite[j]); - sp->xrepeat = sp->yrepeat = 8+(krand()&7); - } - else sp->xrepeat = sp->yrepeat = 16+(krand()&15); - - sp->shade = -16; - sp->cstat |= 128; - if (j >= 0) - { - if (sector[sprite[j].sectnum].lotag == 2) - { - sp->z = getceilzofslope(SECT,SX,SY)+(16<<8); - sp->cstat |= 8; - } - else if (sector[sprite[j].sectnum].lotag == 1) - sp->z = getflorzofslope(SECT,SX,SY); - } - - if (sector[sect].floorpicnum == FLOORSLIME || - sector[sect].ceilingpicnum == FLOORSLIME) - sp->pal = 7; - case DOMELITE__STATIC: - if (sp->picnum == DOMELITE) - sp->cstat |= 257; - case NEON1__STATIC: - case NEON2__STATIC: - case NEON3__STATIC: - case NEON4__STATIC: - case NEON5__STATIC: - case NEON6__STATIC: - if (sp->picnum != WATERSPLASH2) - sp->cstat |= 257; - case NUKEBUTTON__STATIC: - case JIBS1__STATIC: - case JIBS2__STATIC: - case JIBS3__STATIC: - case JIBS4__STATIC: - case JIBS5__STATIC: - case JIBS6__STATIC: - case HEADJIB1__STATIC: - case ARMJIB1__STATIC: - case LEGJIB1__STATIC: - case LIZMANHEAD1__STATIC: - case LIZMANARM1__STATIC: - case LIZMANLEG1__STATIC: - case DUKETORSO__STATIC: - case DUKEGUN__STATIC: - case DUKELEG__STATIC: - changespritestat(i,5); - break; - case TONGUE__STATIC: - if (j >= 0) - sp->ang = sprite[j].ang; - sp->z -= 38<<8; - sp->zvel = 256-(krand()&511); - sp->xvel = 64-(krand()&127); - changespritestat(i,4); - break; - case NATURALLIGHTNING__STATIC: - sp->cstat &= ~257; - sp->cstat |= 32768; - break; - case TRANSPORTERSTAR__STATIC: - case TRANSPORTERBEAM__STATIC: - if (j == -1) break; - if (sp->picnum == TRANSPORTERBEAM) - { - sp->xrepeat = 31; - sp->yrepeat = 1; - sp->z = sector[sprite[j].sectnum].floorz-PHEIGHT; - } - else - { - if (sprite[j].statnum == STAT_PROJECTILE) - sp->xrepeat = sp->yrepeat = 8; - else - { - sp->xrepeat = 48; - sp->yrepeat = 64; - if (sprite[j].statnum == STAT_PLAYER || A_CheckEnemySprite(&sprite[j])) - sp->z -= (32<<8); - } - } - - sp->shade = -127; - sp->cstat = 128|2; - sp->ang = sprite[j].ang; - - sp->xvel = 128; - changespritestat(i,5); - A_SetSprite(i,CLIPMASK0); - setsprite(i,(vec3_t *)sp); - break; - - case FRAMEEFFECT1_13__STATIC: - if (PLUTOPAK) break; - case FRAMEEFFECT1__STATIC: - if (j >= 0) - { - sp->xrepeat = sprite[j].xrepeat; - sp->yrepeat = sprite[j].yrepeat; - T2 = sprite[j].picnum; - } - else sp->xrepeat = sp->yrepeat = 0; - - changespritestat(i,5); - - break; - - case LASERLINE__STATIC: - sp->yrepeat = 6; - sp->xrepeat = 32; - - if (g_tripbombLaserMode == 1) - sp->cstat = 16 + 2; - else if (g_tripbombLaserMode == 0 || g_tripbombLaserMode == 2) - sp->cstat = 16; - else - { - sp->xrepeat = 0; - sp->yrepeat = 0; - } - - if (j >= 0) sp->ang = actor[j].t_data[5]+512; - changespritestat(i,5); - break; - - case FORCESPHERE__STATIC: - if (j == -1) - { - sp->cstat = (int16_t) 32768; - changespritestat(i, STAT_ZOMBIEACTOR); - } - else - { - sp->xrepeat = sp->yrepeat = 1; - changespritestat(i,5); - } - break; - - case BLOOD__STATIC: - sp->xrepeat = sp->yrepeat = 16; - sp->z -= (26<<8); - if (j >= 0 && sprite[j].pal == 6) - sp->pal = 6; - changespritestat(i,5); - break; - case BLOODPOOL__STATIC: - case PUKE__STATIC: - { - int16_t s1; - s1 = sp->sectnum; - - updatesector(sp->x+108,sp->y+108,&s1); - if (s1 >= 0 && sector[s1].floorz == sector[sp->sectnum].floorz) - { - updatesector(sp->x-108,sp->y-108,&s1); - if (s1 >= 0 && sector[s1].floorz == sector[sp->sectnum].floorz) - { - updatesector(sp->x+108,sp->y-108,&s1); - if (s1 >= 0 && sector[s1].floorz == sector[sp->sectnum].floorz) - { - updatesector(sp->x-108,sp->y+108,&s1); - if (s1 >= 0 && sector[s1].floorz != sector[sp->sectnum].floorz) - { - sp->xrepeat = sp->yrepeat = 0; - changespritestat(i,5); - break; - } - - } - else - { - sp->xrepeat = sp->yrepeat = 0; - changespritestat(i,5); - break; - } - - } - else - { - sp->xrepeat = sp->yrepeat = 0; - changespritestat(i,5); - break; - } - - } - else - { - sp->xrepeat = sp->yrepeat = 0; - changespritestat(i,5); - break; - } - - } - - if (sector[SECT].lotag == 1) - { - changespritestat(i,5); - break; - } - - if (j >= 0 && sp->picnum != PUKE) - { - if (sprite[j].pal == 1) - sp->pal = 1; - else if (sprite[j].pal != 6 && sprite[j].picnum != NUKEBARREL && sprite[j].picnum != TIRE) - { - if (sprite[j].picnum == FECES) - sp->pal = 7; // Brown - else sp->pal = 2; // Red - } - else sp->pal = 0; // green - - if (sprite[j].picnum == TIRE) - sp->shade = 127; - } - sp->cstat |= 32; - case FECES__STATIC: - if (j >= 0) - sp->xrepeat = sp->yrepeat = 1; - changespritestat(i,5); - break; - - case BLOODSPLAT1__STATIC: - case BLOODSPLAT2__STATIC: - case BLOODSPLAT3__STATIC: - case BLOODSPLAT4__STATIC: - sp->cstat |= 16; - sp->xrepeat = 7+(krand()&7); - sp->yrepeat = 7+(krand()&7); - sp->z -= (16<<8); - if (j >= 0 && sprite[j].pal == 6) - sp->pal = 6; - A_AddToDeleteQueue(i); - changespritestat(i,5); - break; - - case TRIPBOMB__STATIC: - if (sp->lotag > ud.player_skill) - { - sp->xrepeat=sp->yrepeat=0; - changespritestat(i,5); - break; - } - - sp->xrepeat=4; - sp->yrepeat=5; - - sp->owner = sp->hitag = i; - - sp->xvel = 16; - A_SetSprite(i,CLIPMASK0); - actor[i].t_data[0] = 17; - actor[i].t_data[2] = 0; - actor[i].t_data[5] = sp->ang; - changespritestat(i, STAT_ZOMBIEACTOR); - break; - - case SPACEMARINE__STATIC: - sp->extra = 20; - sp->cstat |= 257; - changespritestat(i, STAT_ZOMBIEACTOR); - break; - - case HYDRENT__STATIC: - case PANNEL1__STATIC: - case PANNEL2__STATIC: - case SATELITE__STATIC: - case FUELPOD__STATIC: - case SOLARPANNEL__STATIC: - case ANTENNA__STATIC: - case GRATE1__STATIC: - case CHAIR1__STATIC: - case CHAIR2__STATIC: - case CHAIR3__STATIC: - case BOTTLE1__STATIC: - case BOTTLE2__STATIC: - case BOTTLE3__STATIC: - case BOTTLE4__STATIC: - case BOTTLE5__STATIC: - case BOTTLE6__STATIC: - case BOTTLE7__STATIC: - case BOTTLE8__STATIC: - case BOTTLE10__STATIC: - case BOTTLE11__STATIC: - case BOTTLE12__STATIC: - case BOTTLE13__STATIC: - case BOTTLE14__STATIC: - case BOTTLE15__STATIC: - case BOTTLE16__STATIC: - case BOTTLE17__STATIC: - case BOTTLE18__STATIC: - case BOTTLE19__STATIC: - case OCEANSPRITE1__STATIC: - case OCEANSPRITE2__STATIC: - case OCEANSPRITE3__STATIC: - case OCEANSPRITE5__STATIC: - case MONK__STATIC: - case INDY__STATIC: - case LUKE__STATIC: - case JURYGUY__STATIC: - case SCALE__STATIC: - case VACUUM__STATIC: - case FANSPRITE__STATIC: - case CACTUS__STATIC: - case CACTUSBROKE__STATIC: - case HANGLIGHT__STATIC: - case FETUS__STATIC: - case FETUSBROKE__STATIC: - case CAMERALIGHT__STATIC: - case MOVIECAMERA__STATIC: - case IVUNIT__STATIC: - case POT1__STATIC: - case POT2__STATIC: - case POT3__STATIC: - case TRIPODCAMERA__STATIC: - case SUSHIPLATE1__STATIC: - case SUSHIPLATE2__STATIC: - case SUSHIPLATE3__STATIC: - case SUSHIPLATE4__STATIC: - case SUSHIPLATE5__STATIC: - case WAITTOBESEATED__STATIC: - case VASE__STATIC: - case PIPE1__STATIC: - case PIPE2__STATIC: - case PIPE3__STATIC: - case PIPE4__STATIC: - case PIPE5__STATIC: - case PIPE6__STATIC: - sp->clipdist = 32; - sp->cstat |= 257; - case OCEANSPRITE4__STATIC: - changespritestat(i,0); - break; - case FEMMAG1__STATIC: - case FEMMAG2__STATIC: - sp->cstat &= ~257; - changespritestat(i,0); - break; - case DUKETAG__STATIC: - case SIGN1__STATIC: - case SIGN2__STATIC: - if ((!g_netServer && ud.multimode < 2) && sp->pal) - { - sp->xrepeat = sp->yrepeat = 0; - changespritestat(i,5); - } - else sp->pal = 0; - break; - case MASKWALL1__STATIC: - case MASKWALL2__STATIC: - case MASKWALL3__STATIC: - case MASKWALL4__STATIC: - case MASKWALL5__STATIC: - case MASKWALL6__STATIC: - case MASKWALL7__STATIC: - case MASKWALL8__STATIC: - case MASKWALL9__STATIC: - case MASKWALL10__STATIC: - case MASKWALL11__STATIC: - case MASKWALL12__STATIC: - case MASKWALL13__STATIC: - case MASKWALL14__STATIC: - case MASKWALL15__STATIC: - j = sp->cstat&60; - sp->cstat = j|1; - changespritestat(i,0); - break; - case FOOTPRINTS__STATIC: - case FOOTPRINTS2__STATIC: - case FOOTPRINTS3__STATIC: - case FOOTPRINTS4__STATIC: - if (j >= 0) - { - int16_t s1 = sp->sectnum; - - updatesector(sp->x+84,sp->y+84,&s1); - if (s1 >= 0 && sector[s1].floorz == sector[sp->sectnum].floorz) - { - updatesector(sp->x-84,sp->y-84,&s1); - if (s1 >= 0 && sector[s1].floorz == sector[sp->sectnum].floorz) - { - updatesector(sp->x+84,sp->y-84,&s1); - if (s1 >= 0 && sector[s1].floorz == sector[sp->sectnum].floorz) - { - updatesector(sp->x-84,sp->y+84,&s1); - if (s1 >= 0 && sector[s1].floorz != sector[sp->sectnum].floorz) - { - sp->xrepeat = sp->yrepeat = 0; - changespritestat(i,5); - break; - } - } - else - { - sp->xrepeat = sp->yrepeat = 0; - break; - } - } - else - { - sp->xrepeat = sp->yrepeat = 0; - break; - } - } - else - { - sp->xrepeat = sp->yrepeat = 0; - break; - } - - sp->cstat = 32+((g_player[sprite[j].yvel].ps->footprintcount&1)<<2); - sp->ang = sprite[j].ang; - } - - sp->z = sector[sect].floorz; - if (sector[sect].lotag != 1 && sector[sect].lotag != 2) - sp->xrepeat = sp->yrepeat = 32; - - A_AddToDeleteQueue(i); - changespritestat(i,5); - break; - - case PODFEM1__STATIC: - sp->extra <<= 1; - case FEM1__STATIC: - case FEM2__STATIC: - case FEM3__STATIC: - case FEM4__STATIC: - case FEM5__STATIC: - case FEM6__STATIC: - case FEM7__STATIC: - case FEM8__STATIC: - case FEM9__STATIC: - case FEM10__STATIC: - case NAKED1__STATIC: - case STATUE__STATIC: - case TOUGHGAL__STATIC: - sp->yvel = sp->hitag; - sp->hitag = -1; - case BLOODYPOLE__STATIC: - sp->cstat |= 257; - sp->clipdist = 32; - changespritestat(i, STAT_ZOMBIEACTOR); - break; - - case QUEBALL__STATIC: - case STRIPEBALL__STATIC: - sp->cstat = 256; - sp->clipdist = 8; - changespritestat(i, STAT_ZOMBIEACTOR); - break; - - case DUKELYINGDEAD__STATIC: - if (j >= 0 && sprite[j].picnum == APLAYER) - { - sp->xrepeat = sprite[j].xrepeat; - sp->yrepeat = sprite[j].yrepeat; - sp->shade = sprite[j].shade; - sp->pal = g_player[sprite[j].yvel].ps->palookup; - } - case DUKECAR__STATIC: - case HELECOPT__STATIC: - // if(sp->picnum == HELECOPT || sp->picnum == DUKECAR) sp->xvel = 1024; - sp->cstat = 0; - sp->extra = 1; - sp->xvel = 292; - sp->zvel = 360; - case BLIMP__STATIC: - sp->cstat |= 257; - sp->clipdist = 128; - changespritestat(i, STAT_ACTOR); - break; - - case RESPAWNMARKERRED__STATIC: - sp->xrepeat = sp->yrepeat = 24; - if (j >= 0) sp->z = actor[j].floorz; // -(1<<4); - changespritestat(i, STAT_ACTOR); - break; - - case MIKE__STATIC: - sp->yvel = sp->hitag; - sp->hitag = 0; - changespritestat(i, STAT_ACTOR); - break; - case WEATHERWARN__STATIC: - changespritestat(i, STAT_ACTOR); - break; - - case SPOTLITE__STATIC: - T1 = sp->x; - T2 = sp->y; - break; - case BULLETHOLE__STATIC: - sp->xrepeat = sp->yrepeat = 3; - sp->cstat = 16+(krand()&12); - A_AddToDeleteQueue(i); - changespritestat(i,5); - break; - - case MONEY__STATIC: - case MAIL__STATIC: - case PAPER__STATIC: - actor[i].t_data[0] = krand()&2047; - sp->cstat = krand()&12; - sp->xrepeat = sp->yrepeat = 8; - sp->ang = krand()&2047; - changespritestat(i,5); - break; - - case VIEWSCREEN__STATIC: - case VIEWSCREEN2__STATIC: - sp->owner = i; - sp->lotag = sp->extra = 1; - changespritestat(i,6); - break; - - case SHELL__STATIC: //From the player - case SHOTGUNSHELL__STATIC: - if (j >= 0) - { - int32_t snum,a; - - if (sprite[j].picnum == APLAYER) - { - snum = sprite[j].yvel; - a = g_player[snum].ps->ang-(krand()&63)+8; //Fine tune - - T1 = krand()&1; - sp->z = (3<<8)+g_player[snum].ps->pyoff+g_player[snum].ps->pos.z- - ((g_player[snum].ps->horizoff+g_player[snum].ps->horiz-100)<<4); - if (sp->picnum == SHOTGUNSHELL) - sp->z += (3<<8); - sp->zvel = -(krand()&255); - } - else - { - a = sp->ang; - sp->z = sprite[j].z-PHEIGHT+(3<<8); - } - - sp->x = sprite[j].x+(sintable[(a+512)&2047]>>7); - sp->y = sprite[j].y+(sintable[a&2047]>>7); - - sp->shade = -8; - - if (sp->yvel == 1 || NAM) - { - sp->ang = a+512; - sp->xvel = 30; - } - else - { - sp->ang = a-512; - sp->xvel = 20; - } - sp->xrepeat=sp->yrepeat=4; - - changespritestat(i,5); - } - break; - - case RESPAWN__STATIC: - sp->extra = 66-13; - case MUSICANDSFX__STATIC: - if ((!g_netServer && ud.multimode < 2) && sp->pal == 1) - { - sp->xrepeat = sp->yrepeat = 0; - changespritestat(i,5); - break; - } - sp->cstat = (int16_t)32768; - changespritestat(i,11); - break; - - case EXPLOSION2__STATIC: - if (sp->yrepeat > 32) - { - G_AddGameLight(0, i, ((sp->yrepeat*tilesizy[sp->picnum])<<1), 32768, 255+(95<<8),PR_LIGHT_PRIO_MAX_GAME); - actor[i].lightcount = 2; - } - case EXPLOSION2BOT__STATIC: - case BURNING__STATIC: - case BURNING2__STATIC: - case SMALLSMOKE__STATIC: - case SHRINKEREXPLOSION__STATIC: - case COOLEXPLOSION1__STATIC: - - if (j >= 0) - { - sp->ang = sprite[j].ang; - sp->shade = -64; - sp->cstat = 128|(krand()&4); - } - - if (sp->picnum == EXPLOSION2 || sp->picnum == EXPLOSION2BOT) - { - sp->xrepeat = sp->yrepeat = 48; - sp->shade = -127; - sp->cstat |= 128; - } - else if (sp->picnum == SHRINKEREXPLOSION) - sp->xrepeat = sp->yrepeat = 32; - else if (sp->picnum == SMALLSMOKE) - { - // 64 "money" - sp->xrepeat = sp->yrepeat = 24; - } - else if (sp->picnum == BURNING || sp->picnum == BURNING2) - sp->xrepeat = sp->yrepeat = 4; - - sp->cstat |= 8192; - - if (j >= 0) - { - x = getflorzofslope(sp->sectnum,sp->x,sp->y); - if (sp->z > x-(12<<8)) - sp->z = x-(12<<8); - } - - changespritestat(i,5); - - break; - - case PLAYERONWATER__STATIC: - if (j >= 0) - { - sp->xrepeat = sprite[j].xrepeat; - sp->yrepeat = sprite[j].yrepeat; - sp->zvel = 128; - if (sector[sp->sectnum].lotag != 2) - sp->cstat |= 32768; - } - changespritestat(i,13); - break; - - case APLAYER__STATIC: - sp->xrepeat = sp->yrepeat = 0; - sp->cstat = 32768; - if ((!g_netServer && ud.multimode < 2) || ((GametypeFlags[ud.coop] & GAMETYPE_COOPSPAWN)/GAMETYPE_COOPSPAWN) != sp->lotag) - changespritestat(i,STAT_MISC); - else - changespritestat(i,STAT_PLAYER); - break; - case WATERBUBBLE__STATIC: - if (j >= 0 && sprite[j].picnum == APLAYER) - sp->z -= (16<<8); - if (sp->picnum == WATERBUBBLE) - { - if (j >= 0) - sp->ang = sprite[j].ang; - sp->xrepeat = sp->yrepeat = 4; - } - else sp->xrepeat = sp->yrepeat = 32; - - changespritestat(i,5); - break; - - case CRANE__STATIC: - - sp->cstat |= 64|257; - - sp->picnum += 2; - sp->z = sector[sect].ceilingz+(48<<8); - T5 = tempwallptr; - - msx[tempwallptr] = sp->x; - msy[tempwallptr] = sp->y; - msx[tempwallptr+2] = sp->z; - - s = headspritestat[STAT_DEFAULT]; - while (s >= 0) - { - if (sprite[s].picnum == CRANEPOLE && SHT == (sprite[s].hitag)) - { - msy[tempwallptr+2] = s; - - T2 = sprite[s].sectnum; - - sprite[s].xrepeat = 48; - sprite[s].yrepeat = 128; - - msx[tempwallptr+1] = sprite[s].x; - msy[tempwallptr+1] = sprite[s].y; - - sprite[s].x = sp->x; - sprite[s].y = sp->y; - sprite[s].z = sp->z; - sprite[s].shade = sp->shade; - - setsprite(s,(vec3_t *)&sprite[s]); - break; - } - s = nextspritestat[s]; - } - - tempwallptr += 3; - sp->owner = -1; - sp->extra = 8; - changespritestat(i,6); - break; - - case TRASH__STATIC: - sp->ang = krand()&2047; - sp->xrepeat = sp->yrepeat = 24; - changespritestat(i,6); - break; - - case WATERDRIP__STATIC: - if (j >= 0 && (sprite[j].statnum == STAT_PLAYER || sprite[j].statnum == STAT_ACTOR)) - { - sp->shade = 32; - if (sprite[j].pal != 1) - { - sp->pal = 2; - sp->z -= (18<<8); - } - else sp->z -= (13<<8); - sp->ang = getangle(g_player[0].ps->pos.x-sp->x,g_player[0].ps->pos.y-sp->y); - sp->xvel = 48-(krand()&31); - A_SetSprite(i,CLIPMASK0); - } - else if (j == -1) - { - sp->z += (4<<8); - T1 = sp->z; - T2 = krand()&127; - } - case WATERDRIPSPLASH__STATIC: - sp->xrepeat = sp->yrepeat = 24; - changespritestat(i,6); - break; - - case PLUG__STATIC: - sp->lotag = 9999; - changespritestat(i,6); - break; - case TOUCHPLATE__STATIC: - T3 = sector[sect].floorz; - if (sector[sect].lotag != 1 && sector[sect].lotag != 2) - sector[sect].floorz = sp->z; - if (sp->pal && (g_netServer || ud.multimode > 1)) - { - sp->xrepeat=sp->yrepeat=0; - changespritestat(i,5); - break; - } - case WATERBUBBLEMAKER__STATIC: - if (sp->hitag && sp->picnum == WATERBUBBLEMAKER) - { - // JBF 20030913: Pisses off X_Move(), eg. in bobsp2 - OSD_Printf(OSD_ERROR "WARNING: WATERBUBBLEMAKER %d @ %d,%d with hitag!=0. Applying fixup.\n", - i,sp->x,sp->y); - sp->hitag = 0; - } - sp->cstat |= 32768; - changespritestat(i,6); - break; - case MASTERSWITCH__STATIC: - if (sp->picnum == MASTERSWITCH) - sp->cstat |= 32768; - sp->yvel = 0; - changespritestat(i,6); - break; - case TARGET__STATIC: - case DUCK__STATIC: - case LETTER__STATIC: - sp->extra = 1; - sp->cstat |= 257; - changespritestat(i, STAT_ACTOR); - break; - case OCTABRAINSTAYPUT__STATIC: - case LIZTROOPSTAYPUT__STATIC: - case PIGCOPSTAYPUT__STATIC: - case LIZMANSTAYPUT__STATIC: - case BOSS1STAYPUT__STATIC: - case PIGCOPDIVE__STATIC: - case COMMANDERSTAYPUT__STATIC: - case BOSS4STAYPUT__STATIC: - actor[i].actorstayput = sp->sectnum; - case BOSS1__STATIC: - case BOSS2__STATIC: - case BOSS3__STATIC: - case BOSS4__STATIC: - case ROTATEGUN__STATIC: - case GREENSLIME__STATIC: - if (sp->picnum == GREENSLIME) - sp->extra = 1; - case DRONE__STATIC: - case LIZTROOPONTOILET__STATIC: - case LIZTROOPJUSTSIT__STATIC: - case LIZTROOPSHOOT__STATIC: - case LIZTROOPJETPACK__STATIC: - case LIZTROOPDUCKING__STATIC: - case LIZTROOPRUNNING__STATIC: - case LIZTROOP__STATIC: - case OCTABRAIN__STATIC: - case COMMANDER__STATIC: - case PIGCOP__STATIC: - case LIZMAN__STATIC: - case LIZMANSPITTING__STATIC: - case LIZMANFEEDING__STATIC: - case LIZMANJUMP__STATIC: - case ORGANTIC__STATIC: - case RAT__STATIC: - case SHARK__STATIC: - - if (sp->pal == 0) - { - switch (DynamicTileMap[sp->picnum]) - { - case LIZTROOPONTOILET__STATIC: - case LIZTROOPSHOOT__STATIC: - case LIZTROOPJETPACK__STATIC: - case LIZTROOPDUCKING__STATIC: - case LIZTROOPRUNNING__STATIC: - case LIZTROOPSTAYPUT__STATIC: - case LIZTROOPJUSTSIT__STATIC: - case LIZTROOP__STATIC: - sp->pal = 22; - break; - } - } - - if (sp->picnum == BOSS4STAYPUT || sp->picnum == BOSS1 || sp->picnum == BOSS2 || sp->picnum == BOSS1STAYPUT || sp->picnum == BOSS3 || sp->picnum == BOSS4) - { - if (j >= 0 && sprite[j].picnum == RESPAWN) - sp->pal = sprite[j].pal; - if (sp->pal) - { - sp->clipdist = 80; - sp->xrepeat = sp->yrepeat = 40; - } - else - { - sp->xrepeat = sp->yrepeat = 80; - sp->clipdist = 164; - } - } - else - { - if (sp->picnum != SHARK) - { - sp->xrepeat = sp->yrepeat = 40; - sp->clipdist = 80; - } - else - { - sp->xrepeat = sp->yrepeat = 60; - sp->clipdist = 40; - } - } - - if (j >= 0) sp->lotag = 0; - - if ((sp->lotag > ud.player_skill) || ud.monsters_off == 1) - { - sp->xrepeat=sp->yrepeat=0; - changespritestat(i,5); - break; - } - else - { - A_Fall(i); - - if (sp->picnum == RAT) - { - sp->ang = krand()&2047; - sp->xrepeat = sp->yrepeat = 48; - sp->cstat = 0; - } - else - { - sp->cstat |= 257; - - if (sp->picnum != SHARK) - g_player[myconnectindex].ps->max_actors_killed++; - } - - if (sp->picnum == ORGANTIC) sp->cstat |= 128; - - if (j >= 0) - { - actor[i].timetosleep = 0; - A_PlayAlertSound(i); - changespritestat(i, STAT_ACTOR); - } - else changespritestat(i, STAT_ZOMBIEACTOR); - } - - if (sp->picnum == ROTATEGUN) - sp->zvel = 0; - - break; - - case LOCATORS__STATIC: - sp->cstat |= 32768; - changespritestat(i,7); - break; - - case ACTIVATORLOCKED__STATIC: - case ACTIVATOR__STATIC: - sp->cstat = (int16_t) 32768; - if (sp->picnum == ACTIVATORLOCKED) - sector[sp->sectnum].lotag |= 16384; - changespritestat(i,8); - break; - - case DOORSHOCK__STATIC: - sp->cstat |= 1+256; - sp->shade = -12; - changespritestat(i,6); - break; - - case OOZ__STATIC: - case OOZ2__STATIC: - sp->shade = -12; - - if (j >= 0) - { - if (sprite[j].picnum == NUKEBARREL) - sp->pal = 8; - A_AddToDeleteQueue(i); - } - - changespritestat(i, STAT_ACTOR); - - A_GetZLimits(i); - - j = (actor[i].floorz-actor[i].ceilingz)>>9; - - sp->yrepeat = j; - sp->xrepeat = 25-(j>>1); - sp->cstat |= (krand()&4); - - break; - - case REACTOR2__STATIC: - case REACTOR__STATIC: - sp->extra = g_impactDamage; - CS |= 257; - sp->pal = 0; - SS = -17; - - changespritestat(i, STAT_ZOMBIEACTOR); - break; - - case HEAVYHBOMB__STATIC: - if (j >= 0) - sp->owner = j; - else sp->owner = i; - - sp->xrepeat = sp->yrepeat = 9; - sp->yvel = 4; - CS |= 257; - - if ((!g_netServer && ud.multimode < 2) && sp->pal != 0) - { - sp->xrepeat = sp->yrepeat = 0; - changespritestat(i,5); - break; - } - sp->pal = 0; - SS = -17; - - changespritestat(i, STAT_ZOMBIEACTOR); - break; - - case RECON__STATIC: - - if (sp->lotag > ud.player_skill) - { - sp->xrepeat = sp->yrepeat = 0; - changespritestat(i,5); - goto SPAWN_END; - } - g_player[myconnectindex].ps->max_actors_killed++; - actor[i].t_data[5] = 0; - if (ud.monsters_off == 1) - { - sp->xrepeat = sp->yrepeat = 0; - changespritestat(i,5); - break; - } - sp->extra = 130; - CS |= 256; // Make it hitable - - if ((!g_netServer && ud.multimode < 2) && sp->pal != 0) - { - sp->xrepeat = sp->yrepeat = 0; - changespritestat(i,5); - break; - } - sp->pal = 0; - SS = -17; - - changespritestat(i, STAT_ZOMBIEACTOR); - break; - - case ATOMICHEALTH__STATIC: - case STEROIDS__STATIC: - case HEATSENSOR__STATIC: - case SHIELD__STATIC: - case AIRTANK__STATIC: - case TRIPBOMBSPRITE__STATIC: - case JETPACK__STATIC: - case HOLODUKE__STATIC: - - case FIRSTGUNSPRITE__STATIC: - case CHAINGUNSPRITE__STATIC: - case SHOTGUNSPRITE__STATIC: - case RPGSPRITE__STATIC: - case SHRINKERSPRITE__STATIC: - case FREEZESPRITE__STATIC: - case DEVISTATORSPRITE__STATIC: - - case SHOTGUNAMMO__STATIC: - case FREEZEAMMO__STATIC: - case HBOMBAMMO__STATIC: - case CRYSTALAMMO__STATIC: - case GROWAMMO__STATIC: - case BATTERYAMMO__STATIC: - case DEVISTATORAMMO__STATIC: - case RPGAMMO__STATIC: - case BOOTS__STATIC: - case AMMO__STATIC: - case AMMOLOTS__STATIC: - case COLA__STATIC: - case FIRSTAID__STATIC: - case SIXPAK__STATIC: - - if (j >= 0) - { - sp->lotag = 0; - sp->z -= (32<<8); - sp->zvel = -1024; - A_SetSprite(i,CLIPMASK0); - sp->cstat = krand()&4; - } - else - { - sp->owner = i; - sp->cstat = 0; - } - - if (((!g_netServer && ud.multimode < 2) && sp->pal != 0) || (sp->lotag > ud.player_skill)) - { - sp->xrepeat = sp->yrepeat = 0; - changespritestat(i,5); - break; - } - - sp->pal = 0; - - case ACCESSCARD__STATIC: - - if (sp->picnum == ATOMICHEALTH) - sp->cstat |= 128; - - if ((g_netServer || ud.multimode > 1) && !GTFLAGS(GAMETYPE_ACCESSCARDSPRITES) && sp->picnum == ACCESSCARD) - { - sp->xrepeat = sp->yrepeat = 0; - changespritestat(i,5); - break; - } - else - { - if (sp->picnum == AMMO) - sp->xrepeat = sp->yrepeat = 16; - else sp->xrepeat = sp->yrepeat = 32; - } - - sp->shade = -17; - - if (j >= 0) changespritestat(i, STAT_ACTOR); - else - { - changespritestat(i, STAT_ZOMBIEACTOR); - A_Fall(i); - } - break; - - case WATERFOUNTAIN__STATIC: - SLT = 1; - - case TREE1__STATIC: - case TREE2__STATIC: - case TIRE__STATIC: - case CONE__STATIC: - case BOX__STATIC: - CS = 257; // Make it hitable - sprite[i].extra = 1; - changespritestat(i,6); - break; - - case FLOORFLAME__STATIC: - sp->shade = -127; - changespritestat(i,6); - break; - - case BOUNCEMINE__STATIC: - sp->owner = i; - sp->cstat |= 1+256; //Make it hitable - sp->xrepeat = sp->yrepeat = 24; - sp->shade = -127; - sp->extra = g_impactDamage<<2; - changespritestat(i, STAT_ZOMBIEACTOR); - break; - - case STEAM__STATIC: - if (j >= 0) - { - sp->ang = sprite[j].ang; - sp->cstat = 16+128+2; - sp->xrepeat=sp->yrepeat=1; - sp->xvel = -8; - A_SetSprite(i,CLIPMASK0); - } - case CEILINGSTEAM__STATIC: - changespritestat(i,6); - break; - - case SECTOREFFECTOR__STATIC: - sp->cstat |= 32768; - sp->xrepeat = sp->yrepeat = 0; - - switch (sp->lotag) - { - case 40: - case 41: - sp->cstat = 32; - sp->xrepeat = sp->yrepeat = 64; - changespritestat(i, STAT_EFFECTOR); - for (j=0; j < MAXSPRITES; j++) - if (sprite[j].picnum == SECTOREFFECTOR && (sprite[j].lotag == 40 || sprite[j].lotag == 41) && - sprite[j].hitag == sp->hitag && i != j) - { -// initprintf("found ror match\n"); - sp->yvel = j; - break; - } - goto SPAWN_END; - break; - case 46: - ror_protectedsectors[sp->sectnum] = 1; - case 49: - case 50: - { - int32_t j, nextj; - - TRAVERSE_SPRITE_SECT(headspritesect[sp->sectnum], j, nextj) - if (sprite[j].picnum == ACTIVATOR || sprite[j].picnum == ACTIVATORLOCKED) - actor[i].flags |= SPRITE_USEACTIVATOR; - } - changespritestat(i, STAT_EFFECTOR); - goto SPAWN_END; - break; - } - - sp->yvel = sector[sect].extra; - - switch (sp->lotag) - { - case 28: - T6 = 65;// Delay for lightning - break; - case 7: // Transporters!!!! - case 23:// XPTR END - if (sp->lotag != 23) - { - for (j=0; jcstat = 0; - changespritestat(i,9); - goto SPAWN_END; - case 1: - sp->owner = -1; - T1 = 1; - break; - case 18: - - if (sp->ang == 512) - { - T2 = sector[sect].ceilingz; - if (sp->pal) - sector[sect].ceilingz = sp->z; - } - else - { - T2 = sector[sect].floorz; - if (sp->pal) - sector[sect].floorz = sp->z; - } - - sp->hitag <<= 2; - break; - - case 19: - sp->owner = -1; - break; - case 25: // Pistons - T4 = sector[sect].ceilingz; - T5 = 1; - sector[sect].ceilingz = sp->z; - G_SetInterpolation(§or[sect].ceilingz); - break; - case 35: - sector[sect].ceilingz = sp->z; - break; - case 27: - if (ud.recstat == 1) - { - sp->xrepeat=sp->yrepeat=64; - sp->cstat &= 32768; - } - break; - case 12: - - T2 = sector[sect].floorshade; - T3 = sector[sect].ceilingshade; - break; - - case 13: - - T1 = sector[sect].ceilingz; - T2 = sector[sect].floorz; - - if (klabs(T1-sp->z) < klabs(T2-sp->z)) - sp->owner = 1; - else sp->owner = 0; - - if (sp->ang == 512) - { - if (sp->owner) - sector[sect].ceilingz = sp->z; - else - sector[sect].floorz = sp->z; - } - else - sector[sect].ceilingz = sector[sect].floorz = sp->z; - - if (sector[sect].ceilingstat&1) - { - sector[sect].ceilingstat ^= 1; - T4 = 1; - - if (!sp->owner && sp->ang==512) - { - sector[sect].ceilingstat ^= 1; - T4 = 0; - } - - sector[sect].ceilingshade = - sector[sect].floorshade; - - if (sp->ang==512) - { - startwall = sector[sect].wallptr; - endwall = startwall+sector[sect].wallnum; - for (j=startwall; j= 0) - if (!(sector[x].ceilingstat&1)) - { - sector[sect].ceilingpicnum = - sector[x].ceilingpicnum; - sector[sect].ceilingshade = - sector[x].ceilingshade; - break; //Leave earily - } - } - } - } - - break; - - case 17: - - T3 = sector[sect].floorz; //Stopping loc - - j = nextsectorneighborz(sect,sector[sect].floorz,-1,-1); - T4 = sector[j].ceilingz; - - j = nextsectorneighborz(sect,sector[sect].ceilingz,1,1); - T5 = sector[j].floorz; - - if (numplayers < 2 && !g_netServer) - { - G_SetInterpolation(§or[sect].floorz); - G_SetInterpolation(§or[sect].ceilingz); - } - - break; - - case 24: - sp->yvel <<= 1; - case 36: - break; - - case 20: - { - int32_t q; - - startwall = sector[sect].wallptr; - endwall = startwall+sector[sect].wallnum; - - //find the two most clostest wall x's and y's - q = 0x7fffffff; - - for (s=startwall; sx-x,sp->y-y); - if (d < q) - { - q = d; - clostest = s; - } - } - - T2 = clostest; - - q = 0x7fffffff; - - for (s=startwall; sx-x,sp->y-y); - if (d < q && s != T2) - { - q = d; - clostest = s; - } - } - - T3 = clostest; - } - - break; - - case 3: - - T4=sector[sect].floorshade; - - sector[sect].floorshade = sp->shade; - sector[sect].ceilingshade = sp->shade; - - sp->owner = sector[sect].ceilingpal<<8; - sp->owner |= sector[sect].floorpal; - - //fix all the walls; - - startwall = sector[sect].wallptr; - endwall = startwall+sector[sect].wallnum; - - for (s=startwall; sshade; - if ((wall[s].cstat&2) && wall[s].nextwall >= 0) - wall[wall[s].nextwall].shade = sp->shade; - } - break; - - case 31: - T2 = sector[sect].floorz; - // T3 = sp->hitag; - if (sp->ang != 1536) sector[sect].floorz = sp->z; - - startwall = sector[sect].wallptr; - endwall = startwall+sector[sect].wallnum; - - for (s=startwall; shitag; - if (sp->ang != 1536) sector[sect].ceilingz = sp->z; - - startwall = sector[sect].wallptr; - endwall = startwall+sector[sect].wallnum; - - for (s=startwall; sowner = sector[sect].ceilingpal<<8; - sp->owner |= sector[sect].floorpal; - - for (s=startwall; s T4) - T4 = wall[s].shade; - - break; - - case 9: - if (sector[sect].lotag && - labs(sector[sect].ceilingz-sp->z) > 1024) - sector[sect].lotag |= 32768; //If its open - case 8: - //First, get the ceiling-floor shade - - T1 = sector[sect].floorshade; - T2 = sector[sect].ceilingshade; - - startwall = sector[sect].wallptr; - endwall = startwall+sector[sect].wallnum; - - for (s=startwall; s T3) - T3 = wall[s].shade; - - T4 = 1; //Take Out; - - break; - - case 11://Pivitor rotater - if (sp->ang>1024) T4 = 2; - else T4 = -2; - case 0: - case 2://Earthquakemakers - case 5://Boss Creature - case 6://Subway - case 14://Caboos - case 15://Subwaytype sliding door - case 16://That rotating blocker reactor thing - case 26://ESCELATOR - case 30://No rotational subways - - if (sp->lotag == 0) - { - if (sector[sect].lotag == 30) - { - if (sp->pal) sprite[i].clipdist = 1; - else sprite[i].clipdist = 0; - T4 = sector[sect].floorz; - sector[sect].hitag = i; - } - - for (j = MAXSPRITES-1; j>=0; j--) - { - if (sprite[j].statnum < MAXSTATUS) - if (sprite[j].picnum == SECTOREFFECTOR && - sprite[j].lotag == 1 && - sprite[j].hitag == sp->hitag) - { - if (sp->ang == 512) - { - sp->x = sprite[j].x; - sp->y = sprite[j].y; - } - break; - } - } - if (j == -1) - { - OSD_Printf(OSD_ERROR "Found lonely Sector Effector (lotag 0) at (%d,%d)\n",sp->x,sp->y); - changespritestat(i, STAT_ACTOR); - if (apScriptGameEvent[EVENT_SPAWN]) - { - int32_t pl=A_FindPlayer(&sprite[i],&p); - VM_OnEvent(EVENT_SPAWN,i, pl, p); - } - return i; - } - sp->owner = j; - } - - startwall = sector[sect].wallptr; - endwall = startwall+sector[sect].wallnum; - - T2 = tempwallptr; - for (s=startwall; sx; - msy[tempwallptr] = wall[s].y-sp->y; - tempwallptr++; - if (tempwallptr > 2047) - { - Bsprintf(tempbuf,"Too many moving sectors at (%d,%d).\n",wall[s].x,wall[s].y); - G_GameExit(tempbuf); - } - } - if (sp->lotag == 30 || sp->lotag == 6 || sp->lotag == 14 || sp->lotag == 5) - { - - startwall = sector[sect].wallptr; - endwall = startwall+sector[sect].wallnum; - - if (sector[sect].hitag == -1) - sp->extra = 0; - else sp->extra = 1; - - sector[sect].hitag = i; - - j = 0; - - for (s=startwall; s= 0 && - sector[ wall[ s ].nextsector].hitag == 0 && - sector[ wall[ s ].nextsector].lotag < 3) - { - s = wall[s].nextsector; - j = 1; - break; - } - } - - if (j == 0) - { - Bsprintf(tempbuf,"Subway found no zero'd sectors with locators\nat (%d,%d).\n",sp->x,sp->y); - G_GameExit(tempbuf); - } - - sp->owner = -1; - T1 = s; - - if (sp->lotag != 30) - T4 = sp->hitag; - } - - else if (sp->lotag == 16) - T4 = sector[sect].ceilingz; - - else if (sp->lotag == 26) - { - T4 = sp->x; - T5 = sp->y; - if (sp->shade==sector[sect].floorshade) //UP - sp->zvel = -256; - else - sp->zvel = 256; - - sp->shade = 0; - } - else if (sp->lotag == 2) - { - T6 = sector[sp->sectnum].floorheinum; - sector[sp->sectnum].floorheinum = 0; - } - } - - switch (sp->lotag) - { - case 6: - case 14: - j = A_CallSound(sect,i); - if (j == -1) j = SUBWAY; - actor[i].lastvx = j; - case 30: - if (g_netServer || numplayers > 1) break; - case 0: - case 1: - case 5: - case 11: - case 15: - case 16: - case 26: - Sect_SetInterpolation(i); - break; - } - - changespritestat(i, STAT_EFFECTOR); - break; - - case SEENINE__STATIC: - case OOZFILTER__STATIC: - sp->shade = -16; - if (sp->xrepeat <= 8) - { - sp->cstat = (int16_t)32768; - sp->xrepeat=sp->yrepeat=0; - } - else sp->cstat = 1+256; - sp->extra = g_impactDamage<<2; - sp->owner = i; - - changespritestat(i,6); - break; - - case CRACK1__STATIC: - case CRACK2__STATIC: - case CRACK3__STATIC: - case CRACK4__STATIC: - case FIREEXT__STATIC: - if (sp->picnum == FIREEXT) - { - sp->cstat = 257; - sp->extra = g_impactDamage<<2; - } - else - { - sp->cstat |= (sp->cstat & 48) ? 1 : 17; - sp->extra = 1; - } - - if ((!g_netServer && ud.multimode < 2) && sp->pal != 0) - { - sp->xrepeat = sp->yrepeat = 0; - changespritestat(i,5); - break; - } - - sp->pal = 0; - sp->owner = i; - changespritestat(i,6); - sp->xvel = 8; - A_SetSprite(i,CLIPMASK0); - break; - - case TOILET__STATIC: - case STALL__STATIC: - sp->lotag = 1; - sp->cstat |= 257; - sp->clipdist = 8; - sp->owner = i; - break; - - case CANWITHSOMETHING__STATIC: - case CANWITHSOMETHING2__STATIC: - case CANWITHSOMETHING3__STATIC: - case CANWITHSOMETHING4__STATIC: - case RUBBERCAN__STATIC: - sp->extra = 0; - case EXPLODINGBARREL__STATIC: - case HORSEONSIDE__STATIC: - case FIREBARREL__STATIC: - case NUKEBARREL__STATIC: - case FIREVASE__STATIC: - case NUKEBARRELDENTED__STATIC: - case NUKEBARRELLEAKED__STATIC: - case WOODENHORSE__STATIC: - if (j >= 0) - sp->xrepeat = sp->yrepeat = 32; - sp->clipdist = 72; - A_Fall(i); - if (j >= 0) - sp->owner = j; - else sp->owner = i; - case EGG__STATIC: - if (ud.monsters_off == 1 && sp->picnum == EGG) - { - sp->xrepeat = sp->yrepeat = 0; - changespritestat(i,5); - } - else - { - if (sp->picnum == EGG) - sp->clipdist = 24; - sp->cstat = 257|(krand()&4); - changespritestat(i, STAT_ZOMBIEACTOR); - } - break; - - case TOILETWATER__STATIC: - sp->shade = -16; - changespritestat(i,6); - break; - } - -SPAWN_END: - if (apScriptGameEvent[EVENT_SPAWN]) - { - int32_t pl=A_FindPlayer(&sprite[i],&p); - VM_OnEvent(EVENT_SPAWN,i, pl, p); - } - - // spawning is technically not allowed to fail in BUILD, so we just hide whatever - // the client spawns with SPRITE_NULL because the server will send it anyway - if (g_netClient && j >= 0) - { - int32_t zz; - for (zz = 0; (unsigned)zz < (sizeof(g_netStatnums)/sizeof(g_netStatnums[0])); zz++) - if (sprite[i].statnum == g_netStatnums[zz]) - { - actor[i].flags |= SPRITE_NULL; - return i; - } - } - - return i; -} - -#if 0 // def _MSC_VER -// Visual C thought this was a bit too hard to optimise so we'd better -// tell it not to try... such a pussy it is. -//#pragma auto_inline(off) -#pragma optimize("g",off) -#endif -void G_DoSpriteAnimations(int32_t x,int32_t y,int32_t a,int32_t smoothratio) -{ - int32_t i, j, k, p, sect; - intptr_t l, t1,t3,t4; - spritetype *s,*t; - int32_t switchpic; - - if (!spritesortcnt) return; - - ror_sprite = -1; - - for (j=spritesortcnt-1; j>=0; j--) - { - t = &tsprite[j]; - i = t->owner; - s = &sprite[i]; - - switch (DynamicTileMap[s->picnum]) - { - case SECTOREFFECTOR__STATIC: - if (s->lotag == 40 || s->lotag == 41) - { - t->cstat = 32768; - - if (ror_sprite == -1) ror_sprite = i; - } - - if (t->lotag == 27 && ud.recstat == 1) - { - t->picnum = 11+((totalclock>>3)&1); - t->cstat |= 128; - } - else - t->xrepeat = t->yrepeat = 0; - break; - } - } - - for (j=spritesortcnt-1; j>=0; j--) - { - t = &tsprite[j]; - i = t->owner; - s = &sprite[t->owner]; - - if (A_CheckSpriteFlags(i, SPRITE_NULL)) - { - t->xrepeat = t->yrepeat = 0; - continue; - } - - if (t->picnum < GREENSLIME || t->picnum > GREENSLIME+7) - switch (DynamicTileMap[t->picnum]) - { - case BLOODPOOL__STATIC: - case PUKE__STATIC: - case FOOTPRINTS__STATIC: - case FOOTPRINTS2__STATIC: - case FOOTPRINTS3__STATIC: - case FOOTPRINTS4__STATIC: - if (t->shade == 127) continue; - break; - case RESPAWNMARKERRED__STATIC: - case RESPAWNMARKERYELLOW__STATIC: - case RESPAWNMARKERGREEN__STATIC: - if (ud.marker == 0) - t->xrepeat = t->yrepeat = 0; - continue; - case CHAIR3__STATIC: -#ifdef USE_OPENGL - if (getrendermode() >= 3 && usemodels && md_tilehasmodel(t->picnum,t->pal) >= 0 && !(spriteext[i].flags&SPREXT_NOTMD)) - { - t->cstat &= ~4; - break; - } -#endif - k = (((t->ang+3072+128-a)&2047)>>8)&7; - if (k>4) - { - k = 8-k; - t->cstat |= 4; - } - else t->cstat &= ~4; - t->picnum = s->picnum+k; - break; - case BLOODSPLAT1__STATIC: - case BLOODSPLAT2__STATIC: - case BLOODSPLAT3__STATIC: - case BLOODSPLAT4__STATIC: - if (ud.lockout) t->xrepeat = t->yrepeat = 0; - else if (t->pal == 6) - { - t->shade = -127; - continue; - } - case BULLETHOLE__STATIC: - case CRACK1__STATIC: - case CRACK2__STATIC: - case CRACK3__STATIC: - case CRACK4__STATIC: - t->shade = 16; - continue; - case NEON1__STATIC: - case NEON2__STATIC: - case NEON3__STATIC: - case NEON4__STATIC: - case NEON5__STATIC: - case NEON6__STATIC: - continue; - //case GREENSLIME: - //case GREENSLIME+1: - //case GREENSLIME+2: - //case GREENSLIME+3: - //case GREENSLIME+4: - //case GREENSLIME+5: - //case GREENSLIME+6: - //case GREENSLIME+7: - // break; - default: - if (((t->cstat&16)) || (A_CheckEnemySprite(t) && t->extra > 0) || t->statnum == STAT_PLAYER) - continue; - } - - if (A_CheckSpriteFlags(t->owner,SPRITE_NOSHADE)) - l = sprite[t->owner].shade; - else - { - if (sector[t->sectnum].ceilingstat&1) - l = sector[t->sectnum].ceilingshade; - else - l = sector[t->sectnum].floorshade; - if (l < -127) l = -127; - if (l > 128) l = 127; - } - t->shade = l; - } - - for (j=spritesortcnt-1; j>=0; j--) //Between drawrooms() and drawmasks() - { - //is the perfect time to animate sprites - t = &tsprite[j]; - i = t->owner; - s = (i < 0 ? &tsprite[j] : &sprite[i]); - - switch (DynamicTileMap[s->picnum]) - { - case NATURALLIGHTNING__STATIC: - t->shade = -127; - t->cstat |= 8192; - break; - case FEM1__STATIC: - case FEM2__STATIC: - case FEM3__STATIC: - case FEM4__STATIC: - case FEM5__STATIC: - case FEM6__STATIC: - case FEM7__STATIC: - case FEM8__STATIC: - case FEM9__STATIC: - case FEM10__STATIC: - case MAN__STATIC: - case MAN2__STATIC: - case WOMAN__STATIC: - case NAKED1__STATIC: - case PODFEM1__STATIC: - case FEMMAG1__STATIC: - case FEMMAG2__STATIC: - case FEMPIC1__STATIC: - case FEMPIC2__STATIC: - case FEMPIC3__STATIC: - case FEMPIC4__STATIC: - case FEMPIC5__STATIC: - case FEMPIC6__STATIC: - case FEMPIC7__STATIC: - case BLOODYPOLE__STATIC: - case FEM6PAD__STATIC: - case STATUE__STATIC: - case STATUEFLASH__STATIC: - case OOZ__STATIC: - case OOZ2__STATIC: - case WALLBLOOD1__STATIC: - case WALLBLOOD2__STATIC: - case WALLBLOOD3__STATIC: - case WALLBLOOD4__STATIC: - case WALLBLOOD5__STATIC: - case WALLBLOOD7__STATIC: - case WALLBLOOD8__STATIC: - case SUSHIPLATE1__STATIC: - case SUSHIPLATE2__STATIC: - case SUSHIPLATE3__STATIC: - case SUSHIPLATE4__STATIC: - case FETUS__STATIC: - case FETUSJIB__STATIC: - case FETUSBROKE__STATIC: - case HOTMEAT__STATIC: - case FOODOBJECT16__STATIC: - case DOLPHIN1__STATIC: - case DOLPHIN2__STATIC: - case TOUGHGAL__STATIC: - case TAMPON__STATIC: - case XXXSTACY__STATIC: - case 4946: - case 4947: - case 693: - case 2254: - case 4560: - case 4561: - case 4562: - case 4498: - case 4957: - if (ud.lockout) - { - t->xrepeat = t->yrepeat = 0; - continue; - } - } - - if (t->statnum == TSPR_TEMP) continue; - if (s->statnum != STAT_ACTOR && s->picnum == APLAYER && g_player[s->yvel].ps->newowner == -1 && s->owner >= 0) - { - t->x -= mulscale16(65536-smoothratio,g_player[s->yvel].ps->pos.x-g_player[s->yvel].ps->opos.x); - t->y -= mulscale16(65536-smoothratio,g_player[s->yvel].ps->pos.y-g_player[s->yvel].ps->opos.y); - // dirty hack - if (g_player[s->yvel].ps->dead_flag) t->z = g_player[s->yvel].ps->opos.z; - t->z += mulscale16(smoothratio,g_player[s->yvel].ps->pos.z-g_player[s->yvel].ps->opos.z) - - (g_player[s->yvel].ps->dead_flag ? 0 : PHEIGHT) + PHEIGHT; - } - else if ((s->statnum == STAT_DEFAULT && s->picnum != CRANEPOLE) || s->statnum == STAT_PLAYER || - s->statnum == STAT_STANDABLE || s->statnum == STAT_PROJECTILE || s->statnum == STAT_MISC || s->statnum == STAT_ACTOR) - { - t->x -= mulscale16(65536-smoothratio,s->x-actor[i].bposx); - t->y -= mulscale16(65536-smoothratio,s->y-actor[i].bposy); - t->z -= mulscale16(65536-smoothratio,s->z-actor[i].bposz); - } - - sect = s->sectnum; - t1 = T2; - t3 = T4; - t4 = T5; - switchpic = s->picnum; - //some special cases because dynamictostatic system can't handle addition to constants - if ((s->picnum >= SCRAP6)&&(s->picnum<=SCRAP6+7)) - switchpic = SCRAP5; - else if ((s->picnum==MONEY+1)||(s->picnum==MAIL+1)||(s->picnum==PAPER+1)) - switchpic--; - - switch (DynamicTileMap[switchpic]) - { - case DUKELYINGDEAD__STATIC: - t->z += (24<<8); - break; - case BLOODPOOL__STATIC: - case FOOTPRINTS__STATIC: - case FOOTPRINTS2__STATIC: - case FOOTPRINTS3__STATIC: - case FOOTPRINTS4__STATIC: - if (t->pal == 6) - t->shade = -127; - case PUKE__STATIC: - case MONEY__STATIC: - //case MONEY+1__STATIC: - case MAIL__STATIC: - //case MAIL+1__STATIC: - case PAPER__STATIC: - //case PAPER+1__STATIC: - if (ud.lockout && s->pal == 2) - { - t->xrepeat = t->yrepeat = 0; - continue; - } - break; - case TRIPBOMB__STATIC: - continue; - case FORCESPHERE__STATIC: - if (t->statnum == 5) - { - int16_t sqa,sqb; - - sqa = - getangle( - sprite[s->owner].x-g_player[screenpeek].ps->pos.x, - sprite[s->owner].y-g_player[screenpeek].ps->pos.y); - sqb = - getangle( - sprite[s->owner].x-t->x, - sprite[s->owner].y-t->y); - - if (klabs(G_GetAngleDelta(sqa,sqb)) > 512) - if (ldist(&sprite[s->owner],t) < ldist(&sprite[g_player[screenpeek].ps->i],&sprite[s->owner])) - t->xrepeat = t->yrepeat = 0; - } - continue; - case BURNING__STATIC: - case BURNING2__STATIC: - if (sprite[s->owner].statnum == STAT_PLAYER) - { - if (display_mirror == 0 && sprite[s->owner].yvel == screenpeek && g_player[sprite[s->owner].yvel].ps->over_shoulder_on == 0) - t->xrepeat = 0; - else - { - t->ang = getangle(x-t->x,y-t->y); - t->x = sprite[s->owner].x + (sintable[(t->ang+512)&2047]>>10); - t->y = sprite[s->owner].y + (sintable[t->ang&2047]>>10); - } - } - break; - - case ATOMICHEALTH__STATIC: - t->z -= (4<<8); - break; - case CRYSTALAMMO__STATIC: - t->shade = (sintable[(totalclock<<4)&2047]>>10); - continue; - case VIEWSCREEN__STATIC: - case VIEWSCREEN2__STATIC: - if (camsprite >= 0 && actor[OW].t_data[0] == 1) - { - t->picnum = STATIC; - t->cstat |= (rand()&12); - t->xrepeat += 8; - t->yrepeat += 8; - } - else if (camsprite >= 0 && waloff[TILE_VIEWSCR] && walock[TILE_VIEWSCR] > 200) - { - t->picnum = TILE_VIEWSCR; - } - break; - - case SHRINKSPARK__STATIC: - t->picnum = SHRINKSPARK+((totalclock>>4)&3); - break; - case GROWSPARK__STATIC: - t->picnum = GROWSPARK+((totalclock>>4)&3); - break; - case RPG__STATIC: -#ifdef USE_OPENGL - if (getrendermode() >= 3 && usemodels && md_tilehasmodel(t->picnum,t->pal) >= 0 && - !(spriteext[i].flags & SPREXT_NOTMD)) - { - int32_t v = getangle(t->xvel, t->zvel>>4); - - spriteext[i].pitch = (v > 1023 ? v-2048 : v); - t->cstat &= ~4; - break; - } -#endif - k = (((s->ang+3072+128-getangle(s->x-x,s->y-y))&2047)/170); - if (k > 6) - { - k = 12-k; - t->cstat |= 4; - } - else t->cstat &= ~4; - t->picnum = RPG+k; - break; - - case RECON__STATIC: - -#ifdef USE_OPENGL - if (getrendermode() >= 3 && usemodels && md_tilehasmodel(t->picnum,t->pal) >= 0 && !(spriteext[i].flags&SPREXT_NOTMD)) - { - t->cstat &= ~4; - break; - } -#endif - k = (((s->ang+3072+128-getangle(s->x-x,s->y-y))&2047)/170); - - if (k>6) - { - k = 12-k; - t->cstat |= 4; - } - else t->cstat &= ~4; - - if (klabs(t3) > 64) k += 7; - t->picnum = RECON+k; - - break; - - case APLAYER__STATIC: - - p = s->yvel; - - if (t->pal == 1) t->z -= (18<<8); - - if (g_player[p].ps->over_shoulder_on > 0 && g_player[p].ps->newowner < 0) - { - /* - if (screenpeek == myconnectindex && numplayers >= 2) - { - t->x = omy.x+mulscale16((int32_t)(my.x-omy.x),smoothratio); - t->y = omy.y+mulscale16((int32_t)(my.y-omy.y),smoothratio); - t->z = omy.z+mulscale16((int32_t)(my.z-omy.z),smoothratio)+PHEIGHT; - t->ang = omyang+mulscale16((int32_t)(((myang+1024-omyang)&2047)-1024),smoothratio); - t->sectnum = mycursectnum; - } - else*/ - t->ang = g_player[p].ps->ang+mulscale16((int32_t)(((g_player[p].ps->ang+1024- g_player[p].ps->oang)&2047)-1024),smoothratio); -#ifdef USE_OPENGL - if (bpp > 8 && usemodels && md_tilehasmodel(t->picnum, t->pal) >= 0) - { - static int32_t targetang = 0; - - if (g_player[p].sync->extbits&(1<<1)) - { - if (g_player[p].sync->extbits&(1<<2))targetang += 16; - else if (g_player[p].sync->extbits&(1<<3)) targetang -= 16; - else if (targetang > 0) targetang -= targetang>>2; - else if (targetang < 0) targetang += (-targetang)>>2; - } - else - { - if (g_player[p].sync->extbits&(1<<2))targetang -= 16; - else if (g_player[p].sync->extbits&(1<<3)) targetang += 16; - else if (targetang > 0) targetang -= targetang>>2; - else if (targetang < 0) targetang += (-targetang)>>2; - } - - targetang = clamp(targetang, -128, 128); - t->ang += targetang; - } - else -#endif - t->cstat |= 2; - } - - if ((g_netServer || ud.multimode > 1) && (display_mirror || screenpeek != p || s->owner == -1)) - { - if (ud.showweapons && sprite[g_player[p].ps->i].extra > 0 && g_player[p].ps->curr_weapon > 0) - { - Bmemcpy((spritetype *)&tsprite[spritesortcnt],(spritetype *)t,sizeof(spritetype)); - - tsprite[spritesortcnt].statnum = TSPR_TEMP; - - /* tsprite[spritesortcnt].yrepeat = (t->yrepeat>>3); - if (t->yrepeat < 4) t->yrepeat = 4; */ - - tsprite[spritesortcnt].shade = t->shade; - tsprite[spritesortcnt].cstat = tsprite[spritesortcnt].pal = 0; - - tsprite[spritesortcnt].picnum = (g_player[p].ps->curr_weapon==GROW_WEAPON?GROWSPRITEICON:WeaponPickupSprites[g_player[p].ps->curr_weapon]); - - if (s->owner >= 0) - tsprite[spritesortcnt].z = g_player[p].ps->pos.z-(12<<8); - else tsprite[spritesortcnt].z = s->z-(51<<8); - - if (tsprite[spritesortcnt].picnum == HEAVYHBOMB) - tsprite[spritesortcnt].xrepeat = tsprite[spritesortcnt].yrepeat = 10; - else - tsprite[spritesortcnt].xrepeat = tsprite[spritesortcnt].yrepeat = 16; - - spritesortcnt++; - } - - if (g_player[p].sync->extbits & (1<<7) && !ud.pause_on) - { - Bmemcpy((spritetype *)&tsprite[spritesortcnt],(spritetype *)t,sizeof(spritetype)); - - tsprite[spritesortcnt].statnum = TSPR_TEMP; - - tsprite[spritesortcnt].yrepeat = (t->yrepeat>>3); - if (tsprite[spritesortcnt].yrepeat < 4) tsprite[spritesortcnt].yrepeat = 4; - - tsprite[spritesortcnt].cstat = 0; - tsprite[spritesortcnt].picnum = RESPAWNMARKERGREEN; - - if (s->owner >= 0) - tsprite[spritesortcnt].z = g_player[p].ps->pos.z-(20<<8); - else - tsprite[spritesortcnt].z = s->z-(96<<8); - - tsprite[spritesortcnt].xrepeat = tsprite[spritesortcnt].yrepeat = 32; - tsprite[spritesortcnt].pal = 20; - spritesortcnt++; - } - } - - if (s->owner == -1) - { -#ifdef USE_OPENGL - if (getrendermode() >= 3 && usemodels && md_tilehasmodel(s->picnum,t->pal) >= 0 && !(spriteext[i].flags&SPREXT_NOTMD)) - { - k = 0; - t->cstat &= ~4; - } - else -#endif - { - k = (((s->ang+3072+128-a)&2047)>>8)&7; - if (k>4) - { - k = 8-k; - t->cstat |= 4; - } - else t->cstat &= ~4; - } - - if (sector[s->sectnum].lotag == 2) k += 1795-1405; - else if ((actor[i].floorz-s->z) > (64<<8)) k += 60; - - t->picnum += k; - t->pal = g_player[p].ps->palookup; - - goto PALONLY; - } - - if (g_player[p].ps->on_crane == -1 && (sector[s->sectnum].lotag&0x7ff) != 1) - { - l = s->z-actor[g_player[p].ps->i].floorz+(3<<8); - if (l > 1024 && s->yrepeat > 32 && s->extra > 0) - s->yoffset = (int8_t)(l/(s->yrepeat<<2)); - else s->yoffset=0; - } - - if (g_player[p].ps->newowner > -1) - { - t4 = *(actorscrptr[APLAYER]+1); - t3 = 0; - t1 = *(actorscrptr[APLAYER]+2); - } - - if (ud.camerasprite == -1 && g_player[p].ps->newowner == -1) - if (s->owner >= 0 && display_mirror == 0 && g_player[p].ps->over_shoulder_on == 0) - if ((!g_netServer && ud.multimode < 2) || ((g_netServer || ud.multimode > 1) && p == screenpeek)) - { - if (getrendermode() == 4) - t->cstat |= 16384; - else - { - t->owner = -1; - t->xrepeat = t->yrepeat = 0; - continue; - } - -#ifdef USE_OPENGL - if (getrendermode() >= 3 && usemodels && md_tilehasmodel(s->picnum,t->pal) >= 0 && !(spriteext[i].flags&SPREXT_NOTMD)) - { - k = 0; - t->cstat &= ~4; - } - else -#endif - { - k = (((s->ang+3072+128-a)&2047)>>8)&7; - if (k>4) - { - k = 8-k; - t->cstat |= 4; - } - else t->cstat &= ~4; - } - - if (sector[t->sectnum].lotag == 2) k += 1795-1405; - else if ((actor[i].floorz-s->z) > (64<<8)) k += 60; - - t->picnum += k; - t->pal = g_player[p].ps->palookup; - } -PALONLY: - - if (sector[sect].floorpal && sector[sect].floorpal < g_numRealPalettes && !A_CheckSpriteFlags(t->owner,SPRITE_NOPAL)) - t->pal = sector[sect].floorpal; - - if (s->owner == -1) continue; - - if (t->z > actor[i].floorz && t->xrepeat < 32) - t->z = actor[i].floorz; - - break; - - case JIBS1__STATIC: - case JIBS2__STATIC: - case JIBS3__STATIC: - case JIBS4__STATIC: - case JIBS5__STATIC: - case JIBS6__STATIC: - case HEADJIB1__STATIC: - case LEGJIB1__STATIC: - case ARMJIB1__STATIC: - case LIZMANHEAD1__STATIC: - case LIZMANARM1__STATIC: - case LIZMANLEG1__STATIC: - case DUKELEG__STATIC: - case DUKEGUN__STATIC: - case DUKETORSO__STATIC: - if (ud.lockout) - { - t->xrepeat = t->yrepeat = 0; - continue; - } - if (t->pal == 6) t->shade = -120; - case SCRAP1__STATIC: - case SCRAP2__STATIC: - case SCRAP3__STATIC: - case SCRAP4__STATIC: - case SCRAP5__STATIC: - if (actor[i].picnum == BLIMP && t->picnum == SCRAP1 && s->yvel >= 0) - t->picnum = s->yvel; - else t->picnum += T1; - t->shade -= 6; - - if (sector[sect].floorpal && sector[sect].floorpal < g_numRealPalettes && !A_CheckSpriteFlags(t->owner,SPRITE_NOPAL)) - t->pal = sector[sect].floorpal; - break; - - case WATERBUBBLE__STATIC: - if (sector[t->sectnum].floorpicnum == FLOORSLIME) - { - t->pal = 7; - break; - } - default: - if (sector[sect].floorpal && sector[sect].floorpal < g_numRealPalettes && !A_CheckSpriteFlags(t->owner,SPRITE_NOPAL)) - t->pal = sector[sect].floorpal; - break; - } - - if (actorscrptr[s->picnum]) - { - /* - if (ud.angleinterpolation) - { - if (sprpos[i].ang != sprpos[i].oldang) - t->ang = (sprpos[i].oldang + (mulscale16((int32_t)(sprpos[i].angdif),smoothratio) * sprpos[i].angdir)) & 2047; - else - t->ang = sprpos[i].ang; - } - */ - if ((unsigned)((intptr_t *)t4-&script[0]) > (unsigned)(&script[g_scriptSize]-&script[0])) - goto skip; - - l = *(((intptr_t *)t4)+2); //For TerminX: was *(int32_t *)(t4+8) - -#ifdef USE_OPENGL - if (getrendermode() >= 3 && usemodels && md_tilehasmodel(s->picnum,t->pal) >= 0 && !(spriteext[i].flags&SPREXT_NOTMD)) - { - k = 0; - t->cstat &= ~4; - } - else -#endif - switch (l) - { - case 2: - k = (((s->ang+3072+128-a)&2047)>>8)&1; - break; - - case 3: - case 4: - k = (((s->ang+3072+128-a)&2047)>>7)&7; - if (k > 3) - { - t->cstat |= 4; - k = 7-k; - } - else t->cstat &= ~4; - break; - - case 5: - k = getangle(s->x-x,s->y-y); - k = (((s->ang+3072+128-k)&2047)>>8)&7; - if (k>4) - { - k = 8-k; - t->cstat |= 4; - } - else t->cstat &= ~4; - break; - case 7: - k = getangle(s->x-x,s->y-y); - k = (((s->ang+3072+128-k)&2047)/170); - if (k>6) - { - k = 12-k; - t->cstat |= 4; - } - else t->cstat &= ~4; - break; - case 8: - k = (((s->ang+3072+128-a)&2047)>>8)&7; - t->cstat &= ~4; - break; - default: - k = 0; - break; - } - - t->picnum += k + (*(intptr_t *)t4) + l * t3; - - if (l > 0) while (tilesizx[t->picnum] == 0 && t->picnum > 0) - t->picnum -= l; //Hack, for actors - - if (actor[i].dispicnum >= 0) - actor[i].dispicnum = t->picnum; - } - else if (display_mirror == 1) - t->cstat |= 4; - -skip: - if (g_player[screenpeek].ps->inv_amount[GET_HEATS] > 0 && g_player[screenpeek].ps->heat_on && - (A_CheckEnemySprite(s) || A_CheckSpriteFlags(t->owner,SPRITE_NVG) || s->picnum == APLAYER || s->statnum == STAT_DUMMYPLAYER)) - { - t->pal = 6; - t->shade = 0; - } - - if (s->statnum == STAT_DUMMYPLAYER || A_CheckEnemySprite(s) || A_CheckSpriteFlags(t->owner,SPRITE_SHADOW) || (s->picnum == APLAYER && s->owner >= 0)) - if (t->statnum != TSPR_TEMP && s->picnum != EXPLOSION2 && s->picnum != HANGLIGHT && s->picnum != DOMELITE) - if (s->picnum != HOTMEAT) - { - if (actor[i].dispicnum < 0) - { - actor[i].dispicnum++; - continue; - } - else if (ud.shadows && spritesortcnt < (MAXSPRITESONSCREEN-2) && getrendermode() != 4) - { - int32_t daz,xrep,yrep; - - if ((sector[sect].lotag&0xff) > 2 || s->statnum == STAT_PROJECTILE || s->statnum == 5 || s->picnum == DRONE || s->picnum == COMMANDER) - daz = sector[sect].floorz; - else - daz = actor[i].floorz; - - if ((s->z-daz) < (8<<8)) - if (g_player[screenpeek].ps->pos.z < daz) - { - Bmemcpy((spritetype *)&tsprite[spritesortcnt],(spritetype *)t,sizeof(spritetype)); - - tsprite[spritesortcnt].statnum = TSPR_TEMP; - - tsprite[spritesortcnt].yrepeat = (t->yrepeat>>3); - if (t->yrepeat < 4) t->yrepeat = 4; - - tsprite[spritesortcnt].shade = 127; - tsprite[spritesortcnt].cstat |= 2; - - tsprite[spritesortcnt].z = daz; - xrep = tsprite[spritesortcnt].xrepeat;// - (klabs(daz-t->z)>>11); - tsprite[spritesortcnt].xrepeat = xrep; - tsprite[spritesortcnt].pal = 4; - - yrep = tsprite[spritesortcnt].yrepeat;// - (klabs(daz-t->z)>>11); - tsprite[spritesortcnt].yrepeat = yrep; - -#ifdef USE_OPENGL - if (getrendermode() >= 3 && usemodels && md_tilehasmodel(t->picnum,t->pal) >= 0) - { - tsprite[spritesortcnt].yrepeat = 0; - // 512:trans reverse - //1024:tell MD2SPRITE.C to use Z-buffer hacks to hide overdraw issues - tsprite[spritesortcnt].cstat |= (512+1024); - } - else if (getrendermode() >= 3) - { - int32_t ii; - - ii = getangle(tsprite[spritesortcnt].x-g_player[screenpeek].ps->pos.x, - tsprite[spritesortcnt].y-g_player[screenpeek].ps->pos.y); - - tsprite[spritesortcnt].x += sintable[(ii+2560)&2047]>>9; - tsprite[spritesortcnt].y += sintable[(ii+2048)&2047]>>9; - } -#endif - spritesortcnt++; - } - } - } - - switch (DynamicTileMap[s->picnum]) - { - case LASERLINE__STATIC: - if (sector[t->sectnum].lotag == 2) t->pal = 8; - t->z = sprite[s->owner].z-(3<<8); - if (g_tripbombLaserMode == 2 && g_player[screenpeek].ps->heat_on == 0) - t->yrepeat = 0; - case EXPLOSION2__STATIC: - case EXPLOSION2BOT__STATIC: - case FREEZEBLAST__STATIC: - case ATOMICHEALTH__STATIC: - case FIRELASER__STATIC: - case SHRINKSPARK__STATIC: - case GROWSPARK__STATIC: - case CHAINGUN__STATIC: - case SHRINKEREXPLOSION__STATIC: - case RPG__STATIC: - case FLOORFLAME__STATIC: - if (t->picnum == EXPLOSION2) - { - g_player[screenpeek].ps->visibility = -127; - lastvisinc = totalclock+32; - //g_restorePalette = 1; // JBF 20040101: why? - } - t->shade = -127; - t->cstat |= 8192; - break; - case FIRE__STATIC: - case FIRE2__STATIC: - t->cstat |= 128; - case BURNING__STATIC: - case BURNING2__STATIC: - if (sprite[s->owner].picnum != TREE1 && sprite[s->owner].picnum != TREE2) - t->z = sector[t->sectnum].floorz; - t->shade = -127; - case SMALLSMOKE__STATIC: - t->cstat |= 8192; - break; - case COOLEXPLOSION1__STATIC: - t->shade = -127; - t->cstat |= 8192; - t->picnum += (s->shade>>1); - break; - case PLAYERONWATER__STATIC: -#ifdef USE_OPENGL - if (getrendermode() >= 3 && usemodels && md_tilehasmodel(s->picnum,s->pal) >= 0 && !(spriteext[i].flags&SPREXT_NOTMD)) - { - k = 0; - t->cstat &= ~4; - } - else -#endif - { - k = (((t->ang+3072+128-a)&2047)>>8)&7; - if (k>4) - { - k = 8-k; - t->cstat |= 4; - } - else t->cstat &= ~4; - } - - t->picnum = s->picnum+k+((T1<4)*5); - t->shade = sprite[s->owner].shade; - - break; - - case WATERSPLASH2__STATIC: - t->picnum = WATERSPLASH2+t1; - break; - case REACTOR2__STATIC: - t->picnum = s->picnum + T3; - break; - case SHELL__STATIC: - t->picnum = s->picnum+(T1&1); - case SHOTGUNSHELL__STATIC: - t->cstat |= 12; - if (T1 > 2) t->cstat &= ~16; - else if (T1 > 1) t->cstat &= ~4; - break; - case FRAMEEFFECT1_13__STATIC: - if (PLUTOPAK) break; - case FRAMEEFFECT1__STATIC: - if (s->owner >= 0 && sprite[s->owner].statnum < MAXSTATUS) - { - if (sprite[s->owner].picnum == APLAYER) - if (ud.camerasprite == -1) - if (screenpeek == sprite[s->owner].yvel && display_mirror == 0) - { - t->owner = -1; - break; - } - if ((sprite[s->owner].cstat&32768) == 0) - { - if (!actor[s->owner].dispicnum) - t->picnum = actor[i].t_data[1]; - else t->picnum = actor[s->owner].dispicnum; - t->pal = sprite[s->owner].pal; - t->shade = sprite[s->owner].shade; - t->ang = sprite[s->owner].ang; - t->cstat = 2|sprite[s->owner].cstat; - } - } - break; - - case CAMERA1__STATIC: - case RAT__STATIC: -#ifdef USE_OPENGL - if (getrendermode() >= 3 && usemodels && md_tilehasmodel(s->picnum,s->pal) >= 0 && !(spriteext[i].flags&SPREXT_NOTMD)) - { - t->cstat &= ~4; - break; - } -#endif - k = (((t->ang+3072+128-a)&2047)>>8)&7; - if (k>4) - { - k = 8-k; - t->cstat |= 4; - } - else t->cstat &= ~4; - t->picnum = s->picnum+k; - break; - } - - actor[i].dispicnum = t->picnum; - // why? - /* - if (sector[t->sectnum].floorpicnum == MIRROR) - t->xrepeat = t->yrepeat = 0; - */ - } - - if (apScriptGameEvent[EVENT_ANIMATESPRITES]) - { - j = spritesortcnt-1; - do - { - if (display_mirror) tsprite[j].statnum = TSPR_MIRROR; - if (tsprite[j].owner < MAXSPRITES && tsprite[j].owner >= 0 && spriteext[tsprite[j].owner].flags & SPREXT_TSPRACCESS) - { - spriteext[tsprite[j].owner].tspr = (spritetype *)&tsprite[j]; - VM_OnEvent(EVENT_ANIMATESPRITES,tsprite[j].owner, myconnectindex, -1); - } - } - while (j--); - - if (j < 0) return; - - if (display_mirror) tsprite[j].statnum = TSPR_MIRROR; - if (tsprite[j].owner >= 0 && tsprite[j].owner < MAXSPRITES && spriteext[tsprite[j].owner].flags & SPREXT_TSPRACCESS) - { - spriteext[tsprite[j].owner].tspr = (spritetype *)&tsprite[j]; - VM_OnEvent(EVENT_ANIMATESPRITES,tsprite[j].owner, myconnectindex, -1); - } - } -} -#if 0 // def _MSC_VER -//#pragma auto_inline() -#pragma optimize("",on) -#endif - -char CheatStrings[][MAXCHEATLEN] = -{ - "cornholio", // 0 - "stuff", // 1 - "scotty###", // 2 - "coords", // 3 - "view", // 4 - "time", // 5 - "unlock", // 6 - "cashman", // 7 - "items", // 8 - "rate", // 9 - "skill#", // 10 - "beta", // 11 - "hyper", // 12 - "monsters", // 13 - "", // 14 - "", // 15 - "todd", // 16 - "showmap", // 17 - "kroz", // 18 - "allen", // 19 - "clip", // 20 - "weapons", // 21 - "inventory", // 22 - "keys", // 23 - "debug", // 24 - "", // 25 - "cgs", // 26 -}; - -enum cheatindex_t -{ - CHEAT_CORNHOLIO, - CHEAT_STUFF, - CHEAT_SCOTTY, - CHEAT_COORDS, - CHEAT_VIEW, - CHEAT_TIME, - CHEAT_UNLOCK, - CHEAT_CASHMAN, - CHEAT_ITEMS, - CHEAT_RATE, - CHEAT_SKILL, - CHEAT_BETA, - CHEAT_HYPER, - CHEAT_MONSTERS, - CHEAT_RESERVED, - CHEAT_RESERVED2, - CHEAT_TODD, - CHEAT_SHOWMAP, - CHEAT_KROZ, - CHEAT_ALLEN, - CHEAT_CLIP, - CHEAT_WEAPONS, - CHEAT_INVENTORY, - CHEAT_KEYS, - CHEAT_DEBUG, - CHEAT_RESERVED3, - CHEAT_COMEGETSOME, -}; - -void G_CheatGetInv(void) -{ - Gv_SetVar(g_iReturnVarID, 400, g_player[myconnectindex].ps->i, myconnectindex); - VM_OnEvent(EVENT_CHEATGETSTEROIDS, g_player[myconnectindex].ps->i, myconnectindex, -1); - if (aGameVars[g_iReturnVarID].val.lValue >=0) - { - g_player[myconnectindex].ps->inv_amount[GET_STEROIDS] = - aGameVars[g_iReturnVarID].val.lValue; - } - - Gv_SetVar(g_iReturnVarID, 1200, g_player[myconnectindex].ps->i, myconnectindex); - VM_OnEvent(EVENT_CHEATGETHEAT, g_player[myconnectindex].ps->i, myconnectindex, -1); - if (aGameVars[g_iReturnVarID].val.lValue >=0) - { - g_player[myconnectindex].ps->inv_amount[GET_HEATS] = - aGameVars[g_iReturnVarID].val.lValue; - } - - Gv_SetVar(g_iReturnVarID, 200, g_player[myconnectindex].ps->i, myconnectindex); - VM_OnEvent(EVENT_CHEATGETBOOT, g_player[myconnectindex].ps->i, myconnectindex, -1); - if (aGameVars[g_iReturnVarID].val.lValue >=0) - { - g_player[myconnectindex].ps->inv_amount[GET_BOOTS] = - aGameVars[g_iReturnVarID].val.lValue; - } - - Gv_SetVar(g_iReturnVarID, 100, g_player[myconnectindex].ps->i, myconnectindex); - VM_OnEvent(EVENT_CHEATGETSHIELD, g_player[myconnectindex].ps->i, myconnectindex, -1); - if (aGameVars[g_iReturnVarID].val.lValue >=0) - { - g_player[myconnectindex].ps->inv_amount[GET_SHIELD] = - aGameVars[g_iReturnVarID].val.lValue; - } - - Gv_SetVar(g_iReturnVarID, 6400, g_player[myconnectindex].ps->i, myconnectindex); - VM_OnEvent(EVENT_CHEATGETSCUBA, g_player[myconnectindex].ps->i, myconnectindex, -1); - if (aGameVars[g_iReturnVarID].val.lValue >=0) - { - g_player[myconnectindex].ps->inv_amount[GET_SCUBA] = - aGameVars[g_iReturnVarID].val.lValue; - } - - Gv_SetVar(g_iReturnVarID, 2400, g_player[myconnectindex].ps->i, myconnectindex); - VM_OnEvent(EVENT_CHEATGETHOLODUKE, g_player[myconnectindex].ps->i, myconnectindex, -1); - if (aGameVars[g_iReturnVarID].val.lValue >=0) - { - g_player[myconnectindex].ps->inv_amount[GET_HOLODUKE] = - aGameVars[g_iReturnVarID].val.lValue; - } - - Gv_SetVar(g_iReturnVarID, 1600, g_player[myconnectindex].ps->i, myconnectindex); - VM_OnEvent(EVENT_CHEATGETJETPACK, g_player[myconnectindex].ps->i, myconnectindex, -1); - if (aGameVars[g_iReturnVarID].val.lValue >=0) - { - g_player[myconnectindex].ps->inv_amount[GET_JETPACK] = - aGameVars[g_iReturnVarID].val.lValue; - } - - Gv_SetVar(g_iReturnVarID, g_player[myconnectindex].ps->max_player_health, g_player[myconnectindex].ps->i, myconnectindex); - VM_OnEvent(EVENT_CHEATGETFIRSTAID, g_player[myconnectindex].ps->i, myconnectindex, -1); - if (aGameVars[g_iReturnVarID].val.lValue >=0) - { - g_player[myconnectindex].ps->inv_amount[GET_FIRSTAID] = - aGameVars[g_iReturnVarID].val.lValue; - } -} - -int8_t cheatbuf[MAXCHEATLEN],cheatbuflen; - -GAME_STATIC void G_DoCheats(void) -{ - int32_t ch, i, j, k=0, weapon; - static int32_t z=0; - char consolecheat = 0; // JBF 20030914 - - if (osdcmd_cheatsinfo_stat.cheatnum != -1) - { - // JBF 20030914 - k = osdcmd_cheatsinfo_stat.cheatnum; - osdcmd_cheatsinfo_stat.cheatnum = -1; - consolecheat = 1; - } - - if (g_player[myconnectindex].ps->gm & (MODE_TYPE|MODE_MENU)) - return; - - if (VOLUMEONE && !z) - { - Bstrcpy(CheatStrings[2],"scotty##"); - Bstrcpy(CheatStrings[6],""); - z=1; - } - - if (consolecheat && numplayers < 2 && ud.recstat == 0) - goto FOUNDCHEAT; - - if (g_player[myconnectindex].ps->cheat_phase == 1) - { - while (KB_KeyWaiting()) - { - ch = Btolower(KB_Getch()); - - if (!((ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9'))) - { - g_player[myconnectindex].ps->cheat_phase = 0; - // P_DoQuote(QUOTE_46,g_player[myconnectindex].ps); - return; - } - - cheatbuf[cheatbuflen++] = (int8_t)ch; - cheatbuf[cheatbuflen] = 0; - // KB_ClearKeysDown(); - - if (cheatbuflen > MAXCHEATLEN) - { - g_player[myconnectindex].ps->cheat_phase = 0; - return; - } - - for (k=0; k < NUMCHEATCODES; k++) - { - for (j = 0; j= '0' && ch <= '9')) - { - if (CheatStrings[k][j+1] == 0) goto FOUNDCHEAT; - if (j == cheatbuflen-1) return; - } - else break; - } - } - - g_player[myconnectindex].ps->cheat_phase = 0; - return; - -FOUNDCHEAT: - { - switch (k) - { - case CHEAT_WEAPONS: - j = 0; - - if (VOLUMEONE) - j = 6; - - for (weapon = PISTOL_WEAPON; weapon < MAX_WEAPONS-j; weapon++) - { - P_AddAmmo(weapon, g_player[myconnectindex].ps, g_player[myconnectindex].ps->max_ammo_amount[weapon]); - g_player[myconnectindex].ps->gotweapon |= (1<cheat_phase = 0; - P_DoQuote(QUOTE_CHEAT_ALL_WEAPONS, g_player[myconnectindex].ps); - return; - - case CHEAT_INVENTORY: - KB_FlushKeyBoardQueue(); - g_player[myconnectindex].ps->cheat_phase = 0; - G_CheatGetInv(); - P_DoQuote(QUOTE_CHEAT_ALL_INV, g_player[myconnectindex].ps); - g_player[myconnectindex].ps->cheat_phase = 0; - return; - - case CHEAT_KEYS: - g_player[myconnectindex].ps->got_access = 7; - KB_FlushKeyBoardQueue(); - g_player[myconnectindex].ps->cheat_phase = 0; - P_DoQuote(QUOTE_CHEAT_ALL_KEYS, g_player[myconnectindex].ps); - return; - - case CHEAT_DEBUG: - g_Debug = 1-g_Debug; - KB_FlushKeyBoardQueue(); - g_player[myconnectindex].ps->cheat_phase = 0; - - G_DumpDebugInfo(); - Bsprintf(tempbuf,"GAMEVARS DUMPED TO LOG"); - G_AddUserQuote(tempbuf); - Bsprintf(tempbuf,"MAP DUMPED TO DEBUG.MAP"); - G_AddUserQuote(tempbuf); - break; - - case CHEAT_CLIP: - ud.clipping = 1-ud.clipping; - KB_FlushKeyBoardQueue(); - g_player[myconnectindex].ps->cheat_phase = 0; - P_DoQuote(QUOTE_CHEAT_NOCLIP-ud.clipping, g_player[myconnectindex].ps); - return; - - case CHEAT_RESERVED2: - g_player[myconnectindex].ps->gm = MODE_EOL; - g_player[myconnectindex].ps->cheat_phase = 0; - KB_FlushKeyBoardQueue(); - return; - - case CHEAT_ALLEN: - P_DoQuote(QUOTE_CHEAT_ALLEN,g_player[myconnectindex].ps); - g_player[myconnectindex].ps->cheat_phase = 0; - KB_ClearKeyDown(sc_N); - return; - - case CHEAT_CORNHOLIO: - case CHEAT_KROZ: - ud.god = 1-ud.god; - - if (ud.god) - { - pus = 1; - pub = 1; - sprite[g_player[myconnectindex].ps->i].cstat = 257; - - actor[g_player[myconnectindex].ps->i].t_data[0] = 0; - actor[g_player[myconnectindex].ps->i].t_data[1] = 0; - actor[g_player[myconnectindex].ps->i].t_data[2] = 0; - actor[g_player[myconnectindex].ps->i].t_data[3] = 0; - actor[g_player[myconnectindex].ps->i].t_data[4] = 0; - actor[g_player[myconnectindex].ps->i].t_data[5] = 0; - - sprite[g_player[myconnectindex].ps->i].hitag = 0; - sprite[g_player[myconnectindex].ps->i].lotag = 0; - sprite[g_player[myconnectindex].ps->i].pal = g_player[myconnectindex].ps->palookup; - - P_DoQuote(QUOTE_CHEAT_GODMODE_ON,g_player[myconnectindex].ps); - } - else - { - ud.god = 0; - sprite[g_player[myconnectindex].ps->i].extra = g_player[myconnectindex].ps->max_player_health; - actor[g_player[myconnectindex].ps->i].extra = -1; - g_player[myconnectindex].ps->last_extra = g_player[myconnectindex].ps->max_player_health; - P_DoQuote(QUOTE_CHEAT_GODMODE_OFF,g_player[myconnectindex].ps); - } - - sprite[g_player[myconnectindex].ps->i].extra = g_player[myconnectindex].ps->max_player_health; - actor[g_player[myconnectindex].ps->i].extra = 0; - g_player[myconnectindex].ps->cheat_phase = 0; - g_player[myconnectindex].ps->dead_flag = 0; - KB_FlushKeyBoardQueue(); - return; - - case CHEAT_COMEGETSOME: - ud.god = 1-ud.god; - - if (ud.god) - { - pus = 1; - pub = 1; - sprite[g_player[myconnectindex].ps->i].cstat = 257; - - actor[g_player[myconnectindex].ps->i].t_data[0] = 0; - actor[g_player[myconnectindex].ps->i].t_data[1] = 0; - actor[g_player[myconnectindex].ps->i].t_data[2] = 0; - actor[g_player[myconnectindex].ps->i].t_data[3] = 0; - actor[g_player[myconnectindex].ps->i].t_data[4] = 0; - actor[g_player[myconnectindex].ps->i].t_data[5] = 0; - - sprite[g_player[myconnectindex].ps->i].hitag = 0; - sprite[g_player[myconnectindex].ps->i].lotag = 0; - sprite[g_player[myconnectindex].ps->i].pal = g_player[myconnectindex].ps->palookup; - Bstrcpy(ScriptQuotes[QUOTE_RESERVED4],"COME GET SOME!"); - S_PlaySound(DUKE_GETWEAPON2); - P_DoQuote(QUOTE_RESERVED4, g_player[myconnectindex].ps); - G_CheatGetInv(); - for (weapon = PISTOL_WEAPON; weapon < MAX_WEAPONS; weapon++) - g_player[myconnectindex].ps->gotweapon |= (1<max_ammo_amount[weapon]); - g_player[myconnectindex].ps->got_access = 7; - } - else - { - sprite[g_player[myconnectindex].ps->i].extra = g_player[myconnectindex].ps->max_player_health; - actor[g_player[myconnectindex].ps->i].extra = -1; - g_player[myconnectindex].ps->last_extra = g_player[myconnectindex].ps->max_player_health; - P_DoQuote(QUOTE_CHEAT_GODMODE_OFF, g_player[myconnectindex].ps); - } - - sprite[g_player[myconnectindex].ps->i].extra = g_player[myconnectindex].ps->max_player_health; - actor[g_player[myconnectindex].ps->i].extra = 0; - g_player[myconnectindex].ps->cheat_phase = 0; - KB_FlushKeyBoardQueue(); - return; - - case CHEAT_STUFF: - - j = 0; - - if (VOLUMEONE) - j = 6; - - for (weapon = PISTOL_WEAPON; weapon < MAX_WEAPONS-j; weapon++) - g_player[myconnectindex].ps->gotweapon |= (1<max_ammo_amount[weapon]); - G_CheatGetInv(); - g_player[myconnectindex].ps->got_access = 7; - P_DoQuote(QUOTE_CHEAT_EVERYTHING, g_player[myconnectindex].ps); - g_player[myconnectindex].ps->cheat_phase = 0; - - // P_DoQuote(QUOTE_21,g_player[myconnectindex].ps); - g_player[myconnectindex].ps->cheat_phase = 0; - KB_FlushKeyBoardQueue(); - g_player[myconnectindex].ps->inven_icon = 1; - return; - - case CHEAT_SCOTTY: - case CHEAT_SKILL: - if (k == CHEAT_SCOTTY) - { - i = Bstrlen(CheatStrings[k])-3+VOLUMEONE; - if (!consolecheat) - { - // JBF 20030914 - int16_t volnume,levnume; - if (VOLUMEALL) - { - volnume = cheatbuf[i] - '0'; - levnume = (cheatbuf[i+1] - '0')*10+(cheatbuf[i+2]-'0'); - } - else - { - volnume = cheatbuf[i] - '0'; - levnume = cheatbuf[i+1] - '0'; - } - - volnume--; - levnume--; - - if ((VOLUMEONE && volnume > 0) || volnume > g_numVolumes-1 || - levnume >= MAXLEVELS || MapInfo[volnume *MAXLEVELS+levnume].filename == NULL) - { - g_player[myconnectindex].ps->cheat_phase = 0; - KB_FlushKeyBoardQueue(); - return; - } - - ud.m_volume_number = ud.volume_number = volnume; - ud.m_level_number = ud.level_number = levnume; - } - else - { - // JBF 20030914 - ud.m_volume_number = ud.volume_number = osdcmd_cheatsinfo_stat.volume; - ud.m_level_number = ud.level_number = osdcmd_cheatsinfo_stat.level; - } - } - else - { - i = Bstrlen(CheatStrings[k])-1; - ud.m_player_skill = ud.player_skill = cheatbuf[i] - '1'; - } - if (numplayers > 1 && g_netServer) - Net_NewGame(ud.m_volume_number,ud.m_level_number); - else g_player[myconnectindex].ps->gm |= MODE_RESTART; - - g_player[myconnectindex].ps->cheat_phase = 0; - KB_FlushKeyBoardQueue(); - return; - - case CHEAT_COORDS: - g_player[myconnectindex].ps->cheat_phase = 0; - ud.coords = 1-ud.coords; - KB_FlushKeyBoardQueue(); - return; - - case CHEAT_VIEW: - if (g_player[myconnectindex].ps->over_shoulder_on) - g_player[myconnectindex].ps->over_shoulder_on = 0; - else - { - g_player[myconnectindex].ps->over_shoulder_on = 1; - g_cameraDistance = 0; - g_cameraClock = totalclock; - } -// P_DoQuote(QUOTE_CHEATS_DISABLED,g_player[myconnectindex].ps); - g_player[myconnectindex].ps->cheat_phase = 0; - KB_FlushKeyBoardQueue(); - return; - - case CHEAT_TIME: - -// P_DoQuote(QUOTE_21,g_player[myconnectindex].ps); - g_player[myconnectindex].ps->cheat_phase = 0; - KB_FlushKeyBoardQueue(); - return; - - case CHEAT_UNLOCK: - if (VOLUMEONE) return; - - for (i=numsectors-1; i>=0; i--) //Unlock - { - j = sector[i].lotag; - if (j == -1 || j == 32767) continue; - if ((j & 0x7fff) > 2) - { - if (j&(0xffff-16384)) - sector[i].lotag &= (0xffff-16384); - G_OperateSectors(i,g_player[myconnectindex].ps->i); - } - } - G_OperateForceFields(g_player[myconnectindex].ps->i,-1); - - P_DoQuote(QUOTE_CHEAT_UNLOCK,g_player[myconnectindex].ps); - g_player[myconnectindex].ps->cheat_phase = 0; - KB_FlushKeyBoardQueue(); - return; - - case CHEAT_CASHMAN: - ud.cashman = 1-ud.cashman; - KB_ClearKeyDown(sc_N); - g_player[myconnectindex].ps->cheat_phase = 0; - return; - - case CHEAT_ITEMS: - G_CheatGetInv(); - g_player[myconnectindex].ps->got_access = 7; - P_DoQuote(QUOTE_CHEAT_EVERYTHING,g_player[myconnectindex].ps); - g_player[myconnectindex].ps->cheat_phase = 0; - KB_FlushKeyBoardQueue(); - return; - - case CHEAT_SHOWMAP: // SHOW ALL OF THE MAP TOGGLE; - ud.showallmap = 1-ud.showallmap; - if (ud.showallmap) - { - for (i=0; i<(MAXSECTORS>>3); i++) - show2dsector[i] = 255; - for (i=0; i<(MAXWALLS>>3); i++) - show2dwall[i] = 255; - P_DoQuote(QUOTE_SHOW_MAP_ON, g_player[myconnectindex].ps); - } - else - { - for (i=0; i<(MAXSECTORS>>3); i++) - show2dsector[i] = 0; - for (i=0; i<(MAXWALLS>>3); i++) - show2dwall[i] = 0; - P_DoQuote(QUOTE_SHOW_MAP_OFF, g_player[myconnectindex].ps); - } - g_player[myconnectindex].ps->cheat_phase = 0; - KB_FlushKeyBoardQueue(); - return; - - case CHEAT_TODD: - P_DoQuote(QUOTE_CHEAT_TODD,g_player[myconnectindex].ps); - g_player[myconnectindex].ps->cheat_phase = 0; - KB_FlushKeyBoardQueue(); - return; - - case CHEAT_RATE: - ud.tickrate = !ud.tickrate; - g_player[myconnectindex].ps->cheat_phase = 0; - KB_FlushKeyBoardQueue(); - return; - - case CHEAT_BETA: - P_DoQuote(QUOTE_CHEAT_BETA,g_player[myconnectindex].ps); - KB_ClearKeyDown(sc_H); - g_player[myconnectindex].ps->cheat_phase = 0; - KB_FlushKeyBoardQueue(); - return; - - case CHEAT_HYPER: - g_player[myconnectindex].ps->inv_amount[GET_STEROIDS] = 399; - g_player[myconnectindex].ps->inv_amount[GET_HEATS] = 1200; - g_player[myconnectindex].ps->cheat_phase = 0; - P_DoQuote(QUOTE_CHEAT_STEROIDS,g_player[myconnectindex].ps); - KB_FlushKeyBoardQueue(); - return; - - case CHEAT_MONSTERS: - { - char *s[] = { "ON", "OFF" }; - - if (++g_noEnemies == 3) - g_noEnemies = 0; - - g_player[screenpeek].ps->cheat_phase = 0; - - Bsprintf(ScriptQuotes[QUOTE_RESERVED4], "MONSTERS: %s", s[g_noEnemies%1]); - P_DoQuote(QUOTE_RESERVED4,g_player[myconnectindex].ps); - - KB_FlushKeyBoardQueue(); - return; - } - case CHEAT_RESERVED: - case CHEAT_RESERVED3: - ud.eog = 1; - g_player[myconnectindex].ps->gm |= MODE_EOL; - KB_FlushKeyBoardQueue(); - return; - } - } - } - } - else - { - if (KB_KeyPressed((uint8_t)CheatKeys[0])) - { - if (g_player[myconnectindex].ps->cheat_phase >= 0 && numplayers < 2 && ud.recstat == 0) - { - if (CheatKeys[0] == CheatKeys[1]) - KB_ClearKeyDown((uint8_t)CheatKeys[0]); - g_player[myconnectindex].ps->cheat_phase = -1; - } - } - - if (KB_KeyPressed((uint8_t)CheatKeys[1])) - { - if (g_player[myconnectindex].ps->cheat_phase == -1) - { - if (ud.player_skill == 4) - { - P_DoQuote(QUOTE_CHEATS_DISABLED,g_player[myconnectindex].ps); - g_player[myconnectindex].ps->cheat_phase = 0; - } - else - { - g_player[myconnectindex].ps->cheat_phase = 1; - // P_DoQuote(QUOTE_25,g_player[myconnectindex].ps); - cheatbuflen = 0; - } - KB_FlushKeyboardQueue(); - } - else if (g_player[myconnectindex].ps->cheat_phase != 0) - { - g_player[myconnectindex].ps->cheat_phase = 0; - KB_ClearKeyDown((uint8_t)CheatKeys[0]); - KB_ClearKeyDown((uint8_t)CheatKeys[1]); - } - } - } -} - -void G_HandleLocalKeys(void) -{ - int32_t i,ch; - int32_t j; - -// CONTROL_ProcessBinds(); - - if (ud.recstat == 2) - { - ControlInfo noshareinfo; - CONTROL_GetInput(&noshareinfo); - } - - if (g_player[myconnectindex].gotvote == 0 && voting != -1 && voting != myconnectindex) - { - if (KB_UnBoundKeyPressed(sc_F1) || KB_UnBoundKeyPressed(sc_F2) || ud.autovote) - { - tempbuf[0] = PACKET_MAP_VOTE; - tempbuf[1] = myconnectindex; - tempbuf[2] = (KB_UnBoundKeyPressed(sc_F1) || ud.autovote ? ud.autovote-1 : 0); - tempbuf[3] = myconnectindex; - - if (g_netClient) - enet_peer_send(g_netClientPeer, CHAN_GAMESTATE, enet_packet_create(tempbuf, 4, ENET_PACKET_FLAG_RELIABLE)); - else if (g_netServer) - enet_host_broadcast(g_netServer, CHAN_GAMESTATE, enet_packet_create(tempbuf, 4, ENET_PACKET_FLAG_RELIABLE)); - - - G_AddUserQuote("VOTE CAST"); - g_player[myconnectindex].gotvote = 1; - KB_ClearKeyDown(sc_F1); - KB_ClearKeyDown(sc_F2); - voting = -1; - } - } - - if (!ALT_IS_PRESSED && ud.overhead_on == 0 && (g_player[myconnectindex].ps->gm & MODE_TYPE) == 0) - { - if (BUTTON(gamefunc_Enlarge_Screen)) - { - CONTROL_ClearButton(gamefunc_Enlarge_Screen); - if (!SHIFTS_IS_PRESSED) - { - if (ud.screen_size > 0) - S_PlaySound(THUD); - if (getrendermode() >= 3 && ud.screen_size == 8 && ud.statusbarmode == 0) - ud.statusbarmode = 1; - else ud.screen_size -= 4; - - if (ud.statusbarscale == 100 && ud.statusbarmode == 1) - { - ud.statusbarmode = 0; - ud.screen_size -= 4; - } - } - else - { - ud.statusbarscale += 4; - G_SetStatusBarScale(ud.statusbarscale); - } - G_UpdateScreenArea(); - } - - if (BUTTON(gamefunc_Shrink_Screen)) - { - CONTROL_ClearButton(gamefunc_Shrink_Screen); - if (!SHIFTS_IS_PRESSED) - { - if (ud.screen_size < 64) S_PlaySound(THUD); - if (getrendermode() >= 3 && ud.screen_size == 8 && ud.statusbarmode == 1) - ud.statusbarmode = 0; - else ud.screen_size += 4; - } - else - { - ud.statusbarscale -= 4; - if (ud.statusbarscale < 37) - ud.statusbarscale = 37; - G_SetStatusBarScale(ud.statusbarscale); - } - G_UpdateScreenArea(); - } - } - - if (g_player[myconnectindex].ps->cheat_phase == 1 || (g_player[myconnectindex].ps->gm&(MODE_MENU|MODE_TYPE))) return; - - if (BUTTON(gamefunc_See_Coop_View) && (GTFLAGS(GAMETYPE_COOPVIEW) || ud.recstat == 2)) - { - CONTROL_ClearButton(gamefunc_See_Coop_View); - screenpeek = connectpoint2[screenpeek]; - if (screenpeek == -1) screenpeek = 0; - g_restorePalette = 1; - } - - if ((g_netServer || ud.multimode > 1) && BUTTON(gamefunc_Show_Opponents_Weapon)) - { - CONTROL_ClearButton(gamefunc_Show_Opponents_Weapon); - ud.config.ShowOpponentWeapons = ud.showweapons = 1-ud.showweapons; - P_DoQuote(QUOTE_WEAPON_MODE_OFF-ud.showweapons,g_player[screenpeek].ps); - } - - if (BUTTON(gamefunc_Toggle_Crosshair)) - { - CONTROL_ClearButton(gamefunc_Toggle_Crosshair); - ud.crosshair = !ud.crosshair; - P_DoQuote(QUOTE_CROSSHAIR_OFF-ud.crosshair,g_player[screenpeek].ps); - } - - if (ud.overhead_on && BUTTON(gamefunc_Map_Follow_Mode)) - { - CONTROL_ClearButton(gamefunc_Map_Follow_Mode); - ud.scrollmode = 1-ud.scrollmode; - if (ud.scrollmode) - { - ud.folx = g_player[screenpeek].ps->opos.x; - ud.foly = g_player[screenpeek].ps->opos.y; - ud.fola = g_player[screenpeek].ps->oang; - } - P_DoQuote(QUOTE_MAP_FOLLOW_OFF+ud.scrollmode,g_player[myconnectindex].ps); - } - - if (KB_UnBoundKeyPressed(sc_ScrollLock)) - { - KB_ClearKeyDown(sc_ScrollLock); - - switch (ud.recstat) - { - case 0: - G_OpenDemoWrite(); - break; - case 1: - G_CloseDemoWrite(); - break; - } - } - - if (ud.recstat == 2) - { - if (KB_KeyPressed(sc_Space)) - { - KB_ClearKeyDown(sc_Space); - - g_demo_paused = !g_demo_paused; - g_demo_rewind = 0; - - if (g_demo_paused) - { - FX_StopAllSounds(); - S_ClearSoundLocks(); - } - } - - if (KB_KeyPressed(sc_Tab)) - { - KB_ClearKeyDown(sc_Tab); - g_demo_showStats = !g_demo_showStats; - } - -#if 0 - if (KB_KeyPressed(sc_kpad_Plus)) - { - if (g_timerTicsPerSecond != 240) - { - uninittimer(); - inittimer(240); - g_timerTicsPerSecond = 240; - } - } - else if (KB_KeyPressed(sc_kpad_Minus)) - { - if (g_timerTicsPerSecond != 60) - { - uninittimer(); - inittimer(60); - g_timerTicsPerSecond = 60; - } - } - else if (g_timerTicsPerSecond != 120) - { - uninittimer(); - inittimer(120); - g_timerTicsPerSecond = 120; - } -#endif - - if (KB_KeyPressed(sc_kpad_6)) - { - KB_ClearKeyDown(sc_kpad_6); - j = (15< g_demo_totalCnt) - g_demo_goalCnt = 0; - else - demo_preparewarp(); - } - else if (KB_KeyPressed(sc_kpad_4)) - { - KB_ClearKeyDown(sc_kpad_4); - j = (15<gm = MODE_GAME; -// ready2send=0; - screenpeek=myconnectindex; -// g_demo_paused=0; - } -#endif - } - - if (SHIFTS_IS_PRESSED || ALT_IS_PRESSED) - { - i = 0; - j = sc_F1; - - do - { - if (KB_UnBoundKeyPressed(j)) - { - KB_ClearKeyDown(j); - i = j - sc_F1 + 1; - } - } - while (++j < sc_F11); - - if (i) - { - if (SHIFTS_IS_PRESSED) - { - if (i == 5 && g_player[myconnectindex].ps->fta > 0 && g_player[myconnectindex].ps->ftq == QUOTE_MUSIC) - { - i = (VOLUMEALL?MAXVOLUMES*MAXLEVELS:6); - g_musicIndex = (g_musicIndex+1)%i; - while (MapInfo[(uint8_t)g_musicIndex].musicfn == NULL) - { - g_musicIndex++; - if (g_musicIndex >= i) - g_musicIndex = 0; - } - if (MapInfo[(uint8_t)g_musicIndex].musicfn != NULL) - { - if (S_PlayMusic(&MapInfo[(uint8_t)g_musicIndex].musicfn[0],g_musicIndex)) - Bsprintf(ScriptQuotes[QUOTE_MUSIC],"PLAYING %s",&MapInfo[(uint8_t)g_musicIndex].alt_musicfn[0]); - else - Bsprintf(ScriptQuotes[QUOTE_MUSIC],"PLAYING %s",&MapInfo[(uint8_t)g_musicIndex].musicfn[0]); - P_DoQuote(QUOTE_MUSIC,g_player[myconnectindex].ps); - } - return; - } - - G_AddUserQuote(ud.ridecule[i-1]); - - ch = 0; - - tempbuf[ch] = PACKET_MESSAGE; - tempbuf[ch+1] = 255; - tempbuf[ch+2] = 0; - Bstrcat(tempbuf+2,ud.ridecule[i-1]); - - i = 2+strlen(ud.ridecule[i-1]); - - tempbuf[i++] = myconnectindex; - - if (g_netClient) - enet_peer_send(g_netClientPeer, CHAN_CHAT, enet_packet_create(tempbuf, i, 0)); - else if (g_netServer) - enet_host_broadcast(g_netServer, CHAN_CHAT, enet_packet_create(tempbuf, i, 0)); - - pus = NUMPAGES; - pub = NUMPAGES; - - return; - - } - - if (ud.lockout == 0) - if (ud.config.SoundToggle && ALT_IS_PRESSED && (RTS_NumSounds() > 0) && g_RTSPlaying == 0 && (ud.config.VoiceToggle & 1)) - { - FX_PlayAuto3D((char *)RTS_GetSound(i-1),RTS_SoundLength(i-1),0,0,0,255,-i); - - g_RTSPlaying = 7; - - if ((g_netServer || ud.multimode > 1)) - { - tempbuf[0] = PACKET_RTS; - tempbuf[1] = i; - tempbuf[2] = myconnectindex; - - if (g_netClient) - enet_peer_send(g_netClientPeer, CHAN_CHAT, enet_packet_create(tempbuf, 3, 0)); - else if (g_netServer) - enet_host_broadcast(g_netServer, CHAN_CHAT, enet_packet_create(tempbuf, 3, 0)); - } - - pus = NUMPAGES; - pub = NUMPAGES; - - return; - } - } - } - - if (!ALT_IS_PRESSED && !SHIFTS_IS_PRESSED) - { - - if ((g_netServer || ud.multimode > 1) && BUTTON(gamefunc_SendMessage)) - { - KB_FlushKeyboardQueue(); - CONTROL_ClearButton(gamefunc_SendMessage); - g_player[myconnectindex].ps->gm |= MODE_TYPE; - typebuf[0] = 0; - inputloc = 0; - } - - if (KB_UnBoundKeyPressed(sc_F1)/* || (ud.show_help && (KB_KeyPressed(sc_Space) || KB_KeyPressed(sc_Enter) || KB_KeyPressed(sc_kpad_Enter) || MOUSE_GetButtons()&LEFT_MOUSE))*/) - { - KB_ClearKeyDown(sc_F1); - ChangeToMenu(400); - FX_StopAllSounds(); - S_ClearSoundLocks(); - - g_player[myconnectindex].ps->gm |= MODE_MENU; - - if ((!g_netServer && ud.multimode < 2)) - { - ready2send = 0; - totalclock = ototalclock; - screenpeek = myconnectindex; - } - - /* - KB_ClearKeyDown(sc_Space); - KB_ClearKeyDown(sc_kpad_Enter); - KB_ClearKeyDown(sc_Enter); - MOUSE_ClearButton(LEFT_MOUSE); - ud.show_help ++; - - if (ud.show_help > 2) - { - ud.show_help = 0; - if ((!g_netServer && ud.multimode < 2) && ud.recstat != 2) ready2send = 1; - G_UpdateScreenArea(); - } - else - { - setview(0,0,xdim-1,ydim-1); - if ((!g_netServer && ud.multimode < 2) && ud.recstat != 2) - { - ready2send = 0; - totalclock = ototalclock; - } - } - */ - } - - // if((!net_server && ud.multimode < 2)) - { - if (ud.recstat != 2 && KB_UnBoundKeyPressed(sc_F2)) - { - KB_ClearKeyDown(sc_F2); - -FAKE_F2: - if (sprite[g_player[myconnectindex].ps->i].extra <= 0) - { - P_DoQuote(QUOTE_SAVE_DEAD,g_player[myconnectindex].ps); - return; - } - ChangeToMenu(350); - g_screenCapture = 1; - G_DrawRooms(myconnectindex,65536); - //savetemp("duke3d.tmp",waloff[TILE_SAVESHOT],160*100); - g_screenCapture = 0; - FX_StopAllSounds(); - S_ClearSoundLocks(); - - // setview(0,0,xdim-1,ydim-1); - g_player[myconnectindex].ps->gm |= MODE_MENU; - - if ((!g_netServer && ud.multimode < 2)) - { - ready2send = 0; - totalclock = ototalclock; - screenpeek = myconnectindex; - } - } - - if (KB_UnBoundKeyPressed(sc_F3)) - { - KB_ClearKeyDown(sc_F3); - -FAKE_F3: - ChangeToMenu(300); - FX_StopAllSounds(); - S_ClearSoundLocks(); - - // setview(0,0,xdim-1,ydim-1); - g_player[myconnectindex].ps->gm |= MODE_MENU; - if ((!g_netServer && ud.multimode < 2) && ud.recstat != 2) - { - ready2send = 0; - totalclock = ototalclock; - } - screenpeek = myconnectindex; - } - } - - if (KB_UnBoundKeyPressed(sc_F4) && ud.config.FXDevice >= 0) - { - KB_ClearKeyDown(sc_F4); - FX_StopAllSounds(); - S_ClearSoundLocks(); - - g_player[myconnectindex].ps->gm |= MODE_MENU; - if ((!g_netServer && ud.multimode < 2) && ud.recstat != 2) - { - ready2send = 0; - totalclock = ototalclock; - } - ChangeToMenu(701); - - } - - if ((KB_UnBoundKeyPressed(sc_F6) || g_doQuickSave == 1) && (g_player[myconnectindex].ps->gm&MODE_GAME)) - { - KB_ClearKeyDown(sc_F6); - g_doQuickSave = 0; - - if (g_lastSaveSlot == -1) goto FAKE_F2; - - KB_FlushKeyboardQueue(); - - if (sprite[g_player[myconnectindex].ps->i].extra <= 0) - { - P_DoQuote(QUOTE_SAVE_DEAD,g_player[myconnectindex].ps); - return; - } - g_screenCapture = 1; - G_DrawRooms(myconnectindex,65536); - //savetemp("duke3d.tmp",waloff[TILE_SAVESHOT],160*100); - g_screenCapture = 0; - if (g_lastSaveSlot >= 0) - { - /* inputloc = Bstrlen(&ud.savegame[g_lastSaveSlot][0]); - g_currentMenu = 360+g_lastSaveSlot; - probey = g_lastSaveSlot; */ - if ((g_netServer || ud.multimode > 1)) - G_SavePlayer(-1-(g_lastSaveSlot)); - else G_SavePlayer(g_lastSaveSlot); - } - } - - if (KB_UnBoundKeyPressed(sc_F7)) - { - KB_ClearKeyDown(sc_F7); - if (g_player[myconnectindex].ps->over_shoulder_on) - g_player[myconnectindex].ps->over_shoulder_on = 0; - else - { - g_player[myconnectindex].ps->over_shoulder_on = 1; - g_cameraDistance = 0; - g_cameraClock = totalclock; - } - P_DoQuote(QUOTE_VIEW_MODE_OFF+g_player[myconnectindex].ps->over_shoulder_on,g_player[myconnectindex].ps); - } - - if (KB_UnBoundKeyPressed(sc_F5) && ud.config.MusicDevice >= 0) - { - KB_ClearKeyDown(sc_F5); - if (MapInfo[(uint8_t)g_musicIndex].alt_musicfn != NULL) - Bstrcpy(ScriptQuotes[QUOTE_MUSIC],&MapInfo[(uint8_t)g_musicIndex].alt_musicfn[0]); - else if (MapInfo[(uint8_t)g_musicIndex].musicfn != NULL) - { - Bstrcpy(ScriptQuotes[QUOTE_MUSIC],&MapInfo[(uint8_t)g_musicIndex].musicfn[0]); - Bstrcat(ScriptQuotes[QUOTE_MUSIC],". USE SHIFT-F5 TO CHANGE."); - } - else ScriptQuotes[QUOTE_MUSIC][0] = '\0'; - P_DoQuote(QUOTE_MUSIC, g_player[myconnectindex].ps); - } - - if (KB_UnBoundKeyPressed(sc_F8)) - { - KB_ClearKeyDown(sc_F8); - ud.fta_on = !ud.fta_on; - if (ud.fta_on) P_DoQuote(QUOTE_MESSAGES_ON,g_player[myconnectindex].ps); - else - { - ud.fta_on = 1; - P_DoQuote(QUOTE_MESSAGES_OFF,g_player[myconnectindex].ps); - ud.fta_on = 0; - } - } - - if ((KB_UnBoundKeyPressed(sc_F9) || g_doQuickSave == 2) && (g_player[myconnectindex].ps->gm&MODE_GAME)) - { - KB_ClearKeyDown(sc_F9); - g_doQuickSave = 0; - - if (g_lastSaveSlot == -1) goto FAKE_F3; - - if (g_lastSaveSlot >= 0) - { - KB_FlushKeyboardQueue(); - KB_ClearKeysDown(); - FX_StopAllSounds(); - - if ((g_netServer || ud.multimode > 1)) - { - G_LoadPlayer(-1-g_lastSaveSlot); - g_player[myconnectindex].ps->gm = MODE_GAME; - } - else - { - i = G_LoadPlayer(g_lastSaveSlot); - if (i == 0) - g_player[myconnectindex].ps->gm = MODE_GAME; - } - } - } - - if (KB_UnBoundKeyPressed(sc_F10)) - { - KB_ClearKeyDown(sc_F10); - ChangeToMenu(500); - FX_StopAllSounds(); - S_ClearSoundLocks(); - g_player[myconnectindex].ps->gm |= MODE_MENU; - if ((!g_netServer && ud.multimode < 2) && ud.recstat != 2) - { - ready2send = 0; - totalclock = ototalclock; - } - } - - if (ud.overhead_on != 0) - { - - j = totalclock-nonsharedtimer; - nonsharedtimer += j; - if (BUTTON(gamefunc_Enlarge_Screen)) - g_player[myconnectindex].ps->zoom += mulscale6(j,max(g_player[myconnectindex].ps->zoom,256)); - if (BUTTON(gamefunc_Shrink_Screen)) - g_player[myconnectindex].ps->zoom -= mulscale6(j,max(g_player[myconnectindex].ps->zoom,256)); - - if ((g_player[myconnectindex].ps->zoom > 2048)) - g_player[myconnectindex].ps->zoom = 2048; - if ((g_player[myconnectindex].ps->zoom < 48)) - g_player[myconnectindex].ps->zoom = 48; - - } - } - - if (KB_KeyPressed(sc_Escape) && ud.overhead_on && g_player[myconnectindex].ps->newowner == -1) - { - KB_ClearKeyDown(sc_Escape); - ud.last_overhead = ud.overhead_on; - ud.overhead_on = 0; - ud.scrollmode = 0; - G_UpdateScreenArea(); - } - - if (BUTTON(gamefunc_AutoRun)) - { - CONTROL_ClearButton(gamefunc_AutoRun); - ud.auto_run = 1-ud.auto_run; - P_DoQuote(QUOTE_RUN_MODE_OFF+ud.auto_run,g_player[myconnectindex].ps); - } - - if (BUTTON(gamefunc_Map)) - { - CONTROL_ClearButton(gamefunc_Map); - if (ud.last_overhead != ud.overhead_on && ud.last_overhead) - { - ud.overhead_on = ud.last_overhead; - ud.last_overhead = 0; - } - else - { - ud.overhead_on++; - if (ud.overhead_on == 3) ud.overhead_on = 0; - ud.last_overhead = ud.overhead_on; - } - g_restorePalette = 1; - G_UpdateScreenArea(); - } - - if (KB_UnBoundKeyPressed(sc_F11)) - { - KB_ClearKeyDown(sc_F11); - ChangeToMenu(232); - FX_StopAllSounds(); - S_ClearSoundLocks(); - g_player[myconnectindex].ps->gm |= MODE_MENU; - if ((!g_netServer && ud.multimode < 2) && ud.recstat != 2) - { - ready2send = 0; - totalclock = ototalclock; - } - } -} - -static void G_ShowParameterHelp(void) -{ - char *s = "Usage: eduke32 [files] [options]\n" - "Example: eduke32 -q4 -a -m -tx -map nukeland.map\n\n" - "Files can be *.grp/zip/con/def\n" - "\n" - "-cfg [file.cfg]\tUse an alternate configuration file\n" - "-connect [host]\tConnect to a multiplayer game\n" - "-c#\t\tUse MP mode #, 1 = Dukematch, 2 = Coop, 3 = Dukematch(no spawn)\n" - "-d[file.dmo]\tPlay a demo\n" - "-g[file.grp]\tUse additional game data\n" - "-h[file.def]\tUse an alternate def\n" - "-j[dir]\t\tAdds a directory to EDuke32's search list\n" - "-l#\t\tWarp to level #, see -v\n" - "-map [file.map]\tLoads a map\n" - "-m\t\tDisable monsters\n" - "-nam\t\tRun in NAM/NAPALM compatibility mode\n" - "-r\t\tRecord demo\n" - "-s#\t\tSet skill level (1-4)\n" - "-server\t\tStart a multiplayer game for other players to join\n" -#if defined RENDERTYPEWIN || (defined RENDERTYPESDL && !defined __APPLE__ && defined HAVE_GTK2) - "-setup/nosetup\tEnables/disables startup window\n" -#endif - "-t#\t\tSet respawn mode: 1 = Monsters, 2 = Items, 3 = Inventory, x = All\n" -#if !defined(_WIN32) - "-usecwd\t\tRead game data and configuration file from working directory\n" -#endif - "-u#########\tUser's favorite weapon order (default: 3425689071)\n" - "-v#\t\tWarp to volume #, see -l\n" - "-ww2gi\t\tRun in WW2GI compatibility mode\n" - "-x[game.con]\tLoad custom CON script\n" - "-#\t\tLoad and run a game from slot # (0-9)\n" -// "\n-?/--help\tDisplay this help message and exit\n" - "\nSee eduke32 -debughelp for debug parameters" - ; -#if defined RENDERTYPEWIN - Bsnprintf(tempbuf, sizeof(tempbuf), HEAD2 " %s", s_buildRev); - wm_msgbox(tempbuf,s); -#else - initprintf("%s\n",s); -#endif -} - -static void G_ShowDebugHelp(void) -{ - char *s = "Usage: eduke32 [files] [options]\n" - "\n" - "-a\t\tUse fake player AI (fake multiplayer only)\n" - "-cachesize #\tSets cache size, in Kb\n" - "-game_dir [dir]\tDuke3d_w32 compatibility option, see -j\n" - "-gamegrp \tSelects which file to use as main grp\n" - "-name [name]\tPlayer name in multiplay\n" - "-nD\t\tDump default gamevars to gamevars.txt\n" - "-noautoload\tDisable loading content from autoload dir\n" - "-nodinput\tDisable DirectInput (joystick) support\n" - "-nologo\t\tSkip the logo anim\n" - "-ns/-nm\t\tDisable sound or music\n" - "-q#\t\tFake multiplayer with # (2-8) players\n" - "-z#/-condebug\tEnable line-by-line CON compile debugging at level #\n" - "-conversion YYYYMMDD\tSelects CON script version for compatibility with older mods\n" - ; -#if defined RENDERTYPEWIN - Bsnprintf(tempbuf, sizeof(tempbuf), HEAD2 " %s", s_buildRev); - wm_msgbox(tempbuf,s); -#else - initprintf("%s\n",s); -#endif -} - -static CACHE1D_FIND_REC *finddirs=NULL, *findfiles=NULL, *finddirshigh=NULL, *findfileshigh=NULL; -static int32_t numdirs=0, numfiles=0; -static int32_t currentlist=0; - -static void clearfilenames(void) -{ - klistfree(finddirs); - klistfree(findfiles); - finddirs = findfiles = NULL; - numfiles = numdirs = 0; -} - -static int32_t getfilenames(const char *path, char kind[]) -{ - CACHE1D_FIND_REC *r; - - clearfilenames(); - finddirs = klistpath(path,"*",CACHE1D_FIND_DIR); - findfiles = klistpath(path,kind,CACHE1D_FIND_FILE); - for (r = finddirs; r; r=r->next) numdirs++; - for (r = findfiles; r; r=r->next) numfiles++; - - finddirshigh = finddirs; - findfileshigh = findfiles; - currentlist = 0; - if (findfileshigh) currentlist = 1; - - return(0); -} - -static char *autoloadmasks[] = { "*.grp", "*.zip", "*.pk3" }; -#define NUMAUTOLOADMASKS (int32_t)(sizeof(autoloadmasks)/sizeof(autoloadmasks[0])) - -static void G_DoAutoload(const char *fn) -{ - int32_t i; - - for (i=0; iname); - initprintf("Using file '%s' as game data.\n",tempbuf); - initgroupfile(tempbuf); - findfiles = findfiles->next; - } - } -} - -static char *S_OggifyFilename(char *destname, char *OGGname, const char *origname) -{ - if (!origname) - return destname; - - destname = (char *)Brealloc(destname, Bstrlen(OGGname) + Bstrlen(origname) + 1); - - if (!destname) - return NULL; - - Bstrcpy(destname, *OGGname ? OGGname : origname); - - if (*OGGname && OGGname[Bstrlen(OGGname)-1] == '/') - { - while (*origname == '/') - origname++; - Bstrcat(destname, origname); - } - - if ((OGGname = Bstrchr(destname, '.'))) - Bstrcpy(OGGname, ".ogg"); - else Bstrcat(destname, ".ogg"); - - return destname; -} - -static int32_t S_DefineSound(int32_t ID,char *name) -{ - if (ID >= MAXSOUNDS) - return 1; - g_sounds[ID].filename1 =S_OggifyFilename(g_sounds[ID].filename1,name,g_sounds[ID].filename); -// initprintf("(%s)(%s)(%s)\n",g_sounds[ID].filename1,name,g_sounds[ID].filename); -// S_LoadSound(ID); - return 0; -} - -static int32_t S_DefineMusic(char *ID,char *name) -{ - int32_t lev, ep; - int32_t sel = MAXVOLUMES * MAXLEVELS; - char b1, b2; - - if (!ID) - return 1; - - if (!Bstrcmp(ID,"intro")) - { - ID = EnvMusicFilename[0]; - } - else if (!Bstrcmp(ID,"briefing")) - { - sel++; - ID = EnvMusicFilename[1]; - } - else if (!Bstrcmp(ID,"loading")) - { - sel += 2; - ID = EnvMusicFilename[2]; - } - else - { - sscanf(ID,"%c%d%c%d",&b1,&ep,&b2,&lev); - - if (Btoupper(b1) != 'E' || Btoupper(b2) != 'L' || --lev >= MAXLEVELS || --ep >= MAXVOLUMES) - return 1; - - sel = (ep * MAXLEVELS) + lev; - ID = MapInfo[sel].musicfn; - } - - MapInfo[sel].alt_musicfn = S_OggifyFilename(MapInfo[sel].alt_musicfn,name,ID); -// initprintf("%-15s | ",ID); -// initprintf("%3d %2d %2d | %s\n",sel,ep,lev,MapInfo[sel].alt_musicfn); -// S_PlayMusic(ID,sel); - return 0; -} - -static int32_t parsedefinitions_game(scriptfile *script, const int32_t preload) -{ - int32_t tokn; - char *cmdtokptr; - - static const tokenlist tokens[] = - { - { "include", T_INCLUDE }, - { "#include", T_INCLUDE }, - { "loadgrp", T_LOADGRP }, - { "cachesize", T_CACHESIZE }, - { "noautoload", T_NOAUTOLOAD }, - { "music", T_MUSIC }, - { "sound", T_SOUND }, - }; - - static const tokenlist sound_musictokens[] = - { - { "id", T_ID }, - { "file", T_FILE }, - }; - - while (1) - { - tokn = getatoken(script,tokens,sizeof(tokens)/sizeof(tokenlist)); - cmdtokptr = script->ltextptr; - switch (tokn) - { - case T_LOADGRP: - { - char *fn; - - pathsearchmode = 1; - if (!scriptfile_getstring(script,&fn) && preload) - { - int32_t j = initgroupfile(fn); - - if (j == -1) - initprintf("Could not find file '%s'.\n",fn); - else - { - initprintf("Using file '%s' as game data.\n",fn); - if (!g_noAutoLoad && !ud.config.NoAutoLoad) - G_DoAutoload(fn); - } - - } - pathsearchmode = 0; - } - break; - case T_CACHESIZE: - { - int32_t j; - if (scriptfile_getnumber(script,&j) || !preload) break; - - if (j > 0) MAXCACHE1DSIZE = j<<10; - } - break; - case T_INCLUDE: - { - char *fn; - if (!scriptfile_getstring(script,&fn)) - { - scriptfile *included = scriptfile_fromfile(fn); - - if (!included) - { -// initprintf("Warning: Failed including %s on line %s:%d\n", -// fn, script->filename,scriptfile_getlinum(script,cmdtokptr)); - } - else - { - parsedefinitions_game(included, preload); - scriptfile_close(included); - } - } - break; - } - case T_NOAUTOLOAD: - if (preload) - g_noAutoLoad = 1; - break; - case T_MUSIC: - { - char *tinttokptr = script->ltextptr; - char *ID=NULL,*fn="",*tfn = NULL; - char *musicend; - - if (scriptfile_getbraces(script,&musicend)) break; - while (script->textptr < musicend) - { - switch (getatoken(script,sound_musictokens,sizeof(sound_musictokens)/sizeof(tokenlist))) - { - case T_ID: - scriptfile_getstring(script,&ID); - break; - case T_FILE: - scriptfile_getstring(script,&fn); - break; - } - } - if (!preload) - { - int32_t i; - if (ID==NULL) - { - initprintf("Error: missing ID for music definition near line %s:%d\n", script->filename, scriptfile_getlinum(script,tinttokptr)); - break; - } - - i = pathsearchmode; - pathsearchmode = 1; - if (findfrompath(fn,&tfn) < 0) - { - char buf[BMAX_PATH]; - - Bstrcpy(buf,fn); - kzfindfilestart(buf); - if (!kzfindfile(buf)) - { - initprintf("Error: file '%s' does not exist\n",fn); - pathsearchmode = i; - break; - } - } - else Bfree(tfn); - pathsearchmode = i; - - if (S_DefineMusic(ID,fn)) - initprintf("Error: invalid music ID on line %s:%d\n", script->filename, scriptfile_getlinum(script,tinttokptr)); - } - } - break; - - case T_SOUND: - { - char *tinttokptr = script->ltextptr; - char *fn="", *tfn = NULL; - int32_t num=-1; - char *musicend; - - if (scriptfile_getbraces(script,&musicend)) break; - while (script->textptr < musicend) - { - switch (getatoken(script,sound_musictokens,sizeof(sound_musictokens)/sizeof(tokenlist))) - { - case T_ID: - scriptfile_getsymbol(script,&num); - break; - case T_FILE: - scriptfile_getstring(script,&fn); - break; - } - } - if (!preload) - { - int32_t i; - - if (num==-1) - { - initprintf("Error: missing ID for sound definition near line %s:%d\n", script->filename, scriptfile_getlinum(script,tinttokptr)); - break; - } - - i = pathsearchmode; - pathsearchmode = 1; - if (findfrompath(fn,&tfn) < 0) - { - char buf[BMAX_PATH]; - - Bstrcpy(buf,fn); - kzfindfilestart(buf); - if (!kzfindfile(buf)) - { - initprintf("Error: file '%s' does not exist\n",fn); - pathsearchmode = i; - break; - } - } - else Bfree(tfn); - pathsearchmode = i; - - if (S_DefineSound(num,fn)) - initprintf("Error: invalid sound ID on line %s:%d\n", script->filename, scriptfile_getlinum(script,tinttokptr)); - } - } - break; - case T_EOF: - return(0); - default: - break; - } - } - return 0; -} - -static int32_t loaddefinitions_game(const char *fn, int32_t preload) -{ - scriptfile *script; - - script = scriptfile_fromfile((char *)fn); - if (!script) return -1; - - parsedefinitions_game(script, preload); - - scriptfile_close(script); - scriptfile_clearsymbols(); - - return 0; -} - -static void G_AddGroup(const char *buffer) -{ - struct strllist *s; - char buf[BMAX_PATH]; - - s = (struct strllist *)Bcalloc(1,sizeof(struct strllist)); - - Bstrcpy(buf, buffer); - - if (Bstrchr(buf,'.') == 0) - Bstrcat(buf,".grp"); - - s->str = Bstrdup(buf); - - if (CommandGrps) - { - struct strllist *t; - for (t = CommandGrps; t->next; t=t->next) ; - t->next = s; - return; - } - CommandGrps = s; -} - -static void G_AddPath(const char *buffer) -{ - struct strllist *s; - s = (struct strllist *)Bcalloc(1,sizeof(struct strllist)); - s->str = Bstrdup(buffer); - - if (CommandPaths) - { - struct strllist *t; - for (t = CommandPaths; t->next; t=t->next) ; - t->next = s; - return; - } - CommandPaths = s; -} - - -static void G_CheckCommandLine(int32_t argc, const char **argv) -{ - int16_t i = 1, j; - char *c, *k; - - ud.fta_on = 1; - ud.god = 0; - ud.m_respawn_items = 0; - ud.m_respawn_monsters = 0; - ud.m_respawn_inventory = 0; - ud.warp_on = 0; - ud.cashman = 0; - ud.m_player_skill = ud.player_skill = 2; - g_player[0].wchoice[0] = 3; - g_player[0].wchoice[1] = 4; - g_player[0].wchoice[2] = 5; - g_player[0].wchoice[3] = 7; - g_player[0].wchoice[4] = 8; - g_player[0].wchoice[5] = 6; - g_player[0].wchoice[6] = 0; - g_player[0].wchoice[7] = 2; - g_player[0].wchoice[8] = 9; - g_player[0].wchoice[9] = 1; - - if (argc > 1) - { - initprintf("Application parameters: "); - while (i < argc) - initprintf("%s ",argv[i++]); - initprintf("\n"); - - i = 1; - do - { - c = (char *)argv[i]; - if ((*c == '-') -#ifdef _WIN32 - || (*c == '/') -#endif - ) - { - if (!Bstrcasecmp(c+1,"?") || !Bstrcasecmp(c+1,"help") || !Bstrcasecmp(c+1,"-help")) - { - G_ShowParameterHelp(); - exit(0); - } - if (!Bstrcasecmp(c+1,"debughelp") || !Bstrcasecmp(c+1,"-debughelp")) - { - G_ShowDebugHelp(); - exit(0); - } - if (!Bstrcasecmp(c+1,"grp") || !Bstrcasecmp(c+1,"g")) - { - if (argc > i+1) - { - G_AddGroup(argv[i+1]); - i++; - } - i++; - continue; - } - if (!Bstrcasecmp(c+1,"game_dir")) - { - if (argc > i+1) - { - Bstrcpy(g_modDir,argv[i+1]); - G_AddPath(argv[i+1]); - i++; - } - i++; - continue; - } - if (!Bstrcasecmp(c+1,"cfg")) - { - if (argc > i+1) - { - Bstrcpy(setupfilename,argv[i+1]); - i++; - } - i++; - continue; - } - if (!Bstrcasecmp(c+1,"gamegrp")) - { - if (argc > i+1) - { - Bstrcpy(defaultduke3dgrp,argv[i+1]); - i++; - } - i++; - continue; - } - if (!Bstrcasecmp(c+1,"nam")) - { - Bsprintf(defaultduke3dgrp, "nam.grp"); - Bsprintf(defaultduke3ddef, "nam.def"); - Bsprintf(defaultconfilename, "nam.con"); - g_gameType = GAME_NAM; - i++; - continue; - } - if (!Bstrcasecmp(c+1,"ww2gi")) - { - Bsprintf(defaultduke3dgrp, "ww2gi.grp"); - Bsprintf(defaultduke3ddef, "ww2gi.def"); - Bsprintf(defaultconfilename, "ww2gi.con"); - g_gameType = GAME_WW2; - i++; - continue; - } - if (!Bstrcasecmp(c+1,"setup")) - { - g_commandSetup = TRUE; - i++; - continue; - } - if (!Bstrcasecmp(c+1,"nosetup")) - { - g_noSetup = 1; - g_commandSetup = 0; - i++; - continue; - } -#ifdef _WIN32 - if (!Bstrcasecmp(c+1,"nodinput")) - { - initprintf("DirectInput (joystick) support disabled\n"); - di_disabled = 1; - i++; - continue; - } -#endif - if (!Bstrcasecmp(c+1,"noautoload")) - { - initprintf("Autoload disabled\n"); - g_noAutoLoad = 1; - i++; - continue; - } - if (!Bstrcasecmp(c+1,"net")) - { - G_GameExit("EDuke32 no longer supports legacy networking.\n\n" - "If using YANG or other launchers that only support legacy netplay, download an older build of EDuke32. " - "Otherwise, run the following:\n\n" - "eduke32 -server\n\n" - "Other clients can then connect by typing \"connect [host]\" in the console.\n\n" - "EDuke32 will now close."); - } - if (!Bstrcasecmp(c+1,"port")) - { - if (argc > i+1) - { - g_netPort = atoi(argv[i+1]); - i++; - } - i++; - continue; - } - if (!Bstrcasecmp(c+1,"server")) - { - g_networkMode = NET_SERVER; - g_noSetup = g_noLogo = TRUE; - i++; - continue; - } - if (!Bstrcasecmp(c+1,"dedicated")) - { - g_networkMode = NET_DEDICATED_SERVER; - g_noSetup = g_noLogo = TRUE; - i++; - continue; - } - if (!Bstrcasecmp(c+1,"connect")) - { - if (argc > i+1) - { - Net_Connect((char *)argv[i+1]); - g_noSetup = g_noLogo = TRUE; - i++; - } - i++; - continue; - } - if (!Bstrcasecmp(c+1,"password")) - { - if (argc > i+1) - { - Bstrncpy(g_netPassword, (char *)argv[i+1], sizeof(g_netPassword)-1); - i++; - } - i++; - continue; - } - if (!Bstrcasecmp(c+1,"name")) - { - if (argc > i+1) - { - CommandName = (char *)argv[i+1]; - i++; - } - i++; - continue; - } - if (!Bstrcasecmp(c+1,"map")) - { - if (argc > i+1) - { - CommandMap = (char *)argv[i+1]; - i++; - } - i++; - continue; - } - if (!Bstrcasecmp(c+1,"condebug")) - { - g_scriptDebug = 1; - i++; - continue; - } - if (!Bstrcasecmp(c+1, "conversion")) - { - if (argc > i+1) - { - uint32_t j = atol((char *)argv[i+1]); - if (j>=10000000 && j<=99999999) - { - g_scriptDateVersion = j; - initprintf("CON script date version: %d\n",j); - } - else - initprintf("CON script date version must be specified as YYYYMMDD, ignoring.\n"); - i++; - } - i++; - continue; - } - if (!Bstrcasecmp(c+1,"nologo")) - { - g_noLogo = 1; - i++; - continue; - } -#if !defined(_WIN32) - if (!Bstrcasecmp(c+1,"usecwd")) - { - usecwd = 1; - i++; - continue; - } -#endif - if (!Bstrcasecmp(c+1,"cachesize")) - { - if (argc > i+1) - { - uint32_t j = atol((char *)argv[i+1]); - MAXCACHE1DSIZE = j<<10; - initprintf("Cache size: %dkB\n",j); - i++; - } - i++; - continue; - } - if (!Bstrcasecmp(c+1,"noinstancechecking")) - { - i++; - continue; - } -#if defined(RENDERTYPEWIN) && defined(USE_OPENGL) - if (!Bstrcasecmp(c+1,"forcegl")) - { - forcegl = 1; - i++; - continue; - } -#endif - } - - if ((*c == '-') -#ifdef _WIN32 - || (*c == '/') -#endif - ) - { - c++; - switch (Btolower(*c)) - { - case 'a': - ud.playerai = 1; - initprintf("Other player AI.\n"); - break; - case 'c': - c++; - ud.m_coop = 0; - while ((*c >= '0')&&(*c <= '9')) - { - ud.m_coop *= 10; - ud.m_coop += *c - '0'; - c++; - } - ud.m_coop--; - break; - case 'd': - c++; - if (strchr(c,'.') == 0) - Bstrcat(c,".dmo"); - initprintf("Play demo %s.\n",c); - Bstrcpy(firstdemofile,c); - break; - case 'g': - c++; - if (!*c) break; - G_AddGroup(c); - break; - case 'h': - c++; - if (*c) - { - g_defNamePtr = c; - initprintf("Using DEF file: %s.\n",g_defNamePtr); - } - break; - case 'j': - c++; - if (!*c) break; - G_AddPath(c); - break; - case 'l': - ud.warp_on = 1; - c++; - ud.m_level_number = ud.level_number = (atoi(c)-1)%MAXLEVELS; - break; - case 'm': - if (*(c+1) != 'a' && *(c+1) != 'A') - { - ud.m_monsters_off = 1; - ud.m_player_skill = ud.player_skill = 0; - initprintf("Monsters off.\n"); - } - break; - case 'n': - c++; - if (*c == 's' || *c == 'S') - { - g_noSound = 2; - initprintf("Sound off.\n"); - } - else if (*c == 'm' || *c == 'M') - { - g_noMusic = 1; - initprintf("Music off.\n"); - } - else - { - G_ShowParameterHelp(); - exit(-1); - } - break; - case 'q': - initprintf("Fake multiplayer mode.\n"); - if (*(++c) == 0) ud.multimode = 1; - else ud.multimode = atoi(c)%17; - ud.m_coop = ud.coop = 0; - ud.m_marker = ud.marker = 1; - ud.m_respawn_monsters = ud.respawn_monsters = 1; - ud.m_respawn_items = ud.respawn_items = 1; - ud.m_respawn_inventory = ud.respawn_inventory = 1; - break; - case 'r': - ud.m_recstat = 1; - initprintf("Demo record mode on.\n"); - break; - case 's': - c++; - ud.m_player_skill = ud.player_skill = (atoi(c)%5); - if (ud.m_player_skill == 4) - ud.m_respawn_monsters = ud.respawn_monsters = 1; - break; - case 't': - c++; - if (*c == '1') ud.m_respawn_monsters = 1; - else if (*c == '2') ud.m_respawn_items = 1; - else if (*c == '3') ud.m_respawn_inventory = 1; - else - { - ud.m_respawn_monsters = 1; - ud.m_respawn_items = 1; - ud.m_respawn_inventory = 1; - } - initprintf("Respawn on.\n"); - break; - case 'u': - g_forceWeaponChoice = 1; - c++; - j = 0; - if (*c) - { - initprintf("Using favorite weapon order(s).\n"); - while (*c) - { - g_player[0].wchoice[j] = *c-'0'; - c++; - j++; - } - while (j < 10) - { - if (j == 9) - g_player[0].wchoice[9] = 1; - else - g_player[0].wchoice[j] = 2; - - j++; - } - } - else - { - initprintf("Using default weapon orders.\n"); - g_player[0].wchoice[0] = 3; - g_player[0].wchoice[1] = 4; - g_player[0].wchoice[2] = 5; - g_player[0].wchoice[3] = 7; - g_player[0].wchoice[4] = 8; - g_player[0].wchoice[5] = 6; - g_player[0].wchoice[6] = 0; - g_player[0].wchoice[7] = 2; - g_player[0].wchoice[8] = 9; - g_player[0].wchoice[9] = 1; - } - break; - case 'v': - c++; - ud.warp_on = 1; - ud.m_volume_number = ud.volume_number = atoi(c)-1; - break; - case 'w': - ud.coords = 1; - break; - case 'x': - c++; - if (*c) - { - g_scriptNamePtr = c; - g_skipDefaultCons = 1; - initprintf("Using CON file '%s'.\n",g_scriptNamePtr); - } - break; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - ud.warp_on = 2 + (*c) - '0'; - break; - case 'z': - c++; - g_scriptDebug = atoi(c); - if (!g_scriptDebug) - g_scriptDebug = 1; - break; - } - } - else - { - k = Bstrrchr(c,'.'); - if (k) - { - if (!Bstrcasecmp(k,".map")) - { - CommandMap = (char *)argv[i++]; - continue; - } - if (!Bstrcasecmp(k,".grp") || !Bstrcasecmp(k,".zip") || !Bstrcasecmp(k,".pk3")) - { - G_AddGroup(argv[i++]); - continue; - } - if (!Bstrcasecmp(k,".con")) - { - g_scriptNamePtr = (char *)argv[i++]; - g_skipDefaultCons = 1; - initprintf("Using CON file '%s'.\n",g_scriptNamePtr); - continue; - } - if (!Bstrcasecmp(k,".def")) - { - g_defNamePtr = (char *)argv[i++]; - initprintf("Using DEF file: %s.\n",g_defNamePtr); - continue; - } - } - } - i++; - } - while (i < argc); - } -} - -static void G_DisplayLogo(void) -{ - int32_t soundanm = 0; - int32_t logoflags=Gv_GetVarByLabel("LOGO_FLAGS",255, -1, -1); - - ready2send = 0; - - KB_FlushKeyboardQueue(); - KB_ClearKeysDown(); // JBF - - setview(0,0,xdim-1,ydim-1); - clearview(0L); - G_FadePalette(0,0,0,63); - - flushperms(); - nextpage(); - - Bsprintf(tempbuf, "%s - " APPNAME, g_gameNamePtr); - wm_setapptitle(tempbuf); - - S_StopMusic(); - FX_StopAllSounds(); // JBF 20031228 - S_ClearSoundLocks(); // JBF 20031228 - if ((!g_netServer && ud.multimode < 2) && (logoflags & LOGO_ENABLED) && !g_noLogo) - { - if (VOLUMEALL && (logoflags & LOGO_PLAYANIM)) - { - - if (!KB_KeyWaiting() && g_noLogoAnim == 0) - { - Net_GetPackets(); - G_PlayAnim("logo.anm",5); - G_FadePalette(0,0,0,63); - KB_FlushKeyboardQueue(); - KB_ClearKeysDown(); // JBF - } - - clearview(0L); - nextpage(); - } - - if (logoflags & LOGO_PLAYMUSIC) - { - g_musicIndex = -1; // hack - S_PlayMusic(&EnvMusicFilename[0][0],MAXVOLUMES*MAXLEVELS); - } - - if (!NAM) - { - //g_player[myconnectindex].ps->palette = drealms; - //G_FadePalette(0,0,0,63); - if (logoflags & LOGO_3DRSCREEN) - { - P_SetGamePalette(g_player[myconnectindex].ps, DREALMSPAL, 11); // JBF 20040308 - fadepal(0,0,0, 0,64,7); - flushperms(); - rotatesprite(0,0,65536L,0,DREALMS,0,0,2+8+16+(ud.bgstretch?1024:0), 0,0,xdim-1,ydim-1); - nextpage(); - fadepaltile(0,0,0, 63,0,-7,DREALMS); - totalclock = 0; - while (totalclock < (120*7) && !KB_KeyWaiting() && !MOUSE_GetButtons()&LEFT_MOUSE && !BUTTON(gamefunc_Fire) && !BUTTON(gamefunc_Open)) - { - rotatesprite(0,0,65536L,0,DREALMS,0,0,2+8+16+64+(ud.bgstretch?1024:0), 0,0,xdim-1,ydim-1); - handleevents(); - Net_GetPackets(); - if (g_restorePalette) - { - P_SetGamePalette(g_player[myconnectindex].ps,g_player[myconnectindex].ps->palette,0); - g_restorePalette = 0; - } - nextpage(); - } - fadepaltile(0,0,0, 0,64,7,DREALMS); - } - KB_ClearKeysDown(); // JBF - MOUSE_ClearButton(LEFT_MOUSE); - } - - clearview(0L); - nextpage(); - - if (logoflags & LOGO_TITLESCREEN) - { - //g_player[myconnectindex].ps->palette = titlepal; - P_SetGamePalette(g_player[myconnectindex].ps, TITLEPAL, 11); // JBF 20040308 - flushperms(); - rotatesprite(0,0,65536L,0,BETASCREEN,0,0,2+8+16,0,0,xdim-1,ydim-1); - KB_FlushKeyboardQueue(); - fadepaltile(0,0,0, 63,0,-7,BETASCREEN); - totalclock = 0; - - while (totalclock < (860+120) && !KB_KeyWaiting() && !MOUSE_GetButtons()&LEFT_MOUSE && !BUTTON(gamefunc_Fire) && !BUTTON(gamefunc_Open)) - { - rotatesprite(0,0,65536L,0,BETASCREEN,0,0,2+8+16+64+(ud.bgstretch?1024:0),0,0,xdim-1,ydim-1); - if (logoflags & LOGO_DUKENUKEM) - { - if (totalclock > 120 && totalclock < (120+60)) - { - if (soundanm == 0) - { - soundanm++; - S_PlaySound(PIPEBOMB_EXPLODE); - } - rotatesprite(160<<16,104<<16,(totalclock-120)<<10,0,DUKENUKEM,0,0,2+8,0,0,xdim-1,ydim-1); - } - else if (totalclock >= (120+60)) - rotatesprite(160<<16,(104)<<16,60<<10,0,DUKENUKEM,0,0,2+8,0,0,xdim-1,ydim-1); - } - else soundanm++; - - if (logoflags & LOGO_THREEDEE) - { - if (totalclock > 220 && totalclock < (220+30)) - { - if (soundanm == 1) - { - soundanm++; - S_PlaySound(PIPEBOMB_EXPLODE); - } - - rotatesprite(160<<16,(104)<<16,60<<10,0,DUKENUKEM,0,0,2+8,0,0,xdim-1,ydim-1); - rotatesprite(160<<16,(129)<<16,(totalclock - 220)<<11,0,THREEDEE,0,0,2+8,0,0,xdim-1,ydim-1); - } - else if (totalclock >= (220+30)) - rotatesprite(160<<16,(129)<<16,30<<11,0,THREEDEE,0,0,2+8,0,0,xdim-1,ydim-1); - } - else soundanm++; - - if (PLUTOPAK && (logoflags & LOGO_PLUTOPAKSPRITE)) - { - // JBF 20030804 - if (totalclock >= 280 && totalclock < 395) - { - rotatesprite(160<<16,(151)<<16,(410-totalclock)<<12,0,PLUTOPAKSPRITE+1,0,0,2+8,0,0,xdim-1,ydim-1); - if (soundanm == 2) - { - soundanm++; - S_PlaySound(FLY_BY); - } - } - else if (totalclock >= 395) - { - if (soundanm == 3) - { - soundanm++; - S_PlaySound(PIPEBOMB_EXPLODE); - } - rotatesprite(160<<16,(151)<<16,30<<11,0,PLUTOPAKSPRITE+1,0,0,2+8,0,0,xdim-1,ydim-1); - } - } - - VM_OnEvent(EVENT_LOGO, -1, screenpeek, -1); - handleevents(); - Net_GetPackets(); - if (g_restorePalette) - { - P_SetGamePalette(g_player[myconnectindex].ps,g_player[myconnectindex].ps->palette,0); - g_restorePalette = 0; - } - nextpage(); - } - } - KB_ClearKeysDown(); // JBF - MOUSE_ClearButton(LEFT_MOUSE); - } - - flushperms(); - clearview(0L); - nextpage(); - - //g_player[myconnectindex].ps->palette = palette; - P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 0); // JBF 20040308 - S_PlaySound(NITEVISION_ONOFF); - - //G_FadePalette(0,0,0,0); - clearview(0L); -} - -static void G_Cleanup(void) -{ - int32_t i; - extern char *bitptr; - - for (i=(MAXLEVELS*(MAXVOLUMES+1))-1; i>=0; i--) // +1 volume for "intro", "briefing" music - { - if (MapInfo[i].name != NULL) Bfree(MapInfo[i].name); - if (MapInfo[i].filename != NULL) Bfree(MapInfo[i].filename); - if (MapInfo[i].musicfn != NULL) Bfree(MapInfo[i].musicfn); - if (MapInfo[i].alt_musicfn != NULL) Bfree(MapInfo[i].alt_musicfn); - if (MapInfo[i].savedstate != NULL) G_FreeMapState(i); - } - - for (i=MAXQUOTES-1; i>=0; i--) - { - if (ScriptQuotes[i] != NULL) Bfree(ScriptQuotes[i]); - if (ScriptQuoteRedefinitions[i] != NULL) Bfree(ScriptQuoteRedefinitions[i]); - } - - for (i=MAXPLAYERS-1; i>=0; i--) - { - if (g_player[i].ps != NULL) Bfree(g_player[i].ps); - if (g_player[i].sync != NULL) Bfree(g_player[i].sync); - } - - for (i=MAXSOUNDS-1; i>=0; i--) - { - if (g_sounds[i].filename != NULL) Bfree(g_sounds[i].filename); - if (g_sounds[i].filename1 != NULL) Bfree(g_sounds[i].filename1); - } - - if (label != NULL && label != (char *)&sprite[0]) Bfree(label); - if (labelcode != NULL && labelcode != (intptr_t *)§or[0]) Bfree(labelcode); - if (script != NULL) Bfree(script); - if (bitptr != NULL) Bfree(bitptr); - -// if (MusicPtr != NULL) Bfree(MusicPtr); - - hash_free(&h_gamevars); - hash_free(&h_arrays); - hash_free(&h_labels); - hash_free(&h_gamefuncs); -} - -/* -=================== -= -= ShutDown -= -=================== -*/ - -void G_Shutdown(void) -{ - CONFIG_WriteSetup(0); - S_SoundShutdown(); - S_MusicShutdown(); - CONTROL_Shutdown(); - KB_Shutdown(); - uninitengine(); - G_Cleanup(); -} - -/* -=================== -= -= G_Startup -= -=================== -*/ - -static void G_CompileScripts(void) -{ - int32_t i, psm = pathsearchmode; - - label = (char *)&sprite[0]; // V8: 16384*44/64 = 11264 V7: 4096*44/64 = 2816 - labelcode = (intptr_t *)§or[0]; // V8: 4096*40/4 = 40960 V7: 1024*40/4 = 10240 - labeltype = (intptr_t *)&wall[0]; // V8: 16384*32/4 = 131072 V7: 8192*32/4 = 65536 - - Bcorrectfilename(g_scriptNamePtr,0); - // if we compile for a V7 engine wall[] should be used for label names since it's bigger - pathsearchmode = 1; - if (g_skipDefaultCons == 0) - { - i = kopen4loadfrommod(g_scriptNamePtr,0); - if (i!=-1) - kclose(i); - else Bsprintf(g_scriptNamePtr,"GAME.CON"); - } - C_Compile(g_scriptNamePtr); - - if (g_loadFromGroupOnly) - { - if (g_skipDefaultCons == 0) - { - i = kopen4loadfrommod("EDUKE.CON",1); - if (i!=-1) - { - Bsprintf(g_scriptNamePtr,"EDUKE.CON"); - kclose(i); - } - else Bsprintf(g_scriptNamePtr,"GAME.CON"); - } - C_Compile(g_scriptNamePtr); - } - - if ((uint32_t)g_numLabels > MAXSPRITES*sizeof(spritetype)/64) // see the arithmetic above for why - G_GameExit("Error: too many labels defined!"); - else - { - char *newlabel; - intptr_t *newlabelcode; - - newlabel = (char *)Bmalloc(g_numLabels<<6); - newlabelcode = (intptr_t *)Bmalloc(g_numLabels*sizeof(intptr_t)); - - if (!newlabel || !newlabelcode) - { - G_GameExit("Error: out of memory retaining labels\n"); - } - - copybuf(label, newlabel, (g_numLabels*64)/4); - copybuf(labelcode, newlabelcode, (g_numLabels*sizeof(intptr_t))/4); - - label = newlabel; - labelcode = newlabelcode; - } - clearbufbyte(&sprite[0], sizeof(spritetype) * MAXSPRITES, 0); - clearbufbyte(§or[0], sizeof(sectortype) * MAXSECTORS, 0); - clearbufbyte(&wall[0], sizeof(walltype) * MAXWALLS, 0); - - VM_OnEvent(EVENT_INIT, -1, -1, -1); - pathsearchmode = psm; -} - -static inline void G_CheckGametype(void) -{ - ud.m_coop = clamp(ud.m_coop, 0, g_numGametypes-1); - initprintf("%s\n",GametypeNames[ud.m_coop]); - if (GametypeFlags[ud.m_coop] & GAMETYPE_ITEMRESPAWN) - ud.m_respawn_items = ud.m_respawn_inventory = 1; -} - -static void G_LoadExtraPalettes(void) -{ - int32_t j,fp; - int8_t look_pos; - char *lookfn = "lookup.dat"; - - fp = kopen4loadfrommod(lookfn,0); - if (fp != -1) - kread(fp,(char *)&g_numRealPalettes,1); - else - G_GameExit("\nERROR: File 'lookup.dat' not found."); - -#if defined(__APPLE__) && B_BIG_ENDIAN != 0 - // this is almost as bad as just setting the value to 25 :P - g_numRealPalettes = ((g_numRealPalettes * 0x80200802ULL) & 0x0884422110ULL) * 0x0101010101ULL >> 32; - -#endif - - for (j = 0; j < 256; j++) - tempbuf[j] = j; - - for (j=g_numRealPalettes+1; j=0; j--) - { - kread(fp,(char *)&look_pos,1); - kread(fp,tempbuf,256); - makepalookup((int32_t)look_pos,tempbuf,0,0,0,1); - } - - for (j = 255; j>=0; j--) - tempbuf[j] = j; - g_numRealPalettes++; - makepalookup(g_numRealPalettes, tempbuf, 15, 15, 15, 1); - makepalookup(g_numRealPalettes + 1, tempbuf, 15, 0, 0, 1); - makepalookup(g_numRealPalettes + 2, tempbuf, 0, 15, 0, 1); - makepalookup(g_numRealPalettes + 3, tempbuf, 0, 0, 15, 1); - - kread(fp,&water_pal[0],768); - kread(fp,&slime_pal[0],768); - kread(fp,&title_pal[0],768); - kread(fp,&dre_alms[0],768); - kread(fp,&ending_pal[0],768); - - palette[765] = palette[766] = palette[767] = 0; - slime_pal[765] = slime_pal[766] = slime_pal[767] = 0; - water_pal[765] = water_pal[766] = water_pal[767] = 0; - - kclose(fp); -} - -extern int32_t startwin_run(void); -static void G_SetupGameButtons(void); - -static void G_Startup(void) -{ - int32_t i; - - inittimer(TICRATE); - - initcrc32table(); - - G_CompileScripts(); - - CONFIG_ReadKeys(); // we re-read the keys after compiling the CONs - - if (initengine()) - { - wm_msgbox("Build Engine Initialization Error", - "There was a problem initializing the Build engine: %s", engineerrstr); - G_Cleanup(); - fprintf(stderr, "G_Startup: There was a problem initializing the Build engine: %s\n", engineerrstr); - exit(6); - } - - setbasepaltable(basepaltable, BASEPALCOUNT); - - G_InitDynamicTiles(); - - if ((g_netServer || ud.multimode > 1)) G_CheckGametype(); - - if (g_noSound) ud.config.SoundToggle = 0; - if (g_noMusic) ud.config.MusicToggle = 0; - - if (CommandName) - { - // Bstrncpy(szPlayerName, CommandName, 9); - // szPlayerName[10] = '\0'; - Bstrcpy(tempbuf,CommandName); - - while (Bstrlen(OSD_StripColors(tempbuf,tempbuf)) > 10) - tempbuf[Bstrlen(tempbuf)-1] = '\0'; - - Bstrncpy(szPlayerName,tempbuf,sizeof(szPlayerName)-1); - szPlayerName[sizeof(szPlayerName)-1] = '\0'; - } - - if (CommandMap) - { - if (VOLUMEONE) - { - initprintf("The -map option is available in the registered version only!\n"); - boardfilename[0] = 0; - } - else - { - char *dot, *slash; - - boardfilename[0] = '/'; - boardfilename[1] = 0; - Bstrcat(boardfilename, CommandMap); - - dot = Bstrrchr(boardfilename,'.'); - slash = Bstrrchr(boardfilename,'/'); - if (!slash) slash = Bstrrchr(boardfilename,'\\'); - - if ((!slash && !dot) || (slash && dot < slash)) - Bstrcat(boardfilename,".map"); - - Bcorrectfilename(boardfilename,0); - - i = kopen4loadfrommod(boardfilename,0); - if (i!=-1) - { - initprintf("Using level: '%s'.\n",boardfilename); - kclose(i); - } - else - { - initprintf("Level '%s' not found.\n",boardfilename); - boardfilename[0] = 0; - } - } - } - - if (VOLUMEONE) - { - initprintf("*** You have run Duke Nukem 3D %d times. ***\n\n",ud.executions); - - if (ud.executions >= 50) - { - initprintf("IT IS NOW TIME TO UPGRADE TO THE COMPLETE VERSION!!!\n"); - -#ifdef WIN32 - Bsprintf(tempbuf, "You have run Duke Nukem 3D shareware %d times. It is now time to upgrade to the complete version!\n\n" - "Purchase Duke Nukem 3D for $5.99 now?\n", ud.executions); - - if (wm_ynbox("Upgrade to the full version of Duke Nukem 3D",tempbuf)) - { - SHELLEXECUTEINFOA sinfo; - char *p = "http://www.gog.com/en/gamecard/duke_nukem_3d_atomic_edition/pp/6c1e671f9af5b46d9c1a52067bdf0e53685674f7"; - - Bmemset(&sinfo, 0, sizeof(sinfo)); - sinfo.cbSize = sizeof(sinfo); - sinfo.fMask = SEE_MASK_CLASSNAME; - sinfo.lpVerb = "open"; - sinfo.lpFile = p; - sinfo.nShow = SW_SHOWNORMAL; - sinfo.lpClass = "http"; - - if (!ShellExecuteExA(&sinfo)) - G_GameExit("Error launching default system browser!"); - } -#endif - } - } - - for (i=0; i 1) - initprintf("Multiplayer initialized.\n"); - - { - char *cwd; - - if (g_modDir[0] != '/' && (cwd = (char *)getcwd(NULL, 0))) - { - chdir(g_modDir); -// initprintf("g_rootDir '%s'\nmod '%s'\ncwd '%s'\n",g_rootDir,mod_dir,cwd); - if (loadpics("tiles000.art",MAXCACHE1DSIZE) < 0) - { - chdir(cwd); - if (loadpics("tiles000.art",MAXCACHE1DSIZE) < 0) - G_GameExit("Failed loading art."); - } - chdir(cwd); - free(cwd); - } - else if (loadpics("tiles000.art",MAXCACHE1DSIZE) < 0) - G_GameExit("Failed loading art."); - } - -// initprintf("Loading palette/lookups...\n"); - G_LoadExtraPalettes(); - - ReadSaveGameHeaders(); - - tilesizx[MIRROR] = tilesizy[MIRROR] = 0; - - screenpeek = myconnectindex; -} - -void G_UpdatePlayerFromMenu(void) -{ - if (ud.recstat != 0) - return; - - if (numplayers > 1) - { - Net_SendClientInfo(); - if (sprite[g_player[myconnectindex].ps->i].picnum == APLAYER && sprite[g_player[myconnectindex].ps->i].pal != 1) - sprite[g_player[myconnectindex].ps->i].pal = g_player[myconnectindex].pcolor; - } - else - { - /*int32_t j = g_player[myconnectindex].ps->team;*/ - - g_player[myconnectindex].ps->aim_mode = ud.mouseaiming; - g_player[myconnectindex].ps->auto_aim = ud.config.AutoAim; - g_player[myconnectindex].ps->weaponswitch = ud.weaponswitch; - g_player[myconnectindex].ps->palookup = g_player[myconnectindex].pcolor = ud.color; - - g_player[myconnectindex].pteam = ud.team; - - if (sprite[g_player[myconnectindex].ps->i].picnum == APLAYER && sprite[g_player[myconnectindex].ps->i].pal != 1) - sprite[g_player[myconnectindex].ps->i].pal = g_player[myconnectindex].pcolor; - } -} - -void G_BackToMenu(void) -{ - boardfilename[0] = 0; - if (ud.recstat == 1) G_CloseDemoWrite(); - ud.warp_on = 0; - g_player[myconnectindex].ps->gm = MODE_MENU; - ChangeToMenu(0); - KB_FlushKeyboardQueue(); - Bsprintf(tempbuf, "%s - " APPNAME, g_gameNamePtr); - wm_setapptitle(tempbuf); -} - -int32_t G_EndOfLevel(void) -{ - P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 0); - P_UpdateScreenPal(g_player[myconnectindex].ps); - - if (g_player[myconnectindex].ps->gm&MODE_EOL) - { - G_CloseDemoWrite(); - - ready2send = 0; - - if (ud.display_bonus_screen == 1) - { - int32_t i = ud.screen_size; - ud.screen_size = 0; - G_UpdateScreenArea(); - ud.screen_size = i; - G_BonusScreen(0); - } - if (ud.eog) - { - ud.eog = 0; - if ((!g_netServer && ud.multimode < 2)) - { - extern int32_t probey; - if (!VOLUMEALL) - G_DoOrderScreen(); - g_player[myconnectindex].ps->gm = MODE_MENU; - ChangeToMenu(0); - probey = 0; - return 2; - } - else - { - ud.m_level_number = 0; - ud.level_number = 0; - } - } - } - ud.display_bonus_screen = 1; - ready2send = 0; - if (numplayers > 1) g_player[myconnectindex].ps->gm = MODE_GAME; - if (G_EnterLevel(g_player[myconnectindex].ps->gm)) - { - G_BackToMenu(); - return 2; - } - Net_WaitForServer(); - return 1; - -} - -#ifdef RENDERTYPEWIN -void app_crashhandler(void) -{ - G_CloseDemoWrite(); - VM_ScriptInfo(); - G_GameQuit(); -} -#endif - -int32_t app_main(int32_t argc,const char **argv) -{ - int32_t i = 0, j; - char cwd[BMAX_PATH]; -// extern char datetimestring[]; -#ifdef NEDMALLOC - ENetCallbacks callbacks = { Bmalloc, Bfree, NULL }; -#else - ENetCallbacks callbacks = { NULL, NULL, NULL }; -#endif - -#ifdef RENDERTYPEWIN - if (argc > 1) - { - for (; inext; - addsearchpath(CommandPaths->str); - - Bfree(CommandPaths->str); - Bfree(CommandPaths); - CommandPaths = s; - } - } - -#if defined(_WIN32) - if (!access("user_profiles_enabled", F_OK)) -#else - if (usecwd == 0 && access("user_profiles_disabled", F_OK)) -#endif - { - char *homedir; - int32_t asperr; - - if ((homedir = Bgethomedir())) - { - Bsnprintf(cwd,sizeof(cwd),"%s/" -#if defined(_WIN32) - "EDuke32 Settings" -#elif defined(__APPLE__) - "Library/Application Support/EDuke32" -#else - ".eduke32" -#endif - ,homedir); - asperr = addsearchpath(cwd); - if (asperr == -2) - { - if (Bmkdir(cwd,S_IRWXU) == 0) asperr = addsearchpath(cwd); - else asperr = -1; - } - if (asperr == 0) - chdir(cwd); - Bfree(homedir); - } - } - - // used with binds for fast function lookup - hash_init(&h_gamefuncs); - for (i=NUMGAMEFUNCTIONS-1; i>=0; i--) - { - char *str = Bstrtolower(Bstrdup(gamefunctions[i])); - hash_add(&h_gamefuncs,gamefunctions[i],i,0); - hash_add(&h_gamefuncs,str,i,0); - Bfree(str); - } - -#ifdef USE_OPENGL - glusetexcache = -1; -#endif - - i = CONFIG_ReadSetup(); - if (getenv("DUKE3DGRP")) g_grpNamePtr = getenv("DUKE3DGRP"); - -#ifdef _WIN32 - -// initprintf("build %d\n",(uint8_t)atoi(BUILDDATE)); - - if (ud.config.CheckForUpdates == 1) - { - if (time(NULL) - ud.config.LastUpdateCheck > UPDATEINTERVAL) - { - initprintf("Checking for updates...\n"); - if (G_GetVersionFromWebsite(tempbuf)) - { - initprintf("Current version is %d",atoi(tempbuf)); - ud.config.LastUpdateCheck = time(NULL); - - if (atoi(tempbuf) > atoi(s_buildDate)) - { - if (wm_ynbox("EDuke32","A new version of EDuke32 is available. " - "Browse to http://eduke32.sourceforge.net now?")) - { - SHELLEXECUTEINFOA sinfo; - char *p = "http://eduke32.sourceforge.net"; - - Bmemset(&sinfo, 0, sizeof(sinfo)); - sinfo.cbSize = sizeof(sinfo); - sinfo.fMask = SEE_MASK_CLASSNAME; - sinfo.lpVerb = "open"; - sinfo.lpFile = p; - sinfo.nShow = SW_SHOWNORMAL; - sinfo.lpClass = "http"; - - if (!ShellExecuteExA(&sinfo)) - initprintf("update: error launching browser!\n"); - } - } - else initprintf("... no updates available\n"); - } - else initprintf("update: failed to check for updates\n"); - } - } -#endif - -#ifdef USE_OPENGL - if (glusetexcache == -1) - { - ud.config.useprecache = glusetexcompr = 1; - glusetexcache = 2; - } -#endif - - if (preinitengine()) - { - wm_msgbox("Build Engine Initialization Error", - "There was a problem initializing the Build engine: %s", engineerrstr); - fprintf(stderr, "app_main: There was a problem initializing the Build engine: %s\n", engineerrstr); - exit(2); - } - - if (Bstrcmp(setupfilename, SETUPFILENAME)) - initprintf("Using config file '%s'.\n",setupfilename); - - ScanGroups(); - { - // try and identify the 'defaultduke3dgrp' in the set of GRPs. - // if it is found, set up the environment accordingly for the game it represents. - // if it is not found, choose the first GRP from the list - struct grpfile *fg, *first = NULL; - int32_t i; - for (fg = foundgrps; fg; fg=fg->next) - { - for (i = 0; icrcval == grpfiles[i].crcval) break; - if (i == numgrpfiles) continue; // unrecognised grp file - fg->game = grpfiles[i].game; - if (!first) first = fg; - if (!Bstrcasecmp(fg->name, defaultduke3dgrp)) - { - g_gameType = grpfiles[i].game; - g_gameNamePtr = (char *)grpfiles[i].name; - break; - } - } - if (!fg && first) - { - Bstrcpy(defaultduke3dgrp, first->name); - g_gameType = first->game; - g_gameNamePtr = (char *)grpfiles[0].name; - } - else if (!fg) g_gameNamePtr = "Unknown GRP"; - } - -#if (defined RENDERTYPEWIN || (defined RENDERTYPESDL && !defined __APPLE__ && defined HAVE_GTK2)) - if (i < 0 || (!g_noSetup && (ud.configversion != BYTEVERSION_JF || ud.config.ForceSetup)) || g_commandSetup) - { - if (quitevent || !startwin_run()) - { - uninitengine(); - exit(0); - } - } -#endif - - FreeGroups(); - - if (WW2GI || NAM) - { - // overwrite the default GRP and CON so that if the user chooses - // something different, they get what they asked for - Bsprintf(defaultduke3dgrp, WW2GI ? "ww2gi.grp" : "nam.grp"); - Bsprintf(defaultduke3ddef, WW2GI ? "ww2gi.def" : "nam.def"); - Bsprintf(defaultconfilename, WW2GI ? "ww2gi.con" : "nam.con"); - - Bsprintf(GametypeNames[0],"GRUNTMATCH (SPAWN)"); - Bsprintf(GametypeNames[2],"GRUNTMATCH (NO SPAWN)"); - } - - if (g_modDir[0] != '/') - { - char cwd[BMAX_PATH]; - - Bstrcat(g_rootDir,g_modDir); - addsearchpath(g_rootDir); -// addsearchpath(mod_dir); - - if (getcwd(cwd,BMAX_PATH)) - { - Bsprintf(cwd,"%s/%s",cwd,g_modDir); - if (!Bstrcmp(g_rootDir, cwd)) - { - if (addsearchpath(cwd) == -2) - if (Bmkdir(cwd,S_IRWXU) == 0) addsearchpath(cwd); - } - } - -#ifdef USE_OPENGL - Bsprintf(tempbuf,"%s/%s",g_modDir,TEXCACHEFILE); - Bstrcpy(TEXCACHEFILE,tempbuf); -#endif - } - - // shitcan the old cache directory -#if 0 && defined(USE_OPENGL) - { - struct stat st; - char dir[BMAX_PATH]; - - if (g_modDir[0] != '/') - Bsprintf(dir,"%s/",g_modDir); - else dir[0] = '\0'; - - Bsprintf(tempbuf,"%stexcache",dir); - if (Bstat(tempbuf, &st) >= 0) - { - if ((st.st_mode & S_IFDIR) == S_IFDIR) - { - Bsprintf(tempbuf,"EDuke32 has located an obsolete texture cache in the \"%stexcache\" directory.\n\n" - "Would you like EDuke32 to purge the contents of this directory?",dir); - - if (wm_ynbox("Obsolete Texture Cache Detected",tempbuf)) - { - int32_t recursion = 0; - - Bsprintf(tempbuf,"%stexcache",dir); - getfilenames(tempbuf,"*"); -CLEAN_DIRECTORY: - // initprintf("Cleaning '%s'\n",tempbuf); - while (findfiles) - { - Bsprintf(g_szBuf,"%s/%s",tempbuf,findfiles->name); - if (unlink(g_szBuf)) - initprintf("ERROR: couldn't remove '%s': %s\n",g_szBuf,strerror(errno)); - findfiles = findfiles->next; - } - while (finddirs) - { - if (!Bstrcmp(finddirs->name, ".") || !Bstrcmp(finddirs->name, "..")) - { - finddirs = finddirs->next; - continue; - } - Bsprintf(g_szBuf,"%s/%s",tempbuf,finddirs->name); - if (rmdir(g_szBuf)) - { - if (errno == EEXIST || errno == ENOTEMPTY) - { - recursion = 1; - Bstrcpy(tempbuf,g_szBuf); - getfilenames(tempbuf,"*"); - goto CLEAN_DIRECTORY; - } - else - { - initprintf("ERROR: couldn't remove '%s': %s\n",g_szBuf,strerror(errno)); - } - } - else - { - initprintf("Removed '%s'\n",g_szBuf); - finddirs = finddirs->next; - } - } - - if (recursion) - { - Bsprintf(tempbuf,"%stexcache",dir); - getfilenames(tempbuf,"*"); - recursion = 0; - goto CLEAN_DIRECTORY; - } - - Bsprintf(tempbuf,"%stexcache",dir); - if (rmdir(tempbuf)) - initprintf("ERROR: couldn't remove '%s': %s\n",tempbuf,strerror(errno)); - else initprintf("Removed '%s'\n",tempbuf); - } - } - } - } -#endif - - if ((i = initgroupfile(g_grpNamePtr)) == -1) - initprintf("Warning: could not find main data file '%s'!\n",g_grpNamePtr); - else - initprintf("Using '%s' as main game data file.\n", g_grpNamePtr); - - if (!g_noAutoLoad && !ud.config.NoAutoLoad) - { - int32_t ii; - - for (ii=0; iiname); - initprintf("Using file '%s' as game data.\n",tempbuf); - initgroupfile(tempbuf); - findfiles = findfiles->next; - } - } - - if (i != -1) - G_DoAutoload(g_grpNamePtr); - } - - if (g_modDir[0] != '/') - { - int32_t ii; - - for (ii=0; iiname); - initprintf("Using file '%s' as game data.\n",tempbuf); - initgroupfile(tempbuf); - findfiles = findfiles->next; - } - } - } - - flushlogwindow = 0; - loaddefinitions_game(g_defNamePtr, TRUE); -// flushlogwindow = 1; - - { - struct strllist *s; - - pathsearchmode = 1; - while (CommandGrps) - { - s = CommandGrps->next; - - if ((j = initgroupfile(CommandGrps->str)) == -1) - initprintf("Could not find file '%s'.\n",CommandGrps->str); - else - { - g_groupFileHandle = j; - initprintf("Using file '%s' as game data.\n",CommandGrps->str); - if (!g_noAutoLoad && !ud.config.NoAutoLoad) - G_DoAutoload(CommandGrps->str); - } - - Bfree(CommandGrps->str); - Bfree(CommandGrps); - CommandGrps = s; - } - pathsearchmode = 0; - } - - i = kopen4load("DUKESW.BIN",1); // JBF 20030810 - if (i!=-1) - { - g_Shareware = 1; - kclose(i); - } - - // gotta set the proper title after we compile the CONs if this is the full version - - Bsprintf(tempbuf, "%s - " APPNAME, g_gameNamePtr); - wm_setapptitle(tempbuf); - - if (g_scriptDebug) - initprintf("CON debugging activated (level %d).\n",g_scriptDebug); - - if (g_networkMode == NET_SERVER || g_networkMode == NET_DEDICATED_SERVER) - { - ENetAddress address = { ENET_HOST_ANY, g_netPort }; - g_netServer = enet_host_create(&address, MAXPLAYERS, CHAN_MAX, 0, 0); - - if (g_netServer == NULL) - initprintf("An error occurred while trying to create an ENet server host.\n"); - else initprintf("Multiplayer server initialized\n"); - } - - numplayers = 1; - connectpoint2[0] = -1; - - Net_GetPackets(); - - G_Startup(); // a bunch of stuff including compiling cons - - g_player[0].playerquitflag = 1; - - for (i=0; ipalette = BASEPAL; - - i = 1; - for (j=numplayers; jteam = g_player[j].pteam = i; - g_player[j].ps->weaponswitch = 3; - g_player[j].ps->auto_aim = 0; - i = 1-i; - } - - if (quitevent) return 4; - - if (!loaddefinitionsfile(g_defNamePtr)) - { - initprintf("Definitions file '%s' loaded.\n",g_defNamePtr); - loaddefinitions_game(g_defNamePtr, FALSE); - } - - if (numplayers == 1 && boardfilename[0] != 0) - { - ud.m_level_number = 7; - ud.m_volume_number = 0; - ud.warp_on = 1; - } - - // getnames(); - - if ((g_netServer || ud.multimode > 1)) - { - if (ud.warp_on == 0) - { - ud.m_monsters_off = 1; - ud.m_player_skill = 0; - } - } - - playerswhenstarted = ud.multimode; - ud.last_level = 0; - - if (!Bstrcasecmp(ud.rtsname,"DUKE.RTS") || - !Bstrcasecmp(ud.rtsname,"WW2GI.RTS") || - !Bstrcasecmp(ud.rtsname,"NAM.RTS")) - { - // ud.last_level is used as a flag here to reset the string to DUKE.RTS after load - if (WW2GI) - ud.last_level = (Bstrcpy(ud.rtsname, "WW2GI.RTS") == ud.rtsname); - else if (NAM) - ud.last_level = (Bstrcpy(ud.rtsname, "NAM.RTS") == ud.rtsname); - else - ud.last_level = (Bstrcpy(ud.rtsname, "DUKE.RTS") == ud.rtsname); - } - - RTS_Init(ud.rtsname); - - if (rts_numlumps) - initprintf("Using .RTS file '%s'\n",ud.rtsname); - - if (ud.last_level) - Bstrcpy(ud.rtsname, "DUKE.RTS"); - - ud.last_level = -1; - - initprintf("Initializing OSD...\n"); - - Bsprintf(tempbuf, HEAD2 " %s", s_buildRev); - OSD_SetVersion(tempbuf, 10,0); - registerosdcommands(); - - if (g_networkMode != NET_DEDICATED_SERVER) - { - if (CONTROL_Startup(1, &GetTime, TICRATE)) - { - fprintf(stderr, "There was an error initializing the CONTROL system.\n"); - uninitengine(); - exit(5); - } - - G_SetupGameButtons(); - CONFIG_SetupMouse(); - CONFIG_SetupJoystick(); - - CONTROL_JoystickEnabled = (ud.config.UseJoystick && CONTROL_JoyPresent); - CONTROL_MouseEnabled = (ud.config.UseMouse && CONTROL_MousePresent); - - // JBF 20040215: evil and nasty place to do this, but joysticks are evil and nasty too - for (i=0; i 0) - initprintf("There was an error loading the sprite clipping map (status %d).\n", i); - - OSD_Exec("autoexec.cfg"); - - if (g_networkMode != NET_DEDICATED_SERVER) - { - if (setgamemode(ud.config.ScreenMode,ud.config.ScreenWidth,ud.config.ScreenHeight,ud.config.ScreenBPP) < 0) - { - int32_t i = 0; - int32_t xres[] = {ud.config.ScreenWidth,800,640,320}; - int32_t yres[] = {ud.config.ScreenHeight,600,480,240}; - int32_t bpp[] = {32,16,8}; - - initprintf("Failure setting video mode %dx%dx%d %s! Attempting safer mode...\n", - ud.config.ScreenWidth,ud.config.ScreenHeight,ud.config.ScreenBPP,ud.config.ScreenMode?"fullscreen":"windowed"); - -#ifdef USE_OPENGL - { - int32_t j = 0; - while (setgamemode(0,xres[i],yres[i],bpp[j]) < 0) - { - initprintf("Failure setting video mode %dx%dx%d windowed! Attempting safer mode...\n",xres[i],yres[i],bpp[i]); - - if (++j == 3) - { - if (++i == 4) - G_GameExit("Unable to set failsafe video mode!"); - j = 0; - } - } - } -#else - while (setgamemode(0,xres[i],yres[i],8) < 0) - { - initprintf("Failure setting video mode %dx%dx%d windowed! Attempting safer mode...\n",xres[i],yres[i],8); - i++; - } -#endif - ud.config.ScreenWidth = xres[i]; - ud.config.ScreenHeight = yres[i]; - ud.config.ScreenBPP = bpp[i]; - } - - setbrightness(ud.brightness>>2,g_player[myconnectindex].ps->palette,0); - - S_MusicStartup(); - S_SoundStartup(); - } -// loadtmb(); - - if (ud.warp_on > 1 && (!g_netServer && ud.multimode < 2)) - { - clearview(0L); - //g_player[myconnectindex].ps->palette = palette; - //G_FadePalette(0,0,0,0); - P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 0); // JBF 20040308 - rotatesprite(320<<15,200<<15,65536L,0,LOADSCREEN,0,0,2+8+64+(ud.bgstretch?1024:0),0,0,xdim-1,ydim-1); - menutext(160,105,0,0,"LOADING SAVED GAME..."); - nextpage(); - - if (G_LoadPlayer(ud.warp_on-2)) - ud.warp_on = 0; - } - - FX_StopAllSounds(); - S_ClearSoundLocks(); - - // getpackets(); - -MAIN_LOOP_RESTART: - - if (g_networkMode != NET_DEDICATED_SERVER) - { - G_GetCrosshairColor(); - G_SetCrosshairColor(CrosshairColors.r, CrosshairColors.g, CrosshairColors.b); - } - - if (ud.warp_on == 0) - { - if ((g_netServer || ud.multimode > 1) && boardfilename[0] != 0) - { - ud.m_level_number = 7; - ud.m_volume_number = 0; - - if (ud.m_player_skill == 4) - ud.m_respawn_monsters = 1; - else ud.m_respawn_monsters = 0; - - TRAVERSE_CONNECT(i) - { - P_ResetWeapons(i); - P_ResetInventory(i); - } - - G_NewGame(ud.m_volume_number,ud.m_level_number,ud.m_player_skill); - - if (G_EnterLevel(MODE_GAME)) G_BackToMenu(); - - Net_WaitForServer(); - } - else if (g_networkMode != NET_DEDICATED_SERVER) - G_DisplayLogo(); - - if (g_networkMode != NET_DEDICATED_SERVER) - { - if (G_PlaybackDemo()) - { - FX_StopAllSounds(); - S_ClearSoundLocks(); - g_noLogoAnim = 1; - goto MAIN_LOOP_RESTART; - } - } - } - else if (ud.warp_on == 1) - { - G_NewGame(ud.m_volume_number,ud.m_level_number,ud.m_player_skill); - - if (G_EnterLevel(MODE_GAME)) G_BackToMenu(); - } - else G_UpdateScreenArea(); - -// G_GameExit(" "); /// - -// ud.auto_run = ud.config.RunMode; - ud.showweapons = ud.config.ShowOpponentWeapons; - g_player[myconnectindex].ps->aim_mode = ud.mouseaiming; - g_player[myconnectindex].ps->auto_aim = ud.config.AutoAim; - g_player[myconnectindex].ps->weaponswitch = ud.weaponswitch; - g_player[myconnectindex].pteam = ud.team; - - if (GametypeFlags[ud.coop] & GAMETYPE_TDM) - g_player[myconnectindex].ps->palookup = g_player[myconnectindex].pcolor = G_GetTeamPalette(g_player[myconnectindex].pteam); - else - { - if (ud.color) g_player[myconnectindex].ps->palookup = g_player[myconnectindex].pcolor = ud.color; - else g_player[myconnectindex].ps->palookup = g_player[myconnectindex].pcolor; - } - - ud.warp_on = 0; - KB_KeyDown[sc_Pause] = 0; // JBF: I hate the pause key - - do //main loop - { - static uint32_t nextrender = 0, framewaiting = 0; - uint32_t j; - - if (handleevents() && quitevent) - { - KB_KeyDown[sc_Escape] = 1; - quitevent = 0; - } - - sampletimer(); - Net_GetPackets(); - - // only allow binds to function if the player is actually in a game (not in a menu, typing, et cetera) or demo - bindsenabled = g_player[myconnectindex].ps->gm & (MODE_GAME|MODE_DEMO); - -#ifndef _WIN32 - // stdin -> OSD input for dedicated server - if (g_networkMode == NET_DEDICATED_SERVER) - { - int32_t nb, flag = 1; - char ch; - static uint32_t bufpos = 0; - static char buf[128]; - - ioctl(0, FIONBIO, &flag); - - if ((nb = read(0, &ch, 1)) > 0 && bufpos < sizeof(buf)) - { - if (ch != '\n') - buf[bufpos++] = ch; - - if (ch == '\n' || bufpos >= sizeof(buf)) - { - buf[bufpos] = 0; - OSD_Dispatch(buf); - bufpos = 0; - } - } - } - else -#endif - { - MUSIC_Update(); - G_HandleLocalKeys(); - } - - OSD_DispatchQueued(); - - if (((g_netClient || g_netServer) || !(g_player[myconnectindex].ps->gm & (MODE_MENU|MODE_DEMO))) && totalclock >= ototalclock+TICSPERFRAME) - { - if (g_networkMode != NET_DEDICATED_SERVER) - { - CONTROL_ProcessBinds(); - getinput(myconnectindex); - } - - avg.fvel += loc.fvel; - avg.svel += loc.svel; - avg.avel += loc.avel; - avg.horz += loc.horz; - avg.bits |= loc.bits; - avg.extbits |= loc.extbits; - - Bmemcpy(&inputfifo[0][myconnectindex], &avg, sizeof(input_t)); - Bmemset(&avg, 0, sizeof(input_t)); - - /* - if (ud.playerai && (g_netServer || ud.multimode > 1)) - { - TRAVERSE_CONNECT(i) - if (i != myconnectindex) - { - //clearbufbyte(&inputfifo[g_player[i].movefifoend&(MOVEFIFOSIZ-1)][i],sizeof(input_t),0L); - computergetinput(i,&inputfifo[0][i]); - } - } - */ - - do - { - int32_t clockbeforetic; - - sampletimer(); - - if (ready2send == 0) break; - - ototalclock += TICSPERFRAME; - - clockbeforetic = totalclock; - - if (((ud.show_help == 0 && (g_player[myconnectindex].ps->gm&MODE_MENU) != MODE_MENU) || ud.recstat == 2 || (g_netServer || ud.multimode > 1)) && - (g_player[myconnectindex].ps->gm&MODE_GAME)) - G_MoveLoop(); - - sampletimer(); - - if (totalclock - clockbeforetic >= TICSPERFRAME) - { - // computing a tic takes longer than a tic, so we're slowing - // the game down. rather than tightly spinning here, go draw - // a frame since we're fucked anyway - break; - } - } - while (((g_netClient || g_netServer) || !(g_player[myconnectindex].ps->gm & (MODE_MENU|MODE_DEMO))) && totalclock >= ototalclock+TICSPERFRAME); - - } - - G_DoCheats(); - - if (g_player[myconnectindex].ps->gm & (MODE_EOL|MODE_RESTART)) - { - switch (G_EndOfLevel()) - { - case 1: continue; - case 2: goto MAIN_LOOP_RESTART; - } - } - else if (g_netClient && g_multiMapState) - { - for (i=g_gameVarCount-1; i>=0; i--) - { - if (aGameVars[i].dwFlags & GAMEVAR_USER_MASK) - g_multiMapState->vars[i] = NULL; - } - - G_RestoreMapState(g_multiMapState); - g_player[myconnectindex].ps->gm = MODE_GAME; - Bfree(g_multiMapState); - g_multiMapState = NULL; - } - - if (g_networkMode == NET_DEDICATED_SERVER) - { - idle(); - goto skipframe; - } - - if (framewaiting) - { - framewaiting--; - if (ud.statusbarmode == 1 && (ud.statusbarscale == 100 || !getrendermode())) - { - ud.statusbarmode = 0; - G_UpdateScreenArea(); - } - nextpage(); - } - - j = getticks(); - - if (r_maxfps == 0 || j >= nextrender) - { - if (j > nextrender+g_frameDelay) - nextrender = j; - - nextrender += g_frameDelay; - - if ((ud.show_help == 0 && (!g_netServer && ud.multimode < 2) && !(g_player[myconnectindex].ps->gm&MODE_MENU)) || - (g_netServer || ud.multimode > 1) || ud.recstat == 2) - i = min(max((totalclock-ototalclock)*(65536L/TICSPERFRAME),0),65536); - else - i = 65536; - - G_DrawRooms(screenpeek,i); - G_DisplayRest(i); - if (getrendermode() >= 3) - G_DrawBackground(); - - framewaiting++; - } - -skipframe: - if (g_player[myconnectindex].ps->gm&MODE_DEMO) - goto MAIN_LOOP_RESTART; - } - while (1); - - G_GameExit(" "); - return 0; // not reached (duh) -} - -GAME_STATIC GAME_INLINE int32_t G_MoveLoop() -{ - Net_GetPackets(); - - return G_DoMoveThings(); -} - -int32_t G_DoMoveThings(void) -{ - int32_t i; - - ud.camerasprite = -1; - lockclock += TICSPERFRAME; - - //if (g_earthquakeTime > 0) g_earthquakeTime--; moved lower so it is restored correctly by diffs - if (g_RTSPlaying > 0) g_RTSPlaying--; - - for (i=0; i ud.msgdisptime) - user_quote_time[i] = ud.msgdisptime; - if (!user_quote_time[i]) pub = NUMPAGES; - } - - if (ud.idplayers && (g_netServer || ud.multimode > 1)) - { - hitdata_t hitinfo; - - for (i=0; iholoduke_on != -1) - sprite[g_player[i].ps->holoduke_on].cstat ^= 256; - - hitscan((vec3_t *)g_player[screenpeek].ps,g_player[screenpeek].ps->cursectnum, - sintable[(g_player[screenpeek].ps->ang+512)&2047], - sintable[g_player[screenpeek].ps->ang&2047], - (100-g_player[screenpeek].ps->horiz-g_player[screenpeek].ps->horizoff)<<11,&hitinfo,0xffff0030); - - for (i=0; iholoduke_on != -1) - sprite[g_player[i].ps->holoduke_on].cstat ^= 256; - - if ((hitinfo.hitsprite >= 0) && !(g_player[myconnectindex].ps->gm & MODE_MENU) && - sprite[hitinfo.hitsprite].picnum == APLAYER && sprite[hitinfo.hitsprite].yvel != screenpeek && - g_player[sprite[hitinfo.hitsprite].yvel].ps->dead_flag == 0) - { - if (g_player[screenpeek].ps->fta == 0 || g_player[screenpeek].ps->ftq == QUOTE_RESERVED3) - { - if (ldist(&sprite[g_player[screenpeek].ps->i],&sprite[hitinfo.hitsprite]) < 9216) - { - Bsprintf(ScriptQuotes[QUOTE_RESERVED3],"%s",&g_player[sprite[hitinfo.hitsprite].yvel].user_name[0]); - g_player[screenpeek].ps->fta = 12, g_player[screenpeek].ps->ftq = QUOTE_RESERVED3; - } - } - else if (g_player[screenpeek].ps->fta > 2) g_player[screenpeek].ps->fta -= 3; - } - } - - if (g_showShareware > 0) - { - g_showShareware--; - if (g_showShareware == 0) - { - pus = NUMPAGES; - pub = NUMPAGES; - } - } - -// everyothertime++; moved lower so it is restored correctly by diffs - - if (g_netServer || g_netClient) - randomseed = ticrandomseed; - - TRAVERSE_CONNECT(i) - copybufbyte(&inputfifo[(g_netServer && myconnectindex == i) ? 1 : 0][i],g_player[i].sync,sizeof(input_t)); - - G_UpdateInterpolations(); - - /* - j = -1; - TRAVERSE_CONNECT(i) - { - if (g_player[i].playerquitflag == 0 || TEST_SYNC_KEY(g_player[i].sync->bits,SK_GAMEQUIT) == 0) - { - j = i; - continue; - } - - G_CloseDemoWrite(); - - g_player[i].playerquitflag = 0; - } - */ - - g_moveThingsCount++; - - if (ud.recstat == 1) G_DemoRecord(); - - everyothertime++; - if (g_earthquakeTime > 0) g_earthquakeTime--; - - if (ud.pause_on == 0) - { - g_globalRandom = krand(); - A_MoveDummyPlayers();//ST 13 - } - - TRAVERSE_CONNECT(i) - { - if (g_player[i].sync->extbits&(1<<6)) - { - g_player[i].ps->team = g_player[i].pteam; - if (GametypeFlags[ud.coop] & GAMETYPE_TDM) - { - actor[g_player[i].ps->i].picnum = APLAYERTOP; - P_QuickKill(g_player[i].ps); - } - } - if (GametypeFlags[ud.coop] & GAMETYPE_TDM) - g_player[i].ps->palookup = g_player[i].pcolor = G_GetTeamPalette(g_player[i].ps->team); - - if (sprite[g_player[i].ps->i].pal != 1) - sprite[g_player[i].ps->i].pal = g_player[i].pcolor; - - G_HandleSharedKeys(i); - - if (ud.pause_on == 0) - { - P_ProcessInput(i); - P_CheckSectors(i); - } - } - - if (ud.pause_on == 0) - G_MoveWorld(); - -// Net_CorrectPrediction(); - - if (g_netServer) - Net_UpdateClients(); - - if ((everyothertime&1) == 0) - { - G_AnimateWalls(); - A_MoveCyclers(); - - if (g_netServer) - Net_StreamLevel(); - } - - if (g_netClient) //Slave - Net_ClientMove(); - - return 0; -} - -static void G_DoOrderScreen(void) -{ - setview(0,0,xdim-1,ydim-1); - - fadepal(0,0,0, 0,63,7); - //g_player[myconnectindex].ps->palette = palette; - P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 1); // JBF 20040308 - KB_FlushKeyboardQueue(); - rotatesprite(0,0,65536L,0,ORDERING,0,0,2+8+16+64+(ud.bgstretch?1024:0), 0,0,xdim-1,ydim-1); - fadepal(0,0,0, 63,0,-7); - while (!KB_KeyWaiting()) - { - handleevents(); - Net_GetPackets(); - } - - fadepal(0,0,0, 0,63,7); - KB_FlushKeyboardQueue(); - rotatesprite(0,0,65536L,0,ORDERING+1,0,0,2+8+16+64+(ud.bgstretch?1024:0), 0,0,xdim-1,ydim-1); - fadepal(0,0,0, 63,0,-7); - while (!KB_KeyWaiting()) - { - handleevents(); - Net_GetPackets(); - } - - fadepal(0,0,0, 0,63,7); - KB_FlushKeyboardQueue(); - rotatesprite(0,0,65536L,0,ORDERING+2,0,0,2+8+16+64+(ud.bgstretch?1024:0), 0,0,xdim-1,ydim-1); - fadepal(0,0,0, 63,0,-7); - while (!KB_KeyWaiting()) - { - handleevents(); - Net_GetPackets(); - } - - fadepal(0,0,0, 0,63,7); - KB_FlushKeyboardQueue(); - rotatesprite(0,0,65536L,0,ORDERING+3,0,0,2+8+16+64+(ud.bgstretch?1024:0), 0,0,xdim-1,ydim-1); - fadepal(0,0,0, 63,0,-7); - while (!KB_KeyWaiting()) - { - handleevents(); - Net_GetPackets(); - } -} - -void G_BonusScreen(int32_t bonusonly) -{ - int32_t t, tinc,gfx_offset; - int32_t i, y,xfragtotal,yfragtotal; - int32_t bonuscnt; - int32_t clockpad = 2; - char *lastmapname; - int32_t playerbest = -1; - - int32_t breathe[] = - { - 0, 30,VICTORY1+1,176,59, - 30, 60,VICTORY1+2,176,59, - 60, 90,VICTORY1+1,176,59, - 90, 120,0 ,176,59 - }; - - int32_t bossmove[] = - { - 0, 120,VICTORY1+3,86,59, - 220, 260,VICTORY1+4,86,59, - 260, 290,VICTORY1+5,86,59, - 290, 320,VICTORY1+6,86,59, - 320, 350,VICTORY1+7,86,59, - 350, 380,VICTORY1+8,86,59 - }; - - if (g_networkMode == NET_DEDICATED_SERVER) - return; - - Bsprintf(tempbuf, "%s - " APPNAME, g_gameNamePtr); - wm_setapptitle(tempbuf); - - if (ud.volume_number == 0 && ud.last_level == 8 && boardfilename[0]) - { - lastmapname = Bstrrchr(boardfilename,'\\'); - if (!lastmapname) lastmapname = Bstrrchr(boardfilename,'/'); - if (!lastmapname) lastmapname = boardfilename; - } - else - { - lastmapname = MapInfo[(ud.volume_number*MAXLEVELS)+ud.last_level-1].name; - if (!lastmapname) // this isn't right but it's better than no name at all - lastmapname = MapInfo[(ud.m_volume_number*MAXLEVELS)+ud.last_level-1].name; - } - - bonuscnt = 0; - - fadepal(0,0,0, 0,64,7); - setview(0,0,xdim-1,ydim-1); - clearview(0L); - nextpage(); - flushperms(); - - FX_StopAllSounds(); - S_ClearSoundLocks(); - FX_SetReverb(0L); - bindsenabled = 1; // so you can use your screenshot bind on the score screens - - if (bonusonly) goto FRAGBONUS; - - if (numplayers < 2 && ud.eog && ud.from_bonus == 0) - switch (ud.volume_number) - { - case 0: - if (ud.lockout == 0) - { - P_SetGamePalette(g_player[myconnectindex].ps, ENDINGPAL, 11); // JBF 20040308 - clearview(0L); - rotatesprite(0,50<<16,65536L,0,VICTORY1,0,0,2+8+16+64+128+(ud.bgstretch?1024:0),0,0,xdim-1,ydim-1); - nextpage(); - //g_player[myconnectindex].ps->palette = endingpal; - fadepal(0,0,0, 63,0,-1); - - KB_FlushKeyboardQueue(); - totalclock = 0; - tinc = 0; - while (1) - { - clearview(0L); - rotatesprite(0,50<<16,65536L,0,VICTORY1,0,0,2+8+16+64+128+(ud.bgstretch?1024:0),0,0,xdim-1,ydim-1); - - // boss - if (totalclock > 390 && totalclock < 780) - for (t=0; t<35; t+=5) if (bossmove[t+2] && (totalclock%390) > bossmove[t] && (totalclock%390) <= bossmove[t+1]) - { - if (t==10 && bonuscnt == 1) - { - S_PlaySound(SHOTGUN_FIRE); - S_PlaySound(SQUISHED); - bonuscnt++; - } - rotatesprite(bossmove[t+3]<<16,bossmove[t+4]<<16,65536L,0,bossmove[t+2],0,0,2+8+16+64+128+(ud.bgstretch?1024:0),0,0,xdim-1,ydim-1); - } - - // Breathe - if (totalclock < 450 || totalclock >= 750) - { - if (totalclock >= 750) - { - rotatesprite(86<<16,59<<16,65536L,0,VICTORY1+8,0,0,2+8+16+64+128+(ud.bgstretch?1024:0),0,0,xdim-1,ydim-1); - if (totalclock >= 750 && bonuscnt == 2) - { - S_PlaySound(DUKETALKTOBOSS); - bonuscnt++; - } - - } - for (t=0; t<20; t+=5) - if (breathe[t+2] && (totalclock%120) > breathe[t] && (totalclock%120) <= breathe[t+1]) - { - if (t==5 && bonuscnt == 0) - { - S_PlaySound(BOSSTALKTODUKE); - bonuscnt++; - } - rotatesprite(breathe[t+3]<<16,breathe[t+4]<<16,65536L,0,breathe[t+2],0,0,2+8+16+64+128+(ud.bgstretch?1024:0),0,0,xdim-1,ydim-1); - } - } - handleevents(); - Net_GetPackets(); - nextpage(); - if (KB_KeyWaiting()) break; - } - } - - fadepal(0,0,0, 0,64,1); - - KB_FlushKeyboardQueue(); - //g_player[myconnectindex].ps->palette = palette; - P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 11); // JBF 20040308 - - rotatesprite(0,0,65536L,0,3292,0,0,2+8+16+64+(ud.bgstretch?1024:0), 0,0,xdim-1,ydim-1); - fadepal(0,0,0, 63,0,-1); - while (!KB_KeyWaiting() && !MOUSE_GetButtons()&LEFT_MOUSE && !BUTTON(gamefunc_Fire) && !BUTTON(gamefunc_Open)) - { - handleevents(); - Net_GetPackets(); - } - fadepal(0,0,0, 0,64,1); - S_StopMusic(); - FX_StopAllSounds(); - S_ClearSoundLocks(); - break; - case 1: - S_StopMusic(); - clearview(0L); - nextpage(); - - if (ud.lockout == 0) - { - G_PlayAnim("cineov2.anm",1); - KB_FlushKeyBoardQueue(); - clearview(0L); - nextpage(); - } - - S_PlaySound(PIPEBOMB_EXPLODE); - - fadepal(0,0,0, 0,64,1); - setview(0,0,xdim-1,ydim-1); - KB_FlushKeyboardQueue(); - //g_player[myconnectindex].ps->palette = palette; - P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 11); // JBF 20040308 - rotatesprite(0,0,65536L,0,3293,0,0,2+8+16+64+(ud.bgstretch?1024:0), 0,0,xdim-1,ydim-1); - fadepal(0,0,0, 63,0,-1); - while (!KB_KeyWaiting() && !MOUSE_GetButtons()&LEFT_MOUSE && !BUTTON(gamefunc_Fire) && !BUTTON(gamefunc_Open)) - { - handleevents(); - Net_GetPackets(); - } - fadepal(0,0,0, 0,64,1); - - break; - - case 3: - - setview(0,0,xdim-1,ydim-1); - - S_StopMusic(); - clearview(0L); - nextpage(); - - if (ud.lockout == 0) - { - KB_FlushKeyboardQueue(); - G_PlayAnim("vol4e1.anm",8); - clearview(0L); - nextpage(); - G_PlayAnim("vol4e2.anm",10); - clearview(0L); - nextpage(); - G_PlayAnim("vol4e3.anm",11); - clearview(0L); - nextpage(); - } - - FX_StopAllSounds(); - S_ClearSoundLocks(); - S_PlaySound(ENDSEQVOL3SND4); - KB_FlushKeyBoardQueue(); - - //g_player[myconnectindex].ps->palette = palette; - P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 11); // JBF 20040308 - G_FadePalette(0,0,0,63); - clearview(0L); - menutext(160,60,0,0,"THANKS TO ALL OUR"); - menutext(160,60+16,0,0,"FANS FOR GIVING"); - menutext(160,60+16+16,0,0,"US BIG HEADS."); - menutext(160,70+16+16+16,0,0,"LOOK FOR A DUKE NUKEM 3D"); - menutext(160,70+16+16+16+16,0,0,"SEQUEL SOON."); - nextpage(); - - fadepal(0,0,0, 63,0,-3); - KB_FlushKeyboardQueue(); - while (!KB_KeyWaiting() && !MOUSE_GetButtons()&LEFT_MOUSE && !BUTTON(gamefunc_Fire) && !BUTTON(gamefunc_Open)) - { - handleevents(); - Net_GetPackets(); - } - fadepal(0,0,0, 0,64,3); - - clearview(0L); - nextpage(); - MOUSE_ClearButton(LEFT_MOUSE); - - G_PlayAnim("DUKETEAM.ANM",4); - - KB_FlushKeyBoardQueue(); - while (!KB_KeyWaiting() && !MOUSE_GetButtons()&LEFT_MOUSE && !BUTTON(gamefunc_Fire) && !BUTTON(gamefunc_Open)) - { - handleevents(); - Net_GetPackets(); - } - - clearview(0L); - nextpage(); - G_FadePalette(0,0,0,63); - - FX_StopAllSounds(); - S_ClearSoundLocks(); - KB_FlushKeyBoardQueue(); - MOUSE_ClearButton(LEFT_MOUSE); - - break; - - case 2: - - S_StopMusic(); - clearview(0L); - nextpage(); - if (ud.lockout == 0) - { - fadepal(0,0,0, 63,0,-1); - G_PlayAnim("cineov3.anm",2); - KB_FlushKeyBoardQueue(); - ototalclock = totalclock+200; - while (totalclock < ototalclock) - { - handleevents(); - Net_GetPackets(); - } - clearview(0L); - nextpage(); - - FX_StopAllSounds(); - S_ClearSoundLocks(); - } - - G_PlayAnim("RADLOGO.ANM",3); - - if (ud.lockout == 0 && !KB_KeyWaiting() && !MOUSE_GetButtons()&LEFT_MOUSE && !BUTTON(gamefunc_Fire) && !BUTTON(gamefunc_Open)) - { - S_PlaySound(ENDSEQVOL3SND5); - while (S_CheckSoundPlaying(-1,ENDSEQVOL3SND5)) - { - handleevents(); - Net_GetPackets(); - } - if (KB_KeyWaiting() || MOUSE_GetButtons()&LEFT_MOUSE || BUTTON(gamefunc_Fire) || BUTTON(gamefunc_Open)) goto ENDANM; - S_PlaySound(ENDSEQVOL3SND6); - while (S_CheckSoundPlaying(-1,ENDSEQVOL3SND6)) - { - handleevents(); - Net_GetPackets(); - } - if (KB_KeyWaiting() || MOUSE_GetButtons()&LEFT_MOUSE || BUTTON(gamefunc_Fire) || BUTTON(gamefunc_Open)) goto ENDANM; - S_PlaySound(ENDSEQVOL3SND7); - while (S_CheckSoundPlaying(-1,ENDSEQVOL3SND7)) - { - handleevents(); - Net_GetPackets(); - } - if (KB_KeyWaiting() || MOUSE_GetButtons()&LEFT_MOUSE || BUTTON(gamefunc_Fire) || BUTTON(gamefunc_Open)) goto ENDANM; - S_PlaySound(ENDSEQVOL3SND8); - while (S_CheckSoundPlaying(-1,ENDSEQVOL3SND8)) - { - handleevents(); - Net_GetPackets(); - } - if (KB_KeyWaiting() || MOUSE_GetButtons()&LEFT_MOUSE || BUTTON(gamefunc_Fire) || BUTTON(gamefunc_Open)) goto ENDANM; - S_PlaySound(ENDSEQVOL3SND9); - while (S_CheckSoundPlaying(-1,ENDSEQVOL3SND9)) - { - handleevents(); - Net_GetPackets(); - } - - } - MOUSE_ClearButton(LEFT_MOUSE); - KB_FlushKeyBoardQueue(); - totalclock = 0; - while (!KB_KeyWaiting() && totalclock < 120 && !MOUSE_GetButtons()&LEFT_MOUSE && !BUTTON(gamefunc_Fire) && !BUTTON(gamefunc_Open)) - { - handleevents(); - Net_GetPackets(); - } - -ENDANM: - MOUSE_ClearButton(LEFT_MOUSE); - FX_StopAllSounds(); - S_ClearSoundLocks(); - - KB_FlushKeyBoardQueue(); - - clearview(0L); - - break; - } - -FRAGBONUS: - - //g_player[myconnectindex].ps->palette = palette; - P_SetGamePalette(g_player[myconnectindex].ps, BASEPAL, 11); // JBF 20040308 - G_FadePalette(0,0,0,63); // JBF 20031228 - KB_FlushKeyboardQueue(); - totalclock = 0; - tinc = 0; - bonuscnt = 0; - - S_StopMusic(); - FX_StopAllSounds(); - S_ClearSoundLocks(); - - if (playerswhenstarted > 1 && (GametypeFlags[ud.coop]&GAMETYPE_SCORESHEET)) - { - if (!(ud.config.MusicToggle == 0 || ud.config.MusicDevice < 0)) - S_PlaySound(BONUSMUSIC); - - rotatesprite(0,0,65536L,0,MENUSCREEN,16,0,2+8+16+64+(ud.bgstretch?1024:0),0,0,xdim-1,ydim-1); - rotatesprite(160<<16,34<<16,65536L,0,INGAMEDUKETHREEDEE,0,0,10,0,0,xdim-1,ydim-1); - if (PLUTOPAK) // JBF 20030804 - rotatesprite((260)<<16,36<<16,65536L,0,PLUTOPAKSPRITE+2,0,0,2+8,0,0,xdim-1,ydim-1); - gametext(160,58+2,"MULTIPLAYER TOTALS",0,2+8+16); - gametext(160,58+10,MapInfo[(ud.volume_number*MAXLEVELS)+ud.last_level-1].name,0,2+8+16); - - gametext(160,165,"PRESS ANY KEY OR BUTTON TO CONTINUE",quotepulseshade,2+8+16); - - t = 0; - minitext(23,80," NAME KILLS",8,2+8+16+128); - for (i=0; ipalookup,2+8+16+128); - - for (y=0; yfraggedself); - minitext(92+(y*23),90+t,tempbuf,2,2+8+16+128); - xfragtotal -= g_player[y].ps->fraggedself; - } - else - { - Bsprintf(tempbuf,"%-4d",g_player[i].frags[y]); - minitext(92+(y*23),90+t,tempbuf,0,2+8+16+128); - xfragtotal += g_player[i].frags[y]; - } - } - - Bsprintf(tempbuf,"%-4d",xfragtotal); - minitext(101+(8*23),90+t,tempbuf,2,2+8+16+128); - - t += 7; - } - - for (y=0; yfraggedself; - yfragtotal += g_player[i].frags[y]; - } - Bsprintf(tempbuf,"%-4d",yfragtotal); - minitext(92+(y*23),96+(8*7),tempbuf,2,2+8+16+128); - } - - minitext(45,96+(8*7),"DEATHS",8,2+8+16+128); - nextpage(); - - fadepal(0,0,0, 63,0,-7); - - KB_FlushKeyboardQueue(); - - { - int32_t tc = totalclock; - while (KB_KeyWaiting()==0) - { - // continue after 10 seconds... - if (totalclock > tc + (120*10)) break; - handleevents(); - Net_GetPackets(); - } - } - - if (bonusonly || (g_netServer || ud.multimode > 1)) return; - - fadepal(0,0,0, 0,64,7); - } - - if (bonusonly || (g_netServer || ud.multimode > 1)) return; - - switch (ud.volume_number) - { - case 1: - gfx_offset = 5; - break; - default: - gfx_offset = 0; - break; - } - - rotatesprite(0,0,65536L,0,BONUSSCREEN+gfx_offset,0,0,2+8+16+64+128+(ud.bgstretch?1024:0),0,0,xdim-1,ydim-1); - - if (lastmapname) - menutext(160,20-6,0,0,lastmapname); - menutext(160,36-6,0,0,"COMPLETED"); - - gametext(160,192,"PRESS ANY KEY OR BUTTON TO CONTINUE",quotepulseshade,2+8+16); - - if (!(ud.config.MusicToggle == 0 || ud.config.MusicDevice < 0)) - S_PlaySound(BONUSMUSIC); - - nextpage(); - KB_FlushKeyboardQueue(); - fadepal(0,0,0, 63,0,-1); - bonuscnt = 0; - totalclock = 0; - tinc = 0; - - playerbest = CONFIG_GetMapBestTime(MapInfo[ud.volume_number*MAXLEVELS+ud.last_level-1].filename); - - if (g_player[myconnectindex].ps->player_par < playerbest || playerbest < 0) - CONFIG_SetMapBestTime(MapInfo[ud.volume_number*MAXLEVELS+ud.last_level-1].filename, g_player[myconnectindex].ps->player_par); - - { - int32_t ii, ij; - - for (ii=g_player[myconnectindex].ps->player_par/(REALGAMETICSPERSEC*60), ij=1; ii>9; ii/=10, ij++) ; - clockpad = max(clockpad,ij); - if (!(ud.volume_number == 0 && ud.last_level-1 == 7)) - { - for (ii=MapInfo[ud.volume_number*MAXLEVELS+ud.last_level-1].partime/(REALGAMETICSPERSEC*60), ij=1; ii>9; ii/=10, ij++) ; - clockpad = max(clockpad,ij); - if (!NAM) - { - for (ii=MapInfo[ud.volume_number*MAXLEVELS+ud.last_level-1].designertime/(REALGAMETICSPERSEC*60), ij=1; ii>9; ii/=10, ij++) ; - clockpad = max(clockpad,ij); - } - } - if (playerbest > 0) for (ii=playerbest/(REALGAMETICSPERSEC*60), ij=1; ii>9; ii/=10, ij++) ; - clockpad = max(clockpad,ij); - } - - do - { - int32_t yy = 0, zz; - - Net_GetPackets(); - handleevents(); - MUSIC_Update(); - - if (g_player[myconnectindex].ps->gm&MODE_EOL) - { - rotatesprite(0,0,65536L,0,BONUSSCREEN+gfx_offset,0,0,2+8+16+64+128+(ud.bgstretch?1024:0),0,0,xdim-1,ydim-1); - - if (totalclock > (1000000000L) && totalclock < (1000000320L)) - { - switch ((totalclock>>4)%15) - { - case 0: - if (bonuscnt == 6) - { - bonuscnt++; - S_PlaySound(SHOTGUN_COCK); - switch (rand()&3) - { - case 0: - S_PlaySound(BONUS_SPEECH1); - break; - case 1: - S_PlaySound(BONUS_SPEECH2); - break; - case 2: - S_PlaySound(BONUS_SPEECH3); - break; - case 3: - S_PlaySound(BONUS_SPEECH4); - break; - } - } - case 1: - case 4: - case 5: - rotatesprite(199<<16,31<<16,65536L,0,BONUSSCREEN+3+gfx_offset,0,0,2+8+16+64+128+(ud.bgstretch?1024:0),0,0,xdim-1,ydim-1); - break; - case 2: - case 3: - rotatesprite(199<<16,31<<16,65536L,0,BONUSSCREEN+4+gfx_offset,0,0,2+8+16+64+128+(ud.bgstretch?1024:0),0,0,xdim-1,ydim-1); - break; - } - } - else if (totalclock > (10240+120L)) break; - else - { - switch ((totalclock>>5)&3) - { - case 1: - case 3: - rotatesprite(199<<16,31<<16,65536L,0,BONUSSCREEN+1+gfx_offset,0,0,2+8+16+64+128+(ud.bgstretch?1024:0),0,0,xdim-1,ydim-1); - break; - case 2: - rotatesprite(199<<16,31<<16,65536L,0,BONUSSCREEN+2+gfx_offset,0,0,2+8+16+64+128+(ud.bgstretch?1024:0),0,0,xdim-1,ydim-1); - break; - } - } - - if (lastmapname) - menutext(160,20-6,0,0,lastmapname); - menutext(160,36-6,0,0,"COMPLETED"); - - gametext(160,192,"PRESS ANY KEY OR BUTTON TO CONTINUE",quotepulseshade,2+8+16); - - if (totalclock > (60*3)) - { - yy = zz = 59; - gametext(10,yy+9,"Your Time:",0,2+8+16); - yy+=10; - if (!(ud.volume_number == 0 && ud.last_level-1 == 7)) - { - gametext(10,yy+9,"Par Time:",0,2+8+16); - yy+=10; - if (!NAM) - { - gametext(10,yy+9,"3D Realms' Time:",0,2+8+16); - yy+=10; - } - - } - if (playerbest > 0) - { - gametext(10,yy+9,g_player[myconnectindex].ps->player_par (60*4)) - { - if (bonuscnt == 1) - { - bonuscnt++; - S_PlaySound(PIPEBOMB_EXPLODE); - } - - Bsprintf(tempbuf,"%0*d:%02d.%02d",clockpad, - (g_player[myconnectindex].ps->player_par/(REALGAMETICSPERSEC*60)), - (g_player[myconnectindex].ps->player_par/REALGAMETICSPERSEC)%60, - ((g_player[myconnectindex].ps->player_par%REALGAMETICSPERSEC)*33)/10 - ); - gametext((320>>2)+71,yy+9,tempbuf,0,2+8+16); - if (g_player[myconnectindex].ps->player_par < playerbest) - gametext((320>>2)+89+(clockpad*24),yy+9,"New record!",0,2+8+16); - yy+=10; - - if (!(ud.volume_number == 0 && ud.last_level-1 == 7)) - { - Bsprintf(tempbuf,"%0*d:%02d",clockpad, - (MapInfo[ud.volume_number*MAXLEVELS+ud.last_level-1].partime/(REALGAMETICSPERSEC*60)), - (MapInfo[ud.volume_number*MAXLEVELS+ud.last_level-1].partime/REALGAMETICSPERSEC)%60); - gametext((320>>2)+71,yy+9,tempbuf,0,2+8+16); - yy+=10; - - if (!NAM) - { - Bsprintf(tempbuf,"%0*d:%02d",clockpad, - (MapInfo[ud.volume_number*MAXLEVELS+ud.last_level-1].designertime/(REALGAMETICSPERSEC*60)), - (MapInfo[ud.volume_number*MAXLEVELS+ud.last_level-1].designertime/REALGAMETICSPERSEC)%60); - gametext((320>>2)+71,yy+9,tempbuf,0,2+8+16); - yy+=10; - } - } - - if (playerbest > 0) - { - Bsprintf(tempbuf,"%0*d:%02d.%02d",clockpad, - (playerbest/(REALGAMETICSPERSEC*60)), - (playerbest/REALGAMETICSPERSEC)%60, - ((playerbest%REALGAMETICSPERSEC)*33)/10 - ); - gametext((320>>2)+71,yy+9,tempbuf,0,2+8+16); - yy+=10; - } - } - } - - zz = yy += 5; - if (totalclock > (60*6)) - { - gametext(10,yy+9,"Enemies Killed:",0,2+8+16); - yy += 10; - gametext(10,yy+9,"Enemies Left:",0,2+8+16); - yy += 10; - - if (bonuscnt == 2) - { - bonuscnt++; - S_PlaySound(FLY_BY); - } - - yy = zz; - - if (totalclock > (60*7)) - { - if (bonuscnt == 3) - { - bonuscnt++; - S_PlaySound(PIPEBOMB_EXPLODE); - } - Bsprintf(tempbuf,"%-3d",g_player[myconnectindex].ps->actors_killed); - gametext((320>>2)+70,yy+9,tempbuf,0,2+8+16); - yy += 10; - if (ud.player_skill > 3) - { - Bsprintf(tempbuf,"N/A"); - gametext((320>>2)+70,yy+9,tempbuf,0,2+8+16); - yy += 10; - } - else - { - if ((g_player[myconnectindex].ps->max_actors_killed-g_player[myconnectindex].ps->actors_killed) < 0) - Bsprintf(tempbuf,"%-3d",0); - else Bsprintf(tempbuf,"%-3d",g_player[myconnectindex].ps->max_actors_killed-g_player[myconnectindex].ps->actors_killed); - gametext((320>>2)+70,yy+9,tempbuf,0,2+8+16); - yy += 10; - } - } - } - - zz = yy += 5; - if (totalclock > (60*9)) - { - gametext(10,yy+9,"Secrets Found:",0,2+8+16); - yy += 10; - gametext(10,yy+9,"Secrets Missed:",0,2+8+16); - yy += 10; - if (bonuscnt == 4) bonuscnt++; - - yy = zz; - if (totalclock > (60*10)) - { - if (bonuscnt == 5) - { - bonuscnt++; - S_PlaySound(PIPEBOMB_EXPLODE); - } - Bsprintf(tempbuf,"%-3d",g_player[myconnectindex].ps->secret_rooms); - gametext((320>>2)+70,yy+9,tempbuf,0,2+8+16); - yy += 10; - if (g_player[myconnectindex].ps->secret_rooms > 0) - Bsprintf(tempbuf,"%-3d%%",(100*g_player[myconnectindex].ps->secret_rooms/g_player[myconnectindex].ps->max_secret_rooms)); - Bsprintf(tempbuf,"%-3d",g_player[myconnectindex].ps->max_secret_rooms-g_player[myconnectindex].ps->secret_rooms); - gametext((320>>2)+70,yy+9,tempbuf,0,2+8+16); - yy += 10; - } - } - - if (totalclock > 10240 && totalclock < 10240+10240) - totalclock = 1024; - - if (((MOUSE_GetButtons()&7) || KB_KeyWaiting() || BUTTON(gamefunc_Fire) || BUTTON(gamefunc_Open)) && totalclock > (60*2)) // JBF 20030809 - { - MOUSE_ClearButton(7); - if (totalclock < (60*13)) - { - KB_FlushKeyboardQueue(); - totalclock = (60*13); - } - else if (totalclock < (1000000000L)) - totalclock = (1000000000L); - } - } - else - break; - - VM_OnEvent(EVENT_DISPLAYBONUSSCREEN, g_player[screenpeek].ps->i, screenpeek, -1); - nextpage(); - } - while (1); -} - -static void G_DrawCameraText(int16_t i) -{ - char flipbits; - int32_t x , y; - - if (!T1) - { - rotatesprite(24<<16,33<<16,65536L,0,CAMCORNER,0,0,2,windowx1,windowy1,windowx2,windowy2); - rotatesprite((320-26)<<16,34<<16,65536L,0,CAMCORNER+1,0,0,2,windowx1,windowy1,windowx2,windowy2); - rotatesprite(22<<16,163<<16,65536L,512,CAMCORNER+1,0,0,2+4,windowx1,windowy1,windowx2,windowy2); - rotatesprite((310-10)<<16,163<<16,65536L,512,CAMCORNER+1,0,0,2,windowx1,windowy1,windowx2,windowy2); - if (totalclock&16) - rotatesprite(46<<16,32<<16,65536L,0,CAMLIGHT,0,0,2,windowx1,windowy1,windowx2,windowy2); - } - else - { - flipbits = (totalclock<<1)&48; - for (x=0; x<394; x+=64) - for (y=0; y<200; y+=64) - rotatesprite(x<<16,y<<16,65536L,0,STATIC,0,0,2+flipbits,windowx1,windowy1,windowx2,windowy2); - } -} - -#if 0 -void vglass(int32_t x,int32_t y,short a,short wn,short n) -{ - int32_t z, zincs; - short sect; - - sect = wall[wn].nextsector; - if (sect == -1) return; - zincs = (sector[sect].floorz-sector[sect].ceilingz) / n; - - for (z = sector[sect].ceilingz; z < sector[sect].floorz; z += zincs) - A_InsertSprite(sect,x,y,z-(krand()&8191),GLASSPIECES+(z&(krand()%3)),-32,36,36,a+128-(krand()&255),16+(krand()&31),0,-1,5); -} -#endif - -void A_SpawnWallGlass(int32_t i,int32_t wallnum,int32_t n) -{ - int32_t j, xv, yv, z, x1, y1; - int16_t sect; - int32_t a; - - sect = -1; - - if (wallnum < 0) - { - for (j=n-1; j >= 0 ; j--) - { - a = SA-256+(krand()&511)+1024; - A_InsertSprite(SECT,SX,SY,SZ,GLASSPIECES+(j%3),-32,36,36,a,32+(krand()&63),1024-(krand()&1023),i,5); - } - return; - } - - j = n+1; - - x1 = wall[wallnum].x; - y1 = wall[wallnum].y; - - xv = wall[wall[wallnum].point2].x-x1; - yv = wall[wall[wallnum].point2].y-y1; - - x1 -= ksgn(yv); - y1 += ksgn(xv); - - xv /= j; - yv /= j; - - for (j=n; j>0; j--) - { - x1 += xv; - y1 += yv; - - updatesector(x1,y1,§); - if (sect >= 0) - { - z = sector[sect].floorz-(krand()&(klabs(sector[sect].ceilingz-sector[sect].floorz))); - if (z < -(32<<8) || z > (32<<8)) - z = SZ-(32<<8)+(krand()&((64<<8)-1)); - a = SA-1024; - A_InsertSprite(SECT,x1,y1,z,GLASSPIECES+(j%3),-32,36,36,a,32+(krand()&63),-(krand()&1023),i,5); - } - } -} - -void A_SpawnGlass(int32_t i,int32_t n) -{ - for (; n>0; n--) - { - int32_t k = A_InsertSprite(SECT,SX,SY,SZ-((krand()&16)<<8),GLASSPIECES+(n%3), - krand()&15,36,36,krand()&2047,32+(krand()&63),-512-(krand()&2047),i,5); - sprite[k].pal = sprite[i].pal; - } -} - -void A_SpawnCeilingGlass(int32_t i,int32_t sectnum,int32_t n) -{ - int32_t j, xv, yv, z, x1, y1, a,s; - int32_t startwall = sector[sectnum].wallptr; - int32_t endwall = startwall+sector[sectnum].wallnum; - - for (s=startwall; s<(endwall-1); s++) - { - x1 = wall[s].x; - y1 = wall[s].y; - - xv = (wall[s+1].x-x1)/(n+1); - yv = (wall[s+1].y-y1)/(n+1); - - for (j=n; j>0; j--) - { - x1 += xv; - y1 += yv; - a = krand()&2047; - z = sector[sectnum].ceilingz+((krand()&15)<<8); - A_InsertSprite(sectnum,x1,y1,z,GLASSPIECES+(j%3),-32,36,36,a,(krand()&31),0,i,5); - } - } -} - -void A_SpawnRandomGlass(int32_t i,int32_t wallnum,int32_t n) -{ - int32_t j, xv, yv, z, x1, y1; - int16_t sect = -1; - int32_t a, k; - - if (wallnum < 0) - { - for (j=n-1; j >= 0 ; j--) - { - a = krand()&2047; - k = A_InsertSprite(SECT,SX,SY,SZ-(krand()&(63<<8)),GLASSPIECES+(j%3),-32,36,36,a,32+(krand()&63),1024-(krand()&2047),i,5); - sprite[k].pal = krand()&15; - } - return; - } - - j = n+1; - x1 = wall[wallnum].x; - y1 = wall[wallnum].y; - - xv = (wall[wall[wallnum].point2].x-wall[wallnum].x)/j; - yv = (wall[wall[wallnum].point2].y-wall[wallnum].y)/j; - - for (j=n; j>0; j--) - { - x1 += xv; - y1 += yv; - - updatesector(x1,y1,§); - z = sector[sect].floorz-(krand()&(klabs(sector[sect].ceilingz-sector[sect].floorz))); - if (z < -(32<<8) || z > (32<<8)) - z = SZ-(32<<8)+(krand()&((64<<8)-1)); - a = SA-1024; - k = A_InsertSprite(SECT,x1,y1,z,GLASSPIECES+(j%3),-32,36,36,a,32+(krand()&63),-(krand()&2047),i,5); - sprite[k].pal = krand()&7; - } -} - -static void G_SetupGameButtons(void) -{ - CONTROL_DefineFlag(gamefunc_Move_Forward,FALSE); - CONTROL_DefineFlag(gamefunc_Move_Backward,FALSE); - CONTROL_DefineFlag(gamefunc_Turn_Left,FALSE); - CONTROL_DefineFlag(gamefunc_Turn_Right,FALSE); - CONTROL_DefineFlag(gamefunc_Strafe,FALSE); - CONTROL_DefineFlag(gamefunc_Fire,FALSE); - CONTROL_DefineFlag(gamefunc_Open,FALSE); - CONTROL_DefineFlag(gamefunc_Run,FALSE); - CONTROL_DefineFlag(gamefunc_AutoRun,FALSE); - CONTROL_DefineFlag(gamefunc_Jump,FALSE); - CONTROL_DefineFlag(gamefunc_Crouch,FALSE); - CONTROL_DefineFlag(gamefunc_Look_Up,FALSE); - CONTROL_DefineFlag(gamefunc_Look_Down,FALSE); - CONTROL_DefineFlag(gamefunc_Look_Left,FALSE); - CONTROL_DefineFlag(gamefunc_Look_Right,FALSE); - CONTROL_DefineFlag(gamefunc_Strafe_Left,FALSE); - CONTROL_DefineFlag(gamefunc_Strafe_Right,FALSE); - CONTROL_DefineFlag(gamefunc_Aim_Up,FALSE); - CONTROL_DefineFlag(gamefunc_Aim_Down,FALSE); - CONTROL_DefineFlag(gamefunc_Weapon_1,FALSE); - CONTROL_DefineFlag(gamefunc_Weapon_2,FALSE); - CONTROL_DefineFlag(gamefunc_Weapon_3,FALSE); - CONTROL_DefineFlag(gamefunc_Weapon_4,FALSE); - CONTROL_DefineFlag(gamefunc_Weapon_5,FALSE); - CONTROL_DefineFlag(gamefunc_Weapon_6,FALSE); - CONTROL_DefineFlag(gamefunc_Weapon_7,FALSE); - CONTROL_DefineFlag(gamefunc_Weapon_8,FALSE); - CONTROL_DefineFlag(gamefunc_Weapon_9,FALSE); - CONTROL_DefineFlag(gamefunc_Weapon_10,FALSE); - CONTROL_DefineFlag(gamefunc_Inventory,FALSE); - CONTROL_DefineFlag(gamefunc_Inventory_Left,FALSE); - CONTROL_DefineFlag(gamefunc_Inventory_Right,FALSE); - CONTROL_DefineFlag(gamefunc_Holo_Duke,FALSE); - CONTROL_DefineFlag(gamefunc_Jetpack,FALSE); - CONTROL_DefineFlag(gamefunc_NightVision,FALSE); - CONTROL_DefineFlag(gamefunc_MedKit,FALSE); - CONTROL_DefineFlag(gamefunc_TurnAround,FALSE); - CONTROL_DefineFlag(gamefunc_SendMessage,FALSE); - CONTROL_DefineFlag(gamefunc_Map,FALSE); - CONTROL_DefineFlag(gamefunc_Shrink_Screen,FALSE); - CONTROL_DefineFlag(gamefunc_Enlarge_Screen,FALSE); - CONTROL_DefineFlag(gamefunc_Center_View,FALSE); - CONTROL_DefineFlag(gamefunc_Holster_Weapon,FALSE); - CONTROL_DefineFlag(gamefunc_Show_Opponents_Weapon,FALSE); - CONTROL_DefineFlag(gamefunc_Map_Follow_Mode,FALSE); - CONTROL_DefineFlag(gamefunc_See_Coop_View,FALSE); - CONTROL_DefineFlag(gamefunc_Mouse_Aiming,FALSE); - CONTROL_DefineFlag(gamefunc_Toggle_Crosshair,FALSE); - CONTROL_DefineFlag(gamefunc_Steroids,FALSE); - CONTROL_DefineFlag(gamefunc_Quick_Kick,FALSE); - CONTROL_DefineFlag(gamefunc_Next_Weapon,FALSE); - CONTROL_DefineFlag(gamefunc_Previous_Weapon,FALSE); -} - -int32_t GetTime(void) -{ - return totalclock; -} diff --git a/polymer-perf/eduke32/source/game.h b/polymer-perf/eduke32/source/game.h deleted file mode 100644 index 7875aef06..000000000 --- a/polymer-perf/eduke32/source/game.h +++ /dev/null @@ -1,338 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#ifndef __game_h__ -#define __game_h__ - -#define USERQUOTE_LEFTOFFSET 5 -#define USERQUOTE_RIGHTOFFSET 14 - -#define MAXCHEATLEN 20 -#define NUMCHEATCODES (int32_t)(sizeof(CheatStrings)/sizeof(CheatStrings[0])) - -enum GametypeFlags_t { - GAMETYPE_COOP = 0x00000001, - GAMETYPE_WEAPSTAY = 0x00000002, - GAMETYPE_FRAGBAR = 0x00000004, - GAMETYPE_SCORESHEET = 0x00000008, - GAMETYPE_DMSWITCHES = 0x00000010, - GAMETYPE_COOPSPAWN = 0x00000020, - GAMETYPE_ACCESSCARDSPRITES = 0x00000040, - GAMETYPE_COOPVIEW = 0x00000080, - GAMETYPE_COOPSOUND = 0x00000100, - GAMETYPE_OTHERPLAYERSINMAP = 0x00000200, - GAMETYPE_ITEMRESPAWN = 0x00000400, - GAMETYPE_MARKEROPTION = 0x00000800, - GAMETYPE_PLAYERSFRIENDLY = 0x00001000, - GAMETYPE_FIXEDRESPAWN = 0x00002000, - GAMETYPE_ACCESSATSTART = 0x00004000, - GAMETYPE_PRESERVEINVENTORYDEATH = 0x00008000, - GAMETYPE_TDM = 0x00010000, - GAMETYPE_TDMSPAWN = 0x00020000 -}; - -// logo control -enum LogoFlags_t { - LOGO_ENABLED = 0x00000001, - LOGO_PLAYANIM = 0x00000002, - LOGO_PLAYMUSIC = 0x00000004, - LOGO_3DRSCREEN = 0x00000008, - LOGO_TITLESCREEN = 0x00000010, - LOGO_DUKENUKEM = 0x00000020, - LOGO_THREEDEE = 0x00000040, - LOGO_PLUTOPAKSPRITE = 0x00000080, - LOGO_SHAREWARESCREENS = 0x00000100, - LOGO_TENSCREEN = 0x00000200 -}; - -typedef enum basepal_ { - BASEPAL = 0, - WATERPAL, - SLIMEPAL, - DREALMSPAL, - TITLEPAL, - ENDINGPAL, - ANIMPAL, - BASEPALCOUNT -} basepal_t; - -#define deletesprite A_DeleteSprite -void A_DeleteSprite(int32_t s); - -typedef struct { - vec3_t camera; - int32_t const_visibility,uw_framerate; - int32_t camera_time,folfvel,folavel,folx,foly,fola; - int32_t reccnt,crosshairscale; - - int32_t runkey_mode,statusbarscale,mouseaiming,weaponswitch,drawweapon; // JBF 20031125 - int32_t democams,color,msgdisptime,statusbarmode; - int32_t m_noexits,noexits,autovote,automsg,idplayers; - int32_t team, viewbob, weaponsway, althud, weaponscale, textscale; - - int32_t entered_name,screen_tilting,shadows,fta_on,executions,auto_run; - int32_t coords,tickrate,levelstats,m_coop,coop,screen_size,lockout,crosshair; - int32_t playerai,angleinterpolation,obituaries; - - int32_t respawn_monsters,respawn_items,respawn_inventory,recstat,monsters_off,brightness; - int32_t m_respawn_items,m_respawn_monsters,m_respawn_inventory,m_recstat,m_monsters_off,detail; - int32_t m_ffire,ffire,m_player_skill,m_level_number,m_volume_number,multimode; - int32_t player_skill,level_number,volume_number,m_marker,marker,mouseflip; - - int32_t configversion; - - int16_t cameraang, camerasect, camerahoriz; - int16_t pause_on,from_bonus; - int16_t camerasprite,last_camsprite; - int16_t last_level,secretlevel, bgstretch; - - struct { - int32_t UseJoystick; - int32_t UseMouse; - int32_t AutoAim; - int32_t ShowOpponentWeapons; - int32_t MouseDeadZone,MouseBias; - int32_t SmoothInput; - - // JBF 20031211: Store the input settings because - // (currently) jmact can't regurgitate them - int32_t MouseFunctions[MAXMOUSEBUTTONS][2]; - int32_t MouseDigitalFunctions[MAXMOUSEAXES][2]; - int32_t MouseAnalogueAxes[MAXMOUSEAXES]; - int32_t MouseAnalogueScale[MAXMOUSEAXES]; - int32_t JoystickFunctions[MAXJOYBUTTONS][2]; - int32_t JoystickDigitalFunctions[MAXJOYAXES][2]; - int32_t JoystickAnalogueAxes[MAXJOYAXES]; - int32_t JoystickAnalogueScale[MAXJOYAXES]; - int32_t JoystickAnalogueDead[MAXJOYAXES]; - int32_t JoystickAnalogueSaturate[MAXJOYAXES]; - uint8_t KeyboardKeys[NUMGAMEFUNCTIONS][2]; - - // - // Sound variables - // - int32_t FXDevice; - int32_t MusicDevice; - int32_t FXVolume; - int32_t MusicVolume; - int32_t SoundToggle; - int32_t MusicToggle; - int32_t VoiceToggle; - int32_t AmbienceToggle; - - int32_t NumVoices; - int32_t NumChannels; - int32_t NumBits; - int32_t MixRate; - - int32_t ReverseStereo; - - // - // Screen variables - // - - int32_t ScreenMode; - - int32_t ScreenWidth; - int32_t ScreenHeight; - int32_t ScreenBPP; - - int32_t ForceSetup; - int32_t NoAutoLoad; - - int32_t scripthandle; - int32_t setupread; - - int32_t CheckForUpdates; - int32_t LastUpdateCheck; - int32_t useprecache; - } config; - - char overhead_on,last_overhead,showweapons; - char god,warp_on,cashman,eog,showallmap; - char show_help,scrollmode,clipping; - char ridecule[10][40]; - char savegame[10][22]; - char pwlockout[128],rtsname[128]; - char display_bonus_screen; - char show_level_text; -} user_defs; - - -extern cactype cac[]; - -// this is checked against http://eduke32.com/VERSION -extern const char *s_buildDate; -extern char *g_defNamePtr; -extern char *g_gameNamePtr; -extern char *g_gameNamePtr; -extern char *g_grpNamePtr; -extern char *g_grpNamePtr; -extern char *g_scriptNamePtr; -extern char CheatStrings[][MAXCHEATLEN]; -extern char boardfilename[BMAX_PATH], currentboardfilename[BMAX_PATH]; -extern char boardfilename[BMAX_PATH]; -extern char defaultduke3dgrp[BMAX_PATH]; -extern char g_modDir[BMAX_PATH]; -extern char g_modDir[BMAX_PATH]; -extern char inputloc; -extern char ror_protectedsectors[MAXSECTORS]; - -extern float r_ambientlight; - -extern int32_t althud_flashing; -extern int32_t althud_numberpal; -extern int32_t althud_numbertile; -extern int32_t althud_shadows; -extern int32_t cacnum; -extern int32_t drawing_ror; -extern int32_t g_Shareware; -extern int32_t g_cameraClock; -extern int32_t g_cameraDistance; -extern int32_t g_cameraDistance; -extern int32_t g_crosshairSum; -extern int32_t g_doQuickSave; -extern int32_t g_forceWeaponChoice; -extern int32_t g_gameType; -extern int32_t g_levelTextTime; -extern int32_t g_noSetup; -extern int32_t g_quitDeadline; -extern int32_t g_restorePalette; -extern int32_t g_scriptSanityChecks; -extern int32_t hud_glowingquotes; -extern int32_t hud_showmapname; -extern int32_t lastvisinc; -extern int32_t rts_numlumps; -extern int32_t qsetmode; -extern int32_t quotebot; -extern int32_t quotebotgoal; -extern int32_t r_maxfps; -extern int32_t tempwallptr; -extern int32_t ticrandomseed; -extern int32_t vote_map; -extern int32_t voting; - -extern int8_t cheatbuf[MAXCHEATLEN],cheatbuflen; - -extern palette_t CrosshairColors; -extern palette_t DefaultCrosshairColors; - -extern uint32_t g_frameDelay; - -extern uint8_t water_pal[768],slime_pal[768],title_pal[768],dre_alms[768],ending_pal[768],*anim_pal; -extern uint8_t *basepaltable[BASEPALCOUNT]; - -extern user_defs ud; - -int32_t A_CheckInventorySprite(spritetype *s); -int32_t A_InsertSprite(int32_t whatsect,int32_t s_x,int32_t s_y,int32_t s_z,int32_t s_pn,int32_t s_s,int32_t s_xr,int32_t s_yr,int32_t s_a,int32_t s_ve,int32_t s_zv,int32_t s_ow,int32_t s_ss); -int32_t A_Spawn(int32_t j,int32_t pn); -int32_t G_DoMoveThings(void); -int32_t G_EndOfLevel(void); -int32_t G_GameTextLen(int32_t x,const char *t); -int32_t G_PrintGameText(int32_t f,int32_t tile,int32_t x,int32_t y,const char *t,int32_t s,int32_t p,int32_t o,int32_t x1,int32_t y1,int32_t x2,int32_t y2,int32_t z); -int32_t GetTime(void); -int32_t _EnterText(int32_t small,int32_t x,int32_t y,char *t,int32_t dalen,int32_t c); -int32_t kopen4loadfrommod(const char *filename,char searchfirst); -int32_t minitext_(int32_t x,int32_t y,const char *t,int32_t s,int32_t p,int32_t sb); -extern inline int32_t mpgametext(int32_t y,const char *t,int32_t s,int32_t dabits); -int32_t startwin_run(void); - -void A_SpawnCeilingGlass(int32_t i,int32_t sectnum,int32_t n); -void A_SpawnGlass(int32_t i,int32_t n); -void A_SpawnRandomGlass(int32_t i,int32_t wallnum,int32_t n); -void A_SpawnWallGlass(int32_t i,int32_t wallnum,int32_t n); -void G_AddUserQuote(const char *daquote); -void G_BackToMenu(void); -void G_BonusScreen(int32_t bonusonly); -void G_CheatGetInv(void); -void G_DisplayRest(int32_t smoothratio); -void G_DoSpriteAnimations(int32_t x,int32_t y,int32_t a,int32_t smoothratio); -void G_DrawBackground(void); -void G_DrawFrags(void); -void G_DrawRooms(int32_t snum,int32_t smoothratio); -void G_DrawTXDigiNumZ(int32_t starttile,int32_t x,int32_t y,int32_t n,int32_t s,int32_t pal,int32_t cs,int32_t x1,int32_t y1,int32_t x2,int32_t y2,int32_t z); -void G_DrawTile(int32_t x,int32_t y,int32_t tilenum,int32_t shade,int32_t orientation); -void G_DrawTilePal(int32_t x,int32_t y,int32_t tilenum,int32_t shade,int32_t orientation,int32_t p); -void G_DrawTilePalSmall(int32_t x,int32_t y,int32_t tilenum,int32_t shade,int32_t orientation,int32_t p); -void G_DrawTileSmall(int32_t x,int32_t y,int32_t tilenum,int32_t shade,int32_t orientation); -void G_FadePalette(int32_t r,int32_t g,int32_t b,int32_t e); -void G_GameExit(const char *t) ATTRIBUTE((noreturn)); -void G_GameQuit(void); -void G_GetCrosshairColor(void); -void G_HandleLocalKeys(void); -void G_HandleSpecialKeys(void); -void G_PrintGameQuotes(void); -void G_SE40(int32_t smoothratio); -void G_SetCrosshairColor(int32_t r,int32_t g,int32_t b); -void G_SetStatusBarScale(int32_t sc); -void G_Shutdown(void); -void G_UpdatePlayerFromMenu(void); -void M32RunScript(const char *s); -void P_DoQuote(int32_t q,DukePlayer_t *p); -void P_SetGamePalette(DukePlayer_t *player,uint8_t palid,int32_t set); -int32_t app_main(int32_t argc,const char **argv); -void computergetinput(int32_t snum,input_t *syn); -void fadepal(int32_t r,int32_t g,int32_t b,int32_t start,int32_t end,int32_t step); -void fadepaltile(int32_t r,int32_t g,int32_t b,int32_t start,int32_t end,int32_t step,int32_t tile); -void sendscore(const char *s); - -static inline int32_t G_GetTeamPalette(int32_t team) -{ - int8_t pal[] = { 3, 10, 11, 12 }; - - if (team > (int32_t)(sizeof(pal)/sizeof(pal[0])) || team < 0) - return 0; - - return pal[team]; -} - -#if defined(_WIN32) -int32_t G_GetVersionFromWebsite(char *buffer); -#endif - -#ifdef RENDERTYPEWIN -void app_crashhandler(void); -#ifdef USE_OPENGL -extern char forcegl; -#endif -#endif - -#if KRANDDEBUG -int32_t krd_print(const char *filename); -void krd_enable(int32_t which); -#endif - -#define minitextshade(x, y, t, s, p, sb) minitext_(x,y,t,s,p,sb) -#define minitext(x, y, t, p, sb) minitext_(x,y,t,0,p,sb) -#define menutext(x,y,s,p,t) menutext_(x,y,s,p,(char *)OSD_StripColors(menutextbuf,t),10+16) -#define gametext(x,y,t,s,dabits) G_PrintGameText(0,STARTALPHANUM, x,y,t,s,0,dabits,0, 0, xdim-1, ydim-1, 65536) -#define gametextscaled(x,y,t,s,dabits) G_PrintGameText(1,STARTALPHANUM, x,y,t,s,0,dabits,0, 0, xdim-1, ydim-1, 65536) -#define gametextpal(x,y,t,s,p) G_PrintGameText(0,STARTALPHANUM, x,y,t,s,p,26,0, 0, xdim-1, ydim-1, 65536) -#define gametextpalbits(x,y,t,s,p,dabits) G_PrintGameText(0,STARTALPHANUM, x,y,t,s,p,dabits,0, 0, xdim-1, ydim-1, 65536) -#define A_CheckSpriteFlags(iActor, iType) (((SpriteFlags[sprite[iActor].picnum]^actor[iActor].flags) & iType) != 0) -#define A_CheckSpriteTileFlags(iPicnum, iType) ((SpriteFlags[iPicnum] & iType) != 0) -#define G_EnterText(x, y, t, dalen, c) _EnterText(0,x,y,t,dalen,c) -#define Net_EnterText(x, y, t, dalen, c) _EnterText(1,x,y,t,dalen,c) -#define S_StopSound(num) S_StopEnvSound(num, -1) - -#endif diff --git a/polymer-perf/eduke32/source/gamedef.c b/polymer-perf/eduke32/source/gamedef.c deleted file mode 100644 index 0fa23a0e0..000000000 --- a/polymer-perf/eduke32/source/gamedef.c +++ /dev/null @@ -1,6443 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#include "duke3d.h" -#include "gamedef.h" -#include "gameexec.h" - -#include "osd.h" - -#ifdef _WIN32 -#define WIN32_LEAN_AND_MEAN -#include -#include -#endif - -#define NUMKEYWORDS (int32_t)(sizeof(keyw)/sizeof(keyw[0])) - -int32_t g_scriptVersion = 13; // 13 = 1.3D-style CON files, 14 = 1.4/1.5 style CON files -uint32_t g_scriptDateVersion = 99999999; // YYYYMMDD -static uint32_t g_scriptLastKeyword; // = NUMKEYWORDS-1; - -#define NUMKEYWDATES (int32_t)(sizeof(g_keywdate)/sizeof(g_keywdate[0])) -// { keyw, date } means that at the date, all keywords up to keyw inclusive are available -static struct { uint32_t keyw; uint32_t date; } g_keywdate[] = -{ - // beginning of eduke32 svn - { CON_CANSEE, 20060423 }, - { CON_CANSEESPR, 20060424 }, - // some stuff here not representable this way - { CON_FINDNEARSPRITEZVAR, 20060516 }, - { CON_EZSHOOT, 20060701 }, - { CON_EZSHOOTVAR, 20060822 }, - { CON_JUMP, 20060828 }, - { CON_QSTRLEN, 20060930 }, - { CON_QUAKE, 20070105 }, - { CON_SHOWVIEW, 20070208 }, - { CON_NEXTSPRITESECT, 20070819 }, - { CON_GETKEYNAME, 20071024 }, // keyw numbers have been - { CON_SPRITENOPAL, 20071220 }, // shuffled around here - { CON_HITRADIUSVAR, 20080216 }, - { CON_ROTATESPRITE16, 20080314 }, - { CON_SETARRAY, 20080401 }, - { CON_READARRAYFROMFILE, 20080405 }, - { CON_STARTTRACKVAR, 20080510 }, - { CON_QGETSYSSTR, 20080709 }, - { CON_GETTICKS, 20080711 }, - { CON_SETTSPR, 20080713 }, - { CON_CLEARMAPSTATE, 20080716 }, - { CON_SCRIPTSIZE, 20080720 }, - { CON_SETGAMENAME, 20080722 }, - { CON_CMENU, 20080725 }, - { CON_GETTIMEDATE, 20080809 }, - { CON_ACTIVATECHEAT, 20080810 }, - { CON_SETGAMEPALETTE, 20080816 }, - { CON_SETCFGNAME, 20080817 }, - { CON_IFVARVAREITHER, 20080907 }, - { CON_SAVENN, 20080915 }, - { CON_COPY, 20090219 }, -// { CON_INV, 20090619 }, - { CON_QSTRNCAT, 20090712 }, - { CON_STOPACTORSOUND, 20090715 }, - { CON_IFSERVER, 20100722 }, - { CON_CALCHYPOTENUSE, 20100927 }, - { CON_CLIPMOVENOSLIDE, 20101009 }, -}; - -char g_szScriptFileName[BMAX_PATH] = "(none)"; // file we're currently compiling -static char g_szCurrentBlockName[256] = "(none)", g_szLastBlockName[256] = "NULL"; - -int32_t g_totalLines,g_lineNumber; -static int32_t g_checkingIfElse, g_processingState, g_lastKeyword = -1; -char g_szBuf[1024]; - -intptr_t *g_caseScriptPtr=NULL; // the pointer to the start of the case table in a switch statement -// first entry is 'default' code. -static intptr_t *previous_event=NULL; -static int32_t g_numCases = 0; -static int32_t g_checkingSwitch = 0, g_currentEvent = -1; -static int32_t g_labelsOnly = 0, g_skipKeywordCheck = 0, g_dynamicTileMapping = 0; -static int32_t g_numBraces = 0; - -static int32_t C_SetScriptSize(int32_t size); - -int32_t g_numQuoteRedefinitions = 0; - -// pointers to weapon gamevar data -intptr_t *aplWeaponClip[MAX_WEAPONS]; // number of items in magazine -intptr_t *aplWeaponReload[MAX_WEAPONS]; // delay to reload (include fire) -intptr_t *aplWeaponFireDelay[MAX_WEAPONS]; // delay to fire -intptr_t *aplWeaponHoldDelay[MAX_WEAPONS]; // delay after release fire button to fire (0 for none) -intptr_t *aplWeaponTotalTime[MAX_WEAPONS]; // The total time the weapon is cycling before next fire. -intptr_t *aplWeaponFlags[MAX_WEAPONS]; // Flags for weapon -intptr_t *aplWeaponShoots[MAX_WEAPONS]; // what the weapon shoots -intptr_t *aplWeaponSpawnTime[MAX_WEAPONS]; // the frame at which to spawn an item -intptr_t *aplWeaponSpawn[MAX_WEAPONS]; // the item to spawn -intptr_t *aplWeaponShotsPerBurst[MAX_WEAPONS]; // number of shots per 'burst' (one ammo per 'burst' -intptr_t *aplWeaponWorksLike[MAX_WEAPONS]; // What original the weapon works like -intptr_t *aplWeaponInitialSound[MAX_WEAPONS]; // Sound made when weapon starts firing. zero for no sound -intptr_t *aplWeaponFireSound[MAX_WEAPONS]; // Sound made when firing (each time for automatic) -intptr_t *aplWeaponSound2Time[MAX_WEAPONS]; // Alternate sound time -intptr_t *aplWeaponSound2Sound[MAX_WEAPONS]; // Alternate sound sound ID -intptr_t *aplWeaponReloadSound1[MAX_WEAPONS]; // Sound of magazine being removed -intptr_t *aplWeaponReloadSound2[MAX_WEAPONS]; // Sound of magazine being inserted -intptr_t *aplWeaponSelectSound[MAX_WEAPONS]; // Sound of weapon being selected -intptr_t *aplWeaponFlashColor[MAX_WEAPONS]; // Muzzle flash color - -int32_t g_iReturnVarID=-1; // var ID of "RETURN" -int32_t g_iWeaponVarID=-1; // var ID of "WEAPON" -int32_t g_iWorksLikeVarID=-1; // var ID of "WORKSLIKE" -int32_t g_iZRangeVarID=-1; // var ID of "ZRANGE" -int32_t g_iAngRangeVarID=-1; // var ID of "ANGRANGE" -int32_t g_iAimAngleVarID=-1; // var ID of "AUTOAIMANGLE" -int32_t g_iLoTagID=-1; // var ID of "LOTAG" -int32_t g_iHiTagID=-1; // var ID of "HITAG" -int32_t g_iTextureID=-1; // var ID of "TEXTURE" -int32_t g_iThisActorID=-1; // var ID of "THISACTOR" -int32_t g_iSpriteVarID=-1; -int32_t g_iSectorVarID=-1; -int32_t g_iWallVarID=-1; -int32_t g_iPlayerVarID=-1; -int32_t g_iActorVarID=-1; - -intptr_t *actorLoadEventScrptr[MAXTILES]; - -intptr_t *apScriptGameEvent[MAXGAMEEVENTS]; -static intptr_t *g_parsingEventPtr=NULL; - -gamevar_t aGameVars[MAXGAMEVARS]; -gamearray_t aGameArrays[MAXGAMEARRAYS]; -int32_t g_gameVarCount=0; -int32_t g_gameArrayCount=0; - -extern int32_t qsetmode; - -char *textptr; -int32_t g_numCompilerErrors,g_numCompilerWarnings; - -extern char *g_gameNamePtr; -extern char *g_defNamePtr; - -extern int32_t g_maxSoundPos; - -enum ScriptLabel_t -{ - LABEL_ANY = -1, - LABEL_DEFINE = 1, - LABEL_STATE = 2, - LABEL_ACTOR = 4, - LABEL_ACTION = 8, - LABEL_AI = 16, - LABEL_MOVE = 32, -}; - -static const char *LabelTypeText[] = -{ - "define", - "state", - "actor", - "action", - "ai", - "move" -}; - -static const char *C_GetLabelType(int32_t type) -{ - int32_t i; - char x[64]; - - x[0] = 0; - for (i=0; i<6; i++) - { - if (!(type & (1<pals - "sound", // 15 plays a sound that was defined with definesound - "fall", // 16 causes actor to fall to sector floor height - "state", // 17 begins defining a state if used outside a state or actor, otherwise calls a state - "ends", // 18 ends defining a state - "define", // 19 defines a value - "return", // 20 - "ifai", // 21 checks if actor is currently performing a specific ai function - "killit", // 22 kills an actor - "addweapon", // 23 adds a weapon to the closest player - "ai", // 24 sets an ai function to be used by an actor - "addphealth", // 25 adds health to the player - "ifdead", // 26 checks if actor is dead - "ifsquished", // 27 checks if actor has been squished - "sizeto", // 28 gradually increases actor size until it matches parameters given - "{", // 29 used to indicate segments of code - "}", // 30 used to indicate segments of code - "spawn", // 31 spawns an actor - "move", // 32 - "ifwasweapon", // 33 - "ifaction", // 34 - "ifactioncount", // 35 - "resetactioncount", // 36 - "debris", // 37 - "pstomp", // 38 - "", // 39 was previously used to define the start of a comment block - "cstat", // 40 - "ifmove", // 41 - "resetplayer", // 42 - "ifonwater", // 43 - "ifinwater", // 44 - "ifcanshoottarget", // 45 - "ifcount", // 46 - "resetcount", // 47 - "addinventory", // 48 - "ifactornotstayput", // 49 - "hitradius", // 50 - "ifp", // 51 - "count", // 52 - "ifactor", // 53 - "music", // 54 - "include", // 55 - "ifstrength", // 56 - "definesound", // 57 - "guts", // 58 - "ifspawnedby", // 59 - "gamestartup", // 60 - "wackplayer", // 61 - "ifgapzl", // 62 - "ifhitspace", // 63 - "ifoutside", // 64 - "ifmultiplayer", // 65 - "operate", // 66 - "ifinspace", // 67 - "debug", // 68 - "endofgame", // 69 - "ifbulletnear", // 70 - "ifrespawn", // 71 - "iffloordistl", // 72 - "ifceilingdistl", // 73 - "spritepal", // 74 - "ifpinventory", // 75 - "betaname", // 76 - "cactor", // 77 - "ifphealthl", // 78 - "definequote", // 79 - "quote", // 80 - "ifinouterspace", // 81 - "ifnotmoving", // 82 - "respawnhitag", // 83 - "tip", // 84 - "ifspritepal", // 85 - "money", // 86 - "soundonce", // 87 - "addkills", // 88 - "stopsound", // 89 - "ifawayfromwall", // 90 - "ifcanseetarget", // 91 - "globalsound", // 92 - "lotsofglass", // 93 - "ifgotweaponce", // 94 - "getlastpal", // 95 - "pkick", // 96 - "mikesnd", // 97 - "useractor", // 98 - "sizeat", // 99 - "addstrength", // 100 [#] - "cstator", // 101 - "mail", // 102 - "paper", // 103 - "tossweapon", // 104 - "sleeptime", // 105 - "nullop", // 106 - "definevolumename", // 107 - "defineskillname", // 108 - "ifnosounds", // 109 - "clipdist", // 110 - "ifangdiffl", // 111 - "gamevar", // 112 - "ifvarl", // 113 - "ifvarg", // 114 - "setvarvar", // 115 - "setvar", // 116 - "addvarvar", // 117 - "addvar", // 118 - "ifvarvarl", // 119 - "ifvarvarg", // 120 - "addlogvar", // 121 - "addlog", // 122 - "onevent", // 123 - "endevent", // 124 - "ifvare", // 125 - "ifvarvare", // 126 - "spgetlotag", // 127 - "spgethitag", // 128 - "sectgetlotag", // 129 - "sectgethitag", // 130 - "ifsound", // 131 - "gettexturefloor", // 132 - "gettextureceiling", // 133 - "inittimer", // 134 - "starttrack", // 135 - "randvar", // 136 - "enhanced", // 137 - "getangletotarget", // 138 - "getactorangle", // 139 - "setactorangle", // 140 - "mulvar", // 141 - "mulvarvar", // 142 - "divvar", // 143 - "divvarvar", // 144 - "modvar", // 145 - "modvarvar", // 146 - "andvar", // 147 - "andvarvar", // 148 - "orvar", // 149 - "orvarvar", // 150 - "getplayerangle", // 151 - "setplayerangle", // 152 - "lockplayer", // 153 - "setsector", // 154 - "getsector", // 155 - "setactor", // 156 - "getactor", // 157 - "setwall", // 158 - "getwall", // 159 - "findnearactor", // 160 - "findnearactorvar", // 161 - "setactorvar", // 162 - "getactorvar", // 163 - "espawn", // 164 - "getplayer", // 165 - "setplayer", // 166 - "sqrt", // 167 - "eventloadactor", // 168 - "espawnvar", // 169 - "getuserdef", // 170 - "setuserdef", // 171 - "subvarvar", // 172 - "subvar", // 173 - "ifvarn", // 174 - "ifvarvarn", // 175 - "ifvarand", // 176 - "ifvarvarand", // 177 - "myos", // 178 - "myospal", // 179 - "displayrand", // 180 - "sin", // 181 - "xorvarvar", // 182 - "xorvar", // 183 - "randvarvar", // 184 - "myosx", // 185 - "myospalx", // 186 - "gmaxammo", // 187 - "smaxammo", // 188 - "startlevel", // 189 - "eshoot", // 190 - "qspawn", // 191 - "rotatesprite", // 192 - "defineprojectile", // 193 - "spriteshadow", // 194 - "cos", // 195 - "eshootvar", // 196 - "findnearactor3d", // 197 - "findnearactor3dvar", // 198 - "flash", // 199 - "qspawnvar", // 200 - "eqspawn", // 201 - "eqspawnvar", // 202 - "minitext", // 203 - "gametext", // 204 - "digitalnumber", // 205 - "addweaponvar", // 206 - "setprojectile", // 207 - "angoff", // 208 - "updatesector", // 209 - "insertspriteq", // 210 - "angoffvar", // 211 - "whilevarn", // 212 - "switch", // 213 - "case", // 214 - "default", // 215 - "endswitch", // 216 - "shootvar", // 217 - "soundvar", // 218 - "findplayer", // 219 - "findotherplayer", // 220 - "activatebysector", // 221 sectnum, spriteid - "operatesectors", // 222 sectnum, spriteid - "operaterespawns", // 223 lotag - "operateactivators", // 224 lotag, player index - "operatemasterswitches", // 225 lotag - "checkactivatormotion", // 226 lotag - "zshoot", // 227 zvar projnum - "dist", // 228 sprite1 sprite2 - "ldist", // 229 sprite1 sprite2 - "shiftvarl", // 230 - "shiftvarr", // 231 - "spritenvg", // 232 - "getangle", // 233 - "whilevarvarn", // 234 - "hitscan", // 235 - "time", // 236 - "getplayervar", // 237 - "setplayervar", // 238 - "mulscale", // 239 - "setaspect", // 240 - "ezshoot", // 241 - "spritenoshade", // 242 - "movesprite", // 243 - "checkavailweapon", // 244 - "soundoncevar", // 245 - "updatesectorz", // 246 - "stopallsounds", // 247 - "ssp", // 248 - "stopsoundvar", // 249 - "displayrandvar", // 250 - "displayrandvarvar", // 251 - "checkavailinven", // 252 - "globalsoundvar", // 253 - "guniqhudid", // 254 - "getprojectile", // 255 - "getthisprojectile", // 256 - "setthisprojectile", // 257 - "definecheat", // 258 - "cheatkeys", // 259 - "userquote", // 260 - "precache", // 261 - "definegamefuncname", // 262 - "redefinequote", // 263 - "qsprintf", // 264 - "getpname", // 265 - "qstrcat", // 266 - "qstrcpy", // 267 - "setsprite", // 268 - "rotatepoint", // 269 - "dragpoint", // 270 - "getzrange", // 271 - "changespritestat", // 272 - "getceilzofslope", // 273 - "getflorzofslope", // 274 - "neartag", // 275 - "definegametype", // 276 - "changespritesect", // 277 - "spriteflags", // 278 - "savegamevar", // 279 - "readgamevar", // 280 - "findnearsprite", // 281 - "findnearspritevar", // 282 - "findnearsprite3d", // 283 - "findnearsprite3dvar", // 284 - "dynamicremap", // 285 - "setinput", // 286 - "getinput", // 287 - "save", // 288 - "cansee", // 289 - "canseespr", // 290 - "findnearactorz", // 291 - "findnearactorzvar", // 292 - "findnearspritez", // 293 - "findnearspritezvar", // 294 - "zshootvar", // 295 - "ezshootvar", // 296 - "getcurraddress", // 297 - "jump", // 298 - "qstrlen", // 299 - "getincangle", // 300 - "quake", // 301 - "showview", // 302 - "headspritestat", // 303 - "prevspritestat", // 304 - "nextspritestat", // 305 - "headspritesect", // 306 - "prevspritesect", // 307 - "nextspritesect", // 308 - "getkeyname", // 309 - "qsubstr", // 310 - "gametextz", // 311 - "digitalnumberz", // 312 - "spritenopal", // 313 - "hitradiusvar", // 314 - "rotatesprite16", // 315 - "gamearray", // 316 - "setarray", // 317 - "resizearray", // 318 - "writearraytofile", // 319 - "readarrayfromfile", // 320 - "starttrackvar", // 321 - "qgetsysstr", // 322 - "getticks", // 323 - "gettspr", // 324 - "settspr", // 325 - "savemapstate", // 326 - "loadmapstate", // 327 - "clearmapstate", // 328 - "scriptsize", // 329 - "setgamename", // 330 - "cmenu", // 331 - "gettimedate", // 332 - "activatecheat", // 333 - "setgamepalette", // 334 - "setdefname", // 335 - "setcfgname", // 336 - "ifvaror", // 337 - "ifvarvaror", // 338 - "ifvarxor", // 339 - "ifvarvarxor", // 340 - "ifvareither", // 341 - "ifvarvareither", // 342 - "getarraysize", // 343 - "savenn", // 344 - "copy", // 345 - "", // 346 internal inversion function - "sectorofwall", // 347 - "qstrncat", // 348 - "ifactorsound", // 349 - "stopactorsound", // 350 - "ifclient", // 351 - "ifserver", // 352 - "sectsetinterpolation", // 353 - "sectclearinterpolation", // 354 - "clipmove", // 355 - "lineintersect", // 356 - "rayintersect", // 357 - "calchypotenuse", // 358 - "clipmovenoslide", // 359 - "" -}; - -const memberlabel_t SectorLabels[]= -{ - { "wallptr", SECTOR_WALLPTR, 0, 0 }, - { "wallnum", SECTOR_WALLNUM, 0, 0 }, - { "ceilingz", SECTOR_CEILINGZ, 0, 0 }, - { "floorz", SECTOR_FLOORZ, 0, 0 }, - { "ceilingstat", SECTOR_CEILINGSTAT, 0, 0 }, - { "floorstat", SECTOR_FLOORSTAT, 0, 0 }, - { "ceilingpicnum", SECTOR_CEILINGPICNUM, 0, 0 }, - { "ceilingslope", SECTOR_CEILINGSLOPE, 0, 0 }, - { "ceilingshade", SECTOR_CEILINGSHADE, 0, 0 }, - { "ceilingpal", SECTOR_CEILINGPAL, 0, 0 }, - { "ceilingxpanning", SECTOR_CEILINGXPANNING, 0, 0 }, - { "ceilingypanning", SECTOR_CEILINGYPANNING, 0, 0 }, - { "floorpicnum", SECTOR_FLOORPICNUM, 0, 0 }, - { "floorslope", SECTOR_FLOORSLOPE, 0, 0 }, - { "floorshade", SECTOR_FLOORSHADE, 0, 0 }, - { "floorpal", SECTOR_FLOORPAL, 0, 0 }, - { "floorxpanning", SECTOR_FLOORXPANNING, 0, 0 }, - { "floorypanning", SECTOR_FLOORYPANNING, 0, 0 }, - { "visibility", SECTOR_VISIBILITY, 0, 0 }, -// { "filler", SECTOR_ALIGNTO, 0, 0 }, - { "alignto", SECTOR_ALIGNTO, 0, 0 }, // aka filler, not used - { "lotag", SECTOR_LOTAG, 0, 0 }, - { "hitag", SECTOR_HITAG, 0, 0 }, - { "extra", SECTOR_EXTRA, 0, 0 }, - { "", -1, 0, 0 } // END OF LIST -}; - -const memberlabel_t WallLabels[]= -{ - { "x", WALL_X, 0, 0 }, - { "y", WALL_Y, 0, 0 }, - { "point2", WALL_POINT2, 0, 0 }, - { "nextwall", WALL_NEXTWALL, 0, 0 }, - { "nextsector", WALL_NEXTSECTOR, 0, 0 }, - { "cstat", WALL_CSTAT, 0, 0 }, - { "picnum", WALL_PICNUM, 0, 0 }, - { "overpicnum", WALL_OVERPICNUM, 0, 0 }, - { "shade", WALL_SHADE, 0, 0 }, - { "pal", WALL_PAL, 0, 0 }, - { "xrepeat", WALL_XREPEAT, 0, 0 }, - { "yrepeat", WALL_YREPEAT, 0, 0 }, - { "xpanning", WALL_XPANNING, 0, 0 }, - { "ypanning", WALL_YPANNING, 0, 0 }, - { "lotag", WALL_LOTAG, 0, 0 }, - { "hitag", WALL_HITAG, 0, 0 }, - { "extra", WALL_EXTRA, 0, 0 }, - { "", -1, 0, 0 } // END OF LIST -}; - -const memberlabel_t ActorLabels[]= -{ - { "x", ACTOR_X, 0, 0 }, - { "y", ACTOR_Y, 0, 0 }, - { "z", ACTOR_Z, 0, 0 }, - { "cstat", ACTOR_CSTAT, 0, 0 }, - { "picnum", ACTOR_PICNUM, 0, 0 }, - { "shade", ACTOR_SHADE, 0, 0 }, - { "pal", ACTOR_PAL, 0, 0 }, - { "clipdist", ACTOR_CLIPDIST, 0, 0 }, -// { "filler", ACTOR_DETAIL, 0, 0 }, - { "detail", ACTOR_DETAIL, 0, 0 }, // aka filler, not used - { "xrepeat", ACTOR_XREPEAT, 0, 0 }, - { "yrepeat", ACTOR_YREPEAT, 0, 0 }, - { "xoffset", ACTOR_XOFFSET, 0, 0 }, - { "yoffset", ACTOR_YOFFSET, 0, 0 }, - { "sectnum", ACTOR_SECTNUM, 0, 0 }, - { "statnum", ACTOR_STATNUM, 0, 0 }, - { "ang", ACTOR_ANG, 0, 0 }, - { "owner", ACTOR_OWNER, 0, 0 }, - { "xvel", ACTOR_XVEL, 0, 0 }, - { "yvel", ACTOR_YVEL, 0, 0 }, - { "zvel", ACTOR_ZVEL, 0, 0 }, - { "lotag", ACTOR_LOTAG, 0, 0 }, - { "hitag", ACTOR_HITAG, 0, 0 }, - { "extra", ACTOR_EXTRA, 0, 0 }, - - // ActorExtra labels... - { "htcgg", ACTOR_HTCGG, 0, 0 }, - { "htpicnum", ACTOR_HTPICNUM, 0, 0 }, - { "htang", ACTOR_HTANG, 0, 0 }, - { "htextra", ACTOR_HTEXTRA, 0, 0 }, - { "htowner", ACTOR_HTOWNER, 0, 0 }, - { "htmovflag", ACTOR_HTMOVFLAG, 0, 0 }, - { "httempang", ACTOR_HTTEMPANG, 0, 0 }, - { "htactorstayput", ACTOR_HTACTORSTAYPUT, 0, 0 }, - { "htdispicnum", ACTOR_HTDISPICNUM, 0, 0 }, - { "httimetosleep", ACTOR_HTTIMETOSLEEP, 0, 0 }, - { "htfloorz", ACTOR_HTFLOORZ, 0, 0 }, - { "htceilingz", ACTOR_HTCEILINGZ, 0, 0 }, - { "htlastvx", ACTOR_HTLASTVX, 0, 0 }, - { "htlastvy", ACTOR_HTLASTVY, 0, 0 }, - { "htbposx", ACTOR_HTBPOSX, 0, 0 }, - { "htbposy", ACTOR_HTBPOSY, 0, 0 }, - { "htbposz", ACTOR_HTBPOSZ, 0, 0 }, - { "htg_t", ACTOR_HTG_T, LABEL_HASPARM2, 10 }, - - // model flags - - { "angoff", ACTOR_ANGOFF, 0, 0 }, - { "pitch", ACTOR_PITCH, 0, 0 }, - { "roll", ACTOR_ROLL, 0, 0 }, - { "mdxoff", ACTOR_MDXOFF, 0, 0 }, - { "mdyoff", ACTOR_MDYOFF, 0, 0 }, - { "mdzoff", ACTOR_MDZOFF, 0, 0 }, - { "mdflags", ACTOR_MDFLAGS, 0, 0 }, - { "xpanning", ACTOR_XPANNING, 0, 0 }, - { "ypanning", ACTOR_YPANNING, 0, 0 }, - - { "htflags", ACTOR_HTFLAGS, 0, 0 }, - - { "alpha", ACTOR_ALPHA, 0, 0 }, - - { "", -1, 0, 0 } // END OF LIST -}; - -const memberlabel_t TsprLabels[]= -{ - // tsprite access - - { "tsprx", ACTOR_X, 0, 0 }, - { "tspry", ACTOR_Y, 0, 0 }, - { "tsprz", ACTOR_Z, 0, 0 }, - { "tsprcstat", ACTOR_CSTAT, 0, 0 }, - { "tsprpicnum", ACTOR_PICNUM, 0, 0 }, - { "tsprshade", ACTOR_SHADE, 0, 0 }, - { "tsprpal", ACTOR_PAL, 0, 0 }, - { "tsprclipdist", ACTOR_CLIPDIST, 0, 0 }, -// { "tsprfiller", ACTOR_DETAIL, 0, 0 }, - { "tsprdetail", ACTOR_DETAIL, 0, 0 }, // aka filler, not used - { "tsprxrepeat", ACTOR_XREPEAT, 0, 0 }, - { "tspryrepeat", ACTOR_YREPEAT, 0, 0 }, - { "tsprxoffset", ACTOR_XOFFSET, 0, 0 }, - { "tspryoffset", ACTOR_YOFFSET, 0, 0 }, - { "tsprsectnum", ACTOR_SECTNUM, 0, 0 }, - { "tsprstatnum", ACTOR_STATNUM, 0, 0 }, - { "tsprang", ACTOR_ANG, 0, 0 }, - { "tsprowner", ACTOR_OWNER, 0, 0 }, -#if 1 - { "tsprxvel", ACTOR_XVEL, 0, 0 }, - { "tspryvel", ACTOR_YVEL, 0, 0 }, - { "tsprzvel", ACTOR_ZVEL, 0, 0 }, - { "tsprlotag", ACTOR_LOTAG, 0, 0 }, - { "tsprhitag", ACTOR_HITAG, 0, 0 }, - { "tsprextra", ACTOR_EXTRA, 0, 0 }, -#endif - - { "", -1, 0, 0 } // END OF LIST -}; - -const memberlabel_t PlayerLabels[]= -{ - { "zoom", PLAYER_ZOOM, 0, 0 }, - { "exitx", PLAYER_EXITX, 0, 0 }, - { "exity", PLAYER_EXITY, 0, 0 }, - { "loogiex", PLAYER_LOOGIEX, LABEL_HASPARM2, 64 }, - { "loogiey", PLAYER_LOOGIEY, LABEL_HASPARM2, 64 }, - { "numloogs", PLAYER_NUMLOOGS, 0, 0 }, - { "loogcnt", PLAYER_LOOGCNT, 0, 0 }, - { "posx", PLAYER_POSX, 0, 0 }, - { "posy", PLAYER_POSY, 0, 0 }, - { "posz", PLAYER_POSZ, 0, 0 }, - { "horiz", PLAYER_HORIZ, 0, 0 }, - { "ohoriz", PLAYER_OHORIZ, 0, 0 }, - { "ohorizoff", PLAYER_OHORIZOFF, 0, 0 }, - { "invdisptime", PLAYER_INVDISPTIME, 0, 0 }, - { "bobposx", PLAYER_BOBPOSX, 0, 0 }, - { "bobposy", PLAYER_BOBPOSY, 0, 0 }, - { "oposx", PLAYER_OPOSX, 0, 0 }, - { "oposy", PLAYER_OPOSY, 0, 0 }, - { "oposz", PLAYER_OPOSZ, 0, 0 }, - { "pyoff", PLAYER_PYOFF, 0, 0 }, - { "opyoff", PLAYER_OPYOFF, 0, 0 }, - { "posxv", PLAYER_POSXV, 0, 0 }, - { "posyv", PLAYER_POSYV, 0, 0 }, - { "poszv", PLAYER_POSZV, 0, 0 }, - { "last_pissed_time", PLAYER_LAST_PISSED_TIME, 0, 0 }, - { "truefz", PLAYER_TRUEFZ, 0, 0 }, - { "truecz", PLAYER_TRUECZ, 0, 0 }, - { "player_par", PLAYER_PLAYER_PAR, 0, 0 }, - { "visibility", PLAYER_VISIBILITY, 0, 0 }, - { "bobcounter", PLAYER_BOBCOUNTER, 0, 0 }, - { "weapon_sway", PLAYER_WEAPON_SWAY, 0, 0 }, - { "pals_time", PLAYER_PALS_TIME, 0, 0 }, - { "randomflamex", PLAYER_RANDOMFLAMEX, 0, 0 }, - { "crack_time", PLAYER_CRACK_TIME, 0, 0 }, - { "aim_mode", PLAYER_AIM_MODE, 0, 0 }, - { "ang", PLAYER_ANG, 0, 0 }, - { "oang", PLAYER_OANG, 0, 0 }, - { "angvel", PLAYER_ANGVEL, 0, 0 }, - { "cursectnum", PLAYER_CURSECTNUM, 0, 0 }, - { "look_ang", PLAYER_LOOK_ANG, 0, 0 }, - { "last_extra", PLAYER_LAST_EXTRA, 0, 0 }, - { "subweapon", PLAYER_SUBWEAPON, 0, 0 }, - { "ammo_amount", PLAYER_AMMO_AMOUNT, LABEL_HASPARM2, MAX_WEAPONS }, - { "wackedbyactor", PLAYER_WACKEDBYACTOR, 0, 0 }, - { "frag", PLAYER_FRAG, 0, 0 }, - { "fraggedself", PLAYER_FRAGGEDSELF, 0, 0 }, - { "curr_weapon", PLAYER_CURR_WEAPON, 0, 0 }, - { "last_weapon", PLAYER_LAST_WEAPON, 0, 0 }, - { "tipincs", PLAYER_TIPINCS, 0, 0 }, - { "horizoff", PLAYER_HORIZOFF, 0, 0 }, - { "wantweaponfire", PLAYER_WANTWEAPONFIRE, 0, 0 }, - { "holoduke_amount", PLAYER_HOLODUKE_AMOUNT, 0, 0 }, - { "newowner", PLAYER_NEWOWNER, 0, 0 }, - { "hurt_delay", PLAYER_HURT_DELAY, 0, 0 }, - { "hbomb_hold_delay", PLAYER_HBOMB_HOLD_DELAY, 0, 0 }, - { "jumping_counter", PLAYER_JUMPING_COUNTER, 0, 0 }, - { "airleft", PLAYER_AIRLEFT, 0, 0 }, - { "knee_incs", PLAYER_KNEE_INCS, 0, 0 }, - { "access_incs", PLAYER_ACCESS_INCS, 0, 0 }, - { "fta", PLAYER_FTA, 0, 0 }, - { "ftq", PLAYER_FTQ, 0, 0 }, - { "access_wallnum", PLAYER_ACCESS_WALLNUM, 0, 0 }, - { "access_spritenum", PLAYER_ACCESS_SPRITENUM, 0, 0 }, - { "kickback_pic", PLAYER_KICKBACK_PIC, 0, 0 }, - { "got_access", PLAYER_GOT_ACCESS, 0, 0 }, - { "weapon_ang", PLAYER_WEAPON_ANG, 0, 0 }, - { "firstaid_amount", PLAYER_FIRSTAID_AMOUNT, 0, 0 }, - { "somethingonplayer", PLAYER_SOMETHINGONPLAYER, 0, 0 }, - { "on_crane", PLAYER_ON_CRANE, 0, 0 }, - { "i", PLAYER_I, 0, 0 }, - { "one_parallax_sectnum", PLAYER_ONE_PARALLAX_SECTNUM, 0, 0 }, - { "over_shoulder_on", PLAYER_OVER_SHOULDER_ON, 0, 0 }, - { "random_club_frame", PLAYER_RANDOM_CLUB_FRAME, 0, 0 }, - { "fist_incs", PLAYER_FIST_INCS, 0, 0 }, - { "one_eighty_count", PLAYER_ONE_EIGHTY_COUNT, 0, 0 }, - { "cheat_phase", PLAYER_CHEAT_PHASE, 0, 0 }, - { "dummyplayersprite", PLAYER_DUMMYPLAYERSPRITE, 0, 0 }, - { "extra_extra8", PLAYER_EXTRA_EXTRA8, 0, 0 }, - { "quick_kick", PLAYER_QUICK_KICK, 0, 0 }, - { "heat_amount", PLAYER_HEAT_AMOUNT, 0, 0 }, - { "actorsqu", PLAYER_ACTORSQU, 0, 0 }, - { "timebeforeexit", PLAYER_TIMEBEFOREEXIT, 0, 0 }, - { "customexitsound", PLAYER_CUSTOMEXITSOUND, 0, 0 }, - { "weaprecs", PLAYER_WEAPRECS, LABEL_HASPARM2, MAX_WEAPONS }, - { "weapreccnt", PLAYER_WEAPRECCNT, 0, 0 }, - { "interface_toggle_flag", PLAYER_INTERFACE_TOGGLE_FLAG, 0, 0 }, - { "rotscrnang", PLAYER_ROTSCRNANG, 0, 0 }, - { "dead_flag", PLAYER_DEAD_FLAG, 0, 0 }, - { "show_empty_weapon", PLAYER_SHOW_EMPTY_WEAPON, 0, 0 }, - { "scuba_amount", PLAYER_SCUBA_AMOUNT, 0, 0 }, - { "jetpack_amount", PLAYER_JETPACK_AMOUNT, 0, 0 }, - { "steroids_amount", PLAYER_STEROIDS_AMOUNT, 0, 0 }, - { "shield_amount", PLAYER_SHIELD_AMOUNT, 0, 0 }, - { "holoduke_on", PLAYER_HOLODUKE_ON, 0, 0 }, - { "pycount", PLAYER_PYCOUNT, 0, 0 }, - { "weapon_pos", PLAYER_WEAPON_POS, 0, 0 }, - { "frag_ps", PLAYER_FRAG_PS, 0, 0 }, - { "transporter_hold", PLAYER_TRANSPORTER_HOLD, 0, 0 }, - { "last_full_weapon", PLAYER_LAST_FULL_WEAPON, 0, 0 }, - { "footprintshade", PLAYER_FOOTPRINTSHADE, 0, 0 }, - { "boot_amount", PLAYER_BOOT_AMOUNT, 0, 0 }, - { "scream_voice", PLAYER_SCREAM_VOICE, 0, 0 }, - { "gm", PLAYER_GM, 0, 0 }, - { "on_warping_sector", PLAYER_ON_WARPING_SECTOR, 0, 0 }, - { "footprintcount", PLAYER_FOOTPRINTCOUNT, 0, 0 }, - { "hbomb_on", PLAYER_HBOMB_ON, 0, 0 }, - { "jumping_toggle", PLAYER_JUMPING_TOGGLE, 0, 0 }, - { "rapid_fire_hold", PLAYER_RAPID_FIRE_HOLD, 0, 0 }, - { "on_ground", PLAYER_ON_GROUND, 0, 0 }, - { "name", PLAYER_NAME, LABEL_ISSTRING, 32 }, - { "inven_icon", PLAYER_INVEN_ICON, 0, 0 }, - { "buttonpalette", PLAYER_BUTTONPALETTE, 0, 0 }, - { "jetpack_on", PLAYER_JETPACK_ON, 0, 0 }, - { "spritebridge", PLAYER_SPRITEBRIDGE, 0, 0 }, - { "lastrandomspot", PLAYER_LASTRANDOMSPOT, 0, 0 }, - { "scuba_on", PLAYER_SCUBA_ON, 0, 0 }, - { "footprintpal", PLAYER_FOOTPRINTPAL, 0, 0 }, - { "heat_on", PLAYER_HEAT_ON, 0, 0 }, - { "holster_weapon", PLAYER_HOLSTER_WEAPON, 0, 0 }, - { "falling_counter", PLAYER_FALLING_COUNTER, 0, 0 }, - { "gotweapon", PLAYER_GOTWEAPON, LABEL_HASPARM2, MAX_WEAPONS }, - { "refresh_inventory", PLAYER_REFRESH_INVENTORY, 0, 0 }, - { "palette", PLAYER_PALETTE, 0, 0 }, - { "toggle_key_flag", PLAYER_TOGGLE_KEY_FLAG, 0, 0 }, - { "knuckle_incs", PLAYER_KNUCKLE_INCS, 0, 0 }, - { "walking_snd_toggle", PLAYER_WALKING_SND_TOGGLE, 0, 0 }, - { "palookup", PLAYER_PALOOKUP, 0, 0 }, - { "hard_landing", PLAYER_HARD_LANDING, 0, 0 }, - { "max_secret_rooms", PLAYER_MAX_SECRET_ROOMS, 0, 0 }, - { "secret_rooms", PLAYER_SECRET_ROOMS, 0, 0 }, - { "pals", PLAYER_PALS, LABEL_HASPARM2, 3 }, - { "max_actors_killed", PLAYER_MAX_ACTORS_KILLED, 0, 0 }, - { "actors_killed", PLAYER_ACTORS_KILLED, 0, 0 }, - { "return_to_center", PLAYER_RETURN_TO_CENTER, 0, 0 }, - { "runspeed", PLAYER_RUNSPEED, 0, 0 }, - { "sbs", PLAYER_SBS, 0, 0 }, - { "reloading", PLAYER_RELOADING, 0, 0 }, - { "auto_aim", PLAYER_AUTO_AIM, 0, 0 }, - { "movement_lock", PLAYER_MOVEMENT_LOCK, 0, 0 }, - { "sound_pitch", PLAYER_SOUND_PITCH, 0, 0 }, - { "weaponswitch", PLAYER_WEAPONSWITCH, 0, 0 }, - { "team", PLAYER_TEAM, 0, 0 }, - { "max_player_health", PLAYER_MAX_PLAYER_HEALTH, 0, 0 }, - { "max_shield_amount", PLAYER_MAX_SHIELD_AMOUNT, 0, 0 }, - { "max_ammo_amount", PLAYER_MAX_AMMO_AMOUNT, LABEL_HASPARM2, MAX_WEAPONS }, - { "last_quick_kick", PLAYER_LAST_QUICK_KICK, 0, 0 }, - { "", -1, 0, 0 } // END OF LIST -}; - -const memberlabel_t ProjectileLabels[]= -{ - { "workslike", PROJ_WORKSLIKE, 0, 0 }, - { "spawns", PROJ_SPAWNS, 0, 0 }, - { "sxrepeat", PROJ_SXREPEAT, 0, 0 }, - { "syrepeat", PROJ_SYREPEAT, 0, 0 }, - { "sound", PROJ_SOUND, 0, 0 }, - { "isound", PROJ_ISOUND, 0, 0 }, - { "vel", PROJ_VEL, 0, 0 }, - { "extra", PROJ_EXTRA, 0, 0 }, - { "decal", PROJ_DECAL, 0, 0 }, - { "trail", PROJ_TRAIL, 0, 0 }, - { "txrepeat", PROJ_TXREPEAT, 0, 0 }, - { "tyrepeat", PROJ_TYREPEAT, 0, 0 }, - { "toffset", PROJ_TOFFSET, 0, 0 }, - { "tnum", PROJ_TNUM, 0, 0 }, - { "drop", PROJ_DROP, 0, 0 }, - { "cstat", PROJ_CSTAT, 0, 0 }, - { "clipdist", PROJ_CLIPDIST, 0, 0 }, - { "shade", PROJ_SHADE, 0, 0 }, - { "xrepeat", PROJ_XREPEAT, 0, 0 }, - { "yrepeat", PROJ_YREPEAT, 0, 0 }, - { "pal", PROJ_PAL, 0, 0 }, - { "extra_rand", PROJ_EXTRA_RAND, 0, 0 }, - { "hitradius", PROJ_HITRADIUS, 0, 0 }, - { "velmult", PROJ_VEL_MULT, 0, 0 }, - { "offset", PROJ_OFFSET, 0, 0 }, - { "bounces", PROJ_BOUNCES, 0, 0 }, - { "bsound", PROJ_BSOUND, 0, 0 }, - { "range", PROJ_RANGE, 0, 0 }, - { "flashcolor", PROJ_FLASH_COLOR, 0, 0 }, - { "", -1, 0, 0 } // END OF LIST -}; - -const memberlabel_t UserdefsLabels[]= -{ - // { "", 1, 0, 0 }, - { "god", USERDEFS_GOD, 0, 0 }, - { "warp_on", USERDEFS_WARP_ON, 0, 0 }, - { "cashman", USERDEFS_CASHMAN, 0, 0 }, - { "eog", USERDEFS_EOG, 0, 0 }, - { "showallmap", USERDEFS_SHOWALLMAP, 0, 0 }, - { "show_help", USERDEFS_SHOW_HELP, 0, 0 }, - { "scrollmode", USERDEFS_SCROLLMODE, 0, 0 }, - { "clipping", USERDEFS_CLIPPING, 0, 0 }, - { "user_name", USERDEFS_USER_NAME, LABEL_HASPARM2, MAXPLAYERS }, - { "ridecule", USERDEFS_RIDECULE, LABEL_HASPARM2 | LABEL_ISSTRING, 10 }, - { "savegame", USERDEFS_SAVEGAME, LABEL_HASPARM2 | LABEL_ISSTRING, 10 }, - { "pwlockout", USERDEFS_PWLOCKOUT, LABEL_ISSTRING, 128 }, - { "rtsname;", USERDEFS_RTSNAME, LABEL_ISSTRING, 128 }, - { "overhead_on", USERDEFS_OVERHEAD_ON, 0, 0 }, - { "last_overhead", USERDEFS_LAST_OVERHEAD, 0, 0 }, - { "showweapons", USERDEFS_SHOWWEAPONS, 0, 0 }, - - { "pause_on", USERDEFS_PAUSE_ON, 0, 0 }, - { "from_bonus", USERDEFS_FROM_BONUS, 0, 0 }, - { "camerasprite", USERDEFS_CAMERASPRITE, 0, 0 }, - { "last_camsprite", USERDEFS_LAST_CAMSPRITE, 0, 0 }, - { "last_level", USERDEFS_LAST_LEVEL, 0, 0 }, - { "secretlevel", USERDEFS_SECRETLEVEL, 0, 0 }, - - { "const_visibility", USERDEFS_CONST_VISIBILITY, 0, 0 }, - { "uw_framerate", USERDEFS_UW_FRAMERATE, 0, 0 }, - { "camera_time", USERDEFS_CAMERA_TIME, 0, 0 }, - { "folfvel", USERDEFS_FOLFVEL, 0, 0 }, - { "folavel", USERDEFS_FOLAVEL, 0, 0 }, - { "folx", USERDEFS_FOLX, 0, 0 }, - { "foly", USERDEFS_FOLY, 0, 0 }, - { "fola", USERDEFS_FOLA, 0, 0 }, - { "reccnt", USERDEFS_RECCNT, 0, 0 }, - - { "entered_name", USERDEFS_ENTERED_NAME, 0, 0 }, - { "screen_tilting", USERDEFS_SCREEN_TILTING, 0, 0 }, - { "shadows", USERDEFS_SHADOWS, 0, 0 }, - { "fta_on", USERDEFS_FTA_ON, 0, 0 }, - { "executions", USERDEFS_EXECUTIONS, 0, 0 }, - { "auto_run", USERDEFS_AUTO_RUN, 0, 0 }, - { "coords", USERDEFS_COORDS, 0, 0 }, - { "tickrate", USERDEFS_TICKRATE, 0, 0 }, - { "m_coop", USERDEFS_M_COOP, 0, 0 }, - { "coop", USERDEFS_COOP, 0, 0 }, - { "screen_size", USERDEFS_SCREEN_SIZE, 0, 0 }, - { "lockout", USERDEFS_LOCKOUT, 0, 0 }, - { "crosshair", USERDEFS_CROSSHAIR, 0, 0 }, - { "wchoice[MAXPLAYERS][MAX_WEAPONS]", USERDEFS_WCHOICE, 0, 0 }, - { "playerai", USERDEFS_PLAYERAI, 0, 0 }, - { "respawn_monsters", USERDEFS_RESPAWN_MONSTERS, 0, 0 }, - { "respawn_items", USERDEFS_RESPAWN_ITEMS, 0, 0 }, - { "respawn_inventory", USERDEFS_RESPAWN_INVENTORY, 0, 0 }, - { "recstat", USERDEFS_RECSTAT, 0, 0 }, - { "monsters_off", USERDEFS_MONSTERS_OFF, 0, 0 }, - { "brightness", USERDEFS_BRIGHTNESS, 0, 0 }, - { "m_respawn_items", USERDEFS_M_RESPAWN_ITEMS, 0, 0 }, - { "m_respawn_monsters", USERDEFS_M_RESPAWN_MONSTERS, 0, 0 }, - { "m_respawn_inventory", USERDEFS_M_RESPAWN_INVENTORY, 0, 0 }, - { "m_recstat", USERDEFS_M_RECSTAT, 0, 0 }, - { "m_monsters_off", USERDEFS_M_MONSTERS_OFF, 0, 0 }, - { "detail", USERDEFS_DETAIL, 0, 0 }, - { "m_ffire", USERDEFS_M_FFIRE, 0, 0 }, - { "ffire", USERDEFS_FFIRE, 0, 0 }, - { "m_player_skill", USERDEFS_M_PLAYER_SKILL, 0, 0 }, - { "m_level_number", USERDEFS_M_LEVEL_NUMBER, 0, 0 }, - { "m_volume_number", USERDEFS_M_VOLUME_NUMBER, 0, 0 }, - { "multimode", USERDEFS_MULTIMODE, 0, 0 }, - { "player_skill", USERDEFS_PLAYER_SKILL, 0, 0 }, - { "level_number", USERDEFS_LEVEL_NUMBER, 0, 0 }, - { "volume_number", USERDEFS_VOLUME_NUMBER, 0, 0 }, - { "m_marker", USERDEFS_M_MARKER, 0, 0 }, - { "marker", USERDEFS_MARKER, 0, 0 }, - { "mouseflip", USERDEFS_MOUSEFLIP, 0, 0 }, - { "statusbarscale", USERDEFS_STATUSBARSCALE, 0, 0 }, - { "drawweapon", USERDEFS_DRAWWEAPON, 0, 0 }, - { "mouseaiming", USERDEFS_MOUSEAIMING, 0, 0 }, - { "weaponswitch", USERDEFS_WEAPONSWITCH, 0, 0 }, - { "democams", USERDEFS_DEMOCAMS, 0, 0 }, - { "color", USERDEFS_COLOR, 0, 0 }, - { "msgdisptime", USERDEFS_MSGDISPTIME, 0, 0 }, - { "statusbarmode", USERDEFS_STATUSBARMODE, 0, 0 }, - { "m_noexits", USERDEFS_M_NOEXITS, 0, 0 }, - { "noexits", USERDEFS_NOEXITS, 0, 0 }, - { "autovote", USERDEFS_AUTOVOTE, 0, 0 }, - { "automsg", USERDEFS_AUTOMSG, 0, 0 }, - { "idplayers", USERDEFS_IDPLAYERS, 0, 0 }, - { "team", USERDEFS_TEAM, 0, 0 }, - { "viewbob", USERDEFS_VIEWBOB, 0, 0 }, - { "weaponsway", USERDEFS_WEAPONSWAY, 0, 0 }, - { "angleinterpolation", USERDEFS_ANGLEINTERPOLATION, 0, 0 }, - { "obituaries", USERDEFS_OBITUARIES, 0, 0 }, - { "levelstats", USERDEFS_LEVELSTATS, 0, 0 }, - { "crosshairscale", USERDEFS_CROSSHAIRSCALE, 0, 0 }, - { "althud", USERDEFS_ALTHUD, 0, 0 }, - { "display_bonus_screen", USERDEFS_DISPLAY_BONUS_SCREEN, 0, 0 }, - { "show_level_text", USERDEFS_SHOW_LEVEL_TEXT, 0, 0 }, - { "weaponscale", USERDEFS_WEAPONSCALE, 0, 0 }, - { "textscale", USERDEFS_TEXTSCALE, 0, 0 }, - { "", -1, 0, 0 } // END OF LIST -}; - -const memberlabel_t InputLabels[]= -{ - { "avel", INPUT_AVEL, 0, 0 }, - { "horz", INPUT_HORZ, 0, 0 }, - { "fvel", INPUT_FVEL, 0, 0 }, - { "svel", INPUT_SVEL, 0, 0 }, - { "bits", INPUT_BITS, 0, 0 }, - { "extbits", INPUT_EXTBITS, 0, 0 }, - { "", -1, 0, 0 } // END OF LIST -}; - -char *bitptr; // pointer to bitmap of which bytecode positions contain pointers -#define BITPTR_POINTER 1 - -hashtable_t h_gamevars = { MAXGAMEVARS>>1, NULL }; -hashtable_t h_arrays = { MAXGAMEARRAYS>>1, NULL }; -hashtable_t h_labels = { 11264>>1, NULL }; -hashtable_t h_keywords = { CON_END>>1, NULL }; - -hashtable_t sectorH = { SECTOR_END>>1, NULL }; -hashtable_t wallH = { WALL_END>>1, NULL }; -hashtable_t userdefH = { USERDEFS_END>>1, NULL }; - -hashtable_t projectileH = { PROJ_END>>1, NULL }; -hashtable_t playerH = { PLAYER_END>>1, NULL }; -hashtable_t inputH = { INPUT_END>>1, NULL }; -hashtable_t actorH = { ACTOR_END>>1, NULL }; -hashtable_t tspriteH = { ACTOR_END>>1, NULL }; - -void inithashnames(); -void freehashnames(); - -void C_InitHashes() -{ - int32_t i; - - hash_init(&h_gamevars); - hash_init(&h_arrays); - hash_init(&h_labels); - inithashnames(); - - hash_init(&h_keywords); - hash_init(§orH); - hash_init(&wallH); - hash_init(&userdefH); - hash_init(&projectileH); - hash_init(&playerH); - hash_init(&inputH); - hash_init(&actorH); - hash_init(&tspriteH); - - g_scriptLastKeyword = NUMKEYWORDS-1; - // determine last CON keyword for backward compatibility with older mods - if (g_scriptDateVersion < g_keywdate[NUMKEYWDATES-1].date) - { - for (i=NUMKEYWDATES-1; i>=0; i--) - { - if (g_scriptDateVersion >= g_keywdate[i].date) - { - g_scriptLastKeyword = g_keywdate[i].keyw; - break; - } - } - - if (i<0) - g_scriptLastKeyword = g_keywdate[0].keyw-1; // may be slightly imprecise - } - - for (i=g_scriptLastKeyword; i>=0; i--) hash_add(&h_keywords,keyw[i],i,0); - for (i=0; SectorLabels[i].lId >= 0; i++) hash_add(§orH,SectorLabels[i].name,i,0); - for (i=0; WallLabels[i].lId >= 0; i++) hash_add(&wallH,WallLabels[i].name,i,0); - for (i=0; UserdefsLabels[i].lId >= 0; i++) hash_add(&userdefH,UserdefsLabels[i].name,i,0); - for (i=0; ProjectileLabels[i].lId >= 0; i++) hash_add(&projectileH,ProjectileLabels[i].name,i,0); - for (i=0; PlayerLabels[i].lId >= 0; i++) hash_add(&playerH,PlayerLabels[i].name,i,0); - for (i=0; InputLabels[i].lId >= 0; i++) hash_add(&inputH,InputLabels[i].name,i,0); - for (i=0; ActorLabels[i].lId >= 0; i++) hash_add(&actorH,ActorLabels[i].name,i,0); - for (i=0; TsprLabels[i].lId >= 0; i++) hash_add(&tspriteH,TsprLabels[i].name,i,0); -} - -// "magic" number for { and }, overrides line number in compiled code for later detection -#define IFELSE_MAGIC 31337 -static int32_t g_ifElseAborted; - -static int32_t C_SetScriptSize(int32_t newsize) -{ - intptr_t oscriptPtr = (unsigned)(g_scriptPtr-script); - intptr_t ocaseScriptPtr = (unsigned)(g_caseScriptPtr-script); - intptr_t oparsingEventPtr = (unsigned)(g_parsingEventPtr-script); - intptr_t oparsingActorPtr = (unsigned)(g_parsingActorPtr-script); - intptr_t *newscript; - intptr_t i, j; - int32_t osize = g_scriptSize; - char *scriptptrs; - char *newbitptr; - - for (i=MAXSECTORS-1; i>=0; i--) - if (labelcode[i] && labeltype[i] != LABEL_DEFINE) - { - j = (intptr_t)labelcode[i]-(intptr_t)&script[0]; - labelcode[i] = (intptr_t)j; - } - - scriptptrs = Bcalloc(1, g_scriptSize * sizeof(uint8_t)); - - for (i=g_scriptSize-1; i>=0; i--) - { - if (bitptr[i>>3]&(BITPTR_POINTER<<(i&7))) - { - if ((intptr_t)script[i] < (intptr_t)&script[0] || (intptr_t)script[i] >= (intptr_t)&script[g_scriptSize]) - { - g_numCompilerErrors++; - initprintf("Internal compiler error at %"PRIdPTR" (0x%"PRIxPTR")\n",i,i); - } - - scriptptrs[i] = 1; - script[i] -= (intptr_t)&script[0]; - } - else scriptptrs[i] = 0; - } - - for (i=MAXTILES-1; i>=0; i--) - { - if (actorscrptr[i]) - { - j = (intptr_t)actorscrptr[i]-(intptr_t)&script[0]; - actorscrptr[i] = (intptr_t *)j; - } - - if (actorLoadEventScrptr[i]) - { - j = (intptr_t)actorLoadEventScrptr[i]-(intptr_t)&script[0]; - actorLoadEventScrptr[i] = (intptr_t *)j; - } - } - - for (i=MAXGAMEEVENTS-1; i>=0; i--) - if (apScriptGameEvent[i]) - { - j = (intptr_t)apScriptGameEvent[i]-(intptr_t)&script[0]; - apScriptGameEvent[i] = (intptr_t *)j; - } - - initprintf("Resizing code buffer to %d*%d bytes\n",newsize, (int32_t)sizeof(intptr_t)); - - newscript = (intptr_t *)Brealloc(script, newsize * sizeof(intptr_t)); - newbitptr = Bcalloc(1,(((newsize+7)>>3)+1) * sizeof(uint8_t)); - - if (newscript == NULL || newbitptr == NULL) - { - C_ReportError(-1); - initprintf("%s:%d: out of memory: Aborted (%ud)\n",g_szScriptFileName,g_lineNumber,(unsigned)(g_scriptPtr-script)); - initprintf("%s", tempbuf); - g_numCompilerErrors++; - return 1; - } - - if (newsize >= osize) - { - Bmemset(&newscript[0]+osize,0,(newsize-osize) * sizeof(uint8_t)); - Bmemcpy(newbitptr,bitptr,sizeof(uint8_t) *((osize+7)>>3)); - } - else - Bmemcpy(newbitptr,bitptr,sizeof(uint8_t) *((newsize+7)>>3)); - - Bfree(bitptr); - bitptr = newbitptr; - if (script != newscript) - { - initprintf("Relocating compiled code from to 0x%lx to 0x%lx\n", (unsigned long)script, (unsigned long)newscript); - script = newscript; - } - - g_scriptSize = newsize; - g_scriptPtr = (intptr_t *)(script+oscriptPtr); - - if (g_caseScriptPtr) - g_caseScriptPtr = (intptr_t *)(script+ocaseScriptPtr); - - if (g_parsingEventPtr) - g_parsingEventPtr = (intptr_t *)(script+oparsingEventPtr); - - if (g_parsingActorPtr) - g_parsingActorPtr = (intptr_t *)(script+oparsingActorPtr); - - for (i=MAXSECTORS-1; i>=0; i--) - { - if (labelcode[i] && labeltype[i] != LABEL_DEFINE) - { - j = (intptr_t)labelcode[i]+(intptr_t)&script[0]; - labelcode[i] = j; - } - } - - for (i=(((newsize>=osize)?osize:newsize))-1; i>=0; i--) - if (scriptptrs[i]) - { - j = (intptr_t)script[i]+(intptr_t)&script[0]; - script[i] = j; - } - - for (i=MAXTILES-1; i>=0; i--) - { - if (actorscrptr[i]) - { - j = (intptr_t)actorscrptr[i]+(intptr_t)&script[0]; - actorscrptr[i] = (intptr_t *)j; - } - if (actorLoadEventScrptr[i]) - { - j = (intptr_t)actorLoadEventScrptr[i]+(intptr_t)&script[0]; - actorLoadEventScrptr[i] = (intptr_t *)j; - } - } - - for (i=MAXGAMEEVENTS-1; i>=0; i--) - if (apScriptGameEvent[i]) - { - j = (intptr_t)apScriptGameEvent[i]+(intptr_t)&script[0]; - apScriptGameEvent[i] = (intptr_t *)j; - } - - Bfree(scriptptrs); - return 0; -} - -static inline int32_t ispecial(const char c) -{ - if (c == ' ' || c == 0x0d || c == '(' || c == ')' || - c == ',' || c == ';' || (c == 0x0a /*&& ++g_lineNumber*/)) - return 1; - - return 0; -} - -#define C_NextLine() while (*textptr != 0x0a && *textptr != 0x0d && *textptr != 0) textptr++ - -static int32_t C_SkipComments(void) -{ - do - { - switch (*textptr) - { - case '\n': - g_lineNumber++; - case ' ': - case '\t': - case '\r': - case 0x1a: - textptr++; - break; - case '/': - switch (textptr[1]) - { - case '/': // C++ style comment - if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug > 1) - initprintf("%s:%d: debug: got comment.\n",g_szScriptFileName,g_lineNumber); - C_NextLine(); - continue; - case '*': // beginning of a C style comment - if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug > 1) - initprintf("%s:%d: debug: got start of comment block.\n",g_szScriptFileName,g_lineNumber); - do - { - if (*textptr == '\n') - g_lineNumber++; - textptr++; - } - while (*textptr && (textptr[0] != '*' || textptr[1] != '/')); - - if (!*textptr) - { - if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug) - initprintf("%s:%d: debug: EOF in comment!\n",g_szScriptFileName,g_lineNumber); - C_ReportError(-1); - initprintf("%s:%d: error: found `/*' with no `*/'.\n",g_szScriptFileName,g_lineNumber); - g_parsingActorPtr = 0; g_processingState = g_numBraces = 0; - g_numCompilerErrors++; - continue; - } - - if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug > 1) - initprintf("%s:%d: debug: got end of comment block.\n",g_szScriptFileName,g_lineNumber); - - textptr+=2; - continue; - } - continue; - - default: - if (ispecial(*textptr)) - { - textptr++; - continue; - } - case 0: // EOF - return ((g_scriptPtr-script) > (g_scriptSize-32)) ? C_SetScriptSize(g_scriptSize<<1) : 0; - } - } - while (1); -} - -static void C_SetProjectile(int32_t lVar1, int32_t lLabelID, int32_t lVar2) -{ - switch (lLabelID) - { - case PROJ_WORKSLIKE: - ProjectileData[lVar1].workslike=lVar2; - break; - - case PROJ_SPAWNS: - ProjectileData[lVar1].spawns=lVar2; - break; - - case PROJ_SXREPEAT: - ProjectileData[lVar1].sxrepeat=lVar2; - break; - - case PROJ_SYREPEAT: - ProjectileData[lVar1].syrepeat=lVar2; - break; - - case PROJ_SOUND: - ProjectileData[lVar1].sound=lVar2; - break; - - case PROJ_ISOUND: - ProjectileData[lVar1].isound=lVar2; - break; - - case PROJ_VEL: - ProjectileData[lVar1].vel=lVar2; - break; - - case PROJ_EXTRA: - ProjectileData[lVar1].extra=lVar2; - break; - - case PROJ_DECAL: - ProjectileData[lVar1].decal=lVar2; - break; - - case PROJ_TRAIL: - ProjectileData[lVar1].trail=lVar2; - break; - - case PROJ_TXREPEAT: - ProjectileData[lVar1].txrepeat=lVar2; - break; - - case PROJ_TYREPEAT: - ProjectileData[lVar1].tyrepeat=lVar2; - break; - - case PROJ_TOFFSET: - ProjectileData[lVar1].toffset=lVar2; - break; - - case PROJ_TNUM: - ProjectileData[lVar1].tnum=lVar2; - break; - - case PROJ_DROP: - ProjectileData[lVar1].drop=lVar2; - break; - - case PROJ_CSTAT: - ProjectileData[lVar1].cstat=lVar2; - break; - - case PROJ_CLIPDIST: - ProjectileData[lVar1].clipdist=lVar2; - break; - - case PROJ_SHADE: - ProjectileData[lVar1].shade=lVar2; - break; - - case PROJ_XREPEAT: - ProjectileData[lVar1].xrepeat=lVar2; - break; - - case PROJ_YREPEAT: - ProjectileData[lVar1].yrepeat=lVar2; - break; - - case PROJ_PAL: - ProjectileData[lVar1].pal=lVar2; - break; - - case PROJ_EXTRA_RAND: - ProjectileData[lVar1].extra_rand=lVar2; - break; - - case PROJ_HITRADIUS: - ProjectileData[lVar1].hitradius=lVar2; - break; - - case PROJ_VEL_MULT: - ProjectileData[lVar1].velmult=lVar2; - break; - - case PROJ_OFFSET: - ProjectileData[lVar1].offset=lVar2; - break; - - case PROJ_BOUNCES: - ProjectileData[lVar1].bounces=lVar2; - break; - - case PROJ_BSOUND: - ProjectileData[lVar1].bsound=lVar2; - break; - - case PROJ_RANGE: - ProjectileData[lVar1].range=lVar2; - break; - - default: - break; - } - - // DefaultProjectileData[lVar1] = ProjectileData[lVar1]; - Bmemcpy(&DefaultProjectileData[lVar1], &ProjectileData[lVar1], sizeof(ProjectileData[lVar1])); - - return; -} - -/* -static int32_t C_CheckEventSync(int32_t iEventID) -{ - if (g_parsingEventPtr || g_parsingActorPtr) - { - switch (iEventID) - { - case EVENT_ANIMATESPRITES: - case EVENT_CHEATGETSTEROIDS: - case EVENT_CHEATGETHEAT: - case EVENT_CHEATGETBOOT: - case EVENT_CHEATGETSHIELD: - case EVENT_CHEATGETSCUBA: - case EVENT_CHEATGETHOLODUKE: - case EVENT_CHEATGETJETPACK: - case EVENT_CHEATGETFIRSTAID: - case EVENT_DISPLAYCROSSHAIR: - case EVENT_DISPLAYREST: - case EVENT_DISPLAYBONUSSCREEN: - case EVENT_DISPLAYMENU: - case EVENT_DISPLAYMENUREST: - case EVENT_DISPLAYLOADINGSCREEN: - case EVENT_DISPLAYROOMS: - case EVENT_DISPLAYSBAR: - case EVENT_DISPLAYWEAPON: - case EVENT_DRAWWEAPON: - case EVENT_ENTERLEVEL: - case EVENT_FAKEDOMOVETHINGS: - case EVENT_GETLOADTILE: - case EVENT_GETMENUTILE: - case EVENT_INIT: - case EVENT_LOGO: - return 0; - default: - return 1; - } - } - return 1; -} -*/ - -#define GetDefID(szGameLabel) hash_find(&h_gamevars,szGameLabel) -#define GetADefID(szGameLabel) hash_find(&h_arrays,szGameLabel) - -static inline int32_t isaltok(const char c) -{ - return (isalnum(c) || c == '{' || c == '}' || c == '/' || c == '\\' || - c == '*' || c == '-' || c == '_' || c == '.'); -} - -static inline int32_t C_GetLabelNameID(const memberlabel_t *pLabel, hashtable_t *tH, const char *psz) -{ - // find the label psz in the table pLabel. - // returns the ID for the label, or -1 - - int32_t l=-1; - - l = hash_findcase(tH,psz); - if (l>=0) l= pLabel[l].lId; - - return l; -} - -static inline int32_t C_GetLabelNameOffset(hashtable_t *tH, const char *psz) -{ - // find the label psz in the table pLabel. - // returns the offset in the array for the label, or -1 - - return hash_findcase(tH,psz); -} - -static void C_GetNextLabelName(void) -{ - int32_t i; - - C_SkipComments(); - - i = 0; - while (ispecial(*textptr) == 0 && *textptr!='['&& *textptr!=']' && *textptr!='\t' && *textptr!='\n' && *textptr!='\r') - label[(g_numLabels<<6)+(i++)] = *(textptr++); - - label[(g_numLabels<<6)+i] = 0; - if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug > 1) - initprintf("%s:%d: debug: got label `%s'.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); -} - -static int32_t C_GetKeyword(void) -{ - int32_t i; - char *temptextptr; - - C_SkipComments(); - - if (*textptr == '\0') // EOF - return 0; - - temptextptr = textptr; - - while (isaltok(*temptextptr) == 0) - { - temptextptr++; - if (*temptextptr == 0) - return 0; - } - - i = 0; - while (isaltok(*temptextptr)) - tempbuf[i++] = *(temptextptr++); - tempbuf[i] = 0; - return hash_find(&h_keywords,tempbuf); -} - -static int32_t C_GetNextKeyword(void) //Returns its code # -{ - int32_t i, l; - - C_SkipComments(); - - if (*textptr == 0) // EOF - return -1; - - l = 0; - while (isaltok(*(textptr+l)) && !(*(textptr + l) == '.')) - { - tempbuf[l] = textptr[l]; - l++; - } - while (isaltok(*(textptr+l))) - { - tempbuf[l] = textptr[l]; - l++; - } - tempbuf[l] = 0; - - i = hash_find(&h_keywords,tempbuf); - if (i>=0) - { - if (i == CON_LEFTBRACE || i == CON_RIGHTBRACE || i == CON_NULLOP) - *g_scriptPtr = i + (IFELSE_MAGIC<<12); - else *g_scriptPtr = i + (g_lineNumber<<12); - - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - textptr += l; - g_scriptPtr++; - - if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug) - initprintf("%s:%d: debug: translating keyword `%s'.\n",g_szScriptFileName,g_lineNumber,keyw[i]); - return i; - } - - textptr += l; - - if (tempbuf[0] == '{' && tempbuf[1] != 0) - { - C_ReportError(-1); - initprintf("%s:%d: error: expected whitespace between `{' and `%s'.\n",g_szScriptFileName,g_lineNumber,tempbuf+1); - } - else if (tempbuf[0] == '}' && tempbuf[1] != 0) - { - C_ReportError(-1); - initprintf("%s:%d: error: expected whitespace between `}' and `%s'.\n",g_szScriptFileName,g_lineNumber,tempbuf+1); - } - else C_ReportError(ERROR_EXPECTEDKEYWORD); - g_numCompilerErrors++; - return -1; -} - -static void C_GetNextVarType(int32_t type) -{ - int32_t i=0,f=0; - - C_SkipComments(); - - if (!type && !g_labelsOnly && (isdigit(*textptr) || ((*textptr == '-') && (isdigit(*(textptr+1)))))) - { - if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug) - initprintf("%s:%d: debug: accepted constant %ld in place of gamevar.\n",g_szScriptFileName,g_lineNumber,atol(textptr)); - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=MAXGAMEVARS; - if (tolower(textptr[1])=='x') - sscanf(textptr+2,"%" PRIxPTR "",g_scriptPtr); - else - *g_scriptPtr=atoi(textptr); - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - g_scriptPtr++; -#if 1 - while (!ispecial(*textptr) && *textptr != ']') textptr++; -#else - C_GetNextLabelName(); -#endif - return; - } - else if ((*textptr == '-')/* && !isdigit(*(textptr+1))*/) - { - if (!type) - { - if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug) - initprintf("%s:%d: debug: flagging gamevar as negative.\n",g_szScriptFileName,g_lineNumber); //,atol(textptr)); - f = (MAXGAMEVARS<<1); - } - else - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYNTAXERROR); - C_GetNextLabelName(); - return; - } - - textptr++; - } - C_GetNextLabelName(); - - if (!g_skipKeywordCheck && hash_find(&h_keywords,label+(g_numLabels<<6))>=0) - { - g_numCompilerErrors++; - C_ReportError(ERROR_ISAKEYWORD); - return; - } - - C_SkipComments(); //skip comments and whitespace - if ((*textptr == '[')) //read of array as a gamevar - { - int32_t lLabelID = -1; - - f |= (MAXGAMEVARS<<2); - textptr++; - i=GetADefID(label+(g_numLabels<<6)); - if (i < 0) - { - i=GetDefID(label+(g_numLabels<<6)); - if (i < g_iSpriteVarID || i > g_iActorVarID) - i = -1; - - if (i < 0) - { - g_numCompilerErrors++; - C_ReportError(ERROR_NOTAGAMEARRAY); - return; - } - f &= ~(MAXGAMEVARS<<2); // not an array - f |= (MAXGAMEVARS<<3); - } - - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=(i|f); - C_GetNextVarType(0); - C_SkipComments(); - - if (*textptr != ']') - { - g_numCompilerErrors++; - C_ReportError(ERROR_GAMEARRAYBNC); - return; - } - textptr++; - - //writing arrays in this way is not supported because it would require too many changes to other code - - if (type) - { - g_numCompilerErrors++; - C_ReportError(ERROR_INVALIDARRAYWRITE); - return; - } - - if (f & (MAXGAMEVARS<<3)) - { - while (*textptr != '.') - { - if (*textptr == 0xa) - break; - if (!*textptr) - break; - - textptr++; - } - - if (*textptr != '.') - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYNTAXERROR); - return; - } - textptr++; - /// now pointing at 'xxx' - C_GetNextLabelName(); - /*initprintf("found xxx label of '%s'\n", label+(g_numLabels<<6));*/ - - if (i == g_iSpriteVarID) - lLabelID=C_GetLabelNameOffset(&actorH,Bstrtolower(label+(g_numLabels<<6))); - else if (i == g_iSectorVarID) - lLabelID=C_GetLabelNameOffset(§orH,Bstrtolower(label+(g_numLabels<<6))); - else if (i == g_iWallVarID) - lLabelID=C_GetLabelNameOffset(&wallH,Bstrtolower(label+(g_numLabels<<6))); - else if (i == g_iPlayerVarID) - lLabelID=C_GetLabelNameOffset(&playerH,Bstrtolower(label+(g_numLabels<<6))); - else if (i == g_iActorVarID) - lLabelID=GetDefID(label+(g_numLabels<<6)); - - //printf("LabelID is %d\n",lLabelID); - if (lLabelID == -1) - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYMBOLNOTRECOGNIZED); - return; - } - - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - - if (i == g_iSpriteVarID) - { - *g_scriptPtr++=ActorLabels[lLabelID].lId; - - //printf("member's flags are: %02Xh\n",ActorLabels[lLabelID].flags); - if (ActorLabels[lLabelID].flags & LABEL_HASPARM2) - { - //printf("Member has PARM2\n"); - // get parm2 - // get the ID of the DEF - C_GetNextVarType(0); - } - } - else if (i == g_iSectorVarID) - *g_scriptPtr++=SectorLabels[lLabelID].lId; - else if (i == g_iWallVarID) - *g_scriptPtr++=SectorLabels[lLabelID].lId; - else if (i == g_iPlayerVarID) - { - *g_scriptPtr++=PlayerLabels[lLabelID].lId; - - //printf("member's flags are: %02Xh\n",ActorLabels[lLabelID].flags); - if (PlayerLabels[lLabelID].flags & LABEL_HASPARM2) - { - //printf("Member has PARM2\n"); - // get parm2 - // get the ID of the DEF - C_GetNextVarType(0); - } - } - else if (i == g_iActorVarID) - *g_scriptPtr++=lLabelID; - } - return; - } -// initprintf("not an array"); - i=GetDefID(label+(g_numLabels<<6)); - if (i<0) //gamevar not found - { - if (!type && !g_labelsOnly) - { - //try looking for a define instead - Bstrcpy(tempbuf,label+(g_numLabels<<6)); - i = hash_find(&h_labels,tempbuf); - if (i>=0) - { - if (labeltype[i] & LABEL_DEFINE) - { - if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug) - initprintf("%s:%d: debug: accepted defined label `%s' instead of gamevar.\n",g_szScriptFileName,g_lineNumber,label+(i<<6)); - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=MAXGAMEVARS; - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=labelcode[i]; - return; - } - } - g_numCompilerErrors++; - C_ReportError(ERROR_NOTAGAMEVAR); - return; - } - g_numCompilerErrors++; - C_ReportError(ERROR_NOTAGAMEVAR); - textptr++; - return; - - } - if (type == GAMEVAR_READONLY && aGameVars[i].dwFlags & GAMEVAR_READONLY) - { - g_numCompilerErrors++; - C_ReportError(ERROR_VARREADONLY); - return; - } - else if (aGameVars[i].dwFlags & type) - { - g_numCompilerErrors++; - C_ReportError(ERROR_VARTYPEMISMATCH); - return; - } -/* - if ((aGameVars[i].dwFlags & GAMEVAR_SYNCCHECK) && g_parsingActorPtr && C_CheckEventSync(g_currentEvent)) - { - C_ReportError(-1); - initprintf("%s:%d: warning: found local gamevar `%s' used within %s; " - "expect multiplayer synchronization issues.\n",g_szScriptFileName, - g_lineNumber,label+(g_numLabels<<6),g_parsingEventPtr?"a synced event":"an actor"); - g_numCompilerWarnings++; - } -*/ - if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug > 1) - initprintf("%s:%d: debug: accepted gamevar `%s'.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=(i|f); -} - -#define C_GetNextVar() C_GetNextVarType(0) - -static inline void C_GetManyVarsType(int32_t type, int32_t num) -{ - int32_t i; - for (i=num-1; i>=0; i--) - C_GetNextVarType(type); -} - -#define C_GetManyVars(num) C_GetManyVarsType(0,num) - -static int32_t C_GetNextValue(int32_t type) -{ - int32_t i, l; - - C_SkipComments(); - - if (*textptr == 0) // EOF - return -1; - - l = 0; - while (isaltok(*(textptr+l))) - { - tempbuf[l] = textptr[l]; - l++; - } - tempbuf[l] = 0; - - if (!g_skipKeywordCheck && hash_find(&h_keywords,tempbuf /*label+(g_numLabels<<6)*/)>=0) - { - g_numCompilerErrors++; - C_ReportError(ERROR_ISAKEYWORD); - textptr+=l; - } - - i = hash_find(&h_labels,tempbuf); - if (i>=0) - { - char *el,*gl; - - if (labeltype[i] & type) - { - if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug > 1) - { - gl = (char *)C_GetLabelType(labeltype[i]); - initprintf("%s:%d: debug: accepted %s label `%s'.\n",g_szScriptFileName,g_lineNumber,gl,label+(i<<6)); - Bfree(gl); - } - if (labeltype[i] != LABEL_DEFINE && labelcode[i] >= (intptr_t)&script[0] && labelcode[i] < (intptr_t)&script[g_scriptSize]) - bitptr[(g_scriptPtr-script)>>3] |= (BITPTR_POINTER<<((g_scriptPtr-script)&7)); - else bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *(g_scriptPtr++) = labelcode[i]; - textptr += l; - return labeltype[i]; - } - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *(g_scriptPtr++) = 0; - textptr += l; - el = (char *)C_GetLabelType(type); - gl = (char *)C_GetLabelType(labeltype[i]); - C_ReportError(-1); - initprintf("%s:%d: warning: expected %s, found %s.\n",g_szScriptFileName,g_lineNumber,el,gl); - g_numCompilerWarnings++; - Bfree(el); - Bfree(gl); - return -1; // valid label name, but wrong type - } - - if (isdigit(*textptr) == 0 && *textptr != '-') - { - C_ReportError(ERROR_PARAMUNDEFINED); - g_numCompilerErrors++; - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr = 0; - g_scriptPtr++; - textptr+=l; - return -1; // error! - } - - if (isdigit(*textptr) && g_labelsOnly) - { - C_ReportError(WARNING_LABELSONLY); - g_numCompilerWarnings++; - } - - i = l-1; - do - { - // FIXME: check for 0-9 A-F for hex - if (textptr[0] == '0' && textptr[1] == 'x') break; // kill the warning for hex - if (!isdigit(textptr[i--])) - { - C_ReportError(-1); - initprintf("%s:%d: warning: invalid character `%c' in definition!\n",g_szScriptFileName,g_lineNumber,textptr[i+1]); - g_numCompilerWarnings++; - break; - } - } - while (i > 0); - - if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug > 1) - initprintf("%s:%d: debug: accepted constant %ld.\n",g_szScriptFileName,g_lineNumber,atol(textptr)); - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - - if (tolower(textptr[1])=='x') - sscanf(textptr+2,"%" PRIxPTR "",g_scriptPtr); - else - *g_scriptPtr = atol(textptr); - - g_scriptPtr++; - - textptr += l; - - return 0; // literal value -} - -static inline int32_t C_IntPow2(int32_t v) -{ - return ((v!=0) && (v&(v-1))==0); -} - -static inline uint32_t C_Pow2IntLogBase2(int32_t v) -{ - static const uint32_t b[] = {0xAAAAAAAA, 0xCCCCCCCC, 0xF0F0F0F0, - 0xFF00FF00, 0xFFFF0000 - }; - register uint32_t r = (v & b[0]) != 0; - int32_t i = 4; - - for (; i > 0; i--) - r |= ((v & b[i]) != 0) << i; - - return r; -} - -static int32_t C_CheckMalformedBranch(intptr_t lastScriptPtr) -{ - switch (C_GetKeyword()) - { - case CON_RIGHTBRACE: - case CON_ENDA: - case CON_ENDEVENT: - case CON_ENDS: - case CON_ELSE: - g_scriptPtr = lastScriptPtr + &script[0]; - g_ifElseAborted = 1; - C_ReportError(-1); - g_numCompilerWarnings++; - initprintf("%s:%d: warning: malformed `%s' branch\n",g_szScriptFileName,g_lineNumber, - keyw[*(g_scriptPtr) & 0xFFF]); - return 1; - } - return 0; -} - -static int32_t C_CheckEmptyBranch(int32_t tw, intptr_t lastScriptPtr) -{ - // ifrnd and ifhitweapon actually do something when the condition is executed - if ((Bstrncmp(keyw[tw], "if", 2) && tw != CON_ELSE) || - tw == CON_IFRND || tw == CON_IFHITWEAPON) - { - g_ifElseAborted = 0; - return 0; - } - - if ((*(g_scriptPtr) & 0xFFF) != CON_NULLOP || *(g_scriptPtr)>>12 != IFELSE_MAGIC) - g_ifElseAborted = 0; - - if (g_ifElseAborted) - { - C_ReportError(-1); - g_numCompilerWarnings++; - g_scriptPtr = lastScriptPtr + &script[0]; - initprintf("%s:%d: warning: empty `%s' branch\n",g_szScriptFileName,g_lineNumber, - keyw[*(g_scriptPtr) & 0xFFF]); - *(g_scriptPtr) = (CON_NULLOP + (IFELSE_MAGIC<<12)); - return 1; - } - return 0; -} - -static int32_t C_ParseCommand(void); - -static int32_t C_CountCaseStatements() -{ - int32_t lCount; - char *temptextptr = textptr; - int32_t temp_ScriptLineNumber = g_lineNumber; - intptr_t scriptoffset = (unsigned)(g_scriptPtr-script); - intptr_t caseoffset = (unsigned)(g_caseScriptPtr-script); -// int32_t i; - - g_numCases=0; - g_caseScriptPtr=NULL; - //Bsprintf(g_szBuf,"CSS: %.12s",textptr); - //AddLog(g_szBuf); - while (C_ParseCommand() == 0) - { - //Bsprintf(g_szBuf,"CSSL: %.20s",textptr); - //AddLog(g_szBuf); - ; - } - // since we processed the endswitch, we need to re-increment g_checkingSwitch - g_checkingSwitch++; - - textptr=temptextptr; - g_scriptPtr = (intptr_t *)(script+scriptoffset); - - g_lineNumber = temp_ScriptLineNumber; - - lCount=g_numCases; - g_numCases=0; - g_caseScriptPtr = (intptr_t *)(script+caseoffset); - g_numCases = 0; - return lCount; -} - -static int32_t C_ParseCommand(void) -{ - int32_t i, j=0, k=0, done, tw, otw = g_lastKeyword; - char *temptextptr; - intptr_t *tempscrptr = NULL; - - if (quitevent) - { - initprintf("Aborted.\n"); - G_Shutdown(); - exit(0); - } - - if (g_numCompilerErrors > 63 || (*textptr == '\0') || (*(textptr+1) == '\0')) - return 1; - - if (g_scriptDebug) - C_ReportError(-1); - - if (g_checkingSwitch > 0) - { - //Bsprintf(g_szBuf,"PC(): '%.25s'",textptr); - //AddLog(g_szBuf); - } - g_lastKeyword = tw = C_GetNextKeyword(); - // Bsprintf(tempbuf,"%s",keyw[tw]); - // AddLog(tempbuf); - - if (C_SkipComments()) - return 1; - - switch (tw) - { - default: - case -1: - return 0; //End - case CON_STATE: - if (g_parsingActorPtr == 0 && g_processingState == 0) - { - C_GetNextLabelName(); - g_scriptPtr--; - labelcode[g_numLabels] = (intptr_t) g_scriptPtr; - labeltype[g_numLabels] = LABEL_STATE; - - g_processingState = 1; - Bsprintf(g_szCurrentBlockName,"%s",label+(g_numLabels<<6)); - hash_add(&h_labels,label+(g_numLabels<<6),g_numLabels,0); - g_numLabels++; - return 0; - } - - C_GetNextLabelName(); - - if (hash_find(&h_keywords,label+(g_numLabels<<6))>=0) - { - g_numCompilerErrors++; - C_ReportError(ERROR_ISAKEYWORD); - return 0; - } - - i = hash_find(&h_gamevars,label+(g_numLabels<<6)); - if (i>=0) - { - g_numCompilerWarnings++; - C_ReportError(WARNING_NAMEMATCHESVAR); - } - - j = hash_find(&h_labels,label+(g_numLabels<<6)); - if (j>=0) - { - if (labeltype[j] & LABEL_STATE) - { - if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug > 1) - initprintf("%s:%d: debug: accepted state label `%s'.\n",g_szScriptFileName,g_lineNumber,label+(j<<6)); - *g_scriptPtr = labelcode[j]; - if (labelcode[j] >= (intptr_t)&script[0] && labelcode[j] < (intptr_t)&script[g_scriptSize]) - bitptr[(g_scriptPtr-script)>>3] |= (BITPTR_POINTER<<((g_scriptPtr-script)&7)); - else bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - g_scriptPtr++; - return 0; - } - else - { - char *gl = (char *)C_GetLabelType(labeltype[j]); - C_ReportError(-1); - initprintf("%s:%d: warning: expected state, found %s.\n",g_szScriptFileName,g_lineNumber,gl); - g_numCompilerWarnings++; - Bfree(gl); - *(g_scriptPtr-1) = CON_NULLOP; // get rid of the state, leaving a nullop to satisfy if conditions - bitptr[(g_scriptPtr-script-1)>>3] &= ~(1<<((g_scriptPtr-script-1)&7)); - return 0; // valid label name, but wrong type - } - } - else - { - C_ReportError(-1); - initprintf("%s:%d: error: state `%s' not found.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - g_numCompilerErrors++; - } - g_scriptPtr++; - return 0; - - case CON_ENDS: - if (g_processingState == 0) - { - C_ReportError(-1); - initprintf("%s:%d: error: found `ends' without open `state'.\n",g_szScriptFileName,g_lineNumber); - g_numCompilerErrors++; - } - // else - { - if (g_numBraces > 0) - { - C_ReportError(ERROR_OPENBRACKET); - g_numCompilerErrors++; - } - else if (g_numBraces < 0) - { - C_ReportError(ERROR_CLOSEBRACKET); - g_numCompilerErrors++; - } - if (g_checkingSwitch > 0) - { - C_ReportError(ERROR_NOENDSWITCH); - g_numCompilerErrors++; - - g_checkingSwitch = 0; // can't be checking anymore... - } - - g_processingState = 0; - Bsprintf(g_szCurrentBlockName,"(none)"); - } - return 0; - - case CON_SETTHISPROJECTILE: - case CON_SETPROJECTILE: -/* - if (!C_CheckEventSync(g_currentEvent)) - C_ReportError(WARNING_EVENTSYNC); -*/ - case CON_GETTHISPROJECTILE: - case CON_GETPROJECTILE: - { - int32_t lLabelID; - - // syntax getwall[].x - // gets the value of wall[].xxx into - - // now get name of .xxx - while ((*textptr != '[')) - { - textptr++; - } - if (*textptr == '[') - textptr++; - - // get the ID of the DEF - if (tw == CON_SETTHISPROJECTILE) - g_labelsOnly = 1; - C_GetNextVar(); - g_labelsOnly = 0; - // now get name of .xxx - while (*textptr != '.') - { - if (*textptr == 0xa) - break; - if (!*textptr) - break; - - textptr++; - } - if (*textptr!='.') - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYNTAXERROR); - return 0; - } - textptr++; - /// now pointing at 'xxx' - C_GetNextLabelName(); - //printf("found xxx label of '%s'\n", label+(g_numLabels<<6)); - - lLabelID=C_GetLabelNameOffset(&projectileH,Bstrtolower(label+(g_numLabels<<6))); - //printf("LabelID is %d\n",lLabelID); - if (lLabelID == -1) - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYMBOLNOTRECOGNIZED); - return 0; - } - - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=ProjectileLabels[lLabelID].lId; - - //printf("member's flags are: %02Xh\n",PlayerLabels[lLabelID].flags); - - // now at target VAR... - - // get the ID of the DEF - switch (tw) - { - case CON_SETPROJECTILE: - case CON_SETTHISPROJECTILE: - C_GetNextVar(); - break; - default: - C_GetNextVarType(GAMEVAR_READONLY); - break; - } - break; - } - - case CON_GAMEVAR: - // syntax: gamevar - // defines var1 and sets initial value. - // flags are used to define usage - // (see top of this files for flags) - //printf("Got gamedef. Getting Label. '%.20s'\n",textptr); - - if (isdigit(*textptr) || (*textptr == '-')) - { - C_GetNextLabelName(); - g_numCompilerErrors++; - C_ReportError(ERROR_SYNTAXERROR); - C_GetNextValue(LABEL_DEFINE); - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr -= 3; // we complete the process anyways just to skip past the fucked up section - return 0; - } - - C_GetNextLabelName(); - //printf("Got Label '%.20s'\n",textptr); - // Check to see it's already defined - - if (hash_find(&h_keywords,label+(g_numLabels<<6))>=0) - { - g_numCompilerErrors++; - C_ReportError(ERROR_ISAKEYWORD); - return 0; - } - - //printf("Translating number '%.20s'\n",textptr); - C_GetNextValue(LABEL_DEFINE); // get initial value - //printf("Done Translating number. '%.20s'\n",textptr); - - C_GetNextValue(LABEL_DEFINE); // get flags - //Bsprintf(g_szBuf,"Adding GameVar='%s', val=%l, flags=%lX",label+(g_numLabels<<6), - // *(g_scriptPtr-2), *(g_scriptPtr-1)); - //AddLog(g_szBuf); - if ((*(g_scriptPtr-1)&GAMEVAR_USER_MASK)==3) - { - g_numCompilerWarnings++; - *(g_scriptPtr-1)^=GAMEVAR_PERPLAYER; - C_ReportError(WARNING_BADGAMEVAR); - } - Gv_NewVar(label+(g_numLabels<<6),*(g_scriptPtr-2), - (*(g_scriptPtr-1)) - // can't define default or secret - & (~(GAMEVAR_DEFAULT | GAMEVAR_SECRET)) - ); - //AddLog("Added gamevar"); - g_scriptPtr -= 3; // no need to save in script... - return 0; - - case CON_GAMEARRAY: - if (isdigit(*textptr) || (*textptr == '-')) - { - C_GetNextLabelName(); - g_numCompilerErrors++; - C_ReportError(ERROR_SYNTAXERROR); - C_GetNextValue(LABEL_DEFINE); - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr -= 2; // we complete the process anyways just to skip past the fucked up section - return 0; - } - C_GetNextLabelName(); - //printf("Got Label '%.20s'\n",textptr); - // Check to see it's already defined - - if (hash_find(&h_keywords,label+(g_numLabels<<6))>=0) - { - g_numCompilerErrors++; - C_ReportError(ERROR_ISAKEYWORD); - return 0; - } - - i = hash_find(&h_gamevars,label+(g_numLabels<<6)); - if (i>=0) - { - g_numCompilerWarnings++; - C_ReportError(WARNING_NAMEMATCHESVAR); - } - - C_GetNextValue(LABEL_DEFINE); - Gv_NewArray(label+(g_numLabels<<6),*(g_scriptPtr-1)); - - g_scriptPtr -= 2; // no need to save in script... - return 0; - - - case CON_DEFINE: - { - //printf("Got definition. Getting Label. '%.20s'\n",textptr); - C_GetNextLabelName(); - //printf("Got label. '%.20s'\n",textptr); - // Check to see it's already defined - - if (hash_find(&h_keywords,label+(g_numLabels<<6))>=0) - { - g_numCompilerErrors++; - C_ReportError(ERROR_ISAKEYWORD); - return 0; - } - - i = hash_find(&h_gamevars,label+(g_numLabels<<6)); - if (i>=0) - { - g_numCompilerWarnings++; - C_ReportError(WARNING_NAMEMATCHESVAR); - } - - i = hash_find(&h_labels,label+(g_numLabels<<6)); - if (i>=0) - { - /* if (i >= g_numDefaultLabels) - { - g_numCompilerWarnings++; - C_ReportError(WARNING_DUPLICATEDEFINITION); - } */ - } - - //printf("Translating. '%.20s'\n",textptr); - C_GetNextValue(LABEL_DEFINE); - //printf("Translated. '%.20s'\n",textptr); - if (i == -1) - { - // printf("Defining Definition '%s' to be '%d'\n",label+(g_numLabels<<6),*(g_scriptPtr-1)); - hash_add(&h_labels,label+(g_numLabels<<6),g_numLabels,0); - labeltype[g_numLabels] = LABEL_DEFINE; - labelcode[g_numLabels++] = *(g_scriptPtr-1); - if (*(g_scriptPtr-1) >= 0 && *(g_scriptPtr-1) < MAXTILES && g_dynamicTileMapping) - G_ProcessDynamicTileMapping(label+((g_numLabels-1)<<6),*(g_scriptPtr-1)); - } - g_scriptPtr -= 2; - return 0; - } - - case CON_PALFROM: - for (j=3; j>=0; j--) - { - if (C_GetKeyword() == -1) - C_GetNextValue(LABEL_DEFINE); - else break; - } - - while (j>-1) - { - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr = 0; - g_scriptPtr++; - j--; - } - return 0; - - case CON_MOVE: - if (g_parsingActorPtr || g_processingState) - { -/* - if (!C_CheckEventSync(g_currentEvent)) - { - g_numCompilerWarnings++; - C_ReportError(WARNING_EVENTSYNC); - } -*/ - - if ((C_GetNextValue(LABEL_MOVE|LABEL_DEFINE) == 0) && (*(g_scriptPtr-1) != 0) && (*(g_scriptPtr-1) != 1)) - { - C_ReportError(-1); - bitptr[(g_scriptPtr-script-1)>>3] &= ~(1<<((g_scriptPtr-script-1)&7)); - *(g_scriptPtr-1) = 0; - initprintf("%s:%d: warning: expected a move, found a constant.\n",g_szScriptFileName,g_lineNumber); - g_numCompilerWarnings++; - } - - j = 0; - while (C_GetKeyword() == -1) - { - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - j |= *g_scriptPtr; - } - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr = j; - - g_scriptPtr++; - } - else - { - g_scriptPtr--; - C_GetNextLabelName(); - // Check to see it's already defined - - if (hash_find(&h_keywords,label+(g_numLabels<<6))>=0) - { - g_numCompilerErrors++; - C_ReportError(ERROR_ISAKEYWORD); - return 0; - } - - if (hash_find(&h_gamevars,label+(g_numLabels<<6))>=0) - { - g_numCompilerWarnings++; - C_ReportError(WARNING_NAMEMATCHESVAR); - } - - if ((i = hash_find(&h_labels,label+(g_numLabels<<6))) >= 0) - { - g_numCompilerWarnings++; - initprintf("%s:%d: warning: duplicate move `%s' ignored.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - } - - if (i == -1) - { - hash_add(&h_labels,label+(g_numLabels<<6),g_numLabels,0); - labeltype[g_numLabels] = LABEL_MOVE; - labelcode[g_numLabels++] = (intptr_t) g_scriptPtr; - } - - for (j=1; j>=0; j--) - { - if (C_GetKeyword() >= 0) break; - C_GetNextValue(LABEL_DEFINE); - } - - for (k=j; k>=0; k--) - { - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr = 0; - g_scriptPtr++; - } - } - return 0; - - case CON_MUSIC: - { - // NOTE: this doesn't get stored in the PCode... - - // music 1 stalker.mid dethtoll.mid streets.mid watrwld1.mid snake1.mid - // thecall.mid ahgeez.mid dethtoll.mid streets.mid watrwld1.mid snake1.mid - g_scriptPtr--; - C_GetNextValue(LABEL_DEFINE); // Volume Number (0/4) - g_scriptPtr--; - - k = *g_scriptPtr-1; - - if (k >= 0) // if it's background music - { - i = 0; - // get the file name... - while (C_GetKeyword() == -1) - { - C_SkipComments(); - j = 0; - tempbuf[j] = '/'; - while (isaltok(*(textptr+j))) - { - tempbuf[j+1] = textptr[j]; - j++; - } - tempbuf[j+1] = '\0'; - - if (MapInfo[(k*MAXLEVELS)+i].musicfn == NULL) - MapInfo[(k*MAXLEVELS)+i].musicfn = Bcalloc(Bstrlen(tempbuf)+1,sizeof(uint8_t)); - else if ((Bstrlen(tempbuf)+1) > sizeof(MapInfo[(k*MAXLEVELS)+i].musicfn)) - MapInfo[(k*MAXLEVELS)+i].musicfn = Brealloc(MapInfo[(k*MAXLEVELS)+i].musicfn,(Bstrlen(tempbuf)+1)); - - Bstrcpy(MapInfo[(k*MAXLEVELS)+i].musicfn,tempbuf); - - textptr += j; - if (i > MAXLEVELS-1) break; - i++; - } - } - else - { - i = 0; - while (C_GetKeyword() == -1) - { - C_SkipComments(); - j = 0; - - while (isaltok(*(textptr+j))) - { - EnvMusicFilename[i][j] = textptr[j]; - j++; - } - EnvMusicFilename[i][j] = '\0'; - - textptr += j; - if (i > MAXVOLUMES-1) break; - i++; - } - } - } - return 0; - - case CON_INCLUDE: - g_scriptPtr--; - - C_SkipComments(); - - j = 0; - while (isaltok(*textptr)) - { - tempbuf[j] = *(textptr++); - j++; - } - tempbuf[j] = '\0'; - - { - int32_t temp_ScriptLineNumber; - int32_t temp_ifelse_check; - char *origtptr, *mptr; - char parentScriptFileName[255]; - int32_t fp; - - fp = kopen4loadfrommod(tempbuf,g_loadFromGroupOnly); - if (fp < 0) - { - g_numCompilerErrors++; - initprintf("%s:%d: error: could not find file `%s'.\n",g_szScriptFileName,g_lineNumber,tempbuf); - return 0; - } - - j = kfilelength(fp); - - mptr = (char *)Bmalloc(j+1); - if (!mptr) - { - kclose(fp); - g_numCompilerErrors++; - initprintf("%s:%d: error: could not allocate %d bytes to include `%s'.\n", - g_szScriptFileName,g_lineNumber,j,tempbuf); - return 0; - } - - initprintf("Including: %s (%d bytes)\n",tempbuf, j); - kread(fp, mptr, j); - kclose(fp); - mptr[j] = 0; - - if (*textptr == '"') // skip past the closing quote if it's there so we don't screw up the next line - textptr++; - origtptr = textptr; - - Bstrcpy(parentScriptFileName, g_szScriptFileName); - Bstrcpy(g_szScriptFileName, tempbuf); - temp_ScriptLineNumber = g_lineNumber; - g_lineNumber = 1; - temp_ifelse_check = g_checkingIfElse; - g_checkingIfElse = 0; - - textptr = mptr; - - C_SkipComments(); - - do done = C_ParseCommand(); - while (!done); - - Bstrcpy(g_szScriptFileName, parentScriptFileName); - g_totalLines += g_lineNumber; - g_lineNumber = temp_ScriptLineNumber; - g_checkingIfElse = temp_ifelse_check; - - textptr = origtptr; - - Bfree(mptr); - } - return 0; - - case CON_AI: - if (g_parsingActorPtr || g_processingState) - { -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - C_GetNextValue(LABEL_AI); - } - else - { - g_scriptPtr--; - C_GetNextLabelName(); - - if (hash_find(&h_keywords,label+(g_numLabels<<6))>=0) - { - g_numCompilerErrors++; - C_ReportError(ERROR_ISAKEYWORD); - return 0; - } - - i = hash_find(&h_gamevars,label+(g_numLabels<<6)); - if (i>=0) - { - g_numCompilerWarnings++; - C_ReportError(WARNING_NAMEMATCHESVAR); - } - - i = hash_find(&h_labels,label+(g_numLabels<<6)); - if (i>=0) - { - g_numCompilerWarnings++; - initprintf("%s:%d: warning: duplicate ai `%s' ignored.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - } - - if (i == -1) - { - labeltype[g_numLabels] = LABEL_AI; - hash_add(&h_labels,label+(g_numLabels<<6),g_numLabels,0); - labelcode[g_numLabels++] = (intptr_t) g_scriptPtr; - } - - for (j=0; j<3; j++) - { - if (C_GetKeyword() >= 0) break; - if (j == 1) - C_GetNextValue(LABEL_ACTION); - else if (j == 2) - { - if ((C_GetNextValue(LABEL_MOVE|LABEL_DEFINE) == 0) && (*(g_scriptPtr-1) != 0) && (*(g_scriptPtr-1) != 1)) - { - C_ReportError(-1); - bitptr[(g_scriptPtr-script-1)>>3] &= ~(1<<((g_scriptPtr-script-1)&7)); - *(g_scriptPtr-1) = 0; - initprintf("%s:%d: warning: expected a move, found a constant.\n",g_szScriptFileName,g_lineNumber); - g_numCompilerWarnings++; - } - k = 0; - while (C_GetKeyword() == -1) - { - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - k |= *g_scriptPtr; - } - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr = k; - g_scriptPtr++; - return 0; - } - } - for (k=j; k<3; k++) - { - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr = 0; - g_scriptPtr++; - } - } - return 0; - - case CON_ACTION: - if (g_parsingActorPtr || g_processingState) - { -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - C_GetNextValue(LABEL_ACTION); - } - else - { - g_scriptPtr--; - C_GetNextLabelName(); - // Check to see it's already defined - - if (hash_find(&h_keywords,label+(g_numLabels<<6))>=0) - { - g_numCompilerErrors++; - C_ReportError(ERROR_ISAKEYWORD); - return 0; - } - - i = hash_find(&h_gamevars,label+(g_numLabels<<6)); - if (i>=0) - { - g_numCompilerWarnings++; - C_ReportError(WARNING_NAMEMATCHESVAR); - } - - i = hash_find(&h_labels,label+(g_numLabels<<6)); - if (i>=0) - { - g_numCompilerWarnings++; - initprintf("%s:%d: warning: duplicate action `%s' ignored.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - } - - if (i == -1) - { - labeltype[g_numLabels] = LABEL_ACTION; - labelcode[g_numLabels] = (intptr_t) g_scriptPtr; - hash_add(&h_labels,label+(g_numLabels<<6),g_numLabels,0); - g_numLabels++; - } - - for (j=4; j>=0; j--) - { - if (C_GetKeyword() >= 0) break; - C_GetNextValue(LABEL_DEFINE); - } - for (k=j; k>=0; k--) - { - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *(g_scriptPtr++) = 0; - } - } - return 0; - - case CON_ACTOR: - case CON_USERACTOR: - case CON_EVENTLOADACTOR: - if (g_processingState || g_parsingActorPtr) - { - C_ReportError(ERROR_FOUNDWITHIN); - g_numCompilerErrors++; - } - - g_numBraces = 0; - g_scriptPtr--; - g_parsingActorPtr = g_scriptPtr; - - if (tw == CON_USERACTOR) - { - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - } - - C_SkipComments(); - j = 0; - while (isaltok(*(textptr+j))) - { - g_szCurrentBlockName[j] = textptr[j]; - j++; - } - g_szCurrentBlockName[j] = 0; - - if (tw == CON_USERACTOR) - { - j = *g_scriptPtr; - - if (j > 2) - { - C_ReportError(-1); - initprintf("%s:%d: warning: invalid useractor type.\n",g_szScriptFileName,g_lineNumber); - g_numCompilerWarnings++; - j = 0; - } - } - - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - - if (tw == CON_EVENTLOADACTOR) - { - actorLoadEventScrptr[*g_scriptPtr] = g_parsingActorPtr; - g_checkingIfElse = 0; - return 0; - } - - actorscrptr[*g_scriptPtr] = g_parsingActorPtr; - - if (tw == CON_USERACTOR) - ActorType[*g_scriptPtr] = j; - - for (j=0; j<4; j++) - { - bitptr[(g_parsingActorPtr+j-script)>>3] &= ~(1<<((g_parsingActorPtr+j-script)&7)); - *(g_parsingActorPtr+j) = 0; - if (j == 3) - { - j = 0; - while (C_GetKeyword() == -1) - { - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - j |= *g_scriptPtr; - } - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr = j; - g_scriptPtr++; - break; - } - else - { - if (C_GetKeyword() >= 0) - { - for (i=4-j; i; i--) - { - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *(g_scriptPtr++) = 0; - } - break; - } - switch (j) - { - case 0: - C_GetNextValue(LABEL_DEFINE); - break; - case 1: - C_GetNextValue(LABEL_ACTION); - break; - case 2: - if ((C_GetNextValue(LABEL_MOVE|LABEL_DEFINE) == 0) && (*(g_scriptPtr-1) != 0) && (*(g_scriptPtr-1) != 1)) - { - C_ReportError(-1); - bitptr[(g_scriptPtr-script-1)>>3] &= ~(1<<((g_scriptPtr-script-1)&7)); - *(g_scriptPtr-1) = 0; - initprintf("%s:%d: warning: expected a move, found a constant.\n",g_szScriptFileName,g_lineNumber); - g_numCompilerWarnings++; - } - break; - } - if (*(g_scriptPtr-1) >= (intptr_t)&script[0] && *(g_scriptPtr-1) < (intptr_t)&script[g_scriptSize]) - bitptr[(g_parsingActorPtr+j-script)>>3] |= (BITPTR_POINTER<<((g_parsingActorPtr+j-script)&7)); - else bitptr[(g_parsingActorPtr+j-script)>>3] &= ~(1<<((g_parsingActorPtr+j-script)&7)); - *(g_parsingActorPtr+j) = *(g_scriptPtr-1); - } - } - g_checkingIfElse = 0; - return 0; - - case CON_ONEVENT: - if (g_processingState || g_parsingActorPtr) - { - C_ReportError(ERROR_FOUNDWITHIN); - g_numCompilerErrors++; - } - - g_numBraces = 0; - g_scriptPtr--; - g_parsingEventPtr = g_scriptPtr; - g_parsingActorPtr = g_scriptPtr; - - C_SkipComments(); - j = 0; - while (isaltok(*(textptr+j))) - { - g_szCurrentBlockName[j] = textptr[j]; - j++; - } - g_szCurrentBlockName[j] = 0; -// g_labelsOnly = 1; - C_GetNextValue(LABEL_DEFINE); - g_labelsOnly = 0; - g_scriptPtr--; - j= *g_scriptPtr; // type of event - g_currentEvent = j; - //Bsprintf(g_szBuf,"Adding Event for %d at %lX",j, g_parsingEventPtr); - //AddLog(g_szBuf); - if (j > MAXGAMEEVENTS-1 || j < 0) - { - initprintf("%s:%d: error: invalid event ID.\n",g_szScriptFileName,g_lineNumber); - g_numCompilerErrors++; - return 0; - } - // if event has already been declared then store previous script location - if (apScriptGameEvent[j]) - { - previous_event =apScriptGameEvent[j]; - } - apScriptGameEvent[j]=g_parsingEventPtr; - - g_checkingIfElse = 0; - - return 0; - - case CON_INSERTSPRITEQ: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - return 0; - - case CON_QSPRINTF: - C_GetManyVars(2); - - j = 0; - - while (C_GetKeyword() == -1 && j < 32) - C_GetNextVar(), j++; - - *g_scriptPtr++ = CON_NULLOP + (g_lineNumber<<12); - return 0; - - case CON_ESPAWN: - case CON_ESHOOT: - case CON_QSPAWN: - case CON_EQSPAWN: - case CON_STRENGTH: - case CON_SHOOT: - case CON_ADDPHEALTH: - case CON_SPAWN: - case CON_CSTAT: - case CON_COUNT: - case CON_ENDOFGAME: - case CON_SPRITEPAL: - case CON_CACTOR: - case CON_MONEY: - case CON_ADDKILLS: - case CON_DEBUG: - case CON_ADDSTRENGTH: - case CON_CSTATOR: - case CON_MAIL: - case CON_PAPER: - case CON_SLEEPTIME: - case CON_CLIPDIST: - case CON_LOTSOFGLASS: - case CON_SAVENN: - case CON_SAVE: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - case CON_ANGOFF: - case CON_QUOTE: - case CON_SOUND: - case CON_GLOBALSOUND: - case CON_SOUNDONCE: - case CON_STOPSOUND: - C_GetNextValue(LABEL_DEFINE); - if (tw == CON_CSTAT) - { - if (*(g_scriptPtr-1) == 32767) - { - *(g_scriptPtr-1) = 32768; - C_ReportError(-1); - initprintf("%s:%d: warning: tried to set cstat 32767, using 32768 instead.\n",g_szScriptFileName,g_lineNumber); - g_numCompilerWarnings++; - } - else if ((*(g_scriptPtr-1) & 32) && (*(g_scriptPtr-1) & 16)) - { - i = *(g_scriptPtr-1); - *(g_scriptPtr-1) ^= 48; - C_ReportError(-1); - initprintf("%s:%d: warning: tried to set cstat %d, using %d instead.\n",g_szScriptFileName,g_lineNumber,i,(int32_t)(*(g_scriptPtr-1))); - g_numCompilerWarnings++; - } - } - return 0; - - case CON_HITRADIUSVAR: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - C_GetManyVars(5); - break; - case CON_HITRADIUS: - C_GetNextValue(LABEL_DEFINE); - C_GetNextValue(LABEL_DEFINE); - C_GetNextValue(LABEL_DEFINE); - case CON_ADDAMMO: - case CON_ADDWEAPON: - case CON_SIZETO: - case CON_SIZEAT: - case CON_DEBRIS: - case CON_ADDINVENTORY: - case CON_GUTS: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - C_GetNextValue(LABEL_DEFINE); - C_GetNextValue(LABEL_DEFINE); - break; - - case CON_ELSE: - if (g_checkingIfElse) - { - intptr_t offset; - intptr_t lastScriptPtr = g_scriptPtr - &script[0] - 1; - - g_ifElseAborted = 0; - g_checkingIfElse--; - - if (C_CheckMalformedBranch(lastScriptPtr)) - return 0; - - tempscrptr = g_scriptPtr; - offset = (unsigned)(tempscrptr-script); - g_scriptPtr++; //Leave a spot for the fail location - C_ParseCommand(); - - if (C_CheckEmptyBranch(tw, lastScriptPtr)) - return 0; - - tempscrptr = (intptr_t *)script+offset; - *tempscrptr = (intptr_t) g_scriptPtr; - bitptr[(tempscrptr-script)>>3] |= (BITPTR_POINTER<<((tempscrptr-script)&7)); - } - else - { - g_scriptPtr--; - tempscrptr = g_scriptPtr; - g_numCompilerWarnings++; - C_ReportError(-1); - - initprintf("%s:%d: warning: found `else' with no `if'.\n",g_szScriptFileName,g_lineNumber); - - if (C_GetKeyword() == CON_LEFTBRACE) - { - C_GetNextKeyword(); - g_numBraces++; - - do - done = C_ParseCommand(); - while (done == 0); - } - else C_ParseCommand(); - - g_scriptPtr = tempscrptr; - } - return 0; - - case CON_SETSECTOR: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - case CON_GETSECTOR: - { - int32_t lLabelID; - - // syntax getsector[].x - // gets the value of sector[].xxx into - - // now get name of .xxx - while ((*textptr != '[')) - { - textptr++; - } - if (*textptr == '[') - textptr++; - - // get the ID of the DEF - g_labelsOnly = 1; - C_GetNextVar(); - g_labelsOnly = 0; - // now get name of .xxx - while (*textptr != '.') - { - if (*textptr == 0xa) - break; - if (!*textptr) - break; - - textptr++; - } - if (*textptr!='.') - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYNTAXERROR); - return 0; - } - textptr++; - /// now pointing at 'xxx' - C_GetNextLabelName(); - //printf("found xxx label of '%s'\n", label+(g_numLabels<<6)); - - lLabelID=C_GetLabelNameID(SectorLabels,§orH,Bstrtolower(label+(g_numLabels<<6))); - - if (lLabelID == -1) - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYMBOLNOTRECOGNIZED); - return 0; - } - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=lLabelID; - - // now at target VAR... - - // get the ID of the DEF - if (tw==CON_GETSECTOR) - C_GetNextVarType(GAMEVAR_READONLY); - else - C_GetNextVar(); - break; - } - - case CON_FINDNEARACTOR: - case CON_FINDNEARACTOR3D: - case CON_FINDNEARSPRITE: - case CON_FINDNEARSPRITE3D: - case CON_FINDNEARACTORZ: - case CON_FINDNEARSPRITEZ: - { - // syntax findnearactor - // gets the sprite ID of the nearest actor within max dist - // that is of into - // -1 for none found - - C_GetNextValue(LABEL_DEFINE); // get - C_GetNextValue(LABEL_DEFINE); // get maxdist - - switch (tw) - { - case CON_FINDNEARACTORZ: - case CON_FINDNEARSPRITEZ: - C_GetNextValue(LABEL_DEFINE); - default: - break; - } - - // target var - // get the ID of the DEF - C_GetNextVarType(GAMEVAR_READONLY); - break; - } - - case CON_FINDNEARACTORVAR: - case CON_FINDNEARACTOR3DVAR: - case CON_FINDNEARSPRITEVAR: - case CON_FINDNEARSPRITE3DVAR: - case CON_FINDNEARACTORZVAR: - case CON_FINDNEARSPRITEZVAR: - { - C_GetNextValue(LABEL_DEFINE); // get - - // get the ID of the DEF - C_GetNextVar(); - switch (tw) - { - case CON_FINDNEARACTORZVAR: - case CON_FINDNEARSPRITEZVAR: - C_GetNextVar(); - default: - break; - } - // target var - // get the ID of the DEF - C_GetNextVarType(GAMEVAR_READONLY); - break; - } - - case CON_SQRT: - { - // syntax sqrt - // gets the sqrt of invar into outvar - - // get the ID of the DEF - C_GetNextVar(); - // target var - // get the ID of the DEF - C_GetNextVarType(GAMEVAR_READONLY); - break; - } - - case CON_SETWALL: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - case CON_GETWALL: - { - int32_t lLabelID; - - // syntax getwall[].x - // gets the value of wall[].xxx into - - // now get name of .xxx - while ((*textptr != '[')) - { - textptr++; - } - if (*textptr == '[') - textptr++; - - // get the ID of the DEF - g_labelsOnly = 1; - C_GetNextVar(); - g_labelsOnly = 0; - // now get name of .xxx - while (*textptr != '.') - { - if (*textptr == 0xa) - break; - if (!*textptr) - break; - - textptr++; - } - if (*textptr!='.') - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYNTAXERROR); - return 0; - } - textptr++; - /// now pointing at 'xxx' - C_GetNextLabelName(); - //printf("found xxx label of '%s'\n", label+(g_numLabels<<6)); - - lLabelID=C_GetLabelNameID(WallLabels,&wallH,Bstrtolower(label+(g_numLabels<<6))); - - if (lLabelID == -1) - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYMBOLNOTRECOGNIZED); - return 0; - } - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=lLabelID; - - // now at target VAR... - - // get the ID of the DEF - if (tw == CON_GETWALL) - C_GetNextVarType(GAMEVAR_READONLY); - else - C_GetNextVar(); - break; - } - - case CON_SETPLAYER: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - case CON_GETPLAYER: - { - int32_t lLabelID; - - // syntax getwall[].x - // gets the value of wall[].xxx into - - // now get name of .xxx - while ((*textptr != '[')) - { - textptr++; - } - if (*textptr == '[') - textptr++; - - // get the ID of the DEF - g_labelsOnly = 1; - C_GetNextVar(); - g_labelsOnly = 0; - // now get name of .xxx - while (*textptr != '.') - { - if (*textptr == 0xa) - break; - if (!*textptr) - break; - - textptr++; - } - if (*textptr!='.') - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYNTAXERROR); - return 0; - } - textptr++; - /// now pointing at 'xxx' - C_GetNextLabelName(); - //printf("found xxx label of '%s'\n", label+(g_numLabels<<6)); - - lLabelID=C_GetLabelNameOffset(&playerH,Bstrtolower(label+(g_numLabels<<6))); - //printf("LabelID is %d\n",lLabelID); - if (lLabelID == -1) - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYMBOLNOTRECOGNIZED); - return 0; - } - - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=PlayerLabels[lLabelID].lId; - - //printf("member's flags are: %02Xh\n",PlayerLabels[lLabelID].flags); - if (PlayerLabels[lLabelID].flags & LABEL_HASPARM2) - { - //printf("Member has PARM2\n"); - // get parm2 - // get the ID of the DEF - C_GetNextVar(); - } - else - { - //printf("Member does not have Parm2\n"); - } - - // now at target VAR... - - // get the ID of the DEF - if (tw==CON_GETPLAYER) - C_GetNextVarType(GAMEVAR_READONLY); - else - C_GetNextVar(); - break; - } - - case CON_SETINPUT: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - case CON_GETINPUT: - { - int32_t lLabelID; - - // syntax getwall[].x - // gets the value of wall[].xxx into - - // now get name of .xxx - while ((*textptr != '[')) - { - textptr++; - } - if (*textptr == '[') - textptr++; - - // get the ID of the DEF - g_labelsOnly = 1; - C_GetNextVar(); - g_labelsOnly = 0; - // now get name of .xxx - while (*textptr != '.') - { - if (*textptr == 0xa) - break; - if (!*textptr) - break; - - textptr++; - } - if (*textptr!='.') - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYNTAXERROR); - return 0; - } - textptr++; - /// now pointing at 'xxx' - C_GetNextLabelName(); - //printf("found xxx label of '%s'\n", label+(g_numLabels<<6)); - - lLabelID=C_GetLabelNameOffset(&inputH,Bstrtolower(label+(g_numLabels<<6))); - //printf("LabelID is %d\n",lLabelID); - if (lLabelID == -1) - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYMBOLNOTRECOGNIZED); - return 0; - } - - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=InputLabels[lLabelID].lId; - - // now at target VAR... - - // get the ID of the DEF - if (tw==CON_GETINPUT) - C_GetNextVarType(GAMEVAR_READONLY); - else - C_GetNextVar(); - break; - } - - case CON_SETUSERDEF: - case CON_GETUSERDEF: - { - int32_t lLabelID; - - // syntax [gs]etuserdef.x - // gets the value of ud.xxx into - - // now get name of .xxx - while (*textptr != '.') - { - if (*textptr == 0xa) - break; - if (!*textptr) - break; - - textptr++; - } - if (*textptr!='.') - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYNTAXERROR); - return 0; - } - textptr++; - /// now pointing at 'xxx' - C_GetNextLabelName(); - //printf("found xxx label of '%s'\n", label+(g_numLabels<<6)); - - lLabelID=C_GetLabelNameID(UserdefsLabels,&userdefH,Bstrtolower(label+(g_numLabels<<6))); - - if (lLabelID == -1) - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYMBOLNOTRECOGNIZED); - return 0; - } - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=lLabelID; - - // now at target VAR... - - // get the ID of the DEF - if (tw==CON_GETUSERDEF) - C_GetNextVarType(GAMEVAR_READONLY); - else - C_GetNextVar(); - break; - } - - case CON_SETACTORVAR: - case CON_SETPLAYERVAR: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - case CON_GETACTORVAR: - case CON_GETPLAYERVAR: - { - // syntax [gs]etactorvar[]. - // gets the value of the per-actor variable varx into VAR - - // now get name of - while ((*textptr != '[')) - { - textptr++; - } - if (*textptr == '[') - textptr++; - - // get the ID of the DEF - g_labelsOnly = 1; - C_GetNextVar(); - g_labelsOnly = 0; - // now get name of . - while (*textptr != '.') - { - if (*textptr == 0xa) - break; - if (!*textptr) - break; - - textptr++; - } - if (*textptr!='.') - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYNTAXERROR); - return 0; - } - textptr++; - - if (g_scriptPtr[-1] == g_iThisActorID) // convert to "setvarvar" - { - g_scriptPtr--; - g_scriptPtr[-1]=CON_SETVARVAR; - if (tw == CON_SETACTORVAR || tw == CON_SETPLAYERVAR) - { - C_GetNextVarType(GAMEVAR_READONLY); - C_GetNextVar(); - } - else - { - g_scriptPtr++; - C_GetNextVar(); - g_scriptPtr-=2; - C_GetNextVarType(GAMEVAR_READONLY); - g_scriptPtr++; - } - break; - } - - /// now pointing at 'xxx' - - // get the ID of the DEF - C_GetNextLabelName(); - //printf("found label of '%s'\n", label+(g_numLabels<<6)); - - // Check to see if it's a keyword - if (hash_find(&h_keywords,label+(g_numLabels<<6))>=0) - { - g_numCompilerErrors++; - C_ReportError(ERROR_ISAKEYWORD); - return 0; - } - - i=GetDefID(label+(g_numLabels<<6)); - //printf("Label '%s' ID is %d\n",label+(g_numLabels<<6), i); - if (i<0) - { - // not a defined DEF - g_numCompilerErrors++; - C_ReportError(ERROR_NOTAGAMEVAR); - return 0; - } - if (aGameVars[i].dwFlags & GAMEVAR_READONLY) - { - g_numCompilerErrors++; - C_ReportError(ERROR_VARREADONLY); - return 0; - } - - switch (tw) - { - case CON_SETACTORVAR: - { - if (!(aGameVars[i].dwFlags & GAMEVAR_PERACTOR)) - { - g_numCompilerErrors++; - C_ReportError(-1); - initprintf("%s:%d: error: variable `%s' is not per-actor.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - return 0; - } - break; - } - case CON_SETPLAYERVAR: - { - if (!(aGameVars[i].dwFlags & GAMEVAR_PERPLAYER)) - { - g_numCompilerErrors++; - C_ReportError(-1); - initprintf("%s:%d: error: variable `%s' is not per-player.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - return 0; - } - break; - } - } - - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=i; // the ID of the DEF (offset into array...) - - switch (tw) - { - case CON_GETACTORVAR: - case CON_GETPLAYERVAR: - C_GetNextVarType(GAMEVAR_READONLY); - break; - default: - C_GetNextVar(); - break; - } - break; - } - - case CON_SETACTOR: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - case CON_GETACTOR: - { - int32_t lLabelID; - - // syntax getwall[].x - // gets the value of wall[].xxx into - - // now get name of .xxx - while ((*textptr != '[')) - textptr++; - - if (*textptr == '[') - textptr++; - - // get the ID of the DEF - g_labelsOnly = 1; - C_GetNextVar(); - g_labelsOnly = 0; - // now get name of .xxx - - while (*textptr != '.') - { - if (*textptr == 0xa) - break; - if (!*textptr) - break; - - textptr++; - } - - if (*textptr != '.') - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYNTAXERROR); - return 0; - } - textptr++; - /// now pointing at 'xxx' - - C_GetNextLabelName(); - //printf("found xxx label of '%s'\n", label+(g_numLabels<<6)); - - lLabelID=C_GetLabelNameOffset(&actorH,Bstrtolower(label+(g_numLabels<<6))); - //printf("LabelID is %d\n",lLabelID); - if (lLabelID == -1) - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYMBOLNOTRECOGNIZED); - return 0; - } - - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=ActorLabels[lLabelID].lId; - - //printf("member's flags are: %02Xh\n",ActorLabels[lLabelID].flags); - if (ActorLabels[lLabelID].flags & LABEL_HASPARM2) - { - //printf("Member has PARM2\n"); - // get parm2 - // get the ID of the DEF - C_GetNextVar(); - } - - // now at target VAR... - - // get the ID of the DEF - if (tw == CON_GETACTOR) - C_GetNextVarType(GAMEVAR_READONLY); - else - C_GetNextVar(); - break; - } - - case CON_GETTSPR: - case CON_SETTSPR: - { - int32_t lLabelID; - - if (g_currentEvent != EVENT_ANIMATESPRITES) - { - C_ReportError(-1); - initprintf("%s:%d: warning: found `%s' outside of EVENT_ANIMATESPRITES\n",g_szScriptFileName,g_lineNumber,tempbuf); - g_numCompilerWarnings++; - } - - // syntax getwall[].x - // gets the value of wall[].xxx into - - // now get name of .xxx - while ((*textptr != '[')) - { - textptr++; - } - if (*textptr == '[') - textptr++; - - // get the ID of the DEF - g_labelsOnly = 1; - C_GetNextVar(); - g_labelsOnly = 0; - // now get name of .xxx - while (*textptr != '.') - { - if (*textptr == 0xa) - break; - if (!*textptr) - break; - - textptr++; - } - if (*textptr!='.') - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYNTAXERROR); - return 0; - } - textptr++; - /// now pointing at 'xxx' - C_GetNextLabelName(); - //printf("found xxx label of '%s'\n", label+(g_numLabels<<6)); - - lLabelID=C_GetLabelNameOffset(&tspriteH,Bstrtolower(label+(g_numLabels<<6))); - //printf("LabelID is %d\n",lLabelID); - if (lLabelID == -1) - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYMBOLNOTRECOGNIZED); - return 0; - } - - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=TsprLabels[lLabelID].lId; - - //printf("member's flags are: %02Xh\n",ActorLabels[lLabelID].flags); - - // now at target VAR... - - // get the ID of the DEF - if (tw == CON_GETTSPR) - C_GetNextVarType(GAMEVAR_READONLY); - else - C_GetNextVar(); - break; - } - - case CON_STOPACTORSOUND: - C_GetManyVars(2); - break; - - case CON_SECTOROFWALL: - C_GetNextVarType(GAMEVAR_READONLY); - C_GetNextVar(); - return 0; - - case CON_GETTICKS: -/* - if (C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_REVEVENTSYNC); - g_numCompilerWarnings++; - } -*/ - case CON_GETCURRADDRESS: - C_GetNextVarType(GAMEVAR_READONLY); - return 0; - - case CON_ESHOOTVAR: - case CON_ESPAWNVAR: - case CON_QSPAWNVAR: - case CON_EQSPAWNVAR: - case CON_OPERATERESPAWNS: - case CON_OPERATEMASTERSWITCHES: - case CON_CHECKACTIVATORMOTION: - case CON_TIME: - case CON_INITTIMER: - case CON_LOCKPLAYER: - case CON_SHOOTVAR: - case CON_QUAKE: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - case CON_JUMP: - case CON_CMENU: - case CON_SOUNDVAR: - case CON_GLOBALSOUNDVAR: - case CON_STOPSOUNDVAR: - case CON_SOUNDONCEVAR: - case CON_ANGOFFVAR: - case CON_CHECKAVAILWEAPON: - case CON_CHECKAVAILINVEN: - case CON_GUNIQHUDID: - case CON_SAVEGAMEVAR: - case CON_READGAMEVAR: - case CON_USERQUOTE: - case CON_STARTTRACKVAR: - case CON_CLEARMAPSTATE: - case CON_ACTIVATECHEAT: - case CON_SETGAMEPALETTE: - C_GetNextVar(); - return 0; - - case CON_ENHANCED: - { - // don't store in pCode... - g_scriptPtr--; - //printf("We are enhanced, baby...\n"); - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - if (*g_scriptPtr > BYTEVERSION_JF) - { - g_numCompilerWarnings++; - initprintf("%s:%d: warning: need build %d, found build %d\n",g_szScriptFileName,g_lineNumber,k,BYTEVERSION_JF); - } - break; - } - - case CON_DYNAMICREMAP: - { - g_scriptPtr--; - if (g_dynamicTileMapping++) - { - initprintf("%s:%d: warning: duplicate dynamicremap statement\n",g_szScriptFileName,g_lineNumber); - g_numCompilerWarnings++; - } - else initprintf("Using dynamic tile remapping\n"); - break; - } - - case CON_RANDVAR: - case CON_ZSHOOT: - case CON_EZSHOOT: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - case CON_SETVAR: - case CON_ADDVAR: - case CON_SUBVAR: - case CON_DISPLAYRANDVAR: - case CON_MULVAR: - case CON_DIVVAR: - case CON_MODVAR: - case CON_ANDVAR: - case CON_ORVAR: - case CON_XORVAR: - case CON_SHIFTVARL: - case CON_SHIFTVARR: - - { - intptr_t *inst = g_scriptPtr-1; - char *tptr = textptr; - // syntax: [rand|add|set]var - // sets var1 to const1 - // adds const1 to var1 (const1 can be negative...) - //printf("Found [add|set]var at line= %d\n",g_lineNumber); - - // get the ID of the DEF - if (tw != CON_ZSHOOT && tw != CON_EZSHOOT) - C_GetNextVarType(GAMEVAR_READONLY); - else C_GetNextVar(); - - C_GetNextValue(LABEL_DEFINE); // the number to check against... - - if (tw == CON_MULVAR && *(g_scriptPtr-1) == -1) - { - *inst = CON_INV; - g_scriptPtr--; - return 0; - } - - if (tw == CON_DIVVAR || (tw == CON_MULVAR && *(g_scriptPtr-1) > 0)) - { - int32_t i = *(g_scriptPtr-1); - j = klabs(*(g_scriptPtr-1)); - - if (C_IntPow2(j)) - { - *inst = ((tw == CON_DIVVAR) ? CON_SHIFTVARR : CON_SHIFTVARL); - *(g_scriptPtr-1) = C_Pow2IntLogBase2(j); -// initprintf("%s:%d: replacing multiply/divide with shift\n",g_szScriptFileName,g_lineNumber); - - if (i == j) - return 0; - - *g_scriptPtr++ = CON_INV + (g_lineNumber<<12); - textptr = tptr; - C_GetNextVarType(GAMEVAR_READONLY); - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; -// initprintf("%s:%d: adding inversion\n",g_szScriptFileName,g_lineNumber); - } - } - } - return 0; - case CON_WRITEARRAYTOFILE: - case CON_READARRAYFROMFILE: - C_GetNextLabelName(); - i=GetADefID(label+(g_numLabels<<6)); - if (i > (-1)) - { - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=i; - } - else - { - g_numCompilerErrors++; - C_ReportError(ERROR_NOTAGAMEARRAY); - return 1; - } - C_GetNextValue(LABEL_DEFINE); - return 0; - case CON_COPY: - C_GetNextLabelName(); - i=GetADefID(label+(g_numLabels<<6)); - if (i > (-1)) - { - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=i; - } - else - { - g_numCompilerErrors++; - C_ReportError(ERROR_NOTAGAMEARRAY); - return 1; - } - C_SkipComments();// skip comments and whitespace - if (*textptr != '[') - - { - g_numCompilerErrors++; - C_ReportError(ERROR_GAMEARRAYBNO); - return 1; - } - textptr++; - C_GetNextVar(); - C_SkipComments();// skip comments and whitespace - if (*textptr != ']') - { - g_numCompilerErrors++; - C_ReportError(ERROR_GAMEARRAYBNC); - return 1; - } - textptr++; - case CON_SETARRAY: - C_GetNextLabelName(); - i=GetADefID(label+(g_numLabels<<6)); - if (i > (-1)) - { - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=i; - } - else - { - g_numCompilerErrors++; - C_ReportError(ERROR_NOTAGAMEARRAY); - return 1; - } - - C_SkipComments();// skip comments and whitespace - if (*textptr != '[') - { - g_numCompilerErrors++; - C_ReportError(ERROR_GAMEARRAYBNO); - return 1; - } - textptr++; - C_GetNextVar(); - C_SkipComments();// skip comments and whitespace - if (*textptr != ']') - { - g_numCompilerErrors++; - C_ReportError(ERROR_GAMEARRAYBNC); - return 1; - } - textptr++; - C_GetNextVar(); - return 0; - case CON_GETARRAYSIZE: - case CON_RESIZEARRAY: - C_GetNextLabelName(); - i=GetADefID(label+(g_numLabels<<6)); - if (i < 0) - { - g_numCompilerErrors++; - C_ReportError(ERROR_NOTAGAMEARRAY); - return 1; - } - - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=i; - - C_SkipComments(); - C_GetNextVar(); - return 0; - - case CON_RANDVARVAR: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - case CON_SETVARVAR: - case CON_ADDVARVAR: - case CON_SUBVARVAR: - case CON_MULVARVAR: - case CON_DIVVARVAR: - case CON_MODVARVAR: - case CON_ANDVARVAR: - case CON_ORVARVAR: - case CON_XORVARVAR: - case CON_DISPLAYRANDVARVAR: - case CON_SIN: - case CON_COS: - C_GetNextVarType(GAMEVAR_READONLY); - C_GetNextVar(); - return 0; - - case CON_SMAXAMMO: - case CON_ADDWEAPONVAR: - case CON_ACTIVATEBYSECTOR: - case CON_OPERATESECTORS: - case CON_OPERATEACTIVATORS: - case CON_SSP: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - case CON_GMAXAMMO: - case CON_DIST: - case CON_LDIST: - case CON_GETINCANGLE: - case CON_GETANGLE: - case CON_MULSCALE: - case CON_SETASPECT: - // get the ID of the DEF - switch (tw) - { - case CON_DIST: - case CON_LDIST: - case CON_GETANGLE: - case CON_GETINCANGLE: - C_GetNextVarType(GAMEVAR_READONLY); - break; - default: - C_GetNextVar(); - break; - } - - // get the ID of the DEF - if (tw == CON_GMAXAMMO) - C_GetNextVarType(GAMEVAR_READONLY); - else C_GetNextVar(); - - switch (tw) - { - case CON_DIST: - case CON_LDIST: - case CON_GETANGLE: - case CON_GETINCANGLE: - C_GetNextVar(); - break; - case CON_MULSCALE: - C_GetManyVars(2); - break; - } - return 0; - - case CON_FLASH: - case CON_SAVEMAPSTATE: - case CON_LOADMAPSTATE: - return 0; - - case CON_DRAGPOINT: - case CON_GETKEYNAME: - C_GetManyVars(3); - return 0; - - case CON_GETFLORZOFSLOPE: - case CON_GETCEILZOFSLOPE: - C_GetManyVars(3); - C_GetNextVarType(GAMEVAR_READONLY); - return 0; - - case CON_DEFINEPROJECTILE: - { - int32_t y; - int32_t z; - - if (g_processingState || g_parsingActorPtr) - { - C_ReportError(ERROR_FOUNDWITHIN); - g_numCompilerErrors++; - } - - g_scriptPtr--; - - C_GetNextValue(LABEL_DEFINE); - j = *(g_scriptPtr-1); - - if (j > MAXTILES-1) - { - C_ReportError(ERROR_EXCEEDSMAXTILES); - g_numCompilerErrors++; - } - - C_GetNextValue(LABEL_DEFINE); - y = *(g_scriptPtr-1); - C_GetNextValue(LABEL_DEFINE); - z = *(g_scriptPtr-1); - - C_SetProjectile(j,y,z); - SpriteFlags[j] |= SPRITE_PROJECTILE; - return 0; - } - - case CON_SPRITEFLAGS: - { - if (g_parsingActorPtr == 0 && g_processingState == 0) - { - g_scriptPtr--; - - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - j = *g_scriptPtr; - - if (j > MAXTILES-1) - { - C_ReportError(ERROR_EXCEEDSMAXTILES); - g_numCompilerErrors++; - } - - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - SpriteFlags[j] = *g_scriptPtr; - - return 0; - } -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - C_GetNextVar(); - return 0; - } - - case CON_SPRITESHADOW: - case CON_SPRITENVG: - case CON_SPRITENOSHADE: - case CON_SPRITENOPAL: - case CON_PRECACHE: - { - if (g_processingState || g_parsingActorPtr) - { - C_ReportError(ERROR_FOUNDWITHIN); - g_numCompilerErrors++; - } - - g_scriptPtr--; - - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - j = *g_scriptPtr; - - if (j > MAXTILES-1) - { - C_ReportError(ERROR_EXCEEDSMAXTILES); - g_numCompilerErrors++; - } - - switch (tw) - { - case CON_SPRITESHADOW: - SpriteFlags[*g_scriptPtr] |= SPRITE_SHADOW; - break; - case CON_SPRITENVG: - SpriteFlags[*g_scriptPtr] |= SPRITE_NVG; - break; - case CON_SPRITENOSHADE: - SpriteFlags[*g_scriptPtr] |= SPRITE_NOSHADE; - break; - case CON_SPRITENOPAL: - SpriteFlags[*g_scriptPtr] |= SPRITE_NOPAL; - break; - case CON_PRECACHE: - SpriteCacheList[*g_scriptPtr][0] = j; - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - i = *g_scriptPtr; - if (i > MAXTILES-1) - { - C_ReportError(ERROR_EXCEEDSMAXTILES); - g_numCompilerErrors++; - } - SpriteCacheList[j][1] = i; - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - i = *g_scriptPtr; - SpriteCacheList[j][2] = i; - break; - } - return 0; - } - - case CON_IFACTORSOUND: - case CON_IFVARVARG: - case CON_IFVARVARL: - case CON_IFVARVARE: - case CON_IFVARVARN: - case CON_IFVARVARAND: - case CON_IFVARVAROR: - case CON_IFVARVARXOR: - case CON_IFVARVAREITHER: - case CON_WHILEVARVARN: - { - intptr_t offset; - intptr_t lastScriptPtr = g_scriptPtr - &script[0] - 1; - - g_ifElseAborted = 0; - - C_GetManyVars(2); - - if (C_CheckMalformedBranch(lastScriptPtr)) - return 0; - - tempscrptr = g_scriptPtr; - offset = (unsigned)(g_scriptPtr-script); - g_scriptPtr++; // Leave a spot for the fail location - - C_ParseCommand(); - - if (C_CheckEmptyBranch(tw, lastScriptPtr)) - return 0; - - tempscrptr = (intptr_t *)script+offset; - *tempscrptr = (intptr_t) g_scriptPtr; - bitptr[(tempscrptr-script)>>3] |= (BITPTR_POINTER<<((tempscrptr-script)&7)); - - if (tw != CON_WHILEVARVARN) - { - j = C_GetKeyword(); - - if (j == CON_ELSE || j == CON_LEFTBRACE) - g_checkingIfElse++; - } - return 0; - } - - case CON_SPGETLOTAG: - case CON_SPGETHITAG: - case CON_SECTGETLOTAG: - case CON_SECTGETHITAG: - case CON_GETTEXTUREFLOOR: - case CON_GETTEXTURECEILING: - // no paramaters... - return 0; - - case CON_STARTTRACK: - // one parameter (track#) - C_GetNextValue(LABEL_DEFINE); - return 0; - - case CON_IFVARL: - case CON_IFVARG: - case CON_IFVARE: - case CON_IFVARN: - case CON_IFVARAND: - case CON_IFVAROR: - case CON_IFVARXOR: - case CON_IFVAREITHER: - case CON_WHILEVARN: - { - intptr_t offset; - intptr_t lastScriptPtr = (g_scriptPtr-script-1); - - g_ifElseAborted = 0; - // get the ID of the DEF - C_GetNextVar(); - C_GetNextValue(LABEL_DEFINE); // the number to check against... - - if (C_CheckMalformedBranch(lastScriptPtr)) - return 0; - - tempscrptr = g_scriptPtr; - offset = (unsigned)(tempscrptr-script); - g_scriptPtr++; //Leave a spot for the fail location - - C_ParseCommand(); - - if (C_CheckEmptyBranch(tw, lastScriptPtr)) - return 0; - - tempscrptr = (intptr_t *)script+offset; - *tempscrptr = (intptr_t) g_scriptPtr; - bitptr[(tempscrptr-script)>>3] |= (BITPTR_POINTER<<((tempscrptr-script)&7)); - - if (tw != CON_WHILEVARN) - { - j = C_GetKeyword(); - - if (j == CON_ELSE || j == CON_LEFTBRACE) - g_checkingIfElse++; - } - - return 0; - } - case CON_ADDLOGVAR: - - // syntax: addlogvar - - // prints the line number in the log file. - /* *g_scriptPtr=g_lineNumber; - g_scriptPtr++; */ - - // get the ID of the DEF - C_GetNextVar(); - return 0; - - case CON_ROTATESPRITE16: - case CON_ROTATESPRITE: - if (g_parsingEventPtr == 0 && g_processingState == 0) - { - C_ReportError(ERROR_EVENTONLY); - g_numCompilerErrors++; - } - - // syntax: - // int32_t x, int32_t y, int32_t z, short a, short tilenum, int8_t shade, char orientation, x1, y1, x2, y2 - // myospal adds char pal - - // get the ID of the DEFs - - C_GetManyVars(12); - break; - - case CON_SHOWVIEW: - if (g_parsingEventPtr == 0 && g_processingState == 0) - { - C_ReportError(ERROR_EVENTONLY); - g_numCompilerErrors++; - } - - C_GetManyVars(10); - break; - - case CON_GETZRANGE: - C_GetManyVars(4); - C_GetManyVarsType(GAMEVAR_READONLY,4); - C_GetManyVars(2); - break; - - case CON_SECTSETINTERPOLATION: - case CON_SECTCLEARINTERPOLATION: - C_GetNextVar(); - break; - - case CON_CLIPMOVE: - case CON_CLIPMOVENOSLIDE: - // ,,,z,, xvect,yvect,walldist,floordist,ceildist,clipmask - C_GetManyVarsType(GAMEVAR_READONLY,3); - C_GetNextVar(); - C_GetNextVarType(GAMEVAR_READONLY); - C_GetManyVars(6); - break; - - case CON_CALCHYPOTENUSE: - C_GetNextVarType(GAMEVAR_READONLY); - C_GetManyVars(2); - break; - - case CON_LINEINTERSECT: - case CON_RAYINTERSECT: - // lineintersect x y z x y z x y x y - // rayintersect x y z vx vy vz x y x y - C_GetManyVars(10); - C_GetManyVarsType(GAMEVAR_READONLY,4); - break; - - case CON_HITSCAN: - case CON_CANSEE: - // get the ID of the DEF - C_GetManyVars(tw==CON_CANSEE?8:7); - C_GetManyVarsType(GAMEVAR_READONLY,tw==CON_CANSEE?1:6); - if (tw==CON_HITSCAN) C_GetNextVar(); - break; - - case CON_CANSEESPR: - C_GetManyVars(2); - C_GetNextVarType(GAMEVAR_READONLY); - break; - - case CON_NEARTAG: - C_GetManyVars(5); - C_GetManyVarsType(GAMEVAR_READONLY,4); - C_GetManyVars(2); - break; - - case CON_ROTATEPOINT: - C_GetManyVars(5); - C_GetManyVarsType(GAMEVAR_READONLY,2); - break; - - case CON_GETTIMEDATE: - C_GetManyVarsType(GAMEVAR_READONLY,8); - break; - - case CON_MOVESPRITE: - case CON_SETSPRITE: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - C_GetManyVars(4); - if (tw == CON_MOVESPRITE) - { - C_GetNextVar(); - C_GetNextVarType(GAMEVAR_READONLY); - } - break; - - case CON_MINITEXT: - case CON_GAMETEXT: - case CON_GAMETEXTZ: - case CON_DIGITALNUMBER: - case CON_DIGITALNUMBERZ: - if (g_parsingEventPtr == 0 && g_processingState == 0) - { - C_ReportError(ERROR_EVENTONLY); - g_numCompilerErrors++; - } - - switch (tw) - { - case CON_GAMETEXTZ: - case CON_DIGITALNUMBERZ: - C_GetManyVars(1); - case CON_GAMETEXT: - case CON_DIGITALNUMBER: - C_GetManyVars(6); - default: - C_GetManyVars(5); - break; - } - break; - - case CON_UPDATESECTOR: - case CON_UPDATESECTORZ: - C_GetManyVars(2); - if (tw==CON_UPDATESECTORZ) - C_GetNextVar(); - C_GetNextVarType(GAMEVAR_READONLY); - break; - - case CON_MYOS: - case CON_MYOSPAL: - case CON_MYOSX: - case CON_MYOSPALX: - if (g_parsingEventPtr == 0 && g_processingState == 0) - { - C_ReportError(ERROR_EVENTONLY); - g_numCompilerErrors++; - } - - // syntax: - // int32_t x, int32_t y, short tilenum, int8_t shade, char orientation - // myospal adds char pal - - C_GetManyVars(5); - if (tw==CON_MYOSPAL || tw==CON_MYOSPALX) - { - // Parse: pal - - // get the ID of the DEF - C_GetNextVar(); - } - break; - - case CON_FINDPLAYER: - case CON_FINDOTHERPLAYER: - case CON_DISPLAYRAND: - - // syntax: displayrand - // gets rand (not game rand) into - - // Get The ID of the DEF - C_GetNextVarType(GAMEVAR_READONLY); - break; - - case CON_SWITCH: - { - intptr_t tempoffset; - - //AddLog("Got Switch statement"); - if (g_checkingSwitch) - { - // Bsprintf(g_szBuf,"ERROR::%s %d: g_checkingSwitch=",__FILE__,__LINE__, g_checkingSwitch); - // AddLog(g_szBuf); - } - g_checkingSwitch++; // allow nesting (if other things work) - // Get The ID of the DEF - C_GetNextVar(); - - tempscrptr= g_scriptPtr; - tempoffset = (unsigned)(tempscrptr-script); - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=0; // leave spot for end location (for after processing) - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=0; // count of case statements - g_caseScriptPtr=g_scriptPtr; // the first case's pointer. - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=0; // leave spot for 'default' location (null if none) - - temptextptr=textptr; - // probably does not allow nesting... - - //AddLog("Counting Case Statements..."); - - j=C_CountCaseStatements(); -// initprintf("Done Counting Case Statements for switch %d: found %d.\n", g_checkingSwitch,j); - g_scriptPtr+=j*2; - C_SkipComments(); - g_scriptPtr-=j*2; // allocate buffer for the table - tempscrptr = (intptr_t *)(script+tempoffset); - - //AddLog(g_szBuf); - if (g_checkingSwitch>1) - { - // Bsprintf(g_szBuf,"ERROR::%s %d: g_checkingSwitch=",__FILE__,__LINE__, g_checkingSwitch); - // AddLog(g_szBuf); - } - if (j<0) - { - return 1; - } - if (tempscrptr) - { - tempscrptr[1]=(intptr_t)j; // save count of cases - } - else - { - //Bsprintf(g_szBuf,"ERROR::%s %d",__FILE__,__LINE__); - //AddLog(g_szBuf); - } - - while (j--) - { - // leave room for statements - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=0; // value check - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=0; // code offset - C_SkipComments(); - } - - //Bsprintf(g_szBuf,"SWITCH1: '%.22s'",textptr); - //AddLog(g_szBuf); - - g_numCases=0; - while (C_ParseCommand() == 0) - { - //Bsprintf(g_szBuf,"SWITCH2: '%.22s'",textptr); - //AddLog(g_szBuf); - } - tempscrptr = (intptr_t *)(script+tempoffset); - - //Bsprintf(g_szBuf,"SWITCHXX: '%.22s'",textptr); - //AddLog(g_szBuf); - // done processing switch. clean up. - if (g_checkingSwitch<1) - { - // Bsprintf(g_szBuf,"ERROR::%s %d: g_checkingSwitch=%d",__FILE__,__LINE__, g_checkingSwitch); - // AddLog(g_szBuf); - } - g_numCases=0; - if (tempscrptr) - { - intptr_t t,n; - for (i=3; i<3+tempscrptr[1]*2-2; i+=2) // sort them - { - t=tempscrptr[i]; n=i; - for (j=i+2; j<3+tempscrptr[1]*2; j+=2) - if (tempscrptr[j]>3] |= (BITPTR_POINTER<<((tempscrptr-script)&7)); - } - else - { - //Bsprintf(g_szBuf,"ERROR::%s %d",__FILE__,__LINE__); - //AddLog(g_szBuf); - } - g_caseScriptPtr=NULL; - // decremented in endswitch. Don't decrement here... - // g_checkingSwitch--; // allow nesting (maybe if other things work) - tempscrptr=NULL; - if (g_checkingSwitch) - { - //Bsprintf(g_szBuf,"ERROR::%s %d: g_checkingSwitch=%d",__FILE__,__LINE__, g_checkingSwitch); - //AddLog(g_szBuf); - } - //AddLog("End of Switch statement"); - } - break; - - case CON_CASE: - { - intptr_t tempoffset = 0; - //AddLog("Found Case"); - - if (g_checkingSwitch < 1) - { - g_numCompilerErrors++; - C_ReportError(-1); - initprintf("%s:%d: error: found `case' statement when not in switch\n",g_szScriptFileName,g_lineNumber); - g_scriptPtr--; - return 1; - } - -repeatcase: - g_scriptPtr--; // don't save in code - g_numCases++; - //Bsprintf(g_szBuf,"case1: %.12s",textptr); - //AddLog(g_szBuf); - C_GetNextValue(LABEL_DEFINE); - if (*textptr == ':') - textptr++; - //Bsprintf(g_szBuf,"case2: %.12s",textptr); - //AddLog(g_szBuf); - - j= *(--g_scriptPtr); // get value - //Bsprintf(g_szBuf,"case: Value of case %d is %d",(int32_t)g_numCases,(int32_t)j); - //AddLog(g_szBuf); - if (g_caseScriptPtr) - { - for (i=(g_numCases/2)-1; i>=0; i--) - if (g_caseScriptPtr[i*2+1]==j) - { - g_numCompilerWarnings++; - C_ReportError(WARNING_DUPLICATECASE); - break; - } - //AddLog("Adding value to script"); - g_caseScriptPtr[g_numCases++]=j; // save value - g_caseScriptPtr[g_numCases]=(intptr_t)((intptr_t *)g_scriptPtr-&script[0]); // save offset - } - // j = C_GetKeyword(); - //Bsprintf(g_szBuf,"case3: %.12s",textptr); - //AddLog(g_szBuf); - - if (C_GetKeyword() == CON_CASE) - { - //AddLog("Found Repeat Case"); - C_GetNextKeyword(); // eat 'case' - goto repeatcase; - } - //Bsprintf(g_szBuf,"case4: '%.12s'",textptr); - //AddLog(g_szBuf); - tempoffset = (unsigned)(tempscrptr-script); - - while (C_ParseCommand() == 0) - { - //Bsprintf(g_szBuf,"case5 '%.25s'",textptr); - //AddLog(g_szBuf); - if (C_GetKeyword() == CON_CASE) - { - //AddLog("Found Repeat Case"); - C_GetNextKeyword(); // eat 'case' - tempscrptr = (intptr_t *)(script+tempoffset); - goto repeatcase; - } - } - tempscrptr = (intptr_t *)(script+tempoffset); - //AddLog("End Case"); - return 0; - // break; - } - case CON_DEFAULT: - g_scriptPtr--; // don't save - - C_SkipComments(); - - if (*textptr == ':') - textptr++; - - if (g_checkingSwitch<1) - { - g_numCompilerErrors++; - C_ReportError(-1); - initprintf("%s:%d: error: found `default' statement when not in switch\n",g_szScriptFileName,g_lineNumber); - return 1; - } - if (g_caseScriptPtr && g_caseScriptPtr[0]!=0) - { - // duplicate default statement - g_numCompilerErrors++; - C_ReportError(-1); - initprintf("%s:%d: error: multiple `default' statements found in switch\n",g_szScriptFileName,g_lineNumber); - } - if (g_caseScriptPtr) - { - g_caseScriptPtr[0]=(intptr_t)(g_scriptPtr-&script[0]); // save offset -// bitptr[(g_caseScriptPtr-script)>>3] |= (BITPTR_POINTER<<((g_caseScriptPtr-script)&7)); - } - //Bsprintf(g_szBuf,"default: '%.22s'",textptr); - //AddLog(g_szBuf); - while (C_ParseCommand() == 0) - { - //Bsprintf(g_szBuf,"defaultParse: '%.22s'",textptr); - //AddLog(g_szBuf); - ; - } - break; - - case CON_ENDSWITCH: - //AddLog("End Switch"); - g_checkingSwitch--; - if (g_checkingSwitch < 0) - { - g_numCompilerErrors++; - C_ReportError(-1); - initprintf("%s:%d: error: found `endswitch' without matching `switch'\n",g_szScriptFileName,g_lineNumber); - } - return 1; // end of block - break; - - case CON_QSTRNCAT: - C_GetManyVars(3); - return 0; - case CON_CHANGESPRITESTAT: - case CON_CHANGESPRITESECT: - case CON_ZSHOOTVAR: - case CON_EZSHOOTVAR: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - g_numCompilerWarnings++; - C_ReportError(WARNING_EVENTSYNC); - } -*/ - case CON_GETPNAME: - case CON_STARTLEVEL: - case CON_QSTRCAT: - case CON_QSTRCPY: - case CON_QSTRLEN: - case CON_QGETSYSSTR: - case CON_HEADSPRITESTAT: - case CON_PREVSPRITESTAT: - case CON_NEXTSPRITESTAT: - case CON_HEADSPRITESECT: - case CON_PREVSPRITESECT: - case CON_NEXTSPRITESECT: - C_GetManyVars(2); - return 0; - case CON_QSUBSTR: - C_GetManyVars(4); - return 0; - case CON_SETACTORANGLE: - case CON_SETPLAYERANGLE: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - g_numCompilerWarnings++; - C_ReportError(WARNING_EVENTSYNC); - } -*/ - case CON_GETANGLETOTARGET: - case CON_GETACTORANGLE: - case CON_GETPLAYERANGLE: - // Syntax: - - // get the ID of the DEF - C_GetNextVar(); - return 0; - - case CON_ADDLOG: - // syntax: addlog - - // prints the line number in the log file. - /* *g_scriptPtr=g_lineNumber; - g_scriptPtr++; */ - return 0; - - case CON_IFRND: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - case CON_IFPDISTL: - case CON_IFPDISTG: - case CON_IFWASWEAPON: - case CON_IFACTIONCOUNT: - case CON_IFCOUNT: - case CON_IFACTOR: - case CON_IFSTRENGTH: - case CON_IFSPAWNEDBY: - case CON_IFGAPZL: - case CON_IFFLOORDISTL: - case CON_IFCEILINGDISTL: - // case 74: - case CON_IFPHEALTHL: - case CON_IFSPRITEPAL: - case CON_IFGOTWEAPONCE: - case CON_IFANGDIFFL: - case CON_IFSOUND: - case CON_IFAI: - case CON_IFACTION: - case CON_IFMOVE: - case CON_IFP: - case CON_IFPINVENTORY: - { - intptr_t offset; - intptr_t lastScriptPtr = (g_scriptPtr-&script[0]-1); - - g_ifElseAborted = 0; - - switch (tw) - { - case CON_IFAI: - C_GetNextValue(LABEL_AI); - break; - case CON_IFACTION: - C_GetNextValue(LABEL_ACTION); - break; - case CON_IFMOVE: - if ((C_GetNextValue(LABEL_MOVE|LABEL_DEFINE) == 0) && (*(g_scriptPtr-1) != 0) && (*(g_scriptPtr-1) != 1)) - { - C_ReportError(-1); - *(g_scriptPtr-1) = 0; - initprintf("%s:%d: warning: expected a move, found a constant.\n",g_szScriptFileName,g_lineNumber); - g_numCompilerWarnings++; - } - break; - case CON_IFPINVENTORY: - C_GetNextValue(LABEL_DEFINE); - C_GetNextValue(LABEL_DEFINE); - break; - case CON_IFP: - j = 0; - do - { - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - j |= *g_scriptPtr; - } - while (C_GetKeyword() == -1); - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr = j; - g_scriptPtr++; - break; - case CON_IFSOUND: - case CON_IFACTORSOUND: -/* - if (C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_REVEVENTSYNC); - g_numCompilerWarnings++; - } -*/ - default: - C_GetNextValue(LABEL_DEFINE); - break; - } - - if (C_CheckMalformedBranch(lastScriptPtr)) - return 0; - - tempscrptr = g_scriptPtr; - offset = (unsigned)(tempscrptr-script); - - g_scriptPtr++; //Leave a spot for the fail location - - C_ParseCommand(); - - if (C_CheckEmptyBranch(tw, lastScriptPtr)) - return 0; - - tempscrptr = (intptr_t *)script+offset; - *tempscrptr = (intptr_t) g_scriptPtr; - bitptr[(tempscrptr-script)>>3] |= (BITPTR_POINTER<<((tempscrptr-script)&7)); - - j = C_GetKeyword(); - - if (j == CON_ELSE || j == CON_LEFTBRACE) - g_checkingIfElse++; - - return 0; - } - - case CON_IFCLIENT: - case CON_IFSERVER: - case CON_IFONWATER: - case CON_IFINWATER: - case CON_IFACTORNOTSTAYPUT: - case CON_IFCANSEE: - case CON_IFHITWEAPON: - case CON_IFSQUISHED: - case CON_IFDEAD: - case CON_IFCANSHOOTTARGET: - case CON_IFHITSPACE: - case CON_IFOUTSIDE: - case CON_IFMULTIPLAYER: - case CON_IFINSPACE: - case CON_IFBULLETNEAR: - case CON_IFRESPAWN: - case CON_IFINOUTERSPACE: - case CON_IFNOTMOVING: - case CON_IFAWAYFROMWALL: - case CON_IFCANSEETARGET: - case CON_IFNOSOUNDS: - { - intptr_t offset; - intptr_t lastScriptPtr = (g_scriptPtr-&script[0]-1); - - g_ifElseAborted = 0; - - if (C_CheckMalformedBranch(lastScriptPtr)) - return 0; - - tempscrptr = g_scriptPtr; - offset = (unsigned)(tempscrptr-script); - - g_scriptPtr++; //Leave a spot for the fail location - - C_ParseCommand(); - - if (C_CheckEmptyBranch(tw, lastScriptPtr)) - return 0; - - tempscrptr = (intptr_t *)script+offset; - *tempscrptr = (intptr_t) g_scriptPtr; - bitptr[(tempscrptr-script)>>3] |= (BITPTR_POINTER<<((tempscrptr-script)&7)); - - j = C_GetKeyword(); - - if (j == CON_ELSE || j == CON_LEFTBRACE) - g_checkingIfElse++; - - return 0; - } - - case CON_LEFTBRACE: - if (!(g_processingState || g_parsingActorPtr || g_parsingEventPtr)) - { - g_numCompilerErrors++; - C_ReportError(ERROR_SYNTAXERROR); - } - /* if (C_GetKeyword() == CON_NULLOP) - { - // initprintf("%s:%d: warning: 'nullop' statement has no effect\n",g_szScriptFileName,g_lineNumber); - C_GetNextKeyword(); - g_scriptPtr--; - } - */ -#if 0 - if (C_GetKeyword() == CON_RIGHTBRACE) // rewrite "{ }" into "nullop" - { -// initprintf("%s:%d: rewriting empty braces '{ }' as 'nullop' from left\n",g_szScriptFileName,g_lineNumber); - *(--g_scriptPtr) = CON_NULLOP; - C_GetNextKeyword(); - g_scriptPtr--; - return 0; - } -#endif - g_numBraces++; - - do - done = C_ParseCommand(); - while (done == 0); - return 0; - - case CON_RIGHTBRACE: - g_numBraces--; - - if ((*(g_scriptPtr-2)>>12) == (IFELSE_MAGIC) && - ((*(g_scriptPtr-2) & 0xFFF) == CON_LEFTBRACE)) // rewrite "{ }" into "nullop" - { -// initprintf("%s:%d: rewriting empty braces '{ }' as 'nullop' from right\n",g_szScriptFileName,g_lineNumber); - *(g_scriptPtr-2) = CON_NULLOP + (IFELSE_MAGIC<<12); - g_scriptPtr -= 2; - - if (C_GetKeyword() != CON_ELSE && (*(g_scriptPtr-2)&0xFFF) != CON_ELSE) - g_ifElseAborted = 1; - else g_ifElseAborted = 0; - - j = C_GetKeyword(); - - if (g_checkingIfElse && j != CON_ELSE) - g_checkingIfElse--; - - return 1; - } - - if (g_numBraces < 0) - { - if (g_checkingSwitch) - { - C_ReportError(ERROR_NOENDSWITCH); - } - - C_ReportError(-1); - initprintf("%s:%d: error: found more `}' than `{'.\n",g_szScriptFileName,g_lineNumber); - g_numCompilerErrors++; - } - if (g_checkingIfElse && j != CON_ELSE) - g_checkingIfElse--; - - return 1; - - case CON_BETANAME: - g_scriptPtr--; - j = 0; - C_NextLine(); - return 0; - - case CON_DEFINEVOLUMENAME: - g_scriptPtr--; - - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - j = *g_scriptPtr; - C_SkipComments(); - - if (j < 0 || j > MAXVOLUMES-1) - { - initprintf("%s:%d: error: volume number exceeds maximum volume count.\n", - g_szScriptFileName,g_lineNumber); - g_numCompilerErrors++; - C_NextLine(); - break; - } - - i = 0; - - while (*textptr != 0x0a && *textptr != 0x0d && *textptr != 0) - { - EpisodeNames[j][i] = toupper(*textptr); - textptr++,i++; - if (i >= (signed)sizeof(EpisodeNames[j])-1) - { - initprintf("%s:%d: warning: truncating volume name to %d characters.\n", - g_szScriptFileName,g_lineNumber,(int32_t)sizeof(EpisodeNames[j])-1); - g_numCompilerWarnings++; - C_NextLine(); - break; - } - } - g_numVolumes = j+1; - EpisodeNames[j][i] = '\0'; - return 0; - - case CON_DEFINEGAMEFUNCNAME: - g_scriptPtr--; - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - j = *g_scriptPtr; - C_SkipComments(); - - if (j < 0 || j > NUMGAMEFUNCTIONS-1) - { - initprintf("%s:%d: error: function number exceeds number of game functions.\n", - g_szScriptFileName,g_lineNumber); - g_numCompilerErrors++; - C_NextLine(); - break; - } - - i = 0; - - while (*textptr != 0x0a && *textptr != 0x0d && *textptr != 0) - { - gamefunctions[j][i] = *textptr; - keydefaults[j*3][i] = *textptr; - textptr++,i++; - if (*textptr != 0x0a && *textptr != 0x0d && ispecial(*textptr)) - { - initprintf("%s:%d: warning: invalid character in function name.\n", - g_szScriptFileName,g_lineNumber); - g_numCompilerWarnings++; - C_NextLine(); - break; - } - if (i >= MAXGAMEFUNCLEN-1) - { - initprintf("%s:%d: warning: truncating function name to %d characters.\n", - g_szScriptFileName,g_lineNumber,MAXGAMEFUNCLEN); - g_numCompilerWarnings++; - C_NextLine(); - break; - } - } - gamefunctions[j][i] = '\0'; - keydefaults[j*3][i] = '\0'; - hash_add(&h_gamefuncs,gamefunctions[j],j,0); - { - char *str = Bstrtolower(Bstrdup(gamefunctions[j])); - hash_add(&h_gamefuncs,str,j,0); - Bfree(str); - } - - return 0; - - case CON_DEFINESKILLNAME: - g_scriptPtr--; - - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - j = *g_scriptPtr; - C_SkipComments(); - - if (j < 0 || j > 4) - { - initprintf("%s:%d: error: skill number exceeds maximum skill count.\n", - g_szScriptFileName,g_lineNumber); - g_numCompilerErrors++; - C_NextLine(); - break; - } - - i = 0; - - while (*textptr != 0x0a && *textptr != 0x0d && *textptr != 0) - { - SkillNames[j][i] = toupper(*textptr); - textptr++,i++; - if (i >= (signed)sizeof(SkillNames[j])-1) - { - initprintf("%s:%d: warning: truncating skill name to %d characters.\n", - g_szScriptFileName,g_lineNumber,(int32_t)sizeof(SkillNames[j])-1); - g_numCompilerWarnings++; - C_NextLine(); - break; - } - } - SkillNames[j][i] = '\0'; - return 0; - - case CON_SETGAMENAME: - { - char gamename[32]; - g_scriptPtr--; - - C_SkipComments(); - - i = 0; - - while (*textptr != 0x0a && *textptr != 0x0d && *textptr != 0) - { - gamename[i] = *textptr; - textptr++,i++; - if (i >= (signed)sizeof(gamename)-1) - { - initprintf("%s:%d: warning: truncating game name to %d characters.\n", - g_szScriptFileName,g_lineNumber,(int32_t)sizeof(gamename)-1); - g_numCompilerWarnings++; - C_NextLine(); - break; - } - } - gamename[i] = '\0'; - g_gameNamePtr = Bstrdup(gamename); - Bsprintf(tempbuf,"%s - " APPNAME,g_gameNamePtr); - wm_setapptitle(tempbuf); - } - return 0; - - case CON_SETDEFNAME: - { - g_scriptPtr--; - C_SkipComments(); - - j = 0; - while (isaltok(*textptr)) - { - tempbuf[j] = *(textptr++); - j++; - } - tempbuf[j] = '\0'; - g_defNamePtr = Bstrdup(tempbuf); - initprintf("Using DEF file: %s.\n",g_defNamePtr); - } - return 0; - - case CON_SETCFGNAME: - { - g_scriptPtr--; - C_SkipComments(); - - j = 0; - while (isaltok(*textptr)) - { - tempbuf[j] = *(textptr++); - j++; - } - tempbuf[j] = '\0'; - if (Bstrcmp(setupfilename,SETUPFILENAME) == 0) // not set to something else via -cfg - { - char temp[BMAX_PATH]; - struct stat st; - int32_t fullscreen = ud.config.ScreenMode; - int32_t xdim = ud.config.ScreenWidth, ydim = ud.config.ScreenHeight, bpp = ud.config.ScreenBPP; - int32_t usemouse = ud.config.UseMouse, usejoy = ud.config.UseJoystick; -#ifdef USE_OPENGL - int32_t glrm = glrendmode; -#endif - - if (Bstat(g_modDir, &st) < 0) - { - if (errno == ENOENT) // path doesn't exist - { - if (Bmkdir(g_modDir, S_IRWXU) < 0) - { - OSD_Printf("Failed to create configuration file directory %s\n", g_modDir); - return 0; - } - else OSD_Printf("Created configuration file directory %s\n", g_modDir); - } - else - { - // another type of failure - return 0; - } - } - else if ((st.st_mode & S_IFDIR) != S_IFDIR) - { - // directory isn't a directory - return 0; - } - - Bstrcpy(temp,tempbuf); - CONFIG_WriteSetup(1); - if (g_modDir[0] != '/') - Bsprintf(setupfilename,"%s/",g_modDir); - else setupfilename[0] = 0; - Bstrcat(setupfilename,temp); - - initprintf("Using config file '%s'.\n",setupfilename); - - CONFIG_ReadSetup(); - - ud.config.ScreenMode = fullscreen; - ud.config.ScreenWidth = xdim; - ud.config.ScreenHeight = ydim; - ud.config.ScreenBPP = bpp; - ud.config.UseMouse = usemouse; - ud.config.UseJoystick = usejoy; -#ifdef USE_OPENGL - glrendmode = glrm; -#endif - - } - } - return 0; - - case CON_DEFINEGAMETYPE: - g_scriptPtr--; - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - j = *g_scriptPtr; - - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - GametypeFlags[j] = *g_scriptPtr; - - C_SkipComments(); - - if (j < 0 || j > MAXGAMETYPES-1) - { - initprintf("%s:%d: error: gametype number exceeds maximum gametype count.\n",g_szScriptFileName,g_lineNumber); - g_numCompilerErrors++; - C_NextLine(); - break; - } - g_numGametypes = j+1; - - i = 0; - - while (*textptr != 0x0a && *textptr != 0x0d && *textptr != 0) - { - GametypeNames[j][i] = toupper(*textptr); - textptr++,i++; - if (i >= (signed)sizeof(GametypeNames[j])-1) - { - initprintf("%s:%d: warning: truncating gametype name to %d characters.\n", - g_szScriptFileName,g_lineNumber,(int32_t)sizeof(GametypeNames[j])-1); - g_numCompilerWarnings++; - C_NextLine(); - break; - } - } - GametypeNames[j][i] = '\0'; - return 0; - - case CON_DEFINELEVELNAME: - g_scriptPtr--; - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - j = *g_scriptPtr; - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - k = *g_scriptPtr; - C_SkipComments(); - - if (j < 0 || j > MAXVOLUMES-1) - { - initprintf("%s:%d: error: volume number exceeds maximum volume count.\n",g_szScriptFileName,g_lineNumber); - g_numCompilerErrors++; - C_NextLine(); - break; - } - if (k < 0 || k > MAXLEVELS-1) - { - initprintf("%s:%d: error: level number exceeds maximum number of levels per episode.\n",g_szScriptFileName,g_lineNumber); - g_numCompilerErrors++; - C_NextLine(); - break; - } - - i = 0; - - tempbuf[i] = '/'; - - while (*textptr != ' ' && *textptr != '\t' && *textptr != 0x0a) - { - tempbuf[i+1] = *textptr; - textptr++,i++; - if (i >= BMAX_PATH) - { - initprintf("%s:%d: error: level file name exceeds limit of %d characters.\n",g_szScriptFileName,g_lineNumber,BMAX_PATH); - g_numCompilerErrors++; - while (*textptr != ' ' && *textptr != '\t') textptr++; - break; - } - } - tempbuf[i+1] = '\0'; - - Bcorrectfilename(tempbuf,0); - - if (MapInfo[j *MAXLEVELS+k].filename == NULL) - MapInfo[j *MAXLEVELS+k].filename = Bcalloc(Bstrlen(tempbuf)+1,sizeof(uint8_t)); - else if ((Bstrlen(tempbuf)+1) > sizeof(MapInfo[j*MAXLEVELS+k].filename)) - MapInfo[j *MAXLEVELS+k].filename = Brealloc(MapInfo[j*MAXLEVELS+k].filename,(Bstrlen(tempbuf)+1)); - - Bstrcpy(MapInfo[j*MAXLEVELS+k].filename,tempbuf); - - C_SkipComments(); - - MapInfo[j *MAXLEVELS+k].partime = - (((*(textptr+0)-'0')*10+(*(textptr+1)-'0'))*REALGAMETICSPERSEC*60)+ - (((*(textptr+3)-'0')*10+(*(textptr+4)-'0'))*REALGAMETICSPERSEC); - - textptr += 5; - while (*textptr == ' ' || *textptr == '\t') textptr++; - - MapInfo[j *MAXLEVELS+k].designertime = - (((*(textptr+0)-'0')*10+(*(textptr+1)-'0'))*REALGAMETICSPERSEC*60)+ - (((*(textptr+3)-'0')*10+(*(textptr+4)-'0'))*REALGAMETICSPERSEC); - - textptr += 5; - while (*textptr == ' ' || *textptr == '\t') textptr++; - - i = 0; - - while (*textptr != 0x0a && *textptr != 0x0d && *textptr != 0) - { - tempbuf[i] = Btoupper(*textptr); - textptr++,i++; - if (i >= 32) - { - initprintf("%s:%d: warning: truncating level name to %d characters.\n", - g_szScriptFileName,g_lineNumber,32); - g_numCompilerWarnings++; - C_NextLine(); - break; - } - } - - tempbuf[i] = '\0'; - - if (MapInfo[j*MAXLEVELS+k].name == NULL) - MapInfo[j*MAXLEVELS+k].name = Bcalloc(Bstrlen(tempbuf)+1,sizeof(uint8_t)); - else if ((Bstrlen(tempbuf)+1) > sizeof(MapInfo[j*MAXLEVELS+k].name)) - MapInfo[j *MAXLEVELS+k].name = Brealloc(MapInfo[j*MAXLEVELS+k].name,(Bstrlen(tempbuf)+1)); - - /* initprintf("level name string len: %d\n",Bstrlen(tempbuf)); */ - - Bstrcpy(MapInfo[j*MAXLEVELS+k].name,tempbuf); - - return 0; - - case CON_DEFINEQUOTE: - case CON_REDEFINEQUOTE: - if (tw == CON_DEFINEQUOTE) - { - g_scriptPtr--; - } - - C_GetNextValue(LABEL_DEFINE); - - k = *(g_scriptPtr-1); - - if (k >= MAXQUOTES) - { - initprintf("%s:%d: error: quote number exceeds limit of %d.\n",g_szScriptFileName,g_lineNumber,MAXQUOTES); - g_numCompilerErrors++; - } - - if (ScriptQuotes[k] == NULL) - ScriptQuotes[k] = Bcalloc(MAXQUOTELEN,sizeof(uint8_t)); - - if (!ScriptQuotes[k]) - { - ScriptQuotes[k] = NULL; - Bsprintf(tempbuf,"Failed allocating %" PRIdPTR " byte quote text buffer.",sizeof(uint8_t) * MAXQUOTELEN); - G_GameExit(tempbuf); - } - - if (tw == CON_DEFINEQUOTE) - g_scriptPtr--; - - i = 0; - - while (*textptr == ' ' || *textptr == '\t') - textptr++; - - if (tw == CON_REDEFINEQUOTE) - { - if (ScriptQuoteRedefinitions[g_numQuoteRedefinitions] == NULL) - ScriptQuoteRedefinitions[g_numQuoteRedefinitions] = Bcalloc(MAXQUOTELEN,sizeof(uint8_t)); - if (!ScriptQuoteRedefinitions[g_numQuoteRedefinitions]) - { - ScriptQuoteRedefinitions[g_numQuoteRedefinitions] = NULL; - Bsprintf(tempbuf,"Failed allocating %" PRIdPTR " byte quote text buffer.",sizeof(uint8_t) * MAXQUOTELEN); - G_GameExit(tempbuf); - } - } - - while (*textptr != 0x0a && *textptr != 0x0d && *textptr != 0) - { - /* - if (*textptr == '%' && *(textptr+1) == 's') - { - initprintf("%s:%d: error: quote text contains string identifier.\n",g_szScriptFileName,g_lineNumber); - g_numCompilerErrors++; - while (*textptr != 0x0a && *textptr != 0x0d && *textptr != 0) textptr++; - break; - } - */ - if (tw == CON_DEFINEQUOTE) - *(ScriptQuotes[k]+i) = *textptr; - else - *(ScriptQuoteRedefinitions[g_numQuoteRedefinitions]+i) = *textptr; - textptr++,i++; - if (i >= MAXQUOTELEN-1) - { - initprintf("%s:%d: warning: truncating quote text to %d characters.\n",g_szScriptFileName,g_lineNumber,MAXQUOTELEN-1); - g_numCompilerWarnings++; - C_NextLine(); - break; - } - } - if (tw == CON_DEFINEQUOTE) - *(ScriptQuotes[k]+i) = '\0'; - else - { - *(ScriptQuoteRedefinitions[g_numQuoteRedefinitions]+i) = '\0'; - bitptr[(g_scriptPtr-script)>>3] &= ~(BITPTR_POINTER<<((g_scriptPtr-script)&7)); - *g_scriptPtr++=g_numQuoteRedefinitions; - g_numQuoteRedefinitions++; - } - return 0; - - case CON_CHEATKEYS: - g_scriptPtr--; - C_GetNextValue(LABEL_DEFINE); - CheatKeys[0] = *(g_scriptPtr-1); - C_GetNextValue(LABEL_DEFINE); - CheatKeys[1] = *(g_scriptPtr-1); - g_scriptPtr -= 2; - return 0; - - case CON_DEFINECHEAT: - g_scriptPtr--; - C_GetNextValue(LABEL_DEFINE); - k = *(g_scriptPtr-1); - - if (k > 25) - { - initprintf("%s:%d: error: cheat redefinition attempts to redefine nonexistent cheat.\n",g_szScriptFileName,g_lineNumber); - g_numCompilerErrors++; - C_NextLine(); - break; - } - g_scriptPtr--; - i = 0; - while (*textptr == ' ' || *textptr == '\t') - textptr++; - while (*textptr != 0x0a && *textptr != 0x0d && *textptr != 0 && *textptr != ' ') - { - CheatStrings[k][i] = *textptr; - textptr++,i++; - if (i >= (signed)sizeof(CheatStrings[k])-1) - { - initprintf("%s:%d: warning: truncating cheat string to %d characters.\n", - g_szScriptFileName,g_lineNumber,MAXCHEATLEN); //,sizeof(CheatStrings[k])-1); - g_numCompilerWarnings++; - C_NextLine(); - break; - } - } - CheatStrings[k][i] = '\0'; - return 0; - - case CON_DEFINESOUND: - g_scriptPtr--; - C_GetNextValue(LABEL_DEFINE); - k = *(g_scriptPtr-1); - if (k >= MAXSOUNDS) - { - initprintf("%s:%d: error: exceeded sound limit of %d.\n",g_szScriptFileName,g_lineNumber,MAXSOUNDS); - g_numCompilerErrors++; - } - g_scriptPtr--; - i = 0; - C_SkipComments(); - - if (g_sounds[k].filename == NULL) - g_sounds[k].filename = Bcalloc(BMAX_PATH,sizeof(uint8_t)); - if (!g_sounds[k].filename) - { - Bsprintf(tempbuf,"Failed allocating %" PRIdPTR " byte buffer.",sizeof(uint8_t) * BMAX_PATH); - G_GameExit(tempbuf); - } - - if (*textptr == '\"') - { - textptr++; - while (*textptr && *textptr != '\"') - { - g_sounds[k].filename[i++] = *textptr++; - if (i >= BMAX_PATH) - { - initprintf("%s:%d: error: sound filename exceeds limit of %d characters.\n",g_szScriptFileName,g_lineNumber,BMAX_PATH); - g_numCompilerErrors++; - C_SkipComments(); - break; - } - } - textptr++; - } - else while (*textptr != ' ' && *textptr != '\t' && *textptr != '\r' && *textptr != '\n') - { - g_sounds[k].filename[i++] = *textptr++; - if (i >= BMAX_PATH) - { - initprintf("%s:%d: error: sound filename exceeds limit of %d characters.\n",g_szScriptFileName,g_lineNumber,BMAX_PATH); - g_numCompilerErrors++; - C_SkipComments(); - break; - } - } - g_sounds[k].filename[i] = '\0'; - - C_GetNextValue(LABEL_DEFINE); - g_sounds[k].ps = *(g_scriptPtr-1); - C_GetNextValue(LABEL_DEFINE); - g_sounds[k].pe = *(g_scriptPtr-1); - C_GetNextValue(LABEL_DEFINE); - g_sounds[k].pr = *(g_scriptPtr-1); - C_GetNextValue(LABEL_DEFINE); - g_sounds[k].m = *(g_scriptPtr-1); - C_GetNextValue(LABEL_DEFINE); - g_sounds[k].vo = *(g_scriptPtr-1); - g_scriptPtr -= 5; - - if (k > g_maxSoundPos) - g_maxSoundPos = k; - return 0; - - case CON_ENDEVENT: - - if (g_parsingEventPtr == 0) - { - C_ReportError(-1); - initprintf("%s:%d: error: found `endevent' without open `onevent'.\n",g_szScriptFileName,g_lineNumber); - g_numCompilerErrors++; - } - if (g_numBraces > 0) - { - C_ReportError(ERROR_OPENBRACKET); - g_numCompilerErrors++; - } - if (g_numBraces < 0) - { - C_ReportError(ERROR_CLOSEBRACKET); - g_numCompilerErrors++; - } - // if event has already been declared then put a jump in instead - if (previous_event) - { - g_scriptPtr--; - *(g_scriptPtr++) = CON_JUMP; - *(g_scriptPtr++) = MAXGAMEVARS; - *(g_scriptPtr++) = previous_event-script; - *(g_scriptPtr++) = CON_ENDEVENT; - previous_event = NULL; - } - g_parsingEventPtr = g_parsingActorPtr = 0; - g_currentEvent = -1; - Bsprintf(g_szCurrentBlockName,"(none)"); - return 0; - - case CON_ENDA: - if (g_parsingActorPtr == 0) - { - C_ReportError(-1); - initprintf("%s:%d: error: found `enda' without open `actor'.\n",g_szScriptFileName,g_lineNumber); - g_numCompilerErrors++; - } - if (g_numBraces > 0) - { - C_ReportError(ERROR_OPENBRACKET); - g_numCompilerErrors++; - } - if (g_numBraces < 0) - { - C_ReportError(ERROR_CLOSEBRACKET); - g_numCompilerErrors++; - } - g_parsingActorPtr = 0; - Bsprintf(g_szCurrentBlockName,"(none)"); - return 0; - - case CON_RETURN: - case CON_BREAK: - if (g_checkingSwitch) - { - if (otw == CON_BREAK) - { - C_ReportError(-1); - initprintf("%s:%d: warning: duplicate `break'.\n",g_szScriptFileName, g_lineNumber); - g_numCompilerWarnings++; - g_scriptPtr--; - return 0; - } - return 1; - } - return 0; - - case CON_SCRIPTSIZE: - g_scriptPtr--; - C_GetNextValue(LABEL_DEFINE); - j = *(g_scriptPtr-1); - g_scriptPtr--; - C_SkipComments(); - return C_SetScriptSize(j); - - case CON_FALL: - case CON_TIP: - // case 21: - case CON_KILLIT: - case CON_RESETACTIONCOUNT: - case CON_PSTOMP: - case CON_RESETPLAYER: - case CON_RESETCOUNT: - case CON_WACKPLAYER: - case CON_OPERATE: - case CON_RESPAWNHITAG: - case CON_GETLASTPAL: - case CON_PKICK: - case CON_MIKESND: - case CON_TOSSWEAPON: -/* - if (!C_CheckEventSync(g_currentEvent)) - { - C_ReportError(WARNING_EVENTSYNC); - g_numCompilerWarnings++; - } -*/ - case CON_NULLOP: - if (tw == CON_NULLOP) - { - if (C_GetKeyword() != CON_ELSE) - { - C_ReportError(-1); - g_numCompilerWarnings++; - initprintf("%s:%d: warning: `nullop' found without `else'\n",g_szScriptFileName,g_lineNumber); - g_scriptPtr--; - g_ifElseAborted = 1; - } - } - case CON_STOPALLSOUNDS: - return 0; - case CON_GAMESTARTUP: - { - int32_t params[30]; - - g_scriptPtr--; - for (j = 0; j < 30; j++) - { - C_GetNextValue(LABEL_DEFINE); - g_scriptPtr--; - params[j] = *g_scriptPtr; - - if (j != 25) continue; - - if (C_GetKeyword() != -1) - { -// initprintf("Duke Nukem 3D v1.3D style CON files detected.\n"); - break; - } - else - { - g_scriptVersion = 14; -// initprintf("Duke Nukem 3D v1.4+ style CON files detected.\n"); - } - - } - - /* - v1.3d v1.5 - DEFAULTVISIBILITY DEFAULTVISIBILITY - GENERICIMPACTDAMAGE GENERICIMPACTDAMAGE - MAXPLAYERHEALTH MAXPLAYERHEALTH - STARTARMORHEALTH STARTARMORHEALTH - RESPAWNACTORTIME RESPAWNACTORTIME - RESPAWNITEMTIME RESPAWNITEMTIME - RUNNINGSPEED RUNNINGSPEED - RPGBLASTRADIUS GRAVITATIONALCONSTANT - PIPEBOMBRADIUS RPGBLASTRADIUS - SHRINKERBLASTRADIUS PIPEBOMBRADIUS - TRIPBOMBBLASTRADIUS SHRINKERBLASTRADIUS - MORTERBLASTRADIUS TRIPBOMBBLASTRADIUS - BOUNCEMINEBLASTRADIUS MORTERBLASTRADIUS - SEENINEBLASTRADIUS BOUNCEMINEBLASTRADIUS - MAXPISTOLAMMO SEENINEBLASTRADIUS - MAXSHOTGUNAMMO MAXPISTOLAMMO - MAXCHAINGUNAMMO MAXSHOTGUNAMMO - MAXRPGAMMO MAXCHAINGUNAMMO - MAXHANDBOMBAMMO MAXRPGAMMO - MAXSHRINKERAMMO MAXHANDBOMBAMMO - MAXDEVISTATORAMMO MAXSHRINKERAMMO - MAXTRIPBOMBAMMO MAXDEVISTATORAMMO - MAXFREEZEAMMO MAXTRIPBOMBAMMO - CAMERASDESTRUCTABLE MAXFREEZEAMMO - NUMFREEZEBOUNCES MAXGROWAMMO - FREEZERHURTOWNER CAMERASDESTRUCTABLE - NUMFREEZEBOUNCES - FREEZERHURTOWNER - QSIZE - TRIPBOMBLASERMODE - */ - - j = 0; - ud.const_visibility = params[j++]; - g_impactDamage = params[j++]; - g_maxPlayerHealth = g_player[0].ps->max_player_health = g_player[0].ps->max_shield_amount = params[j++]; - g_startArmorAmount = params[j++]; - g_actorRespawnTime = params[j++]; - g_itemRespawnTime = params[j++]; - g_playerFriction = params[j++]; - if (g_scriptVersion == 14) g_spriteGravity = params[j++]; - g_rpgBlastRadius = params[j++]; - g_pipebombBlastRadius = params[j++]; - g_shrinkerBlastRadius = params[j++]; - g_tripbombBlastRadius = params[j++]; - g_morterBlastRadius = params[j++]; - g_bouncemineBlastRadius = params[j++]; - g_seenineBlastRadius = params[j++]; - g_player[0].ps->max_ammo_amount[PISTOL_WEAPON] = params[j++]; - g_player[0].ps->max_ammo_amount[SHOTGUN_WEAPON] = params[j++]; - g_player[0].ps->max_ammo_amount[CHAINGUN_WEAPON] = params[j++]; - g_player[0].ps->max_ammo_amount[RPG_WEAPON] = params[j++]; - g_player[0].ps->max_ammo_amount[HANDBOMB_WEAPON] = params[j++]; - g_player[0].ps->max_ammo_amount[SHRINKER_WEAPON] = params[j++]; - g_player[0].ps->max_ammo_amount[DEVISTATOR_WEAPON] = params[j++]; - g_player[0].ps->max_ammo_amount[TRIPBOMB_WEAPON] = params[j++]; - g_player[0].ps->max_ammo_amount[FREEZE_WEAPON] = params[j++]; - if (g_scriptVersion == 14) g_player[0].ps->max_ammo_amount[GROW_WEAPON] = params[j++]; - g_damageCameras = params[j++]; - g_numFreezeBounces = params[j++]; - g_freezerSelfDamage = params[j++]; - if (g_scriptVersion == 14) - { - g_spriteDeleteQueueSize = params[j++]; - if (g_spriteDeleteQueueSize > 1024) g_spriteDeleteQueueSize = 1024; - else if (g_spriteDeleteQueueSize < 0) g_spriteDeleteQueueSize = 0; - - g_tripbombLaserMode = params[j++]; - } - } - return 0; - } - return 0; -} - -/* Anything added with C_AddDefinition() cannot be overwritten in the CONs */ - -static void C_AddDefinition(const char *lLabel,int32_t lValue,int32_t lType) -{ - Bstrcpy(label+(g_numLabels<<6),lLabel); - labeltype[g_numLabels] = lType; - hash_add(&h_labels,label+(g_numLabels<<6),g_numLabels,0); - labelcode[g_numLabels++] = lValue; - g_numDefaultLabels++; -} - -static void C_AddDefaultDefinitions(void) -{ - C_AddDefinition("EVENT_AIMDOWN",EVENT_AIMDOWN,LABEL_DEFINE); - C_AddDefinition("EVENT_AIMUP",EVENT_AIMUP,LABEL_DEFINE); - C_AddDefinition("EVENT_ANIMATESPRITES",EVENT_ANIMATESPRITES,LABEL_DEFINE); - C_AddDefinition("EVENT_CHANGEWEAPON",EVENT_CHANGEWEAPON,LABEL_DEFINE); - C_AddDefinition("EVENT_CHEATGETBOOT",EVENT_CHEATGETBOOT,LABEL_DEFINE); - C_AddDefinition("EVENT_CHEATGETFIRSTAID",EVENT_CHEATGETFIRSTAID,LABEL_DEFINE); - C_AddDefinition("EVENT_CHEATGETHEAT",EVENT_CHEATGETHEAT,LABEL_DEFINE); - C_AddDefinition("EVENT_CHEATGETHOLODUKE",EVENT_CHEATGETHOLODUKE,LABEL_DEFINE); - C_AddDefinition("EVENT_CHEATGETJETPACK",EVENT_CHEATGETJETPACK,LABEL_DEFINE); - C_AddDefinition("EVENT_CHEATGETSCUBA",EVENT_CHEATGETSCUBA,LABEL_DEFINE); - C_AddDefinition("EVENT_CHEATGETSHIELD",EVENT_CHEATGETSHIELD,LABEL_DEFINE); - C_AddDefinition("EVENT_CHEATGETSTEROIDS",EVENT_CHEATGETSTEROIDS,LABEL_DEFINE); - C_AddDefinition("EVENT_CROUCH",EVENT_CROUCH,LABEL_DEFINE); - C_AddDefinition("EVENT_DISPLAYCROSSHAIR",EVENT_DISPLAYCROSSHAIR,LABEL_DEFINE); - C_AddDefinition("EVENT_DISPLAYREST",EVENT_DISPLAYREST,LABEL_DEFINE); - C_AddDefinition("EVENT_DISPLAYBONUSSCREEN",EVENT_DISPLAYBONUSSCREEN,LABEL_DEFINE); - C_AddDefinition("EVENT_DISPLAYMENU",EVENT_DISPLAYMENU,LABEL_DEFINE); - C_AddDefinition("EVENT_DISPLAYMENUREST",EVENT_DISPLAYMENUREST,LABEL_DEFINE); - C_AddDefinition("EVENT_DISPLAYLOADINGSCREEN",EVENT_DISPLAYLOADINGSCREEN,LABEL_DEFINE); - C_AddDefinition("EVENT_DISPLAYROOMS",EVENT_DISPLAYROOMS,LABEL_DEFINE); - C_AddDefinition("EVENT_DISPLAYSBAR",EVENT_DISPLAYSBAR,LABEL_DEFINE); - C_AddDefinition("EVENT_DISPLAYWEAPON",EVENT_DISPLAYWEAPON,LABEL_DEFINE); - C_AddDefinition("EVENT_DOFIRE",EVENT_DOFIRE,LABEL_DEFINE); - C_AddDefinition("EVENT_DRAWWEAPON",EVENT_DRAWWEAPON,LABEL_DEFINE); - C_AddDefinition("EVENT_EGS",EVENT_EGS,LABEL_DEFINE); - C_AddDefinition("EVENT_ENTERLEVEL",EVENT_ENTERLEVEL,LABEL_DEFINE); - C_AddDefinition("EVENT_FAKEDOMOVETHINGS",EVENT_FAKEDOMOVETHINGS,LABEL_DEFINE); - C_AddDefinition("EVENT_FIRE",EVENT_FIRE,LABEL_DEFINE); - C_AddDefinition("EVENT_FIREWEAPON",EVENT_FIREWEAPON,LABEL_DEFINE); - C_AddDefinition("EVENT_GAME",EVENT_GAME,LABEL_DEFINE); - C_AddDefinition("EVENT_GETAUTOAIMANGLE",EVENT_GETAUTOAIMANGLE,LABEL_DEFINE); - C_AddDefinition("EVENT_GETLOADTILE",EVENT_GETLOADTILE,LABEL_DEFINE); - C_AddDefinition("EVENT_GETMENUTILE",EVENT_GETMENUTILE,LABEL_DEFINE); - C_AddDefinition("EVENT_GETSHOTRANGE",EVENT_GETSHOTRANGE,LABEL_DEFINE); - C_AddDefinition("EVENT_HOLODUKEOFF",EVENT_HOLODUKEOFF,LABEL_DEFINE); - C_AddDefinition("EVENT_HOLODUKEON",EVENT_HOLODUKEON,LABEL_DEFINE); - C_AddDefinition("EVENT_HOLSTER",EVENT_HOLSTER,LABEL_DEFINE); - C_AddDefinition("EVENT_INCURDAMAGE",EVENT_INCURDAMAGE,LABEL_DEFINE); - C_AddDefinition("EVENT_INIT",EVENT_INIT,LABEL_DEFINE); - C_AddDefinition("EVENT_INVENTORY",EVENT_INVENTORY,LABEL_DEFINE); - C_AddDefinition("EVENT_INVENTORYLEFT",EVENT_INVENTORYLEFT,LABEL_DEFINE); - C_AddDefinition("EVENT_INVENTORYRIGHT",EVENT_INVENTORYRIGHT,LABEL_DEFINE); - C_AddDefinition("EVENT_JUMP",EVENT_JUMP,LABEL_DEFINE); - C_AddDefinition("EVENT_LOGO",EVENT_LOGO,LABEL_DEFINE); - C_AddDefinition("EVENT_LOOKDOWN",EVENT_LOOKDOWN,LABEL_DEFINE); - C_AddDefinition("EVENT_LOOKLEFT",EVENT_LOOKLEFT,LABEL_DEFINE); - C_AddDefinition("EVENT_LOOKRIGHT",EVENT_LOOKRIGHT,LABEL_DEFINE); - C_AddDefinition("EVENT_LOOKUP",EVENT_LOOKUP,LABEL_DEFINE); - C_AddDefinition("EVENT_MOVEBACKWARD",EVENT_MOVEBACKWARD,LABEL_DEFINE); - C_AddDefinition("EVENT_MOVEFORWARD",EVENT_MOVEFORWARD,LABEL_DEFINE); - C_AddDefinition("EVENT_NEXTWEAPON",EVENT_NEXTWEAPON,LABEL_DEFINE); - C_AddDefinition("EVENT_PREVIOUSWEAPON",EVENT_PREVIOUSWEAPON,LABEL_DEFINE); - C_AddDefinition("EVENT_PRESSEDFIRE",EVENT_PRESSEDFIRE,LABEL_DEFINE); - C_AddDefinition("EVENT_PROCESSINPUT",EVENT_PROCESSINPUT,LABEL_DEFINE); - C_AddDefinition("EVENT_QUICKKICK",EVENT_QUICKKICK,LABEL_DEFINE); - C_AddDefinition("EVENT_RESETINVENTORY",EVENT_RESETINVENTORY,LABEL_DEFINE); - C_AddDefinition("EVENT_RESETPLAYER",EVENT_RESETPLAYER,LABEL_DEFINE); - C_AddDefinition("EVENT_RESETWEAPONS",EVENT_RESETWEAPONS,LABEL_DEFINE); - C_AddDefinition("EVENT_RETURNTOCENTER",EVENT_RETURNTOCENTER,LABEL_DEFINE); - C_AddDefinition("EVENT_SELECTWEAPON",EVENT_SELECTWEAPON,LABEL_DEFINE); - C_AddDefinition("EVENT_SOARDOWN",EVENT_SOARDOWN,LABEL_DEFINE); - C_AddDefinition("EVENT_SOARUP",EVENT_SOARUP,LABEL_DEFINE); - C_AddDefinition("EVENT_SPAWN",EVENT_SPAWN,LABEL_DEFINE); - C_AddDefinition("EVENT_STRAFELEFT",EVENT_STRAFELEFT,LABEL_DEFINE); - C_AddDefinition("EVENT_STRAFERIGHT",EVENT_STRAFERIGHT,LABEL_DEFINE); - C_AddDefinition("EVENT_SWIMDOWN",EVENT_SWIMDOWN,LABEL_DEFINE); - C_AddDefinition("EVENT_SWIMUP",EVENT_SWIMUP,LABEL_DEFINE); - C_AddDefinition("EVENT_TURNAROUND",EVENT_TURNAROUND,LABEL_DEFINE); - C_AddDefinition("EVENT_TURNLEFT",EVENT_TURNLEFT,LABEL_DEFINE); - C_AddDefinition("EVENT_TURNRIGHT",EVENT_TURNRIGHT,LABEL_DEFINE); - C_AddDefinition("EVENT_USE",EVENT_USE,LABEL_DEFINE); - C_AddDefinition("EVENT_USEJETPACK",EVENT_USEJETPACK,LABEL_DEFINE); - C_AddDefinition("EVENT_USEMEDKIT",EVENT_USEMEDKIT,LABEL_DEFINE); - C_AddDefinition("EVENT_USENIGHTVISION",EVENT_USENIGHTVISION,LABEL_DEFINE); - C_AddDefinition("EVENT_USESTEROIDS",EVENT_USESTEROIDS,LABEL_DEFINE); - C_AddDefinition("EVENT_WEAPKEY10",EVENT_WEAPKEY10,LABEL_DEFINE); - C_AddDefinition("EVENT_WEAPKEY1",EVENT_WEAPKEY1,LABEL_DEFINE); - C_AddDefinition("EVENT_WEAPKEY2",EVENT_WEAPKEY2,LABEL_DEFINE); - C_AddDefinition("EVENT_WEAPKEY3",EVENT_WEAPKEY3,LABEL_DEFINE); - C_AddDefinition("EVENT_WEAPKEY4",EVENT_WEAPKEY4,LABEL_DEFINE); - C_AddDefinition("EVENT_WEAPKEY5",EVENT_WEAPKEY5,LABEL_DEFINE); - C_AddDefinition("EVENT_WEAPKEY6",EVENT_WEAPKEY6,LABEL_DEFINE); - C_AddDefinition("EVENT_WEAPKEY7",EVENT_WEAPKEY7,LABEL_DEFINE); - C_AddDefinition("EVENT_WEAPKEY8",EVENT_WEAPKEY8,LABEL_DEFINE); - C_AddDefinition("EVENT_WEAPKEY9",EVENT_WEAPKEY9,LABEL_DEFINE); - C_AddDefinition("EVENT_KILLIT",EVENT_KILLIT,LABEL_DEFINE); - C_AddDefinition("EVENT_LOADACTOR",EVENT_LOADACTOR,LABEL_DEFINE); - C_AddDefinition("EVENT_NEWGAME",EVENT_NEWGAME,LABEL_DEFINE); - - C_AddDefinition("STR_MAPNAME",STR_MAPNAME,LABEL_DEFINE); - C_AddDefinition("STR_MAPFILENAME",STR_MAPFILENAME,LABEL_DEFINE); - C_AddDefinition("STR_PLAYERNAME",STR_PLAYERNAME,LABEL_DEFINE); - C_AddDefinition("STR_VERSION",STR_VERSION,LABEL_DEFINE); - C_AddDefinition("STR_GAMETYPE",STR_GAMETYPE,LABEL_DEFINE); - C_AddDefinition("STR_VOLUMENAME",STR_VOLUMENAME,LABEL_DEFINE); - - C_AddDefinition("NO",0,LABEL_DEFINE|LABEL_ACTION|LABEL_AI|LABEL_MOVE); - - C_AddDefinition("PROJ_BOUNCES",PROJ_BOUNCES,LABEL_DEFINE); - C_AddDefinition("PROJ_BSOUND",PROJ_BSOUND,LABEL_DEFINE); - C_AddDefinition("PROJ_CLIPDIST",PROJ_CLIPDIST,LABEL_DEFINE); - C_AddDefinition("PROJ_CSTAT",PROJ_CSTAT,LABEL_DEFINE); - C_AddDefinition("PROJ_DECAL",PROJ_DECAL,LABEL_DEFINE); - C_AddDefinition("PROJ_DROP",PROJ_DROP,LABEL_DEFINE); - C_AddDefinition("PROJ_EXTRA",PROJ_EXTRA,LABEL_DEFINE); - C_AddDefinition("PROJ_EXTRA_RAND",PROJ_EXTRA_RAND,LABEL_DEFINE); - C_AddDefinition("PROJ_FLASH_COLOR",PROJ_FLASH_COLOR,LABEL_DEFINE); - C_AddDefinition("PROJ_HITRADIUS",PROJ_HITRADIUS,LABEL_DEFINE); - C_AddDefinition("PROJ_ISOUND",PROJ_ISOUND,LABEL_DEFINE); - C_AddDefinition("PROJ_OFFSET",PROJ_OFFSET,LABEL_DEFINE); - C_AddDefinition("PROJ_PAL",PROJ_PAL,LABEL_DEFINE); - C_AddDefinition("PROJ_RANGE",PROJ_RANGE,LABEL_DEFINE); - C_AddDefinition("PROJ_SHADE",PROJ_SHADE,LABEL_DEFINE); - C_AddDefinition("PROJ_SOUND",PROJ_SOUND,LABEL_DEFINE); - C_AddDefinition("PROJ_SPAWNS",PROJ_SPAWNS,LABEL_DEFINE); - C_AddDefinition("PROJ_SXREPEAT",PROJ_SXREPEAT,LABEL_DEFINE); - C_AddDefinition("PROJ_SYREPEAT",PROJ_SYREPEAT,LABEL_DEFINE); - C_AddDefinition("PROJ_TNUM",PROJ_TNUM,LABEL_DEFINE); - C_AddDefinition("PROJ_TOFFSET",PROJ_TOFFSET,LABEL_DEFINE); - C_AddDefinition("PROJ_TRAIL",PROJ_TRAIL,LABEL_DEFINE); - C_AddDefinition("PROJ_TXREPEAT",PROJ_TXREPEAT,LABEL_DEFINE); - C_AddDefinition("PROJ_TYREPEAT",PROJ_TYREPEAT,LABEL_DEFINE); - C_AddDefinition("PROJ_VEL_MULT",PROJ_VEL_MULT,LABEL_DEFINE); - C_AddDefinition("PROJ_VEL",PROJ_VEL,LABEL_DEFINE); - C_AddDefinition("PROJ_WORKSLIKE",PROJ_WORKSLIKE,LABEL_DEFINE); - C_AddDefinition("PROJ_XREPEAT",PROJ_XREPEAT,LABEL_DEFINE); - C_AddDefinition("PROJ_YREPEAT",PROJ_YREPEAT,LABEL_DEFINE); -} - -#pragma pack(push,1) -static void C_InitProjectiles(void) -{ - int32_t i; - - typedef struct - { - int32_t workslike, cstat; // 8b - int32_t hitradius, range, flashcolor; // 12b - int16_t spawns, sound, isound, vel; // 8b - int16_t decal, trail, tnum, drop; // 8b - int16_t offset, bounces, bsound; // 6b - int16_t toffset; // 2b - int16_t extra, extra_rand; // 4b - int8_t sxrepeat, syrepeat, txrepeat, tyrepeat; // 4b - int8_t shade, xrepeat, yrepeat, pal; // 4b - int8_t velmult; // 1b - uint8_t clipdist; // 1b - } defaultprojectile_t; - - defaultprojectile_t DefaultProjectile = - { - 1, -1, 2048, 0, 0, SMALLSMOKE, -1, -1, 600, BULLETHOLE, -1, 0, 0, 448, g_numFreezeBounces, PIPEBOMB_BOUNCE, 1, - 100, -1, -1, -1, -1, -1, -96, 18, 18, 0, 1, 32 - }; - - // this will only happen if I forget to update this function... - if (offsetof(projectile_t, filler) != sizeof(DefaultProjectile)) - G_GameExit("ERROR: C_InitProjectiles(): projectile_t mismatch!"); - - for (i=MAXTILES-1; i>=0; i--) - Bmemcpy(&ProjectileData[i],&DefaultProjectile,sizeof(projectile_t)); - - Bmemcpy(&DefaultProjectileData[0], &ProjectileData[0], sizeof(ProjectileData)); -} -#pragma pack(pop) - -extern int32_t g_numObituaries; -extern int32_t g_numSelfObituaries; - -void C_Compile(const char *filenam) -{ - char *mptr; - int32_t i; - int32_t fs,fp; - int32_t startcompiletime; - - clearbuf(apScriptGameEvent,MAXGAMEEVENTS,0L); - - C_InitHashes(); - Gv_Init(); - C_InitProjectiles(); - - fp = kopen4loadfrommod((char *)filenam,g_loadFromGroupOnly); - if (fp == -1) // JBF: was 0 - { - extern int32_t numgroupfiles; - - if (g_loadFromGroupOnly == 1 || numgroupfiles == 0) - { -#ifdef WIN32 - Bsprintf(tempbuf,"Duke Nukem 3D game data was not found. A valid copy of '%s' or other compatible data is needed to run EDuke32.\n\n" - "You can find '%s' in the 'DN3DINST' or 'ATOMINST' directory on your Duke Nukem 3D installation CD.\n\n" - "If you don't already own a copy of Duke or haven't seen your disc in years, don't worry -- you can download the full, registered " - "version of Duke Nukem 3D: Atomic Edition immediately for only $5.99 through our partnership with GOG.com.\n\n" - "Not a typo; it's less than 6 bucks. Get Duke now?\n\n" - "(Clicking yes will bring you to our web store)", - g_grpNamePtr,g_grpNamePtr); - - if (wm_ynbox("Important - Duke Nukem 3D not found - EDuke32",tempbuf)) - { - SHELLEXECUTEINFOA sinfo; - char *p = "http://www.gog.com/en/gamecard/duke_nukem_3d_atomic_edition/pp/6c1e671f9af5b46d9c1a52067bdf0e53685674f7"; - - Bmemset(&sinfo, 0, sizeof(sinfo)); - sinfo.cbSize = sizeof(sinfo); - sinfo.fMask = SEE_MASK_CLASSNAME; - sinfo.lpVerb = "open"; - sinfo.lpFile = p; - sinfo.nShow = SW_SHOWNORMAL; - sinfo.lpClass = "http"; - - if (!ShellExecuteExA(&sinfo)) - G_GameExit("Error launching default system browser!"); - } - G_GameExit(""); -#else - Bsprintf(tempbuf,"Duke Nukem 3D game data was not found. A valid copy of '%s' or other compatible data is needed to run EDuke32.\n" - "You can find '%s' in the 'DN3DINST' or 'ATOMINST' directory on your Duke Nukem 3D installation CD-ROM.\n\n" - "EDuke32 will now close.", - g_grpNamePtr,g_grpNamePtr); - G_GameExit(tempbuf); -#endif - } - else - { - Bsprintf(tempbuf,"CON file `%s' missing.", filenam); - G_GameExit(tempbuf); - } - - //g_loadFromGroupOnly = 1; - return; //Not there - } - - fs = kfilelength(fp); - - initprintf("Compiling: %s (%d bytes)\n",filenam,fs); - - flushlogwindow = 0; - - startcompiletime = getticks(); - - mptr = (char *)Bmalloc(fs+1); - if (!mptr) - { - Bsprintf(tempbuf,"Failed allocating %d byte CON text buffer.", fs+1); - G_GameExit(tempbuf); - } - - mptr[fs] = 0; - - textptr = (char *) mptr; - kread(fp,(char *)textptr,fs); - kclose(fp); - - clearbuf(actorscrptr,MAXTILES,0L); // JBF 20040531: MAXSPRITES? I think Todd meant MAXTILES... - clearbuf(actorLoadEventScrptr,MAXTILES,0L); // I think this should be here... - clearbufbyte(ActorType,MAXTILES,0L); -// clearbufbyte(script,sizeof(script),0l); // JBF 20040531: yes? no? - if (script != NULL) - Bfree(script); - - script = Bcalloc(1,g_scriptSize * sizeof(intptr_t)); - bitptr = Bcalloc(1,(((g_scriptSize+7)>>3)+1) * sizeof(uint8_t)); -// initprintf("script: %d, bitptr: %d\n",script,bitptr); - - g_numLabels = g_numDefaultLabels = 0; - g_scriptPtr = script+1; - g_numCompilerWarnings = 0; - g_numCompilerErrors = 0; - g_lineNumber = 1; - g_totalLines = 0; - - C_AddDefaultDefinitions(); - - Bstrcpy(g_szScriptFileName, filenam); // JBF 20031130: Store currently compiling file name - - while (C_ParseCommand() == 0); - - flushlogwindow = 1; - - if (g_numCompilerErrors > 63) - initprintf("fatal error: too many errors: Aborted\n"); - - //*script = (intptr_t) g_scriptPtr; - - Bfree(mptr); - mptr = NULL; - - if (g_numCompilerWarnings|g_numCompilerErrors) - initprintf("Found %d warning(s), %d error(s).\n",g_numCompilerWarnings,g_numCompilerErrors); - - if (g_numCompilerErrors) - { - if (g_loadFromGroupOnly) - { - Bsprintf(buf,"Error compiling CON files."); - G_GameExit(buf); - } - else - { - if (g_groupFileHandle != -1 && g_loadFromGroupOnly == 0) - { -// initprintf("Error(s) found in file `%s'. Do you want to use the INTERNAL DEFAULTS (y/N)?\n",filenam); - - i=wm_ynbox("CON File Compilation Error", "Error(s) found in file `%s'. Do you want to use the " - "INTERNAL DEFAULTS?",filenam); - if (i) i = 'y'; - if (i == 'y' || i == 'Y') - { - initprintf(" Yes\n"); - g_loadFromGroupOnly = 1; - return; - } - else - { -#if (defined RENDERTYPEWIN || (defined RENDERTYPESDL && !defined __APPLE__ && defined HAVE_GTK2)) - while (!quitevent) // keep the window open so people can copy CON errors out of it - handleevents(); -#endif - G_GameExit(""); - } - } - } - } - else - { - int32_t j=0, k=0, l=0; - - hash_free(&h_keywords); - freehashnames(); - - hash_free(§orH); - hash_free(&wallH); - hash_free(&userdefH); - - hash_free(&projectileH); - hash_free(&playerH); - hash_free(&inputH); - hash_free(&actorH); - hash_free(&tspriteH); - - g_totalLines += g_lineNumber; - - C_SetScriptSize(g_scriptPtr-script+8); - - initprintf("Script compiled in %dms, %ld*%db, version %s\n", getticks() - startcompiletime, - (unsigned long)(g_scriptPtr-script), (int32_t)sizeof(intptr_t), (g_scriptVersion == 14?"1.4+":"1.3D")); - - initprintf("%d/%d labels, %d/%d variables\n", g_numLabels, - (int32_t)min((MAXSECTORS * sizeof(sectortype)/sizeof(int32_t)), - MAXSPRITES * sizeof(spritetype)/(1<<6)), - g_gameVarCount, MAXGAMEVARS); - - for (i=MAXQUOTES-1; i>=0; i--) - if (ScriptQuotes[i]) - j++; - for (i=MAXGAMEEVENTS-1; i>=0; i--) - if (apScriptGameEvent[i]) - k++; - for (i=MAXTILES-1; i>=0; i--) - if (actorscrptr[i]) - l++; - - if (j) initprintf("%d quotes, ", j); - if (g_numQuoteRedefinitions) initprintf("%d strings, ", g_numQuoteRedefinitions); - if (k) initprintf("%d events, ", k); - if (l) initprintf("%d actors", l); - - initprintf("\n"); - - for (i=127; i>=0; i--) - if (ScriptQuotes[i] == NULL) - ScriptQuotes[i] = Bcalloc(MAXQUOTELEN,sizeof(uint8_t)); - - for (i=MAXQUOTELEN-7; i>=0; i--) - if (Bstrncmp(&ScriptQuotes[13][i],"SPACE",5) == 0) - { - Bmemset(tempbuf,0,sizeof(tempbuf)); - Bstrncpy(tempbuf,ScriptQuotes[13],i); - Bstrcat(tempbuf,"OPEN"); - Bstrcat(tempbuf,&ScriptQuotes[13][i+5]); - Bstrncpy(ScriptQuotes[13],tempbuf,MAXQUOTELEN-1); - i = MAXQUOTELEN-7; - } - - // most of these are based on Blood, obviously - { - const char *PlayerObituaries[] = - { - "^02%s^02 beat %s^02 like a cur", - "^02%s^02 broke %s", - "^02%s^02 body bagged %s", - "^02%s^02 boned %s^02 like a fish", - "^02%s^02 castrated %s", - "^02%s^02 creamed %s", - "^02%s^02 crushed %s", - "^02%s^02 destroyed %s", - "^02%s^02 diced %s", - "^02%s^02 disemboweled %s", - "^02%s^02 erased %s", - "^02%s^02 eviscerated %s", - "^02%s^02 flailed %s", - "^02%s^02 flattened %s", - "^02%s^02 gave AnAl MaDnEsS to %s", - "^02%s^02 gave %s^02 Anal Justice", - "^02%s^02 hosed %s", - "^02%s^02 hurt %s^02 real bad", - "^02%s^02 killed %s", - "^02%s^02 made dog meat out of %s", - "^02%s^02 made mincemeat out of %s", - "^02%s^02 manhandled %s", - "^02%s^02 massacred %s", - "^02%s^02 mutilated %s", - "^02%s^02 murdered %s", - "^02%s^02 neutered %s", - "^02%s^02 punted %s", - "^02%s^02 reamed %s", - "^02%s^02 ripped %s^02 a new orifice", - "^02%s^02 rocked %s", - "^02%s^02 sent %s^02 to hell", - "^02%s^02 shredded %s", - "^02%s^02 slashed %s", - "^02%s^02 slaughtered %s", - "^02%s^02 sliced %s", - "^02%s^02 smacked %s around", - "^02%s^02 smashed %s", - "^02%s^02 snuffed %s", - "^02%s^02 sodomized %s", - "^02%s^02 splattered %s", - "^02%s^02 sprayed %s", - "^02%s^02 squashed %s", - "^02%s^02 throttled %s", - "^02%s^02 toasted %s", - "^02%s^02 vented %s", - "^02%s^02 ventilated %s", - "^02%s^02 wasted %s", - "^02%s^02 wrecked %s", - }; - - const char *PlayerSelfObituaries[] = - { - "^02%s^02 is excrement", - "^02%s^02 is hamburger", - "^02%s^02 suffered scrotum separation", - "^02%s^02 volunteered for population control", - "^02%s^02 has suicided", - "^02%s^02 bled out", - }; - - g_numObituaries = (sizeof(PlayerObituaries)/sizeof(PlayerObituaries[0])); - for (i=g_numObituaries-1; i>=0; i--) - { - if (ScriptQuotes[i+OBITQUOTEINDEX] == NULL) - { - ScriptQuotes[i+OBITQUOTEINDEX] = Bcalloc(MAXQUOTELEN,sizeof(uint8_t)); - Bstrcpy(ScriptQuotes[i+OBITQUOTEINDEX],PlayerObituaries[i]); - } - } - - g_numSelfObituaries = (sizeof(PlayerSelfObituaries)/sizeof(PlayerSelfObituaries[0])); - for (i=g_numSelfObituaries-1; i>=0; i--) - { - if (ScriptQuotes[i+SUICIDEQUOTEINDEX] == NULL) - { - ScriptQuotes[i+SUICIDEQUOTEINDEX] = Bcalloc(MAXQUOTELEN,sizeof(uint8_t)); - Bstrcpy(ScriptQuotes[i+SUICIDEQUOTEINDEX],PlayerSelfObituaries[i]); - } - } - } - } -} - -void C_ReportError(int32_t iError) -{ - if (Bstrcmp(g_szCurrentBlockName,g_szLastBlockName)) - { - if (g_parsingEventPtr || g_processingState || g_parsingActorPtr) - initprintf("%s: In %s `%s':\n",g_szScriptFileName,g_parsingEventPtr?"event":g_parsingActorPtr?"actor":"state",g_szCurrentBlockName); - else initprintf("%s: At top level:\n",g_szScriptFileName); - Bstrcpy(g_szLastBlockName,g_szCurrentBlockName); - } - switch (iError) - { - case ERROR_CLOSEBRACKET: - initprintf("%s:%d: error: found more `}' than `{' before `%s'.\n",g_szScriptFileName,g_lineNumber,tempbuf); - break; - case ERROR_EVENTONLY: - initprintf("%s:%d: error: `%s' only valid during events.\n",g_szScriptFileName,g_lineNumber,tempbuf); - break; - case ERROR_EXCEEDSMAXTILES: - initprintf("%s:%d: error: `%s' value exceeds MAXTILES. Maximum is %d.\n",g_szScriptFileName,g_lineNumber,tempbuf,MAXTILES-1); - break; - case ERROR_EXPECTEDKEYWORD: - initprintf("%s:%d: error: expected a keyword but found `%s'.\n",g_szScriptFileName,g_lineNumber,tempbuf); - break; - case ERROR_FOUNDWITHIN: - initprintf("%s:%d: error: found `%s' within %s.\n",g_szScriptFileName,g_lineNumber,tempbuf,g_parsingEventPtr?"an event":g_parsingActorPtr?"an actor":"a state"); - break; - case ERROR_ISAKEYWORD: - initprintf("%s:%d: error: symbol `%s' is a keyword.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - break; - case ERROR_NOENDSWITCH: - initprintf("%s:%d: error: did not find `endswitch' before `%s'.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - break; - case ERROR_NOTAGAMEDEF: - initprintf("%s:%d: error: symbol `%s' is not a game definition.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - break; - case ERROR_NOTAGAMEVAR: - initprintf("%s:%d: error: symbol `%s' is not a game variable.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - break; - case ERROR_NOTAGAMEARRAY: - initprintf("%s:%d: error: symbol `%s' is not a game array.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - break; - case ERROR_GAMEARRAYBNC: - initprintf("%s:%d: error: square brackets for index of game array not closed, expected ] found %c\n",g_szScriptFileName,g_lineNumber,*textptr); - break; - case ERROR_GAMEARRAYBNO: - initprintf("%s:%d: error: square brackets for index of game array not opened, expected [ found %c\n",g_szScriptFileName,g_lineNumber,*textptr); - break; - case ERROR_INVALIDARRAYWRITE: - initprintf("%s:%d: error: arrays can only be written to using `setarray' %c\n",g_szScriptFileName,g_lineNumber,*textptr); - break; - case ERROR_OPENBRACKET: - initprintf("%s:%d: error: found more `{' than `}' before `%s'.\n",g_szScriptFileName,g_lineNumber,tempbuf); - break; - case ERROR_PARAMUNDEFINED: - initprintf("%s:%d: error: parameter `%s' is undefined.\n",g_szScriptFileName,g_lineNumber,tempbuf); - break; - case ERROR_SYMBOLNOTRECOGNIZED: - initprintf("%s:%d: error: symbol `%s' is not recognized.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - break; - case ERROR_SYNTAXERROR: - initprintf("%s:%d: error: syntax error.\n",g_szScriptFileName,g_lineNumber); - break; - case ERROR_VARREADONLY: - initprintf("%s:%d: error: variable `%s' is read-only.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - break; - case ERROR_VARTYPEMISMATCH: - initprintf("%s:%d: error: variable `%s' is of the wrong type.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - break; - case WARNING_BADGAMEVAR: - initprintf("%s:%d: warning: variable `%s' should be either per-player OR per-actor, not both.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - break; - case WARNING_DUPLICATECASE: - initprintf("%s:%d: warning: duplicate case ignored.\n",g_szScriptFileName,g_lineNumber); - break; - case WARNING_DUPLICATEDEFINITION: - initprintf("%s:%d: warning: duplicate game definition `%s' ignored.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - break; - case WARNING_EVENTSYNC: - initprintf("%s:%d: warning: found `%s' within a local event.\n",g_szScriptFileName,g_lineNumber,tempbuf); - break; - case WARNING_LABELSONLY: - initprintf("%s:%d: warning: expected a label, found a constant.\n",g_szScriptFileName,g_lineNumber); - break; - case WARNING_NAMEMATCHESVAR: - initprintf("%s:%d: warning: symbol `%s' already used for game variable.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - break; - case WARNING_REVEVENTSYNC: - initprintf("%s:%d: warning: found `%s' outside of a local event.\n",g_szScriptFileName,g_lineNumber,tempbuf); - break; - } -} diff --git a/polymer-perf/eduke32/source/gamedef.h b/polymer-perf/eduke32/source/gamedef.h deleted file mode 100644 index e7b90b534..000000000 --- a/polymer-perf/eduke32/source/gamedef.h +++ /dev/null @@ -1,938 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#ifndef _gamedef_h_ -#define _gamedef_h_ - -#define MAXGAMEEVENTS 128 -#define LABEL_HASPARM2 1 -#define LABEL_ISSTRING 2 - -extern hashtable_t h_gamevars; -extern hashtable_t h_arrays; -extern hashtable_t h_keywords; -extern hashtable_t h_gamefuncs; -extern hashtable_t h_labels; - - -extern int32_t g_iReturnVarID; // var ID of "RETURN" -extern int32_t g_iWeaponVarID; // var ID of "WEAPON" -extern int32_t g_iWorksLikeVarID; // var ID of "WORKSLIKE" -extern int32_t g_iZRangeVarID; // var ID of "ZRANGE" -extern int32_t g_iAngRangeVarID; // var ID of "ANGRANGE" -extern int32_t g_iAimAngleVarID; // var ID of "AUTOAIMANGLE" -extern int32_t g_iLoTagID; // var ID of "LOTAG" -extern int32_t g_iHiTagID; // var ID of "HITAG" -extern int32_t g_iTextureID; // var ID of "TEXTURE" -extern int32_t g_iThisActorID; // var ID of "THISACTOR" -extern int32_t g_iSpriteVarID; -extern int32_t g_iSectorVarID; -extern int32_t g_iWallVarID; -extern int32_t g_iPlayerVarID; -extern int32_t g_iActorVarID; - -extern intptr_t *actorLoadEventScrptr[MAXTILES]; - -extern intptr_t *apScriptGameEvent[MAXGAMEEVENTS]; - -extern int32_t otherp; -extern int32_t g_currentweapon; -extern int32_t g_gun_pos; -extern int32_t g_looking_arc; -extern int32_t g_currentweapon; -extern int32_t g_weapon_xoffset; -extern int32_t g_gs; -extern int32_t g_kb; -extern int32_t g_looking_angSR1; -extern int32_t lastvisinc; -extern char CheatStrings[][MAXCHEATLEN]; -extern char g_szScriptFileName[BMAX_PATH]; -extern int32_t g_totalLines,g_lineNumber; -extern int32_t g_numCompilerErrors,g_numCompilerWarnings,g_numQuoteRedefinitions; -extern int32_t g_scriptVersion; -extern uint32_t g_scriptDateVersion; // YYYYMMDD -extern char g_szBuf[1024]; - -extern intptr_t *g_scriptPtr; - -typedef struct -{ - char *name; - int32_t lId; - int32_t flags; - int32_t maxParm2; -} memberlabel_t; - -extern const memberlabel_t SectorLabels[]; -extern const memberlabel_t WallLabels[]; -extern const memberlabel_t ActorLabels[]; -extern const memberlabel_t PlayerLabels[]; -extern const memberlabel_t ProjectileLabels[]; -extern const memberlabel_t userdeflabels[]; -extern const memberlabel_t InputLabels[]; -extern const memberlabel_t TsprLabels[]; - -void C_ReportError(int32_t iError); -void C_Compile(const char *filenam); - -/* -extern void VM_AccessUserdef(int32_t iSet, int32_t lLabelID, int32_t lVar2); -extern void VM_AccessActiveProjectile(int32_t iSet, int32_t lVar1, int32_t lLabelID, int32_t lVar2); -extern void VM_AccessPlayer(int32_t iSet, int32_t lVar1, int32_t lLabelID, int32_t lVar2, int32_t lParm2); -extern void VM_AccessPlayerInput(int32_t iSet, int32_t lVar1, int32_t lLabelID, int32_t lVar2); -extern void VM_AccessWall(int32_t iSet, int32_t lVar1, int32_t lLabelID, int32_t lVar2); -extern void VM_AccessSector(int32_t iSet, int32_t lVar1, int32_t lLabelID, int32_t lVar2); -extern void VM_AccessSprite(int32_t iSet, int32_t lVar1, int32_t lLabelID, int32_t lVar2, int32_t lParm2); -extern void VM_AccessTsprite(int32_t iSet, int32_t lVar1, int32_t lLabelID, int32_t lVar2); -extern void VM_AccessProjectile(int32_t iSet, int32_t lVar1, int32_t lLabelID, int32_t lVar2); -*/ - -#define CON_ERROR OSD_ERROR "Line %d, %s: " - -enum vmflags_t { - VM_RETURN = 0x00000001, - VM_KILL = 0x00000002, - VM_NOEXECUTE = 0x00000004, -}; - -typedef struct { - int32_t g_i, g_p, g_x; - intptr_t *g_t; - spritetype *g_sp; - int32_t g_flags; -} vmstate_t; - -extern vmstate_t vm; - -extern int32_t g_scriptSanityChecks; - -extern int32_t g_errorLineNum; -extern int32_t g_tw; -extern const char *keyw[]; - -enum SystemString_t { - STR_MAPNAME, - STR_MAPFILENAME, - STR_PLAYERNAME, - STR_VERSION, - STR_GAMETYPE, - STR_VOLUMENAME -}; - -enum ScriptError_t -{ - ERROR_CLOSEBRACKET, - ERROR_EVENTONLY, - ERROR_EXCEEDSMAXTILES, - ERROR_EXPECTEDKEYWORD, - ERROR_FOUNDWITHIN, - ERROR_ISAKEYWORD, - ERROR_NOENDSWITCH, - ERROR_NOTAGAMEDEF, - ERROR_NOTAGAMEVAR, - ERROR_NOTAGAMEARRAY, - ERROR_GAMEARRAYBNC, - ERROR_GAMEARRAYBNO, - ERROR_INVALIDARRAYWRITE, - ERROR_OPENBRACKET, - ERROR_PARAMUNDEFINED, - ERROR_SYMBOLNOTRECOGNIZED, - ERROR_SYNTAXERROR, - ERROR_VARREADONLY, - ERROR_VARTYPEMISMATCH, - WARNING_BADGAMEVAR, - WARNING_DUPLICATECASE, - WARNING_DUPLICATEDEFINITION, - WARNING_EVENTSYNC, - WARNING_LABELSONLY, - WARNING_NAMEMATCHESVAR, - WARNING_REVEVENTSYNC -}; - -enum PlayerLabel_t -{ - PLAYER_ZOOM, - PLAYER_EXITX, - PLAYER_EXITY, - PLAYER_LOOGIEX, - PLAYER_LOOGIEY, - PLAYER_NUMLOOGS, - PLAYER_LOOGCNT, - PLAYER_POSX, - PLAYER_POSY, - PLAYER_POSZ, - PLAYER_HORIZ, - PLAYER_OHORIZ, - PLAYER_OHORIZOFF, - PLAYER_INVDISPTIME, - PLAYER_BOBPOSX, - PLAYER_BOBPOSY, - PLAYER_OPOSX, - PLAYER_OPOSY, - PLAYER_OPOSZ, - PLAYER_PYOFF, - PLAYER_OPYOFF, - PLAYER_POSXV, - PLAYER_POSYV, - PLAYER_POSZV, - PLAYER_LAST_PISSED_TIME, - PLAYER_TRUEFZ, - PLAYER_TRUECZ, - PLAYER_PLAYER_PAR, - PLAYER_VISIBILITY, - PLAYER_BOBCOUNTER, - PLAYER_WEAPON_SWAY, - PLAYER_PALS_TIME, - PLAYER_RANDOMFLAMEX, - PLAYER_CRACK_TIME, - PLAYER_AIM_MODE, - PLAYER_ANG, - PLAYER_OANG, - PLAYER_ANGVEL, - PLAYER_CURSECTNUM, - PLAYER_LOOK_ANG, - PLAYER_LAST_EXTRA, - PLAYER_SUBWEAPON, - PLAYER_AMMO_AMOUNT, - PLAYER_WACKEDBYACTOR, - PLAYER_FRAG, - PLAYER_FRAGGEDSELF, - PLAYER_CURR_WEAPON, - PLAYER_LAST_WEAPON, - PLAYER_TIPINCS, - PLAYER_HORIZOFF, - PLAYER_WANTWEAPONFIRE, - PLAYER_HOLODUKE_AMOUNT, - PLAYER_NEWOWNER, - PLAYER_HURT_DELAY, - PLAYER_HBOMB_HOLD_DELAY, - PLAYER_JUMPING_COUNTER, - PLAYER_AIRLEFT, - PLAYER_KNEE_INCS, - PLAYER_ACCESS_INCS, - PLAYER_FTA, - PLAYER_FTQ, - PLAYER_ACCESS_WALLNUM, - PLAYER_ACCESS_SPRITENUM, - PLAYER_KICKBACK_PIC, - PLAYER_GOT_ACCESS, - PLAYER_WEAPON_ANG, - PLAYER_FIRSTAID_AMOUNT, - PLAYER_SOMETHINGONPLAYER, - PLAYER_ON_CRANE, - PLAYER_I, - PLAYER_ONE_PARALLAX_SECTNUM, - PLAYER_OVER_SHOULDER_ON, - PLAYER_RANDOM_CLUB_FRAME, - PLAYER_FIST_INCS, - PLAYER_ONE_EIGHTY_COUNT, - PLAYER_CHEAT_PHASE, - PLAYER_DUMMYPLAYERSPRITE, - PLAYER_EXTRA_EXTRA8, - PLAYER_QUICK_KICK, - PLAYER_HEAT_AMOUNT, - PLAYER_ACTORSQU, - PLAYER_TIMEBEFOREEXIT, - PLAYER_CUSTOMEXITSOUND, - PLAYER_WEAPRECS, - PLAYER_WEAPRECCNT, - PLAYER_INTERFACE_TOGGLE_FLAG, - PLAYER_ROTSCRNANG, - PLAYER_DEAD_FLAG, - PLAYER_SHOW_EMPTY_WEAPON, - PLAYER_SCUBA_AMOUNT, - PLAYER_JETPACK_AMOUNT, - PLAYER_STEROIDS_AMOUNT, - PLAYER_SHIELD_AMOUNT, - PLAYER_HOLODUKE_ON, - PLAYER_PYCOUNT, - PLAYER_WEAPON_POS, - PLAYER_FRAG_PS, - PLAYER_TRANSPORTER_HOLD, - PLAYER_LAST_FULL_WEAPON, - PLAYER_FOOTPRINTSHADE, - PLAYER_BOOT_AMOUNT, - PLAYER_SCREAM_VOICE, - PLAYER_GM, - PLAYER_ON_WARPING_SECTOR, - PLAYER_FOOTPRINTCOUNT, - PLAYER_HBOMB_ON, - PLAYER_JUMPING_TOGGLE, - PLAYER_RAPID_FIRE_HOLD, - PLAYER_ON_GROUND, - PLAYER_NAME, - PLAYER_INVEN_ICON, - PLAYER_BUTTONPALETTE, - PLAYER_JETPACK_ON, - PLAYER_SPRITEBRIDGE, - PLAYER_LASTRANDOMSPOT, - PLAYER_SCUBA_ON, - PLAYER_FOOTPRINTPAL, - PLAYER_HEAT_ON, - PLAYER_HOLSTER_WEAPON, - PLAYER_FALLING_COUNTER, - PLAYER_GOTWEAPON, - PLAYER_REFRESH_INVENTORY, - PLAYER_PALETTE, - PLAYER_TOGGLE_KEY_FLAG, - PLAYER_KNUCKLE_INCS, - PLAYER_WALKING_SND_TOGGLE, - PLAYER_PALOOKUP, - PLAYER_HARD_LANDING, - PLAYER_MAX_SECRET_ROOMS, - PLAYER_SECRET_ROOMS, - PLAYER_PALS, - PLAYER_MAX_ACTORS_KILLED, - PLAYER_ACTORS_KILLED, - PLAYER_RETURN_TO_CENTER, - PLAYER_RUNSPEED, - PLAYER_SBS, - PLAYER_RELOADING, - PLAYER_AUTO_AIM, - PLAYER_MOVEMENT_LOCK, - PLAYER_SOUND_PITCH, - PLAYER_WEAPONSWITCH, - PLAYER_TEAM, - PLAYER_MAX_PLAYER_HEALTH, - PLAYER_MAX_SHIELD_AMOUNT, - PLAYER_MAX_AMMO_AMOUNT, - PLAYER_LAST_QUICK_KICK, - PLAYER_END -}; - -enum UserdefsLabel_t -{ - USERDEFS_GOD, - USERDEFS_WARP_ON, - USERDEFS_CASHMAN, - USERDEFS_EOG, - USERDEFS_SHOWALLMAP, - USERDEFS_SHOW_HELP, - USERDEFS_SCROLLMODE, - USERDEFS_CLIPPING, - USERDEFS_USER_NAME, - USERDEFS_RIDECULE, - USERDEFS_SAVEGAME, - USERDEFS_PWLOCKOUT, - USERDEFS_RTSNAME, - USERDEFS_OVERHEAD_ON, - USERDEFS_LAST_OVERHEAD, - USERDEFS_SHOWWEAPONS, - USERDEFS_PAUSE_ON, - USERDEFS_FROM_BONUS, - USERDEFS_CAMERASPRITE, - USERDEFS_LAST_CAMSPRITE, - USERDEFS_LAST_LEVEL, - USERDEFS_SECRETLEVEL, - USERDEFS_CONST_VISIBILITY, - USERDEFS_UW_FRAMERATE, - USERDEFS_CAMERA_TIME, - USERDEFS_FOLFVEL, - USERDEFS_FOLAVEL, - USERDEFS_FOLX, - USERDEFS_FOLY, - USERDEFS_FOLA, - USERDEFS_RECCNT, - USERDEFS_ENTERED_NAME, - USERDEFS_SCREEN_TILTING, - USERDEFS_SHADOWS, - USERDEFS_FTA_ON, - USERDEFS_EXECUTIONS, - USERDEFS_AUTO_RUN, - USERDEFS_COORDS, - USERDEFS_TICKRATE, - USERDEFS_M_COOP, - USERDEFS_COOP, - USERDEFS_SCREEN_SIZE, - USERDEFS_LOCKOUT, - USERDEFS_CROSSHAIR, - USERDEFS_WCHOICE, - USERDEFS_PLAYERAI, - USERDEFS_RESPAWN_MONSTERS, - USERDEFS_RESPAWN_ITEMS, - USERDEFS_RESPAWN_INVENTORY, - USERDEFS_RECSTAT, - USERDEFS_MONSTERS_OFF, - USERDEFS_BRIGHTNESS, - USERDEFS_M_RESPAWN_ITEMS, - USERDEFS_M_RESPAWN_MONSTERS, - USERDEFS_M_RESPAWN_INVENTORY, - USERDEFS_M_RECSTAT, - USERDEFS_M_MONSTERS_OFF, - USERDEFS_DETAIL, - USERDEFS_M_FFIRE, - USERDEFS_FFIRE, - USERDEFS_M_PLAYER_SKILL, - USERDEFS_M_LEVEL_NUMBER, - USERDEFS_M_VOLUME_NUMBER, - USERDEFS_MULTIMODE, - USERDEFS_PLAYER_SKILL, - USERDEFS_LEVEL_NUMBER, - USERDEFS_VOLUME_NUMBER, - USERDEFS_M_MARKER, - USERDEFS_MARKER, - USERDEFS_MOUSEFLIP, - USERDEFS_STATUSBARSCALE, - USERDEFS_DRAWWEAPON, - USERDEFS_MOUSEAIMING, - USERDEFS_WEAPONSWITCH, - USERDEFS_DEMOCAMS, - USERDEFS_COLOR, - USERDEFS_MSGDISPTIME, - USERDEFS_STATUSBARMODE, - USERDEFS_M_NOEXITS, - USERDEFS_NOEXITS, - USERDEFS_AUTOVOTE, - USERDEFS_AUTOMSG, - USERDEFS_IDPLAYERS, - USERDEFS_TEAM, - USERDEFS_VIEWBOB, - USERDEFS_WEAPONSWAY, - USERDEFS_ANGLEINTERPOLATION, - USERDEFS_OBITUARIES, - USERDEFS_LEVELSTATS, - USERDEFS_CROSSHAIRSCALE, - USERDEFS_ALTHUD, - USERDEFS_DISPLAY_BONUS_SCREEN, - USERDEFS_SHOW_LEVEL_TEXT, - USERDEFS_WEAPONSCALE, - USERDEFS_TEXTSCALE, - USERDEFS_END -}; - -enum SectorLabel_t -{ - SECTOR_WALLPTR, - SECTOR_WALLNUM, - SECTOR_CEILINGZ, - SECTOR_FLOORZ, - SECTOR_CEILINGSTAT, - SECTOR_FLOORSTAT, - SECTOR_CEILINGPICNUM, - SECTOR_CEILINGSLOPE, - SECTOR_CEILINGSHADE, - SECTOR_CEILINGPAL, - SECTOR_CEILINGXPANNING, - SECTOR_CEILINGYPANNING, - SECTOR_FLOORPICNUM, - SECTOR_FLOORSLOPE, - SECTOR_FLOORSHADE, - SECTOR_FLOORPAL, - SECTOR_FLOORXPANNING, - SECTOR_FLOORYPANNING, - SECTOR_VISIBILITY, - SECTOR_ALIGNTO, - SECTOR_LOTAG, - SECTOR_HITAG, - SECTOR_EXTRA, - SECTOR_END -}; - -enum WallLabel_t -{ - WALL_X, - WALL_Y, - WALL_POINT2, - WALL_NEXTWALL, - WALL_NEXTSECTOR, - WALL_CSTAT, - WALL_PICNUM, - WALL_OVERPICNUM, - WALL_SHADE, - WALL_PAL, - WALL_XREPEAT, - WALL_YREPEAT, - WALL_XPANNING, - WALL_YPANNING, - WALL_LOTAG, - WALL_HITAG, - WALL_EXTRA, - WALL_END -}; - -enum ActorLabel_t -{ - ACTOR_X, - ACTOR_Y, - ACTOR_Z, - ACTOR_CSTAT, - ACTOR_PICNUM, - ACTOR_SHADE, - ACTOR_PAL, - ACTOR_CLIPDIST, - ACTOR_DETAIL, - ACTOR_XREPEAT, - ACTOR_YREPEAT, - ACTOR_XOFFSET, - ACTOR_YOFFSET, - ACTOR_SECTNUM, - ACTOR_STATNUM, - ACTOR_ANG, - ACTOR_OWNER, - ACTOR_XVEL, - ACTOR_YVEL, - ACTOR_ZVEL, - ACTOR_LOTAG, - ACTOR_HITAG, - ACTOR_EXTRA, - ACTOR_HTCGG, - ACTOR_HTPICNUM, - ACTOR_HTANG, - ACTOR_HTEXTRA, - ACTOR_HTOWNER, - ACTOR_HTMOVFLAG, - ACTOR_HTTEMPANG, - ACTOR_HTACTORSTAYPUT, - ACTOR_HTDISPICNUM, - ACTOR_HTTIMETOSLEEP, - ACTOR_HTFLOORZ, - ACTOR_HTCEILINGZ, - ACTOR_HTLASTVX, - ACTOR_HTLASTVY, - ACTOR_HTBPOSX, - ACTOR_HTBPOSY, - ACTOR_HTBPOSZ, - ACTOR_HTG_T, - ACTOR_ANGOFF, - ACTOR_PITCH, - ACTOR_ROLL, - ACTOR_MDXOFF, - ACTOR_MDYOFF, - ACTOR_MDZOFF, - ACTOR_MDFLAGS, - ACTOR_XPANNING, - ACTOR_YPANNING, - ACTOR_HTFLAGS, - ACTOR_ALPHA, - ACTOR_END -}; - -enum InputLabel_t -{ - INPUT_AVEL, - INPUT_HORZ, - INPUT_FVEL, - INPUT_SVEL, - INPUT_BITS, - INPUT_EXTBITS, - INPUT_END -}; - -enum ProjectileLabel_t -{ - PROJ_WORKSLIKE, - PROJ_SPAWNS, - PROJ_SXREPEAT, - PROJ_SYREPEAT, - PROJ_SOUND, - PROJ_ISOUND, - PROJ_VEL, - PROJ_EXTRA, - PROJ_DECAL, - PROJ_TRAIL, - PROJ_TXREPEAT, - PROJ_TYREPEAT, - PROJ_TOFFSET, - PROJ_TNUM, - PROJ_DROP, - PROJ_CSTAT, - PROJ_CLIPDIST, - PROJ_SHADE, - PROJ_XREPEAT, - PROJ_YREPEAT, - PROJ_PAL, - PROJ_EXTRA_RAND, - PROJ_HITRADIUS, - PROJ_VEL_MULT, - PROJ_OFFSET, - PROJ_BOUNCES, - PROJ_BSOUND, - PROJ_RANGE, - PROJ_FLASH_COLOR, // 29 - PROJ_END -}; - -enum ScriptKeywords_t -{ - CON_DEFINELEVELNAME, // 0 - CON_ACTOR, // 1 - CON_ADDAMMO, // 2 - CON_IFRND, // 3 - CON_ENDA, // 4 - CON_IFCANSEE, // 5 - CON_IFHITWEAPON, // 6 - CON_ACTION, // 7 - CON_IFPDISTL, // 8 - CON_IFPDISTG, // 9 - CON_ELSE, // 10 - CON_STRENGTH, // 11 - CON_BREAK, // 12 - CON_SHOOT, // 13 - CON_PALFROM, // 14 - CON_SOUND, // 15 - CON_FALL, // 16 - CON_STATE, // 17 - CON_ENDS, // 18 - CON_DEFINE, // 19 - CON_RETURN, // 20 - CON_IFAI, // 21 - CON_KILLIT, // 22 - CON_ADDWEAPON, // 23 - CON_AI, // 24 - CON_ADDPHEALTH, // 25 - CON_IFDEAD, // 26 - CON_IFSQUISHED, // 27 - CON_SIZETO, // 28 - CON_LEFTBRACE, // 29 - CON_RIGHTBRACE, // 30 - CON_SPAWN, // 31 - CON_MOVE, // 32 - CON_IFWASWEAPON, // 33 - CON_IFACTION, // 34 - CON_IFACTIONCOUNT, // 35 - CON_RESETACTIONCOUNT, // 36 - CON_DEBRIS, // 37 - CON_PSTOMP, // 38 - CON_BLOCKCOMMENT, // 39 deprecated - CON_CSTAT, // 40 - CON_IFMOVE, // 41 - CON_RESETPLAYER, // 42 - CON_IFONWATER, // 43 - CON_IFINWATER, // 44 - CON_IFCANSHOOTTARGET, // 45 - CON_IFCOUNT, // 46 - CON_RESETCOUNT, // 47 - CON_ADDINVENTORY, // 48 - CON_IFACTORNOTSTAYPUT, // 49 - CON_HITRADIUS, // 50 - CON_IFP, // 51 - CON_COUNT, // 52 - CON_IFACTOR, // 53 - CON_MUSIC, // 54 - CON_INCLUDE, // 55 - CON_IFSTRENGTH, // 56 - CON_DEFINESOUND, // 57 - CON_GUTS, // 58 - CON_IFSPAWNEDBY, // 59 - CON_GAMESTARTUP, // 60 - CON_WACKPLAYER, // 61 - CON_IFGAPZL, // 62 - CON_IFHITSPACE, // 63 - CON_IFOUTSIDE, // 64 - CON_IFMULTIPLAYER, // 65 - CON_OPERATE, // 66 - CON_IFINSPACE, // 67 - CON_DEBUG, // 68 - CON_ENDOFGAME, // 69 - CON_IFBULLETNEAR, // 70 - CON_IFRESPAWN, // 71 - CON_IFFLOORDISTL, // 72 - CON_IFCEILINGDISTL, // 73 - CON_SPRITEPAL, // 74 - CON_IFPINVENTORY, // 75 - CON_BETANAME, // 76 - CON_CACTOR, // 77 - CON_IFPHEALTHL, // 78 - CON_DEFINEQUOTE, // 79 - CON_QUOTE, // 80 - CON_IFINOUTERSPACE, // 81 - CON_IFNOTMOVING, // 82 - CON_RESPAWNHITAG, // 83 - CON_TIP, // 84 - CON_IFSPRITEPAL, // 85 - CON_MONEY, // 86 - CON_SOUNDONCE, // 87 - CON_ADDKILLS, // 88 - CON_STOPSOUND, // 89 - CON_IFAWAYFROMWALL, // 90 - CON_IFCANSEETARGET, // 91 - CON_GLOBALSOUND, // 92 - CON_LOTSOFGLASS, // 93 - CON_IFGOTWEAPONCE, // 94 - CON_GETLASTPAL, // 95 - CON_PKICK, // 96 - CON_MIKESND, // 97 - CON_USERACTOR, // 98 - CON_SIZEAT, // 99 - CON_ADDSTRENGTH, // 100 - CON_CSTATOR, // 101 - CON_MAIL, // 102 - CON_PAPER, // 103 - CON_TOSSWEAPON, // 104 - CON_SLEEPTIME, // 105 - CON_NULLOP, // 106 - CON_DEFINEVOLUMENAME, // 107 - CON_DEFINESKILLNAME, // 108 - CON_IFNOSOUNDS, // 109 - CON_CLIPDIST, // 110 - CON_IFANGDIFFL, // 111 - CON_GAMEVAR, // 112 - CON_IFVARL, // 113 - CON_IFVARG, // 114 - CON_SETVARVAR, // 115 - CON_SETVAR, // 116 - CON_ADDVARVAR, // 117 - CON_ADDVAR, // 118 - CON_IFVARVARL, // 119 - CON_IFVARVARG, // 120 - CON_ADDLOGVAR, // 121 - CON_ADDLOG, // 122 - CON_ONEVENT, // 123 - CON_ENDEVENT, // 124 - CON_IFVARE, // 125 - CON_IFVARVARE, // 126 - CON_SPGETLOTAG, // 127 - CON_SPGETHITAG, // 128 - CON_SECTGETLOTAG, // 129 - CON_SECTGETHITAG, // 130 - CON_IFSOUND, // 131 - CON_GETTEXTUREFLOOR, // 132 - CON_GETTEXTURECEILING, // 133 - CON_INITTIMER, // 134 - CON_STARTTRACK, // 135 - CON_RANDVAR, // 136 - CON_ENHANCED, // 137 - CON_GETANGLETOTARGET, // 138 - CON_GETACTORANGLE, // 139 - CON_SETACTORANGLE, // 140 - CON_MULVAR, // 141 - CON_MULVARVAR, // 142 - CON_DIVVAR, // 143 - CON_DIVVARVAR, // 144 - CON_MODVAR, // 145 - CON_MODVARVAR, // 146 - CON_ANDVAR, // 147 - CON_ANDVARVAR, // 148 - CON_ORVAR, // 149 - CON_ORVARVAR, // 150 - CON_GETPLAYERANGLE, // 151 - CON_SETPLAYERANGLE, // 152 - CON_LOCKPLAYER, // 153 - CON_SETSECTOR, // 154 - CON_GETSECTOR, // 155 - CON_SETACTOR, // 156 - CON_GETACTOR, // 157 - CON_SETWALL, // 158 - CON_GETWALL, // 159 - CON_FINDNEARACTOR, // 160 - CON_FINDNEARACTORVAR, // 161 - CON_SETACTORVAR, // 162 - CON_GETACTORVAR, // 163 - CON_ESPAWN, // 164 - CON_GETPLAYER, // 165 - CON_SETPLAYER, // 166 - CON_SQRT, // 167 - CON_EVENTLOADACTOR, // 168 - CON_ESPAWNVAR, // 169 - CON_GETUSERDEF, // 170 - CON_SETUSERDEF, // 171 - CON_SUBVARVAR, // 172 - CON_SUBVAR, // 173 - CON_IFVARN, // 174 - CON_IFVARVARN, // 175 - CON_IFVARAND, // 176 - CON_IFVARVARAND, // 177 - CON_MYOS, // 178 - CON_MYOSPAL, // 179 - CON_DISPLAYRAND, // 180 - CON_SIN, // 181 - CON_XORVARVAR, // 182 - CON_XORVAR, // 183 - CON_RANDVARVAR, // 184 - CON_MYOSX, // 185 - CON_MYOSPALX, // 186 - CON_GMAXAMMO, // 187 - CON_SMAXAMMO, // 188 - CON_STARTLEVEL, // 189 - CON_ESHOOT, // 190 - CON_QSPAWN, // 191 - CON_ROTATESPRITE, // 192 - CON_DEFINEPROJECTILE, // 193 - CON_SPRITESHADOW, // 194 - CON_COS, // 195 - CON_ESHOOTVAR, // 196 - CON_FINDNEARACTOR3D, // 197 - CON_FINDNEARACTOR3DVAR, // 198 - CON_FLASH, // 199 - CON_QSPAWNVAR, // 200 - CON_EQSPAWN, // 201 - CON_EQSPAWNVAR, // 202 - CON_MINITEXT, // 203 - CON_GAMETEXT, // 204 - CON_DIGITALNUMBER, // 205 - CON_ADDWEAPONVAR, // 206 - CON_SETPROJECTILE, // 207 - CON_ANGOFF, // 208 - CON_UPDATESECTOR, // 209 - CON_INSERTSPRITEQ, // 210 - CON_ANGOFFVAR, // 211 - CON_WHILEVARN, // 212 - CON_SWITCH, // 213 - CON_CASE, // 214 - CON_DEFAULT, // 215 - CON_ENDSWITCH, // 216 - CON_SHOOTVAR, // 217 - CON_SOUNDVAR, // 218 - CON_FINDPLAYER, // 219 - CON_FINDOTHERPLAYER, // 220 - CON_ACTIVATEBYSECTOR, // 221 - CON_OPERATESECTORS, // 222 - CON_OPERATERESPAWNS, // 223 - CON_OPERATEACTIVATORS, // 224 - CON_OPERATEMASTERSWITCHES, // 225 - CON_CHECKACTIVATORMOTION, // 226 - CON_ZSHOOT, // 227 - CON_DIST, // 228 - CON_LDIST, // 229 - CON_SHIFTVARL, // 230 - CON_SHIFTVARR, // 231 - CON_SPRITENVG, // 232 - CON_GETANGLE, // 233 - CON_WHILEVARVARN, // 234 - CON_HITSCAN, // 235 - CON_TIME, // 236 - CON_GETPLAYERVAR, // 237 - CON_SETPLAYERVAR, // 238 - CON_MULSCALE, // 239 - CON_SETASPECT, // 240 - CON_EZSHOOT, // 241 - CON_SPRITENOSHADE, // 242 - CON_MOVESPRITE, // 243 - CON_CHECKAVAILWEAPON, // 244 - CON_SOUNDONCEVAR, // 245 - CON_UPDATESECTORZ, // 246 - CON_STOPALLSOUNDS, // 247 - CON_SSP, // 248 - CON_STOPSOUNDVAR, // 249 - CON_DISPLAYRANDVAR, // 250 - CON_DISPLAYRANDVARVAR, // 251 - CON_CHECKAVAILINVEN, // 252 - CON_GLOBALSOUNDVAR, // 253 - CON_GUNIQHUDID, // 254 - CON_GETPROJECTILE, // 255 - CON_GETTHISPROJECTILE, // 256 - CON_SETTHISPROJECTILE, // 257 - CON_DEFINECHEAT, // 258 - CON_CHEATKEYS, // 259 - CON_USERQUOTE, // 260 - CON_PRECACHE, // 261 - CON_DEFINEGAMEFUNCNAME, // 262 - CON_REDEFINEQUOTE, // 263 - CON_QSPRINTF, // 264 - CON_GETPNAME, // 265 - CON_QSTRCAT, // 266 - CON_QSTRCPY, // 267 - CON_SETSPRITE, // 268 - CON_ROTATEPOINT, // 269 - CON_DRAGPOINT, // 270 - CON_GETZRANGE, // 271 - CON_CHANGESPRITESTAT, // 272 - CON_GETCEILZOFSLOPE, // 273 - CON_GETFLORZOFSLOPE, // 274 - CON_NEARTAG, // 275 - CON_DEFINEGAMETYPE, // 276 - CON_CHANGESPRITESECT, // 277 - CON_SPRITEFLAGS, // 278 - CON_SAVEGAMEVAR, // 279 - CON_READGAMEVAR, // 280 - CON_FINDNEARSPRITE, // 281 - CON_FINDNEARSPRITEVAR, // 282 - CON_FINDNEARSPRITE3D, // 283 - CON_FINDNEARSPRITE3DVAR,// 284 - CON_DYNAMICREMAP, // 285 - CON_SETINPUT, // 286 - CON_GETINPUT, // 287 - CON_SAVE, // 288 - CON_CANSEE, // 289 - CON_CANSEESPR, // 290 - CON_FINDNEARACTORZ, // 291 - CON_FINDNEARACTORZVAR, // 292 - CON_FINDNEARSPRITEZ, // 293 - CON_FINDNEARSPRITEZVAR, // 294 - CON_ZSHOOTVAR, // 295 - CON_EZSHOOTVAR, // 296 - CON_GETCURRADDRESS, // 297 - CON_JUMP, // 298 - CON_QSTRLEN, // 299 - CON_GETINCANGLE, // 300 - CON_QUAKE, // 301 - CON_SHOWVIEW, // 302 - CON_HEADSPRITESTAT, // 303 - CON_PREVSPRITESTAT, // 304 - CON_NEXTSPRITESTAT, // 305 - CON_HEADSPRITESECT, // 306 - CON_PREVSPRITESECT, // 307 - CON_NEXTSPRITESECT, // 308 - CON_GETKEYNAME, // 309 - CON_QSUBSTR, // 310 - CON_GAMETEXTZ, // 311 - CON_DIGITALNUMBERZ, // 312 - CON_SPRITENOPAL, // 313 - CON_HITRADIUSVAR, // 314 - CON_ROTATESPRITE16, // 315 - CON_GAMEARRAY, // 316 - CON_SETARRAY, // 317 - CON_RESIZEARRAY, // 318 - CON_WRITEARRAYTOFILE, // 319 - CON_READARRAYFROMFILE, // 320 - CON_STARTTRACKVAR, // 321 - CON_QGETSYSSTR, // 322 - CON_GETTICKS, // 323 - CON_GETTSPR, // 324 - CON_SETTSPR, // 325 - CON_SAVEMAPSTATE, // 326 - CON_LOADMAPSTATE, // 327 - CON_CLEARMAPSTATE, // 328 - CON_SCRIPTSIZE, // 329 - CON_SETGAMENAME, // 330 - CON_CMENU, // 331 - CON_GETTIMEDATE, // 332 - CON_ACTIVATECHEAT, // 333 - CON_SETGAMEPALETTE, // 334 - CON_SETDEFNAME, // 335 - CON_SETCFGNAME, // 336 - CON_IFVAROR, // 337 - CON_IFVARVAROR, // 338 - CON_IFVARXOR, // 339 - CON_IFVARVARXOR, // 340 - CON_IFVAREITHER, // 341 - CON_IFVARVAREITHER, // 342 - CON_GETARRAYSIZE, // 343 - CON_SAVENN, // 344 - CON_COPY, // 345 - CON_INV, // 346 - CON_SECTOROFWALL, // 347 - CON_QSTRNCAT, // 348 - CON_IFACTORSOUND, // 349 - CON_STOPACTORSOUND, // 350 - CON_IFCLIENT, // 351 - CON_IFSERVER, // 352 - CON_SECTSETINTERPOLATION, // 353 - CON_SECTCLEARINTERPOLATION, // 354 - CON_CLIPMOVE, // 355 - CON_LINEINTERSECT, // 356 - CON_RAYINTERSECT, // 357 - CON_CALCHYPOTENUSE, // 358 - CON_CLIPMOVENOSLIDE, // 359 - CON_END -}; -#endif diff --git a/polymer-perf/eduke32/source/gamedefs.h b/polymer-perf/eduke32/source/gamedefs.h deleted file mode 100644 index 2e0a5c04c..000000000 --- a/polymer-perf/eduke32/source/gamedefs.h +++ /dev/null @@ -1,181 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -//**************************************************************************** -// -// gamedefs.h -// -// common defines between the game and the setup program -// -//**************************************************************************** - -#ifndef _gamedefs_public_ -#define _gamedefs_public_ -#ifdef __cplusplus -extern "C" { -#endif - -//**************************************************************************** -// -// DEFINES -// -//**************************************************************************** - -// -// Setup program defines -// -#define SETUPFILENAME "eduke32.cfg" - - -// Max number of players - -#define MAXPLAYERS 16 - -// Number of Mouse buttons - -#define MAXMOUSEBUTTONS 10 - -// Number of JOY buttons - -#define MAXJOYBUTTONS (32+4) - -// Number of EXTERNAL buttons - -//#define MAXEXTERNALBUTTONS 6 - -// -// modem string defines -// - -#define MAXMODEMSTRING 50 - -// MACRO defines - -#define MAXMACROS 10 -#define MAXMACROLENGTH 34 - -// Phone list defines - -#define PHONENUMBERLENGTH 28 -#define PHONENAMELENGTH 16 -#define MAXPHONEENTRIES 10 - -// length of program functions - -#define MAXFUNCTIONLENGTH 30 - -// length of axis functions - -#define MAXAXISFUNCTIONLENGTH 30 - -// Max Player Name length - -#define MAXPLAYERNAMELENGTH 11 - -// Max RTS Name length - -#define MAXRTSNAMELENGTH 15 - -// Number of Mouse Axes - -#define MAXMOUSEAXES 2 - -// Number of JOY axes - -#define MAXJOYAXES 8 - -// MIN/MAX scale value for controller scales - -#define MAXCONTROLSCALEVALUE (1<<19) - -// DEFAULT scale value for controller scales - -#define DEFAULTCONTROLSCALEVALUE (1<<16) - -// base value for controller scales - -#define BASECONTROLSCALEVALUE (1<<16) - -// DEFAULT mouse sensitivity scale - -#define DEFAULTMOUSESENSITIVITY 7 - -enum - { - gametype_network=3, - gametype_serial=1, - gametype_modem=2 - }; - -enum - { - connecttype_dialing=0, - connecttype_answer=1, - connecttype_alreadyconnected=2 - }; - -enum - { - screenbuffer_320x200, - screenbuffer_640x400, - screenbuffer_640x480, - screenbuffer_800x600, - screenbuffer_1024x768, - screenbuffer_1280x1024, - screenbuffer_1600x1200 - }; - -enum - { - vesa_320x200, - vesa_360x200, - vesa_320x240, - vesa_360x240, - vesa_320x400, - vesa_360x400, - vesa_640x350, - vesa_640x400, - vesa_640x480, - vesa_800x600, - vesa_1024x768, - vesa_1280x1024, - vesa_1600x1200 - }; - -enum - { - screenmode_chained, - screenmode_vesa, - screenmode_buffered, - screenmode_tseng, - screenmode_paradise, - screenmode_s3, - screenmode_crystal, - screenmode_redblue, - }; - - -#ifdef __cplusplus -}; -#endif -#endif - diff --git a/polymer-perf/eduke32/source/gameexec.c b/polymer-perf/eduke32/source/gameexec.c deleted file mode 100644 index a5742c7b8..000000000 --- a/polymer-perf/eduke32/source/gameexec.c +++ /dev/null @@ -1,5187 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#include -#include -#include - -#include "duke3d.h" -#include "gamedef.h" -#include "gameexec.h" -#include "scriplib.h" -#include "savegame.h" -#include "premap.h" -#include "osdcmds.h" -#include "osd.h" -#include "menus.h" - -#if KRANDDEBUG -# define GAMEEXEC_INLINE -# define GAMEEXEC_STATIC -#else -# define GAMEEXEC_INLINE inline -# define GAMEEXEC_STATIC static -#endif - -void G_RestoreMapState(mapstate_t *save); -void G_SaveMapState(mapstate_t *save); - -vmstate_t vm; - -int32_t g_errorLineNum; -int32_t g_tw; -extern int32_t ticrandomseed; - -GAMEEXEC_STATIC int32_t VM_Execute(int32_t once); - -#include "gamestructures.c" - -void VM_ScriptInfo(void) -{ - intptr_t *p; - - if (!script) - return; - - if (insptr) - { - for (p=insptr-20; p>12&&(*p&0xFFF)>12),keyw[*p&0xFFF]); - else - initprintf(" %d",(int32_t)*p); - } - - initprintf("\n"); - } - - if (vm.g_i) - initprintf("current actor: %d (%d)\n",vm.g_i,vm.g_sp->picnum); - - initprintf("g_errorLineNum: %d, g_tw: %d\n",g_errorLineNum,g_tw); -} - -void VM_OnEvent(register int32_t iEventID, register int32_t iActor, register int32_t iPlayer, register int32_t lDist) -{ - if (!apScriptGameEvent[iEventID]) - return; - - { - intptr_t *oinsptr=insptr; - vmstate_t vm_backup; - vmstate_t tempvm = { iActor, iPlayer, lDist, &actor[iActor].t_data[0], - &sprite[iActor], 0 }; - - insptr = apScriptGameEvent[iEventID]; - - Bmemcpy(&vm_backup, &vm, sizeof(vmstate_t)); - Bmemcpy(&vm, &tempvm, sizeof(vmstate_t)); - - VM_Execute(0); - - if (vm.g_flags & VM_KILL) - { - // if player was set to squish, first stop that... - if (vm.g_p >= 0 && g_player[vm.g_p].ps->actorsqu == vm.g_i) - g_player[vm.g_p].ps->actorsqu = -1; - - deletesprite(vm.g_i); - } - - Bmemcpy(&vm, &vm_backup, sizeof(vmstate_t)); - insptr = oinsptr; - } -} - -static inline int32_t VM_CheckSquished(void) -{ - sectortype *sc = §or[vm.g_sp->sectnum]; - - if ((vm.g_sp->picnum == APLAYER && ud.clipping) || sc->lotag == 23 || - (vm.g_sp->pal == 1 ? - !(sc->floorz - sc->ceilingz < (32<<8) && (sc->lotag&32768) == 0) : - !(sc->floorz - sc->ceilingz < (12<<8)))) - return 0; - - P_DoQuote(QUOTE_SQUISHED, g_player[vm.g_p].ps); - - if (A_CheckEnemySprite(vm.g_sp)) vm.g_sp->xvel = 0; - - if (vm.g_sp->pal == 1) - { - actor[vm.g_i].picnum = SHOTSPARK1; - actor[vm.g_i].extra = 1; - return 0; - } - - return 1; -} - -GAMEEXEC_STATIC GAMEEXEC_INLINE void P_ForceAngle(DukePlayer_t *p) -{ - int32_t n = 128-(krand()&255); - - p->horiz += 64; - p->return_to_center = 9; - p->look_ang = p->rotscrnang = n>>1; -} - -GAMEEXEC_STATIC int32_t A_Dodge(spritetype *s) -{ - int32_t bx,by,bxvect,byvect,i; - int32_t mx = s->x, my = s->y; - int32_t mxvect = sintable[(s->ang+512)&2047]; - int32_t myvect = sintable[s->ang&2047]; - - if (A_CheckEnemySprite(s) && s->extra <= 0) // hack - return 0; - - for (i=headspritestat[STAT_PROJECTILE]; i>=0; i=nextspritestat[i]) //weapons list - { - if (OW == i) - continue; - - bx = SX-mx; - by = SY-my; - bxvect = sintable[(SA+512)&2047]; - byvect = sintable[SA&2047]; - - if ((mxvect * bx) + (myvect * by) >= 0 && (bxvect * bx) + (byvect * by) < 0) - { - if (klabs((bxvect * by) - (byvect * bx)) < 65536<<6) - { - s->ang -= 512+(krand()&1024); - return 1; - } - } - } - return 0; -} - -int32_t A_GetFurthestAngle(int32_t iActor,int32_t angs) -{ - spritetype *s = &sprite[iActor]; - - if (s->picnum != APLAYER && (actor[iActor].t_data[0]&63) > 2) - return(s->ang + 1024); - - { - int32_t furthest_angle=0; - int32_t d; - int32_t greatestd = -(1<<30); - int32_t angincs = 2048/angs,j; - hitdata_t hitinfo; - - for (j=s->ang; j<(2048+s->ang); j+=angincs) - { - s->z -= (8<<8); - hitscan((const vec3_t *)s, s->sectnum, - sintable[(j+512)&2047], - sintable[j&2047],0, - &hitinfo,CLIPMASK1); - s->z += (8<<8); - d = klabs(hitinfo.pos.x-s->x) + klabs(hitinfo.pos.y-s->y); - - if (d > greatestd) - { - greatestd = d; - furthest_angle = j; - } - } - return (furthest_angle&2047); - } -} - -int32_t A_FurthestVisiblePoint(int32_t iActor,spritetype *ts,int32_t *dax,int32_t *day) -{ - if ((actor[iActor].t_data[0]&63)) return -1; - { - int32_t d, da;//, d, cd, ca,tempx,tempy,cx,cy; - int32_t j, angincs; - spritetype *s = &sprite[iActor]; - hitdata_t hitinfo; - - if ((!g_netServer && ud.multimode < 2) && ud.player_skill < 3) - angincs = 2048/2; - else angincs = 2048/(1+(krand()&1)); - - for (j=ts->ang; j<(2048+ts->ang); j+=(angincs-(krand()&511))) - { - ts->z -= (16<<8); - hitscan((const vec3_t *)ts, ts->sectnum, - sintable[(j+512)&2047], - sintable[j&2047],16384-(krand()&32767), - &hitinfo,CLIPMASK1); - - ts->z += (16<<8); - - d = klabs(hitinfo.pos.x-ts->x)+klabs(hitinfo.pos.y-ts->y); - da = klabs(hitinfo.pos.x-s->x)+klabs(hitinfo.pos.y-s->y); - - if (d < da && hitinfo.hitsect > -1) - if (cansee(hitinfo.pos.x,hitinfo.pos.y,hitinfo.pos.z, - hitinfo.hitsect,s->x,s->y,s->z-(16<<8),s->sectnum)) - { - *dax = hitinfo.pos.x; - *day = hitinfo.pos.y; - return hitinfo.hitsect; - } - } - return -1; - } -} - -void A_GetZLimits(int32_t iActor) -{ - spritetype *s = &sprite[iActor]; - -// if (s->statnum == STAT_PLAYER || s->statnum == STAT_STANDABLE || s->statnum == STAT_ZOMBIEACTOR || s->statnum == STAT_ACTOR || s->statnum == STAT_PROJECTILE) - { - int32_t hz,lz,zr = 127L; - int32_t cstat = s->cstat; - - s->cstat = 0; - - if (s->statnum == STAT_PROJECTILE) - zr = 4L; - - s->z -= ZOFFSET; - getzrange((vec3_t *)s,s->sectnum,&actor[iActor].ceilingz,&hz,&actor[iActor].floorz,&lz,zr,CLIPMASK0); - s->z += ZOFFSET; - - s->cstat = cstat; - - if ((lz&49152) == 49152 && (sprite[lz&(MAXSPRITES-1)].cstat&48) == 0) - { - lz &= (MAXSPRITES-1); - if (A_CheckEnemySprite(&sprite[lz]) && sprite[lz].pal != 1) - { - if (s->statnum != 4) - { - actor[iActor].dispicnum = -4; // No shadows on actors - s->xvel = -256; - A_SetSprite(iActor,CLIPMASK0); - } - } - else if (sprite[lz].picnum == APLAYER && A_CheckEnemySprite(s)) - { - actor[iActor].dispicnum = -4; // No shadows on actors - s->xvel = -256; - A_SetSprite(iActor,CLIPMASK0); - } - else if (s->statnum == STAT_PROJECTILE && sprite[lz].picnum == APLAYER) - if (s->owner == lz) - { - actor[iActor].ceilingz = sector[s->sectnum].ceilingz; - actor[iActor].floorz = sector[s->sectnum].floorz; - } - } - } - /* - else - { - actor[iActor].ceilingz = sector[s->sectnum].ceilingz; - actor[iActor].floorz = sector[s->sectnum].floorz; - } - */ -} - -void A_Fall(int32_t iActor) -{ - spritetype *s = &sprite[iActor]; - int32_t hz,lz,c = g_spriteGravity; - - if (G_CheckForSpaceFloor(s->sectnum)) - c = 0; - else - { - if (G_CheckForSpaceCeiling(s->sectnum) || sector[s->sectnum].lotag == 2) - c = g_spriteGravity/6; - } - - if (s->statnum == STAT_ACTOR || s->statnum == STAT_PLAYER || s->statnum == STAT_ZOMBIEACTOR || s->statnum == STAT_STANDABLE) - { - int32_t cstat = s->cstat; - s->cstat = 0; - s->z -= ZOFFSET; - getzrange((vec3_t *)s,s->sectnum,&actor[iActor].ceilingz,&hz,&actor[iActor].floorz,&lz,127L,CLIPMASK0); - s->z += ZOFFSET; - s->cstat = cstat; - } - else - { - actor[iActor].ceilingz = sector[s->sectnum].ceilingz; - actor[iActor].floorz = sector[s->sectnum].floorz; - } - - if (s->z < actor[iActor].floorz-(ZOFFSET)) - { - if (sector[s->sectnum].lotag == 2 && s->zvel > 3122) - s->zvel = 3144; - s->z += s->zvel = min(6144, s->zvel+c); - } - if (s->z >= actor[iActor].floorz-(ZOFFSET)) - { - s->z = actor[iActor].floorz - ZOFFSET; - s->zvel = 0; - } -} - -int32_t G_GetAngleDelta(int32_t a,int32_t na) -{ - a &= 2047; - na &= 2047; - - if (klabs(a-na) < 1024) - { -// OSD_Printf("G_GetAngleDelta() returning %d\n",na-a); - return (na-a); - } - - if (na > 1024) na -= 2048; - if (a > 1024) a -= 2048; - - na -= 2048; - a -= 2048; -// OSD_Printf("G_GetAngleDelta() returning %d\n",na-a); - return (na-a); -} - -GAMEEXEC_STATIC GAMEEXEC_INLINE void VM_AlterAng(int32_t a) -{ - intptr_t *moveptr; - int32_t ticselapsed = (vm.g_t[0])&31; - - if ((moveptr = (intptr_t *)vm.g_t[1]) < &script[0] || moveptr > &script[g_scriptSize]) - { - vm.g_t[1] = 0; - OSD_Printf(OSD_ERROR "bad moveptr for actor %d (%d)!\n", vm.g_i, vm.g_sp->picnum); - return; - } - - vm.g_sp->xvel += (*moveptr-vm.g_sp->xvel)/5; - if (vm.g_sp->zvel < 648) vm.g_sp->zvel += ((*(moveptr+1)<<4)-vm.g_sp->zvel)/5; - - if (A_CheckEnemySprite(vm.g_sp) && vm.g_sp->extra <= 0) // hack - return; - - if (a&seekplayer) - { - int32_t aang = vm.g_sp->ang, angdif, goalang; - int32_t j = g_player[vm.g_p].ps->holoduke_on; - - // NOTE: looks like 'owner' is set to target sprite ID... - - if (j >= 0 && cansee(sprite[j].x,sprite[j].y,sprite[j].z,sprite[j].sectnum,vm.g_sp->x,vm.g_sp->y,vm.g_sp->z,vm.g_sp->sectnum)) - vm.g_sp->owner = j; - else vm.g_sp->owner = g_player[vm.g_p].ps->i; - - if (sprite[vm.g_sp->owner].picnum == APLAYER) - goalang = getangle(actor[vm.g_i].lastvx-vm.g_sp->x,actor[vm.g_i].lastvy-vm.g_sp->y); - else - goalang = getangle(sprite[vm.g_sp->owner].x-vm.g_sp->x,sprite[vm.g_sp->owner].y-vm.g_sp->y); - - if (vm.g_sp->xvel && vm.g_sp->picnum != DRONE) - { - angdif = G_GetAngleDelta(aang,goalang); - - if (ticselapsed < 2) - { - if (klabs(angdif) < 256) - { - j = 128-(krand()&256); - vm.g_sp->ang += j; - if (A_GetHitscanRange(vm.g_i) < 844) - vm.g_sp->ang -= j; - } - } - else if (ticselapsed > 18 && ticselapsed < GAMETICSPERSEC) // choose - { - if (klabs(angdif>>2) < 128) vm.g_sp->ang = goalang; - else vm.g_sp->ang += angdif>>2; - } - } - else vm.g_sp->ang = goalang; - } - - if (ticselapsed < 1) - { - int32_t j = 2; - if (a&furthestdir) - { - vm.g_sp->ang = A_GetFurthestAngle(vm.g_i,j); - vm.g_sp->owner = g_player[vm.g_p].ps->i; - } - - if (a&fleeenemy) - { - vm.g_sp->ang = A_GetFurthestAngle(vm.g_i,j); // += angdif; // = G_GetAngleDelta(aang,goalang)>>1; - } - } -} - -GAMEEXEC_STATIC void VM_Move(void) -{ - int32_t l; - intptr_t *moveptr; - int32_t a = vm.g_sp->hitag, goalang, angdif; - int32_t daxvel; - int32_t deadflag = (A_CheckEnemySprite(vm.g_sp) && vm.g_sp->extra <= 0); - - if (a == -1) a = 0; - - vm.g_t[0]++; - - if (vm.g_t[1] == 0 || a == 0) - { - if (deadflag || (actor[vm.g_i].bposx != vm.g_sp->x) || (actor[vm.g_i].bposy != vm.g_sp->y)) - { - actor[vm.g_i].bposx = vm.g_sp->x; - actor[vm.g_i].bposy = vm.g_sp->y; - setsprite(vm.g_i,(vec3_t *)vm.g_sp); - } - return; - } - - if (a&face_player && !deadflag) - { - if (g_player[vm.g_p].ps->newowner >= 0) - goalang = getangle(g_player[vm.g_p].ps->opos.x-vm.g_sp->x,g_player[vm.g_p].ps->opos.y-vm.g_sp->y); - else goalang = getangle(g_player[vm.g_p].ps->pos.x-vm.g_sp->x,g_player[vm.g_p].ps->pos.y-vm.g_sp->y); - angdif = G_GetAngleDelta(vm.g_sp->ang,goalang)>>2; - if ((angdif > -8 && angdif < 0) || (angdif < 8 && angdif > 0)) - angdif *= 2; - vm.g_sp->ang += angdif; - } - - if (a&spin && !deadflag) - vm.g_sp->ang += sintable[((vm.g_t[0]<<3)&2047)]>>6; - - if (a&face_player_slow && !deadflag) - { - if (g_player[vm.g_p].ps->newowner >= 0) - goalang = getangle(g_player[vm.g_p].ps->opos.x-vm.g_sp->x,g_player[vm.g_p].ps->opos.y-vm.g_sp->y); - else goalang = getangle(g_player[vm.g_p].ps->pos.x-vm.g_sp->x,g_player[vm.g_p].ps->pos.y-vm.g_sp->y); - angdif = G_GetAngleDelta(vm.g_sp->ang,goalang)>>4; - if ((angdif > -8 && angdif < 0) || (angdif < 8 && angdif > 0)) - angdif *= 2; - vm.g_sp->ang += angdif; - } - - if (((a&jumptoplayer) == jumptoplayer) && !deadflag) - { - if (vm.g_t[0] < 16) - vm.g_sp->zvel -= (sintable[(512+(vm.g_t[0]<<4))&2047]>>5); - } - - if (a&face_player_smart && !deadflag) - { - int32_t newx = g_player[vm.g_p].ps->pos.x+(g_player[vm.g_p].ps->vel.x/768); - int32_t newy = g_player[vm.g_p].ps->pos.y+(g_player[vm.g_p].ps->vel.y/768); - - goalang = getangle(newx-vm.g_sp->x,newy-vm.g_sp->y); - angdif = G_GetAngleDelta(vm.g_sp->ang,goalang)>>2; - if ((angdif > -8 && angdif < 0) || (angdif < 8 && angdif > 0)) - angdif *= 2; - vm.g_sp->ang += angdif; - } - - if ((moveptr = (intptr_t *)vm.g_t[1]) < &script[0] || moveptr > &script[g_scriptSize]) - { - vm.g_t[1] = 0; - OSD_Printf(OSD_ERROR "bad moveptr for actor %d (%d)!\n", vm.g_i, vm.g_sp->picnum); - return; - } - - if (a&geth) vm.g_sp->xvel += ((*moveptr)-vm.g_sp->xvel)>>1; - if (a&getv) vm.g_sp->zvel += ((*(moveptr+1)<<4)-vm.g_sp->zvel)>>1; - - if (a&dodgebullet && !deadflag) - A_Dodge(vm.g_sp); - - if (vm.g_sp->picnum != APLAYER) - VM_AlterAng(a); - - if (vm.g_sp->xvel > -6 && vm.g_sp->xvel < 6) vm.g_sp->xvel = 0; - - a = A_CheckEnemySprite(vm.g_sp); - - if (vm.g_sp->xvel || vm.g_sp->zvel) - { - if (a && vm.g_sp->picnum != ROTATEGUN) - { - if ((vm.g_sp->picnum == DRONE || vm.g_sp->picnum == COMMANDER) && vm.g_sp->extra > 0) - { - if (vm.g_sp->picnum == COMMANDER) - { - actor[vm.g_i].floorz = l = getflorzofslope(vm.g_sp->sectnum,vm.g_sp->x,vm.g_sp->y); - if (vm.g_sp->z > (l-(8<<8))) - { - if (vm.g_sp->z > (l-(8<<8))) vm.g_sp->z = l-(8<<8); - vm.g_sp->zvel = 0; - } - - actor[vm.g_i].ceilingz = l = getceilzofslope(vm.g_sp->sectnum,vm.g_sp->x,vm.g_sp->y); - if ((vm.g_sp->z-l) < (80<<8)) - { - vm.g_sp->z = l+(80<<8); - vm.g_sp->zvel = 0; - } - } - else - { - if (vm.g_sp->zvel > 0) - { - actor[vm.g_i].floorz = l = getflorzofslope(vm.g_sp->sectnum,vm.g_sp->x,vm.g_sp->y); - if (vm.g_sp->z > (l-(30<<8))) - vm.g_sp->z = l-(30<<8); - } - else - { - actor[vm.g_i].ceilingz = l = getceilzofslope(vm.g_sp->sectnum,vm.g_sp->x,vm.g_sp->y); - if ((vm.g_sp->z-l) < (50<<8)) - { - vm.g_sp->z = l+(50<<8); - vm.g_sp->zvel = 0; - } - } - } - } - else if (vm.g_sp->picnum != ORGANTIC) - { - if (vm.g_sp->zvel > 0 && actor[vm.g_i].floorz < vm.g_sp->z) - vm.g_sp->z = actor[vm.g_i].floorz; - if (vm.g_sp->zvel < 0) - { - l = getceilzofslope(vm.g_sp->sectnum,vm.g_sp->x,vm.g_sp->y); - if ((vm.g_sp->z-l) < (66<<8)) - { - vm.g_sp->z = l+(66<<8); - vm.g_sp->zvel >>= 1; - } - } - } - } - else if (vm.g_sp->picnum == APLAYER) - if ((vm.g_sp->z-actor[vm.g_i].ceilingz) < (32<<8)) - vm.g_sp->z = actor[vm.g_i].ceilingz+(32<<8); - - daxvel = vm.g_sp->xvel; - angdif = vm.g_sp->ang; - - if (a && vm.g_sp->picnum != ROTATEGUN) - { - if (vm.g_x < 960 && vm.g_sp->xrepeat > 16) - { - - daxvel = -(1024-vm.g_x); - angdif = getangle(g_player[vm.g_p].ps->pos.x-vm.g_sp->x,g_player[vm.g_p].ps->pos.y-vm.g_sp->y); - - if (vm.g_x < 512) - { - g_player[vm.g_p].ps->vel.x = 0; - g_player[vm.g_p].ps->vel.y = 0; - } - else - { - g_player[vm.g_p].ps->vel.x = mulscale(g_player[vm.g_p].ps->vel.x,g_player[vm.g_p].ps->runspeed-0x2000,16); - g_player[vm.g_p].ps->vel.y = mulscale(g_player[vm.g_p].ps->vel.y,g_player[vm.g_p].ps->runspeed-0x2000,16); - } - } - else if (vm.g_sp->picnum != DRONE && vm.g_sp->picnum != SHARK && vm.g_sp->picnum != COMMANDER) - { - if (actor[vm.g_i].bposz != vm.g_sp->z || ((!g_netServer && ud.multimode < 2) && ud.player_skill < 2)) - { - if ((vm.g_t[0]&1) || g_player[vm.g_p].ps->actorsqu == vm.g_i) return; - else daxvel <<= 1; - } - else - { - if ((vm.g_t[0]&3) || g_player[vm.g_p].ps->actorsqu == vm.g_i) return; - else daxvel <<= 2; - } - } - } - - { - vec3_t tmpvect = { (daxvel*(sintable[(angdif+512)&2047]))>>14, - (daxvel*(sintable[angdif&2047]))>>14, vm.g_sp->zvel - }; - - actor[vm.g_i].movflag = A_MoveSprite(vm.g_i,&tmpvect,CLIPMASK0); - } - } - - if (!a) return; - - if (sector[vm.g_sp->sectnum].ceilingstat&1) - vm.g_sp->shade += (sector[vm.g_sp->sectnum].ceilingshade-vm.g_sp->shade)>>1; - else vm.g_sp->shade += (sector[vm.g_sp->sectnum].floorshade-vm.g_sp->shade)>>1; - -// wtf? - /* - if (sector[vm.g_sp->sectnum].floorpicnum == MIRROR) - deletesprite(vm.g_i); - */ -} - -GAMEEXEC_STATIC GAMEEXEC_INLINE void __fastcall VM_DoConditional(register int32_t condition) -{ - if (condition || ((insptr = (intptr_t *)*(insptr+1)) && (((*insptr) & 0xfff) == CON_ELSE))) - { - // skip 'else' pointer.. and... - insptr += 2; - VM_Execute(1); - return; - } -} - -GAMEEXEC_STATIC int32_t VM_Execute(int32_t once) -{ - register int32_t tw = *insptr; - - // jump directly into the loop, saving us from the checks during the first iteration - goto skip_check; - - while (!once) - { - if (vm.g_flags & (VM_RETURN|VM_KILL|VM_NOEXECUTE)) - return 1; - - tw = *insptr; - -skip_check: - // Bsprintf(g_szBuf,"Parsing: %d",*insptr); - // AddLog(g_szBuf); - - g_errorLineNum = tw>>12; - g_tw = tw &= 0xFFF; - - switch (tw) - { - case CON_REDEFINEQUOTE: - insptr++; - { - int32_t q = *insptr++, i = *insptr++; - if ((ScriptQuotes[q] == NULL || ScriptQuoteRedefinitions[i] == NULL)) - { - OSD_Printf(CON_ERROR "%d %d null quote\n",g_errorLineNum,keyw[g_tw],q,i); - break; - } - Bstrcpy(ScriptQuotes[q],ScriptQuoteRedefinitions[i]); - continue; - } - - case CON_GETTHISPROJECTILE: - case CON_SETTHISPROJECTILE: - insptr++; - { - // syntax [gs]etplayer[].x - // - int32_t lVar1=*insptr++, lLabelID=*insptr++, lVar2=*insptr++; - - VM_AccessActiveProjectile(tw==CON_SETTHISPROJECTILE,lVar1,lLabelID,lVar2); - continue; - } - - case CON_IFRND: - VM_DoConditional(rnd(*(++insptr))); - continue; - - case CON_IFCANSHOOTTARGET: - { - int32_t j; - if (vm.g_x > 1024) - { - int16_t temphit, sclip = 768, angdif = 16; - - j = A_CheckHitSprite(vm.g_i,&temphit); - - if (A_CheckEnemySprite(vm.g_sp) && vm.g_sp->xrepeat > 56) - { - sclip = 3084; - angdif = 48; - } - - if (j == (1<<30)) - { - VM_DoConditional(1); - break; - } - if (j > sclip) - { - if (temphit >= 0 && sprite[temphit].picnum == vm.g_sp->picnum) - j = 0; - else - { - vm.g_sp->ang += angdif; - j = A_CheckHitSprite(vm.g_i,&temphit); - vm.g_sp->ang -= angdif; - if (j > sclip) - { - if (temphit >= 0 && sprite[temphit].picnum == vm.g_sp->picnum) - j = 0; - else - { - vm.g_sp->ang -= angdif; - j = A_CheckHitSprite(vm.g_i,&temphit); - vm.g_sp->ang += angdif; - if (j > 768) - { - if (temphit >= 0 && sprite[temphit].picnum == vm.g_sp->picnum) - j = 0; - else j = 1; - } - else j = 0; - } - } - else j = 0; - } - } - else j = 0; - } - else j = 1; - - VM_DoConditional(j); - } - continue; - - case CON_IFCANSEETARGET: - { - int32_t j = cansee(vm.g_sp->x,vm.g_sp->y,vm.g_sp->z-((krand()&41)<<8), - vm.g_sp->sectnum,g_player[vm.g_p].ps->pos.x,g_player[vm.g_p].ps->pos.y, - g_player[vm.g_p].ps->pos.z/*-((krand()&41)<<8)*/,sprite[g_player[vm.g_p].ps->i].sectnum); - VM_DoConditional(j); - if (j) actor[vm.g_i].timetosleep = SLEEPTIME; - } - continue; - - case CON_IFACTORNOTSTAYPUT: - VM_DoConditional(actor[vm.g_i].actorstayput == -1); - continue; - - case CON_IFCANSEE: - { - spritetype *s = &sprite[g_player[vm.g_p].ps->i]; - int32_t j; - - // select sprite for monster to target - // if holoduke is on, let them target holoduke first. - // - if (g_player[vm.g_p].ps->holoduke_on >= 0) - { - s = &sprite[g_player[vm.g_p].ps->holoduke_on]; - j = cansee(vm.g_sp->x,vm.g_sp->y,vm.g_sp->z-(krand()&((32<<8)-1)),vm.g_sp->sectnum, - s->x,s->y,s->z,s->sectnum); - - if (j == 0) - { - // they can't see player's holoduke - // check for player... - s = &sprite[g_player[vm.g_p].ps->i]; - } - } - - // can they see player, (or player's holoduke) - j = cansee(vm.g_sp->x,vm.g_sp->y,vm.g_sp->z-(krand()&((47<<8))),vm.g_sp->sectnum, - s->x,s->y,s->z-(24<<8),s->sectnum); - - if (j == 0) - { - // search around for target player - - // also modifies 'target' x&y if found.. - - j = 1; - if (A_FurthestVisiblePoint(vm.g_i,s,&actor[vm.g_i].lastvx,&actor[vm.g_i].lastvy) == -1) - j = 0; - } - else - { - // else, they did see it. - // save where we were looking... - actor[vm.g_i].lastvx = s->x; - actor[vm.g_i].lastvy = s->y; - } - - if (j && (vm.g_sp->statnum == STAT_ACTOR || vm.g_sp->statnum == STAT_STANDABLE)) - actor[vm.g_i].timetosleep = SLEEPTIME; - - VM_DoConditional(j); - continue; - } - - case CON_IFHITWEAPON: - VM_DoConditional(A_IncurDamage(vm.g_i) >= 0); - continue; - - case CON_IFSQUISHED: - VM_DoConditional(VM_CheckSquished()); - continue; - - case CON_IFDEAD: - // j = vm.g_sp->extra; - // if (vm.g_sp->picnum == APLAYER) - // j--; - VM_DoConditional(vm.g_sp->extra <= 0); - continue; - - case CON_AI: - insptr++; - //Following changed to use pointersizes - vm.g_t[5] = *insptr++; // Ai - vm.g_t[4] = *(intptr_t *)(vm.g_t[5]); // Action - if (vm.g_t[5]) vm.g_t[1] = *(((intptr_t *)vm.g_t[5])+1); // move - vm.g_sp->hitag = *(((intptr_t *)vm.g_t[5])+2); // move flags - vm.g_t[0] = vm.g_t[2] = vm.g_t[3] = 0; // count, actioncount... vm.g_t[3] = ?? - if (A_CheckEnemySprite(vm.g_sp) && vm.g_sp->extra <= 0) // hack - continue; - if (vm.g_sp->hitag&random_angle) - vm.g_sp->ang = krand()&2047; - continue; - - case CON_ACTION: - insptr++; - vm.g_t[2] = vm.g_t[3] = 0; - vm.g_t[4] = *insptr++; - continue; - - case CON_IFPDISTL: - VM_DoConditional(vm.g_x < *(++insptr)); - if (vm.g_x > MAXSLEEPDIST && actor[vm.g_i].timetosleep == 0) - actor[vm.g_i].timetosleep = SLEEPTIME; - continue; - - case CON_IFPDISTG: - VM_DoConditional(vm.g_x > *(++insptr)); - if (vm.g_x > MAXSLEEPDIST && actor[vm.g_i].timetosleep == 0) - actor[vm.g_i].timetosleep = SLEEPTIME; - continue; - - case CON_ELSE: - insptr = (intptr_t *) *(insptr+1); - continue; - - case CON_ADDSTRENGTH: - insptr++; - vm.g_sp->extra += *insptr++; - continue; - - case CON_STRENGTH: - insptr++; - vm.g_sp->extra = *insptr++; - continue; - - case CON_IFGOTWEAPONCE: - insptr++; - - if ((GametypeFlags[ud.coop]&GAMETYPE_WEAPSTAY) && (g_netServer || ud.multimode > 1)) - { - if (*insptr == 0) - { - int32_t j = 0; - for (; j < g_player[vm.g_p].ps->weapreccnt; j++) - if (g_player[vm.g_p].ps->weaprecs[j] == vm.g_sp->picnum) - break; - - VM_DoConditional(j < g_player[vm.g_p].ps->weapreccnt && vm.g_sp->owner == vm.g_i); - continue; - } - else if (g_player[vm.g_p].ps->weapreccnt < MAX_WEAPONS) - { - g_player[vm.g_p].ps->weaprecs[g_player[vm.g_p].ps->weapreccnt++] = vm.g_sp->picnum; - VM_DoConditional(vm.g_sp->owner == vm.g_i); - continue; - } - } - VM_DoConditional(0); - continue; - - case CON_GETLASTPAL: - insptr++; - if (vm.g_sp->picnum == APLAYER) - vm.g_sp->pal = g_player[vm.g_sp->yvel].ps->palookup; - else - { - if (vm.g_sp->pal == 1 && vm.g_sp->extra == 0) // hack for frozen - vm.g_sp->extra++; - vm.g_sp->pal = actor[vm.g_i].tempang; - } - actor[vm.g_i].tempang = 0; - continue; - - case CON_TOSSWEAPON: - insptr++; - P_DropWeapon(g_player[vm.g_sp->yvel].ps); - continue; - - case CON_NULLOP: - insptr++; - continue; - - case CON_MIKESND: - insptr++; - if (((unsigned)vm.g_sp->yvel >= MAXSOUNDS)) - { - OSD_Printf(CON_ERROR "Invalid sound %d\n",g_errorLineNum,keyw[g_tw],vm.g_sp->yvel); - insptr++; - continue; - } - if (!S_CheckSoundPlaying(vm.g_i,vm.g_sp->yvel)) - A_PlaySound(vm.g_sp->yvel,vm.g_i); - continue; - - case CON_PKICK: - insptr++; - - if ((g_netServer || ud.multimode > 1) && vm.g_sp->picnum == APLAYER) - { - if (g_player[otherp].ps->quick_kick == 0) - g_player[otherp].ps->quick_kick = 14; - } - else if (vm.g_sp->picnum != APLAYER && g_player[vm.g_p].ps->quick_kick == 0) - g_player[vm.g_p].ps->quick_kick = 14; - continue; - - case CON_SIZETO: - insptr++; - - { - int32_t j = (*insptr++ - vm.g_sp->xrepeat)<<1; - vm.g_sp->xrepeat += ksgn(j); - - if ((vm.g_sp->picnum == APLAYER && vm.g_sp->yrepeat < 36) || *insptr < vm.g_sp->yrepeat || - ((vm.g_sp->yrepeat*(tilesizy[vm.g_sp->picnum]+8))<<2) < (actor[vm.g_i].floorz - actor[vm.g_i].ceilingz)) - { - j = ((*insptr)-vm.g_sp->yrepeat)<<1; - if (klabs(j)) vm.g_sp->yrepeat += ksgn(j); - } - } - insptr++; - - continue; - - case CON_SIZEAT: - insptr++; - vm.g_sp->xrepeat = (uint8_t) *insptr++; - vm.g_sp->yrepeat = (uint8_t) *insptr++; - continue; - - case CON_SHOOT: - insptr++; - A_Shoot(vm.g_i,*insptr++); - continue; - - case CON_SOUNDONCE: - if (((unsigned)*(++insptr) >= MAXSOUNDS)) - { - OSD_Printf(CON_ERROR "Invalid sound %d\n",g_errorLineNum,keyw[g_tw],(int32_t)*insptr++); - continue; - } - if (!S_CheckSoundPlaying(vm.g_i,*insptr++)) - A_PlaySound(*(insptr-1),vm.g_i); - continue; - - case CON_IFACTORSOUND: - insptr++; - { - int32_t i = Gv_GetVarX(*insptr++), j = Gv_GetVarX(*insptr++); - - if (((unsigned)j >= MAXSOUNDS)) - { - OSD_Printf(CON_ERROR "Invalid sound %d\n",g_errorLineNum,keyw[g_tw],j); - insptr++; - continue; - } - insptr--; - VM_DoConditional(A_CheckSoundPlaying(i,j)); - } - continue; - - case CON_IFSOUND: - if (((unsigned)*(++insptr) >= MAXSOUNDS)) - { - OSD_Printf(CON_ERROR "Invalid sound %d\n",g_errorLineNum,keyw[g_tw],(int32_t)*insptr); - insptr++; - continue; - } - VM_DoConditional(S_CheckSoundPlaying(vm.g_i,*insptr)); - // VM_DoConditional(SoundOwner[*insptr][0].i == vm.g_i); - continue; - - case CON_STOPSOUND: - if (((unsigned)*(++insptr) >= MAXSOUNDS)) - { - OSD_Printf(CON_ERROR "Invalid sound %d\n",g_errorLineNum,keyw[g_tw],(int32_t)*insptr); - insptr++; - continue; - } - if (S_CheckSoundPlaying(vm.g_i,*insptr)) - S_StopSound((int16_t)*insptr); - insptr++; - continue; - - case CON_STOPACTORSOUND: - insptr++; - { - int32_t i = Gv_GetVarX(*insptr++), j = Gv_GetVarX(*insptr++); - - if ((j<0 || j>=MAXSOUNDS)) - { - OSD_Printf(CON_ERROR "Invalid sound %d\n",g_errorLineNum,keyw[g_tw],j); - continue; - } - - if (A_CheckSoundPlaying(i,j)) - S_StopEnvSound(j,i); - - continue; - } - - case CON_GLOBALSOUND: - if (((unsigned)*(++insptr) >= MAXSOUNDS)) - { - OSD_Printf(CON_ERROR "Invalid sound %d\n",g_errorLineNum,keyw[g_tw],(int32_t)*insptr); - insptr++; - continue; - } - if (vm.g_p == screenpeek || (GametypeFlags[ud.coop]&GAMETYPE_COOPSOUND)) - A_PlaySound(*insptr,g_player[screenpeek].ps->i); - insptr++; - continue; - - case CON_SOUND: - if ((unsigned)*(++insptr) >= MAXSOUNDS) - { - OSD_Printf(CON_ERROR "Invalid sound %d\n",g_errorLineNum,keyw[g_tw],(int32_t)*insptr); - insptr++; - continue; - } - A_PlaySound(*insptr++,vm.g_i); - continue; - - case CON_TIP: - insptr++; - g_player[vm.g_p].ps->tipincs = GAMETICSPERSEC; - continue; - - case CON_FALL: - insptr++; - vm.g_sp->xoffset = vm.g_sp->yoffset = 0; - - { - int32_t j = g_spriteGravity; - - if (G_CheckForSpaceCeiling(vm.g_sp->sectnum) || sector[vm.g_sp->sectnum].lotag == 2) - j = g_spriteGravity/6; - else if (G_CheckForSpaceFloor(vm.g_sp->sectnum)) - j = 0; - - if (!actor[vm.g_i].cgg-- || (sector[vm.g_sp->sectnum].floorstat&2)) - { - A_GetZLimits(vm.g_i); - actor[vm.g_i].cgg = 3; - } - - if (vm.g_sp->z < (actor[vm.g_i].floorz-ZOFFSET)) - { - vm.g_sp->z += vm.g_sp->zvel = min(6144, vm.g_sp->zvel+j); - - if (vm.g_sp->z > (actor[vm.g_i].floorz - ZOFFSET)) - vm.g_sp->z = (actor[vm.g_i].floorz - ZOFFSET); - continue; - } - vm.g_sp->z = actor[vm.g_i].floorz - ZOFFSET; - - if (A_CheckEnemySprite(vm.g_sp) || (vm.g_sp->picnum == APLAYER && vm.g_sp->owner >= 0)) - { - if (vm.g_sp->zvel > 3084 && vm.g_sp->extra <= 1) - { - // I'm guessing this DRONE check is from a beta version of the game - // where they crashed into the ground when killed - if (!(vm.g_sp->picnum == APLAYER && vm.g_sp->extra > 0) && vm.g_sp->pal != 1 && vm.g_sp->picnum != DRONE) - { - A_DoGuts(vm.g_i,JIBS6,15); - A_PlaySound(SQUISHED,vm.g_i); - A_Spawn(vm.g_i,BLOODPOOL); - } - actor[vm.g_i].picnum = SHOTSPARK1; - actor[vm.g_i].extra = 1; - vm.g_sp->zvel = 0; - } - else if (vm.g_sp->zvel > 2048 && sector[vm.g_sp->sectnum].lotag != 1) - { - j = vm.g_sp->sectnum; - pushmove((vec3_t *)vm.g_sp,(int16_t *)&j,128L,(4L<<8),(4L<<8),CLIPMASK0); - if ((unsigned)j < MAXSECTORS) - changespritesect(vm.g_i,j); - A_PlaySound(THUD,vm.g_i); - } - } - } - - if (vm.g_sp->z > (actor[vm.g_i].floorz - ZOFFSET)) - { - A_GetZLimits(vm.g_i); - if (actor[vm.g_i].floorz != sector[vm.g_sp->sectnum].floorz) - vm.g_sp->z = (actor[vm.g_i].floorz - ZOFFSET); - continue; - } - else if (sector[vm.g_sp->sectnum].lotag == 1) - { - switch (DynamicTileMap[vm.g_sp->picnum]) - { - default: - // fix for flying/jumping monsters getting stuck in water - { - intptr_t *moveptr = (intptr_t *)vm.g_t[1]; - if (vm.g_sp->hitag & jumptoplayer || - (actorscrptr[vm.g_sp->picnum] && - (unsigned int)(moveptr - &script[0]) <= (unsigned int)(&script[g_scriptSize] - &script[0]) && - *(moveptr+1))) - { - // OSD_Printf("%d\n",*(moveptr+1)); - break; - } - } - // OSD_Printf("hitag: %d\n",vm.g_sp->hitag); - vm.g_sp->z += (24<<8); - case OCTABRAIN__STATIC: - case COMMANDER__STATIC: - case DRONE__STATIC: - break; - } - continue; - } - vm.g_sp->zvel = 0; - continue; - - case CON_RETURN: - vm.g_flags |= VM_RETURN; - case CON_ENDA: - case CON_BREAK: - case CON_ENDS: - return 1; - case CON_RIGHTBRACE: - insptr++; - return 1; - case CON_ADDAMMO: - if (((unsigned)*(++insptr) >= MAX_WEAPONS)) - { - OSD_Printf(CON_ERROR "Invalid weapon ID %d\n",g_errorLineNum,keyw[g_tw],(int32_t)*insptr); - insptr += 2; break; - } - if (g_player[vm.g_p].ps->ammo_amount[*insptr] >= g_player[vm.g_p].ps->max_ammo_amount[*insptr]) - { - vm.g_flags |= VM_NOEXECUTE; - break; - } - P_AddAmmo(*insptr, g_player[vm.g_p].ps, *(insptr+1)); - if (g_player[vm.g_p].ps->curr_weapon == KNEE_WEAPON && g_player[vm.g_p].ps->gotweapon & (1 << *insptr)) - { - if (!(g_player[vm.g_p].ps->weaponswitch & 1)) - P_AddWeaponNoSwitch(g_player[vm.g_p].ps, *insptr); - else P_AddWeapon(g_player[vm.g_p].ps, *insptr); - } - insptr += 2; - continue; - - case CON_MONEY: - insptr++; - A_SpawnMultiple(vm.g_i, MONEY, *insptr++); - continue; - - case CON_MAIL: - insptr++; - A_SpawnMultiple(vm.g_i, MAIL, *insptr++); - continue; - - case CON_SLEEPTIME: - insptr++; - actor[vm.g_i].timetosleep = (int16_t)*insptr++; - continue; - - case CON_PAPER: - insptr++; - A_SpawnMultiple(vm.g_i, PAPER, *insptr++); - continue; - - case CON_ADDKILLS: - insptr++; - g_player[vm.g_p].ps->actors_killed += *insptr++; - actor[vm.g_i].actorstayput = -1; - continue; - - case CON_LOTSOFGLASS: - insptr++; - A_SpawnGlass(vm.g_i,*insptr++); - continue; - - case CON_KILLIT: - insptr++; - vm.g_flags |= VM_KILL; - continue; - - case CON_ADDWEAPON: - if (((unsigned)*(++insptr) >= MAX_WEAPONS)) - { - OSD_Printf(CON_ERROR "Invalid weapon ID %d\n",g_errorLineNum,keyw[g_tw],(int32_t)*insptr); - insptr += 2; - continue; - } - if ((g_player[vm.g_p].ps->gotweapon & (1 << *insptr)) == 0) - { - if (!(g_player[vm.g_p].ps->weaponswitch & 1)) P_AddWeaponNoSwitch(g_player[vm.g_p].ps, *insptr); - else P_AddWeapon(g_player[vm.g_p].ps, *insptr); - } - else if (g_player[vm.g_p].ps->ammo_amount[*insptr] >= g_player[vm.g_p].ps->max_ammo_amount[*insptr]) - { - vm.g_flags |= VM_NOEXECUTE; - continue; - } - P_AddAmmo(*insptr, g_player[vm.g_p].ps, *(insptr+1)); - if (g_player[vm.g_p].ps->curr_weapon == KNEE_WEAPON && g_player[vm.g_p].ps->gotweapon & (1 << *insptr)) - { - if (!(g_player[vm.g_p].ps->weaponswitch & 1)) P_AddWeaponNoSwitch(g_player[vm.g_p].ps, *insptr); - else P_AddWeapon(g_player[vm.g_p].ps, *insptr); - } - insptr += 2; - continue; - - case CON_DEBUG: - insptr++; - initprintf("%"PRIdPTR"\n",*insptr++); - continue; - - case CON_ENDOFGAME: - insptr++; - g_player[vm.g_p].ps->timebeforeexit = *insptr++; - g_player[vm.g_p].ps->customexitsound = -1; - ud.eog = 1; - continue; - - case CON_ADDPHEALTH: - insptr++; - - { - int32_t j; - - if (g_player[vm.g_p].ps->newowner >= 0) - { - g_player[vm.g_p].ps->newowner = -1; - g_player[vm.g_p].ps->pos.x = g_player[vm.g_p].ps->opos.x; - g_player[vm.g_p].ps->pos.y = g_player[vm.g_p].ps->opos.y; - g_player[vm.g_p].ps->pos.z = g_player[vm.g_p].ps->opos.z; - g_player[vm.g_p].ps->ang = g_player[vm.g_p].ps->oang; - updatesector(g_player[vm.g_p].ps->pos.x,g_player[vm.g_p].ps->pos.y,&g_player[vm.g_p].ps->cursectnum); - P_UpdateScreenPal(g_player[vm.g_p].ps); - - j = headspritestat[STAT_ACTOR]; - while (j >= 0) - { - if (sprite[j].picnum==CAMERA1) - sprite[j].yvel = 0; - j = nextspritestat[j]; - } - } - - j = sprite[g_player[vm.g_p].ps->i].extra; - - if (vm.g_sp->picnum != ATOMICHEALTH) - { - if (j > g_player[vm.g_p].ps->max_player_health && *insptr > 0) - { - insptr++; - continue; - } - else - { - if (j > 0) - j += *insptr; - if (j > g_player[vm.g_p].ps->max_player_health && *insptr > 0) - j = g_player[vm.g_p].ps->max_player_health; - } - } - else - { - if (j > 0) - j += *insptr; - if (j > (g_player[vm.g_p].ps->max_player_health<<1)) - j = (g_player[vm.g_p].ps->max_player_health<<1); - } - - if (j < 0) j = 0; - - if (ud.god == 0) - { - if (*insptr > 0) - { - if ((j - *insptr) < (g_player[vm.g_p].ps->max_player_health>>2) && - j >= (g_player[vm.g_p].ps->max_player_health>>2)) - A_PlaySound(DUKE_GOTHEALTHATLOW,g_player[vm.g_p].ps->i); - - g_player[vm.g_p].ps->last_extra = j; - } - - sprite[g_player[vm.g_p].ps->i].extra = j; - } - } - - insptr++; - continue; - - case CON_STATE: - { - intptr_t *tempscrptr=insptr+2; - - insptr = (intptr_t *) *(insptr+1); - VM_Execute(0); - insptr = tempscrptr; - } - continue; - - case CON_LEFTBRACE: - insptr++; - VM_Execute(0); - continue; - - case CON_MOVE: - insptr++; - vm.g_t[0]=0; - vm.g_t[1] = *insptr++; - vm.g_sp->hitag = *insptr++; - if (A_CheckEnemySprite(vm.g_sp) && vm.g_sp->extra <= 0) // hack - continue; - if (vm.g_sp->hitag&random_angle) - vm.g_sp->ang = krand()&2047; - continue; - - case CON_ADDWEAPONVAR: - insptr++; - if ((g_player[vm.g_p].ps->gotweapon & (1 << Gv_GetVarX(*(insptr)))) == 0) - { - if (!(g_player[vm.g_p].ps->weaponswitch & 1)) P_AddWeaponNoSwitch(g_player[vm.g_p].ps, Gv_GetVarX(*(insptr))); - else P_AddWeapon(g_player[vm.g_p].ps, Gv_GetVarX(*(insptr))); - } - else if (g_player[vm.g_p].ps->ammo_amount[Gv_GetVarX(*(insptr))] >= g_player[vm.g_p].ps->max_ammo_amount[Gv_GetVarX(*(insptr))]) - { - vm.g_flags |= VM_NOEXECUTE; - continue; - } - P_AddAmmo(Gv_GetVarX(*(insptr)), g_player[vm.g_p].ps, Gv_GetVarX(*(insptr+1))); - if (g_player[vm.g_p].ps->curr_weapon == KNEE_WEAPON && (g_player[vm.g_p].ps->gotweapon & (1 << Gv_GetVarX(*(insptr))))) - { - if (!(g_player[vm.g_p].ps->weaponswitch & 1)) P_AddWeaponNoSwitch(g_player[vm.g_p].ps, Gv_GetVarX(*(insptr))); - else P_AddWeapon(g_player[vm.g_p].ps, Gv_GetVarX(*(insptr))); - } - insptr += 2; - continue; - - case CON_ACTIVATEBYSECTOR: - case CON_OPERATESECTORS: - case CON_OPERATEACTIVATORS: - case CON_SETASPECT: - case CON_SSP: - insptr++; - { - int32_t var1 = Gv_GetVarX(*insptr++), var2; - if (tw == CON_OPERATEACTIVATORS && *insptr == g_iThisActorID) - { - var2 = vm.g_p; - insptr++; - } - else var2 = Gv_GetVarX(*insptr++); - - switch (tw) - { - case CON_ACTIVATEBYSECTOR: - if ((var1<0 || var1>=numsectors)) {OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],var1); break;} - G_ActivateBySector(var1, var2); - break; - case CON_OPERATESECTORS: - if ((var1<0 || var1>=numsectors)) {OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],var1); break;} - G_OperateSectors(var1, var2); - break; - case CON_OPERATEACTIVATORS: - if ((var2<0 || var2>=playerswhenstarted)) {OSD_Printf(CON_ERROR "Invalid player %d\n",g_errorLineNum,keyw[g_tw],var2); break;} - G_OperateActivators(var1, var2); - break; - case CON_SETASPECT: - setaspect(var1, var2); - break; - case CON_SSP: - if ((unsigned)var1 >= MAXSPRITES) { OSD_Printf(CON_ERROR "Invalid sprite %d\n",g_errorLineNum,keyw[g_tw],var1); break;} - A_SetSprite(var1, var2); - break; - } - continue; - } - - case CON_CANSEESPR: - insptr++; - { - int32_t lVar1 = Gv_GetVarX(*insptr++), lVar2 = Gv_GetVarX(*insptr++), res; - - if ((unsigned)lVar1 >= MAXSPRITES || (unsigned)lVar2 >= MAXSPRITES) - { - OSD_Printf(CON_ERROR "Invalid sprite %d\n",g_errorLineNum,keyw[g_tw],(unsigned)lVar1 >= MAXSPRITES ? lVar1 : lVar2); - res=0; - } - else res=cansee(sprite[lVar1].x,sprite[lVar1].y,sprite[lVar1].z,sprite[lVar1].sectnum, - sprite[lVar2].x,sprite[lVar2].y,sprite[lVar2].z,sprite[lVar2].sectnum); - - Gv_SetVarX(*insptr++, res); - continue; - } - - case CON_OPERATERESPAWNS: - case CON_OPERATEMASTERSWITCHES: - case CON_CHECKACTIVATORMOTION: - insptr++; - { - int32_t var1 = Gv_GetVarX(*insptr++); - - switch (tw) - { - case CON_OPERATERESPAWNS: - G_OperateRespawns(var1); - break; - case CON_OPERATEMASTERSWITCHES: - G_OperateMasterSwitches(var1); - break; - case CON_CHECKACTIVATORMOTION: - Gv_SetVarX(g_iReturnVarID, G_CheckActivatorMotion(var1)); - break; - } - continue; - } - - case CON_INSERTSPRITEQ: - insptr++; - A_AddToDeleteQueue(vm.g_i); - continue; - - case CON_QSTRLEN: - insptr++; - { - int32_t i=*insptr++; - int32_t j=Gv_GetVarX(*insptr++); - if ((ScriptQuotes[j] == NULL)) - { - OSD_Printf(CON_ERROR "null quote %d\n",g_errorLineNum,keyw[g_tw],j); - Gv_SetVarX(i,-1); - continue; - } - Gv_SetVarX(i,Bstrlen(ScriptQuotes[j])); - continue; - } - - case CON_HEADSPRITESTAT: - insptr++; - { - int32_t i=*insptr++; - int32_t j=Gv_GetVarX(*insptr++); - if ((unsigned)j > MAXSTATUS) - { - OSD_Printf(CON_ERROR "invalid status list %d\n",g_errorLineNum,keyw[g_tw],j); - continue; - } - Gv_SetVarX(i,headspritestat[j]); - continue; - } - - case CON_PREVSPRITESTAT: - insptr++; - { - int32_t i=*insptr++; - int32_t j=Gv_GetVarX(*insptr++); - if ((unsigned)j >= MAXSPRITES) - { - OSD_Printf(CON_ERROR "invalid sprite ID %d\n",g_errorLineNum,keyw[g_tw],j); - continue; - } - Gv_SetVarX(i,prevspritestat[j]); - continue; - } - - case CON_NEXTSPRITESTAT: - insptr++; - { - int32_t i=*insptr++; - int32_t j=Gv_GetVarX(*insptr++); - if ((unsigned)j >= MAXSPRITES) - { - OSD_Printf(CON_ERROR "invalid sprite ID %d\n",g_errorLineNum,keyw[g_tw],j); - continue; - } - Gv_SetVarX(i,nextspritestat[j]); - continue; - } - - case CON_HEADSPRITESECT: - insptr++; - { - int32_t i=*insptr++; - int32_t j=Gv_GetVarX(*insptr++); - if ((unsigned)j >= (unsigned)numsectors) - { - OSD_Printf(CON_ERROR "invalid sector %d\n",g_errorLineNum,keyw[g_tw],j); - continue; - } - Gv_SetVarX(i,headspritesect[j]); - continue; - } - - case CON_PREVSPRITESECT: - insptr++; - { - int32_t i=*insptr++; - int32_t j=Gv_GetVarX(*insptr++); - if ((unsigned)j >= MAXSPRITES) - { - OSD_Printf(CON_ERROR "invalid sprite ID %d\n",g_errorLineNum,keyw[g_tw],j); - continue; - } - Gv_SetVarX(i,prevspritesect[j]); - continue; - } - - case CON_NEXTSPRITESECT: - insptr++; - { - int32_t i=*insptr++; - int32_t j=Gv_GetVarX(*insptr++); - if ((unsigned)j >= MAXSPRITES) - { - OSD_Printf(CON_ERROR "invalid sprite ID %d\n",g_errorLineNum,keyw[g_tw],j); - continue; - } - Gv_SetVarX(i,nextspritesect[j]); - continue; - } - - case CON_GETKEYNAME: - insptr++; - { - int32_t i = Gv_GetVarX(*insptr++), - f=Gv_GetVarX(*insptr++); - int32_t j=Gv_GetVarX(*insptr++); - if ((i<0 || i>=MAXQUOTES)) - OSD_Printf(CON_ERROR "invalid quote ID %d\n",g_errorLineNum,keyw[g_tw],i); - else if ((ScriptQuotes[i] == NULL)) - OSD_Printf(CON_ERROR "null quote %d\n",g_errorLineNum,keyw[g_tw],i); - else if ((f<0 || f>=NUMGAMEFUNCTIONS)) - OSD_Printf(CON_ERROR "invalid function %d\n",g_errorLineNum,keyw[g_tw],f); - else - { - if (j<2) - Bstrcpy(tempbuf,KB_ScanCodeToString(ud.config.KeyboardKeys[f][j])); - else - { - Bstrcpy(tempbuf,KB_ScanCodeToString(ud.config.KeyboardKeys[f][0])); - if (!*tempbuf) - Bstrcpy(tempbuf,KB_ScanCodeToString(ud.config.KeyboardKeys[f][1])); - } - } - - if (*tempbuf) - Bstrcpy(ScriptQuotes[i],tempbuf); - continue; - } - case CON_QSUBSTR: - insptr++; - { - int32_t q1 = Gv_GetVarX(*insptr++); - int32_t q2 = Gv_GetVarX(*insptr++); - int32_t st = Gv_GetVarX(*insptr++); - int32_t ln = Gv_GetVarX(*insptr++); - - if ((q1<0 || q1>=MAXQUOTES)) - { - OSD_Printf(CON_ERROR "invalid quote ID %d\n",g_errorLineNum,keyw[g_tw],q1); - continue; - } - if ((ScriptQuotes[q1] == NULL)) - { - OSD_Printf(CON_ERROR "null quote %d\n",g_errorLineNum,keyw[g_tw],q1); - continue; - } - if ((q2<0 || q2>=MAXQUOTES)) - { - OSD_Printf(CON_ERROR "invalid quote ID %d\n",g_errorLineNum,keyw[g_tw],q2); - continue; - } - if ((ScriptQuotes[q2] == NULL)) - { - OSD_Printf(CON_ERROR "null quote %d\n",g_errorLineNum,keyw[g_tw],q2); - continue; - } - - { - char *s1 = ScriptQuotes[q1]; - char *s2 = ScriptQuotes[q2]; - - while (*s2 && st--) s2++; - while ((*s1 = *s2) && ln--) - { - s1++; - s2++; - } - *s1=0; - } - continue; - } - - case CON_GETPNAME: - case CON_QSTRNCAT: - case CON_QSTRCAT: - case CON_QSTRCPY: - case CON_QGETSYSSTR: - case CON_CHANGESPRITESECT: - insptr++; - { - int32_t i = Gv_GetVarX(*insptr++), j; - if (tw == CON_GETPNAME && *insptr == g_iThisActorID) - { - j = vm.g_p; - insptr++; - } - else j = Gv_GetVarX(*insptr++); - - switch (tw) - { - case CON_GETPNAME: - if ((ScriptQuotes[i] == NULL)) - { - OSD_Printf(CON_ERROR "null quote %d\n",g_errorLineNum,keyw[g_tw],i); - break; - } - if (g_player[j].user_name[0]) - Bstrcpy(ScriptQuotes[i],g_player[j].user_name); - else Bsprintf(ScriptQuotes[i],"%d",j); - break; - case CON_QGETSYSSTR: - if ((ScriptQuotes[i] == NULL)) - { - OSD_Printf(CON_ERROR "null quote %d %d\n",g_errorLineNum,keyw[g_tw],i,j); - break; - } - switch (j) - { - case STR_MAPNAME: - Bstrcpy(ScriptQuotes[i],MapInfo[ud.volume_number*MAXLEVELS + ud.level_number].name); - break; - case STR_MAPFILENAME: - Bstrcpy(ScriptQuotes[i],MapInfo[ud.volume_number*MAXLEVELS + ud.level_number].filename); - break; - case STR_PLAYERNAME: - Bstrcpy(ScriptQuotes[i],g_player[vm.g_p].user_name); - break; - case STR_VERSION: - Bsprintf(tempbuf,HEAD2 " %s",s_buildRev); - Bstrcpy(ScriptQuotes[i],tempbuf); - break; - case STR_GAMETYPE: - Bstrcpy(ScriptQuotes[i],GametypeNames[ud.coop]); - break; - case STR_VOLUMENAME: - Bstrcpy(ScriptQuotes[i],EpisodeNames[ud.volume_number]); - break; - default: - OSD_Printf(CON_ERROR "unknown str ID %d %d\n",g_errorLineNum,keyw[g_tw],i,j); - } - break; - case CON_QSTRCAT: - if ((ScriptQuotes[i] == NULL || ScriptQuotes[j] == NULL)) goto nullquote; - Bstrncat(ScriptQuotes[i],ScriptQuotes[j],(MAXQUOTELEN-1)-Bstrlen(ScriptQuotes[i])); - break; - case CON_QSTRNCAT: - if ((ScriptQuotes[i] == NULL || ScriptQuotes[j] == NULL)) goto nullquote; - Bstrncat(ScriptQuotes[i],ScriptQuotes[j],Gv_GetVarX(*insptr++)); - break; - case CON_QSTRCPY: - if ((ScriptQuotes[i] == NULL || ScriptQuotes[j] == NULL)) goto nullquote; - Bstrcpy(ScriptQuotes[i],ScriptQuotes[j]); - break; - case CON_CHANGESPRITESECT: - if ((unsigned)i >= MAXSPRITES) - { - OSD_Printf(CON_ERROR "Invalid sprite %d\n",g_errorLineNum,keyw[g_tw],i); - break; - } - if ((unsigned)j >= (unsigned)numsectors) - { - OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],j); - break; - } - changespritesect(i,j); - break; - default: -nullquote: - OSD_Printf(CON_ERROR "null quote %d\n",g_errorLineNum,keyw[g_tw],ScriptQuotes[i] ? j : i); - break; - } - continue; - } - - case CON_CHANGESPRITESTAT: - insptr++; - { - int32_t i = Gv_GetVarX(*insptr++); - int32_t j = Gv_GetVarX(*insptr++); - - if ((unsigned)i >= MAXSPRITES) - { - OSD_Printf(CON_ERROR "Invalid sprite: %d\n",g_errorLineNum,keyw[g_tw],i); - continue; - } - if ((unsigned)j >= MAXSTATUS) - { - OSD_Printf(CON_ERROR "Invalid statnum: %d\n",g_errorLineNum,keyw[g_tw],j); - continue; - } - if (sprite[i].statnum == j) continue; - - /* initialize actor data when changing to an actor statnum because there's usually - garbage left over from being handled as a hard coded object */ - - if (sprite[i].statnum > STAT_ZOMBIEACTOR && (j == STAT_ACTOR || j == STAT_ZOMBIEACTOR)) - { - actor[i].lastvx = 0; - actor[i].lastvy = 0; - actor[i].timetosleep = 0; - actor[i].cgg = 0; - actor[i].movflag = 0; - actor[i].tempang = 0; - actor[i].dispicnum = 0; - T1=T2=T3=T4=T5=T6=T7=T8=T9=0; - actor[i].flags = 0; - sprite[i].hitag = 0; - - // pointers - if (actorscrptr[sprite[i].picnum]) - { - T5 = *(actorscrptr[sprite[i].picnum]+1); - T2 = *(actorscrptr[sprite[i].picnum]+2); - sprite[i].hitag = *(actorscrptr[sprite[i].picnum]+3); - } - } - changespritestat(i,j); - continue; - } - - case CON_STARTLEVEL: - insptr++; // skip command - { - // from 'level' cheat in game.c (about line 6250) - int32_t volnume=Gv_GetVarX(*insptr++), levnume=Gv_GetVarX(*insptr++); - - if ((volnume > MAXVOLUMES-1 || volnume < 0)) - { - OSD_Printf(CON_ERROR "invalid volume (%d)\n",g_errorLineNum,keyw[g_tw],volnume); - continue; - } - - if ((levnume > MAXLEVELS-1 || levnume < 0)) - { - OSD_Printf(CON_ERROR "invalid level (%d)\n",g_errorLineNum,keyw[g_tw],levnume); - continue; - } - - ud.m_volume_number = ud.volume_number = volnume; - ud.m_level_number = ud.level_number = levnume; - if (numplayers > 1 && g_netServer) - Net_NewGame(volnume,levnume); - else - { - g_player[myconnectindex].ps->gm |= MODE_EOL; - ud.display_bonus_screen = 0; - } // MODE_RESTART; - - continue; - } - - case CON_MYOSX: - case CON_MYOSPALX: - case CON_MYOS: - case CON_MYOSPAL: - insptr++; - { - int32_t x=Gv_GetVarX(*insptr++), y=Gv_GetVarX(*insptr++), tilenum=Gv_GetVarX(*insptr++); - int32_t shade=Gv_GetVarX(*insptr++), orientation=Gv_GetVarX(*insptr++); - - switch (tw) - { - case CON_MYOS: - G_DrawTile(x,y,tilenum,shade,orientation); - break; - case CON_MYOSPAL: - { - int32_t pal=Gv_GetVarX(*insptr++); - G_DrawTilePal(x,y,tilenum,shade,orientation,pal); - break; - } - case CON_MYOSX: - G_DrawTileSmall(x,y,tilenum,shade,orientation); - break; - case CON_MYOSPALX: - { - int32_t pal=Gv_GetVarX(*insptr++); - G_DrawTilePalSmall(x,y,tilenum,shade,orientation,pal); - break; - } - } - continue; - } - - case CON_SWITCH: - insptr++; // p-code - { - // command format: - // variable ID to check - // script offset to 'end' - // count of case statements - // script offset to default case (null if none) - // For each case: value, ptr to code - //AddLog("Processing Switch..."); - int32_t lValue=Gv_GetVarX(*insptr++), lEnd=*insptr++, lCases=*insptr++; - intptr_t *lpDefault=insptr++, *lpCases=insptr, *lTempInsPtr; - int32_t bMatched=0, lCheckCase; - int32_t left,right; - insptr += lCases*2; - lTempInsPtr=insptr; - //Bsprintf(g_szBuf,"lEnd= %d *lpDefault=%d",lEnd,*lpDefault); - //AddLog(g_szBuf); - - //Bsprintf(g_szBuf,"Checking %d cases for %d",lCases, lValue); - //AddLog(g_szBuf); - left=0; right=lCases-1; - while (!bMatched) - { - //Bsprintf(g_szBuf,"Checking #%d Value= %d",lCheckCase, lpCases[lCheckCase*2]); - //AddLog(g_szBuf); - lCheckCase=(left+right)/2; - // initprintf("(%2d..%2d..%2d) [%2d..%2d..%2d]==%2d\n",left,lCheckCase,right,lpCases[left*2],lpCases[lCheckCase*2],lpCases[right*2],lValue); - if (lpCases[lCheckCase*2] > lValue) - right=lCheckCase-1; - else if (lpCases[lCheckCase*2] < lValue) - left =lCheckCase+1; - else if (lpCases[lCheckCase*2] == lValue) - { - //AddLog("Found Case Match"); - //Bsprintf(g_szBuf,"insptr=%d. lCheckCase=%d, offset=%d, &script[0]=%d", - // (int32_t)insptr,(int32_t)lCheckCase,lpCases[lCheckCase*2+1],(int32_t)&script[0]); - //AddLog(g_szBuf); - // fake a 2-d Array - insptr=(intptr_t *)(lpCases[lCheckCase*2+1] + &script[0]); - //Bsprintf(g_szBuf,"insptr=%d. ", (int32_t)insptr); - //AddLog(g_szBuf); - VM_Execute(0); - //AddLog("Done Executing Case"); - bMatched=1; - } - if (right-left < 0) - break; - } - if (!bMatched) - { - if (*lpDefault) - { - //AddLog("No Matching Case: Using Default"); - insptr=(intptr_t *)(*lpDefault + &script[0]); - VM_Execute(0); - } - else - { - //AddLog("No Matching Case: No Default to use"); - } - } - insptr=(intptr_t *)(lEnd + (intptr_t)&script[0]); - //Bsprintf(g_szBuf,"insptr=%d. ", (int32_t)insptr); - //AddLog(g_szBuf); - //AddLog("Done Processing Switch"); - - continue; - } - - case CON_ENDSWITCH: - case CON_ENDEVENT: - insptr++; - return 1; - - case CON_DISPLAYRAND: - insptr++; - Gv_SetVarX(*insptr++, rand()); - continue; - - case CON_DRAGPOINT: - insptr++; - { - int32_t wallnum = Gv_GetVarX(*insptr++), newx = Gv_GetVarX(*insptr++), newy = Gv_GetVarX(*insptr++); - - if ((wallnum<0 || wallnum>=numwalls)) - { - OSD_Printf(CON_ERROR "Invalid wall %d\n",g_errorLineNum,keyw[g_tw],wallnum); - continue; - } - dragpoint(wallnum,newx,newy); - continue; - } - - case CON_LDIST: - insptr++; - { - int32_t distvar = *insptr++, xvar = Gv_GetVarX(*insptr++), yvar = Gv_GetVarX(*insptr++); - - if ((unsigned)xvar >= MAXSPRITES || (unsigned)yvar >= MAXSPRITES) - { - OSD_Printf(CON_ERROR "invalid sprite\n",g_errorLineNum,keyw[g_tw]); - continue; - } - - Gv_SetVarX(distvar, ldist(&sprite[xvar],&sprite[yvar])); - continue; - } - - case CON_DIST: - insptr++; - { - int32_t distvar = *insptr++, xvar = Gv_GetVarX(*insptr++), yvar = Gv_GetVarX(*insptr++); - - if ((unsigned)xvar >= MAXSPRITES || (unsigned)yvar >= MAXSPRITES) - { - OSD_Printf(CON_ERROR "invalid sprite\n",g_errorLineNum,keyw[g_tw]); - continue; - } - - Gv_SetVarX(distvar, dist(&sprite[xvar],&sprite[yvar])); - continue; - } - - case CON_GETANGLE: - insptr++; - { - int32_t angvar = *insptr++; - int32_t xvar = Gv_GetVarX(*insptr++); - int32_t yvar = Gv_GetVarX(*insptr++); - - Gv_SetVarX(angvar, getangle(xvar,yvar)); - continue; - } - - case CON_GETINCANGLE: - insptr++; - { - int32_t angvar = *insptr++; - int32_t xvar = Gv_GetVarX(*insptr++); - int32_t yvar = Gv_GetVarX(*insptr++); - - Gv_SetVarX(angvar, G_GetAngleDelta(xvar,yvar)); - continue; - } - - case CON_MULSCALE: - insptr++; - { - int32_t var1 = *insptr++, var2 = Gv_GetVarX(*insptr++); - int32_t var3 = Gv_GetVarX(*insptr++), var4 = Gv_GetVarX(*insptr++); - - Gv_SetVarX(var1, mulscale(var2, var3, var4)); - continue; - } - - case CON_INITTIMER: - insptr++; - { - int32_t j = Gv_GetVarX(*insptr++); - - if (g_timerTicsPerSecond == j) - continue; - - uninittimer(); - inittimer((g_timerTicsPerSecond = j)); - } - continue; - - case CON_TIME: - insptr += 2; - continue; - - case CON_ESPAWNVAR: - case CON_EQSPAWNVAR: - case CON_QSPAWNVAR: - insptr++; - { - int32_t lIn=Gv_GetVarX(*insptr++); - int32_t j; - if ((unsigned)vm.g_sp->sectnum >= (unsigned)numsectors) - { - OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],vm.g_sp->sectnum); - continue; - } - j = A_Spawn(vm.g_i, lIn); - switch (tw) - { - case CON_EQSPAWNVAR: - if (j != -1) - A_AddToDeleteQueue(j); - case CON_ESPAWNVAR: - aGameVars[g_iReturnVarID].val.lValue = j; - break; - case CON_QSPAWNVAR: - if (j != -1) - A_AddToDeleteQueue(j); - break; - } - continue; - } - - case CON_ESPAWN: - case CON_EQSPAWN: - case CON_QSPAWN: - insptr++; - - { - int32_t j; - - if ((unsigned)vm.g_sp->sectnum >= (unsigned)numsectors) - { - OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],vm.g_sp->sectnum); - insptr++; - continue; - } - - j = A_Spawn(vm.g_i,*insptr++); - - switch (tw) - { - case CON_EQSPAWN: - if (j != -1) - A_AddToDeleteQueue(j); - case CON_ESPAWN: - aGameVars[g_iReturnVarID].val.lValue = j; - break; - case CON_QSPAWN: - if (j != -1) - A_AddToDeleteQueue(j); - break; - } - } - continue; - - case CON_ESHOOT: - case CON_EZSHOOT: - case CON_ZSHOOT: - insptr++; - - { - int32_t j; - - if (tw != CON_ESHOOT) - { - actor[vm.g_i].shootzvel = Gv_GetVarX(*insptr++); - if (actor[vm.g_i].shootzvel == 0) - actor[vm.g_i].shootzvel = 1; - } - - if ((unsigned)vm.g_sp->sectnum >= (unsigned)numsectors) - { - OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],vm.g_sp->sectnum); - insptr++; - actor[vm.g_i].shootzvel=0; - continue; - } - - j = A_Shoot(vm.g_i,*insptr++); - - if (tw != CON_ZSHOOT) - aGameVars[g_iReturnVarID].val.lValue = j; - - actor[vm.g_i].shootzvel=0; - } - continue; - - case CON_SHOOTVAR: - case CON_ESHOOTVAR: - insptr++; - { - int32_t j=Gv_GetVarX(*insptr++); - - if ((unsigned)vm.g_sp->sectnum >= (unsigned)numsectors) - { - OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],vm.g_sp->sectnum); - actor[vm.g_i].shootzvel=0; - continue; - } - - j = A_Shoot(vm.g_i, j); - if (tw == CON_ESHOOTVAR) - aGameVars[g_iReturnVarID].val.lValue = j; - actor[vm.g_i].shootzvel=0; - continue; - } - - case CON_EZSHOOTVAR: - case CON_ZSHOOTVAR: - insptr++; - - actor[vm.g_i].shootzvel = Gv_GetVarX(*insptr++); - - if (actor[vm.g_i].shootzvel == 0) - actor[vm.g_i].shootzvel = 1; - - { - int32_t j=Gv_GetVarX(*insptr++); - - if ((unsigned)vm.g_sp->sectnum >= (unsigned)numsectors) - { - OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],vm.g_sp->sectnum); - actor[vm.g_i].shootzvel=0; - continue; - } - - j = A_Shoot(vm.g_i, j); - if (tw == CON_EZSHOOTVAR) - aGameVars[g_iReturnVarID].val.lValue = j; - actor[vm.g_i].shootzvel=0; - continue; - } - - case CON_CMENU: - insptr++; - ChangeToMenu(Gv_GetVarX(*insptr++)); - continue; - - case CON_SOUNDVAR: - case CON_STOPSOUNDVAR: - case CON_SOUNDONCEVAR: - case CON_GLOBALSOUNDVAR: - insptr++; - { - int32_t j=Gv_GetVarX(*insptr++); - - if (j<0 || j>=MAXSOUNDS) - { - OSD_Printf(CON_ERROR "Invalid sound %d\n",g_errorLineNum,keyw[g_tw],j); - continue; - } - - switch (tw) - { - case CON_SOUNDONCEVAR: - if (!S_CheckSoundPlaying(vm.g_i,j)) - A_PlaySound((int16_t)j,vm.g_i); - continue; - case CON_GLOBALSOUNDVAR: - A_PlaySound((int16_t)j,g_player[screenpeek].ps->i); - continue; - case CON_STOPSOUNDVAR: - if (S_CheckSoundPlaying(vm.g_i,j)) - S_StopSound((int16_t)j); - continue; - case CON_SOUNDVAR: - A_PlaySound((int16_t)j,vm.g_i); - continue; - } - } - continue; - - case CON_GUNIQHUDID: - insptr++; - { - int32_t j=Gv_GetVarX(*insptr++); - if (j >= 0 && j < MAXUNIQHUDID-1) - guniqhudid = j; - else - OSD_Printf(CON_ERROR "Invalid ID %d\n",g_errorLineNum,keyw[g_tw],j); - continue; - } - - case CON_SAVEGAMEVAR: - case CON_READGAMEVAR: - { - int32_t i=0; - insptr++; - if (ud.config.scripthandle < 0) - { - insptr++; - continue; - } - switch (tw) - { - case CON_SAVEGAMEVAR: - i=Gv_GetVarX(*insptr); - SCRIPT_PutNumber(ud.config.scripthandle, "Gamevars",aGameVars[*insptr++].szLabel,i,FALSE,FALSE); - break; - case CON_READGAMEVAR: - SCRIPT_GetNumber(ud.config.scripthandle, "Gamevars",aGameVars[*insptr].szLabel,&i); - Gv_SetVarX(*insptr++, i); - break; - } - continue; - } - - case CON_SHOWVIEW: - insptr++; - { - int32_t x=Gv_GetVarX(*insptr++); - int32_t y=Gv_GetVarX(*insptr++); - int32_t z=Gv_GetVarX(*insptr++); - int32_t a=Gv_GetVarX(*insptr++); - int32_t horiz=Gv_GetVarX(*insptr++); - int32_t sect=Gv_GetVarX(*insptr++); - int32_t x1=scale(Gv_GetVarX(*insptr++),xdim,320); - int32_t y1=scale(Gv_GetVarX(*insptr++),ydim,200); - int32_t x2=scale(Gv_GetVarX(*insptr++),xdim,320); - int32_t y2=scale(Gv_GetVarX(*insptr++),ydim,200); - int32_t smoothratio = min(max((totalclock - ototalclock) * (65536 / 4),0),65536); -#ifdef USE_OPENGL - int32_t j; -#endif - - if (g_screenCapture) continue; - - if (x1 > x2) swaplong(&x1,&x2); - if (y1 > y2) swaplong(&y1,&y2); - - if ((x1 < 0 || y1 < 0 || x2 > xdim-1 || y2 > ydim-1 || x2-x1 < 2 || y2-y1 < 2)) - { - OSD_Printf(CON_ERROR "incorrect coordinates\n",g_errorLineNum,keyw[g_tw]); - continue; - } - if ((sect<0 || sect>=numsectors)) - { - OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],sect); - continue; - } - -#ifdef USE_OPENGL - j = glprojectionhacks; - glprojectionhacks = 0; -#endif - setview(x1,y1,x2,y2); - -#if 0 - if (!ud.pause_on && ((ud.show_help == 0 && (!net_server && ud.multimode < 2) && !(g_player[myconnectindex].ps->gm&MODE_MENU)) - || (net_server || ud.multimode > 1) || ud.recstat == 2)) - smoothratio = min(max((totalclock-ototalclock)*(65536L/TICSPERFRAME),0),65536); -#endif - G_DoInterpolations(smoothratio); - - if (((gotpic[MIRROR>>3]&(1<<(MIRROR&7))) > 0) -#if defined(POLYMER) && defined(USE_OPENGL) - && (getrendermode() != 4) -#endif - ) - { - int32_t j, i = 0, k, dst = 0x7fffffff; - - for (k=g_mirrorCount-1; k>=0; k--) - { - j = klabs(wall[g_mirrorWall[k]].x-x); - j += klabs(wall[g_mirrorWall[k]].y-y); - if (j < dst) dst = j, i = k; - } - - if (wall[g_mirrorWall[i]].overpicnum == MIRROR) - { - int32_t tposx,tposy; - int16_t tang; - - preparemirror(x,y,z,a,horiz,g_mirrorWall[i],g_mirrorSector[i],&tposx,&tposy,&tang); - - j = visibility; - visibility = (j>>1) + (j>>2); - - drawrooms(tposx,tposy,z,tang,horiz,g_mirrorSector[i]+MAXSECTORS); - - display_mirror = 1; - G_DoSpriteAnimations(tposx,tposy,tang,smoothratio); - display_mirror = 0; - - drawmasks(); - completemirror(); //Reverse screen x-wise in this function - visibility = j; - } - gotpic[MIRROR>>3] &= ~(1<<(MIRROR&7)); - } - -#ifdef POLYMER - if (getrendermode() == 4) - polymer_setanimatesprites(G_DoSpriteAnimations, x,y,a,smoothratio); -#endif - drawrooms(x,y,z,a,horiz,sect); - display_mirror = 2; - G_DoSpriteAnimations(x,y,a,smoothratio); - display_mirror = 0; - drawmasks(); - G_RestoreInterpolations(); - G_UpdateScreenArea(); -#ifdef USE_OPENGL - glprojectionhacks = j; -#endif - continue; - } - - case CON_ROTATESPRITE16: - case CON_ROTATESPRITE: - insptr++; - { - int32_t x=Gv_GetVarX(*insptr++), y=Gv_GetVarX(*insptr++), z=Gv_GetVarX(*insptr++); - int32_t a=Gv_GetVarX(*insptr++), tilenum=Gv_GetVarX(*insptr++), shade=Gv_GetVarX(*insptr++); - int32_t pal=Gv_GetVarX(*insptr++), orientation=Gv_GetVarX(*insptr++); - int32_t x1=Gv_GetVarX(*insptr++), y1=Gv_GetVarX(*insptr++); - int32_t x2=Gv_GetVarX(*insptr++), y2=Gv_GetVarX(*insptr++); - - if (tw == CON_ROTATESPRITE) - { - x<<=16; - y<<=16; - } - - if (x < (-320)<<16 || x >= (640<<16) || y < (-200)<<16 || y >= (400<<16)) - { - OSD_Printf(CON_ERROR "invalid coordinates: %d, %d\n",g_errorLineNum, keyw[g_tw], x, y); - continue; - } - - rotatesprite(x,y,z,a,tilenum,shade,pal,2|orientation,x1,y1,x2,y2); - continue; - } - - case CON_GAMETEXT: - case CON_GAMETEXTZ: - insptr++; - { - int32_t tilenum = Gv_GetVarX(*insptr++); - int32_t x=Gv_GetVarX(*insptr++), y=Gv_GetVarX(*insptr++), q=Gv_GetVarX(*insptr++); - int32_t shade=Gv_GetVarX(*insptr++), pal=Gv_GetVarX(*insptr++); - int32_t orientation=Gv_GetVarX(*insptr++); - int32_t x1=Gv_GetVarX(*insptr++), y1=Gv_GetVarX(*insptr++); - int32_t x2=Gv_GetVarX(*insptr++), y2=Gv_GetVarX(*insptr++); - int32_t z = (tw == CON_GAMETEXTZ) ? Gv_GetVarX(*insptr++) : 65536; - - if ((ScriptQuotes[q] == NULL)) - { - OSD_Printf(CON_ERROR "null quote %d\n",g_errorLineNum,keyw[g_tw],q); - if (tw == CON_GAMETEXTZ) - Gv_GetVarX(*insptr++); - continue; - } - - G_PrintGameText(0,tilenum,x>>1,y,ScriptQuotes[q],shade,pal,orientation,x1,y1,x2,y2,z); - continue; - } - - case CON_DIGITALNUMBER: - case CON_DIGITALNUMBERZ: - insptr++; - { - int32_t tilenum = Gv_GetVarX(*insptr++); - int32_t x=Gv_GetVarX(*insptr++), y=Gv_GetVarX(*insptr++), q=Gv_GetVarX(*insptr++); - int32_t shade=Gv_GetVarX(*insptr++), pal=Gv_GetVarX(*insptr++); - int32_t orientation=Gv_GetVarX(*insptr++); - int32_t x1=Gv_GetVarX(*insptr++), y1=Gv_GetVarX(*insptr++); - int32_t x2=Gv_GetVarX(*insptr++), y2=Gv_GetVarX(*insptr++); - int32_t z = (tw == CON_DIGITALNUMBERZ) ? Gv_GetVarX(*insptr++) : 65536; - - G_DrawTXDigiNumZ(tilenum,x,y,q,shade,pal,orientation,x1,y1,x2,y2,z); - continue; - } - - case CON_MINITEXT: - insptr++; - { - int32_t x=Gv_GetVarX(*insptr++), y=Gv_GetVarX(*insptr++), q=Gv_GetVarX(*insptr++); - int32_t shade=Gv_GetVarX(*insptr++), pal=Gv_GetVarX(*insptr++); - - if ((ScriptQuotes[q] == NULL)) - { - OSD_Printf(CON_ERROR "null quote %d\n",g_errorLineNum,keyw[g_tw],q); - continue; - } - minitextshade(x,y,ScriptQuotes[q],shade,pal,26); - continue; - } - - case CON_ANGOFF: - insptr++; - spriteext[vm.g_i].angoff=*insptr++; - continue; - - case CON_GETZRANGE: - insptr++; - { - vec3_t vect; - - vect.x = Gv_GetVarX(*insptr++); - vect.y = Gv_GetVarX(*insptr++); - vect.z = Gv_GetVarX(*insptr++); - - { - int32_t sectnum=Gv_GetVarX(*insptr++); - int32_t ceilzvar=*insptr++, ceilhitvar=*insptr++, florzvar=*insptr++, florhitvar=*insptr++; - int32_t walldist=Gv_GetVarX(*insptr++), clipmask=Gv_GetVarX(*insptr++); - int32_t ceilz, ceilhit, florz, florhit; - - - if ((sectnum<0 || sectnum>=numsectors)) - { - OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],sectnum); - continue; - } - getzrange(&vect, sectnum, &ceilz, &ceilhit, &florz, &florhit, walldist, clipmask); - Gv_SetVarX(ceilzvar, ceilz); - Gv_SetVarX(ceilhitvar, ceilhit); - Gv_SetVarX(florzvar, florz); - Gv_SetVarX(florhitvar, florhit); - } - continue; - } - - case CON_SECTSETINTERPOLATION: - case CON_SECTCLEARINTERPOLATION: - insptr++; - { - int32_t sectnum = Gv_GetVarX(*insptr++), osectnum; - - if ((sectnum<0 || sectnum>=numsectors)) - { - OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],sectnum); - continue; - } - - osectnum = sprite[MAXSPRITES-1].sectnum; - sprite[MAXSPRITES-1].sectnum = sectnum; - if (tw==CON_SECTSETINTERPOLATION) - Sect_SetInterpolation(MAXSPRITES-1); - else - Sect_ClearInterpolation(MAXSPRITES-1); - sprite[MAXSPRITES-1].sectnum = osectnum; - - continue; - } - - case CON_CALCHYPOTENUSE: - insptr++; - { - int32_t retvar=*insptr++; - int64_t dax=Gv_GetVarX(*insptr++), day=Gv_GetVarX(*insptr++); - int64_t hypsq = dax*dax + day*day; - - if (hypsq > (int64_t)INT_MAX) - Gv_SetVarX(retvar, (int32_t)sqrt((double)hypsq)); - else - Gv_SetVarX(retvar, ksqrt((int32_t)hypsq)); - - continue; - } - - case CON_LINEINTERSECT: - case CON_RAYINTERSECT: - insptr++; - { - int32_t x1=Gv_GetVarX(*insptr++), y1=Gv_GetVarX(*insptr++), z1=Gv_GetVarX(*insptr++); - int32_t x2=Gv_GetVarX(*insptr++), y2=Gv_GetVarX(*insptr++), z2=Gv_GetVarX(*insptr++); - int32_t x3=Gv_GetVarX(*insptr++), y3=Gv_GetVarX(*insptr++), x4=Gv_GetVarX(*insptr++), y4=Gv_GetVarX(*insptr++); - int32_t intxvar=*insptr++, intyvar=*insptr++, intzvar=*insptr++, retvar=*insptr++; - int32_t intx, inty, intz, ret; - - if (tw==CON_LINEINTERSECT) - ret = lineintersect(x1, y1, z1, x2, y2, z2, x3, y3, x4, y4, &intx, &inty, &intz); - else - ret = rayintersect(x1, y1, z1, x2, y2, z2, x3, y3, x4, y4, &intx, &inty, &intz); - - Gv_SetVarX(retvar, ret); - if (ret) - { - Gv_SetVarX(intxvar, intx); - Gv_SetVarX(intyvar, inty); - Gv_SetVarX(intzvar, intz); - } - - continue; - } - - case CON_CLIPMOVE: - case CON_CLIPMOVENOSLIDE: - insptr++; - { - vec3_t vect; - int32_t retvar=*insptr++, xvar=*insptr++, yvar=*insptr++, z=Gv_GetVarX(*insptr++), sectnumvar=*insptr++; - int32_t xvect=Gv_GetVarX(*insptr++), yvect=Gv_GetVarX(*insptr++); - int32_t walldist=Gv_GetVarX(*insptr++), floordist=Gv_GetVarX(*insptr++), ceildist=Gv_GetVarX(*insptr++); - int32_t clipmask=Gv_GetVarX(*insptr++), oclipmoveboxtracenum=clipmoveboxtracenum; - int16_t sectnum; - - vect.x = Gv_GetVarX(xvar); - vect.y = Gv_GetVarX(yvar); - vect.z = z; - sectnum = Gv_GetVarX(sectnumvar); - - if ((sectnum<0 || sectnum>=numsectors)) - { - OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],sectnum); - Gv_SetVarX(retvar, 0); - continue; - } - - if (tw==CON_CLIPMOVENOSLIDE) - clipmoveboxtracenum = 1; - Gv_SetVarX(retvar, clipmove(&vect, §num, xvect, yvect, walldist, floordist, ceildist, clipmask)); - if (tw==CON_CLIPMOVENOSLIDE) - clipmoveboxtracenum = oclipmoveboxtracenum; - Gv_SetVarX(sectnumvar, sectnum); - Gv_SetVarX(xvar, vect.x); - Gv_SetVarX(yvar, vect.y); - - continue; - } - - case CON_HITSCAN: - insptr++; - { - vec3_t vect; - hitdata_t hitinfo; - - vect.x = Gv_GetVarX(*insptr++); - vect.y = Gv_GetVarX(*insptr++); - vect.z = Gv_GetVarX(*insptr++); - - { - int32_t sectnum=Gv_GetVarX(*insptr++); - int32_t vx=Gv_GetVarX(*insptr++), vy=Gv_GetVarX(*insptr++), vz=Gv_GetVarX(*insptr++); - int32_t hitsectvar=*insptr++, hitwallvar=*insptr++, hitspritevar=*insptr++; - int32_t hitxvar=*insptr++, hityvar=*insptr++, hitzvar=*insptr++, cliptype=Gv_GetVarX(*insptr++); - - if ((sectnum<0 || sectnum>=numsectors)) - { - OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],sectnum); - continue; - } - hitscan((const vec3_t *)&vect, sectnum, vx, vy, vz, &hitinfo, cliptype); - Gv_SetVarX(hitsectvar, hitinfo.hitsect); - Gv_SetVarX(hitwallvar, hitinfo.hitwall); - Gv_SetVarX(hitspritevar, hitinfo.hitsprite); - Gv_SetVarX(hitxvar, hitinfo.pos.x); - Gv_SetVarX(hityvar, hitinfo.pos.y); - Gv_SetVarX(hitzvar, hitinfo.pos.z); - } - continue; - } - - case CON_CANSEE: - insptr++; - { - int32_t x1=Gv_GetVarX(*insptr++), y1=Gv_GetVarX(*insptr++), z1=Gv_GetVarX(*insptr++); - int32_t sect1=Gv_GetVarX(*insptr++); - int32_t x2=Gv_GetVarX(*insptr++), y2=Gv_GetVarX(*insptr++), z2=Gv_GetVarX(*insptr++); - int32_t sect2=Gv_GetVarX(*insptr++), rvar=*insptr++; - - if ((sect1<0 || sect1>=numsectors || sect2<0 || sect2>=numsectors)) - { - OSD_Printf(CON_ERROR "Invalid sector\n",g_errorLineNum,keyw[g_tw]); - Gv_SetVarX(rvar, 0); - } - - Gv_SetVarX(rvar, cansee(x1,y1,z1,sect1,x2,y2,z2,sect2)); - continue; - } - - case CON_ROTATEPOINT: - insptr++; - { - int32_t xpivot=Gv_GetVarX(*insptr++), ypivot=Gv_GetVarX(*insptr++); - int32_t x=Gv_GetVarX(*insptr++), y=Gv_GetVarX(*insptr++), daang=Gv_GetVarX(*insptr++); - int32_t x2var=*insptr++, y2var=*insptr++; - int32_t x2, y2; - - rotatepoint(xpivot,ypivot,x,y,daang,&x2,&y2); - Gv_SetVarX(x2var, x2); - Gv_SetVarX(y2var, y2); - continue; - } - - case CON_NEARTAG: - insptr++; - { - // neartag(int32_t x, int32_t y, int32_t z, short sectnum, short ang, //Starting position & angle - // short *neartagsector, //Returns near sector if sector[].tag != 0 - // short *neartagwall, //Returns near wall if wall[].tag != 0 - // short *neartagsprite, //Returns near sprite if sprite[].tag != 0 - // int32_t *neartaghitdist, //Returns actual distance to object (scale: 1024=largest grid size) - // int32_t neartagrange, //Choose maximum distance to scan (scale: 1024=largest grid size) - // char tagsearch) //1-lotag only, 2-hitag only, 3-lotag&hitag - - int32_t x=Gv_GetVarX(*insptr++), y=Gv_GetVarX(*insptr++), z=Gv_GetVarX(*insptr++); - int32_t sectnum=Gv_GetVarX(*insptr++), ang=Gv_GetVarX(*insptr++); - int32_t neartagsectorvar=*insptr++, neartagwallvar=*insptr++, neartagspritevar=*insptr++, neartaghitdistvar=*insptr++; - int32_t neartagrange=Gv_GetVarX(*insptr++), tagsearch=Gv_GetVarX(*insptr++); - - if ((sectnum<0 || sectnum>=numsectors)) - { - OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],sectnum); - continue; - } - neartag(x, y, z, sectnum, ang, &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, neartagrange, tagsearch); - - Gv_SetVarX(neartagsectorvar, neartagsector); - Gv_SetVarX(neartagwallvar, neartagwall); - Gv_SetVarX(neartagspritevar, neartagsprite); - Gv_SetVarX(neartaghitdistvar, neartaghitdist); - continue; - } - - case CON_GETTIMEDATE: - insptr++; - { - int32_t v1=*insptr++,v2=*insptr++,v3=*insptr++,v4=*insptr++,v5=*insptr++,v6=*insptr++,v7=*insptr++,v8=*insptr++; - time_t rawtime; - struct tm *ti; - - time(&rawtime); - ti=localtime(&rawtime); - // initprintf("Time&date: %s\n",asctime (ti)); - - Gv_SetVarX(v1, ti->tm_sec); - Gv_SetVarX(v2, ti->tm_min); - Gv_SetVarX(v3, ti->tm_hour); - Gv_SetVarX(v4, ti->tm_mday); - Gv_SetVarX(v5, ti->tm_mon); - Gv_SetVarX(v6, ti->tm_year+1900); - Gv_SetVarX(v7, ti->tm_wday); - Gv_SetVarX(v8, ti->tm_yday); - continue; - } - - case CON_MOVESPRITE: - case CON_SETSPRITE: - insptr++; - { - int32_t spritenum = Gv_GetVarX(*insptr++); - vec3_t davector; - - davector.x = Gv_GetVarX(*insptr++); - davector.y = Gv_GetVarX(*insptr++); - davector.z = Gv_GetVarX(*insptr++); - - if (tw == CON_SETSPRITE) - { - if ((unsigned)spritenum >= MAXSPRITES) - { - OSD_Printf(CON_ERROR "invalid sprite ID %d\n",g_errorLineNum,keyw[g_tw],spritenum); - continue; - } - setsprite(spritenum, &davector); - continue; - } - - { - int32_t cliptype = Gv_GetVarX(*insptr++); - - if ((unsigned)spritenum >= MAXSPRITES) - { - OSD_Printf(CON_ERROR "invalid sprite ID %d\n",g_errorLineNum,keyw[g_tw],spritenum); - insptr++; - continue; - } - Gv_SetVarX(*insptr++, A_MoveSprite(spritenum, &davector, cliptype)); - continue; - } - } - - case CON_GETFLORZOFSLOPE: - case CON_GETCEILZOFSLOPE: - insptr++; - { - int32_t sectnum = Gv_GetVarX(*insptr++), x = Gv_GetVarX(*insptr++), y = Gv_GetVarX(*insptr++); - if ((sectnum<0 || sectnum>=numsectors)) - { - OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],sectnum); - insptr++; - continue; - } - - if (tw == CON_GETFLORZOFSLOPE) - { - Gv_SetVarX(*insptr++, getflorzofslope(sectnum,x,y)); - continue; - } - Gv_SetVarX(*insptr++, getceilzofslope(sectnum,x,y)); - continue; - } - - case CON_UPDATESECTOR: - case CON_UPDATESECTORZ: - insptr++; - { - int32_t x=Gv_GetVarX(*insptr++), y=Gv_GetVarX(*insptr++); - int32_t z=(tw==CON_UPDATESECTORZ)?Gv_GetVarX(*insptr++):0; - int32_t var=*insptr++; - int16_t w=sprite[vm.g_i].sectnum; - - if (tw==CON_UPDATESECTOR) updatesector(x,y,&w); - else updatesectorz(x,y,z,&w); - - Gv_SetVarX(var, w); - continue; - } - - case CON_SPAWN: - insptr++; - if ((unsigned)vm.g_sp->sectnum < MAXSECTORS) - A_Spawn(vm.g_i,*insptr); - insptr++; - continue; - - case CON_IFWASWEAPON: - insptr++; - VM_DoConditional(actor[vm.g_i].picnum == *insptr); - continue; - - case CON_IFAI: - insptr++; - VM_DoConditional(vm.g_t[5] == *insptr); - continue; - - case CON_IFACTION: - insptr++; - VM_DoConditional(vm.g_t[4] == *insptr); - continue; - - case CON_IFACTIONCOUNT: - insptr++; - VM_DoConditional(vm.g_t[2] >= *insptr); - continue; - - case CON_RESETACTIONCOUNT: - insptr++; - vm.g_t[2] = 0; - continue; - - case CON_DEBRIS: - insptr++; - { - int32_t dnum = *insptr++; - int32_t s, l, j; - - if ((unsigned)vm.g_sp->sectnum < MAXSECTORS) - for (j=(*insptr)-1; j>=0; j--) - { - if (vm.g_sp->picnum == BLIMP && dnum == SCRAP1) - s = 0; - else s = (krand()%3); - - l = A_InsertSprite(vm.g_sp->sectnum, - vm.g_sp->x+(krand()&255)-128,vm.g_sp->y+(krand()&255)-128,vm.g_sp->z-(8<<8)-(krand()&8191), - dnum+s,vm.g_sp->shade,32+(krand()&15),32+(krand()&15), - krand()&2047,(krand()&127)+32, - -(krand()&2047),vm.g_i,5); - if (vm.g_sp->picnum == BLIMP && dnum == SCRAP1) - sprite[l].yvel = BlimpSpawnSprites[j%14]; - else sprite[l].yvel = -1; - sprite[l].pal = vm.g_sp->pal; - } - insptr++; - } - continue; - - case CON_COUNT: - insptr++; - vm.g_t[0] = (int16_t) *insptr++; - continue; - - case CON_CSTATOR: - insptr++; - vm.g_sp->cstat |= (int16_t) *insptr++; - continue; - - case CON_CLIPDIST: - insptr++; - vm.g_sp->clipdist = (int16_t) *insptr++; - continue; - - case CON_CSTAT: - insptr++; - vm.g_sp->cstat = (int16_t) *insptr++; - continue; - - case CON_SAVENN: - case CON_SAVE: - insptr++; - { - time_t curtime; - - g_lastSaveSlot = *insptr++; - - if (g_lastSaveSlot > 9) - continue; - - if (tw == CON_SAVE || ud.savegame[g_lastSaveSlot][0] == 0) - { - curtime = time(NULL); - Bstrcpy(tempbuf,asctime(localtime(&curtime))); - clearbufbyte(ud.savegame[g_lastSaveSlot],sizeof(ud.savegame[g_lastSaveSlot]),0); - Bsprintf(ud.savegame[g_lastSaveSlot],"Auto"); - // for (j=0;j<13;j++) - // Bmemcpy(&ud.savegame[g_lastSaveSlot][j+4],&tempbuf[j+3],sizeof(tempbuf[j+3])); - // ud.savegame[g_lastSaveSlot][j+4] = '\0'; - Bmemcpy(&ud.savegame[g_lastSaveSlot][4],&tempbuf[3],sizeof(tempbuf[0])*13); - ud.savegame[g_lastSaveSlot][17] = '\0'; - } - - OSD_Printf("Saving to slot %d\n",g_lastSaveSlot); - - KB_FlushKeyboardQueue(); - - g_screenCapture = 1; - G_DrawRooms(myconnectindex,65536); - g_screenCapture = 0; - if ((g_netServer || ud.multimode > 1)) - G_SavePlayer(-1-(g_lastSaveSlot)); - else G_SavePlayer(g_lastSaveSlot); - - continue; - } - - case CON_QUAKE: - insptr++; - g_earthquakeTime = (uint8_t)Gv_GetVarX(*insptr++); - A_PlaySound(EARTHQUAKE,g_player[screenpeek].ps->i); - continue; - - case CON_IFMOVE: - insptr++; - VM_DoConditional(vm.g_t[1] == *insptr); - continue; - - case CON_RESETPLAYER: - { - insptr++; - - //AddLog("resetplayer"); - if ((!g_netServer && ud.multimode < 2)) - { - if (g_lastSaveSlot >= 0 && ud.recstat != 2) - { - g_player[vm.g_p].ps->gm |= MODE_MENU; - KB_ClearKeyDown(sc_Space); - ChangeToMenu(15000); - } - else g_player[vm.g_p].ps->gm = MODE_RESTART; - vm.g_flags |= VM_NOEXECUTE; - } - else - { - if (vm.g_p == myconnectindex) - { - g_cameraDistance = 0; - g_cameraClock = totalclock; - } - - if (g_netServer) - { - int32_t jj = 0; - - P_ResetPlayer(vm.g_p); - - packbuf[jj++] = PACKET_PLAYER_SPAWN; - packbuf[jj++] = vm.g_p; - - Bmemcpy(&packbuf[jj], &g_player[vm.g_p].ps->pos.x, sizeof(vec3_t) * 2); - jj += sizeof(vec3_t) * 2; - - packbuf[jj++] = 0; - - enet_host_broadcast(g_netServer, CHAN_GAMESTATE , enet_packet_create(packbuf, jj, ENET_PACKET_FLAG_RELIABLE)); - } - } - P_UpdateScreenPal(g_player[vm.g_p].ps); - //AddLog("EOF: resetplayer"); - } - continue; - - case CON_IFONWATER: - VM_DoConditional(sector[vm.g_sp->sectnum].lotag == 1 && klabs(vm.g_sp->z-sector[vm.g_sp->sectnum].floorz) < (32<<8)); - continue; - - case CON_IFINWATER: - VM_DoConditional(sector[vm.g_sp->sectnum].lotag == 2); - continue; - - case CON_IFCOUNT: - insptr++; - VM_DoConditional(vm.g_t[0] >= *insptr); - continue; - - case CON_IFACTOR: - insptr++; - VM_DoConditional(vm.g_sp->picnum == *insptr); - continue; - - case CON_RESETCOUNT: - insptr++; - vm.g_t[0] = 0; - continue; - - case CON_ADDINVENTORY: - insptr += 2; - switch (*(insptr-1)) - { - case GET_STEROIDS: - g_player[vm.g_p].ps->inv_amount[GET_STEROIDS] = *insptr; - g_player[vm.g_p].ps->inven_icon = 2; - break; - - case GET_SHIELD: - g_player[vm.g_p].ps->inv_amount[GET_SHIELD] += *insptr;// 100; - if (g_player[vm.g_p].ps->inv_amount[GET_SHIELD] > g_player[vm.g_p].ps->max_shield_amount) - g_player[vm.g_p].ps->inv_amount[GET_SHIELD] = g_player[vm.g_p].ps->max_shield_amount; - break; - - case GET_SCUBA: - g_player[vm.g_p].ps->inv_amount[GET_SCUBA] = *insptr;// 1600; - g_player[vm.g_p].ps->inven_icon = 6; - break; - - case GET_HOLODUKE: - g_player[vm.g_p].ps->inv_amount[GET_HOLODUKE] = *insptr;// 1600; - g_player[vm.g_p].ps->inven_icon = 3; - break; - - case GET_JETPACK: - g_player[vm.g_p].ps->inv_amount[GET_JETPACK] = *insptr;// 1600; - g_player[vm.g_p].ps->inven_icon = 4; - break; - - case GET_ACCESS: - switch (vm.g_sp->pal) - { - case 0: - g_player[vm.g_p].ps->got_access |= 1; - break; - case 21: - g_player[vm.g_p].ps->got_access |= 2; - break; - case 23: - g_player[vm.g_p].ps->got_access |= 4; - break; - } - break; - - case GET_HEATS: - g_player[vm.g_p].ps->inv_amount[GET_HEATS] = *insptr; - g_player[vm.g_p].ps->inven_icon = 5; - break; - - case GET_FIRSTAID: - g_player[vm.g_p].ps->inven_icon = 1; - g_player[vm.g_p].ps->inv_amount[GET_FIRSTAID] = *insptr; - break; - - case GET_BOOTS: - g_player[vm.g_p].ps->inven_icon = 7; - g_player[vm.g_p].ps->inv_amount[GET_BOOTS] = *insptr; - break; - default: - OSD_Printf(CON_ERROR "Invalid inventory ID %d\n",g_errorLineNum,keyw[g_tw],(int32_t)*(insptr-1)); - break; - } - insptr++; - continue; - - case CON_HITRADIUSVAR: - insptr++; - { - int32_t v1=Gv_GetVarX(*insptr++),v2=Gv_GetVarX(*insptr++),v3=Gv_GetVarX(*insptr++); - int32_t v4=Gv_GetVarX(*insptr++),v5=Gv_GetVarX(*insptr++); - A_RadiusDamage(vm.g_i,v1,v2,v3,v4,v5); - } - continue; - - case CON_HITRADIUS: - A_RadiusDamage(vm.g_i,*(insptr+1),*(insptr+2),*(insptr+3),*(insptr+4),*(insptr+5)); - insptr += 6; - continue; - - case CON_IFP: - { - int32_t l = *(++insptr); - int32_t j = 0; - int32_t s = sprite[g_player[vm.g_p].ps->i].xvel; - - if ((l&8) && g_player[vm.g_p].ps->on_ground && TEST_SYNC_KEY(g_player[vm.g_p].sync->bits, SK_CROUCH)) - j = 1; - else if ((l&16) && g_player[vm.g_p].ps->jumping_counter == 0 && !g_player[vm.g_p].ps->on_ground && - g_player[vm.g_p].ps->vel.z > 2048) - j = 1; - else if ((l&32) && g_player[vm.g_p].ps->jumping_counter > 348) - j = 1; - else if ((l&1) && s >= 0 && s < 8) - j = 1; - else if ((l&2) && s >= 8 && !TEST_SYNC_KEY(g_player[vm.g_p].sync->bits, SK_RUN)) - j = 1; - else if ((l&4) && s >= 8 && TEST_SYNC_KEY(g_player[vm.g_p].sync->bits, SK_RUN)) - j = 1; - else if ((l&64) && g_player[vm.g_p].ps->pos.z < (vm.g_sp->z-(48<<8))) - j = 1; - else if ((l&128) && s <= -8 && !TEST_SYNC_KEY(g_player[vm.g_p].sync->bits, SK_RUN)) - j = 1; - else if ((l&256) && s <= -8 && TEST_SYNC_KEY(g_player[vm.g_p].sync->bits, SK_RUN)) - j = 1; - else if ((l&512) && (g_player[vm.g_p].ps->quick_kick > 0 || (g_player[vm.g_p].ps->curr_weapon == KNEE_WEAPON && g_player[vm.g_p].ps->kickback_pic > 0))) - j = 1; - else if ((l&1024) && sprite[g_player[vm.g_p].ps->i].xrepeat < 32) - j = 1; - else if ((l&2048) && g_player[vm.g_p].ps->jetpack_on) - j = 1; - else if ((l&4096) && g_player[vm.g_p].ps->inv_amount[GET_STEROIDS] > 0 && g_player[vm.g_p].ps->inv_amount[GET_STEROIDS] < 400) - j = 1; - else if ((l&8192) && g_player[vm.g_p].ps->on_ground) - j = 1; - else if ((l&16384) && sprite[g_player[vm.g_p].ps->i].xrepeat > 32 && sprite[g_player[vm.g_p].ps->i].extra > 0 && g_player[vm.g_p].ps->timebeforeexit == 0) - j = 1; - else if ((l&32768) && sprite[g_player[vm.g_p].ps->i].extra <= 0) - j = 1; - else if ((l&65536L)) - { - if (vm.g_sp->picnum == APLAYER && (g_netServer || ud.multimode > 1)) - j = G_GetAngleDelta(g_player[otherp].ps->ang,getangle(g_player[vm.g_p].ps->pos.x-g_player[otherp].ps->pos.x,g_player[vm.g_p].ps->pos.y-g_player[otherp].ps->pos.y)); - else - j = G_GetAngleDelta(g_player[vm.g_p].ps->ang,getangle(vm.g_sp->x-g_player[vm.g_p].ps->pos.x,vm.g_sp->y-g_player[vm.g_p].ps->pos.y)); - - if (j > -128 && j < 128) - j = 1; - else - j = 0; - } - VM_DoConditional((intptr_t) j); - } - continue; - - case CON_IFSTRENGTH: - insptr++; - VM_DoConditional(vm.g_sp->extra <= *insptr); - continue; - - case CON_GUTS: - A_DoGuts(vm.g_i,*(insptr+1),*(insptr+2)); - insptr += 3; - continue; - - case CON_IFSPAWNEDBY: - insptr++; - VM_DoConditional(actor[vm.g_i].picnum == *insptr); - continue; - - case CON_WACKPLAYER: - insptr++; - P_ForceAngle(g_player[vm.g_p].ps); - continue; - - case CON_FLASH: - insptr++; - sprite[vm.g_i].shade = -127; - g_player[vm.g_p].ps->visibility = -127; - lastvisinc = totalclock+32; - continue; - - case CON_SAVEMAPSTATE: - if (MapInfo[ud.volume_number *MAXLEVELS+ud.level_number].savedstate == NULL) - MapInfo[ud.volume_number *MAXLEVELS+ud.level_number].savedstate = Bcalloc(1,sizeof(mapstate_t)); - G_SaveMapState(MapInfo[ud.volume_number*MAXLEVELS+ud.level_number].savedstate); - insptr++; - continue; - - case CON_LOADMAPSTATE: - if (MapInfo[ud.volume_number*MAXLEVELS+ud.level_number].savedstate) - G_RestoreMapState(MapInfo[ud.volume_number*MAXLEVELS+ud.level_number].savedstate); - insptr++; - continue; - - case CON_CLEARMAPSTATE: - insptr++; - { - int32_t j = Gv_GetVarX(*insptr++); - if ((unsigned)j >= MAXVOLUMES*MAXLEVELS) - { - OSD_Printf(CON_ERROR "Invalid map number: %d\n",g_errorLineNum,keyw[g_tw],j); - continue; - } - if (MapInfo[j].savedstate) - G_FreeMapState(j); - } - continue; - - case CON_STOPALLSOUNDS: - insptr++; - if (screenpeek == vm.g_p) - FX_StopAllSounds(); - continue; - - case CON_IFGAPZL: - insptr++; - VM_DoConditional(((actor[vm.g_i].floorz - actor[vm.g_i].ceilingz) >> 8) < *insptr); - continue; - - case CON_IFHITSPACE: - VM_DoConditional(TEST_SYNC_KEY(g_player[vm.g_p].sync->bits, SK_OPEN)); - continue; - - case CON_IFOUTSIDE: - VM_DoConditional(sector[vm.g_sp->sectnum].ceilingstat&1); - continue; - - case CON_IFMULTIPLAYER: - VM_DoConditional((g_netServer || g_netClient || ud.multimode > 1)); - continue; - - case CON_IFCLIENT: - VM_DoConditional(g_netClient != NULL); - continue; - - case CON_IFSERVER: - VM_DoConditional(g_netServer != NULL); - continue; - - case CON_OPERATE: - insptr++; - if (sector[vm.g_sp->sectnum].lotag == 0) - { - neartag(vm.g_sp->x,vm.g_sp->y,vm.g_sp->z-(32<<8),vm.g_sp->sectnum,vm.g_sp->ang, - &neartagsector,&neartagwall,&neartagsprite,&neartaghitdist,768L,5); - if (neartagsector >= 0 && isanearoperator(sector[neartagsector].lotag)) - if ((sector[neartagsector].lotag&0xff) == 23 || sector[neartagsector].floorz == sector[neartagsector].ceilingz) - if ((sector[neartagsector].lotag&16384) == 0) - if ((sector[neartagsector].lotag&32768) == 0) - { - int32_t j = headspritesect[neartagsector]; - while (j >= 0) - { - if (sprite[j].picnum == ACTIVATOR) - break; - j = nextspritesect[j]; - } - if (j == -1) - G_OperateSectors(neartagsector,vm.g_i); - } - } - continue; - - case CON_IFINSPACE: - VM_DoConditional(G_CheckForSpaceCeiling(vm.g_sp->sectnum)); - continue; - - case CON_SPRITEPAL: - insptr++; - if (vm.g_sp->picnum != APLAYER) - actor[vm.g_i].tempang = vm.g_sp->pal; - vm.g_sp->pal = *insptr++; - continue; - - case CON_CACTOR: - insptr++; - vm.g_sp->picnum = *insptr++; - continue; - - case CON_IFBULLETNEAR: - VM_DoConditional(A_Dodge(vm.g_sp) == 1); - continue; - - case CON_IFRESPAWN: - if (A_CheckEnemySprite(vm.g_sp)) - VM_DoConditional(ud.respawn_monsters); - else if (A_CheckInventorySprite(vm.g_sp)) - VM_DoConditional(ud.respawn_inventory); - else - VM_DoConditional(ud.respawn_items); - continue; - - case CON_IFFLOORDISTL: - insptr++; - VM_DoConditional((actor[vm.g_i].floorz - vm.g_sp->z) <= ((*insptr)<<8)); - continue; - - case CON_IFCEILINGDISTL: - insptr++; - VM_DoConditional((vm.g_sp->z - actor[vm.g_i].ceilingz) <= ((*insptr)<<8)); - continue; - - case CON_PALFROM: - insptr++; - { - int32_t j = 2; - g_player[vm.g_p].ps->pals.f = *insptr++; - for (; j>=0; j--) - *((char *)(&g_player[vm.g_p].ps->pals.r)+2-j) = *insptr++; - } - continue; - - case CON_SECTOROFWALL: - insptr++; - { - int32_t j = *insptr++; - - Gv_SetVarX(j, sectorofwall(Gv_GetVarX(*insptr++))); - } - continue; - - case CON_QSPRINTF: - insptr++; - { - int32_t dq = Gv_GetVarX(*insptr++), sq = Gv_GetVarX(*insptr++); - if ((ScriptQuotes[sq] == NULL || ScriptQuotes[dq] == NULL)) - { - OSD_Printf(CON_ERROR "null quote %d\n",g_errorLineNum,keyw[g_tw],ScriptQuotes[sq] ? dq : sq); - - while ((*insptr & 0xFFF) != CON_NULLOP) - Gv_GetVarX(*insptr++); - - insptr++; // skip the NOP - continue; - } - - { - int32_t arg[32], i = 0, j = 0, k = 0; - int32_t len = Bstrlen(ScriptQuotes[sq]); - char tempbuf[MAXQUOTELEN]; - - while ((*insptr & 0xFFF) != CON_NULLOP && i < 32) - arg[i++] = Gv_GetVarX(*insptr++); - - insptr++; // skip the NOP - - i = 0; - - do - { - while (k < len && j < MAXQUOTELEN && ScriptQuotes[sq][k] != '%') - tempbuf[j++] = ScriptQuotes[sq][k++]; - - if (ScriptQuotes[sq][k] == '%') - { - k++; - switch (ScriptQuotes[sq][k]) - { - case 'l': - if (ScriptQuotes[sq][k+1] != 'd') - { - // write the % and l - tempbuf[j++] = ScriptQuotes[sq][k-1]; - tempbuf[j++] = ScriptQuotes[sq][k++]; - break; - } - k++; - case 'd': - { - char buf[16]; - int32_t ii = 0; - - Bsprintf(buf, "%d", arg[i++]); - - ii = Bstrlen(buf); - Bmemcpy(&tempbuf[j], buf, ii); - j += ii; - k++; - } - break; - - case 's': - { - int32_t ii = Bstrlen(ScriptQuotes[arg[i]]); - - Bmemcpy(&tempbuf[j], ScriptQuotes[arg[i]], ii); - j += ii; - k++; - } - break; - - default: - tempbuf[j++] = ScriptQuotes[sq][k-1]; - break; - } - } - } - while (k < len && j < MAXQUOTELEN); - - tempbuf[j] = '\0'; - Bstrcpy(ScriptQuotes[dq], tempbuf); - continue; - } - } - - case CON_ADDLOG: - { - insptr++; - - OSD_Printf(OSDTEXT_GREEN "CONLOG: L=%d\n",g_errorLineNum); - continue; - } - - case CON_ADDLOGVAR: - insptr++; - { - int32_t m=1; - char szBuf[256]; - int32_t lVarID = *insptr; - - if ((lVarID >= g_gameVarCount) || lVarID < 0) - { - if (*insptr==MAXGAMEVARS) // addlogvar for a constant? Har. - insptr++; - // else if (*insptr > g_gameVarCount && (*insptr < (MAXGAMEVARS<<1)+MAXGAMEVARS+1+MAXGAMEARRAYS)) - else if (*insptr&(MAXGAMEVARS<<2)) - { - int32_t index; - - lVarID ^= (MAXGAMEVARS<<2); - - if (lVarID&(MAXGAMEVARS<<1)) - { - m = -m; - lVarID ^= (MAXGAMEVARS<<1); - } - - insptr++; - - index=Gv_GetVarX(*insptr++); - if ((index < aGameArrays[lVarID].size)&&(index>=0)) - { - OSD_Printf(OSDTEXT_GREEN "%s: L=%d %s[%d] =%d\n",keyw[g_tw],g_errorLineNum, - aGameArrays[lVarID].szLabel,index,m*aGameArrays[lVarID].plValues[index]); - continue; - } - else - { - OSD_Printf(CON_ERROR "invalid array index\n",g_errorLineNum,keyw[g_tw]); - continue; - } - } - else if (*insptr&(MAXGAMEVARS<<3)) - { - // FIXME FIXME FIXME - if ((lVarID & (MAXGAMEVARS-1)) == g_iActorVarID) - { - intptr_t *oinsptr = insptr++; - int32_t index = Gv_GetVarX(*insptr++); - insptr = oinsptr; - if ((unsigned)index >= MAXSPRITES-1) - { - OSD_Printf(CON_ERROR "invalid array index\n",g_errorLineNum,keyw[g_tw]); - Gv_GetVarX(*insptr++); - continue; - } - OSD_Printf(OSDTEXT_GREEN "%s: L=%d %d %d\n",keyw[g_tw],g_errorLineNum,index,Gv_GetVar(*insptr++,index,vm.g_p)); - continue; - } - } - else if (*insptr&(MAXGAMEVARS<<1)) - { - m = -m; - lVarID ^= (MAXGAMEVARS<<1); - } - else - { - // invalid varID - insptr++; - OSD_Printf(CON_ERROR "invalid variable\n",g_errorLineNum,keyw[g_tw]); - continue; // out of switch - } - } - Bsprintf(szBuf,"CONLOGVAR: L=%d %s ",g_errorLineNum, aGameVars[lVarID].szLabel); - strcpy(g_szBuf,szBuf); - - if (aGameVars[lVarID].dwFlags & GAMEVAR_READONLY) - { - Bsprintf(szBuf," (read-only)"); - strcat(g_szBuf,szBuf); - } - if (aGameVars[lVarID].dwFlags & GAMEVAR_PERPLAYER) - { - Bsprintf(szBuf," (Per Player. Player=%d)",vm.g_p); - } - else if (aGameVars[lVarID].dwFlags & GAMEVAR_PERACTOR) - { - Bsprintf(szBuf," (Per Actor. Actor=%d)",vm.g_i); - } - else - { - Bsprintf(szBuf," (Global)"); - } - Bstrcat(g_szBuf,szBuf); - Bsprintf(szBuf," =%d\n", Gv_GetVarX(lVarID)*m); - Bstrcat(g_szBuf,szBuf); - OSD_Printf(OSDTEXT_GREEN "%s",g_szBuf); - insptr++; - continue; - } - - case CON_SETSECTOR: - case CON_GETSECTOR: - insptr++; - { - // syntax [gs]etsector[].x - // - int32_t lVar1=*insptr++, lLabelID=*insptr++, lVar2=*insptr++; - - VM_AccessSector(tw==CON_SETSECTOR, lVar1, lLabelID, lVar2); - continue; - } - - case CON_SQRT: - insptr++; - { - // syntax sqrt - int32_t lInVarID=*insptr++, lOutVarID=*insptr++; - - Gv_SetVarX(lOutVarID, ksqrt(Gv_GetVarX(lInVarID))); - continue; - } - - case CON_FINDNEARACTOR: - case CON_FINDNEARSPRITE: - case CON_FINDNEARACTOR3D: - case CON_FINDNEARSPRITE3D: - insptr++; - { - // syntax findnearactorvar - // gets the sprite ID of the nearest actor within max dist - // that is of into - // -1 for none found - // - int32_t lType=*insptr++, lMaxDist=*insptr++, lVarID=*insptr++; - int32_t lFound=-1, j, k = MAXSTATUS-1; - - if (tw == CON_FINDNEARACTOR || tw == CON_FINDNEARACTOR3D) - k = 1; - do - { - j=headspritestat[k]; // all sprites - if (tw==CON_FINDNEARSPRITE3D || tw==CON_FINDNEARACTOR3D) - { - while (j>=0) - { - if (sprite[j].picnum == lType && j != vm.g_i && dist(&sprite[vm.g_i], &sprite[j]) < lMaxDist) - { - lFound=j; - j = MAXSPRITES; - break; - } - j = nextspritestat[j]; - } - if (j == MAXSPRITES || tw == CON_FINDNEARACTOR3D) - break; - continue; - } - - while (j>=0) - { - if (sprite[j].picnum == lType && j != vm.g_i && ldist(&sprite[vm.g_i], &sprite[j]) < lMaxDist) - { - lFound=j; - j = MAXSPRITES; - break; - } - j = nextspritestat[j]; - } - - if (j == MAXSPRITES || tw == CON_FINDNEARACTOR) - break; - } - while (k--); - Gv_SetVarX(lVarID, lFound); - continue; - } - - case CON_FINDNEARACTORVAR: - case CON_FINDNEARSPRITEVAR: - case CON_FINDNEARACTOR3DVAR: - case CON_FINDNEARSPRITE3DVAR: - insptr++; - { - // syntax findnearactorvar - // gets the sprite ID of the nearest actor within max dist - // that is of into - // -1 for none found - // - int32_t lType=*insptr++, lMaxDist=Gv_GetVarX(*insptr++), lVarID=*insptr++; - int32_t lFound=-1, j, k = 1; - - if (tw == CON_FINDNEARSPRITEVAR || tw == CON_FINDNEARSPRITE3DVAR) - k = MAXSTATUS-1; - - do - { - j=headspritestat[k]; // all sprites - if (tw==CON_FINDNEARACTOR3DVAR || tw==CON_FINDNEARSPRITE3DVAR) - { - while (j >= 0) - { - if (sprite[j].picnum == lType && j != vm.g_i && dist(&sprite[vm.g_i], &sprite[j]) < lMaxDist) - { - lFound=j; - j = MAXSPRITES; - break; - } - j = nextspritestat[j]; - } - if (j == MAXSPRITES || tw==CON_FINDNEARACTOR3DVAR) - break; - continue; - } - - while (j >= 0) - { - if (sprite[j].picnum == lType && j != vm.g_i && ldist(&sprite[vm.g_i], &sprite[j]) < lMaxDist) - { - lFound=j; - j = MAXSPRITES; - break; - } - j = nextspritestat[j]; - } - - if (j == MAXSPRITES || tw==CON_FINDNEARACTORVAR) - break; - } - while (k--); - Gv_SetVarX(lVarID, lFound); - continue; - } - - case CON_FINDNEARACTORZVAR: - case CON_FINDNEARSPRITEZVAR: - insptr++; - { - // syntax findnearactorvar - // gets the sprite ID of the nearest actor within max dist - // that is of into - // -1 for none found - // - int32_t lType=*insptr++, lMaxDist=Gv_GetVarX(*insptr++); - int32_t lMaxZDist=Gv_GetVarX(*insptr++); - int32_t lVarID=*insptr++, lFound=-1, lTemp, lTemp2, j, k=MAXSTATUS-1; - do - { - j=headspritestat[tw==CON_FINDNEARACTORZVAR?1:k]; // all sprites - if (j == -1) continue; - do - { - if (sprite[j].picnum == lType && j != vm.g_i) - { - lTemp=ldist(&sprite[vm.g_i], &sprite[j]); - if (lTemp < lMaxDist) - { - lTemp2=klabs(sprite[vm.g_i].z-sprite[j].z); - if (lTemp2 < lMaxZDist) - { - lFound=j; - j = MAXSPRITES; - break; - } - } - } - j = nextspritestat[j]; - } - while (j>=0); - if (tw==CON_FINDNEARACTORZVAR || j == MAXSPRITES) - break; - } - while (k--); - Gv_SetVarX(lVarID, lFound); - - continue; - } - - case CON_FINDNEARACTORZ: - case CON_FINDNEARSPRITEZ: - insptr++; - { - // syntax findnearactorvar - // gets the sprite ID of the nearest actor within max dist - // that is of into - // -1 for none found - // - int32_t lType=*insptr++, lMaxDist=*insptr++, lMaxZDist=*insptr++, lVarID=*insptr++; - int32_t lTemp, lTemp2, lFound=-1, j, k=MAXSTATUS-1; - do - { - j=headspritestat[tw==CON_FINDNEARACTORZ?1:k]; // all sprites - if (j == -1) continue; - do - { - if (sprite[j].picnum == lType && j != vm.g_i) - { - lTemp=ldist(&sprite[vm.g_i], &sprite[j]); - if (lTemp < lMaxDist) - { - lTemp2=klabs(sprite[vm.g_i].z-sprite[j].z); - if (lTemp2 < lMaxZDist) - { - lFound=j; - j = MAXSPRITES; - break; - } - } - } - j = nextspritestat[j]; - } - while (j>=0); - - if (tw==CON_FINDNEARACTORZ || j == MAXSPRITES) - break; - } - while (k--); - Gv_SetVarX(lVarID, lFound); - continue; - } - - case CON_FINDPLAYER: - insptr++; - { - int32_t j; - // Gv_SetVarX(g_iReturnVarID, A_FindPlayer(&sprite[vm.g_i],&j)); - aGameVars[g_iReturnVarID].val.lValue = A_FindPlayer(&sprite[vm.g_i],&j); - Gv_SetVarX(*insptr++, j); - } - continue; - - case CON_FINDOTHERPLAYER: - insptr++; - { - int32_t j; - // Gv_SetVarX(g_iReturnVarID, P_FindOtherPlayer(vm.g_p,&j)); - aGameVars[g_iReturnVarID].val.lValue = P_FindOtherPlayer(vm.g_p,&j); - Gv_SetVarX(*insptr++, j); - } - continue; - - case CON_SETPLAYER: - insptr++; - { - // syntax [gs]etplayer[].x - // - int32_t lVar1=*insptr++, lLabelID=*insptr++, lParm2 = 0, lVar2; - // HACK: need to have access to labels structure at run-time... - - if (PlayerLabels[lLabelID].flags & LABEL_HASPARM2) - lParm2=Gv_GetVarX(*insptr++); - lVar2=*insptr++; - - VM_SetPlayer(lVar1, lLabelID, lVar2, lParm2); - continue; - } - - - case CON_GETPLAYER: - insptr++; - { - // syntax [gs]etplayer[].x - // - int32_t lVar1=*insptr++, lLabelID=*insptr++, lParm2 = 0, lVar2; - // HACK: need to have access to labels structure at run-time... - - if (PlayerLabels[lLabelID].flags & LABEL_HASPARM2) - lParm2=Gv_GetVarX(*insptr++); - lVar2=*insptr++; - - VM_GetPlayer(lVar1, lLabelID, lVar2, lParm2); - continue; - } - - case CON_SETINPUT: - case CON_GETINPUT: - insptr++; - { - // syntax [gs]etplayer[].x - // - int32_t lVar1=*insptr++, lLabelID=*insptr++, lVar2=*insptr++; - - VM_AccessPlayerInput(tw==CON_SETINPUT, lVar1, lLabelID, lVar2); - continue; - } - - case CON_GETUSERDEF: - case CON_SETUSERDEF: - insptr++; - { - // syntax [gs]etuserdef.xxx - // - int32_t lLabelID=*insptr++, lVar2=*insptr++; - - VM_AccessUserdef(tw==CON_SETUSERDEF, lLabelID, lVar2); - continue; - } - - case CON_GETPROJECTILE: - case CON_SETPROJECTILE: - insptr++; - { - // syntax [gs]etplayer[].x - // - int32_t lVar1=Gv_GetVarX(*insptr++), lLabelID=*insptr++, lVar2=*insptr++; - - VM_AccessProjectile(tw==CON_SETPROJECTILE,lVar1,lLabelID,lVar2); - continue; - } - - case CON_SETWALL: - case CON_GETWALL: - insptr++; - { - // syntax [gs]etwall[].x - // - int32_t lVar1=*insptr++, lLabelID=*insptr++, lVar2=*insptr++; - - VM_AccessWall(tw==CON_SETWALL, lVar1, lLabelID, lVar2); - continue; - } - - case CON_SETACTORVAR: - case CON_GETACTORVAR: - insptr++; - { - // syntax [gs]etactorvar[]. - // gets the value of the per-actor variable varx into VAR - // - int32_t lSprite=Gv_GetVarX(*insptr++), lVar1=*insptr++; - int32_t lVar2=*insptr++; - - if ((unsigned)lSprite >= MAXSPRITES) - { - OSD_Printf(CON_ERROR "invalid sprite ID %d\n",g_errorLineNum,keyw[g_tw],lSprite); - if (lVar1 == MAXGAMEVARS || lVar1 & ((MAXGAMEVARS<<2)|(MAXGAMEVARS<<3))) insptr++; - if (lVar2 == MAXGAMEVARS || lVar2 & ((MAXGAMEVARS<<2)|(MAXGAMEVARS<<3))) insptr++; - continue; - } - - if (tw == CON_SETACTORVAR) - { - Gv_SetVar(lVar1, Gv_GetVarX(lVar2), lSprite, vm.g_p); - continue; - } - Gv_SetVarX(lVar2, Gv_GetVar(lVar1, lSprite, vm.g_p)); - continue; - } - - case CON_SETPLAYERVAR: - case CON_GETPLAYERVAR: - insptr++; - { - int32_t iPlayer = vm.g_p; - - if (*insptr != g_iThisActorID) - iPlayer=Gv_GetVarX(*insptr); - - insptr++; - { - int32_t lVar1=*insptr++, lVar2=*insptr++; - - if ((unsigned)iPlayer >= (unsigned)playerswhenstarted) - { - OSD_Printf(CON_ERROR "invalid player ID %d\n",g_errorLineNum,keyw[g_tw],iPlayer); - if (lVar1 == MAXGAMEVARS || lVar1 & ((MAXGAMEVARS<<2)|(MAXGAMEVARS<<3))) insptr++; - if (lVar2 == MAXGAMEVARS || lVar2 & ((MAXGAMEVARS<<2)|(MAXGAMEVARS<<3))) insptr++; - continue; - } - - if (tw == CON_SETPLAYERVAR) - { - Gv_SetVar(lVar1, Gv_GetVarX(lVar2), vm.g_i, iPlayer); - continue; - } - Gv_SetVarX(lVar2, Gv_GetVar(lVar1, vm.g_i, iPlayer)); - continue; - } - } - - case CON_SETACTOR: - insptr++; - { - // syntax [gs]etactor[].x - // - - int32_t lVar1=*insptr++, lLabelID=*insptr++, lParm2 = 0; - - if (ActorLabels[lLabelID].flags & LABEL_HASPARM2) - lParm2=Gv_GetVarX(*insptr++); - - { - int32_t lVar2=*insptr++; - - VM_SetSprite(lVar1, lLabelID, lVar2, lParm2); - } - continue; - } - - case CON_GETACTOR: - insptr++; - { - // syntax [gs]etactor[].x - // - - int32_t lVar1=*insptr++, lLabelID=*insptr++, lParm2 = 0; - - if (ActorLabels[lLabelID].flags & LABEL_HASPARM2) - lParm2=Gv_GetVarX(*insptr++); - - { - int32_t lVar2=*insptr++; - - VM_GetSprite(lVar1, lLabelID, lVar2, lParm2); - } - continue; - } - - case CON_SETTSPR: - case CON_GETTSPR: - insptr++; - { - // syntax [gs]etactor[].x - // - - int32_t lVar1=*insptr++, lLabelID=*insptr++, lVar2=*insptr++; - - VM_AccessTsprite(tw==CON_SETTSPR, lVar1, lLabelID, lVar2); - continue; - } - - case CON_GETANGLETOTARGET: - insptr++; - // Actor[vm.g_i].lastvx and lastvy are last known location of target. - Gv_SetVarX(*insptr++, getangle(actor[vm.g_i].lastvx-vm.g_sp->x,actor[vm.g_i].lastvy-vm.g_sp->y)); - continue; - - case CON_ANGOFFVAR: - insptr++; - spriteext[vm.g_i].angoff=Gv_GetVarX(*insptr++); - continue; - - case CON_LOCKPLAYER: - insptr++; - g_player[vm.g_p].ps->transporter_hold=Gv_GetVarX(*insptr++); - continue; - - case CON_CHECKAVAILWEAPON: - case CON_CHECKAVAILINVEN: - insptr++; - { - int32_t j = vm.g_p; - - if (*insptr != g_iThisActorID) - j=Gv_GetVarX(*insptr); - - insptr++; - - if ((unsigned)j >= (unsigned)playerswhenstarted) - { - OSD_Printf(CON_ERROR "Invalid player ID %d\n",g_errorLineNum,keyw[g_tw],j); - continue; - } - - if (tw == CON_CHECKAVAILWEAPON) - P_CheckWeapon(g_player[j].ps); - else P_SelectNextInvItem(g_player[j].ps); - } - continue; - - case CON_GETPLAYERANGLE: - insptr++; - Gv_SetVarX(*insptr++, g_player[vm.g_p].ps->ang); - continue; - - case CON_SETPLAYERANGLE: - insptr++; - g_player[vm.g_p].ps->ang=Gv_GetVarX(*insptr++); - g_player[vm.g_p].ps->ang &= 2047; - continue; - - case CON_GETACTORANGLE: - insptr++; - Gv_SetVarX(*insptr++, vm.g_sp->ang); - continue; - - case CON_SETACTORANGLE: - insptr++; - vm.g_sp->ang=Gv_GetVarX(*insptr++); - vm.g_sp->ang &= 2047; - continue; - - case CON_SETVAR: - insptr++; - Gv_SetVarX(*insptr, *(insptr+1)); - insptr += 2; - continue; - - case CON_SETARRAY: - insptr++; - { - int32_t j=*insptr++; - int32_t index = Gv_GetVarX(*insptr++); - int32_t value = Gv_GetVarX(*insptr++); - - if (j<0 || j >= g_gameArrayCount || index >= aGameArrays[j].size || index < 0) - { - OSD_Printf(OSD_ERROR "Gv_SetVar(): tried to set invalid array ID (%d) or index out of bounds from sprite %d (%d), player %d\n",j,vm.g_i,sprite[vm.g_i].picnum,vm.g_p); - continue; - } - aGameArrays[j].plValues[index]=value; - continue; - } - case CON_WRITEARRAYTOFILE: - case CON_READARRAYFROMFILE: - insptr++; - { - int32_t j=*insptr++; - { - int q = *insptr++; - - if (ScriptQuotes[q] == NULL) - { - OSD_Printf(CON_ERROR "null quote %d\n",g_errorLineNum,keyw[g_tw],q); - continue; - } - - if (tw == CON_READARRAYFROMFILE) - { - int32_t fil = kopen4loadfrommod(ScriptQuotes[q], 0); - int32_t asize; - - if (fil < 0) - continue; - - asize = kfilelength(fil); - - if (asize > 0) - { - /*OSD_Printf(OSDTEXT_GREEN "CON_RESIZEARRAY: resizing array %s from %d to %d\n", - aGameArrays[j].szLabel, aGameArrays[j].size, asize / sizeof(int32_t));*/ - aGameArrays[j].plValues=Brealloc(aGameArrays[j].plValues, asize); - aGameArrays[j].size = asize / sizeof(int32_t); - kread(fil, aGameArrays[j].plValues, asize); - } - - kclose(fil); - continue; - } - - { - FILE *fil; - char temp[BMAX_PATH]; - - if (g_modDir[0] != '/') - Bsprintf(temp,"%s/%s",g_modDir,ScriptQuotes[q]); - else Bsprintf(temp,"%s",ScriptQuotes[q]); - - if ((fil = fopen(temp,"wb")) == 0) continue; - - fwrite(aGameArrays[j].plValues,1,sizeof(int) * aGameArrays[j].size,fil); - fclose(fil); - } - - continue; - } - } - - case CON_GETARRAYSIZE: - insptr++; - { - int32_t j=*insptr++; - Gv_SetVarX(*insptr++,aGameArrays[j].size); - } - continue; - - case CON_RESIZEARRAY: - insptr++; - { - int32_t j=*insptr++; - int32_t asize = Gv_GetVarX(*insptr++); - - if (asize > 0) - { - /*OSD_Printf(OSDTEXT_GREEN "CON_RESIZEARRAY: resizing array %s from %d to %d\n", aGameArrays[j].szLabel, aGameArrays[j].size, asize);*/ - aGameArrays[j].plValues=Brealloc(aGameArrays[j].plValues, sizeof(int32_t) * asize); - aGameArrays[j].size = asize; - } - continue; - } - - case CON_COPY: - insptr++; - { - int32_t j=*insptr++; - int32_t index = Gv_GetVarX(*insptr++); - int32_t j1=*insptr++; - int32_t index1 = Gv_GetVarX(*insptr++); - int32_t value = Gv_GetVarX(*insptr++); - - if (index > aGameArrays[j].size || index1 > aGameArrays[j1].size) continue; - if ((index+value)>aGameArrays[j].size) value=aGameArrays[j].size-index; - if ((index1+value)>aGameArrays[j1].size) value=aGameArrays[j1].size-index1; - Bmemcpy(aGameArrays[j1].plValues+index1, aGameArrays[j].plValues+index, value * sizeof(intptr_t)); - continue; - } - - case CON_RANDVAR: - insptr++; - Gv_SetVarX(*insptr, mulscale16(krand(), *(insptr+1)+1)); - insptr += 2; - continue; - - case CON_DISPLAYRANDVAR: - insptr++; - Gv_SetVarX(*insptr, mulscale15((uint16_t)rand(), *(insptr+1)+1)); - insptr += 2; - continue; - - case CON_INV: - Gv_SetVarX(*(insptr+1), -Gv_GetVarX(*(insptr+1))); - insptr += 2; - continue; - - case CON_MULVAR: - insptr++; - Gv_SetVarX(*insptr, Gv_GetVarX(*insptr) * *(insptr+1)); - insptr += 2; - continue; - - case CON_DIVVAR: - insptr++; - if (*(insptr+1) == 0) - { - OSD_Printf(CON_ERROR "Divide by zero.\n",g_errorLineNum,keyw[g_tw]); - insptr += 2; - continue; - } - Gv_SetVarX(*insptr, Gv_GetVarX(*insptr) / *(insptr+1)); - insptr += 2; - continue; - - case CON_MODVAR: - insptr++; - if (*(insptr+1) == 0) - { - OSD_Printf(CON_ERROR "Mod by zero.\n",g_errorLineNum,keyw[g_tw]); - insptr += 2; - continue; - } - Gv_SetVarX(*insptr,Gv_GetVarX(*insptr)%*(insptr+1)); - insptr += 2; - continue; - - case CON_ANDVAR: - insptr++; - Gv_SetVarX(*insptr,Gv_GetVarX(*insptr) & *(insptr+1)); - insptr += 2; - continue; - - case CON_ORVAR: - insptr++; - Gv_SetVarX(*insptr,Gv_GetVarX(*insptr) | *(insptr+1)); - insptr += 2; - continue; - - case CON_XORVAR: - insptr++; - Gv_SetVarX(*insptr,Gv_GetVarX(*insptr) ^ *(insptr+1)); - insptr += 2; - continue; - - case CON_SETVARVAR: - insptr++; - { - int32_t j=*insptr++; - Gv_SetVarX(j, Gv_GetVarX(*insptr++)); - } - continue; - - case CON_RANDVARVAR: - insptr++; - { - int32_t j=*insptr++; - Gv_SetVarX(j,mulscale(krand(), Gv_GetVarX(*insptr++)+1, 16)); - } - continue; - - case CON_DISPLAYRANDVARVAR: - insptr++; - { - int32_t j=*insptr++; - Gv_SetVarX(j,mulscale((uint16_t)rand(), Gv_GetVarX(*insptr++)+1, 15)); - } - continue; - - case CON_GMAXAMMO: - insptr++; - { - int32_t j=Gv_GetVarX(*insptr++); - if ((j<0 || j>=MAX_WEAPONS)) - { - OSD_Printf(CON_ERROR "Invalid weapon ID %d\n",g_errorLineNum,keyw[g_tw],j); - insptr++; - continue; - } - Gv_SetVarX(*insptr++, g_player[vm.g_p].ps->max_ammo_amount[j]); - } - continue; - - case CON_SMAXAMMO: - insptr++; - { - int32_t j=Gv_GetVarX(*insptr++); - if ((j<0 || j>=MAX_WEAPONS)) - { - OSD_Printf(CON_ERROR "Invalid weapon ID %d\n",g_errorLineNum,keyw[g_tw],j); - insptr++; - continue; - } - g_player[vm.g_p].ps->max_ammo_amount[j]=Gv_GetVarX(*insptr++); - } - continue; - - case CON_MULVARVAR: - insptr++; - { - int32_t j=*insptr++; - Gv_SetVarX(j, Gv_GetVarX(j)*Gv_GetVarX(*insptr++)); - } - continue; - - case CON_DIVVARVAR: - insptr++; - { - int32_t j=*insptr++; - int32_t l2=Gv_GetVarX(*insptr++); - - if (l2==0) - { - OSD_Printf(CON_ERROR "Divide by zero.\n",g_errorLineNum,keyw[g_tw]); - continue; - } - Gv_SetVarX(j, Gv_GetVarX(j)/l2); - continue; - } - - case CON_MODVARVAR: - insptr++; - { - int32_t j=*insptr++; - int32_t l2=Gv_GetVarX(*insptr++); - - if (l2==0) - { - OSD_Printf(CON_ERROR "Mod by zero.\n",g_errorLineNum,keyw[g_tw]); - continue; - } - - Gv_SetVarX(j, Gv_GetVarX(j) % l2); - continue; - } - - case CON_ANDVARVAR: - insptr++; - { - int32_t j=*insptr++; - Gv_SetVarX(j, Gv_GetVarX(j) & Gv_GetVarX(*insptr++)); - } - continue; - - case CON_XORVARVAR: - insptr++; - { - int32_t j=*insptr++; - Gv_SetVarX(j, Gv_GetVarX(j) ^ Gv_GetVarX(*insptr++)); - } - continue; - - case CON_ORVARVAR: - insptr++; - { - int32_t j=*insptr++; - Gv_SetVarX(j, Gv_GetVarX(j) | Gv_GetVarX(*insptr++)); - } - continue; - - case CON_SUBVAR: - insptr++; - Gv_SetVarX(*insptr, Gv_GetVarX(*insptr) - *(insptr+1)); - insptr += 2; - continue; - - case CON_SUBVARVAR: - insptr++; - { - int32_t j=*insptr++; - Gv_SetVarX(j, Gv_GetVarX(j) - Gv_GetVarX(*insptr++)); - } - continue; - - case CON_ADDVAR: - insptr++; - Gv_SetVarX(*insptr, Gv_GetVarX(*insptr) + *(insptr+1)); - insptr += 2; - continue; - - case CON_SHIFTVARL: - insptr++; - Gv_SetVarX(*insptr, Gv_GetVarX(*insptr) << *(insptr+1)); - insptr += 2; - continue; - - case CON_SHIFTVARR: - insptr++; - Gv_SetVarX(*insptr, Gv_GetVarX(*insptr) >> *(insptr+1)); - insptr += 2; - continue; - - case CON_SIN: - insptr++; - Gv_SetVarX(*insptr, sintable[Gv_GetVarX(*(insptr+1))&2047]); - insptr += 2; - continue; - - case CON_COS: - insptr++; - Gv_SetVarX(*insptr, sintable[(Gv_GetVarX(*(insptr+1))+512)&2047]); - insptr += 2; - continue; - - case CON_ADDVARVAR: - insptr++; - { - int32_t j=*insptr++; - Gv_SetVarX(j, Gv_GetVarX(j) + Gv_GetVarX(*insptr++)); - } - continue; - - case CON_SPGETLOTAG: - insptr++; - Gv_SetVarX(g_iLoTagID, vm.g_sp->lotag); - continue; - - case CON_SPGETHITAG: - insptr++; - Gv_SetVarX(g_iHiTagID, vm.g_sp->hitag); - continue; - - case CON_SECTGETLOTAG: - insptr++; - Gv_SetVarX(g_iLoTagID, sector[vm.g_sp->sectnum].lotag); - continue; - - case CON_SECTGETHITAG: - insptr++; - Gv_SetVarX(g_iHiTagID, sector[vm.g_sp->sectnum].hitag); - continue; - - case CON_GETTEXTUREFLOOR: - insptr++; - Gv_SetVarX(g_iTextureID, sector[vm.g_sp->sectnum].floorpicnum); - continue; - - case CON_STARTTRACK: - case CON_STARTTRACKVAR: - insptr++; - if (tw == CON_STARTTRACK) g_musicIndex=(ud.volume_number*MAXLEVELS)+(*(insptr++)); - else g_musicIndex=(ud.volume_number*MAXLEVELS)+(Gv_GetVarX(*(insptr++))); - if (MapInfo[(uint8_t)g_musicIndex].musicfn == NULL) - { - OSD_Printf(CON_ERROR "null music for map %d\n",g_errorLineNum,keyw[g_tw],g_musicIndex); - continue; - } - S_PlayMusic(&MapInfo[(uint8_t)g_musicIndex].musicfn[0],g_musicIndex); - continue; - - case CON_ACTIVATECHEAT: - insptr++; - { - int32_t j=Gv_GetVarX(*(insptr++)); - if (numplayers != 1 || !(g_player[myconnectindex].ps->gm & MODE_GAME)) - { - OSD_Printf(CON_ERROR "not in a single-player game.\n",g_errorLineNum,keyw[g_tw]); - continue; - } - osdcmd_cheatsinfo_stat.cheatnum = j; - } - continue; - - case CON_SETGAMEPALETTE: - insptr++; - P_SetGamePalette(g_player[vm.g_p].ps, Gv_GetVarX(*(insptr++)),0); - continue; - - case CON_GETTEXTURECEILING: - insptr++; - Gv_SetVarX(g_iTextureID, sector[vm.g_sp->sectnum].ceilingpicnum); - continue; - - case CON_IFVARVARAND: - insptr++; - { - int32_t j = Gv_GetVarX(*insptr++); - j &= Gv_GetVarX(*insptr++); - insptr--; - VM_DoConditional(j); - } - continue; - - case CON_IFVARVAROR: - insptr++; - { - int32_t j = Gv_GetVarX(*insptr++); - j |= Gv_GetVarX(*insptr++); - insptr--; - VM_DoConditional(j); - } - continue; - - case CON_IFVARVARXOR: - insptr++; - { - int32_t j = Gv_GetVarX(*insptr++); - j ^= Gv_GetVarX(*insptr++); - insptr--; - VM_DoConditional(j); - } - continue; - - case CON_IFVARVAREITHER: - insptr++; - { - int32_t j = Gv_GetVarX(*insptr++); - int32_t l = Gv_GetVarX(*insptr++); - insptr--; - VM_DoConditional(j || l); - } - continue; - - case CON_IFVARVARN: - insptr++; - { - int32_t j = Gv_GetVarX(*insptr++); - j = (j != Gv_GetVarX(*insptr++)); - insptr--; - VM_DoConditional(j); - } - continue; - - case CON_IFVARVARE: - insptr++; - { - int32_t j = Gv_GetVarX(*insptr++); - j = (j == Gv_GetVarX(*insptr++)); - insptr--; - VM_DoConditional(j); - } - continue; - - case CON_IFVARVARG: - insptr++; - { - int32_t j = Gv_GetVarX(*insptr++); - j = (j > Gv_GetVarX(*insptr++)); - insptr--; - VM_DoConditional(j); - } - continue; - - case CON_IFVARVARL: - insptr++; - { - int32_t j = Gv_GetVarX(*insptr++); - j = (j < Gv_GetVarX(*insptr++)); - insptr--; - VM_DoConditional(j); - } - continue; - - case CON_IFVARE: - insptr++; - { - int32_t j=Gv_GetVarX(*insptr++); - VM_DoConditional(j == *insptr); - } - continue; - - case CON_IFVARN: - insptr++; - { - int32_t j=Gv_GetVarX(*insptr++); - VM_DoConditional(j != *insptr); - } - continue; - - case CON_WHILEVARN: - { - intptr_t *savedinsptr=insptr+2; - int32_t j; - do - { - insptr=savedinsptr; - j = (Gv_GetVarX(*(insptr-1)) != *insptr); - VM_DoConditional(j); - } - while (j); - continue; - } - - case CON_WHILEVARVARN: - { - int32_t j; - intptr_t *savedinsptr=insptr+2; - do - { - insptr=savedinsptr; - j = Gv_GetVarX(*(insptr-1)); - j = (j != Gv_GetVarX(*insptr++)); - insptr--; - VM_DoConditional(j); - } - while (j); - continue; - } - - case CON_IFVARAND: - insptr++; - { - int32_t j=Gv_GetVarX(*insptr++); - VM_DoConditional(j & *insptr); - } - continue; - - case CON_IFVAROR: - insptr++; - { - int32_t j=Gv_GetVarX(*insptr++); - VM_DoConditional(j | *insptr); - } - continue; - - case CON_IFVARXOR: - insptr++; - { - int32_t j=Gv_GetVarX(*insptr++); - VM_DoConditional(j ^ *insptr); - } - continue; - - case CON_IFVAREITHER: - insptr++; - { - int32_t j=Gv_GetVarX(*insptr++); - VM_DoConditional(j || *insptr); - } - continue; - - case CON_IFVARG: - insptr++; - { - int32_t j=Gv_GetVarX(*insptr++); - VM_DoConditional(j > *insptr); - } - continue; - - case CON_IFVARL: - insptr++; - { - int32_t j=Gv_GetVarX(*insptr++); - VM_DoConditional(j < *insptr); - } - continue; - - case CON_IFPHEALTHL: - insptr++; - VM_DoConditional(sprite[g_player[vm.g_p].ps->i].extra < *insptr); - continue; - - case CON_IFPINVENTORY: - insptr++; - { - int32_t j = 0; - switch (*insptr++) - { - case GET_STEROIDS: - if (g_player[vm.g_p].ps->inv_amount[GET_STEROIDS] != *insptr) - j = 1; - break; - case GET_SHIELD: - if (g_player[vm.g_p].ps->inv_amount[GET_SHIELD] != g_player[vm.g_p].ps->max_shield_amount) - j = 1; - break; - case GET_SCUBA: - if (g_player[vm.g_p].ps->inv_amount[GET_SCUBA] != *insptr) j = 1; - break; - case GET_HOLODUKE: - if (g_player[vm.g_p].ps->inv_amount[GET_HOLODUKE] != *insptr) j = 1; - break; - case GET_JETPACK: - if (g_player[vm.g_p].ps->inv_amount[GET_JETPACK] != *insptr) j = 1; - break; - case GET_ACCESS: - switch (vm.g_sp->pal) - { - case 0: - if (g_player[vm.g_p].ps->got_access&1) j = 1; - break; - case 21: - if (g_player[vm.g_p].ps->got_access&2) j = 1; - break; - case 23: - if (g_player[vm.g_p].ps->got_access&4) j = 1; - break; - } - break; - case GET_HEATS: - if (g_player[vm.g_p].ps->inv_amount[GET_HEATS] != *insptr) j = 1; - break; - case GET_FIRSTAID: - if (g_player[vm.g_p].ps->inv_amount[GET_FIRSTAID] != *insptr) j = 1; - break; - case GET_BOOTS: - if (g_player[vm.g_p].ps->inv_amount[GET_BOOTS] != *insptr) j = 1; - break; - default: - OSD_Printf(CON_ERROR "invalid inventory ID: %d\n",g_errorLineNum,keyw[g_tw],(int32_t)*(insptr-1)); - } - - VM_DoConditional(j); - continue; - } - - case CON_PSTOMP: - insptr++; - if (g_player[vm.g_p].ps->knee_incs == 0 && sprite[g_player[vm.g_p].ps->i].xrepeat >= 40) - if (cansee(vm.g_sp->x,vm.g_sp->y,vm.g_sp->z-(4<<8),vm.g_sp->sectnum,g_player[vm.g_p].ps->pos.x, - g_player[vm.g_p].ps->pos.y,g_player[vm.g_p].ps->pos.z+(16<<8),sprite[g_player[vm.g_p].ps->i].sectnum)) - { - int32_t j = playerswhenstarted-1; - for (; j>=0; j--) - { - if (g_player[j].ps->actorsqu == vm.g_i) - break; - } - if (j == -1) - { - g_player[vm.g_p].ps->knee_incs = 1; - if (g_player[vm.g_p].ps->weapon_pos == 0) - g_player[vm.g_p].ps->weapon_pos = -1; - g_player[vm.g_p].ps->actorsqu = vm.g_i; - } - } - continue; - - case CON_IFAWAYFROMWALL: - { - int16_t s1=vm.g_sp->sectnum; - int32_t j = 0; - - updatesector(vm.g_sp->x+108,vm.g_sp->y+108,&s1); - if (s1 == vm.g_sp->sectnum) - { - updatesector(vm.g_sp->x-108,vm.g_sp->y-108,&s1); - if (s1 == vm.g_sp->sectnum) - { - updatesector(vm.g_sp->x+108,vm.g_sp->y-108,&s1); - if (s1 == vm.g_sp->sectnum) - { - updatesector(vm.g_sp->x-108,vm.g_sp->y+108,&s1); - if (s1 == vm.g_sp->sectnum) - j = 1; - } - } - } - VM_DoConditional(j); - } - continue; - - case CON_QUOTE: - insptr++; - - if ((ScriptQuotes[*insptr] == NULL)) - { - OSD_Printf(CON_ERROR "null quote %d\n",g_errorLineNum,keyw[g_tw],(int32_t)*insptr); - insptr++; - continue; - } - - if ((unsigned)vm.g_p >= MAXPLAYERS) - { - OSD_Printf(CON_ERROR "bad player for quote %d: (%d)\n",g_errorLineNum,keyw[g_tw],(int32_t)*insptr,vm.g_p); - insptr++; - continue; - } - - P_DoQuote(*(insptr++)|MAXQUOTES,g_player[vm.g_p].ps); - continue; - - case CON_USERQUOTE: - insptr++; - { - int32_t i=Gv_GetVarX(*insptr++); - - if ((ScriptQuotes[i] == NULL)) - { - OSD_Printf(CON_ERROR "null quote %d\n",g_errorLineNum,keyw[g_tw],i); - continue; - } - G_AddUserQuote(ScriptQuotes[i]); - } - continue; - - case CON_IFINOUTERSPACE: - VM_DoConditional(G_CheckForSpaceFloor(vm.g_sp->sectnum)); - continue; - - case CON_IFNOTMOVING: - VM_DoConditional((actor[vm.g_i].movflag&49152) > 16384); - continue; - - case CON_RESPAWNHITAG: - insptr++; - switch (DynamicTileMap[vm.g_sp->picnum]) - { - case FEM1__STATIC: - case FEM2__STATIC: - case FEM3__STATIC: - case FEM4__STATIC: - case FEM5__STATIC: - case FEM6__STATIC: - case FEM7__STATIC: - case FEM8__STATIC: - case FEM9__STATIC: - case FEM10__STATIC: - case PODFEM1__STATIC: - case NAKED1__STATIC: - case STATUE__STATIC: - if (vm.g_sp->yvel) G_OperateRespawns(vm.g_sp->yvel); - break; - default: - if (vm.g_sp->hitag >= 0) G_OperateRespawns(vm.g_sp->hitag); - break; - } - continue; - - case CON_IFSPRITEPAL: - insptr++; - VM_DoConditional(vm.g_sp->pal == *insptr); - continue; - - case CON_IFANGDIFFL: - insptr++; - { - int32_t j = klabs(G_GetAngleDelta(g_player[vm.g_p].ps->ang,vm.g_sp->ang)); - VM_DoConditional(j <= *insptr); - } - continue; - - case CON_IFNOSOUNDS: - { - int32_t j = MAXSOUNDS-1; - for (; j>=0; j--) - { - int32_t k = 0; - - for (; kpicnum] == 0) return; - - insptr = actorLoadEventScrptr[vm.g_sp->picnum]; - - vm.g_flags &= ~(VM_RETURN|VM_KILL|VM_NOEXECUTE); - - if ((unsigned)vm.g_sp->sectnum >= MAXSECTORS) - { - // if(A_CheckEnemySprite(vm.g_sp)) - // g_player[vm.g_p].ps->actors_killed++; - deletesprite(vm.g_i); - return; - } - - VM_Execute(0); - - if (vm.g_flags & VM_KILL) - deletesprite(vm.g_i); -} - -void A_Execute(int32_t iActor,int32_t iPlayer,int32_t lDist) -{ - vmstate_t tempvm = { iActor, iPlayer, lDist, &actor[iActor].t_data[0], - &sprite[iActor], 0 - }; - - if (g_netClient && A_CheckSpriteFlags(iActor, SPRITE_NULL)) - { - deletesprite(iActor); - return; - } - - if (g_netServer || g_netClient) - randomseed = ticrandomseed; - - Bmemcpy(&vm, &tempvm, sizeof(vmstate_t)); - - insptr = 4 + (actorscrptr[vm.g_sp->picnum]); - - if ((unsigned)vm.g_sp->sectnum >= MAXSECTORS) - { - if (A_CheckEnemySprite(vm.g_sp)) - g_player[vm.g_p].ps->actors_killed++; - deletesprite(vm.g_i); - return; - } - - /* Qbix: Changed variables to be aware of the sizeof *insptr - * (whether it is int32_t vs intptr_t), Although it is specifically cast to intptr_t* - * which might be corrected if the code is converted to use offsets */ - if ((unsigned)(vm.g_t[4]-(intptr_t)&script[0]) <= (unsigned)((intptr_t)&script[g_scriptSize]-(intptr_t)&script[0])) - { - vm.g_sp->lotag += TICSPERFRAME; - - if (vm.g_sp->lotag > *(intptr_t *)(vm.g_t[4]+4*sizeof(*insptr))) - { - vm.g_t[2]++; - vm.g_sp->lotag = 0; - vm.g_t[3] += *(intptr_t *)(vm.g_t[4]+3*sizeof(*insptr)); - } - - if (klabs(vm.g_t[3]) >= klabs(*(intptr_t *)(vm.g_t[4]+sizeof(*insptr)) * *(intptr_t *)(vm.g_t[4]+3*sizeof(*insptr)))) - vm.g_t[3] = 0; - } - - VM_Execute(0); - - if (vm.g_flags & VM_KILL) - { - // if player was set to squish, first stop that... - if (vm.g_p >= 0 && g_player[vm.g_p].ps->actorsqu == vm.g_i) - g_player[vm.g_p].ps->actorsqu = -1; - - deletesprite(vm.g_i); - return; - } - - VM_Move(); - - /* if (ud.angleinterpolation) - { - temp = (vm.g_sp->ang & 2047) - sprpos[vm.g_i].ang; - sprpos[vm.g_i].oldang = sprpos[vm.g_i].ang; - if (temp) - { - temp2 = temp/klabs(temp); - if (klabs(temp) > 1024) temp2 = -(temp2); - sprpos[vm.g_i].angdir = temp2; - sprpos[vm.g_i].angdif = min(ud.angleinterpolation,klabs(temp)); - sprpos[vm.g_i].ang += sprpos[vm.g_i].angdif * sprpos[vm.g_i].angdir; - sprpos[vm.g_i].ang &= 2047; - } - } - */ - if (vm.g_sp->statnum == STAT_STANDABLE) - switch (DynamicTileMap[vm.g_sp->picnum]) - { - case RUBBERCAN__STATIC: - case EXPLODINGBARREL__STATIC: - case WOODENHORSE__STATIC: - case HORSEONSIDE__STATIC: - case CANWITHSOMETHING__STATIC: - case FIREBARREL__STATIC: - case NUKEBARREL__STATIC: - case NUKEBARRELDENTED__STATIC: - case NUKEBARRELLEAKED__STATIC: - case TRIPBOMB__STATIC: - case EGG__STATIC: - if (actor[vm.g_i].timetosleep > 1) - actor[vm.g_i].timetosleep--; - else if (actor[vm.g_i].timetosleep == 1) - changespritestat(vm.g_i,STAT_ZOMBIEACTOR); - default: - return; - } - - if (vm.g_sp->statnum != 1) - return; - - if (A_CheckEnemySprite(vm.g_sp)) - { - if (vm.g_sp->xrepeat > 60) return; - if (ud.respawn_monsters == 1 && vm.g_sp->extra <= 0) return; - } - else if (ud.respawn_items == 1 && (vm.g_sp->cstat&32768)) return; - - if (A_CheckSpriteFlags(vm.g_i, SPRITE_USEACTIVATOR) && sector[vm.g_sp->sectnum].lotag & 16384) - changespritestat(vm.g_i,STAT_ZOMBIEACTOR); - else if (actor[vm.g_i].timetosleep > 1) - actor[vm.g_i].timetosleep--; - else if (actor[vm.g_i].timetosleep == 1) - changespritestat(vm.g_i,STAT_ZOMBIEACTOR); -} - -void G_SaveMapState(mapstate_t *save) -{ - if (save != NULL) - { - int32_t i; - intptr_t j; - - Bmemcpy(&save->numwalls,&numwalls,sizeof(numwalls)); - Bmemcpy(&save->wall[0],&wall[0],sizeof(walltype)*MAXWALLS); - Bmemcpy(&save->numsectors,&numsectors,sizeof(numsectors)); - Bmemcpy(&save->sector[0],§or[0],sizeof(sectortype)*MAXSECTORS); - Bmemcpy(&save->sprite[0],&sprite[0],sizeof(spritetype)*MAXSPRITES); - Bmemcpy(&save->spriteext[0],&spriteext[0],sizeof(spriteext_t)*MAXSPRITES); - Bmemcpy(&save->headspritesect[0],&headspritesect[0],sizeof(headspritesect)); - Bmemcpy(&save->prevspritesect[0],&prevspritesect[0],sizeof(prevspritesect)); - Bmemcpy(&save->nextspritesect[0],&nextspritesect[0],sizeof(nextspritesect)); - Bmemcpy(&save->headspritestat[0],&headspritestat[0],sizeof(headspritestat)); - Bmemcpy(&save->prevspritestat[0],&prevspritestat[0],sizeof(prevspritestat)); - Bmemcpy(&save->nextspritestat[0],&nextspritestat[0],sizeof(nextspritestat)); - - for (i=MAXSPRITES-1; i>=0; i--) - { - save->scriptptrs[i] = 0; - - if (actorscrptr[PN] == 0) continue; - - j = (intptr_t)&script[0]; - - if (T2 >= j && T2 < (intptr_t)(&script[g_scriptSize])) - { - save->scriptptrs[i] |= 1; - T2 -= j; - } - if (T5 >= j && T5 < (intptr_t)(&script[g_scriptSize])) - { - save->scriptptrs[i] |= 2; - T5 -= j; - } - if (T6 >= j && T6 < (intptr_t)(&script[g_scriptSize])) - { - save->scriptptrs[i] |= 4; - T6 -= j; - } - } - - Bmemcpy(&save->actor[0],&actor[0],sizeof(actor_t)*MAXSPRITES); - - for (i=MAXSPRITES-1; i>=0; i--) - { - if (actorscrptr[PN] == 0) continue; - j = (intptr_t)&script[0]; - - if (save->scriptptrs[i]&1) - T2 += j; - if (save->scriptptrs[i]&2) - T5 += j; - if (save->scriptptrs[i]&4) - T6 += j; - } - - Bmemcpy(&save->g_numCyclers,&g_numCyclers,sizeof(g_numCyclers)); - Bmemcpy(&save->cyclers[0][0],&cyclers[0][0],sizeof(cyclers)); - Bmemcpy(&save->g_playerSpawnPoints[0],&g_playerSpawnPoints[0],sizeof(g_playerSpawnPoints)); - Bmemcpy(&save->g_numAnimWalls,&g_numAnimWalls,sizeof(g_numAnimWalls)); - Bmemcpy(&save->SpriteDeletionQueue[0],&SpriteDeletionQueue[0],sizeof(SpriteDeletionQueue)); - Bmemcpy(&save->g_spriteDeleteQueuePos,&g_spriteDeleteQueuePos,sizeof(g_spriteDeleteQueuePos)); - Bmemcpy(&save->animwall[0],&animwall[0],sizeof(animwall)); - Bmemcpy(&save->msx[0],&msx[0],sizeof(msx)); - Bmemcpy(&save->msy[0],&msy[0],sizeof(msy)); - Bmemcpy(&save->g_mirrorWall[0],&g_mirrorWall[0],sizeof(g_mirrorWall)); - Bmemcpy(&save->g_mirrorSector[0],&g_mirrorSector[0],sizeof(g_mirrorSector)); - Bmemcpy(&save->g_mirrorCount,&g_mirrorCount,sizeof(g_mirrorCount)); - Bmemcpy(&save->show2dsector[0],&show2dsector[0],sizeof(show2dsector)); - Bmemcpy(&save->g_numClouds,&g_numClouds,sizeof(g_numClouds)); - Bmemcpy(&save->clouds[0],&clouds[0],sizeof(clouds)); - Bmemcpy(&save->cloudx[0],&cloudx[0],sizeof(cloudx)); - Bmemcpy(&save->cloudy[0],&cloudy[0],sizeof(cloudy)); - Bmemcpy(&save->pskyoff[0],&pskyoff[0],sizeof(pskyoff)); - Bmemcpy(&save->pskybits,&pskybits,sizeof(pskybits)); - Bmemcpy(&save->animategoal[0],&animategoal[0],sizeof(animategoal)); - Bmemcpy(&save->animatevel[0],&animatevel[0],sizeof(animatevel)); - Bmemcpy(&save->g_animateCount,&g_animateCount,sizeof(g_animateCount)); - Bmemcpy(&save->animatesect[0],&animatesect[0],sizeof(animatesect)); - for (i = g_animateCount-1; i>=0; i--) animateptr[i] = (int32_t *)((intptr_t)animateptr[i]-(intptr_t)(§or[0])); - Bmemcpy(&save->animateptr[0],&animateptr[0],sizeof(animateptr)); - for (i = g_animateCount-1; i>=0; i--) animateptr[i] = (int32_t *)((intptr_t)animateptr[i]+(intptr_t)(§or[0])); - Bmemcpy(&save->g_numPlayerSprites,&g_numPlayerSprites,sizeof(g_numPlayerSprites)); - Bmemcpy(&save->g_earthquakeTime,&g_earthquakeTime,sizeof(g_earthquakeTime)); - Bmemcpy(&save->lockclock,&lockclock,sizeof(lockclock)); - Bmemcpy(&save->randomseed,&randomseed,sizeof(randomseed)); - Bmemcpy(&save->g_globalRandom,&g_globalRandom,sizeof(g_globalRandom)); - - for (i=g_gameVarCount-1; i>=0; i--) - { - if (aGameVars[i].dwFlags & GAMEVAR_NORESET) continue; - if (aGameVars[i].dwFlags & GAMEVAR_PERPLAYER) - { - if (!save->vars[i]) - save->vars[i] = Bcalloc(MAXPLAYERS,sizeof(intptr_t)); - Bmemcpy(&save->vars[i][0],&aGameVars[i].val.plValues[0],sizeof(intptr_t) * MAXPLAYERS); - } - else if (aGameVars[i].dwFlags & GAMEVAR_PERACTOR) - { - if (!save->vars[i]) - save->vars[i] = Bcalloc(MAXSPRITES,sizeof(intptr_t)); - Bmemcpy(&save->vars[i][0],&aGameVars[i].val.plValues[0],sizeof(intptr_t) * MAXSPRITES); - } - else save->vars[i] = (intptr_t *)aGameVars[i].val.lValue; - } - - ototalclock = totalclock; - } -} - -extern void Gv_RefreshPointers(void); - -void G_RestoreMapState(mapstate_t *save) -{ - if (save != NULL) - { - int32_t i, k, x; - intptr_t j; - char phealth[MAXPLAYERS]; - - for (i=0; ii].extra; - - pub = NUMPAGES; - pus = NUMPAGES; - G_UpdateScreenArea(); - - Bmemcpy(&numwalls,&save->numwalls,sizeof(numwalls)); - Bmemcpy(&wall[0],&save->wall[0],sizeof(walltype)*MAXWALLS); - Bmemcpy(&numsectors,&save->numsectors,sizeof(numsectors)); - Bmemcpy(§or[0],&save->sector[0],sizeof(sectortype)*MAXSECTORS); - Bmemcpy(&sprite[0],&save->sprite[0],sizeof(spritetype)*MAXSPRITES); - Bmemcpy(&spriteext[0],&save->spriteext[0],sizeof(spriteext_t)*MAXSPRITES); - Bmemcpy(&headspritesect[0],&save->headspritesect[0],sizeof(headspritesect)); - Bmemcpy(&prevspritesect[0],&save->prevspritesect[0],sizeof(prevspritesect)); - Bmemcpy(&nextspritesect[0],&save->nextspritesect[0],sizeof(nextspritesect)); - Bmemcpy(&headspritestat[0],&save->headspritestat[0],sizeof(headspritestat)); - Bmemcpy(&prevspritestat[0],&save->prevspritestat[0],sizeof(prevspritestat)); - Bmemcpy(&nextspritestat[0],&save->nextspritestat[0],sizeof(nextspritestat)); - Bmemcpy(&actor[0],&save->actor[0],sizeof(actor_t)*MAXSPRITES); - - for (i=MAXSPRITES-1; i>=0; i--) - { - j = (intptr_t)(&script[0]); - if (save->scriptptrs[i]&1) T2 += j; - if (save->scriptptrs[i]&2) T5 += j; - if (save->scriptptrs[i]&4) T6 += j; - } - - Bmemcpy(&g_numCyclers,&save->g_numCyclers,sizeof(g_numCyclers)); - Bmemcpy(&cyclers[0][0],&save->cyclers[0][0],sizeof(cyclers)); - Bmemcpy(&g_playerSpawnPoints[0],&save->g_playerSpawnPoints[0],sizeof(g_playerSpawnPoints)); - Bmemcpy(&g_numAnimWalls,&save->g_numAnimWalls,sizeof(g_numAnimWalls)); - Bmemcpy(&SpriteDeletionQueue[0],&save->SpriteDeletionQueue[0],sizeof(SpriteDeletionQueue)); - Bmemcpy(&g_spriteDeleteQueuePos,&save->g_spriteDeleteQueuePos,sizeof(g_spriteDeleteQueuePos)); - Bmemcpy(&animwall[0],&save->animwall[0],sizeof(animwall)); - Bmemcpy(&msx[0],&save->msx[0],sizeof(msx)); - Bmemcpy(&msy[0],&save->msy[0],sizeof(msy)); - Bmemcpy(&g_mirrorWall[0],&save->g_mirrorWall[0],sizeof(g_mirrorWall)); - Bmemcpy(&g_mirrorSector[0],&save->g_mirrorSector[0],sizeof(g_mirrorSector)); - Bmemcpy(&g_mirrorCount,&save->g_mirrorCount,sizeof(g_mirrorCount)); - Bmemcpy(&show2dsector[0],&save->show2dsector[0],sizeof(show2dsector)); - Bmemcpy(&g_numClouds,&save->g_numClouds,sizeof(g_numClouds)); - Bmemcpy(&clouds[0],&save->clouds[0],sizeof(clouds)); - Bmemcpy(&cloudx[0],&save->cloudx[0],sizeof(cloudx)); - Bmemcpy(&cloudy[0],&save->cloudy[0],sizeof(cloudy)); - Bmemcpy(&pskyoff[0],&save->pskyoff[0],sizeof(pskyoff)); - Bmemcpy(&pskybits,&save->pskybits,sizeof(pskybits)); - Bmemcpy(&animategoal[0],&save->animategoal[0],sizeof(animategoal)); - Bmemcpy(&animatevel[0],&save->animatevel[0],sizeof(animatevel)); - Bmemcpy(&g_animateCount,&save->g_animateCount,sizeof(g_animateCount)); - Bmemcpy(&animatesect[0],&save->animatesect[0],sizeof(animatesect)); - Bmemcpy(&animateptr[0],&save->animateptr[0],sizeof(animateptr)); - for (i = g_animateCount-1; i>=0; i--) animateptr[i] = (int32_t *)((intptr_t)animateptr[i]+(intptr_t)(§or[0])); - Bmemcpy(&g_numPlayerSprites,&save->g_numPlayerSprites,sizeof(g_numPlayerSprites)); - Bmemcpy(&g_earthquakeTime,&save->g_earthquakeTime,sizeof(g_earthquakeTime)); - Bmemcpy(&lockclock,&save->lockclock,sizeof(lockclock)); - Bmemcpy(&randomseed,&save->randomseed,sizeof(randomseed)); - Bmemcpy(&g_globalRandom,&save->g_globalRandom,sizeof(g_globalRandom)); - - for (i=g_gameVarCount-1; i>=0; i--) - { - if (aGameVars[i].dwFlags & GAMEVAR_NORESET) continue; - if (aGameVars[i].dwFlags & GAMEVAR_PERPLAYER) - { - if (!save->vars[i]) continue; - Bmemcpy(&aGameVars[i].val.plValues[0],&save->vars[i][0],sizeof(intptr_t) * MAXPLAYERS); - } - else if (aGameVars[i].dwFlags & GAMEVAR_PERACTOR) - { - if (!save->vars[i]) continue; - Bmemcpy(&aGameVars[i].val.plValues[0],&save->vars[i][0],sizeof(intptr_t) * MAXSPRITES); - } - else aGameVars[i].val.lValue = (intptr_t)save->vars[i]; - } - - Gv_RefreshPointers(); - - for (i=0; ii].extra = phealth[i]; - - if (g_player[myconnectindex].ps->over_shoulder_on != 0) - { - g_cameraDistance = 0; - g_cameraClock = 0; - g_player[myconnectindex].ps->over_shoulder_on = 1; - } - - screenpeek = myconnectindex; - - if (ud.lockout == 0) - { - for (x=g_numAnimWalls-1; x>=0; x--) - if (wall[animwall[x].wallnum].extra >= 0) - wall[animwall[x].wallnum].picnum = wall[animwall[x].wallnum].extra; - } - else - { - for (x=g_numAnimWalls-1; x>=0; x--) - switch (DynamicTileMap[wall[animwall[x].wallnum].picnum]) - { - case FEMPIC1__STATIC: - wall[animwall[x].wallnum].picnum = BLANKSCREEN; - break; - case FEMPIC2__STATIC: - case FEMPIC3__STATIC: - wall[animwall[x].wallnum].picnum = SCREENBREAK6; - break; - } - } - - g_numInterpolations = 0; - startofdynamicinterpolations = 0; - - k = headspritestat[STAT_EFFECTOR]; - while (k >= 0) - { - switch (sprite[k].lotag) - { - case 31: - G_SetInterpolation(§or[sprite[k].sectnum].floorz); - break; - case 32: - G_SetInterpolation(§or[sprite[k].sectnum].ceilingz); - break; - case 25: - G_SetInterpolation(§or[sprite[k].sectnum].floorz); - G_SetInterpolation(§or[sprite[k].sectnum].ceilingz); - break; - case 17: - G_SetInterpolation(§or[sprite[k].sectnum].floorz); - G_SetInterpolation(§or[sprite[k].sectnum].ceilingz); - break; - case 0: - case 5: - case 6: - case 11: - case 14: - case 15: - case 16: - case 26: - case 30: - Sect_SetInterpolation(k); - break; - } - - k = nextspritestat[k]; - } - - for (i=g_numInterpolations-1; i>=0; i--) bakipos[i] = *curipos[i]; - for (i = g_animateCount-1; i>=0; i--) - G_SetInterpolation(animateptr[i]); - - Net_ResetPrediction(); - - G_ClearFIFO(); - G_ResetTimers(); - } -} diff --git a/polymer-perf/eduke32/source/gameexec.h b/polymer-perf/eduke32/source/gameexec.h deleted file mode 100644 index 6a8ff7718..000000000 --- a/polymer-perf/eduke32/source/gameexec.h +++ /dev/null @@ -1,139 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#ifndef __gameexec_h__ -#define __gameexec_h__ - -// the order of these can't be changed or else compatibility with EDuke 2.0 mods will break -enum GameEvent_t { - EVENT_INIT, - EVENT_ENTERLEVEL, - EVENT_RESETWEAPONS, - EVENT_RESETINVENTORY, - EVENT_HOLSTER, - EVENT_LOOKLEFT, - EVENT_LOOKRIGHT, - EVENT_SOARUP, - EVENT_SOARDOWN, - EVENT_CROUCH, - EVENT_JUMP, - EVENT_RETURNTOCENTER, - EVENT_LOOKUP, - EVENT_LOOKDOWN, - EVENT_AIMUP, - EVENT_FIRE, - EVENT_CHANGEWEAPON, - EVENT_GETSHOTRANGE, - EVENT_GETAUTOAIMANGLE, - EVENT_GETLOADTILE, - EVENT_CHEATGETSTEROIDS, - EVENT_CHEATGETHEAT, - EVENT_CHEATGETBOOT, - EVENT_CHEATGETSHIELD, - EVENT_CHEATGETSCUBA, - EVENT_CHEATGETHOLODUKE, - EVENT_CHEATGETJETPACK, - EVENT_CHEATGETFIRSTAID, - EVENT_QUICKKICK, - EVENT_INVENTORY, - EVENT_USENIGHTVISION, - EVENT_USESTEROIDS, - EVENT_INVENTORYLEFT, - EVENT_INVENTORYRIGHT, - EVENT_HOLODUKEON, - EVENT_HOLODUKEOFF, - EVENT_USEMEDKIT, - EVENT_USEJETPACK, - EVENT_TURNAROUND, - EVENT_DISPLAYWEAPON, - EVENT_FIREWEAPON, - EVENT_SELECTWEAPON, - EVENT_MOVEFORWARD, - EVENT_MOVEBACKWARD, - EVENT_TURNLEFT, - EVENT_TURNRIGHT, - EVENT_STRAFELEFT, - EVENT_STRAFERIGHT, - EVENT_WEAPKEY1, - EVENT_WEAPKEY2, - EVENT_WEAPKEY3, - EVENT_WEAPKEY4, - EVENT_WEAPKEY5, - EVENT_WEAPKEY6, - EVENT_WEAPKEY7, - EVENT_WEAPKEY8, - EVENT_WEAPKEY9, - EVENT_WEAPKEY10, - EVENT_DRAWWEAPON, - EVENT_DISPLAYCROSSHAIR, - EVENT_DISPLAYREST, - EVENT_DISPLAYSBAR, - EVENT_RESETPLAYER, - EVENT_INCURDAMAGE, - EVENT_AIMDOWN, - EVENT_GAME, - EVENT_PREVIOUSWEAPON, - EVENT_NEXTWEAPON, - EVENT_SWIMUP, - EVENT_SWIMDOWN, - EVENT_GETMENUTILE, - EVENT_SPAWN, - EVENT_LOGO, - EVENT_EGS, - EVENT_DOFIRE, - EVENT_PRESSEDFIRE, - EVENT_USE, - EVENT_PROCESSINPUT, - EVENT_FAKEDOMOVETHINGS, - EVENT_DISPLAYROOMS, - EVENT_KILLIT, - EVENT_LOADACTOR, - EVENT_DISPLAYBONUSSCREEN, - EVENT_DISPLAYMENU, - EVENT_DISPLAYMENUREST, - EVENT_DISPLAYLOADINGSCREEN, - EVENT_ANIMATESPRITES, - EVENT_NEWGAME, - MAXEVENTS -}; - -extern int32_t g_errorLineNum; -extern int32_t g_tw; -extern int32_t ticrandomseed; -extern vmstate_t vm; - -void A_Execute(int32_t iActor,int32_t iPlayer,int32_t lDist); -void A_Fall(int32_t iActor); -int32_t A_FurthestVisiblePoint(int32_t iActor,spritetype *ts,int32_t *dax,int32_t *day); -int32_t A_GetFurthestAngle(int32_t iActor,int32_t angs); -void A_GetZLimits(int32_t iActor); -void A_LoadActor(int32_t iActor); -int32_t G_GetAngleDelta(int32_t a,int32_t na); -void G_RestoreMapState(mapstate_t *save); -void G_RestoreMapState(mapstate_t *save); -void G_SaveMapState(mapstate_t *save); -void G_SaveMapState(mapstate_t *save); -void Gv_RefreshPointers(void); -void VM_OnEvent(register int32_t iEventID,register int32_t iActor,register int32_t iPlayer,register int32_t lDist); -void VM_ScriptInfo(void); - -#endif diff --git a/polymer-perf/eduke32/source/gamestructures.c b/polymer-perf/eduke32/source/gamestructures.c deleted file mode 100644 index dc7aab420..000000000 --- a/polymer-perf/eduke32/source/gamestructures.c +++ /dev/null @@ -1,3822 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -/* -#include "duke3d.h" -#include "gamedef.h" -#include "osd.h" -*/ -// this is all the crap for accessing the game's structs through the CON VM -// I got a 3-4 fps gain by inlining these... - -#ifndef _gamevars_c_ -static void __fastcall VM_AccessUserdef(int32_t iSet, int32_t lLabelID, int32_t lVar2) -{ - int32_t lValue=0; - - if (vm.g_p != myconnectindex) - { - // if (lVar2 == MAXGAMEVARS) - // insptr++; - insptr += (lVar2 == MAXGAMEVARS); - return; - } - - if (iSet) - lValue=Gv_GetVarX(lVar2); - - switch (lLabelID) - { - case USERDEFS_GOD: - if (iSet) - { - ud.god = lValue; - return; - } - Gv_SetVarX(lVar2, ud.god); - return; - - case USERDEFS_WARP_ON: - if (iSet) - { - ud.warp_on = lValue; - return; - } - Gv_SetVarX(lVar2, ud.warp_on); - return; - - case USERDEFS_CASHMAN: - if (iSet) - { - ud.cashman = lValue; - return; - } - Gv_SetVarX(lVar2, ud.cashman); - return; - - case USERDEFS_EOG: - if (iSet) - { - ud.eog = lValue; - return; - } - Gv_SetVarX(lVar2, ud.eog); - return; - - case USERDEFS_SHOWALLMAP: - if (iSet) - { - ud.showallmap = lValue; - return; - } - Gv_SetVarX(lVar2, ud.showallmap); - return; - - case USERDEFS_SHOW_HELP: - if (iSet) - { - ud.show_help = lValue; - return; - } - Gv_SetVarX(lVar2, ud.show_help); - return; - - case USERDEFS_SCROLLMODE: - if (iSet) - { - ud.scrollmode = lValue; - return; - } - Gv_SetVarX(lVar2, ud.scrollmode); - return; - - case USERDEFS_CLIPPING: - if (iSet) - { - ud.clipping = lValue; - return; - } - Gv_SetVarX(lVar2, ud.clipping); - return; - - // case USERDEFS_USER_NAME: - // if(iSet) - // { - // ud.user_name[MAXPLAYERS][32] = lValue; - // return; - // } - // Gv_SetVarX(lVar2, ud.user_name[MAXPLAYERS][32]); - // return; - - // case USERDEFS_RIDECULE: - // if(iSet) - // { - // ud.ridecule = lValue; - // return; - // } - // Gv_SetVarX(lVar2, ud.ridecule); - // return; - - // case USERDEFS_SAVEGAME: - // if(iSet) - // { - // ud.savegame = lValue; - // return; - // } - // Gv_SetVarX(lVar2, ud.savegame); - // return; - - // case USERDEFS_PWLOCKOUT: - // if(iSet) - // { - // ud.pwlockout = lValue; - // return; - // } - // Gv_SetVarX(lVar2, ud.pwlockout); - // return; - - // case USERDEFS_RTSNAME: - // if(iSet) - // { - // ud.rtsname = lValue; - // return; - // } - // Gv_SetVarX(lVar2, ud.rtsname); - // return; - - case USERDEFS_OVERHEAD_ON: - if (iSet) - { - ud.overhead_on = lValue; - return; - } - Gv_SetVarX(lVar2, ud.overhead_on); - return; - - case USERDEFS_LAST_OVERHEAD: - if (iSet) - { - ud.last_overhead = lValue; - return; - } - Gv_SetVarX(lVar2, ud.last_overhead); - return; - - case USERDEFS_SHOWWEAPONS: - if (iSet) - { - ud.showweapons = lValue; - return; - } - Gv_SetVarX(lVar2, ud.showweapons); - return; - - case USERDEFS_PAUSE_ON: - if (iSet) - { - ud.pause_on = lValue; - return; - } - Gv_SetVarX(lVar2, ud.pause_on); - return; - - case USERDEFS_FROM_BONUS: - if (iSet) - { - ud.from_bonus = lValue; - return; - } - Gv_SetVarX(lVar2, ud.from_bonus); - return; - - case USERDEFS_CAMERASPRITE: - if (iSet) - { - ud.camerasprite = lValue; - return; - } - Gv_SetVarX(lVar2, ud.camerasprite); - return; - - case USERDEFS_LAST_CAMSPRITE: - if (iSet) - { - ud.last_camsprite = lValue; - return; - } - Gv_SetVarX(lVar2, ud.last_camsprite); - return; - - case USERDEFS_LAST_LEVEL: - if (iSet) - { - ud.last_level = lValue; - return; - } - Gv_SetVarX(lVar2, ud.last_level); - return; - - case USERDEFS_SECRETLEVEL: - if (iSet) - { - ud.secretlevel = lValue; - return; - } - Gv_SetVarX(lVar2, ud.secretlevel); - return; - - case USERDEFS_CONST_VISIBILITY: - if (iSet) - { - ud.const_visibility = lValue; - return; - } - Gv_SetVarX(lVar2, ud.const_visibility); - return; - - case USERDEFS_UW_FRAMERATE: - if (iSet) - { - ud.uw_framerate = lValue; - return; - } - Gv_SetVarX(lVar2, ud.uw_framerate); - return; - - case USERDEFS_CAMERA_TIME: - if (iSet) - { - ud.camera_time = lValue; - return; - } - Gv_SetVarX(lVar2, ud.camera_time); - return; - - case USERDEFS_FOLFVEL: - if (iSet) - { - ud.folfvel = lValue; - return; - } - Gv_SetVarX(lVar2, ud.folfvel); - return; - - case USERDEFS_FOLAVEL: - if (iSet) - { - ud.folavel = lValue; - return; - } - Gv_SetVarX(lVar2, ud.folavel); - return; - - case USERDEFS_FOLX: - if (iSet) - { - ud.folx = lValue; - return; - } - Gv_SetVarX(lVar2, ud.folx); - return; - - case USERDEFS_FOLY: - if (iSet) - { - ud.foly = lValue; - return; - } - Gv_SetVarX(lVar2, ud.foly); - return; - - case USERDEFS_FOLA: - if (iSet) - { - ud.fola = lValue; - return; - } - Gv_SetVarX(lVar2, ud.fola); - return; - - case USERDEFS_RECCNT: - if (iSet) - { - ud.reccnt = lValue; - return; - } - Gv_SetVarX(lVar2, ud.reccnt); - return; - - case USERDEFS_ENTERED_NAME: - if (iSet) - { - ud.entered_name = lValue; - return; - } - Gv_SetVarX(lVar2, ud.entered_name); - return; - - case USERDEFS_SCREEN_TILTING: - if (iSet) - { - ud.screen_tilting = lValue; - return; - } - Gv_SetVarX(lVar2, ud.screen_tilting); - return; - - case USERDEFS_SHADOWS: - if (iSet) - { - ud.shadows = lValue; - return; - } - Gv_SetVarX(lVar2, ud.shadows); - return; - - case USERDEFS_FTA_ON: - if (iSet) - { - ud.fta_on = lValue; - return; - } - Gv_SetVarX(lVar2, ud.fta_on); - return; - - case USERDEFS_EXECUTIONS: - if (iSet) - { - ud.executions = lValue; - return; - } - Gv_SetVarX(lVar2, ud.executions); - return; - - case USERDEFS_AUTO_RUN: - if (iSet) - { - ud.auto_run = lValue; - return; - } - Gv_SetVarX(lVar2, ud.auto_run); - return; - - case USERDEFS_COORDS: - if (iSet) - { - ud.coords = lValue; - return; - } - Gv_SetVarX(lVar2, ud.coords); - return; - - case USERDEFS_TICKRATE: - if (iSet) - { - ud.tickrate = lValue; - return; - } - Gv_SetVarX(lVar2, ud.tickrate); - return; - - case USERDEFS_M_COOP: - if (iSet) - { - ud.m_coop = lValue; - return; - } - Gv_SetVarX(lVar2, ud.m_coop); - return; - - case USERDEFS_COOP: - if (iSet) - { - ud.coop = lValue; - return; - } - Gv_SetVarX(lVar2, ud.coop); - return; - - case USERDEFS_SCREEN_SIZE: - if (iSet) - { - if (ud.screen_size != lValue) - { - ud.screen_size = lValue; - G_UpdateScreenArea(); - } - return; - } - Gv_SetVarX(lVar2, ud.screen_size); - return; - - case USERDEFS_LOCKOUT: - if (iSet) - { - ud.lockout = lValue; - return; - } - Gv_SetVarX(lVar2, ud.lockout); - return; - - case USERDEFS_CROSSHAIR: - if (iSet) - { - ud.crosshair = lValue; - return; - } - Gv_SetVarX(lVar2, ud.crosshair); - return; - - // case USERDEFS_WCHOICE: - // if(iSet) - // { - // ud.wchoice = lValue; - // return; - // } - // Gv_SetVarX(lVar2, ud.wchoice); - // return; - - case USERDEFS_PLAYERAI: - if (iSet) - { - ud.playerai = lValue; - return; - } - Gv_SetVarX(lVar2, ud.playerai); - return; - - case USERDEFS_RESPAWN_MONSTERS: - if (iSet) - { - ud.respawn_monsters = lValue; - return; - } - Gv_SetVarX(lVar2, ud.respawn_monsters); - return; - - case USERDEFS_RESPAWN_ITEMS: - if (iSet) - { - ud.respawn_items = lValue; - return; - } - Gv_SetVarX(lVar2, ud.respawn_items); - return; - - case USERDEFS_RESPAWN_INVENTORY: - if (iSet) - { - ud.respawn_inventory = lValue; - return; - } - Gv_SetVarX(lVar2, ud.respawn_inventory); - return; - - case USERDEFS_RECSTAT: - if (iSet) - { - ud.recstat = lValue; - return; - } - Gv_SetVarX(lVar2, ud.recstat); - return; - - case USERDEFS_MONSTERS_OFF: - if (iSet) - { - ud.monsters_off = lValue; - return; - } - Gv_SetVarX(lVar2, ud.monsters_off); - return; - - case USERDEFS_BRIGHTNESS: - if (iSet) - { - ud.brightness = lValue; - return; - } - Gv_SetVarX(lVar2, ud.brightness); - return; - - case USERDEFS_M_RESPAWN_ITEMS: - if (iSet) - { - ud.m_respawn_items = lValue; - return; - } - Gv_SetVarX(lVar2, ud.m_respawn_items); - return; - - case USERDEFS_M_RESPAWN_MONSTERS: - if (iSet) - { - ud.m_respawn_monsters = lValue; - return; - } - Gv_SetVarX(lVar2, ud.m_respawn_monsters); - return; - - case USERDEFS_M_RESPAWN_INVENTORY: - if (iSet) - { - ud.m_respawn_inventory = lValue; - return; - } - Gv_SetVarX(lVar2, ud.m_respawn_inventory); - return; - - case USERDEFS_M_RECSTAT: - if (iSet) - { - ud.m_recstat = lValue; - return; - } - Gv_SetVarX(lVar2, ud.m_recstat); - return; - - case USERDEFS_M_MONSTERS_OFF: - if (iSet) - { - ud.m_monsters_off = lValue; - return; - } - Gv_SetVarX(lVar2, ud.m_monsters_off); - return; - - case USERDEFS_DETAIL: - if (iSet) - { - ud.detail = lValue; - return; - } - Gv_SetVarX(lVar2, ud.detail); - return; - - case USERDEFS_M_FFIRE: - if (iSet) - { - ud.m_ffire = lValue; - return; - } - Gv_SetVarX(lVar2, ud.m_ffire); - return; - - case USERDEFS_FFIRE: - if (iSet) - { - ud.ffire = lValue; - return; - } - Gv_SetVarX(lVar2, ud.ffire); - return; - - case USERDEFS_M_PLAYER_SKILL: - if (iSet) - { - ud.m_player_skill = lValue; - return; - } - Gv_SetVarX(lVar2, ud.m_player_skill); - return; - - case USERDEFS_M_LEVEL_NUMBER: - if (iSet) - { - ud.m_level_number = lValue; - return; - } - Gv_SetVarX(lVar2, ud.m_level_number); - return; - - case USERDEFS_M_VOLUME_NUMBER: - if (iSet) - { - ud.m_volume_number = lValue; - return; - } - Gv_SetVarX(lVar2, ud.m_volume_number); - return; - - case USERDEFS_MULTIMODE: - if (iSet) - { - ud.multimode = lValue; - return; - } - Gv_SetVarX(lVar2, ud.multimode); - return; - - case USERDEFS_PLAYER_SKILL: - if (iSet) - { - ud.player_skill = lValue; - return; - } - Gv_SetVarX(lVar2, ud.player_skill); - return; - - case USERDEFS_LEVEL_NUMBER: - if (iSet) - { - ud.level_number = lValue; - return; - } - Gv_SetVarX(lVar2, ud.level_number); - return; - - case USERDEFS_VOLUME_NUMBER: - if (iSet) - { - ud.volume_number = lValue; - return; - } - Gv_SetVarX(lVar2, ud.volume_number); - return; - - case USERDEFS_M_MARKER: - if (iSet) - { - ud.m_marker = lValue; - return; - } - Gv_SetVarX(lVar2, ud.m_marker); - return; - - case USERDEFS_MARKER: - if (iSet) - { - ud.marker = lValue; - return; - } - Gv_SetVarX(lVar2, ud.marker); - return; - - case USERDEFS_MOUSEFLIP: - if (iSet) - { - ud.mouseflip = lValue; - return; - } - Gv_SetVarX(lVar2, ud.mouseflip); - return; - - case USERDEFS_STATUSBARSCALE: - if (iSet) - { - ud.statusbarscale = lValue; - return; - } - Gv_SetVarX(lVar2, ud.statusbarscale); - return; - - case USERDEFS_DRAWWEAPON: - if (iSet) - { - ud.drawweapon = lValue; - return; - } - Gv_SetVarX(lVar2, ud.drawweapon); - return; - - case USERDEFS_MOUSEAIMING: - if (iSet) - { - ud.mouseaiming = lValue; - return; - } - Gv_SetVarX(lVar2, ud.mouseaiming); - return; - - case USERDEFS_WEAPONSWITCH: - if (iSet) - { - ud.weaponswitch = lValue; - return; - } - Gv_SetVarX(lVar2, ud.weaponswitch); - return; - - case USERDEFS_DEMOCAMS: - if (iSet) - { - ud.democams = lValue; - return; - } - Gv_SetVarX(lVar2, ud.democams); - return; - - case USERDEFS_COLOR: - if (iSet) - { - ud.color = lValue; - return; - } - Gv_SetVarX(lVar2, ud.color); - return; - - case USERDEFS_MSGDISPTIME: - if (iSet) - { - ud.msgdisptime = lValue; - return; - } - Gv_SetVarX(lVar2, ud.msgdisptime); - return; - - case USERDEFS_STATUSBARMODE: - if (iSet) - { - ud.statusbarmode = lValue; - return; - } - Gv_SetVarX(lVar2, ud.statusbarmode); - return; - - case USERDEFS_M_NOEXITS: - if (iSet) - { - ud.m_noexits = lValue; - return; - } - Gv_SetVarX(lVar2, ud.m_noexits); - return; - - case USERDEFS_NOEXITS: - if (iSet) - { - ud.noexits = lValue; - return; - } - Gv_SetVarX(lVar2, ud.noexits); - return; - - case USERDEFS_AUTOVOTE: - if (iSet) - { - ud.autovote = lValue; - return; - } - Gv_SetVarX(lVar2, ud.autovote); - return; - - case USERDEFS_AUTOMSG: - if (iSet) - { - ud.automsg = lValue; - return; - } - Gv_SetVarX(lVar2, ud.automsg); - return; - - case USERDEFS_IDPLAYERS: - if (iSet) - { - ud.idplayers = lValue; - return; - } - Gv_SetVarX(lVar2, ud.idplayers); - return; - - case USERDEFS_TEAM: - if (iSet) - { - ud.team = lValue; - return; - } - Gv_SetVarX(lVar2, ud.team); - return; - - case USERDEFS_VIEWBOB: - if (iSet) - { - ud.viewbob = lValue; - return; - } - Gv_SetVarX(lVar2, ud.viewbob); - return; - - case USERDEFS_WEAPONSWAY: - if (iSet) - { - ud.weaponsway = lValue; - return; - } - Gv_SetVarX(lVar2, ud.weaponsway); - return; - - case USERDEFS_ANGLEINTERPOLATION: - if (iSet) - { - ud.angleinterpolation = lValue; - return; - } - Gv_SetVarX(lVar2, ud.angleinterpolation); - return; - - case USERDEFS_OBITUARIES: - if (iSet) - { - ud.obituaries = lValue; - return; - } - Gv_SetVarX(lVar2, ud.obituaries); - return; - - case USERDEFS_LEVELSTATS: - if (iSet) - { - ud.levelstats = lValue; - return; - } - Gv_SetVarX(lVar2, ud.levelstats); - return; - - case USERDEFS_CROSSHAIRSCALE: - if (iSet) - { - ud.crosshairscale = lValue; - return; - } - Gv_SetVarX(lVar2, ud.crosshairscale); - return; - - case USERDEFS_ALTHUD: - if (iSet) - { - ud.althud = lValue; - return; - } - Gv_SetVarX(lVar2, ud.althud); - return; - - case USERDEFS_DISPLAY_BONUS_SCREEN: - if (iSet) - { - ud.display_bonus_screen = lValue; - return; - } - Gv_SetVarX(lVar2, ud.display_bonus_screen); - return; - - case USERDEFS_SHOW_LEVEL_TEXT: - if (iSet) - { - ud.show_level_text = lValue; - return; - } - Gv_SetVarX(lVar2, ud.show_level_text); - return; - - case USERDEFS_WEAPONSCALE: - if (iSet) - { - ud.weaponscale = lValue; - return; - } - Gv_SetVarX(lVar2, ud.weaponscale); - return; - - case USERDEFS_TEXTSCALE: - if (iSet) - { - ud.textscale = lValue; - return; - } - Gv_SetVarX(lVar2, ud.textscale); - return; - - default: - return; - } -} - -static void __fastcall VM_AccessActiveProjectile(int32_t iSet, int32_t lVar1, int32_t lLabelID, int32_t lVar2) -{ - int32_t lValue=0,proj=vm.g_i; - - if (lVar1 != g_iThisActorID) - proj=Gv_GetVarX(lVar1); - - if ((unsigned)proj >= MAXSPRITES) - { - // OSD_Printf("VM_AccessActiveProjectile(): invalid projectile (%d)\n",proj); - OSD_Printf(CON_ERROR "tried to %s %s on invalid target projectile (%d) %d %d from %s\n",g_errorLineNum,keyw[g_tw], - iSet?"set":"get",ProjectileLabels[lLabelID].name,proj,vm.g_i,vm.g_sp->picnum, - (lVar1= playerswhenstarted) /* && g_scriptSanityChecks */) - goto badplayer; - - if ((PlayerLabels[lLabelID].flags &LABEL_HASPARM2 && (lParm2 < 0 || lParm2 >= PlayerLabels[lLabelID].maxParm2)) /* && g_scriptSanityChecks */) - goto badpos; - - switch (lLabelID) - { - case PLAYER_ZOOM: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->zoom); return; - case PLAYER_EXITX: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->exitx); return; - case PLAYER_EXITY: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->exity); return; - case PLAYER_LOOGIEX: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->loogiex[lParm2]); return; - case PLAYER_LOOGIEY: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->loogiey[lParm2]); return; - case PLAYER_NUMLOOGS: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->numloogs); return; - case PLAYER_LOOGCNT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->loogcnt); return; - case PLAYER_POSX: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->pos.x); return; - case PLAYER_POSY: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->pos.y); return; - case PLAYER_POSZ: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->pos.z); return; - case PLAYER_HORIZ: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->horiz); return; - case PLAYER_OHORIZ: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->ohoriz); return; - case PLAYER_OHORIZOFF: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->ohorizoff); return; - case PLAYER_INVDISPTIME: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->invdisptime); return; - case PLAYER_BOBPOSX: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->bobposx); return; - case PLAYER_BOBPOSY: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->bobposy); return; - case PLAYER_OPOSX: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->opos.x); return; - case PLAYER_OPOSY: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->opos.y); return; - case PLAYER_OPOSZ: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->opos.z); return; - case PLAYER_PYOFF: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->pyoff); return; - case PLAYER_OPYOFF: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->opyoff); return; - case PLAYER_POSXV: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->vel.x); return; - case PLAYER_POSYV: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->vel.y); return; - case PLAYER_POSZV: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->vel.z); return; - case PLAYER_LAST_PISSED_TIME: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->last_pissed_time); return; - case PLAYER_TRUEFZ: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->truefz); return; - case PLAYER_TRUECZ: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->truecz); return; - case PLAYER_PLAYER_PAR: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->player_par); return; - case PLAYER_VISIBILITY: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->visibility); return; - case PLAYER_BOBCOUNTER: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->bobcounter); return; - case PLAYER_WEAPON_SWAY: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->weapon_sway); return; - case PLAYER_PALS_TIME: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->pals.f); return; - case PLAYER_RANDOMFLAMEX: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->randomflamex); return; - case PLAYER_CRACK_TIME: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->crack_time); return; - case PLAYER_AIM_MODE: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->aim_mode); return; - case PLAYER_ANG: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->ang); return; - case PLAYER_OANG: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->oang); return; - case PLAYER_ANGVEL: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->angvel); return; - case PLAYER_CURSECTNUM: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->cursectnum); return; - case PLAYER_LOOK_ANG: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->look_ang); return; - case PLAYER_LAST_EXTRA: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->last_extra); return; - case PLAYER_SUBWEAPON: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->subweapon); return; - case PLAYER_AMMO_AMOUNT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->ammo_amount[lParm2]); return; - case PLAYER_WACKEDBYACTOR: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->wackedbyactor); return; - case PLAYER_FRAG: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->frag); return; - case PLAYER_FRAGGEDSELF: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->fraggedself); return; - case PLAYER_CURR_WEAPON: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->curr_weapon); return; - case PLAYER_LAST_WEAPON: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->last_weapon); return; - case PLAYER_TIPINCS: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->tipincs); return; - case PLAYER_HORIZOFF: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->horizoff); return; - case PLAYER_WANTWEAPONFIRE: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->wantweaponfire); return; - case PLAYER_HOLODUKE_AMOUNT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->inv_amount[GET_HOLODUKE]); return; - case PLAYER_NEWOWNER: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->newowner); return; - case PLAYER_HURT_DELAY: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->hurt_delay); return; - case PLAYER_HBOMB_HOLD_DELAY: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->hbomb_hold_delay); return; - case PLAYER_JUMPING_COUNTER: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->jumping_counter); return; - case PLAYER_AIRLEFT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->airleft); return; - case PLAYER_KNEE_INCS: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->knee_incs); return; - case PLAYER_ACCESS_INCS: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->access_incs); return; - case PLAYER_FTA: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->fta); return; - case PLAYER_FTQ: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->ftq); return; - case PLAYER_ACCESS_WALLNUM: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->access_wallnum); return; - case PLAYER_ACCESS_SPRITENUM: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->access_spritenum); return; - case PLAYER_KICKBACK_PIC: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->kickback_pic); return; - case PLAYER_GOT_ACCESS: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->got_access); return; - case PLAYER_WEAPON_ANG: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->weapon_ang); return; - case PLAYER_FIRSTAID_AMOUNT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->inv_amount[GET_FIRSTAID]); return; - case PLAYER_SOMETHINGONPLAYER: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->somethingonplayer); return; - case PLAYER_ON_CRANE: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->on_crane); return; - case PLAYER_I: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->i); return; - case PLAYER_ONE_PARALLAX_SECTNUM: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->one_parallax_sectnum); return; - case PLAYER_OVER_SHOULDER_ON: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->over_shoulder_on); return; - case PLAYER_RANDOM_CLUB_FRAME: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->random_club_frame); return; - case PLAYER_FIST_INCS: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->fist_incs); return; - case PLAYER_ONE_EIGHTY_COUNT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->one_eighty_count); return; - case PLAYER_CHEAT_PHASE: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->cheat_phase); return; - case PLAYER_DUMMYPLAYERSPRITE: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->dummyplayersprite); return; - case PLAYER_EXTRA_EXTRA8: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->extra_extra8); return; - case PLAYER_QUICK_KICK: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->quick_kick); return; - case PLAYER_HEAT_AMOUNT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->inv_amount[GET_HEATS]); return; - case PLAYER_ACTORSQU: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->actorsqu); return; - case PLAYER_TIMEBEFOREEXIT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->timebeforeexit); return; - case PLAYER_CUSTOMEXITSOUND: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->customexitsound); return; - case PLAYER_WEAPRECS: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->weaprecs[lParm2]); return; - case PLAYER_WEAPRECCNT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->weapreccnt); return; - case PLAYER_INTERFACE_TOGGLE_FLAG: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->interface_toggle_flag); return; - case PLAYER_ROTSCRNANG: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->rotscrnang); return; - case PLAYER_DEAD_FLAG: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->dead_flag); return; - case PLAYER_SHOW_EMPTY_WEAPON: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->show_empty_weapon); return; - case PLAYER_SCUBA_AMOUNT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->inv_amount[GET_SCUBA]); return; - case PLAYER_JETPACK_AMOUNT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->inv_amount[GET_JETPACK]); return; - case PLAYER_STEROIDS_AMOUNT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->inv_amount[GET_STEROIDS]); return; - case PLAYER_SHIELD_AMOUNT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->inv_amount[GET_SHIELD]); return; - case PLAYER_HOLODUKE_ON: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->holoduke_on); return; - case PLAYER_PYCOUNT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->pycount); return; - case PLAYER_WEAPON_POS: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->weapon_pos); return; - case PLAYER_FRAG_PS: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->frag_ps); return; - case PLAYER_TRANSPORTER_HOLD: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->transporter_hold); return; - case PLAYER_LAST_FULL_WEAPON: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->last_full_weapon); return; - case PLAYER_FOOTPRINTSHADE: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->footprintshade); return; - case PLAYER_BOOT_AMOUNT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->inv_amount[GET_BOOTS]); return; - case PLAYER_SCREAM_VOICE: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->scream_voice); return; - case PLAYER_GM: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->gm); return; - case PLAYER_ON_WARPING_SECTOR: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->on_warping_sector); return; - case PLAYER_FOOTPRINTCOUNT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->footprintcount); return; - case PLAYER_HBOMB_ON: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->hbomb_on); return; - case PLAYER_JUMPING_TOGGLE: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->jumping_toggle); return; - case PLAYER_RAPID_FIRE_HOLD: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->rapid_fire_hold); return; - case PLAYER_ON_GROUND: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->on_ground); return; - case PLAYER_INVEN_ICON: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->inven_icon); return; - case PLAYER_BUTTONPALETTE: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->buttonpalette); return; - case PLAYER_JETPACK_ON: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->jetpack_on); return; - case PLAYER_SPRITEBRIDGE: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->spritebridge); return; - case PLAYER_LASTRANDOMSPOT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->lastrandomspot); return; - case PLAYER_SCUBA_ON: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->scuba_on); return; - case PLAYER_FOOTPRINTPAL: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->footprintpal); return; - case PLAYER_HEAT_ON: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->heat_on); return; - case PLAYER_HOLSTER_WEAPON: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->holster_weapon); return; - case PLAYER_FALLING_COUNTER: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->falling_counter); return; - case PLAYER_GOTWEAPON: - Gv_SetVarX(lVar2, (g_player[iPlayer].ps->gotweapon & (1<refresh_inventory); return; - case PLAYER_TOGGLE_KEY_FLAG: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->toggle_key_flag); return; - case PLAYER_KNUCKLE_INCS: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->knuckle_incs); return; - case PLAYER_WALKING_SND_TOGGLE: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->walking_snd_toggle); return; - case PLAYER_PALOOKUP: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->palookup); return; - case PLAYER_HARD_LANDING: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->hard_landing); return; - case PLAYER_MAX_SECRET_ROOMS: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->max_secret_rooms); return; - case PLAYER_SECRET_ROOMS: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->secret_rooms); return; - case PLAYER_PALS: - switch (lParm2) - { - case 0: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->pals.r); return; - case 1: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->pals.g); return; - case 2: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->pals.b); return; - } - return; - case PLAYER_MAX_ACTORS_KILLED: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->max_actors_killed); return; - case PLAYER_ACTORS_KILLED: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->actors_killed); return; - case PLAYER_RETURN_TO_CENTER: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->return_to_center); return; - case PLAYER_RUNSPEED: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->runspeed); return; - case PLAYER_SBS: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->sbs); return; - case PLAYER_RELOADING: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->reloading); return; - case PLAYER_AUTO_AIM: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->auto_aim); return; - case PLAYER_MOVEMENT_LOCK: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->movement_lock); return; - case PLAYER_SOUND_PITCH: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->sound_pitch); return; - case PLAYER_WEAPONSWITCH: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->weaponswitch); return; - case PLAYER_TEAM: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->team); return; - case PLAYER_MAX_PLAYER_HEALTH: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->max_player_health); return; - case PLAYER_MAX_SHIELD_AMOUNT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->max_shield_amount); return; - case PLAYER_MAX_AMMO_AMOUNT: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->max_ammo_amount[lParm2]); return; - case PLAYER_LAST_QUICK_KICK: - Gv_SetVarX(lVar2, g_player[iPlayer].ps->last_quick_kick); - return; - - default: - return; - } - -badplayer: - // OSD_Printf("VM_AccessPlayer(): invalid target player (%d) %d\n",iPlayer,vm.g_i); - OSD_Printf(CON_ERROR "tried to get %s on invalid target player (%d) from spr %d gv %s\n",g_errorLineNum,keyw[g_tw], - PlayerLabels[lLabelID].name,iPlayer,vm.g_i, - (lVar1= playerswhenstarted) /* && g_scriptSanityChecks */) - goto badplayer; - - if ((PlayerLabels[lLabelID].flags &LABEL_HASPARM2 && (lParm2 < 0 || lParm2 >= PlayerLabels[lLabelID].maxParm2)) /* && g_scriptSanityChecks */) - goto badpos; - - lVar1=Gv_GetVarX(lVar2); - - switch (lLabelID) - { - case PLAYER_ZOOM: - g_player[iPlayer].ps->zoom=lVar1; return; - case PLAYER_EXITX: - g_player[iPlayer].ps->exitx=lVar1; return; - case PLAYER_EXITY: - g_player[iPlayer].ps->exity=lVar1; return; - case PLAYER_LOOGIEX: - g_player[iPlayer].ps->loogiex[lParm2]=lVar1; return; - case PLAYER_LOOGIEY: - g_player[iPlayer].ps->loogiey[lParm2]=lVar1; return; - case PLAYER_NUMLOOGS: - g_player[iPlayer].ps->numloogs=lVar1; return; - case PLAYER_LOOGCNT: - g_player[iPlayer].ps->loogcnt=lVar1; return; - case PLAYER_POSX: - g_player[iPlayer].ps->pos.x=lVar1; return; - case PLAYER_POSY: - g_player[iPlayer].ps->pos.y=lVar1; return; - case PLAYER_POSZ: - g_player[iPlayer].ps->pos.z=lVar1; return; - case PLAYER_HORIZ: - g_player[iPlayer].ps->horiz=lVar1; return; - case PLAYER_OHORIZ: - g_player[iPlayer].ps->ohoriz=lVar1; return; - case PLAYER_OHORIZOFF: - g_player[iPlayer].ps->ohorizoff=lVar1; return; - case PLAYER_INVDISPTIME: - g_player[iPlayer].ps->invdisptime=lVar1; return; - case PLAYER_BOBPOSX: - g_player[iPlayer].ps->bobposx=lVar1; return; - case PLAYER_BOBPOSY: - g_player[iPlayer].ps->bobposy=lVar1; return; - case PLAYER_OPOSX: - g_player[iPlayer].ps->opos.x=lVar1; return; - case PLAYER_OPOSY: - g_player[iPlayer].ps->opos.y=lVar1; return; - case PLAYER_OPOSZ: - g_player[iPlayer].ps->opos.z=lVar1; return; - case PLAYER_PYOFF: - g_player[iPlayer].ps->pyoff=lVar1; return; - case PLAYER_OPYOFF: - g_player[iPlayer].ps->opyoff=lVar1; return; - case PLAYER_POSXV: - g_player[iPlayer].ps->vel.x=lVar1; return; - case PLAYER_POSYV: - g_player[iPlayer].ps->vel.y=lVar1; return; - case PLAYER_POSZV: - g_player[iPlayer].ps->vel.z=lVar1; return; - case PLAYER_LAST_PISSED_TIME: - g_player[iPlayer].ps->last_pissed_time=lVar1; return; - case PLAYER_TRUEFZ: - g_player[iPlayer].ps->truefz=lVar1; return; - case PLAYER_TRUECZ: - g_player[iPlayer].ps->truecz=lVar1; return; - case PLAYER_PLAYER_PAR: - g_player[iPlayer].ps->player_par=lVar1; return; - case PLAYER_VISIBILITY: - g_player[iPlayer].ps->visibility=lVar1; return; - case PLAYER_BOBCOUNTER: - g_player[iPlayer].ps->bobcounter=lVar1; return; - case PLAYER_WEAPON_SWAY: - g_player[iPlayer].ps->weapon_sway=lVar1; return; - case PLAYER_PALS_TIME: - g_player[iPlayer].ps->pals.f=lVar1; return; - case PLAYER_RANDOMFLAMEX: - g_player[iPlayer].ps->randomflamex=lVar1; return; - case PLAYER_CRACK_TIME: - g_player[iPlayer].ps->crack_time=lVar1; return; - case PLAYER_AIM_MODE: - g_player[iPlayer].ps->aim_mode=lVar1; return; - case PLAYER_ANG: - g_player[iPlayer].ps->ang=lVar1; return; - case PLAYER_OANG: - g_player[iPlayer].ps->oang=lVar1; return; - case PLAYER_ANGVEL: - g_player[iPlayer].ps->angvel=lVar1; return; - case PLAYER_CURSECTNUM: - g_player[iPlayer].ps->cursectnum=lVar1; return; - case PLAYER_LOOK_ANG: - g_player[iPlayer].ps->look_ang=lVar1; return; - case PLAYER_LAST_EXTRA: - g_player[iPlayer].ps->last_extra=lVar1; return; - case PLAYER_SUBWEAPON: - g_player[iPlayer].ps->subweapon=lVar1; return; - case PLAYER_AMMO_AMOUNT: - g_player[iPlayer].ps->ammo_amount[lParm2]=lVar1; return; - case PLAYER_WACKEDBYACTOR: - g_player[iPlayer].ps->wackedbyactor=lVar1; return; - case PLAYER_FRAG: - g_player[iPlayer].ps->frag=lVar1; return; - case PLAYER_FRAGGEDSELF: - g_player[iPlayer].ps->fraggedself=lVar1; return; - case PLAYER_CURR_WEAPON: - g_player[iPlayer].ps->curr_weapon=lVar1; return; - case PLAYER_LAST_WEAPON: - g_player[iPlayer].ps->last_weapon=lVar1; return; - case PLAYER_TIPINCS: - g_player[iPlayer].ps->tipincs=lVar1; return; - case PLAYER_HORIZOFF: - g_player[iPlayer].ps->horizoff=lVar1; return; - case PLAYER_WANTWEAPONFIRE: - g_player[iPlayer].ps->wantweaponfire=lVar1; return; - case PLAYER_HOLODUKE_AMOUNT: - g_player[iPlayer].ps->inv_amount[GET_HOLODUKE]=lVar1; return; - case PLAYER_NEWOWNER: - g_player[iPlayer].ps->newowner=lVar1; return; - case PLAYER_HURT_DELAY: - g_player[iPlayer].ps->hurt_delay=lVar1; return; - case PLAYER_HBOMB_HOLD_DELAY: - g_player[iPlayer].ps->hbomb_hold_delay=lVar1; return; - case PLAYER_JUMPING_COUNTER: - g_player[iPlayer].ps->jumping_counter=lVar1; return; - case PLAYER_AIRLEFT: - g_player[iPlayer].ps->airleft=lVar1; return; - case PLAYER_KNEE_INCS: - g_player[iPlayer].ps->knee_incs=lVar1; return; - case PLAYER_ACCESS_INCS: - g_player[iPlayer].ps->access_incs=lVar1; return; - case PLAYER_FTA: - g_player[iPlayer].ps->fta=lVar1; return; - case PLAYER_FTQ: - g_player[iPlayer].ps->ftq=lVar1; return; - case PLAYER_ACCESS_WALLNUM: - g_player[iPlayer].ps->access_wallnum=lVar1; return; - case PLAYER_ACCESS_SPRITENUM: - g_player[iPlayer].ps->access_spritenum=lVar1; return; - case PLAYER_KICKBACK_PIC: - g_player[iPlayer].ps->kickback_pic=lVar1; return; - case PLAYER_GOT_ACCESS: - g_player[iPlayer].ps->got_access=lVar1; return; - case PLAYER_WEAPON_ANG: - g_player[iPlayer].ps->weapon_ang=lVar1; return; - case PLAYER_FIRSTAID_AMOUNT: - g_player[iPlayer].ps->inv_amount[GET_FIRSTAID]=lVar1; return; - case PLAYER_SOMETHINGONPLAYER: - g_player[iPlayer].ps->somethingonplayer=lVar1; return; - case PLAYER_ON_CRANE: - g_player[iPlayer].ps->on_crane=lVar1; return; - case PLAYER_I: - g_player[iPlayer].ps->i=lVar1; return; - case PLAYER_ONE_PARALLAX_SECTNUM: - g_player[iPlayer].ps->one_parallax_sectnum=lVar1; return; - case PLAYER_OVER_SHOULDER_ON: - g_player[iPlayer].ps->over_shoulder_on=lVar1; return; - case PLAYER_RANDOM_CLUB_FRAME: - g_player[iPlayer].ps->random_club_frame=lVar1; return; - case PLAYER_FIST_INCS: - g_player[iPlayer].ps->fist_incs=lVar1; return; - case PLAYER_ONE_EIGHTY_COUNT: - g_player[iPlayer].ps->one_eighty_count=lVar1; return; - case PLAYER_CHEAT_PHASE: - g_player[iPlayer].ps->cheat_phase=lVar1; return; - case PLAYER_DUMMYPLAYERSPRITE: - g_player[iPlayer].ps->dummyplayersprite=lVar1; return; - case PLAYER_EXTRA_EXTRA8: - g_player[iPlayer].ps->extra_extra8=lVar1; return; - case PLAYER_QUICK_KICK: - g_player[iPlayer].ps->quick_kick=lVar1; return; - case PLAYER_HEAT_AMOUNT: - g_player[iPlayer].ps->inv_amount[GET_HEATS]=lVar1; return; - case PLAYER_ACTORSQU: - g_player[iPlayer].ps->actorsqu=lVar1; return; - case PLAYER_TIMEBEFOREEXIT: - g_player[iPlayer].ps->timebeforeexit=lVar1; return; - case PLAYER_CUSTOMEXITSOUND: - g_player[iPlayer].ps->customexitsound=lVar1; return; - case PLAYER_WEAPRECS: - g_player[iPlayer].ps->weaprecs[lParm2]=lVar1; return; - case PLAYER_WEAPRECCNT: - g_player[iPlayer].ps->weapreccnt=lVar1; return; - case PLAYER_INTERFACE_TOGGLE_FLAG: - g_player[iPlayer].ps->interface_toggle_flag=lVar1; return; - case PLAYER_ROTSCRNANG: - g_player[iPlayer].ps->rotscrnang=lVar1; return; - case PLAYER_DEAD_FLAG: - g_player[iPlayer].ps->dead_flag=lVar1; return; - case PLAYER_SHOW_EMPTY_WEAPON: - g_player[iPlayer].ps->show_empty_weapon=lVar1; return; - case PLAYER_SCUBA_AMOUNT: - g_player[iPlayer].ps->inv_amount[GET_SCUBA]=lVar1; return; - case PLAYER_JETPACK_AMOUNT: - g_player[iPlayer].ps->inv_amount[GET_JETPACK]=lVar1; return; - case PLAYER_STEROIDS_AMOUNT: - g_player[iPlayer].ps->inv_amount[GET_STEROIDS]=lVar1; return; - case PLAYER_SHIELD_AMOUNT: - g_player[iPlayer].ps->inv_amount[GET_SHIELD]=lVar1; return; - case PLAYER_HOLODUKE_ON: - g_player[iPlayer].ps->holoduke_on=lVar1; return; - case PLAYER_PYCOUNT: - g_player[iPlayer].ps->pycount=lVar1; return; - case PLAYER_WEAPON_POS: - g_player[iPlayer].ps->weapon_pos=lVar1; return; - case PLAYER_FRAG_PS: - g_player[iPlayer].ps->frag_ps=lVar1; return; - case PLAYER_TRANSPORTER_HOLD: - g_player[iPlayer].ps->transporter_hold=lVar1; return; - case PLAYER_LAST_FULL_WEAPON: - g_player[iPlayer].ps->last_full_weapon=lVar1; return; - case PLAYER_FOOTPRINTSHADE: - g_player[iPlayer].ps->footprintshade=lVar1; return; - case PLAYER_BOOT_AMOUNT: - g_player[iPlayer].ps->inv_amount[GET_BOOTS]=lVar1; return; - case PLAYER_SCREAM_VOICE: - g_player[iPlayer].ps->scream_voice=lVar1; return; - case PLAYER_GM: - g_player[iPlayer].ps->gm=lVar1; return; - case PLAYER_ON_WARPING_SECTOR: - g_player[iPlayer].ps->on_warping_sector=lVar1; return; - case PLAYER_FOOTPRINTCOUNT: - g_player[iPlayer].ps->footprintcount=lVar1; return; - case PLAYER_HBOMB_ON: - g_player[iPlayer].ps->hbomb_on=lVar1; return; - case PLAYER_JUMPING_TOGGLE: - g_player[iPlayer].ps->jumping_toggle=lVar1; return; - case PLAYER_RAPID_FIRE_HOLD: - g_player[iPlayer].ps->rapid_fire_hold=lVar1; return; - case PLAYER_ON_GROUND: - g_player[iPlayer].ps->on_ground=lVar1; return; - case PLAYER_INVEN_ICON: - g_player[iPlayer].ps->inven_icon=lVar1; return; - case PLAYER_BUTTONPALETTE: - g_player[iPlayer].ps->buttonpalette=lVar1; return; - case PLAYER_JETPACK_ON: - g_player[iPlayer].ps->jetpack_on=lVar1; return; - case PLAYER_SPRITEBRIDGE: - g_player[iPlayer].ps->spritebridge=lVar1; return; - case PLAYER_LASTRANDOMSPOT: - g_player[iPlayer].ps->lastrandomspot=lVar1; return; - case PLAYER_SCUBA_ON: - g_player[iPlayer].ps->scuba_on=lVar1; return; - case PLAYER_FOOTPRINTPAL: - g_player[iPlayer].ps->footprintpal=lVar1; return; - case PLAYER_HEAT_ON: - if (g_player[iPlayer].ps->heat_on != lVar1) - { - g_player[iPlayer].ps->heat_on=lVar1; - P_UpdateScreenPal(g_player[iPlayer].ps); - } return; - case PLAYER_HOLSTER_WEAPON: - g_player[iPlayer].ps->holster_weapon=lVar1; return; - case PLAYER_FALLING_COUNTER: - g_player[iPlayer].ps->falling_counter=lVar1; return; - case PLAYER_GOTWEAPON: - if (lVar1) - { - g_player[iPlayer].ps->gotweapon |= (1<gotweapon &= ~(1<refresh_inventory=lVar1; return; - case PLAYER_TOGGLE_KEY_FLAG: - g_player[iPlayer].ps->toggle_key_flag=lVar1; return; - case PLAYER_KNUCKLE_INCS: - g_player[iPlayer].ps->knuckle_incs=lVar1; return; - case PLAYER_WALKING_SND_TOGGLE: - g_player[iPlayer].ps->walking_snd_toggle=lVar1; return; - case PLAYER_PALOOKUP: - g_player[iPlayer].ps->palookup=lVar1; return; - case PLAYER_HARD_LANDING: - g_player[iPlayer].ps->hard_landing=lVar1; return; - case PLAYER_MAX_SECRET_ROOMS: - g_player[iPlayer].ps->max_secret_rooms=lVar1; return; - case PLAYER_SECRET_ROOMS: - g_player[iPlayer].ps->secret_rooms=lVar1; return; - case PLAYER_PALS: - switch (lParm2) - { - case 0: - g_player[iPlayer].ps->pals.r = lVar1; return; - case 1: - g_player[iPlayer].ps->pals.g = lVar1; return; - case 2: - g_player[iPlayer].ps->pals.b = lVar1; return; - } - return; - case PLAYER_MAX_ACTORS_KILLED: - g_player[iPlayer].ps->max_actors_killed=lVar1; return; - case PLAYER_ACTORS_KILLED: - g_player[iPlayer].ps->actors_killed=lVar1; return; - case PLAYER_RETURN_TO_CENTER: - g_player[iPlayer].ps->return_to_center=lVar1; return; - case PLAYER_RUNSPEED: - g_player[iPlayer].ps->runspeed=lVar1; return; - case PLAYER_SBS: - g_player[iPlayer].ps->sbs=lVar1; return; - case PLAYER_RELOADING: - g_player[iPlayer].ps->reloading=lVar1; return; - case PLAYER_AUTO_AIM: - g_player[iPlayer].ps->auto_aim=lVar1; return; - case PLAYER_MOVEMENT_LOCK: - g_player[iPlayer].ps->movement_lock=lVar1; return; - case PLAYER_SOUND_PITCH: - g_player[iPlayer].ps->sound_pitch=lVar1; return; - case PLAYER_WEAPONSWITCH: - g_player[iPlayer].ps->weaponswitch=lVar1; return; - case PLAYER_TEAM: - g_player[iPlayer].ps->team=lVar1; return; - case PLAYER_MAX_PLAYER_HEALTH: - g_player[iPlayer].ps->max_player_health = lVar1; return; - case PLAYER_MAX_SHIELD_AMOUNT: - g_player[iPlayer].ps->max_shield_amount = lVar1; return; - case PLAYER_MAX_AMMO_AMOUNT: - g_player[iPlayer].ps->max_ammo_amount[lParm2]=lVar1; return; - case PLAYER_LAST_QUICK_KICK: - g_player[iPlayer].ps->last_quick_kick=lVar1; - return; - - default: - return; - } - -badplayer: - // OSD_Printf("VM_AccessPlayer(): invalid target player (%d) %d\n",iPlayer,vm.g_i); - OSD_Printf(CON_ERROR "tried to set %s on invalid target player (%d) from spr %d gv %s\n",g_errorLineNum,keyw[g_tw], - PlayerLabels[lLabelID].name,iPlayer,vm.g_i, - (lVar1= playerswhenstarted) /* && g_scriptSanityChecks */) - goto badplayer; - - if (iSet) - lValue=Gv_GetVarX(lVar2); - - switch (lLabelID) - { - case INPUT_AVEL: - if (iSet) - { - g_player[iPlayer].sync->avel=lValue; - return; - } - Gv_SetVarX(lVar2, g_player[iPlayer].sync->avel); - return; - - case INPUT_HORZ: - if (iSet) - { - g_player[iPlayer].sync->horz=lValue; - return; - } - Gv_SetVarX(lVar2, g_player[iPlayer].sync->horz); - return; - - case INPUT_FVEL: - if (iSet) - { - g_player[iPlayer].sync->fvel=lValue; - return; - } - Gv_SetVarX(lVar2, g_player[iPlayer].sync->fvel); - return; - - case INPUT_SVEL: - if (iSet) - { - g_player[iPlayer].sync->svel=lValue; - return; - } - Gv_SetVarX(lVar2, g_player[iPlayer].sync->svel); - return; - - case INPUT_BITS: - if (iSet) - { - g_player[iPlayer].sync->bits=lValue; - return; - } - Gv_SetVarX(lVar2, g_player[iPlayer].sync->bits); - return; - - case INPUT_EXTBITS: - if (iSet) - { - g_player[iPlayer].sync->extbits=lValue; - return; - } - Gv_SetVarX(lVar2, g_player[iPlayer].sync->extbits); - return; - default: - return; - } - -badplayer: - insptr += (lVar2 == MAXGAMEVARS); - OSD_Printf(CON_ERROR "invalid target player (%d) %d\n",g_errorLineNum,keyw[g_tw],iPlayer,vm.g_i); - return; -} - -static void __fastcall VM_AccessWall(int32_t iSet, int32_t lVar1, int32_t lLabelID, int32_t lVar2) -{ - int32_t lValue=0; - int32_t iWall = Gv_GetVarX(lVar1); - - if ((iWall<0 || iWall >= numwalls) /* && g_scriptSanityChecks */) - goto badwall; - - if (iSet) - lValue=Gv_GetVarX(lVar2); - - switch (lLabelID) - { - case WALL_X: - if (iSet) - { - wall[iWall].x=lValue; - return; - } - Gv_SetVarX(lVar2, wall[iWall].x); - return; - - case WALL_Y: - if (iSet) - { - wall[iWall].y=lValue; - return; - } - Gv_SetVarX(lVar2, wall[iWall].y); - return; - - case WALL_POINT2: - if (iSet) - { - wall[iWall].point2=lValue; - return; - } - Gv_SetVarX(lVar2, wall[iWall].point2); - return; - - case WALL_NEXTWALL: - if (iSet) - { - wall[iWall].nextwall=lValue; - return; - } - Gv_SetVarX(lVar2, wall[iWall].nextwall); - return; - - case WALL_NEXTSECTOR: - if (iSet) - { - wall[iWall].nextsector=lValue; - return; - } - Gv_SetVarX(lVar2, wall[iWall].nextsector); - return; - - case WALL_CSTAT: - if (iSet) - { - wall[iWall].cstat=lValue; - return; - } - Gv_SetVarX(lVar2, wall[iWall].cstat); - return; - - case WALL_PICNUM: - if (iSet) - { - wall[iWall].picnum=lValue; - return; - } - Gv_SetVarX(lVar2, wall[iWall].picnum); - return; - - case WALL_OVERPICNUM: - if (iSet) - { - wall[iWall].overpicnum=lValue; - return; - } - Gv_SetVarX(lVar2, wall[iWall].overpicnum); - return; - - case WALL_SHADE: - if (iSet) - { - wall[iWall].shade=lValue; - return; - } - Gv_SetVarX(lVar2, wall[iWall].shade); - return; - - case WALL_PAL: - if (iSet) - { - wall[iWall].pal=lValue; - return; - } - Gv_SetVarX(lVar2, wall[iWall].pal); - return; - - case WALL_XREPEAT: - if (iSet) - { - wall[iWall].xrepeat=lValue; - return; - } - Gv_SetVarX(lVar2, wall[iWall].xrepeat); - return; - - case WALL_YREPEAT: - if (iSet) - { - wall[iWall].yrepeat=lValue; - return; - } - Gv_SetVarX(lVar2, wall[iWall].yrepeat); - return; - - case WALL_XPANNING: - if (iSet) - { - wall[iWall].xpanning=lValue; - return; - } - Gv_SetVarX(lVar2, wall[iWall].xpanning); - return; - - case WALL_YPANNING: - if (iSet) - { - wall[iWall].ypanning=lValue; - return; - } - Gv_SetVarX(lVar2, wall[iWall].ypanning); - return; - - case WALL_LOTAG: - if (iSet) - { - wall[iWall].lotag=lValue; - return; - } - Gv_SetVarX(lVar2, wall[iWall].lotag); - return; - - case WALL_HITAG: - if (iSet) - { - wall[iWall].hitag=lValue; - return; - } - Gv_SetVarX(lVar2, wall[iWall].hitag); - return; - - case WALL_EXTRA: - if (iSet) - { - wall[iWall].extra=lValue; - return; - } - Gv_SetVarX(lVar2, wall[iWall].extra); - return; - default: - return; - } - -badwall: - insptr += (lVar2 == MAXGAMEVARS); - OSD_Printf(CON_ERROR "Invalid wall %d\n",g_errorLineNum,keyw[g_tw],iWall); - return; -} - -static void __fastcall VM_AccessSector(int32_t iSet, int32_t lVar1, int32_t lLabelID, int32_t lVar2) -{ - int32_t lValue=0; - int32_t iSector=sprite[vm.g_i].sectnum; - - if (lVar1 != g_iThisActorID) - iSector=Gv_GetVarX(lVar1); - - if ((iSector<0 || iSector >= numsectors) /* && g_scriptSanityChecks */) - goto badsector; - - if (iSet) - lValue=Gv_GetVarX(lVar2); - - switch (lLabelID) - { - case SECTOR_WALLPTR: - if (iSet) - { - sector[iSector].wallptr=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].wallptr); - return; - - case SECTOR_WALLNUM: - if (iSet) - { - sector[iSector].wallnum=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].wallnum); - return; - - case SECTOR_CEILINGZ: - if (iSet) - { - sector[iSector].ceilingz=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].ceilingz); - return; - - case SECTOR_FLOORZ: - if (iSet) - { - sector[iSector].floorz=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].floorz); - return; - - case SECTOR_CEILINGSTAT: - if (iSet) - { - sector[iSector].ceilingstat=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].ceilingstat); - return; - - case SECTOR_FLOORSTAT: - if (iSet) - { - sector[iSector].floorstat=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].floorstat); - return; - - case SECTOR_CEILINGPICNUM: - if (iSet) - { - sector[iSector].ceilingpicnum=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].ceilingpicnum); - return; - - case SECTOR_CEILINGSLOPE: - if (iSet) - { - sector[iSector].ceilingheinum=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].ceilingheinum); - return; - - case SECTOR_CEILINGSHADE: - if (iSet) - { - sector[iSector].ceilingshade=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].ceilingshade); - return; - - case SECTOR_CEILINGPAL: - if (iSet) - { - sector[iSector].ceilingpal=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].ceilingpal); - return; - - case SECTOR_CEILINGXPANNING: - if (iSet) - { - sector[iSector].ceilingxpanning=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].ceilingxpanning); - return; - - case SECTOR_CEILINGYPANNING: - if (iSet) - { - sector[iSector].ceilingypanning=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].ceilingypanning); - return; - - case SECTOR_FLOORPICNUM: - if (iSet) - { - sector[iSector].floorpicnum=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].floorpicnum); - return; - - case SECTOR_FLOORSLOPE: - if (iSet) - { - sector[iSector].floorheinum=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].floorheinum); - return; - - case SECTOR_FLOORSHADE: - if (iSet) - { - sector[iSector].floorshade=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].floorshade); - return; - - case SECTOR_FLOORPAL: - if (iSet) - { - sector[iSector].floorpal=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].floorpal); - return; - - case SECTOR_FLOORXPANNING: - if (iSet) - { - sector[iSector].floorxpanning=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].floorxpanning); - return; - - case SECTOR_FLOORYPANNING: - if (iSet) - { - sector[iSector].floorypanning=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].floorypanning); - return; - - case SECTOR_VISIBILITY: - if (iSet) - { - sector[iSector].visibility=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].visibility); - return; - - case SECTOR_ALIGNTO: - if (iSet) - { - sector[iSector].filler=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].filler); - return; - - case SECTOR_LOTAG: - if (iSet) - { - sector[iSector].lotag=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].lotag); - return; - - case SECTOR_HITAG: - if (iSet) - { - sector[iSector].hitag=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].hitag); - return; - - case SECTOR_EXTRA: - if (iSet) - { - sector[iSector].extra=lValue; - return; - } - Gv_SetVarX(lVar2, sector[iSector].extra); - return; - - default: - return; - } - -badsector: - OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],iSector); - insptr += (lVar2 == MAXGAMEVARS); - return; -} - -static void __fastcall VM_SetSprite(int32_t lVar1, int32_t lLabelID, int32_t lVar2, int32_t lParm2) -{ - register int32_t iActor=vm.g_i; - - if (lVar1 != g_iThisActorID) - iActor=Gv_GetVarX(lVar1); - - if ((unsigned)iActor >= MAXSPRITES) - goto badactor; - - if ((ActorLabels[lLabelID].flags &LABEL_HASPARM2 && (lParm2 < 0 || lParm2 >= ActorLabels[lLabelID].maxParm2)) /* && g_scriptSanityChecks */) - goto badpos; - - lVar1=Gv_GetVarX(lVar2); - - switch (lLabelID) - { - case ACTOR_X: - sprite[iActor].x=lVar1; - return; - - case ACTOR_Y: - sprite[iActor].y=lVar1; - return; - - case ACTOR_Z: - sprite[iActor].z=lVar1; - return; - - case ACTOR_CSTAT: - sprite[iActor].cstat=lVar1; - return; - - case ACTOR_PICNUM: - sprite[iActor].picnum=lVar1; - return; - - case ACTOR_SHADE: - sprite[iActor].shade=lVar1; - return; - - case ACTOR_PAL: - sprite[iActor].pal=lVar1; - return; - - case ACTOR_CLIPDIST: - sprite[iActor].clipdist=lVar1; - return; - - case ACTOR_DETAIL: - sprite[iActor].filler=lVar1; - return; - - case ACTOR_XREPEAT: - sprite[iActor].xrepeat=lVar1; - return; - - case ACTOR_YREPEAT: - sprite[iActor].yrepeat=lVar1; - return; - - case ACTOR_XOFFSET: - sprite[iActor].xoffset=lVar1; - return; - - case ACTOR_YOFFSET: - sprite[iActor].yoffset=lVar1; - return; - - case ACTOR_SECTNUM: - changespritesect(iActor,lVar1); - return; - - case ACTOR_STATNUM: - changespritestat(iActor,lVar1); - return; - - case ACTOR_ANG: - sprite[iActor].ang=lVar1; - return; - - case ACTOR_OWNER: - sprite[iActor].owner=lVar1; - return; - - case ACTOR_XVEL: - sprite[iActor].xvel=lVar1; - return; - - case ACTOR_YVEL: - sprite[iActor].yvel=lVar1; - return; - - case ACTOR_ZVEL: - sprite[iActor].zvel=lVar1; - return; - - case ACTOR_LOTAG: - sprite[iActor].lotag=lVar1; - return; - - case ACTOR_HITAG: - sprite[iActor].hitag=lVar1; - return; - - case ACTOR_EXTRA: - sprite[iActor].extra=lVar1; - return; - - case ACTOR_HTCGG: - actor[iActor].cgg=lVar1; - return; - - case ACTOR_HTPICNUM : - actor[iActor].picnum=lVar1; - return; - - case ACTOR_HTANG: - actor[iActor].ang=lVar1; - return; - - case ACTOR_HTEXTRA: - actor[iActor].extra=lVar1; - return; - - case ACTOR_HTOWNER: - actor[iActor].owner=lVar1; - return; - - case ACTOR_HTMOVFLAG: - actor[iActor].movflag=lVar1; - return; - - case ACTOR_HTTEMPANG: - actor[iActor].tempang=lVar1; - return; - - case ACTOR_HTACTORSTAYPUT: - actor[iActor].actorstayput=lVar1; - return; - - case ACTOR_HTDISPICNUM: - actor[iActor].dispicnum=lVar1; - return; - - case ACTOR_HTTIMETOSLEEP: - actor[iActor].timetosleep=lVar1; - return; - - case ACTOR_HTFLOORZ: - actor[iActor].floorz=lVar1; - return; - - case ACTOR_HTCEILINGZ: - actor[iActor].ceilingz=lVar1; - return; - - case ACTOR_HTLASTVX: - actor[iActor].lastvx=lVar1; - return; - - case ACTOR_HTLASTVY: - actor[iActor].lastvy=lVar1; - return; - - case ACTOR_HTBPOSX: - actor[iActor].bposx=lVar1; - return; - - case ACTOR_HTBPOSY: - actor[iActor].bposy=lVar1; - return; - - case ACTOR_HTBPOSZ: - actor[iActor].bposz=lVar1; - return; - - case ACTOR_HTG_T: - actor[iActor].t_data[lParm2]=lVar1; - return; - - case ACTOR_ANGOFF: - spriteext[iActor].angoff=lVar1; - return; - - case ACTOR_PITCH: - spriteext[iActor].pitch=lVar1; - return; - - case ACTOR_ROLL: - spriteext[iActor].roll=lVar1; - return; - - case ACTOR_MDXOFF: - spriteext[iActor].xoff=lVar1; - return; - - case ACTOR_MDYOFF: - spriteext[iActor].yoff=lVar1; - return; - - case ACTOR_MDZOFF: - spriteext[iActor].zoff=lVar1; - return; - - case ACTOR_MDFLAGS: - spriteext[iActor].flags=lVar1; - return; - - case ACTOR_XPANNING: - spriteext[iActor].xpanning=lVar1; - return; - - case ACTOR_YPANNING: - spriteext[iActor].ypanning=lVar1; - return; - - case ACTOR_HTFLAGS: - actor[iActor].flags=lVar1; - return; - - case ACTOR_ALPHA: - spriteext[iActor].alpha=(float)(lVar1/255.0f); - return; - - default: - return; - } - -badactor: - OSD_Printf(CON_ERROR "tried to set %s on invalid target sprite (%d) from spr %d pic %d gv %s\n",g_errorLineNum,keyw[g_tw], - ActorLabels[lLabelID].name,iActor,vm.g_i,vm.g_sp->picnum, - (lVar1= MAXSPRITES) - goto badactor; - - if ((ActorLabels[lLabelID].flags &LABEL_HASPARM2 && (lParm2 < 0 || lParm2 >= ActorLabels[lLabelID].maxParm2)) /* && g_scriptSanityChecks */) - goto badpos; - - switch (lLabelID) - { - case ACTOR_X: - Gv_SetVarX(lVar2, sprite[iActor].x); - return; - - case ACTOR_Y: - Gv_SetVarX(lVar2, sprite[iActor].y); - return; - - case ACTOR_Z: - Gv_SetVarX(lVar2, sprite[iActor].z); - return; - - case ACTOR_CSTAT: - Gv_SetVarX(lVar2, sprite[iActor].cstat); - return; - - case ACTOR_PICNUM: - Gv_SetVarX(lVar2, sprite[iActor].picnum); - return; - - case ACTOR_SHADE: - Gv_SetVarX(lVar2, sprite[iActor].shade); - return; - - case ACTOR_PAL: - Gv_SetVarX(lVar2, sprite[iActor].pal); - return; - - case ACTOR_CLIPDIST: - Gv_SetVarX(lVar2, sprite[iActor].clipdist); - return; - - case ACTOR_DETAIL: - Gv_SetVarX(lVar2, sprite[iActor].filler); - return; - - case ACTOR_XREPEAT: - Gv_SetVarX(lVar2, sprite[iActor].xrepeat); - return; - - case ACTOR_YREPEAT: - Gv_SetVarX(lVar2, sprite[iActor].yrepeat); - return; - - case ACTOR_XOFFSET: - Gv_SetVarX(lVar2, sprite[iActor].xoffset); - return; - - case ACTOR_YOFFSET: - Gv_SetVarX(lVar2, sprite[iActor].yoffset); - return; - - case ACTOR_SECTNUM: - Gv_SetVarX(lVar2, sprite[iActor].sectnum); - return; - - case ACTOR_STATNUM: - Gv_SetVarX(lVar2, sprite[iActor].statnum); - return; - - case ACTOR_ANG: - Gv_SetVarX(lVar2, sprite[iActor].ang); - return; - - case ACTOR_OWNER: - Gv_SetVarX(lVar2, sprite[iActor].owner); - return; - - case ACTOR_XVEL: - Gv_SetVarX(lVar2, sprite[iActor].xvel); - return; - - case ACTOR_YVEL: - Gv_SetVarX(lVar2, sprite[iActor].yvel); - return; - - case ACTOR_ZVEL: - Gv_SetVarX(lVar2, sprite[iActor].zvel); - return; - - case ACTOR_LOTAG: - Gv_SetVarX(lVar2, sprite[iActor].lotag); - return; - - case ACTOR_HITAG: - Gv_SetVarX(lVar2, sprite[iActor].hitag); - return; - - case ACTOR_EXTRA: - Gv_SetVarX(lVar2, sprite[iActor].extra); - return; - - case ACTOR_HTCGG: - Gv_SetVarX(lVar2, actor[iActor].cgg); - return; - - case ACTOR_HTPICNUM : - Gv_SetVarX(lVar2, actor[iActor].picnum); - return; - - case ACTOR_HTANG: - Gv_SetVarX(lVar2, actor[iActor].ang); - return; - - case ACTOR_HTEXTRA: - Gv_SetVarX(lVar2,actor[iActor].extra); - return; - - case ACTOR_HTOWNER: - Gv_SetVarX(lVar2,actor[iActor].owner); - return; - - case ACTOR_HTMOVFLAG: - Gv_SetVarX(lVar2,actor[iActor].movflag); - return; - - case ACTOR_HTTEMPANG: - Gv_SetVarX(lVar2,actor[iActor].tempang); - return; - - case ACTOR_HTACTORSTAYPUT: - Gv_SetVarX(lVar2,actor[iActor].actorstayput); - return; - - case ACTOR_HTDISPICNUM: - Gv_SetVarX(lVar2,actor[iActor].dispicnum); - return; - - case ACTOR_HTTIMETOSLEEP: - Gv_SetVarX(lVar2,actor[iActor].timetosleep); - return; - - case ACTOR_HTFLOORZ: - Gv_SetVarX(lVar2,actor[iActor].floorz); - return; - - case ACTOR_HTCEILINGZ: - Gv_SetVarX(lVar2,actor[iActor].ceilingz); - return; - - case ACTOR_HTLASTVX: - Gv_SetVarX(lVar2,actor[iActor].lastvx); - return; - - case ACTOR_HTLASTVY: - Gv_SetVarX(lVar2,actor[iActor].lastvy); - return; - - case ACTOR_HTBPOSX: - Gv_SetVarX(lVar2,actor[iActor].bposx); - return; - - case ACTOR_HTBPOSY: - Gv_SetVarX(lVar2,actor[iActor].bposy); - return; - - case ACTOR_HTBPOSZ: - Gv_SetVarX(lVar2,actor[iActor].bposz); - return; - - case ACTOR_HTG_T: - Gv_SetVarX(lVar2, actor[iActor].t_data[lParm2]); - return; - - case ACTOR_ANGOFF: - Gv_SetVarX(lVar2,spriteext[iActor].angoff); - return; - - case ACTOR_PITCH: - Gv_SetVarX(lVar2,spriteext[iActor].pitch); - return; - - case ACTOR_ROLL: - Gv_SetVarX(lVar2,spriteext[iActor].roll); - return; - - case ACTOR_MDXOFF: - Gv_SetVarX(lVar2,spriteext[iActor].xoff); - return; - - case ACTOR_MDYOFF: - Gv_SetVarX(lVar2,spriteext[iActor].yoff); - return; - - case ACTOR_MDZOFF: - Gv_SetVarX(lVar2,spriteext[iActor].zoff); - return; - - case ACTOR_MDFLAGS: - Gv_SetVarX(lVar2,spriteext[iActor].flags); - return; - - case ACTOR_XPANNING: - Gv_SetVarX(lVar2, spriteext[iActor].xpanning); - return; - - case ACTOR_YPANNING: - Gv_SetVarX(lVar2, spriteext[iActor].ypanning); - return; - - case ACTOR_HTFLAGS: - Gv_SetVarX(lVar2,actor[iActor].flags); - return; - - case ACTOR_ALPHA: - Gv_SetVarX(lVar2, (uint8_t)(spriteext[iActor].alpha * 255.0f)); - return; - - default: - return; - } - -badactor: - OSD_Printf(CON_ERROR "tried to get %s on invalid target sprite (%d) from spr %d pic %d gv %s\n",g_errorLineNum,keyw[g_tw], - ActorLabels[lLabelID].name,iActor,vm.g_i,vm.g_sp->picnum, - (lVar1= MAXSPRITES) - goto badsprite; - - if (iSet) - lValue=Gv_GetVarX(lVar2); - - if ((!spriteext[iActor].tspr) && g_scriptSanityChecks) - goto badtspr; - - switch (lLabelID) - { - case ACTOR_X: - if (iSet) - { - spriteext[iActor].tspr->x=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->x); - return; - - case ACTOR_Y: - if (iSet) - { - spriteext[iActor].tspr->y=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->y); - return; - - case ACTOR_Z: - if (iSet) - { - spriteext[iActor].tspr->z=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->z); - return; - - case ACTOR_CSTAT: - if (iSet) - { - spriteext[iActor].tspr->cstat=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->cstat); - return; - - case ACTOR_PICNUM: - if (iSet) - { - spriteext[iActor].tspr->picnum=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->picnum); - return; - - case ACTOR_SHADE: - if (iSet) - { - spriteext[iActor].tspr->shade=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->shade); - return; - - case ACTOR_PAL: - if (iSet) - { - spriteext[iActor].tspr->pal=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->pal); - return; - - case ACTOR_CLIPDIST: - if (iSet) - { - spriteext[iActor].tspr->clipdist=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->clipdist); - return; - - case ACTOR_DETAIL: - if (iSet) - { - spriteext[iActor].tspr->filler=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->filler); - return; - - case ACTOR_XREPEAT: - if (iSet) - { - spriteext[iActor].tspr->xrepeat=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->xrepeat); - return; - - case ACTOR_YREPEAT: - if (iSet) - { - spriteext[iActor].tspr->yrepeat=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->yrepeat); - return; - - case ACTOR_XOFFSET: - if (iSet) - { - spriteext[iActor].tspr->xoffset=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->xoffset); - return; - - case ACTOR_YOFFSET: - if (iSet) - { - spriteext[iActor].tspr->yoffset=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->yoffset); - return; - - case ACTOR_SECTNUM: - if (iSet) - { - spriteext[iActor].tspr->sectnum=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->sectnum); - return; - - case ACTOR_STATNUM: - if (iSet) - { - spriteext[iActor].tspr->statnum=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->statnum); - return; - - case ACTOR_ANG: - if (iSet) - { - spriteext[iActor].tspr->ang=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->ang); - return; - - case ACTOR_OWNER: - if (iSet) - { - spriteext[iActor].tspr->owner=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->owner); - return; - -#if 1 - case ACTOR_XVEL: - if (iSet) - { - spriteext[iActor].tspr->xvel=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->xvel); - return; - - case ACTOR_YVEL: - if (iSet) - { - spriteext[iActor].tspr->yvel=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->yvel); - return; - - case ACTOR_ZVEL: - if (iSet) - { - spriteext[iActor].tspr->zvel=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->zvel); - return; - - case ACTOR_LOTAG: - if (iSet) - { - spriteext[iActor].tspr->lotag=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->lotag); - return; - - case ACTOR_HITAG: - if (iSet) - { - spriteext[iActor].tspr->hitag=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->hitag); - return; - - case ACTOR_EXTRA: - if (iSet) - { - spriteext[iActor].tspr->extra=lValue; - return; - } - Gv_SetVarX(lVar2, spriteext[iActor].tspr->extra); - return; -#endif - - default: - return; - } - -badsprite: - OSD_Printf(CON_ERROR "invalid target sprite (%d) %d %d\n",g_errorLineNum,keyw[g_tw],iActor,vm.g_i,vm.g_sp->picnum); - insptr += (lVar2 == MAXGAMEVARS); - return; - -badtspr: - OSD_Printf(CON_ERROR "Internal bug, tsprite is unavailable\n",g_errorLineNum,keyw[g_tw]); - return; -} - -static void __fastcall VM_AccessProjectile(int32_t iSet, int32_t lVar1, int32_t lLabelID, int32_t lVar2) -{ - int32_t lValue=0; - - if ((lVar1 < 0 || lVar1 >= MAXTILES) /* && g_scriptSanityChecks */) - goto badtile; - - if (iSet) - lValue=Gv_GetVarX(lVar2); - - switch (lLabelID) - { - case PROJ_WORKSLIKE: - if (iSet) - { - ProjectileData[lVar1].workslike=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].workslike); - return; - - case PROJ_SPAWNS: - if (iSet) - { - ProjectileData[lVar1].spawns=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].spawns); - return; - - case PROJ_SXREPEAT: - if (iSet) - { - ProjectileData[lVar1].sxrepeat=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].sxrepeat); - return; - - case PROJ_SYREPEAT: - if (iSet) - { - ProjectileData[lVar1].syrepeat=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].syrepeat); - return; - - case PROJ_SOUND: - if (iSet) - { - ProjectileData[lVar1].sound=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].sound); - return; - - case PROJ_ISOUND: - if (iSet) - { - ProjectileData[lVar1].isound=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].isound); - return; - - case PROJ_VEL: - if (iSet) - { - ProjectileData[lVar1].vel=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].vel); - return; - - case PROJ_EXTRA: - if (iSet) - { - ProjectileData[lVar1].extra=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].extra); - return; - - case PROJ_DECAL: - if (iSet) - { - ProjectileData[lVar1].decal=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].decal); - return; - - case PROJ_TRAIL: - if (iSet) - { - ProjectileData[lVar1].trail=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].trail); - return; - - case PROJ_TXREPEAT: - if (iSet) - { - ProjectileData[lVar1].txrepeat=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].txrepeat); - return; - - case PROJ_TYREPEAT: - if (iSet) - { - ProjectileData[lVar1].tyrepeat=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].tyrepeat); - return; - - case PROJ_TOFFSET: - if (iSet) - { - ProjectileData[lVar1].toffset=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].toffset); - return; - - case PROJ_TNUM: - if (iSet) - { - ProjectileData[lVar1].tnum=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].tnum); - return; - - case PROJ_DROP: - if (iSet) - { - ProjectileData[lVar1].drop=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].drop); - return; - - case PROJ_CSTAT: - if (iSet) - { - ProjectileData[lVar1].cstat=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].cstat); - return; - - case PROJ_CLIPDIST: - if (iSet) - { - ProjectileData[lVar1].clipdist=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].clipdist); - return; - - case PROJ_SHADE: - if (iSet) - { - ProjectileData[lVar1].shade=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].shade); - return; - - case PROJ_XREPEAT: - if (iSet) - { - ProjectileData[lVar1].xrepeat=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].xrepeat); - return; - - case PROJ_YREPEAT: - if (iSet) - { - ProjectileData[lVar1].yrepeat=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].yrepeat); - return; - - case PROJ_PAL: - if (iSet) - { - ProjectileData[lVar1].pal=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].pal); - return; - - case PROJ_EXTRA_RAND: - if (iSet) - { - ProjectileData[lVar1].extra_rand=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].extra_rand); - return; - - case PROJ_HITRADIUS: - if (iSet) - { - ProjectileData[lVar1].hitradius=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].hitradius); - return; - - case PROJ_VEL_MULT: - if (iSet) - { - ProjectileData[lVar1].velmult=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].velmult); - return; - - case PROJ_OFFSET: - if (iSet) - { - ProjectileData[lVar1].offset=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].offset); - return; - - case PROJ_BOUNCES: - if (iSet) - { - ProjectileData[lVar1].bounces=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].bounces); - return; - - case PROJ_BSOUND: - if (iSet) - { - ProjectileData[lVar1].bsound=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].bsound); - return; - - case PROJ_RANGE: - if (iSet) - { - ProjectileData[lVar1].range=lValue; - return; - } - Gv_SetVarX(lVar2, ProjectileData[lVar1].range); - return; - - default: - return; - } - -badtile: - OSD_Printf(CON_ERROR "invalid tile (%d)\n",g_errorLineNum,keyw[g_tw],lVar1); - insptr += (lVar2 == MAXGAMEVARS); - return; -} -#else -static int32_t __fastcall VM_AccessSpriteX(int32_t iActor, int32_t lLabelID, int32_t lParm2) -{ - if ((ActorLabels[lLabelID].flags &LABEL_HASPARM2 && (lParm2 < 0 || lParm2 >= ActorLabels[lLabelID].maxParm2)) /* && g_scriptSanityChecks */) - goto badpos; - - switch (lLabelID) - { - case ACTOR_X: return sprite[iActor].x; - case ACTOR_Y: return sprite[iActor].y; - case ACTOR_Z: return sprite[iActor].z; - case ACTOR_CSTAT: return sprite[iActor].cstat; - case ACTOR_PICNUM: return sprite[iActor].picnum; - case ACTOR_SHADE: return sprite[iActor].shade; - case ACTOR_PAL: return sprite[iActor].pal; - case ACTOR_CLIPDIST: return sprite[iActor].clipdist; - case ACTOR_DETAIL: return sprite[iActor].filler; - case ACTOR_XREPEAT: return sprite[iActor].xrepeat; - case ACTOR_YREPEAT: return sprite[iActor].yrepeat; - case ACTOR_XOFFSET: return sprite[iActor].xoffset; - case ACTOR_YOFFSET: return sprite[iActor].yoffset; - case ACTOR_SECTNUM: return sprite[iActor].sectnum; - case ACTOR_STATNUM: return sprite[iActor].statnum; - case ACTOR_ANG: return sprite[iActor].ang; - case ACTOR_OWNER: return sprite[iActor].owner; - case ACTOR_XVEL: return sprite[iActor].xvel; - case ACTOR_YVEL: return sprite[iActor].yvel; - case ACTOR_ZVEL: return sprite[iActor].zvel; - case ACTOR_LOTAG: return sprite[iActor].lotag; - case ACTOR_HITAG: return sprite[iActor].hitag; - case ACTOR_EXTRA: return sprite[iActor].extra; - case ACTOR_HTCGG: return actor[iActor].cgg; - case ACTOR_HTPICNUM : return actor[iActor].picnum; - case ACTOR_HTANG: return actor[iActor].ang; - case ACTOR_HTEXTRA: return actor[iActor].extra; - case ACTOR_HTOWNER: return actor[iActor].owner; - case ACTOR_HTMOVFLAG: return actor[iActor].movflag; - case ACTOR_HTTEMPANG: return actor[iActor].tempang; - case ACTOR_HTACTORSTAYPUT: return actor[iActor].actorstayput; - case ACTOR_HTDISPICNUM: return actor[iActor].dispicnum; - case ACTOR_HTTIMETOSLEEP: return actor[iActor].timetosleep; - case ACTOR_HTFLOORZ: return actor[iActor].floorz; - case ACTOR_HTCEILINGZ: return actor[iActor].ceilingz; - case ACTOR_HTLASTVX: return actor[iActor].lastvx; - case ACTOR_HTLASTVY: return actor[iActor].lastvy; - case ACTOR_HTBPOSX: return actor[iActor].bposx; - case ACTOR_HTBPOSY: return actor[iActor].bposy; - case ACTOR_HTBPOSZ: return actor[iActor].bposz; - case ACTOR_HTG_T: return actor[iActor].t_data[lParm2]; - case ACTOR_ANGOFF: return spriteext[iActor].angoff; - case ACTOR_PITCH: return spriteext[iActor].pitch; - case ACTOR_ROLL: return spriteext[iActor].roll; - case ACTOR_MDXOFF: return spriteext[iActor].xoff; - case ACTOR_MDYOFF: return spriteext[iActor].yoff; - case ACTOR_MDZOFF: return spriteext[iActor].zoff; - case ACTOR_MDFLAGS: return spriteext[iActor].flags; - case ACTOR_XPANNING: return spriteext[iActor].xpanning; - case ACTOR_YPANNING: return spriteext[iActor].ypanning; - case ACTOR_HTFLAGS: return actor[iActor].flags; - case ACTOR_ALPHA: return (uint8_t)(spriteext[iActor].alpha*255.0f); - default: return -1; - } - -badpos: - OSD_Printf(CON_ERROR "tried to get invalid %s position %d on sprite (%d) from spr %d\n", - g_errorLineNum,keyw[g_tw],ActorLabels[lLabelID].name,lParm2,iActor,vm.g_i); - return -1; -} - -static int32_t __fastcall VM_AccessSectorX(int32_t iSector, int32_t lLabelID) -{ - switch (lLabelID) - { - case SECTOR_WALLPTR: return sector[iSector].wallptr; - case SECTOR_WALLNUM: return sector[iSector].wallnum; - case SECTOR_CEILINGZ: return sector[iSector].ceilingz; - case SECTOR_FLOORZ: return sector[iSector].floorz; - case SECTOR_CEILINGSTAT: return sector[iSector].ceilingstat; - case SECTOR_FLOORSTAT: return sector[iSector].floorstat; - case SECTOR_CEILINGPICNUM: return sector[iSector].ceilingpicnum; - case SECTOR_CEILINGSLOPE: return sector[iSector].ceilingheinum; - case SECTOR_CEILINGSHADE: return sector[iSector].ceilingshade; - case SECTOR_CEILINGPAL: return sector[iSector].ceilingpal; - case SECTOR_CEILINGXPANNING: return sector[iSector].ceilingxpanning; - case SECTOR_CEILINGYPANNING: return sector[iSector].ceilingypanning; - case SECTOR_FLOORPICNUM: return sector[iSector].floorpicnum; - case SECTOR_FLOORSLOPE: return sector[iSector].floorheinum; - case SECTOR_FLOORSHADE: return sector[iSector].floorshade; - case SECTOR_FLOORPAL: return sector[iSector].floorpal; - case SECTOR_FLOORXPANNING: return sector[iSector].floorxpanning; - case SECTOR_FLOORYPANNING: return sector[iSector].floorypanning; - case SECTOR_VISIBILITY: return sector[iSector].visibility; - case SECTOR_ALIGNTO: return sector[iSector].filler; - case SECTOR_LOTAG: return sector[iSector].lotag; - case SECTOR_HITAG: return sector[iSector].hitag; - case SECTOR_EXTRA: return sector[iSector].extra; - default: return -1; - } -} - -static int32_t __fastcall VM_AccessPlayerX(int32_t iPlayer, int32_t lLabelID, int32_t lParm2) -{ - if ((PlayerLabels[lLabelID].flags &LABEL_HASPARM2 && (lParm2 < 0 || lParm2 >= PlayerLabels[lLabelID].maxParm2)) /* && g_scriptSanityChecks */) - goto badpos; - - switch (lLabelID) - { - case PLAYER_ZOOM: - return g_player[iPlayer].ps->zoom; - case PLAYER_EXITX: - return g_player[iPlayer].ps->exitx; - case PLAYER_EXITY: - return g_player[iPlayer].ps->exity; - case PLAYER_LOOGIEX: - return g_player[iPlayer].ps->loogiex[lParm2]; - case PLAYER_LOOGIEY: - return g_player[iPlayer].ps->loogiey[lParm2]; - case PLAYER_NUMLOOGS: - return g_player[iPlayer].ps->numloogs; - case PLAYER_LOOGCNT: - return g_player[iPlayer].ps->loogcnt; - case PLAYER_POSX: - return g_player[iPlayer].ps->pos.x; - case PLAYER_POSY: - return g_player[iPlayer].ps->pos.y; - case PLAYER_POSZ: - return g_player[iPlayer].ps->pos.z; - case PLAYER_HORIZ: - return g_player[iPlayer].ps->horiz; - case PLAYER_OHORIZ: - return g_player[iPlayer].ps->ohoriz; - case PLAYER_OHORIZOFF: - return g_player[iPlayer].ps->ohorizoff; - case PLAYER_INVDISPTIME: - return g_player[iPlayer].ps->invdisptime; - case PLAYER_BOBPOSX: - return g_player[iPlayer].ps->bobposx; - case PLAYER_BOBPOSY: - return g_player[iPlayer].ps->bobposy; - case PLAYER_OPOSX: - return g_player[iPlayer].ps->opos.x; - case PLAYER_OPOSY: - return g_player[iPlayer].ps->opos.y; - case PLAYER_OPOSZ: - return g_player[iPlayer].ps->opos.z; - case PLAYER_PYOFF: - return g_player[iPlayer].ps->pyoff; - case PLAYER_OPYOFF: - return g_player[iPlayer].ps->opyoff; - case PLAYER_POSXV: - return g_player[iPlayer].ps->vel.x; - case PLAYER_POSYV: - return g_player[iPlayer].ps->vel.y; - case PLAYER_POSZV: - return g_player[iPlayer].ps->vel.z; - case PLAYER_LAST_PISSED_TIME: - return g_player[iPlayer].ps->last_pissed_time; - case PLAYER_TRUEFZ: - return g_player[iPlayer].ps->truefz; - case PLAYER_TRUECZ: - return g_player[iPlayer].ps->truecz; - case PLAYER_PLAYER_PAR: - return g_player[iPlayer].ps->player_par; - case PLAYER_VISIBILITY: - return g_player[iPlayer].ps->visibility; - case PLAYER_BOBCOUNTER: - return g_player[iPlayer].ps->bobcounter; - case PLAYER_WEAPON_SWAY: - return g_player[iPlayer].ps->weapon_sway; - case PLAYER_PALS_TIME: - return g_player[iPlayer].ps->pals.f; - case PLAYER_RANDOMFLAMEX: - return g_player[iPlayer].ps->randomflamex; - case PLAYER_CRACK_TIME: - return g_player[iPlayer].ps->crack_time; - case PLAYER_AIM_MODE: - return g_player[iPlayer].ps->aim_mode; - case PLAYER_ANG: - return g_player[iPlayer].ps->ang; - case PLAYER_OANG: - return g_player[iPlayer].ps->oang; - case PLAYER_ANGVEL: - return g_player[iPlayer].ps->angvel; - case PLAYER_CURSECTNUM: - return g_player[iPlayer].ps->cursectnum; - case PLAYER_LOOK_ANG: - return g_player[iPlayer].ps->look_ang; - case PLAYER_LAST_EXTRA: - return g_player[iPlayer].ps->last_extra; - case PLAYER_SUBWEAPON: - return g_player[iPlayer].ps->subweapon; - case PLAYER_AMMO_AMOUNT: - return g_player[iPlayer].ps->ammo_amount[lParm2]; - case PLAYER_WACKEDBYACTOR: - return g_player[iPlayer].ps->wackedbyactor; - case PLAYER_FRAG: - return g_player[iPlayer].ps->frag; - case PLAYER_FRAGGEDSELF: - return g_player[iPlayer].ps->fraggedself; - case PLAYER_CURR_WEAPON: - return g_player[iPlayer].ps->curr_weapon; - case PLAYER_LAST_WEAPON: - return g_player[iPlayer].ps->last_weapon; - case PLAYER_TIPINCS: - return g_player[iPlayer].ps->tipincs; - case PLAYER_HORIZOFF: - return g_player[iPlayer].ps->horizoff; - case PLAYER_WANTWEAPONFIRE: - return g_player[iPlayer].ps->wantweaponfire; - case PLAYER_HOLODUKE_AMOUNT: - return g_player[iPlayer].ps->inv_amount[GET_HOLODUKE]; - case PLAYER_NEWOWNER: - return g_player[iPlayer].ps->newowner; - case PLAYER_HURT_DELAY: - return g_player[iPlayer].ps->hurt_delay; - case PLAYER_HBOMB_HOLD_DELAY: - return g_player[iPlayer].ps->hbomb_hold_delay; - case PLAYER_JUMPING_COUNTER: - return g_player[iPlayer].ps->jumping_counter; - case PLAYER_AIRLEFT: - return g_player[iPlayer].ps->airleft; - case PLAYER_KNEE_INCS: - return g_player[iPlayer].ps->knee_incs; - case PLAYER_ACCESS_INCS: - return g_player[iPlayer].ps->access_incs; - case PLAYER_FTA: - return g_player[iPlayer].ps->fta; - case PLAYER_FTQ: - return g_player[iPlayer].ps->ftq; - case PLAYER_ACCESS_WALLNUM: - return g_player[iPlayer].ps->access_wallnum; - case PLAYER_ACCESS_SPRITENUM: - return g_player[iPlayer].ps->access_spritenum; - case PLAYER_KICKBACK_PIC: - return g_player[iPlayer].ps->kickback_pic; - case PLAYER_GOT_ACCESS: - return g_player[iPlayer].ps->got_access; - case PLAYER_WEAPON_ANG: - return g_player[iPlayer].ps->weapon_ang; - case PLAYER_FIRSTAID_AMOUNT: - return g_player[iPlayer].ps->inv_amount[GET_FIRSTAID]; - case PLAYER_SOMETHINGONPLAYER: - return g_player[iPlayer].ps->somethingonplayer; - case PLAYER_ON_CRANE: - return g_player[iPlayer].ps->on_crane; - case PLAYER_I: - return g_player[iPlayer].ps->i; - case PLAYER_ONE_PARALLAX_SECTNUM: - return g_player[iPlayer].ps->one_parallax_sectnum; - case PLAYER_OVER_SHOULDER_ON: - return g_player[iPlayer].ps->over_shoulder_on; - case PLAYER_RANDOM_CLUB_FRAME: - return g_player[iPlayer].ps->random_club_frame; - case PLAYER_FIST_INCS: - return g_player[iPlayer].ps->fist_incs; - case PLAYER_ONE_EIGHTY_COUNT: - return g_player[iPlayer].ps->one_eighty_count; - case PLAYER_CHEAT_PHASE: - return g_player[iPlayer].ps->cheat_phase; - case PLAYER_DUMMYPLAYERSPRITE: - return g_player[iPlayer].ps->dummyplayersprite; - case PLAYER_EXTRA_EXTRA8: - return g_player[iPlayer].ps->extra_extra8; - case PLAYER_QUICK_KICK: - return g_player[iPlayer].ps->quick_kick; - case PLAYER_HEAT_AMOUNT: - return g_player[iPlayer].ps->inv_amount[GET_HEATS]; - case PLAYER_ACTORSQU: - return g_player[iPlayer].ps->actorsqu; - case PLAYER_TIMEBEFOREEXIT: - return g_player[iPlayer].ps->timebeforeexit; - case PLAYER_CUSTOMEXITSOUND: - return g_player[iPlayer].ps->customexitsound; - case PLAYER_WEAPRECS: - return g_player[iPlayer].ps->weaprecs[lParm2]; - case PLAYER_WEAPRECCNT: - return g_player[iPlayer].ps->weapreccnt; - case PLAYER_INTERFACE_TOGGLE_FLAG: - return g_player[iPlayer].ps->interface_toggle_flag; - case PLAYER_ROTSCRNANG: - return g_player[iPlayer].ps->rotscrnang; - case PLAYER_DEAD_FLAG: - return g_player[iPlayer].ps->dead_flag; - case PLAYER_SHOW_EMPTY_WEAPON: - return g_player[iPlayer].ps->show_empty_weapon; - case PLAYER_SCUBA_AMOUNT: - return g_player[iPlayer].ps->inv_amount[GET_SCUBA]; - case PLAYER_JETPACK_AMOUNT: - return g_player[iPlayer].ps->inv_amount[GET_JETPACK]; - case PLAYER_STEROIDS_AMOUNT: - return g_player[iPlayer].ps->inv_amount[GET_STEROIDS]; - case PLAYER_SHIELD_AMOUNT: - return g_player[iPlayer].ps->inv_amount[GET_SHIELD]; - case PLAYER_HOLODUKE_ON: - return g_player[iPlayer].ps->holoduke_on; - case PLAYER_PYCOUNT: - return g_player[iPlayer].ps->pycount; - case PLAYER_WEAPON_POS: - return g_player[iPlayer].ps->weapon_pos; - case PLAYER_FRAG_PS: - return g_player[iPlayer].ps->frag_ps; - case PLAYER_TRANSPORTER_HOLD: - return g_player[iPlayer].ps->transporter_hold; - case PLAYER_LAST_FULL_WEAPON: - return g_player[iPlayer].ps->last_full_weapon; - case PLAYER_FOOTPRINTSHADE: - return g_player[iPlayer].ps->footprintshade; - case PLAYER_BOOT_AMOUNT: - return g_player[iPlayer].ps->inv_amount[GET_BOOTS]; - case PLAYER_SCREAM_VOICE: - return g_player[iPlayer].ps->scream_voice; - case PLAYER_GM: - return g_player[iPlayer].ps->gm; - case PLAYER_ON_WARPING_SECTOR: - return g_player[iPlayer].ps->on_warping_sector; - case PLAYER_FOOTPRINTCOUNT: - return g_player[iPlayer].ps->footprintcount; - case PLAYER_HBOMB_ON: - return g_player[iPlayer].ps->hbomb_on; - case PLAYER_JUMPING_TOGGLE: - return g_player[iPlayer].ps->jumping_toggle; - case PLAYER_RAPID_FIRE_HOLD: - return g_player[iPlayer].ps->rapid_fire_hold; - case PLAYER_ON_GROUND: - return g_player[iPlayer].ps->on_ground; - case PLAYER_INVEN_ICON: - return g_player[iPlayer].ps->inven_icon; - case PLAYER_BUTTONPALETTE: - return g_player[iPlayer].ps->buttonpalette; - case PLAYER_JETPACK_ON: - return g_player[iPlayer].ps->jetpack_on; - case PLAYER_SPRITEBRIDGE: - return g_player[iPlayer].ps->spritebridge; - case PLAYER_LASTRANDOMSPOT: - return g_player[iPlayer].ps->lastrandomspot; - case PLAYER_SCUBA_ON: - return g_player[iPlayer].ps->scuba_on; - case PLAYER_FOOTPRINTPAL: - return g_player[iPlayer].ps->footprintpal; - case PLAYER_HEAT_ON: - return g_player[iPlayer].ps->heat_on; - case PLAYER_HOLSTER_WEAPON: - return g_player[iPlayer].ps->holster_weapon; - case PLAYER_FALLING_COUNTER: - return g_player[iPlayer].ps->falling_counter; - case PLAYER_GOTWEAPON: - return (g_player[iPlayer].ps->gotweapon & (1<refresh_inventory; - case PLAYER_TOGGLE_KEY_FLAG: - return g_player[iPlayer].ps->toggle_key_flag; - case PLAYER_KNUCKLE_INCS: - return g_player[iPlayer].ps->knuckle_incs; - case PLAYER_WALKING_SND_TOGGLE: - return g_player[iPlayer].ps->walking_snd_toggle; - case PLAYER_PALOOKUP: - return g_player[iPlayer].ps->palookup; - case PLAYER_HARD_LANDING: - return g_player[iPlayer].ps->hard_landing; - case PLAYER_MAX_SECRET_ROOMS: - return g_player[iPlayer].ps->max_secret_rooms; - case PLAYER_SECRET_ROOMS: - return g_player[iPlayer].ps->secret_rooms; - case PLAYER_PALS: - switch (lParm2) - { - case 0: - return g_player[iPlayer].ps->pals.r; - case 1: - return g_player[iPlayer].ps->pals.g; - case 2: - return g_player[iPlayer].ps->pals.b; - } - return -1; - case PLAYER_MAX_ACTORS_KILLED: - return g_player[iPlayer].ps->max_actors_killed; - case PLAYER_ACTORS_KILLED: - return g_player[iPlayer].ps->actors_killed; - case PLAYER_RETURN_TO_CENTER: - return g_player[iPlayer].ps->return_to_center; - case PLAYER_RUNSPEED: - return g_player[iPlayer].ps->runspeed; - case PLAYER_SBS: - return g_player[iPlayer].ps->sbs; - case PLAYER_RELOADING: - return g_player[iPlayer].ps->reloading; - case PLAYER_AUTO_AIM: - return g_player[iPlayer].ps->auto_aim; - case PLAYER_MOVEMENT_LOCK: - return g_player[iPlayer].ps->movement_lock; - case PLAYER_SOUND_PITCH: - return g_player[iPlayer].ps->sound_pitch; - case PLAYER_WEAPONSWITCH: - return g_player[iPlayer].ps->weaponswitch; - case PLAYER_TEAM: - return g_player[iPlayer].ps->team; - case PLAYER_MAX_PLAYER_HEALTH: - return g_player[iPlayer].ps->max_player_health; - case PLAYER_MAX_SHIELD_AMOUNT: - return g_player[iPlayer].ps->max_shield_amount; - case PLAYER_MAX_AMMO_AMOUNT: - return g_player[iPlayer].ps->max_ammo_amount[lParm2]; - case PLAYER_LAST_QUICK_KICK: - return g_player[iPlayer].ps->last_quick_kick; - default: - return -1; - } - -badpos: - OSD_Printf(CON_ERROR "tried to get invalid %s position %d on player (%d) from spr %d\n", - g_errorLineNum,keyw[g_tw],PlayerLabels[lLabelID].name,lParm2,iPlayer,vm.g_i); - return -1; -} - -static int32_t __fastcall VM_AccessWallX(int32_t iWall, int32_t lLabelID) -{ - switch (lLabelID) - { - case WALL_X: - return wall[iWall].x; - case WALL_Y: - return wall[iWall].y; - case WALL_POINT2: - return wall[iWall].point2; - case WALL_NEXTWALL: - return wall[iWall].nextwall; - case WALL_NEXTSECTOR: - return wall[iWall].nextsector; - case WALL_CSTAT: - return wall[iWall].cstat; - case WALL_PICNUM: - return wall[iWall].picnum; - case WALL_OVERPICNUM: - return wall[iWall].overpicnum; - case WALL_SHADE: - return wall[iWall].shade; - case WALL_PAL: - return wall[iWall].pal; - case WALL_XREPEAT: - return wall[iWall].xrepeat; - case WALL_YREPEAT: - return wall[iWall].yrepeat; - case WALL_XPANNING: - return wall[iWall].xpanning; - case WALL_YPANNING: - return wall[iWall].ypanning; - case WALL_LOTAG: - return wall[iWall].lotag; - case WALL_HITAG: - return wall[iWall].hitag; - case WALL_EXTRA: - return wall[iWall].extra; - default: - return -1; - } -} -#endif // _gamevars_c_ diff --git a/polymer-perf/eduke32/source/gamevars.c b/polymer-perf/eduke32/source/gamevars.c deleted file mode 100644 index e87f0639b..000000000 --- a/polymer-perf/eduke32/source/gamevars.c +++ /dev/null @@ -1,1689 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#include "duke3d.h" -#include "gamevars.h" -#include "gamedef.h" -#include "osd.h" - -#define _gamevars_c_ -#include "gamestructures.c" - -extern int32_t OSD_errors; - -void Gv_RefreshPointers(void); -extern void G_FreeMapState(int32_t mapnum); -static void Gv_Free(void) /* called from Gv_ReadSave() and Gv_ResetVars() */ -{ - // call this function as many times as needed. - int32_t i=(MAXGAMEVARS-1); - // AddLog("Gv_Free"); - for (; i>=0; i--) - { - if ((aGameVars[i].dwFlags & GAMEVAR_USER_MASK) && aGameVars[i].val.plValues) - { - Bfree(aGameVars[i].val.plValues); - aGameVars[i].val.plValues=NULL; - } - - aGameVars[i].dwFlags |= GAMEVAR_RESET; - - if (i >= MAXGAMEARRAYS) - continue; - - if (aGameArrays[i].plValues) - Bfree(aGameArrays[i].plValues); - - aGameArrays[i].plValues=NULL; - aGameArrays[i].bReset=1; - } - g_gameVarCount=g_gameArrayCount=0; - hash_init(&h_gamevars); - hash_init(&h_arrays); - return; -} - -static void Gv_Clear(void) -{ - // only call this function ONCE... - int32_t i=(MAXGAMEVARS-1); - - //AddLog("Gv_Clear"); - - for (; i>=0; i--) - { - if (aGameVars[i].szLabel) - Bfree(aGameVars[i].szLabel); - aGameVars[i].szLabel=NULL; - aGameVars[i].dwFlags=0; - - if ((aGameVars[i].dwFlags & GAMEVAR_USER_MASK) && aGameVars[i].val.plValues) - { - Bfree(aGameVars[i].val.plValues); - aGameVars[i].val.plValues=NULL; - } - aGameVars[i].val.lValue=0; - aGameVars[i].dwFlags |= GAMEVAR_RESET; - if (i >= MAXGAMEARRAYS) - continue; - if (aGameArrays[i].szLabel) - Bfree(aGameArrays[i].szLabel); - aGameArrays[i].szLabel=NULL; - - if (aGameArrays[i].plValues) - Bfree(aGameArrays[i].plValues); - aGameArrays[i].plValues=NULL; - aGameArrays[i].bReset=1; - } - g_gameVarCount=g_gameArrayCount=0; - hash_init(&h_gamevars); - hash_init(&h_arrays); - return; -} - -int32_t Gv_ReadSave(int32_t fil, int32_t newbehav) -{ - int32_t i, j; - intptr_t l; - char savedstate[MAXVOLUMES*MAXLEVELS]; - char tbuf[12]; - - if (newbehav) - { - if (kread(fil, tbuf, 12)!=12) goto corrupt; - if (Bmemcmp(tbuf, "BEG: EDuke32", 12)) { OSD_Printf("BEG ERR\n"); return 2; } - } - - Bmemset(&savedstate,0,sizeof(savedstate)); - - // AddLog("Reading gamevars from savegame"); - - Gv_Free(); // nuke 'em from orbit, it's the only way to be sure... - - // Bsprintf(g_szBuf,"CP:%s %d",__FILE__,__LINE__); - // AddLog(g_szBuf); - - if (kdfread(&g_gameVarCount,sizeof(g_gameVarCount),1,fil) != 1) goto corrupt; - for (i=0; ivars[j]) - MapInfo[i].savedstate->vars[j] = Bcalloc(MAXPLAYERS,sizeof(intptr_t)); - if (kdfread(&MapInfo[i].savedstate->vars[j][0],sizeof(intptr_t) * MAXPLAYERS, 1, fil) != 1) goto corrupt; - } - else if (aGameVars[j].dwFlags & GAMEVAR_PERACTOR) - { -// if (!MapInfo[i].savedstate->vars[j]) - MapInfo[i].savedstate->vars[j] = Bcalloc(MAXSPRITES,sizeof(intptr_t)); - if (kdfread(&MapInfo[i].savedstate->vars[j][0],sizeof(intptr_t), MAXSPRITES, fil) != MAXSPRITES) goto corrupt; - } - } - } - else if (MapInfo[i].savedstate) - { - G_FreeMapState(i); - } - } - - if (!newbehav) - { - if (kdfread(&l,sizeof(l),1,fil) != 1) goto corrupt; - if (kdfread(g_szBuf,l,1,fil) != 1) goto corrupt; - g_szBuf[l]=0; - OSD_Printf("%s\n",g_szBuf); - } - else - { - if (kread(fil, tbuf, 12)!=12) goto corrupt; - if (Bmemcmp(tbuf, "EOF: EDuke32", 12)) { OSD_Printf("EOF ERR\n"); return 2; } - } - -#if 0 - { - FILE *fp; - AddLog("Dumping Vars..."); - fp=fopen("xxx.txt","w"); - if (fp) - { - Gv_DumpValues(fp); - fclose(fp); - } - AddLog("Done Dumping..."); - } -#endif - return(0); -corrupt: - return(1); -} - -void Gv_WriteSave(FILE *fil, int32_t newbehav) -{ - int32_t i, j; - intptr_t l; - char savedstate[MAXVOLUMES*MAXLEVELS]; - - Bmemset(&savedstate,0,sizeof(savedstate)); - - // AddLog("Saving Game Vars to File"); - if (newbehav) - fwrite("BEG: EDuke32", 12, 1, fil); - - dfwrite(&g_gameVarCount,sizeof(g_gameVarCount),1,fil); - - for (i=0; ivars[j][0],sizeof(intptr_t) * MAXPLAYERS, 1, fil); - } - else if (aGameVars[j].dwFlags & GAMEVAR_PERACTOR) - { - dfwrite(&MapInfo[i].savedstate->vars[j][0],sizeof(intptr_t), MAXSPRITES, fil); - } - } - } - - if (!newbehav) - { - Bsprintf(g_szBuf,"EOF: EDuke32"); - l=Bstrlen(g_szBuf); - dfwrite(&l,sizeof(l),1,fil); - dfwrite(g_szBuf,l,1,fil); - } - else - fwrite("EOF: EDuke32", 12, 1, fil); -} - -void Gv_DumpValues(void) -{ - int32_t i; - - OSD_Printf("// Current Game Definitions\n\n"); - - for (i=0; i= MAXGAMEARRAYS) - { - g_numCompilerErrors++; - C_ReportError(-1); - initprintf("%s:%d: error: too many arrays!\n",g_szScriptFileName,g_lineNumber); - return 0; - } - - if (Bstrlen(pszLabel) > (MAXARRAYLABEL-1)) - { - g_numCompilerErrors++; - C_ReportError(-1); - initprintf("%s:%d: error: array name `%s' exceeds limit of %d characters.\n",g_szScriptFileName,g_lineNumber,pszLabel, MAXARRAYLABEL); - return 0; - } - i = hash_find(&h_arrays,pszLabel); - if (i >=0 && !aGameArrays[i].bReset) - { - // found it it's a duplicate in error - g_numCompilerWarnings++; - C_ReportError(WARNING_DUPLICATEDEFINITION); - return 0; - } - - i = g_gameArrayCount; - - if (aGameArrays[i].szLabel == NULL) - aGameArrays[i].szLabel=Bcalloc(MAXVARLABEL,sizeof(uint8_t)); - if (aGameArrays[i].szLabel != pszLabel) - Bstrcpy(aGameArrays[i].szLabel,pszLabel); - aGameArrays[i].plValues=Bcalloc(asize,sizeof(intptr_t)); - aGameArrays[i].size=asize; - aGameArrays[i].bReset=0; - g_gameArrayCount++; - hash_add(&h_arrays, aGameArrays[i].szLabel, i, 1); - return 1; -} - -int32_t Gv_NewVar(const char *pszLabel, int32_t lValue, uint32_t dwFlags) -{ - int32_t i, j; - - //Bsprintf(g_szBuf,"Gv_NewVar(%s, %d, %X)",pszLabel, lValue, dwFlags); - //AddLog(g_szBuf); - - if (g_gameVarCount >= MAXGAMEVARS) - { - g_numCompilerErrors++; - C_ReportError(-1); - initprintf("%s:%d: error: too many gamevars!\n",g_szScriptFileName,g_lineNumber); - return 0; - } - - if (Bstrlen(pszLabel) > (MAXVARLABEL-1)) - { - g_numCompilerErrors++; - C_ReportError(-1); - initprintf("%s:%d: error: variable name `%s' exceeds limit of %d characters.\n",g_szScriptFileName,g_lineNumber,pszLabel, MAXVARLABEL); - return 0; - } - - i = hash_find(&h_gamevars,pszLabel); - - if (i >= 0 && !(aGameVars[i].dwFlags & GAMEVAR_RESET)) - { - // found it... - if (aGameVars[i].dwFlags & (GAMEVAR_INTPTR|GAMEVAR_SHORTPTR|GAMEVAR_CHARPTR)) - { - // warning++; - // initprintf("%s:%d: warning: Internal gamevar '%s' cannot be redefined.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - C_ReportError(-1); - initprintf("%s:%d: warning: cannot redefine internal gamevar `%s'.\n",g_szScriptFileName,g_lineNumber,label+(g_numLabels<<6)); - return 0; - } - else if (!(aGameVars[i].dwFlags & GAMEVAR_DEFAULT) && !(aGameVars[i].dwFlags & GAMEVAR_SYSTEM)) - { - // it's a duplicate in error - g_numCompilerWarnings++; - C_ReportError(WARNING_DUPLICATEDEFINITION); - return 0; - } - } - - if (i == -1) - i = g_gameVarCount; - - // Set values - if ((aGameVars[i].dwFlags & GAMEVAR_SYSTEM) == 0) - { - if (aGameVars[i].szLabel == NULL) - aGameVars[i].szLabel=Bcalloc(MAXVARLABEL,sizeof(uint8_t)); - if (aGameVars[i].szLabel != pszLabel) - Bstrcpy(aGameVars[i].szLabel,pszLabel); - aGameVars[i].dwFlags=dwFlags; - - if (aGameVars[i].dwFlags & GAMEVAR_USER_MASK) - { - // only free if not system - if (aGameVars[i].val.plValues) - Bfree(aGameVars[i].val.plValues); - aGameVars[i].val.plValues=NULL; - } - } - - // if existing is system, they only get to change default value.... - aGameVars[i].lDefault = lValue; - aGameVars[i].dwFlags &= ~GAMEVAR_RESET; - - if (i == g_gameVarCount) - { - // we're adding a new one. - hash_add(&h_gamevars, aGameVars[i].szLabel, g_gameVarCount++, 0); - } - - if (aGameVars[i].dwFlags & GAMEVAR_PERPLAYER) - { - if (!aGameVars[i].val.plValues) - aGameVars[i].val.plValues=Bcalloc(MAXPLAYERS,sizeof(intptr_t)); - for (j=MAXPLAYERS-1; j>=0; j--) - aGameVars[i].val.plValues[j]=lValue; - } - else if (aGameVars[i].dwFlags & GAMEVAR_PERACTOR) - { - if (!aGameVars[i].val.plValues) - aGameVars[i].val.plValues=Bcalloc(MAXSPRITES,sizeof(intptr_t)); - for (j=MAXSPRITES-1; j>=0; j--) - aGameVars[i].val.plValues[j]=lValue; - } - else aGameVars[i].val.lValue = lValue; - - return 1; -} - -void __fastcall A_ResetVars(register int32_t iActor) -{ - register int32_t i=(MAXGAMEVARS-1); - do - { - if ((aGameVars[i].dwFlags & (GAMEVAR_PERACTOR|GAMEVAR_NODEFAULT)) == GAMEVAR_PERACTOR) - aGameVars[i].val.plValues[iActor]=aGameVars[i].lDefault; - } - while (i--); -} - -static int32_t Gv_GetVarIndex(const char *szGameLabel) -{ - int32_t i = hash_find(&h_gamevars,szGameLabel); - if (i == -1) - { - OSD_Printf(OSD_ERROR "Gv_GetVarDataPtr(): INTERNAL ERROR: couldn't find gamevar %s!\n",szGameLabel); - return 0; - } - return i; -} - -int32_t __fastcall Gv_GetVar(register int32_t id, register int32_t iActor, register int32_t iPlayer) -{ - if (id == g_iThisActorID) - return iActor; - - if (id == MAXGAMEVARS) - return(*insptr++); - - { - register intptr_t negateResult = id&(MAXGAMEVARS<<1); - - if (id >= g_gameVarCount) - { - if (id&(MAXGAMEVARS<<2)) // array - { - register int32_t index=Gv_GetVar(*insptr++,iActor,iPlayer); - - id &= (MAXGAMEVARS-1);// ~((MAXGAMEVARS<<2)|(MAXGAMEVARS<<1)); - - if (index >= aGameArrays[id].size || index < 0) - { - OSD_Printf(CON_ERROR "Gv_GetVar(): invalid array index (%s[%d])\n",g_errorLineNum,keyw[g_tw],aGameArrays[id].szLabel,index); - return -1; - } - - return ((aGameArrays[id].plValues[index] ^ -negateResult) + negateResult); - } - - if (id&(MAXGAMEVARS<<3)) // struct shortcut vars - { - register int32_t index=Gv_GetVar(*insptr++, iActor, iPlayer); - - switch ((id&(MAXGAMEVARS-1)) - g_iSpriteVarID) - { - case 0: //if (id == g_iSpriteVarID) - { - int32_t parm2 = 0, label = *insptr++; - - /*OSD_Printf("%d %d %d\n",__LINE__,index,label);*/ - if (ActorLabels[label].flags & LABEL_HASPARM2) - parm2 = Gv_GetVar(*insptr++, iActor, iPlayer); - - return ((VM_AccessSpriteX(index, label, parm2) ^ -negateResult) + negateResult); - } - case 3: //else if (id == g_iPlayerVarID) - { - int32_t parm2 = 0, label = *insptr++; - - if (PlayerLabels[label].flags & LABEL_HASPARM2) - parm2 = Gv_GetVar(*insptr++, iActor, iPlayer); - - if (index == vm.g_i) index = vm.g_p; - return ((VM_AccessPlayerX(index, label, parm2) ^ -negateResult) + negateResult); - } - case 4: //else if (id == g_iActorVarID) - return ((Gv_GetVar(*insptr++, index, iPlayer) ^ -negateResult) + negateResult); - case 1: //else if (id == g_iSectorVarID) - if (index == vm.g_i) index = sprite[vm.g_i].sectnum; - return ((VM_AccessSectorX(index, *insptr++) ^ -negateResult) + negateResult); - case 2: //else if (id == g_iWallVarID) - return ((VM_AccessWallX(index, *insptr++) ^ -negateResult) + negateResult); - default: - OSD_Printf(CON_ERROR "Gv_GetVar(): WTF?\n",g_errorLineNum,keyw[g_tw]); - return -1; - } - } - - id &= (MAXGAMEVARS-1); - - if (!negateResult) - { - OSD_Printf(CON_ERROR "Gv_GetVar(): invalid gamevar ID (%d)\n",g_errorLineNum,keyw[g_tw],id); - return -1; - } - } - - switch (aGameVars[id].dwFlags & - (GAMEVAR_USER_MASK|GAMEVAR_INTPTR|GAMEVAR_SHORTPTR|GAMEVAR_CHARPTR)) - { - default: - return ((aGameVars[id].val.lValue ^ -negateResult) + negateResult); - case GAMEVAR_PERPLAYER: - if ((unsigned)iPlayer >= MAXPLAYERS) goto bad_id; - return ((aGameVars[id].val.plValues[iPlayer] ^ -negateResult) + negateResult); - case GAMEVAR_PERACTOR: - if ((unsigned)iActor >= MAXSPRITES) goto bad_id; - return ((aGameVars[id].val.plValues[iActor] ^ -negateResult) + negateResult); - case GAMEVAR_INTPTR: - return (((*((int32_t *)aGameVars[id].val.lValue)) ^ -negateResult) + negateResult); - case GAMEVAR_SHORTPTR: - return (((*((int16_t *)aGameVars[id].val.lValue)) ^ -negateResult) + negateResult); - case GAMEVAR_CHARPTR: - return (((*((char *)aGameVars[id].val.lValue)) ^ -negateResult) + negateResult); - } - } -bad_id: - OSD_Printf(CON_ERROR "Gv_GetVar(): invalid sprite/player ID %d/%d\n",g_errorLineNum,keyw[g_tw],iActor,iPlayer); - return -1; -} - -void __fastcall Gv_SetVar(register int32_t id, register int32_t lValue, register int32_t iActor, register int32_t iPlayer) -{ - if (id<0 || id >= g_gameVarCount) goto badvarid; - - //Bsprintf(g_szBuf,"SGVI: %d ('%s') to %d for %d %d",id,aGameVars[id].szLabel,lValue,iActor,iPlayer); - //AddLog(g_szBuf); - - switch (aGameVars[id].dwFlags & - (GAMEVAR_USER_MASK|GAMEVAR_INTPTR|GAMEVAR_SHORTPTR|GAMEVAR_CHARPTR)) - { - default: - aGameVars[id].val.lValue=lValue; - return; - case GAMEVAR_PERPLAYER: - if ((unsigned)iPlayer > MAXPLAYERS-1) goto badindex; - // for the current player - aGameVars[id].val.plValues[iPlayer]=lValue; - return; - case GAMEVAR_PERACTOR: - if ((unsigned)iActor > MAXSPRITES-1) goto badindex; - aGameVars[id].val.plValues[iActor]=lValue; - return; - case GAMEVAR_INTPTR: - *((int32_t *)aGameVars[id].val.lValue)=(int32_t)lValue; - return; - case GAMEVAR_SHORTPTR: - *((int16_t *)aGameVars[id].val.lValue)=(int16_t)lValue; - return; - case GAMEVAR_CHARPTR: - *((uint8_t *)aGameVars[id].val.lValue)=(uint8_t)lValue; - return; - } - -badvarid: - OSD_Printf(CON_ERROR "Gv_SetVar(): invalid gamevar (%d) from sprite %d (%d), player %d\n", - g_errorLineNum,keyw[g_tw],id,vm.g_i,sprite[vm.g_i].picnum,vm.g_p); - return; - -badindex: - OSD_Printf(CON_ERROR "Gv_SetVar(): invalid index (%d) for gamevar %s from sprite %d, player %d\n", - g_errorLineNum,keyw[g_tw], - aGameVars[id].dwFlags & GAMEVAR_PERACTOR ? iActor : iPlayer, - aGameVars[id].szLabel,vm.g_i,vm.g_p); - return; -} - -int32_t __fastcall Gv_GetVarX(register int32_t id) -{ - if (id == g_iThisActorID) - return vm.g_i; - - if (id == MAXGAMEVARS) - return(*insptr++); - - { - register intptr_t negateResult = id&(MAXGAMEVARS<<1); - - if (id >= g_gameVarCount) - { - if (id&(MAXGAMEVARS<<2)) // array - { - register int32_t index=Gv_GetVarX(*insptr++); - - id &= (MAXGAMEVARS-1);// ~((MAXGAMEVARS<<2)|(MAXGAMEVARS<<1)); - - if (index >= aGameArrays[id].size || index < 0) - { - OSD_Printf(CON_ERROR "Gv_GetVar(): invalid array index (%s[%d])\n",g_errorLineNum,keyw[g_tw],aGameArrays[id].szLabel,index); - return -1; - } - return ((aGameArrays[id].plValues[index] ^ -negateResult) + negateResult); - } - - if (id&(MAXGAMEVARS<<3)) // struct shortcut vars - { - int32_t index=Gv_GetVarX(*insptr++); - - switch ((id&(MAXGAMEVARS-1)) - g_iSpriteVarID) - { - case 0: //if (id == g_iSpriteVarID) - { - register int32_t parm2 = 0, label = *insptr++; - - /*OSD_Printf("%d %d %d\n",__LINE__,index,label);*/ - if (ActorLabels[label].flags & LABEL_HASPARM2) - parm2 = Gv_GetVarX(*insptr++); - - return ((VM_AccessSpriteX(index, label, parm2) ^ -negateResult) + negateResult); - } - case 3: //else if (id == g_iPlayerVarID) - { - register int32_t parm2 = 0, label = *insptr++; - - if (PlayerLabels[label].flags & LABEL_HASPARM2) - parm2 = Gv_GetVarX(*insptr++); - - if (index == vm.g_i) index = vm.g_p; - return ((VM_AccessPlayerX(index, label, parm2) ^ -negateResult) + negateResult); - } - case 4: //else if (id == g_iActorVarID) - return ((Gv_GetVar(*insptr++, index, vm.g_p) ^ -negateResult) + negateResult); - case 1: //else if (id == g_iSectorVarID) - if (index == vm.g_i) index = sprite[vm.g_i].sectnum; - return ((VM_AccessSectorX(index, *insptr++) ^ -negateResult) + negateResult); - case 2: //else if (id == g_iWallVarID) - return ((VM_AccessWallX(index, *insptr++) ^ -negateResult) + negateResult); - default: - OSD_Printf(CON_ERROR "Gv_GetVar(): WTF?\n",g_errorLineNum,keyw[g_tw]); - return -1; - } - } - - id &= (MAXGAMEVARS-1); - - if (!negateResult) - { - OSD_Printf(CON_ERROR "Gv_GetVar(): invalid gamevar ID (%d)\n",g_errorLineNum,keyw[g_tw],id); - return -1; - } - } - - switch (aGameVars[id].dwFlags & - (GAMEVAR_USER_MASK|GAMEVAR_INTPTR|GAMEVAR_SHORTPTR|GAMEVAR_CHARPTR)) - { - default: - return ((aGameVars[id].val.lValue ^ -negateResult) + negateResult); - case GAMEVAR_PERPLAYER: - return ((aGameVars[id].val.plValues[vm.g_p] ^ -negateResult) + negateResult); - case GAMEVAR_PERACTOR: - return ((aGameVars[id].val.plValues[vm.g_i] ^ -negateResult) + negateResult); - case GAMEVAR_INTPTR: - return (((*((int32_t *)aGameVars[id].val.lValue)) ^ -negateResult) + negateResult); - case GAMEVAR_SHORTPTR: - return (((*((int16_t *)aGameVars[id].val.lValue)) ^ -negateResult) + negateResult); - case GAMEVAR_CHARPTR: - return (((*((uint8_t *)aGameVars[id].val.lValue)) ^ -negateResult) + negateResult); - } - } -} - -void __fastcall Gv_SetVarX(register int32_t id, register int32_t lValue) -{ - switch (aGameVars[id].dwFlags & - (GAMEVAR_USER_MASK|GAMEVAR_INTPTR|GAMEVAR_SHORTPTR|GAMEVAR_CHARPTR)) - { - default: - aGameVars[id].val.lValue=lValue; - return; - case GAMEVAR_PERPLAYER: - if ((unsigned)vm.g_p > MAXPLAYERS-1) goto badindex; - aGameVars[id].val.plValues[vm.g_p]=lValue; - return; - case GAMEVAR_PERACTOR: - if ((unsigned)vm.g_i > MAXSPRITES-1) goto badindex; - aGameVars[id].val.plValues[vm.g_i]=lValue; - return; - case GAMEVAR_INTPTR: - *((int32_t *)aGameVars[id].val.lValue)=(int32_t)lValue; - return; - case GAMEVAR_SHORTPTR: - *((int16_t *)aGameVars[id].val.lValue)=(int16_t)lValue; - return; - case GAMEVAR_CHARPTR: - *((uint8_t *)aGameVars[id].val.lValue)=(uint8_t)lValue; - return; - } - -badindex: - OSD_Printf(CON_ERROR "Gv_SetVar(): invalid index (%d) for gamevar %s\n", - g_errorLineNum,keyw[g_tw], - aGameVars[id].dwFlags & GAMEVAR_PERACTOR ? vm.g_i : vm.g_p, - aGameVars[id].szLabel); - return; -} - -int32_t Gv_GetVarByLabel(const char *szGameLabel, int32_t lDefault, int32_t iActor, int32_t iPlayer) -{ - int32_t i = hash_find(&h_gamevars,szGameLabel); - - if (i < 0) - return lDefault; - - return Gv_GetVar(i, iActor, iPlayer); -} - -static intptr_t *Gv_GetVarDataPtr(const char *szGameLabel) -{ - int32_t i = hash_find(&h_gamevars,szGameLabel); - - if (i < 0) - return NULL; - - if (aGameVars[i].dwFlags & (GAMEVAR_PERACTOR | GAMEVAR_PERPLAYER)) - { - if (!aGameVars[i].val.plValues) - OSD_Printf(CON_ERROR "Gv_GetVarDataPtr(): INTERNAL ERROR: NULL array !!!\n",g_errorLineNum,keyw[g_tw]); - return aGameVars[i].val.plValues; - } - - return &(aGameVars[i].val.lValue); -} - -void Gv_ResetSystemDefaults(void) -{ - // call many times... - - int32_t i,j; - char aszBuf[64]; - - //AddLog("ResetWeaponDefaults"); - - for (j=MAXPLAYERS-1; j>=0; j--) - { - for (i=MAX_WEAPONS-1; i>=0; i--) - { - Bsprintf(aszBuf,"WEAPON%d_CLIP",i); - aplWeaponClip[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_RELOAD",i); - aplWeaponReload[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_FIREDELAY",i); - aplWeaponFireDelay[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_TOTALTIME",i); - aplWeaponTotalTime[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_HOLDDELAY",i); - aplWeaponHoldDelay[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_FLAGS",i); - aplWeaponFlags[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_SHOOTS",i); - aplWeaponShoots[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_SPAWNTIME",i); - aplWeaponSpawnTime[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_SPAWN",i); - aplWeaponSpawn[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_SHOTSPERBURST",i); - aplWeaponShotsPerBurst[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_WORKSLIKE",i); - aplWeaponWorksLike[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_INITIALSOUND",i); - aplWeaponInitialSound[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_FIRESOUND",i); - aplWeaponFireSound[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_SOUND2TIME",i); - aplWeaponSound2Time[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_SOUND2SOUND",i); - aplWeaponSound2Sound[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND1",i); - aplWeaponReloadSound1[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND2",i); - aplWeaponReloadSound2[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_SELECTSOUND",i); - aplWeaponSelectSound[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - Bsprintf(aszBuf,"WEAPON%d_FLASHCOLOR",i); - aplWeaponFlashColor[i][j]=Gv_GetVarByLabel(aszBuf,0, -1, j); - } - } - - g_iReturnVarID=Gv_GetVarIndex("RETURN"); - g_iWeaponVarID=Gv_GetVarIndex("WEAPON"); - g_iWorksLikeVarID=Gv_GetVarIndex("WORKSLIKE"); - g_iZRangeVarID=Gv_GetVarIndex("ZRANGE"); - g_iAngRangeVarID=Gv_GetVarIndex("ANGRANGE"); - g_iAimAngleVarID=Gv_GetVarIndex("AUTOAIMANGLE"); - g_iLoTagID=Gv_GetVarIndex("LOTAG"); - g_iHiTagID=Gv_GetVarIndex("HITAG"); - g_iTextureID=Gv_GetVarIndex("TEXTURE"); - g_iThisActorID=Gv_GetVarIndex("THISACTOR"); - - g_iSpriteVarID=Gv_GetVarIndex("sprite"); - g_iSectorVarID=Gv_GetVarIndex("sector"); - g_iWallVarID=Gv_GetVarIndex("wall"); - g_iPlayerVarID=Gv_GetVarIndex("player"); - g_iActorVarID=Gv_GetVarIndex("actorvar"); - - Bmemcpy(&ProjectileData,&DefaultProjectileData,sizeof(ProjectileData)); - - //AddLog("EOF:ResetWeaponDefaults"); -} - -static void Gv_AddSystemVars(void) -{ - // only call ONCE - char aszBuf[64]; - - //AddLog("Gv_AddSystemVars"); - - Bsprintf(aszBuf,"WEAPON%d_WORKSLIKE",KNEE_WEAPON); - Gv_NewVar(aszBuf, KNEE_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_CLIP",KNEE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOAD",KNEE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIREDELAY",KNEE_WEAPON); - Gv_NewVar(aszBuf, 7, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_TOTALTIME",KNEE_WEAPON); - Gv_NewVar(aszBuf, 14, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_HOLDDELAY",KNEE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLAGS",KNEE_WEAPON); - Gv_NewVar(aszBuf, WEAPON_NOVISIBLE | WEAPON_RANDOMRESTART | WEAPON_AUTOMATIC, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOOTS",KNEE_WEAPON); - Gv_NewVar(aszBuf, KNEE, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWNTIME",KNEE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWN",KNEE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOTSPERBURST",KNEE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_INITIALSOUND",KNEE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIRESOUND",KNEE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2TIME",KNEE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2SOUND",KNEE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND1",KNEE_WEAPON); - Gv_NewVar(aszBuf, EJECT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND2",KNEE_WEAPON); - Gv_NewVar(aszBuf, INSERT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SELECTSOUND",KNEE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLASHCOLOR",KNEE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - - - ///////////////////////////// - Bsprintf(aszBuf,"WEAPON%d_WORKSLIKE",PISTOL_WEAPON); - Gv_NewVar(aszBuf, PISTOL_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_CLIP",PISTOL_WEAPON); - Gv_NewVar(aszBuf, NAM?20:12, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOAD",PISTOL_WEAPON); - Gv_NewVar(aszBuf, NAM?50:27, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIREDELAY",PISTOL_WEAPON); - Gv_NewVar(aszBuf, 2, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_TOTALTIME",PISTOL_WEAPON); - Gv_NewVar(aszBuf, 5, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_HOLDDELAY",PISTOL_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLAGS",PISTOL_WEAPON); - Gv_NewVar(aszBuf, NAM?WEAPON_HOLSTER_CLEARS_CLIP:0 | WEAPON_RELOAD_TIMING, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOOTS",PISTOL_WEAPON); - Gv_NewVar(aszBuf, SHOTSPARK1, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWNTIME",PISTOL_WEAPON); - Gv_NewVar(aszBuf, 2, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWN",PISTOL_WEAPON); - Gv_NewVar(aszBuf, SHELL, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOTSPERBURST",PISTOL_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_INITIALSOUND",PISTOL_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIRESOUND",PISTOL_WEAPON); - Gv_NewVar(aszBuf, PISTOL_FIRE, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2TIME",PISTOL_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2SOUND",PISTOL_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND1",PISTOL_WEAPON); - Gv_NewVar(aszBuf, EJECT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND2",PISTOL_WEAPON); - Gv_NewVar(aszBuf, INSERT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SELECTSOUND",PISTOL_WEAPON); - Gv_NewVar(aszBuf, INSERT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLASHCOLOR",PISTOL_WEAPON); - Gv_NewVar(aszBuf, 255+(95<<8), GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - - ///////////////////////////// - Bsprintf(aszBuf,"WEAPON%d_WORKSLIKE",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, SHOTGUN_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_CLIP",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOAD",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, 13, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIREDELAY",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, 4, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_TOTALTIME",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, 30, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_HOLDDELAY",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLAGS",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, WEAPON_CHECKATRELOAD, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOOTS",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, SHOTGUN, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWNTIME",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, 24, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWN",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, SHOTGUNSHELL, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOTSPERBURST",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, 7, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_INITIALSOUND",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIRESOUND",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, SHOTGUN_FIRE, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2TIME",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, 15, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2SOUND",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, SHOTGUN_COCK, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND1",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, EJECT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND2",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, INSERT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SELECTSOUND",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, SHOTGUN_COCK, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLASHCOLOR",SHOTGUN_WEAPON); - Gv_NewVar(aszBuf, 255+(95<<8), GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - - ///////////////////////////// - Bsprintf(aszBuf,"WEAPON%d_WORKSLIKE",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, CHAINGUN_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_CLIP",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOAD",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIREDELAY",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, 3, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_TOTALTIME",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, 12, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_HOLDDELAY",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, 3, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLAGS",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, WEAPON_AUTOMATIC | WEAPON_FIREEVERYTHIRD | WEAPON_AMMOPERSHOT | WEAPON_SPAWNTYPE3 | WEAPON_RESET, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOOTS",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, CHAINGUN, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWNTIME",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, 1, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWN",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, SHELL, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOTSPERBURST",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_INITIALSOUND",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIRESOUND",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, CHAINGUN_FIRE, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2TIME",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2SOUND",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND1",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, EJECT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND2",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, INSERT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SELECTSOUND",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, SELECT_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLASHCOLOR",CHAINGUN_WEAPON); - Gv_NewVar(aszBuf, 255+(95<<8), GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - - ///////////////////////////// - Bsprintf(aszBuf,"WEAPON%d_WORKSLIKE",RPG_WEAPON); - Gv_NewVar(aszBuf, RPG_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_CLIP",RPG_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOAD",RPG_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIREDELAY",RPG_WEAPON); - Gv_NewVar(aszBuf, 4, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_TOTALTIME",RPG_WEAPON); - Gv_NewVar(aszBuf, 20, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_HOLDDELAY",RPG_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLAGS",RPG_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOOTS",RPG_WEAPON); - Gv_NewVar(aszBuf, RPG, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWNTIME",RPG_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWN",RPG_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOTSPERBURST",RPG_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_INITIALSOUND",RPG_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIRESOUND",RPG_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2TIME",RPG_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2SOUND",RPG_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND1",RPG_WEAPON); - Gv_NewVar(aszBuf, EJECT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND2",RPG_WEAPON); - Gv_NewVar(aszBuf, INSERT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SELECTSOUND",RPG_WEAPON); - Gv_NewVar(aszBuf, SELECT_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLASHCOLOR",RPG_WEAPON); - Gv_NewVar(aszBuf, 255+(95<<8), GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - - ///////////////////////////// - Bsprintf(aszBuf,"WEAPON%d_WORKSLIKE",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, HANDBOMB_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_CLIP",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOAD",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, 30, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIREDELAY",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, 6, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_TOTALTIME",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, 19, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_HOLDDELAY",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, 12, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLAGS",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, WEAPON_THROWIT, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOOTS",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, HEAVYHBOMB, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWNTIME",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWN",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOTSPERBURST",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_INITIALSOUND",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIRESOUND",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2TIME",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2SOUND",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND1",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, EJECT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND2",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, INSERT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SELECTSOUND",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLASHCOLOR",HANDBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - - ///////////////////////////// - Bsprintf(aszBuf,"WEAPON%d_WORKSLIKE",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, SHRINKER_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_CLIP",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOAD",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIREDELAY",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, 10, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_TOTALTIME",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, NAM?30:12, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_HOLDDELAY",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLAGS",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, WEAPON_GLOWS, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOOTS",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, SHRINKER, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWNTIME",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWN",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOTSPERBURST",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_INITIALSOUND",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, SHRINKER_FIRE, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIRESOUND",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2TIME",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2SOUND",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND1",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, EJECT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND2",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, INSERT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SELECTSOUND",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, SELECT_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLASHCOLOR",SHRINKER_WEAPON); - Gv_NewVar(aszBuf, 128+(255<<8)+(128<<16), GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - - ///////////////////////////// - Bsprintf(aszBuf,"WEAPON%d_WORKSLIKE",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, DEVISTATOR_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_CLIP",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOAD",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIREDELAY",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, 3, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_TOTALTIME",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, 6, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_HOLDDELAY",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, 5, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLAGS",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, WEAPON_FIREEVERYOTHER | WEAPON_AMMOPERSHOT, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOOTS",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, RPG, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWNTIME",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWN",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOTSPERBURST",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, 2, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_INITIALSOUND",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, CAT_FIRE, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIRESOUND",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2TIME",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2SOUND",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND1",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, EJECT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND2",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, INSERT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SELECTSOUND",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, SELECT_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLASHCOLOR",DEVISTATOR_WEAPON); - Gv_NewVar(aszBuf, 255+(95<<8), GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - - ///////////////////////////// - Bsprintf(aszBuf,"WEAPON%d_WORKSLIKE",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, TRIPBOMB_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_CLIP",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOAD",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, 16, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIREDELAY",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, 3, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_TOTALTIME",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, 16, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_HOLDDELAY",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, 7, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLAGS",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, WEAPON_NOVISIBLE | WEAPON_STANDSTILL | WEAPON_CHECKATRELOAD, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOOTS",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, HANDHOLDINGLASER, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWNTIME",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWN",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOTSPERBURST",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_INITIALSOUND",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIRESOUND",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2TIME",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2SOUND",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND1",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, EJECT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND2",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, INSERT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SELECTSOUND",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLASHCOLOR",TRIPBOMB_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - - ///////////////////////////// - Bsprintf(aszBuf,"WEAPON%d_WORKSLIKE",FREEZE_WEAPON); - Gv_NewVar(aszBuf, FREEZE_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_CLIP",FREEZE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOAD",FREEZE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIREDELAY",FREEZE_WEAPON); - Gv_NewVar(aszBuf, 3, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_TOTALTIME",FREEZE_WEAPON); - Gv_NewVar(aszBuf, 5, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_HOLDDELAY",FREEZE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLAGS",FREEZE_WEAPON); - Gv_NewVar(aszBuf, WEAPON_RESET, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOOTS",FREEZE_WEAPON); - Gv_NewVar(aszBuf, FREEZEBLAST, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWNTIME",FREEZE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWN",FREEZE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOTSPERBURST",FREEZE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_INITIALSOUND",FREEZE_WEAPON); - Gv_NewVar(aszBuf, CAT_FIRE, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIRESOUND",FREEZE_WEAPON); - Gv_NewVar(aszBuf, CAT_FIRE, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2TIME",FREEZE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2SOUND",FREEZE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND1",FREEZE_WEAPON); - Gv_NewVar(aszBuf, EJECT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND2",FREEZE_WEAPON); - Gv_NewVar(aszBuf, INSERT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SELECTSOUND",FREEZE_WEAPON); - Gv_NewVar(aszBuf, SELECT_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLASHCOLOR",FREEZE_WEAPON); - Gv_NewVar(aszBuf, 128+(128<<8)+(255<<16), GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - - ///////////////////////////// - Bsprintf(aszBuf,"WEAPON%d_WORKSLIKE",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, HANDREMOTE_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_CLIP",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOAD",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, 10, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIREDELAY",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, 2, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_TOTALTIME",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, 10, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_HOLDDELAY",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLAGS",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, WEAPON_BOMB_TRIGGER | WEAPON_NOVISIBLE, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOOTS",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWNTIME",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWN",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOTSPERBURST",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_INITIALSOUND",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIRESOUND",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2TIME",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2SOUND",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND1",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, EJECT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND2",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, INSERT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SELECTSOUND",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLASHCOLOR",HANDREMOTE_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - - /////////////////////////////////////////////////////// - Bsprintf(aszBuf,"WEAPON%d_WORKSLIKE",GROW_WEAPON); - Gv_NewVar(aszBuf, GROW_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_CLIP",GROW_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOAD",GROW_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIREDELAY",GROW_WEAPON); - Gv_NewVar(aszBuf, 3, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_TOTALTIME",GROW_WEAPON); - Gv_NewVar(aszBuf, NAM?30:5, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_HOLDDELAY",GROW_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLAGS",GROW_WEAPON); - Gv_NewVar(aszBuf, WEAPON_GLOWS, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOOTS",GROW_WEAPON); - Gv_NewVar(aszBuf, GROWSPARK, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWNTIME",GROW_WEAPON); - Gv_NewVar(aszBuf, NAM?2:0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SPAWN",GROW_WEAPON); - Gv_NewVar(aszBuf, NAM?SHELL:0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SHOTSPERBURST",GROW_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_INITIALSOUND",GROW_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FIRESOUND",GROW_WEAPON); - Gv_NewVar(aszBuf, NAM?0:EXPANDERSHOOT, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2TIME",GROW_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SOUND2SOUND",GROW_WEAPON); - Gv_NewVar(aszBuf, 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND1",GROW_WEAPON); - Gv_NewVar(aszBuf, EJECT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND2",GROW_WEAPON); - Gv_NewVar(aszBuf, INSERT_CLIP, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_SELECTSOUND",GROW_WEAPON); - Gv_NewVar(aszBuf, SELECT_WEAPON, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Bsprintf(aszBuf,"WEAPON%d_FLASHCOLOR",GROW_WEAPON); - Gv_NewVar(aszBuf, 255+(95<<8), GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - - Gv_NewVar("GRENADE_LIFETIME", NAM_GRENADE_LIFETIME, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Gv_NewVar("GRENADE_LIFETIME_VAR", NAM_GRENADE_LIFETIME_VAR, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - - Gv_NewVar("STICKYBOMB_LIFETIME", NAM_GRENADE_LIFETIME, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Gv_NewVar("STICKYBOMB_LIFETIME_VAR", NAM_GRENADE_LIFETIME_VAR, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - - Gv_NewVar("TRIPBOMB_CONTROL", TRIPBOMB_TRIPWIRE, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Gv_NewVar("PIPEBOMB_CONTROL", NAM?PIPEBOMB_TIMER:PIPEBOMB_REMOTE, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - - Gv_NewVar("RESPAWN_MONSTERS", (intptr_t)&ud.respawn_monsters,GAMEVAR_SYSTEM | GAMEVAR_INTPTR); - Gv_NewVar("RESPAWN_ITEMS",(intptr_t)&ud.respawn_items, GAMEVAR_SYSTEM | GAMEVAR_INTPTR); - Gv_NewVar("RESPAWN_INVENTORY",(intptr_t)&ud.respawn_inventory, GAMEVAR_SYSTEM | GAMEVAR_INTPTR); - Gv_NewVar("MONSTERS_OFF",(intptr_t)&ud.monsters_off, GAMEVAR_SYSTEM | GAMEVAR_INTPTR); - Gv_NewVar("MARKER",(intptr_t)&ud.marker, GAMEVAR_SYSTEM | GAMEVAR_INTPTR); - Gv_NewVar("FFIRE",(intptr_t)&ud.ffire, GAMEVAR_SYSTEM | GAMEVAR_INTPTR); - Gv_NewVar("LEVEL",(intptr_t)&ud.level_number, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_READONLY); - Gv_NewVar("VOLUME",(intptr_t)&ud.volume_number, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_READONLY); - - Gv_NewVar("COOP",(intptr_t)&ud.coop, GAMEVAR_SYSTEM | GAMEVAR_INTPTR); - Gv_NewVar("MULTIMODE",(intptr_t)&ud.multimode, GAMEVAR_SYSTEM | GAMEVAR_INTPTR); - - Gv_NewVar("WEAPON", 0, GAMEVAR_PERPLAYER | GAMEVAR_READONLY | GAMEVAR_SYSTEM); - Gv_NewVar("WORKSLIKE", 0, GAMEVAR_PERPLAYER | GAMEVAR_READONLY | GAMEVAR_SYSTEM); - Gv_NewVar("RETURN", 0, GAMEVAR_SYSTEM); - Gv_NewVar("ZRANGE", 4, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Gv_NewVar("ANGRANGE", 18, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Gv_NewVar("AUTOAIMANGLE", 0, GAMEVAR_PERPLAYER | GAMEVAR_SYSTEM); - Gv_NewVar("LOTAG", 0, GAMEVAR_SYSTEM); - Gv_NewVar("HITAG", 0, GAMEVAR_SYSTEM); - Gv_NewVar("TEXTURE", 0, GAMEVAR_SYSTEM); - Gv_NewVar("THISACTOR", 0, GAMEVAR_READONLY | GAMEVAR_SYSTEM); - - // special vars for struct access - Gv_NewVar("sprite", -1, GAMEVAR_READONLY | GAMEVAR_SYSTEM | GAMEVAR_SPECIAL); - Gv_NewVar("sector", -1, GAMEVAR_READONLY | GAMEVAR_SYSTEM | GAMEVAR_SPECIAL); - Gv_NewVar("wall", -1, GAMEVAR_READONLY | GAMEVAR_SYSTEM | GAMEVAR_SPECIAL); - Gv_NewVar("player", -1, GAMEVAR_READONLY | GAMEVAR_SYSTEM | GAMEVAR_SPECIAL); - Gv_NewVar("actorvar", -1, GAMEVAR_READONLY | GAMEVAR_SYSTEM | GAMEVAR_SPECIAL); - - Gv_NewVar("myconnectindex", (intptr_t)&myconnectindex, GAMEVAR_READONLY | GAMEVAR_INTPTR | GAMEVAR_SYSTEM | GAMEVAR_SYNCCHECK); - Gv_NewVar("screenpeek", (intptr_t)&screenpeek, GAMEVAR_READONLY | GAMEVAR_INTPTR | GAMEVAR_SYSTEM | GAMEVAR_SYNCCHECK); - Gv_NewVar("currentweapon",(intptr_t)&g_currentweapon, GAMEVAR_INTPTR | GAMEVAR_SYSTEM | GAMEVAR_SYNCCHECK); - Gv_NewVar("gs",(intptr_t)&g_gs, GAMEVAR_INTPTR | GAMEVAR_SYSTEM | GAMEVAR_SYNCCHECK); - Gv_NewVar("looking_arc",(intptr_t)&g_looking_arc, GAMEVAR_INTPTR | GAMEVAR_SYSTEM | GAMEVAR_SYNCCHECK); - Gv_NewVar("gun_pos",(intptr_t)&g_gun_pos, GAMEVAR_INTPTR | GAMEVAR_SYSTEM | GAMEVAR_SYNCCHECK); - Gv_NewVar("weapon_xoffset",(intptr_t)&g_weapon_xoffset, GAMEVAR_INTPTR | GAMEVAR_SYSTEM | GAMEVAR_SYNCCHECK); - Gv_NewVar("weaponcount",(intptr_t)&g_kb, GAMEVAR_INTPTR | GAMEVAR_SYSTEM | GAMEVAR_SYNCCHECK); - Gv_NewVar("looking_angSR1",(intptr_t)&g_looking_angSR1, GAMEVAR_INTPTR | GAMEVAR_SYSTEM | GAMEVAR_SYNCCHECK); - Gv_NewVar("xdim",(intptr_t)&xdim, GAMEVAR_INTPTR | GAMEVAR_SYSTEM | GAMEVAR_READONLY | GAMEVAR_SYNCCHECK); - Gv_NewVar("ydim",(intptr_t)&ydim, GAMEVAR_INTPTR | GAMEVAR_SYSTEM | GAMEVAR_READONLY | GAMEVAR_SYNCCHECK); - Gv_NewVar("windowx1",(intptr_t)&windowx1, GAMEVAR_INTPTR | GAMEVAR_SYSTEM | GAMEVAR_READONLY | GAMEVAR_SYNCCHECK); - Gv_NewVar("windowx2",(intptr_t)&windowx2, GAMEVAR_INTPTR | GAMEVAR_SYSTEM | GAMEVAR_READONLY | GAMEVAR_SYNCCHECK); - Gv_NewVar("windowy1",(intptr_t)&windowy1, GAMEVAR_INTPTR | GAMEVAR_SYSTEM | GAMEVAR_READONLY | GAMEVAR_SYNCCHECK); - Gv_NewVar("windowy2",(intptr_t)&windowy2, GAMEVAR_INTPTR | GAMEVAR_SYSTEM | GAMEVAR_READONLY | GAMEVAR_SYNCCHECK); - Gv_NewVar("totalclock",(intptr_t)&totalclock, GAMEVAR_INTPTR | GAMEVAR_SYSTEM | GAMEVAR_READONLY | GAMEVAR_SYNCCHECK); - Gv_NewVar("lastvisinc",(intptr_t)&lastvisinc, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("numsectors",(intptr_t)&numsectors, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_READONLY); - - Gv_NewVar("current_menu",(intptr_t)&g_currentMenu, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_READONLY); - Gv_NewVar("numplayers",(intptr_t)&numplayers, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_READONLY); - Gv_NewVar("viewingrange",(intptr_t)&viewingrange, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_READONLY | GAMEVAR_SYNCCHECK); - Gv_NewVar("yxaspect",(intptr_t)&yxaspect, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_READONLY | GAMEVAR_SYNCCHECK); - Gv_NewVar("gravitationalconstant",(intptr_t)&g_spriteGravity, GAMEVAR_SYSTEM | GAMEVAR_INTPTR); - Gv_NewVar("gametype_flags",(intptr_t)&GametypeFlags[ud.coop], GAMEVAR_SYSTEM | GAMEVAR_INTPTR); - Gv_NewVar("framerate",(intptr_t)&g_currentFrameRate, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_READONLY | GAMEVAR_SYNCCHECK); - Gv_NewVar("CLIPMASK0", CLIPMASK0, GAMEVAR_SYSTEM|GAMEVAR_READONLY); - Gv_NewVar("CLIPMASK1", CLIPMASK1, GAMEVAR_SYSTEM|GAMEVAR_READONLY); - - Gv_NewVar("camerax",(intptr_t)&ud.camera.x, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("cameray",(intptr_t)&ud.camera.y, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("cameraz",(intptr_t)&ud.camera.z, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("cameraang",(intptr_t)&ud.cameraang, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("camerahoriz",(intptr_t)&ud.camerahoriz, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("camerasect",(intptr_t)&ud.camerasect, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("cameradist",(intptr_t)&g_cameraDistance, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("cameraclock",(intptr_t)&g_cameraClock, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); - - Gv_NewVar("myx",(intptr_t)&my.x, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("myy",(intptr_t)&my.y, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("myz",(intptr_t)&my.z, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("omyx",(intptr_t)&omy.x, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("omyy",(intptr_t)&omy.y, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("omyz",(intptr_t)&omy.z, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("myvelx",(intptr_t)&myvel.x, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("myvely",(intptr_t)&myvel.y, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("myvelz",(intptr_t)&myvel.z, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); - - Gv_NewVar("myhoriz",(intptr_t)&myhoriz, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("myhorizoff",(intptr_t)&myhorizoff, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("omyhoriz",(intptr_t)&omyhoriz, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("omyhorizoff",(intptr_t)&omyhorizoff, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("myang",(intptr_t)&myang, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("omyang",(intptr_t)&omyang, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("mycursectnum",(intptr_t)&mycursectnum, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("myjumpingcounter",(intptr_t)&myjumpingcounter, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_SYNCCHECK); - - Gv_NewVar("myjumpingtoggle",(intptr_t)&myjumpingtoggle, GAMEVAR_SYSTEM | GAMEVAR_CHARPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("myonground",(intptr_t)&myonground, GAMEVAR_SYSTEM | GAMEVAR_CHARPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("myhardlanding",(intptr_t)&myhardlanding, GAMEVAR_SYSTEM | GAMEVAR_CHARPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("myreturntocenter",(intptr_t)&myreturntocenter, GAMEVAR_SYSTEM | GAMEVAR_CHARPTR | GAMEVAR_SYNCCHECK); - - Gv_NewVar("display_mirror",(intptr_t)&display_mirror, GAMEVAR_SYSTEM | GAMEVAR_CHARPTR | GAMEVAR_SYNCCHECK); - Gv_NewVar("randomseed",(intptr_t)&randomseed, GAMEVAR_SYSTEM | GAMEVAR_INTPTR); - - Gv_NewVar("NUMWALLS",(intptr_t)&numwalls, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_READONLY); - Gv_NewVar("NUMSECTORS",(intptr_t)&numsectors, GAMEVAR_SYSTEM | GAMEVAR_SHORTPTR | GAMEVAR_READONLY); - - Gv_NewVar("lastsavepos",(intptr_t)&g_lastSaveSlot, GAMEVAR_SYSTEM | GAMEVAR_INTPTR | GAMEVAR_SYNCCHECK); -#ifdef USE_OPENGL - Gv_NewVar("rendmode",(intptr_t)&rendmode, GAMEVAR_READONLY | GAMEVAR_INTPTR | GAMEVAR_SYSTEM | GAMEVAR_SYNCCHECK); -#else - Gv_NewVar("rendmode", 0, GAMEVAR_READONLY | GAMEVAR_SYSTEM | GAMEVAR_SYNCCHECK); -#endif -} - -void Gv_Init(void) -{ - // only call ONCE - - // initprintf("Initializing game variables\n"); - //AddLog("Gv_Init"); - - Gv_Clear(); - Gv_AddSystemVars(); - Gv_InitWeaponPointers(); - Gv_ResetSystemDefaults(); -} - -void Gv_InitWeaponPointers(void) -{ - int32_t i; - char aszBuf[64]; - // called from game Init AND when level is loaded... - - //AddLog("Gv_InitWeaponPointers"); - - for (i=(MAX_WEAPONS-1); i>=0; i--) - { - Bsprintf(aszBuf,"WEAPON%d_CLIP",i); - aplWeaponClip[i]=Gv_GetVarDataPtr(aszBuf); - if (!aplWeaponClip[i]) - { - initprintf("ERROR: NULL weapon! WTF?!\n"); - // exit(0); - G_Shutdown(); - } - Bsprintf(aszBuf,"WEAPON%d_RELOAD",i); - aplWeaponReload[i]=Gv_GetVarDataPtr(aszBuf); - Bsprintf(aszBuf,"WEAPON%d_FIREDELAY",i); - aplWeaponFireDelay[i]=Gv_GetVarDataPtr(aszBuf); - Bsprintf(aszBuf,"WEAPON%d_TOTALTIME",i); - aplWeaponTotalTime[i]=Gv_GetVarDataPtr(aszBuf); - Bsprintf(aszBuf,"WEAPON%d_HOLDDELAY",i); - aplWeaponHoldDelay[i]=Gv_GetVarDataPtr(aszBuf); - Bsprintf(aszBuf,"WEAPON%d_FLAGS",i); - aplWeaponFlags[i]=Gv_GetVarDataPtr(aszBuf); - Bsprintf(aszBuf,"WEAPON%d_SHOOTS",i); - aplWeaponShoots[i]=Gv_GetVarDataPtr(aszBuf); - Bsprintf(aszBuf,"WEAPON%d_SPAWNTIME",i); - aplWeaponSpawnTime[i]=Gv_GetVarDataPtr(aszBuf); - Bsprintf(aszBuf,"WEAPON%d_SPAWN",i); - aplWeaponSpawn[i]=Gv_GetVarDataPtr(aszBuf); - Bsprintf(aszBuf,"WEAPON%d_SHOTSPERBURST",i); - aplWeaponShotsPerBurst[i]=Gv_GetVarDataPtr(aszBuf); - Bsprintf(aszBuf,"WEAPON%d_WORKSLIKE",i); - aplWeaponWorksLike[i]=Gv_GetVarDataPtr(aszBuf); - Bsprintf(aszBuf,"WEAPON%d_INITIALSOUND",i); - aplWeaponInitialSound[i]=Gv_GetVarDataPtr(aszBuf); - Bsprintf(aszBuf,"WEAPON%d_FIRESOUND",i); - aplWeaponFireSound[i]=Gv_GetVarDataPtr(aszBuf); - Bsprintf(aszBuf,"WEAPON%d_SOUND2TIME",i); - aplWeaponSound2Time[i]=Gv_GetVarDataPtr(aszBuf); - Bsprintf(aszBuf,"WEAPON%d_SOUND2SOUND",i); - aplWeaponSound2Sound[i]=Gv_GetVarDataPtr(aszBuf); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND1",i); - aplWeaponReloadSound1[i]=Gv_GetVarDataPtr(aszBuf); - Bsprintf(aszBuf,"WEAPON%d_RELOADSOUND2",i); - aplWeaponReloadSound2[i]=Gv_GetVarDataPtr(aszBuf); - Bsprintf(aszBuf,"WEAPON%d_SELECTSOUND",i); - aplWeaponSelectSound[i]=Gv_GetVarDataPtr(aszBuf); - Bsprintf(aszBuf,"WEAPON%d_FLASHCOLOR",i); - aplWeaponFlashColor[i]=Gv_GetVarDataPtr(aszBuf); - } -} - -void Gv_RefreshPointers(void) -{ - aGameVars[Gv_GetVarIndex("RESPAWN_MONSTERS")].val.lValue = (intptr_t)&ud.respawn_monsters; - aGameVars[Gv_GetVarIndex("RESPAWN_ITEMS")].val.lValue = (intptr_t)&ud.respawn_items; - aGameVars[Gv_GetVarIndex("RESPAWN_INVENTORY")].val.lValue = (intptr_t)&ud.respawn_inventory; - aGameVars[Gv_GetVarIndex("MONSTERS_OFF")].val.lValue = (intptr_t)&ud.monsters_off; - aGameVars[Gv_GetVarIndex("MARKER")].val.lValue = (intptr_t)&ud.marker; - aGameVars[Gv_GetVarIndex("FFIRE")].val.lValue = (intptr_t)&ud.ffire; - aGameVars[Gv_GetVarIndex("LEVEL")].val.lValue = (intptr_t)&ud.level_number; - aGameVars[Gv_GetVarIndex("VOLUME")].val.lValue = (intptr_t)&ud.volume_number; - - aGameVars[Gv_GetVarIndex("COOP")].val.lValue = (intptr_t)&ud.coop; - aGameVars[Gv_GetVarIndex("MULTIMODE")].val.lValue = (intptr_t)&ud.multimode; - - aGameVars[Gv_GetVarIndex("myconnectindex")].val.lValue = (intptr_t)&myconnectindex; - aGameVars[Gv_GetVarIndex("screenpeek")].val.lValue = (intptr_t)&screenpeek; - aGameVars[Gv_GetVarIndex("currentweapon")].val.lValue = (intptr_t)&g_currentweapon; - aGameVars[Gv_GetVarIndex("gs")].val.lValue = (intptr_t)&g_gs; - aGameVars[Gv_GetVarIndex("looking_arc")].val.lValue = (intptr_t)&g_looking_arc; - aGameVars[Gv_GetVarIndex("gun_pos")].val.lValue = (intptr_t)&g_gun_pos; - aGameVars[Gv_GetVarIndex("weapon_xoffset")].val.lValue = (intptr_t)&g_weapon_xoffset; - aGameVars[Gv_GetVarIndex("weaponcount")].val.lValue = (intptr_t)&g_kb; - aGameVars[Gv_GetVarIndex("looking_angSR1")].val.lValue = (intptr_t)&g_looking_angSR1; - aGameVars[Gv_GetVarIndex("xdim")].val.lValue = (intptr_t)&xdim; - aGameVars[Gv_GetVarIndex("ydim")].val.lValue = (intptr_t)&ydim; - aGameVars[Gv_GetVarIndex("windowx1")].val.lValue = (intptr_t)&windowx1; - aGameVars[Gv_GetVarIndex("windowx2")].val.lValue = (intptr_t)&windowx2; - aGameVars[Gv_GetVarIndex("windowy1")].val.lValue = (intptr_t)&windowy1; - aGameVars[Gv_GetVarIndex("windowy2")].val.lValue = (intptr_t)&windowy2; - aGameVars[Gv_GetVarIndex("totalclock")].val.lValue = (intptr_t)&totalclock; - aGameVars[Gv_GetVarIndex("lastvisinc")].val.lValue = (intptr_t)&lastvisinc; - aGameVars[Gv_GetVarIndex("numsectors")].val.lValue = (intptr_t)&numsectors; - aGameVars[Gv_GetVarIndex("numplayers")].val.lValue = (intptr_t)&numplayers; - aGameVars[Gv_GetVarIndex("current_menu")].val.lValue = (intptr_t)&g_currentMenu; - aGameVars[Gv_GetVarIndex("viewingrange")].val.lValue = (intptr_t)&viewingrange; - aGameVars[Gv_GetVarIndex("yxaspect")].val.lValue = (intptr_t)&yxaspect; - aGameVars[Gv_GetVarIndex("gravitationalconstant")].val.lValue = (intptr_t)&g_spriteGravity; - aGameVars[Gv_GetVarIndex("gametype_flags")].val.lValue = (intptr_t)&GametypeFlags[ud.coop]; - aGameVars[Gv_GetVarIndex("framerate")].val.lValue = (intptr_t)&g_currentFrameRate; - - aGameVars[Gv_GetVarIndex("camerax")].val.lValue = (intptr_t)&ud.camera.x; - aGameVars[Gv_GetVarIndex("cameray")].val.lValue = (intptr_t)&ud.camera.y; - aGameVars[Gv_GetVarIndex("cameraz")].val.lValue = (intptr_t)&ud.camera.z; - aGameVars[Gv_GetVarIndex("cameraang")].val.lValue = (intptr_t)&ud.cameraang; - aGameVars[Gv_GetVarIndex("camerahoriz")].val.lValue = (intptr_t)&ud.camerahoriz; - aGameVars[Gv_GetVarIndex("camerasect")].val.lValue = (intptr_t)&ud.camerasect; - aGameVars[Gv_GetVarIndex("cameradist")].val.lValue = (intptr_t)&g_cameraDistance; - aGameVars[Gv_GetVarIndex("cameraclock")].val.lValue = (intptr_t)&g_cameraClock; - - aGameVars[Gv_GetVarIndex("myx")].val.lValue = (intptr_t)&my.x; - aGameVars[Gv_GetVarIndex("myy")].val.lValue = (intptr_t)&my.y; - aGameVars[Gv_GetVarIndex("myz")].val.lValue = (intptr_t)&my.z; - aGameVars[Gv_GetVarIndex("omyx")].val.lValue = (intptr_t)&omy.x; - aGameVars[Gv_GetVarIndex("omyy")].val.lValue = (intptr_t)&omy.y; - aGameVars[Gv_GetVarIndex("omyz")].val.lValue = (intptr_t)&omy.z; - aGameVars[Gv_GetVarIndex("myvelx")].val.lValue = (intptr_t)&myvel.x; - aGameVars[Gv_GetVarIndex("myvely")].val.lValue = (intptr_t)&myvel.y; - aGameVars[Gv_GetVarIndex("myvelz")].val.lValue = (intptr_t)&myvel.z; - - aGameVars[Gv_GetVarIndex("myhoriz")].val.lValue = (intptr_t)&myhoriz; - aGameVars[Gv_GetVarIndex("myhorizoff")].val.lValue = (intptr_t)&myhorizoff; - aGameVars[Gv_GetVarIndex("omyhoriz")].val.lValue = (intptr_t)&omyhoriz; - aGameVars[Gv_GetVarIndex("omyhorizoff")].val.lValue = (intptr_t)&omyhorizoff; - aGameVars[Gv_GetVarIndex("myang")].val.lValue = (intptr_t)&myang; - aGameVars[Gv_GetVarIndex("omyang")].val.lValue = (intptr_t)&omyang; - aGameVars[Gv_GetVarIndex("mycursectnum")].val.lValue = (intptr_t)&mycursectnum; - aGameVars[Gv_GetVarIndex("myjumpingcounter")].val.lValue = (intptr_t)&myjumpingcounter; - - aGameVars[Gv_GetVarIndex("myjumpingtoggle")].val.lValue = (intptr_t)&myjumpingtoggle; - aGameVars[Gv_GetVarIndex("myonground")].val.lValue = (intptr_t)&myonground; - aGameVars[Gv_GetVarIndex("myhardlanding")].val.lValue = (intptr_t)&myhardlanding; - aGameVars[Gv_GetVarIndex("myreturntocenter")].val.lValue = (intptr_t)&myreturntocenter; - - aGameVars[Gv_GetVarIndex("display_mirror")].val.lValue = (intptr_t)&display_mirror; - aGameVars[Gv_GetVarIndex("randomseed")].val.lValue = (intptr_t)&randomseed; - - aGameVars[Gv_GetVarIndex("NUMWALLS")].val.lValue = (intptr_t)&numwalls; - aGameVars[Gv_GetVarIndex("NUMSECTORS")].val.lValue = (intptr_t)&numsectors; - - aGameVars[Gv_GetVarIndex("lastsavepos")].val.lValue = (intptr_t)&g_lastSaveSlot; -#ifdef USE_OPENGL - aGameVars[Gv_GetVarIndex("rendmode")].val.lValue = (intptr_t)&rendmode; -#endif -} diff --git a/polymer-perf/eduke32/source/gamevars.h b/polymer-perf/eduke32/source/gamevars.h deleted file mode 100644 index af69a1cb3..000000000 --- a/polymer-perf/eduke32/source/gamevars.h +++ /dev/null @@ -1,97 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#ifndef __gamevars_h__ -#define __gamevars_h__ - -// store global game definitions -enum GamevarFlags_t { - MAXGAMEVARS = 2048, // must be a power of two - MAXVARLABEL = 26, - GAMEVAR_PERPLAYER = 0x00000001, // per-player variable - GAMEVAR_PERACTOR = 0x00000002, // per-actor variable - GAMEVAR_USER_MASK = (0x00000001|0x00000002), - GAMEVAR_RESET = 0x00000008, // marks var for to default - GAMEVAR_DEFAULT = 0x00000100, // allow override - GAMEVAR_SECRET = 0x00000200, // don't dump... - GAMEVAR_NODEFAULT = 0x00000400, // don't reset on actor spawn - GAMEVAR_SYSTEM = 0x00000800, // cannot change mode flags...(only default value) - GAMEVAR_READONLY = 0x00001000, // values are read-only (no setvar allowed) - GAMEVAR_INTPTR = 0x00002000, // plValues is a pointer to an int32_t - GAMEVAR_SYNCCHECK = 0x00004000, // throw warnings during compile if used in local event - GAMEVAR_SHORTPTR = 0x00008000, // plValues is a pointer to a short - GAMEVAR_CHARPTR = 0x00010000, // plValues is a pointer to a char - GAMEVAR_NORESET = 0x00020000, // var values are not reset when restoring map state - GAMEVAR_SPECIAL = 0x00040000, // flag for structure member shortcut vars - GAMEVAR_NOMULTI = 0x00080000, // don't attach to multiplayer packets -}; - -enum GamearrayFlags_t { - MAXGAMEARRAYS = (MAXGAMEVARS>>2), // must be lower than MAXGAMEVARS - MAXARRAYLABEL = MAXVARLABEL, - GAMEARRAY_NORMAL = 0, - GAMEARRAY_NORESET = 0x00000001, -}; - -#pragma pack(push,1) -typedef struct { - union { - intptr_t lValue; - intptr_t *plValues; // array of values when 'per-player', or 'per-actor' - } val; - intptr_t lDefault; - uintptr_t dwFlags; - char *szLabel; -} gamevar_t; - -typedef struct { - char *szLabel; - int32_t *plValues; // array of values - intptr_t size; - intptr_t bReset; -} gamearray_t; -#pragma pack(pop) - -extern gamevar_t aGameVars[MAXGAMEVARS]; -extern gamearray_t aGameArrays[MAXGAMEARRAYS]; -extern int32_t g_gameVarCount; -extern int32_t g_gameArrayCount; - -int32_t __fastcall Gv_GetVar(register int32_t id,register int32_t iActor,register int32_t iPlayer); -int32_t __fastcall Gv_GetVarX(register int32_t id); -int32_t Gv_GetVarByLabel(const char *szGameLabel,int32_t lDefault,int32_t iActor,int32_t iPlayer); -int32_t Gv_NewArray(const char *pszLabel,int32_t asize); -int32_t Gv_NewVar(const char *pszLabel,int32_t lValue,uint32_t dwFlags); -int32_t Gv_ReadSave(int32_t fil,int32_t newbehav); -void __fastcall A_ResetVars(register int32_t iActor); -void __fastcall Gv_SetVar(register int32_t id,register int32_t lValue,register int32_t iActor,register int32_t iPlayer); -void __fastcall Gv_SetVarX(register int32_t id,register int32_t lValue); -void G_FreeMapState(int32_t mapnum); -void Gv_DumpValues(void); -void Gv_Init(void); -void Gv_InitWeaponPointers(void); -void Gv_RefreshPointers(void); -void Gv_RefreshPointers(void); -void Gv_ResetSystemDefaults(void); -void Gv_ResetVars(void); -void Gv_WriteSave(FILE *fil,int32_t newbehav); -#endif diff --git a/polymer-perf/eduke32/source/global.c b/polymer-perf/eduke32/source/global.c deleted file mode 100644 index 95aa23802..000000000 --- a/polymer-perf/eduke32/source/global.c +++ /dev/null @@ -1,192 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#define __global_c__ -#include "global.h" -#include "duke3d.h" -#include "rev.h" - -const char *s_buildDate = "20110109"; -char *MusicPtr = NULL; -int32_t g_musicSize; - -int16_t g_globalRandom; -int16_t neartagsector, neartagwall, neartagsprite; - -int32_t neartaghitdist,lockclock,g_startArmorAmount; -// JBF: g_spriteGravity modified to default to Atomic ed. default when using 1.3d CONs -int32_t g_spriteGravity=176; - -// int32_t temp_data[MAXSPRITES][6]; -actor_t actor[MAXSPRITES]; - -int16_t SpriteDeletionQueue[1024],g_spriteDeleteQueuePos,g_spriteDeleteQueueSize=64; -animwalltype animwall[MAXANIMWALLS]; -int16_t g_numAnimWalls; -int32_t *animateptr[MAXANIMATES]; -int32_t animategoal[MAXANIMATES], animatevel[MAXANIMATES], g_animateCount; -// int32_t oanimateval[MAXANIMATES]; -int16_t animatesect[MAXANIMATES]; -int32_t msx[2048],msy[2048]; -int16_t cyclers[MAXCYCLERS][6],g_numCyclers; - -char *ScriptQuotes[MAXQUOTES], *ScriptQuoteRedefinitions[MAXQUOTES]; - -char tempbuf[2048], packbuf[PACKBUF_SIZE], menutextbuf[128], buf[1024]; - -int16_t camsprite; -int16_t g_mirrorWall[64], g_mirrorSector[64], g_mirrorCount; - -int32_t g_currentMenu; - -map_t MapInfo[(MAXVOLUMES+1)*MAXLEVELS]; // +1 volume for "intro", "briefing" music -sound_t g_sounds[ MAXSOUNDS ]; -volatile char g_soundlocks[MAXSOUNDS]; - -char EpisodeNames[MAXVOLUMES][33] = { "L.A. MELTDOWN", "LUNAR APOCALYPSE", "SHRAPNEL CITY" }; -char SkillNames[5][33] = { "PIECE OF CAKE", "LET'S ROCK", "COME GET SOME", "DAMN I'M GOOD" }; - -char GametypeNames[MAXGAMETYPES][33] = { "DUKEMATCH (SPAWN)","COOPERATIVE PLAY","DUKEMATCH (NO SPAWN)","TEAM DM (SPAWN)","TEAM DM (NO SPAWN)"}; - -int32_t GametypeFlags[MAXGAMETYPES] = -{ - /*4+*/8+16+1024+2048+16384, - 1+2+32+64+128+256+512+4096+8192+32768, - 2+/*4+*/8+16+16384, - /*4+*/8+16+1024+2048+16384+65536+131072, - 2+/*4+*/8+16+16384+65536+131072 -}; -char g_numGametypes = 5; - -int32_t g_currentFrameRate; - -char g_numVolumes = 3; - -int32_t g_timerTicsPerSecond=TICRATE; -//fx_device device; - -char g_numPlayerSprites,g_loadFromGroupOnly=0,g_earthquakeTime; - -int32_t playerswhenstarted; - -int32_t fricxv,fricyv; -#pragma pack(push,1) -playerdata_t g_player[MAXPLAYERS]; -input_t inputfifo[MOVEFIFOSIZ][MAXPLAYERS]; -playerspawn_t g_playerSpawnPoints[MAXPLAYERS]; -#pragma pack(pop) -user_defs ud; - -char pus, pub; - -input_t loc; -input_t recsync[RECSYNCBUFSIZ]; -input_t avg; - -int32_t movefifosendplc; - -//Multiplayer syncing variables -int32_t screenpeek; - -//Game recording variables - -char ready2send; -int32_t vel, svel, angvel, horiz, ototalclock, g_actorRespawnTime=768, g_itemRespawnTime=768, g_groupFileHandle; - -intptr_t *g_scriptPtr,*insptr,*labelcode,*labeltype; -int32_t g_numLabels,g_numDefaultLabels; -intptr_t *actorscrptr[MAXTILES],*g_parsingActorPtr; -char *label; -char ActorType[MAXTILES]; -intptr_t *script = NULL; - -int32_t g_scriptSize = 1048576; - -char typebuflen,typebuf[141]; - -char g_musicIndex; -char EnvMusicFilename[MAXVOLUMES+1][BMAX_PATH]; -char g_RTSPlaying; - - -int16_t BlimpSpawnSprites[15] = -{ - RPGSPRITE__STATIC, - CHAINGUNSPRITE__STATIC, - DEVISTATORAMMO__STATIC, - RPGAMMO__STATIC, - RPGAMMO__STATIC, - JETPACK__STATIC, - SHIELD__STATIC, - FIRSTAID__STATIC, - STEROIDS__STATIC, - RPGAMMO__STATIC, - RPGAMMO__STATIC, - RPGSPRITE__STATIC, - RPGAMMO__STATIC, - FREEZESPRITE__STATIC, - FREEZEAMMO__STATIC -}; - -int32_t g_impactDamage, g_maxPlayerHealth; -int32_t g_scriptDebug; - -//GLOBAL.C - replace the end "my's" with this -vec3_t my, omy, myvel; -int16_t myhoriz, omyhoriz, myhorizoff, omyhorizoff; -int16_t myang, omyang, mycursectnum, myjumpingcounter; - -char myjumpingtoggle, myonground, myhardlanding, myreturntocenter; -int8_t multiwho, multipos, multiwhat, multiflag; - -int32_t g_playerFriction = 0xcc00, g_showShareware; - -int16_t myangbak[MOVEFIFOSIZ]; -char szPlayerName[32]; -int32_t g_damageCameras,g_freezerSelfDamage=0,g_tripbombLaserMode=0; -int32_t g_gameQuit = 0; -uint32_t everyothertime; -int32_t g_numFreezeBounces=3,g_rpgBlastRadius,g_pipebombBlastRadius,g_tripbombBlastRadius, - g_shrinkerBlastRadius,g_morterBlastRadius,g_bouncemineBlastRadius,g_seenineBlastRadius; -DukeStatus_t sbar; - -int16_t g_numClouds,clouds[128],cloudx[128],cloudy[128]; -int32_t cloudtotalclock = 0; -int32_t g_numInterpolations = 0, startofdynamicinterpolations = 0; -int32_t g_interpolationLock = 0; -int32_t oldipos[MAXINTERPOLATIONS]; -int32_t bakipos[MAXINTERPOLATIONS]; -int32_t *curipos[MAXINTERPOLATIONS]; - -int32_t nextvoxid = 0; - -int32_t SpriteFlags[MAXTILES]; - -projectile_t ProjectileData[MAXTILES], DefaultProjectileData[MAXTILES], SpriteProjectile[MAXSPRITES]; - -char CheatKeys[2] = { sc_D, sc_N }; -char setupfilename[BMAX_PATH]= SETUPFILENAME; - -int32_t g_doQuickSave = 0; -uint32_t g_moveThingsCount = 0; - -int32_t g_restorePalette = 0, g_screenCapture = 0, g_noEnemies = 0; diff --git a/polymer-perf/eduke32/source/global.h b/polymer-perf/eduke32/source/global.h deleted file mode 100644 index 1b0e9b47e..000000000 --- a/polymer-perf/eduke32/source/global.h +++ /dev/null @@ -1,145 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#ifndef __global_h__ -#define __global_h__ - -#include "duke3d.h" -#include "sector.h" - -#ifdef __global_c__ - #define G_EXTERN -#else - #define G_EXTERN extern -#endif - -// duke3d global soup :( - -#define MAXINTERPOLATIONS MAXSPRITES - -G_EXTERN const char *s_buildRev; -G_EXTERN DukeStatus_t sbar; -G_EXTERN actor_t actor[MAXSPRITES]; -G_EXTERN animwalltype animwall[MAXANIMWALLS]; -G_EXTERN char *ScriptQuotes[MAXQUOTES],*ScriptQuoteRedefinitions[MAXQUOTES]; -G_EXTERN char *label; -G_EXTERN char ActorType[MAXTILES]; -G_EXTERN char CheatKeys[2]; -G_EXTERN char EnvMusicFilename[MAXVOLUMES+1][BMAX_PATH]; -G_EXTERN char EpisodeNames[MAXVOLUMES][33]; -G_EXTERN char GametypeNames[MAXGAMETYPES][33]; -G_EXTERN char SkillNames[5][33]; -G_EXTERN char g_RTSPlaying; -G_EXTERN char g_musicIndex; -G_EXTERN char g_numGametypes; -G_EXTERN char g_numPlayerSprites,g_loadFromGroupOnly; -G_EXTERN char g_numVolumes; -G_EXTERN char myjumpingtoggle,myonground,myhardlanding,myreturntocenter; -G_EXTERN char pus,pub; -G_EXTERN char ready2send; -G_EXTERN char setupfilename[BMAX_PATH]; -G_EXTERN char szPlayerName[32]; -G_EXTERN char tempbuf[2048],packbuf[PACKBUF_SIZE],menutextbuf[128],buf[1024]; -G_EXTERN char typebuflen,typebuf[141]; -G_EXTERN const char *s_buildDate; -G_EXTERN input_t avg; -G_EXTERN input_t inputfifo[MOVEFIFOSIZ][MAXPLAYERS]; -G_EXTERN input_t loc; -G_EXTERN input_t recsync[RECSYNCBUFSIZ]; -G_EXTERN int16_t BlimpSpawnSprites[15]; -G_EXTERN int16_t SpriteDeletionQueue[1024],g_spriteDeleteQueuePos,g_spriteDeleteQueueSize; -G_EXTERN int16_t animatesect[MAXANIMATES]; -G_EXTERN int16_t camsprite; -G_EXTERN int16_t cyclers[MAXCYCLERS][6],g_numCyclers; -G_EXTERN int16_t g_globalRandom; -G_EXTERN int16_t g_mirrorWall[64],g_mirrorSector[64],g_mirrorCount; -G_EXTERN int16_t g_numAnimWalls; -G_EXTERN int16_t g_numClouds,clouds[128],cloudx[128],cloudy[128]; -G_EXTERN int16_t myang,omyang,mycursectnum,myjumpingcounter; -G_EXTERN int16_t myangbak[MOVEFIFOSIZ]; -G_EXTERN int16_t myhoriz,omyhoriz,myhorizoff,omyhorizoff; -G_EXTERN int16_t neartagsector,neartagwall,neartagsprite; -G_EXTERN int32_t *animateptr[MAXANIMATES]; -G_EXTERN int32_t *curipos[MAXINTERPOLATIONS]; -G_EXTERN int32_t GametypeFlags[MAXGAMETYPES]; -G_EXTERN int32_t SpriteFlags[MAXTILES]; -G_EXTERN int32_t animategoal[MAXANIMATES],animatevel[MAXANIMATES],g_animateCount; -G_EXTERN int32_t bakipos[MAXINTERPOLATIONS]; -G_EXTERN int32_t cloudtotalclock; -G_EXTERN int32_t fricxv,fricyv; -G_EXTERN int32_t g_currentFrameRate; -G_EXTERN int32_t g_currentMenu; -G_EXTERN int32_t g_damageCameras,g_freezerSelfDamage; -G_EXTERN int32_t g_doQuickSave; -G_EXTERN char g_earthquakeTime; -G_EXTERN int32_t g_gameQuit; -G_EXTERN int32_t g_groupFileHandle; -G_EXTERN int32_t g_impactDamage,g_maxPlayerHealth; -G_EXTERN int32_t g_interpolationLock; -G_EXTERN int32_t g_lastSaveSlot; -G_EXTERN int32_t g_musicSize; -G_EXTERN int32_t g_numFreezeBounces; -G_EXTERN int32_t g_numInterpolations; -G_EXTERN int32_t g_numLabels,g_numDefaultLabels; -G_EXTERN int32_t g_numRealPalettes; -G_EXTERN int32_t g_playerFriction; -G_EXTERN int32_t g_scriptDebug; -G_EXTERN int32_t g_scriptSize; -G_EXTERN int32_t g_showShareware; -G_EXTERN int32_t g_spriteGravity; -G_EXTERN int32_t g_timerTicsPerSecond; -G_EXTERN int32_t g_tripbombLaserMode; -G_EXTERN int32_t movefifosendplc; -G_EXTERN int32_t msx[2048],msy[2048]; -G_EXTERN int32_t neartaghitdist,lockclock,g_startArmorAmount; -G_EXTERN int32_t nextvoxid; -G_EXTERN int32_t oldipos[MAXINTERPOLATIONS]; -G_EXTERN int32_t playerswhenstarted; -G_EXTERN int32_t screenpeek; -G_EXTERN int32_t startofdynamicinterpolations; -G_EXTERN int32_t vel,svel,angvel,horiz,ototalclock,g_actorRespawnTime; -G_EXTERN int8_t multiwho,multipos,multiwhat,multiflag; -G_EXTERN intptr_t *actorscrptr[MAXTILES],*g_parsingActorPtr; -G_EXTERN intptr_t *g_scriptPtr,*insptr,*labelcode,*labeltype; -G_EXTERN intptr_t *script; -G_EXTERN map_t MapInfo[(MAXVOLUMES+1)*MAXLEVELS]; -G_EXTERN playerdata_t g_player[MAXPLAYERS]; -G_EXTERN playerspawn_t g_playerSpawnPoints[MAXPLAYERS]; -G_EXTERN projectile_t ProjectileData[MAXTILES],DefaultProjectileData[MAXTILES],SpriteProjectile[MAXSPRITES]; -G_EXTERN sound_t g_sounds[MAXSOUNDS]; -G_EXTERN uint32_t everyothertime; -G_EXTERN uint32_t g_moveThingsCount; -G_EXTERN vec3_t my,omy,myvel; -G_EXTERN volatile char g_soundlocks[MAXSOUNDS]; -G_EXTERN int32_t g_rpgBlastRadius; -G_EXTERN int32_t g_pipebombBlastRadius; -G_EXTERN int32_t g_tripbombBlastRadius; -G_EXTERN int32_t g_shrinkerBlastRadius; -G_EXTERN int32_t g_morterBlastRadius; -G_EXTERN int32_t g_bouncemineBlastRadius; -G_EXTERN int32_t g_seenineBlastRadius; -G_EXTERN int32_t g_itemRespawnTime; -G_EXTERN int32_t g_restorePalette; -G_EXTERN int32_t g_screenCapture; -G_EXTERN int32_t g_noEnemies; - -#endif diff --git a/polymer-perf/eduke32/source/grpscan.c b/polymer-perf/eduke32/source/grpscan.c deleted file mode 100644 index 72f6a5107..000000000 --- a/polymer-perf/eduke32/source/grpscan.c +++ /dev/null @@ -1,242 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#include "compat.h" -#include "baselayer.h" - -#include "scriptfile.h" -#include "cache1d.h" -#include "crc32.h" - -#include "duke3d.h" -#include "grpscan.h" - -struct grpfile grpfiles[numgrpfiles] = -{ - { "Duke Nukem 3D", 0xBBC9CE44, 26524524, GAME_DUKE, NULL }, - { "Duke Nukem 3D: Atomic Edition", 0xF514A6AC, 44348015, GAME_DUKE, NULL }, - { "Duke Nukem 3D: Atomic Edition", 0xFD3DCFF1, 44356548, GAME_DUKE, NULL }, - { "Duke Nukem 3D Shareware", 0x983AD923, 11035779, GAME_DUKE, NULL }, - { "Duke Nukem 3D Mac Shareware", 0xC5F71561, 10444391, GAME_DUKE, NULL }, - { "NAM", 0x75C1F07B, 43448927, GAME_NAM, NULL }, - { "Napalm", 0x3DE1589A, 44365728, GAME_NAM, NULL }, - { "WW2GI", 0x907B82BF, 77939508, GAME_WW2, NULL }, -}; -struct grpfile *foundgrps = NULL; - -#define GRPCACHEFILE "grpfiles.cache" -static struct grpcache -{ - struct grpcache *next; - int32_t size; - int32_t mtime; - int32_t crcval; - char name[BMAX_PATH]; -} -*grpcache = NULL, *usedgrpcache = NULL; - -static int32_t LoadGroupsCache(void) -{ - struct grpcache *fg; - - int32_t fsize, fmtime, fcrcval; - char *fname; - - scriptfile *script; - - script = scriptfile_fromfile(GRPCACHEFILE); - if (!script) return -1; - - while (!scriptfile_eof(script)) - { - if (scriptfile_getstring(script, &fname)) break; // filename - if (scriptfile_getnumber(script, &fsize)) break; // filesize - if (scriptfile_getnumber(script, &fmtime)) break; // modification time - if (scriptfile_getnumber(script, &fcrcval)) break; // crc checksum - - fg = Bcalloc(1, sizeof(struct grpcache)); - fg->next = grpcache; - grpcache = fg; - - Bstrncpy(fg->name, fname, BMAX_PATH); - fg->size = fsize; - fg->mtime = fmtime; - fg->crcval = fcrcval; - } - - scriptfile_close(script); - return 0; -} - -static void FreeGroupsCache(void) -{ - struct grpcache *fg; - - while (grpcache) - { - fg = grpcache->next; - Bfree(grpcache); - grpcache = fg; - } -} - -int32_t ScanGroups(void) -{ - CACHE1D_FIND_REC *srch, *sidx; - struct grpcache *fg, *fgg; - struct grpfile *grp; - char *fn; - struct Bstat st; -#define BUFFER_SIZE (1024 * 1024 * 8) - uint8_t *buf = Bmalloc(BUFFER_SIZE); - - if (!buf) - { - initprintf("Error allocating %d byte buffer to scan GRPs!\n", BUFFER_SIZE); - return 0; - } - - initprintf("Searching for game data...\n"); - - LoadGroupsCache(); - - srch = klistpath("/", "*.grp", CACHE1D_FIND_FILE); - - for (sidx = srch; sidx; sidx = sidx->next) - { - for (fg = grpcache; fg; fg = fg->next) - { - if (!Bstrcmp(fg->name, sidx->name)) break; - } - - if (fg) - { - if (findfrompath(sidx->name, &fn)) continue; // failed to resolve the filename - if (Bstat(fn, &st)) - { - Bfree(fn); - continue; - } // failed to stat the file - Bfree(fn); - if (fg->size == st.st_size && fg->mtime == st.st_mtime) - { - grp = (struct grpfile *)Bcalloc(1, sizeof(struct grpfile)); - grp->name = Bstrdup(sidx->name); - grp->crcval = fg->crcval; - grp->size = fg->size; - grp->next = foundgrps; - foundgrps = grp; - - fgg = (struct grpcache *)Bcalloc(1, sizeof(struct grpcache)); - strcpy(fgg->name, fg->name); - fgg->size = fg->size; - fgg->mtime = fg->mtime; - fgg->crcval = fg->crcval; - fgg->next = usedgrpcache; - usedgrpcache = fgg; - continue; - } - } - - { - int32_t b, fh; - int32_t crcval; - - fh = openfrompath(sidx->name, BO_RDONLY|BO_BINARY, BS_IREAD); - if (fh < 0) continue; - if (fstat(fh, &st)) continue; - - initprintf(" Checksumming %s...", sidx->name); - crc32init((uint32_t *)&crcval); - do - { - b = read(fh, buf, BUFFER_SIZE); - if (b > 0) crc32block((uint32_t *)&crcval, (uint8_t *)buf, b); - } - while (b == BUFFER_SIZE); - crc32finish((uint32_t *)&crcval); - close(fh); - initprintf(" Done\n"); - - grp = (struct grpfile *)Bcalloc(1, sizeof(struct grpfile)); - grp->name = Bstrdup(sidx->name); - grp->crcval = crcval; - grp->size = st.st_size; - grp->next = foundgrps; - foundgrps = grp; - - fgg = (struct grpcache *)Bcalloc(1, sizeof(struct grpcache)); - Bstrncpy(fgg->name, sidx->name, BMAX_PATH); - fgg->size = st.st_size; - fgg->mtime = st.st_mtime; - fgg->crcval = crcval; - fgg->next = usedgrpcache; - usedgrpcache = fgg; - } - } - - klistfree(srch); - FreeGroupsCache(); - - if (usedgrpcache) - { - int32_t i = 0; - FILE *fp; - fp = fopen(GRPCACHEFILE, "wt"); - if (fp) - { - for (fg = usedgrpcache; fg; fg=fgg) - { - fgg = fg->next; - fprintf(fp, "\"%s\" %d %d %d\n", fg->name, fg->size, fg->mtime, fg->crcval); - Bfree(fg); - i++; - } - fclose(fp); - } -// initprintf("Found %d recognized GRP %s.\n",i,i>1?"files":"file"); - if (buf) - Bfree(buf); - return 0; - } - - initprintf("Found no recognized game data!\n"); - - if (buf) - Bfree(buf); - - return 0; -} - -void FreeGroups(void) -{ - struct grpfile *fg; - - while (foundgrps) - { - fg = foundgrps->next; - Bfree((char *)foundgrps->name); - Bfree(foundgrps); - foundgrps = fg; - } -} - diff --git a/polymer-perf/eduke32/source/grpscan.h b/polymer-perf/eduke32/source/grpscan.h deleted file mode 100644 index 574cce643..000000000 --- a/polymer-perf/eduke32/source/grpscan.h +++ /dev/null @@ -1,39 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 2010 EDuke32 developers and contributors - -This file is part of EDuke32. - -EDuke32 is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License version 2 -as published by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -//------------------------------------------------------------------------- - -#ifndef __grpscan_h__ -#define __grpscan_h__ - -// List of internally-known GRP files -#define numgrpfiles 8 -struct grpfile { - const char *name; - int32_t crcval; - int32_t size; - int32_t game; - struct grpfile *next; -} grpfiles[numgrpfiles], *foundgrps; - -int32_t ScanGroups(void); -void FreeGroups(void); - -#endif diff --git a/polymer-perf/eduke32/source/jaudiolib/Makefile b/polymer-perf/eduke32/source/jaudiolib/Makefile deleted file mode 100644 index 8023dec13..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/Makefile +++ /dev/null @@ -1,66 +0,0 @@ -include ../../Makefile.common -include ../../$(EROOT)/Makefile.shared - -OBJ=obj -OBJNAME=libjfaudiolib.a -SRC=src -INC=include - -# SDK locations - adjust to match your setup -ifneq ($(DXROOT_OVERRIDE),) - DXROOT ?= $(DXROOT_OVERRIDE) -else - DXROOT ?= c:/sdks/directx/dx8 -endif - -CFLAGS=$(BASECFLAGS) $(F_NO_STACK_PROTECTOR) -# for BUILD_ECHOFLAGS: -OURCFLAGS=$(CFLAGS) -CPPFLAGS=-I$(INC) -I$(SRC) -DHAVE_VORBIS - -ifeq ($(PLATFORM),DARWIN) - ifeq (1,$(SDL_FRAMEWORK)) - APPLE_INCLUDE_DIR:=../../Apple/include - OURCFLAGS += -DSDL_FRAMEWORK -I$(APPLE_INCLUDE_DIR) -I/Library/Frameworks/SDL.framework/Headers \ - -I/Library/Frameworks/SDL_mixer.framework/Headers - endif -endif - - -OBJECTS=$(OBJ)/drivers.o \ - $(OBJ)/fx_man.o \ - $(OBJ)/multivoc.o \ - $(OBJ)/mix.o \ - $(OBJ)/mixst.o \ - $(OBJ)/pitch.o \ - $(OBJ)/vorbis.o \ - $(OBJ)/driver_nosound.o - -ifeq ($(PLATFORM),WINDOWS) - CPPFLAGS+= -I$(DXROOT)/include -Ithird-party/mingw32/include - OBJECTS+= $(OBJ)/driver_directsound.o - OBJNAME=libjfaudiolib_win32.a - OBJ=obj_win -else - CPPFLAGS+= -DHAVE_SDL - OBJECTS+= $(OBJ)/driver_sdl.o -endif - -# OBJECTS=$(SOURCES:%.c=$(OBJ)/%.o) - -$(OBJNAME): $(OBJECTS) - $(BUILD_ECHOFLAGS) - $(ARCHIVE_STATUS) - if $(AR) cr $@ $^; then $(ARCHIVE_OK); else $(ARCHIVE_FAILED); fi - -$(OBJECTS): $(OBJ)/%.o: $(SRC)/%.c - -mkdir -p $(OBJ) - $(COMPILE_STATUS) - if $(CC) $(CPPFLAGS) $(OURCFLAGS) -c $< -o $@; then $(COMPILE_OK); else $(COMPILE_FAILED); fi - -ifeq ($(PRETTY_OUTPUT),1) -.SILENT: -endif -.PHONY: clean -clean: - -rm -f $(OBJECTS) $(OBJNAME) diff --git a/polymer-perf/eduke32/source/jaudiolib/Makefile.msvc b/polymer-perf/eduke32/source/jaudiolib/Makefile.msvc deleted file mode 100644 index 0badb9ece..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/Makefile.msvc +++ /dev/null @@ -1,50 +0,0 @@ -OBJ=obj.msc -INC=include -SRC=src -JFAUDIOLIB=libjfaudiolib.lib - -!ifdef DEBUG -# debugging options -flags_cl=/Od /Zi -flags_link=/DEBUG -flags_lib= -!else -# release options -flags_cl=/Ox /GL /arch:SSE -flags_link=/RELEASE /LTCG -flags_lib=/LTCG -!endif - -CC=cl -LINK=link /opt:ref /nologo - -DXROOT=U:\SDKs\Microsoft DirectX SDK (April 2007) -VORBISSDK=U:\SDKs\oggvorbis-win32sdk-1.0.1 - -CFLAGS=$(CFLAGS) /nologo /MT /J $(flags_cl) $(TARGETOPTS) /I$(INC) /I$(SRC) /I"$(VORBISSDK)\include" /I"$(DXROOT)\include" -!ifdef DEBUG -CFLAGS=$(CFLAGS) /DDEBUGGINGAIDS -!endif - -CFLAGS=$(CFLAGS) /DRENDERTYPE$(RENDERTYPE)=1 /D "_CRT_SECURE_NO_DEPRECATE" /W2 /DHAVE_VORBIS /Iinclude/msvc /DWIN32 - -OBJECTS=$(OBJ)\drivers.o \ - $(OBJ)\fx_man.o \ - $(OBJ)\multivoc.o \ - $(OBJ)\mix.o \ - $(OBJ)\mixst.o \ - $(OBJ)\pitch.o \ - $(OBJ)\vorbis.o \ - $(OBJ)\driver_nosound.o \ - $(OBJ)\driver_directsound.o - -{$(SRC)}.c{$(OBJ)}.o: - $(CC) /c $(CFLAGS) /Fo$@ $< - -jfaudiolib: $(JFAUDIOLIB) -$(JFAUDIOLIB): $(OBJECTS) - lib $(flags_lib) /out:$@ /nologo $** - -clean: - -del /Q $(OBJ)\* $(JFAUDIOLIB) - diff --git a/polymer-perf/eduke32/source/jaudiolib/include/fx_man.h b/polymer-perf/eduke32/source/jaudiolib/include/fx_man.h deleted file mode 100644 index e9c4b34f4..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/include/fx_man.h +++ /dev/null @@ -1,114 +0,0 @@ -/* -Copyright (C) 1994-1995 Apogee Software, Ltd. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -/********************************************************************** - module: FX_MAN.H - - author: James R. Dose - date: March 17, 1994 - - Public header for FX_MAN.C - - (c) Copyright 1994 James R. Dose. All Rights Reserved. -**********************************************************************/ - -#ifndef __FX_MAN_H -#define __FX_MAN_H - -#include "inttypes.h" -#include "limits.h" -#include "sndcards.h" - -enum FX_ERRORS - { - FX_Warning = -2, - FX_Error = -1, - FX_Ok = 0, - FX_ASSVersion, - FX_SoundCardError, - FX_InvalidCard, - FX_MultiVocError, - }; - -#define FX_MUSIC_PRIORITY INT_MAX - -const char *FX_ErrorString( int32_t ErrorNumber ); -int32_t FX_Init( int32_t SoundCard, int32_t numvoices, int32_t numchannels, int32_t samplebits, unsigned mixrate, void * initdata ); -int32_t FX_Shutdown( void ); -int32_t FX_SetCallBack( void ( *function )( uint32_t ) ); -void FX_SetVolume( int32_t volume ); -int32_t FX_GetVolume( void ); - -void FX_SetReverseStereo( int32_t setting ); -int32_t FX_GetReverseStereo( void ); -void FX_SetReverb( int32_t reverb ); -void FX_SetFastReverb( int32_t reverb ); -int32_t FX_GetMaxReverbDelay( void ); -int32_t FX_GetReverbDelay( void ); -void FX_SetReverbDelay( int32_t delay ); - -int32_t FX_PauseVoice ( int32_t handle, int32_t pause ); -int32_t FX_VoiceAvailable( int32_t priority ); -int32_t FX_EndLooping( int32_t handle ); -int32_t FX_SetPan( int32_t handle, int32_t vol, int32_t left, int32_t right ); -int32_t FX_SetPitch( int32_t handle, int32_t pitchoffset ); -int32_t FX_SetFrequency( int32_t handle, int32_t frequency ); - -int32_t FX_PlayVOC( char *ptr, uint32_t ptrlength, int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, - int32_t priority, uint32_t callbackval ); -int32_t FX_PlayLoopedVOC( char *ptr, uint32_t ptrlength, int32_t loopstart, int32_t loopend, - int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, int32_t priority, - uint32_t callbackval ); -int32_t FX_PlayWAV( char *ptr, uint32_t ptrlength, int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, - int32_t priority, uint32_t callbackval ); -int32_t FX_PlayLoopedWAV( char *ptr, uint32_t ptrlength, int32_t loopstart, int32_t loopend, - int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, int32_t priority, - uint32_t callbackval ); -int32_t FX_PlayVOC3D( char *ptr, uint32_t ptrlength, int32_t pitchoffset, int32_t angle, int32_t distance, - int32_t priority, uint32_t callbackval ); -int32_t FX_PlayWAV3D( char *ptr, uint32_t ptrlength, int32_t pitchoffset, int32_t angle, int32_t distance, - int32_t priority, uint32_t callbackval ); - -int32_t FX_PlayAuto( char *ptr, uint32_t ptrlength, int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, - int32_t priority, uint32_t callbackval ); -int32_t FX_PlayLoopedAuto( char *ptr, uint32_t ptrlength, int32_t loopstart, int32_t loopend, - int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, int32_t priority, - uint32_t callbackval ); -int32_t FX_PlayAuto3D( char *ptr, uint32_t ptrlength, int32_t pitchoffset, int32_t angle, int32_t distance, - int32_t priority, uint32_t callbackval ); - -int32_t FX_PlayRaw( char *ptr, uint32_t length, unsigned rate, - int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, int32_t priority, - uint32_t callbackval ); -int32_t FX_PlayLoopedRaw( char *ptr, uint32_t length, char *loopstart, - char *loopend, unsigned rate, int32_t pitchoffset, int32_t vol, int32_t left, - int32_t right, int32_t priority, uint32_t callbackval ); -int32_t FX_Pan3D( int32_t handle, int32_t angle, int32_t distance ); -int32_t FX_SoundActive( int32_t handle ); -int32_t FX_SoundsPlaying( void ); -int32_t FX_StopSound( int32_t handle ); -int32_t FX_StopAllSounds( void ); -int32_t FX_StartDemandFeedPlayback( void ( *function )( char **ptr, uint32_t *length ), - int32_t rate, int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, - int32_t priority, uint32_t callbackval ); - -int32_t FX_SetVoiceCallback(int32_t handle, uint32_t callbackval); -int32_t FX_SetPrintf(void (*function)(const char *, ...)); - -#endif diff --git a/polymer-perf/eduke32/source/jaudiolib/include/msvc/inttypes.h b/polymer-perf/eduke32/source/jaudiolib/include/msvc/inttypes.h deleted file mode 100644 index 4b3828a21..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/include/msvc/inttypes.h +++ /dev/null @@ -1,305 +0,0 @@ -// ISO C9x compliant inttypes.h for Microsoft Visual Studio -// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 -// -// Copyright (c) 2006 Alexander Chemeris -// -// 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 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. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _MSC_VER // [ -#error "Use this header only with Microsoft Visual C++ compilers!" -#endif // _MSC_VER ] - -#ifndef _MSC_INTTYPES_H_ // [ -#define _MSC_INTTYPES_H_ - -#if _MSC_VER > 1000 -#pragma once -#endif - -#include "stdint.h" - -// 7.8 Format conversion of integer types - -typedef struct { - intmax_t quot; - intmax_t rem; -} imaxdiv_t; - -// 7.8.1 Macros for format specifiers - -#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198 - -// The fprintf macros for signed integers are: -#define PRId8 "d" -#define PRIi8 "i" -#define PRIdLEAST8 "d" -#define PRIiLEAST8 "i" -#define PRIdFAST8 "d" -#define PRIiFAST8 "i" - -#define PRId16 "hd" -#define PRIi16 "hi" -#define PRIdLEAST16 "hd" -#define PRIiLEAST16 "hi" -#define PRIdFAST16 "hd" -#define PRIiFAST16 "hi" - -#define PRId32 "I32d" -#define PRIi32 "I32i" -#define PRIdLEAST32 "I32d" -#define PRIiLEAST32 "I32i" -#define PRIdFAST32 "I32d" -#define PRIiFAST32 "I32i" - -#define PRId64 "I64d" -#define PRIi64 "I64i" -#define PRIdLEAST64 "I64d" -#define PRIiLEAST64 "I64i" -#define PRIdFAST64 "I64d" -#define PRIiFAST64 "I64i" - -#define PRIdMAX "I64d" -#define PRIiMAX "I64i" - -#define PRIdPTR "Id" -#define PRIiPTR "Ii" - -// The fprintf macros for unsigned integers are: -#define PRIo8 "o" -#define PRIu8 "u" -#define PRIx8 "x" -#define PRIX8 "X" -#define PRIoLEAST8 "o" -#define PRIuLEAST8 "u" -#define PRIxLEAST8 "x" -#define PRIXLEAST8 "X" -#define PRIoFAST8 "o" -#define PRIuFAST8 "u" -#define PRIxFAST8 "x" -#define PRIXFAST8 "X" - -#define PRIo16 "ho" -#define PRIu16 "hu" -#define PRIx16 "hx" -#define PRIX16 "hX" -#define PRIoLEAST16 "ho" -#define PRIuLEAST16 "hu" -#define PRIxLEAST16 "hx" -#define PRIXLEAST16 "hX" -#define PRIoFAST16 "ho" -#define PRIuFAST16 "hu" -#define PRIxFAST16 "hx" -#define PRIXFAST16 "hX" - -#define PRIo32 "I32o" -#define PRIu32 "I32u" -#define PRIx32 "I32x" -#define PRIX32 "I32X" -#define PRIoLEAST32 "I32o" -#define PRIuLEAST32 "I32u" -#define PRIxLEAST32 "I32x" -#define PRIXLEAST32 "I32X" -#define PRIoFAST32 "I32o" -#define PRIuFAST32 "I32u" -#define PRIxFAST32 "I32x" -#define PRIXFAST32 "I32X" - -#define PRIo64 "I64o" -#define PRIu64 "I64u" -#define PRIx64 "I64x" -#define PRIX64 "I64X" -#define PRIoLEAST64 "I64o" -#define PRIuLEAST64 "I64u" -#define PRIxLEAST64 "I64x" -#define PRIXLEAST64 "I64X" -#define PRIoFAST64 "I64o" -#define PRIuFAST64 "I64u" -#define PRIxFAST64 "I64x" -#define PRIXFAST64 "I64X" - -#define PRIoMAX "I64o" -#define PRIuMAX "I64u" -#define PRIxMAX "I64x" -#define PRIXMAX "I64X" - -#define PRIoPTR "Io" -#define PRIuPTR "Iu" -#define PRIxPTR "Ix" -#define PRIXPTR "IX" - -// The fscanf macros for signed integers are: -#define SCNd8 "d" -#define SCNi8 "i" -#define SCNdLEAST8 "d" -#define SCNiLEAST8 "i" -#define SCNdFAST8 "d" -#define SCNiFAST8 "i" - -#define SCNd16 "hd" -#define SCNi16 "hi" -#define SCNdLEAST16 "hd" -#define SCNiLEAST16 "hi" -#define SCNdFAST16 "hd" -#define SCNiFAST16 "hi" - -#define SCNd32 "ld" -#define SCNi32 "li" -#define SCNdLEAST32 "ld" -#define SCNiLEAST32 "li" -#define SCNdFAST32 "ld" -#define SCNiFAST32 "li" - -#define SCNd64 "I64d" -#define SCNi64 "I64i" -#define SCNdLEAST64 "I64d" -#define SCNiLEAST64 "I64i" -#define SCNdFAST64 "I64d" -#define SCNiFAST64 "I64i" - -#define SCNdMAX "I64d" -#define SCNiMAX "I64i" - -#ifdef _WIN64 // [ -# define SCNdPTR "I64d" -# define SCNiPTR "I64i" -#else // _WIN64 ][ -# define SCNdPTR "ld" -# define SCNiPTR "li" -#endif // _WIN64 ] - -// The fscanf macros for unsigned integers are: -#define SCNo8 "o" -#define SCNu8 "u" -#define SCNx8 "x" -#define SCNX8 "X" -#define SCNoLEAST8 "o" -#define SCNuLEAST8 "u" -#define SCNxLEAST8 "x" -#define SCNXLEAST8 "X" -#define SCNoFAST8 "o" -#define SCNuFAST8 "u" -#define SCNxFAST8 "x" -#define SCNXFAST8 "X" - -#define SCNo16 "ho" -#define SCNu16 "hu" -#define SCNx16 "hx" -#define SCNX16 "hX" -#define SCNoLEAST16 "ho" -#define SCNuLEAST16 "hu" -#define SCNxLEAST16 "hx" -#define SCNXLEAST16 "hX" -#define SCNoFAST16 "ho" -#define SCNuFAST16 "hu" -#define SCNxFAST16 "hx" -#define SCNXFAST16 "hX" - -#define SCNo32 "lo" -#define SCNu32 "lu" -#define SCNx32 "lx" -#define SCNX32 "lX" -#define SCNoLEAST32 "lo" -#define SCNuLEAST32 "lu" -#define SCNxLEAST32 "lx" -#define SCNXLEAST32 "lX" -#define SCNoFAST32 "lo" -#define SCNuFAST32 "lu" -#define SCNxFAST32 "lx" -#define SCNXFAST32 "lX" - -#define SCNo64 "I64o" -#define SCNu64 "I64u" -#define SCNx64 "I64x" -#define SCNX64 "I64X" -#define SCNoLEAST64 "I64o" -#define SCNuLEAST64 "I64u" -#define SCNxLEAST64 "I64x" -#define SCNXLEAST64 "I64X" -#define SCNoFAST64 "I64o" -#define SCNuFAST64 "I64u" -#define SCNxFAST64 "I64x" -#define SCNXFAST64 "I64X" - -#define SCNoMAX "I64o" -#define SCNuMAX "I64u" -#define SCNxMAX "I64x" -#define SCNXMAX "I64X" - -#ifdef _WIN64 // [ -# define SCNoPTR "I64o" -# define SCNuPTR "I64u" -# define SCNxPTR "I64x" -# define SCNXPTR "I64X" -#else // _WIN64 ][ -# define SCNoPTR "lo" -# define SCNuPTR "lu" -# define SCNxPTR "lx" -# define SCNXPTR "lX" -#endif // _WIN64 ] - -#endif // __STDC_FORMAT_MACROS ] - -// 7.8.2 Functions for greatest-width integer types - -// 7.8.2.1 The imaxabs function -#define imaxabs _abs64 - -// 7.8.2.2 The imaxdiv function - -// This is modified version of div() function from Microsoft's div.c found -// in %MSVC.NET%\crt\src\div.c -#ifdef STATIC_IMAXDIV // [ -static -#else // STATIC_IMAXDIV ][ -_inline -#endif // STATIC_IMAXDIV ] -imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom) -{ - imaxdiv_t result; - - result.quot = numer / denom; - result.rem = numer % denom; - - if (numer < 0 && result.rem > 0) { - // did division wrong; must fix up - ++result.quot; - result.rem -= denom; - } - - return result; -} - -// 7.8.2.3 The strtoimax and strtoumax functions -#define strtoimax _strtoi64 -#define strtoumax _strtoui64 - -// 7.8.2.4 The wcstoimax and wcstoumax functions -#define wcstoimax _wcstoi64 -#define wcstoumax _wcstoui64 - - -#endif // _MSC_INTTYPES_H_ ] diff --git a/polymer-perf/eduke32/source/jaudiolib/include/msvc/stdint.h b/polymer-perf/eduke32/source/jaudiolib/include/msvc/stdint.h deleted file mode 100644 index 11d8dbfd5..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/include/msvc/stdint.h +++ /dev/null @@ -1,247 +0,0 @@ -// ISO C9x compliant stdint.h for Microsoft Visual Studio -// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 -// -// Copyright (c) 2006-2008 Alexander Chemeris -// -// 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 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. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _MSC_VER // [ -#error "Use this header only with Microsoft Visual C++ compilers!" -#endif // _MSC_VER ] - -#ifndef _MSC_STDINT_H_ // [ -#define _MSC_STDINT_H_ - -#if _MSC_VER > 1000 -#pragma once -#endif - -#include - -// For Visual Studio 6 in C++ mode and for many Visual Studio versions when -// compiling for ARM we should wrap include with 'extern "C++" {}' -// or compiler give many errors like this: -// error C2733: second C linkage of overloaded function 'wmemchr' not allowed -#ifdef __cplusplus -extern "C" { -#endif -# include -#ifdef __cplusplus -} -#endif - -// Define _W64 macros to mark types changing their size, like intptr_t. -#ifndef _W64 -# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 -# define _W64 __w64 -# else -# define _W64 -# endif -#endif - - -// 7.18.1 Integer types - -// 7.18.1.1 Exact-width integer types - -// Visual Studio 6 and Embedded Visual C++ 4 doesn't -// realize that, e.g. char has the same size as __int8 -// so we give up on __intX for them. -#if (_MSC_VER < 1300) - typedef signed char int8_t; - typedef short int16_t; - typedef int int32_t; - typedef unsigned char uint8_t; - typedef unsigned short uint16_t; - typedef unsigned int uint32_t; -#else - typedef signed __int8 int8_t; - typedef __int16 int16_t; - typedef __int32 int32_t; - typedef unsigned __int8 uint8_t; - typedef unsigned __int16 uint16_t; - typedef unsigned __int32 uint32_t; -#endif -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; - - -// 7.18.1.2 Minimum-width integer types -typedef int8_t int_least8_t; -typedef int16_t int_least16_t; -typedef int32_t int_least32_t; -typedef int64_t int_least64_t; -typedef uint8_t uint_least8_t; -typedef uint16_t uint_least16_t; -typedef uint32_t uint_least32_t; -typedef uint64_t uint_least64_t; - -// 7.18.1.3 Fastest minimum-width integer types -typedef int8_t int_fast8_t; -typedef int16_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef int64_t int_fast64_t; -typedef uint8_t uint_fast8_t; -typedef uint16_t uint_fast16_t; -typedef uint32_t uint_fast32_t; -typedef uint64_t uint_fast64_t; - -// 7.18.1.4 Integer types capable of holding object pointers -#ifdef _WIN64 // [ - typedef __int64 intptr_t; - typedef unsigned __int64 uintptr_t; -#else // _WIN64 ][ - typedef _W64 int intptr_t; - typedef _W64 unsigned int uintptr_t; -#endif // _WIN64 ] - -// 7.18.1.5 Greatest-width integer types -typedef int64_t intmax_t; -typedef uint64_t uintmax_t; - - -// 7.18.2 Limits of specified-width integer types - -#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 - -// 7.18.2.1 Limits of exact-width integer types -#define INT8_MIN ((int8_t)_I8_MIN) -#define INT8_MAX _I8_MAX -#define INT16_MIN ((int16_t)_I16_MIN) -#define INT16_MAX _I16_MAX -#define INT32_MIN ((int32_t)_I32_MIN) -#define INT32_MAX _I32_MAX -#define INT64_MIN ((int64_t)_I64_MIN) -#define INT64_MAX _I64_MAX -#define UINT8_MAX _UI8_MAX -#define UINT16_MAX _UI16_MAX -#define UINT32_MAX _UI32_MAX -#define UINT64_MAX _UI64_MAX - -// 7.18.2.2 Limits of minimum-width integer types -#define INT_LEAST8_MIN INT8_MIN -#define INT_LEAST8_MAX INT8_MAX -#define INT_LEAST16_MIN INT16_MIN -#define INT_LEAST16_MAX INT16_MAX -#define INT_LEAST32_MIN INT32_MIN -#define INT_LEAST32_MAX INT32_MAX -#define INT_LEAST64_MIN INT64_MIN -#define INT_LEAST64_MAX INT64_MAX -#define UINT_LEAST8_MAX UINT8_MAX -#define UINT_LEAST16_MAX UINT16_MAX -#define UINT_LEAST32_MAX UINT32_MAX -#define UINT_LEAST64_MAX UINT64_MAX - -// 7.18.2.3 Limits of fastest minimum-width integer types -#define INT_FAST8_MIN INT8_MIN -#define INT_FAST8_MAX INT8_MAX -#define INT_FAST16_MIN INT16_MIN -#define INT_FAST16_MAX INT16_MAX -#define INT_FAST32_MIN INT32_MIN -#define INT_FAST32_MAX INT32_MAX -#define INT_FAST64_MIN INT64_MIN -#define INT_FAST64_MAX INT64_MAX -#define UINT_FAST8_MAX UINT8_MAX -#define UINT_FAST16_MAX UINT16_MAX -#define UINT_FAST32_MAX UINT32_MAX -#define UINT_FAST64_MAX UINT64_MAX - -// 7.18.2.4 Limits of integer types capable of holding object pointers -#ifdef _WIN64 // [ -# define INTPTR_MIN INT64_MIN -# define INTPTR_MAX INT64_MAX -# define UINTPTR_MAX UINT64_MAX -#else // _WIN64 ][ -# define INTPTR_MIN INT32_MIN -# define INTPTR_MAX INT32_MAX -# define UINTPTR_MAX UINT32_MAX -#endif // _WIN64 ] - -// 7.18.2.5 Limits of greatest-width integer types -#define INTMAX_MIN INT64_MIN -#define INTMAX_MAX INT64_MAX -#define UINTMAX_MAX UINT64_MAX - -// 7.18.3 Limits of other integer types - -#ifdef _WIN64 // [ -# define PTRDIFF_MIN _I64_MIN -# define PTRDIFF_MAX _I64_MAX -#else // _WIN64 ][ -# define PTRDIFF_MIN _I32_MIN -# define PTRDIFF_MAX _I32_MAX -#endif // _WIN64 ] - -#define SIG_ATOMIC_MIN INT_MIN -#define SIG_ATOMIC_MAX INT_MAX - -#ifndef SIZE_MAX // [ -# ifdef _WIN64 // [ -# define SIZE_MAX _UI64_MAX -# else // _WIN64 ][ -# define SIZE_MAX _UI32_MAX -# endif // _WIN64 ] -#endif // SIZE_MAX ] - -// WCHAR_MIN and WCHAR_MAX are also defined in -#ifndef WCHAR_MIN // [ -# define WCHAR_MIN 0 -#endif // WCHAR_MIN ] -#ifndef WCHAR_MAX // [ -# define WCHAR_MAX _UI16_MAX -#endif // WCHAR_MAX ] - -#define WINT_MIN 0 -#define WINT_MAX _UI16_MAX - -#endif // __STDC_LIMIT_MACROS ] - - -// 7.18.4 Limits of other integer types - -#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 - -// 7.18.4.1 Macros for minimum-width integer constants - -#define INT8_C(val) val##i8 -#define INT16_C(val) val##i16 -#define INT32_C(val) val##i32 -#define INT64_C(val) val##i64 - -#define UINT8_C(val) val##ui8 -#define UINT16_C(val) val##ui16 -#define UINT32_C(val) val##ui32 -#define UINT64_C(val) val##ui64 - -// 7.18.4.2 Macros for greatest-width integer constants -#define INTMAX_C INT64_C -#define UINTMAX_C UINT64_C - -#endif // __STDC_CONSTANT_MACROS ] - - -#endif // _MSC_STDINT_H_ ] diff --git a/polymer-perf/eduke32/source/jaudiolib/include/music.h b/polymer-perf/eduke32/source/jaudiolib/include/music.h deleted file mode 100644 index 1d85f4284..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/include/music.h +++ /dev/null @@ -1,92 +0,0 @@ -/* -Copyright (C) 1994-1995 Apogee Software, Ltd. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -Modifications for JonoF's port by Jonathon Fowler (jonof@edgenetwk.com) -*/ -/********************************************************************** - module: MUSIC.H - - author: James R. Dose - date: March 25, 1994 - - Public header for MUSIC.C - - (c) Copyright 1994 James R. Dose. All Rights Reserved. -**********************************************************************/ - -#ifndef __MUSIC_H -#define __MUSIC_H - -#include "compat.h" - -extern int32_t MUSIC_ErrorCode; - -enum MUSIC_ERRORS - { - MUSIC_Warning = -2, - MUSIC_Error = -1, - MUSIC_Ok = 0, - MUSIC_ASSVersion, - MUSIC_SoundCardError, - MUSIC_MPU401Error, - MUSIC_InvalidCard, - MUSIC_MidiError, - MUSIC_TaskManError, - MUSIC_DPMI_Error - }; - -typedef struct - { - uint32_t tickposition; - uint32_t milliseconds; - uint32_t measure; - uint32_t beat; - uint32_t tick; - } songposition; - -#define MUSIC_LoopSong ( 1 == 1 ) -#define MUSIC_PlayOnce ( !MUSIC_LoopSong ) - -char *MUSIC_ErrorString( int32_t ErrorNumber ); -int32_t MUSIC_Init( int32_t SoundCard, int32_t Address ); -int32_t MUSIC_Shutdown( void ); -void MUSIC_SetVolume( int32_t volume ); -void MUSIC_SetMidiChannelVolume( int32_t channel, int32_t volume ); -void MUSIC_ResetMidiChannelVolumes( void ); -int32_t MUSIC_GetVolume( void ); -void MUSIC_SetLoopFlag( int32_t loopflag ); -int32_t MUSIC_SongPlaying( void ); -void MUSIC_Continue( void ); -void MUSIC_Pause( void ); -int32_t MUSIC_StopSong( void ); -int32_t MUSIC_PlaySong( char *song, int32_t loopflag ); -void MUSIC_SetContext( int32_t context ); -int32_t MUSIC_GetContext( void ); -void MUSIC_SetSongTick( uint32_t PositionInTicks ); -void MUSIC_SetSongTime( uint32_t milliseconds ); -void MUSIC_SetSongPosition( int32_t measure, int32_t beat, int32_t tick ); -void MUSIC_GetSongPosition( songposition *pos ); -void MUSIC_GetSongLength( songposition *pos ); -int32_t MUSIC_FadeVolume( int32_t tovolume, int32_t milliseconds ); -int32_t MUSIC_FadeActive( void ); -void MUSIC_StopFade( void ); -void MUSIC_RerouteMidiChannel( int32_t channel, int32_t ( *function )( int32_t, int32_t, int32_t ) ); -void MUSIC_RegisterTimbreBank( char *timbres ); -void MUSIC_Update(void); - -#endif diff --git a/polymer-perf/eduke32/source/jaudiolib/include/sndcards.h b/polymer-perf/eduke32/source/jaudiolib/include/sndcards.h deleted file mode 100644 index 100f2b416..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/include/sndcards.h +++ /dev/null @@ -1,45 +0,0 @@ -/* -Copyright (C) 1994-1995 Apogee Software, Ltd. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -/********************************************************************** - module: SNDCARDS.H - - author: James R. Dose - date: March 31, 1994 - - Contains enumerated type definitions for sound cards. - - (c) Copyright 1994 James R. Dose. All Rights Reserved. -**********************************************************************/ - -#ifndef __SNDCARDS_H -#define __SNDCARDS_H - -#define ASS_VERSION_STRING "JonoF 20090718" - -typedef enum - { - ASS_NoSound, - ASS_SDL, - ASS_DirectSound, - ASS_NumSoundCards, - ASS_AutoDetect = -2 - } soundcardnames; - -#endif diff --git a/polymer-perf/eduke32/source/jaudiolib/src/_multivc.h b/polymer-perf/eduke32/source/jaudiolib/src/_multivc.h deleted file mode 100644 index 8bd4f001a..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/_multivc.h +++ /dev/null @@ -1,303 +0,0 @@ -/* -Copyright (C) 1994-1995 Apogee Software, Ltd. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -/********************************************************************** - file: _MULTIVC.H - - author: James R. Dose - date: December 20, 1993 - - Private header for MULTIVOC.C - - (c) Copyright 1993 James R. Dose. All Rights Reserved. -**********************************************************************/ - -#include "limits.h" -#include "inttypes.h" - -#ifndef ___MULTIVC_H -#define ___MULTIVC_H - -#define TRUE ( 1 == 1 ) -#define FALSE ( !TRUE ) - -#define VOC_8BIT 0x0 -#define VOC_CT4_ADPCM 0x1 -#define VOC_CT3_ADPCM 0x2 -#define VOC_CT2_ADPCM 0x3 -#define VOC_16BIT 0x4 -#define VOC_ALAW 0x6 -#define VOC_MULAW 0x7 -#define VOC_CREATIVE_ADPCM 0x200 - -#define T_SIXTEENBIT_STEREO 0 -#define T_8BITS 1 -#define T_MONO 2 -#define T_16BITSOURCE 4 -#define T_STEREOSOURCE 8 -#define T_LEFTQUIET 16 -#define T_RIGHTQUIET 32 -#define T_DEFAULT T_SIXTEENBIT_STEREO - -#define MV_MaxPanPosition 127 -#define MV_NumPanPositions ( MV_MaxPanPosition + 1 ) -#define MV_MaxTotalVolume 255 -//#define MV_MaxVolume 63 -#define MV_NumVoices 8 - -// mirrors FX_MUSIC_PRIORITY from fx_man.h -#define MV_MUSIC_PRIORITY INT_MAX - -#define MIX_VOLUME( volume ) \ - ( ( max( 0, min( ( volume ), 255 ) ) * ( MV_MaxVolume + 1 ) ) >> 8 ) -// ( ( max( 0, min( ( volume ), 255 ) ) ) >> 2 ) - -#define STEREO 1 -#define SIXTEEN_BIT 2 - -#define MONO_8BIT 0 -#define STEREO_8BIT ( STEREO ) -#define MONO_16BIT ( SIXTEEN_BIT ) -#define STEREO_16BIT ( STEREO | SIXTEEN_BIT ) - -#define MONO_8BIT_SAMPLE_SIZE 1 -#define MONO_16BIT_SAMPLE_SIZE 2 -#define STEREO_8BIT_SAMPLE_SIZE ( 2 * MONO_8BIT_SAMPLE_SIZE ) -#define STEREO_16BIT_SAMPLE_SIZE ( 2 * MONO_16BIT_SAMPLE_SIZE ) - -//#define SILENCE_16BIT 0x80008000 -#define SILENCE_16BIT 0 -#define SILENCE_8BIT 0x80808080 -//#define SILENCE_16BIT_PAS 0 - -#define MixBufferSize 256 - -#define NumberOfBuffers 16 -#define TotalBufferSize ( MixBufferSize * NumberOfBuffers ) - -#define PI 3.1415926536 - -typedef enum - { - Raw, - VOC, - DemandFeed, - WAV, - Vorbis - } wavedata; - -typedef enum - { - NoMoreData, - KeepPlaying - } playbackstatus; - - -typedef struct VoiceNode - { - struct VoiceNode *next; - struct VoiceNode *prev; - - wavedata wavetype; - char bits; - char channels; - - playbackstatus ( *GetSound )( struct VoiceNode *voice ); - - void ( *mix )( uint32_t position, uint32_t rate, - char *start, uint32_t length ); - - char *NextBlock; - char *LoopStart; - char *LoopEnd; - unsigned LoopCount; - uint32_t LoopSize; - uint32_t BlockLength; - - uint32_t PitchScale; - uint32_t FixedPointBufferSize; - - char *sound; - uint32_t length; - uint32_t SamplingRate; - uint32_t RateScale; - uint32_t position; - int32_t Playing; - int32_t Paused; - - int32_t handle; - int32_t priority; - - void ( *DemandFeed )( char **ptr, uint32_t *length ); - void *extra; - - int16_t *LeftVolume; - int16_t *RightVolume; - - uint32_t callbackval; - - } VoiceNode; - -typedef struct - { - VoiceNode *start; - VoiceNode *end; - } VList; - -typedef struct - { - uint8_t left; - uint8_t right; - } Pan; - -typedef int16_t MONO16; -typedef int8_t MONO8; - -typedef struct - { - MONO16 left; - MONO16 right; -// uint16_t left; -// uint16_t right; - } STEREO16; - -typedef struct - { - MONO16 left; - MONO16 right; - } SIGNEDSTEREO16; - -typedef struct - { -// MONO8 left; -// MONO8 right; - char left; - char right; - } STEREO8; - -typedef struct - { - char RIFF[ 4 ]; - uint32_t file_size; - char WAVE[ 4 ]; - char fmt[ 4 ]; - uint32_t format_size; - } riff_header; - -typedef struct - { - uint16_t wFormatTag; - uint16_t nChannels; - uint32_t nSamplesPerSec; - uint32_t nAvgBytesPerSec; - uint16_t nBlockAlign; - uint16_t nBitsPerSample; - } format_header; - -typedef struct - { - uint8_t DATA[ 4 ]; - uint32_t size; - } data_header; - -typedef MONO8 VOLUME8[ 256 ]; -typedef MONO16 VOLUME16[ 256 ]; - -extern Pan MV_PanTable[ MV_NumPanPositions ][ 255 + 1 ]; -extern int32_t MV_ErrorCode; -extern int32_t MV_Installed; -extern int32_t MV_MaxVolume; -extern int32_t MV_MixRate; -typedef char HARSH_CLIP_TABLE_8[ MV_NumVoices * 256 ]; - -#define MV_SetErrorCode( status ) \ - MV_ErrorCode = ( status ); - -void MV_PlayVoice( VoiceNode *voice ); - -VoiceNode *MV_AllocVoice( int32_t priority ); - -void MV_SetVoiceMixMode( VoiceNode *voice ); -void MV_SetVoiceVolume ( VoiceNode *voice, int32_t vol, int32_t left, int32_t right ); - -void MV_ReleaseVorbisVoice( VoiceNode * voice ); - -// implemented in mix.c -void ClearBuffer_DW( void *ptr, unsigned data, int32_t length ); - -void MV_Mix8BitMono( uint32_t position, uint32_t rate, - char *start, uint32_t length ); - -void MV_Mix8BitStereo( uint32_t position, - uint32_t rate, char *start, uint32_t length ); - -void MV_Mix16BitMono( uint32_t position, - uint32_t rate, char *start, uint32_t length ); - -void MV_Mix16BitStereo( uint32_t position, - uint32_t rate, char *start, uint32_t length ); - -void MV_Mix16BitMono16( uint32_t position, - uint32_t rate, char *start, uint32_t length ); - -void MV_Mix8BitMono16( uint32_t position, uint32_t rate, - char *start, uint32_t length ); - -void MV_Mix8BitStereo16( uint32_t position, - uint32_t rate, char *start, uint32_t length ); - -void MV_Mix16BitStereo16( uint32_t position, - uint32_t rate, char *start, uint32_t length ); - -void MV_16BitReverb( char *src, char *dest, VOLUME16 *volume, int32_t count ); - -void MV_8BitReverb( int8_t *src, int8_t *dest, VOLUME16 *volume, int32_t count ); - -void MV_16BitReverbFast( char *src, char *dest, int32_t count, int32_t shift ); - -void MV_8BitReverbFast( int8_t *src, int8_t *dest, int32_t count, int32_t shift ); - -// implemented in mixst.c -void ClearBuffer_DW( void *ptr, unsigned data, int32_t length ); - -void MV_Mix8BitMono8Stereo( uint32_t position, uint32_t rate, - char *start, uint32_t length ); - -void MV_Mix8BitStereo8Stereo( uint32_t position, - uint32_t rate, char *start, uint32_t length ); - -void MV_Mix16BitMono8Stereo( uint32_t position, - uint32_t rate, char *start, uint32_t length ); - -void MV_Mix16BitStereo8Stereo( uint32_t position, - uint32_t rate, char *start, uint32_t length ); - -void MV_Mix16BitMono16Stereo( uint32_t position, - uint32_t rate, char *start, uint32_t length ); - -void MV_Mix8BitMono16Stereo( uint32_t position, uint32_t rate, - char *start, uint32_t length ); - -void MV_Mix8BitStereo16Stereo( uint32_t position, - uint32_t rate, char *start, uint32_t length ); - -void MV_Mix16BitStereo16Stereo( uint32_t position, - uint32_t rate, char *start, uint32_t length ); - -#endif diff --git a/polymer-perf/eduke32/source/jaudiolib/src/driver_directsound.c b/polymer-perf/eduke32/source/jaudiolib/src/driver_directsound.c deleted file mode 100644 index 5051ecf4f..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/driver_directsound.c +++ /dev/null @@ -1,497 +0,0 @@ -/* - Copyright (C) 2009 Jonathon Fowler - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - */ - -/** - * DirectSound output driver for MultiVoc - */ - -#define WIN32_LEAN_AND_MEAN -#define DIRECTSOUND_VERSION 0x0700 -#include -#include -#include -#include -#include - -#include "driver_directsound.h" -#include "multivoc.h" - -enum { - DSErr_Warning = -2, - DSErr_Error = -1, - DSErr_Ok = 0, - DSErr_Uninitialised, - DSErr_DirectSoundCreate, - DSErr_SetCooperativeLevel, - DSErr_CreateSoundBuffer, - DSErr_CreateSoundBufferSecondary, - DSErr_SetFormat, - DSErr_SetFormatSecondary, - DSErr_Notify, - DSErr_NotifyEvents, - DSErr_SetNotificationPositions, - DSErr_Play, - DSErr_PlaySecondary, - DSErr_CreateThread, - DSErr_CreateMutex -}; - -static int32_t ErrorCode = DSErr_Ok; -static int32_t Initialised = 0; -static int32_t Playing = 0; - -static char *MixBuffer = 0; -static int32_t MixBufferSize = 0; -static int32_t MixBufferCount = 0; -static int32_t MixBufferCurrent = 0; -static int32_t MixBufferUsed = 0; -static void ( *MixCallBack )( void ) = 0; - -static LPDIRECTSOUND lpds = 0; -static LPDIRECTSOUNDBUFFER lpdsbprimary = 0, lpdsbsec = 0; -static LPDIRECTSOUNDNOTIFY lpdsnotify = 0; -static DSBPOSITIONNOTIFY notifyPositions[3] = { { 0,0 }, { 0,0 }, { 0,0 } }; -static HANDLE mixThread = 0; -static HANDLE mutex = 0; - - -static void FillBufferPortion(char * ptr, int32_t remaining) -{ - int32_t len = 0; - char *sptr; - - while (remaining >= len) { - if (MixBufferUsed == MixBufferSize) { - MixCallBack(); - - MixBufferUsed = 0; - MixBufferCurrent++; - if (MixBufferCurrent >= MixBufferCount) { - MixBufferCurrent -= MixBufferCount; - } - } - - while (remaining >= len && MixBufferUsed < MixBufferSize) { - sptr = MixBuffer + (MixBufferCurrent * MixBufferSize) + MixBufferUsed; - - len = MixBufferSize - MixBufferUsed; - if (remaining < len) { - len = remaining; - } - - memcpy(ptr, sptr, len); - - ptr += len; - MixBufferUsed += len; - remaining -= len; - } - } -} - -static void FillBuffer(int32_t bufnum) -{ - HRESULT err; - LPVOID ptr, ptr2; - DWORD remaining, remaining2; - int32_t retries = 1; - - //initprintf( "DirectSound FillBuffer: filling %d\n", bufnum); - - do { - err = IDirectSoundBuffer_Lock(lpdsbsec, - notifyPositions[bufnum].dwOffset, - notifyPositions[1].dwOffset, - &ptr, &remaining, - &ptr2, &remaining2, - 0); - if (FAILED(err)) { - if (err == DSERR_BUFFERLOST) { - err = IDirectSoundBuffer_Restore(lpdsbsec); - if (FAILED(err)) { - return; - } - - if (retries-- > 0) { - continue; - } - } - if (MV_Printf) - MV_Printf("DirectSound FillBuffer: err %x\n", (uint32_t) err); - return; - } - break; - } while (1); - - if (ptr) { - FillBufferPortion((char *) ptr, remaining); - } - if (ptr2) { - FillBufferPortion((char *) ptr2, remaining2); - } - - IDirectSoundBuffer_Unlock(lpdsbsec, ptr, remaining, ptr2, remaining2); -} - -static DWORD WINAPI fillDataThread(LPVOID lpParameter) -{ - DWORD waitret, waitret2; - HANDLE handles[] = { handles[0] = notifyPositions[0].hEventNotify, - handles[1] = notifyPositions[1].hEventNotify, - handles[2] = notifyPositions[2].hEventNotify }; - - UNREFERENCED_PARAMETER(lpParameter); - - do { - waitret = WaitForMultipleObjects(3, handles, FALSE, INFINITE); - switch (waitret) { - case WAIT_OBJECT_0: - case WAIT_OBJECT_0+1: - waitret2 = WaitForSingleObject(mutex, INFINITE); - if (waitret2 == WAIT_OBJECT_0) { - FillBuffer(WAIT_OBJECT_0 + 1 - waitret); - ReleaseMutex(mutex); - } else { - if (MV_Printf) - MV_Printf( "DirectSound fillDataThread: wfso err %d\n", (int32_t) waitret2); - } - break; - case WAIT_OBJECT_0+2: -// initprintf( "DirectSound fillDataThread: exiting\n"); - ExitThread(0); - break; - default: - if (MV_Printf) - MV_Printf( "DirectSound fillDataThread: wfmo err %d\n", (int32_t) waitret); - break; - } - } while (1); - - return 0; -} - - -int32_t DirectSoundDrv_GetError(void) -{ - return ErrorCode; -} - -const char *DirectSoundDrv_ErrorString( int32_t ErrorNumber ) -{ - const char *ErrorString; - - switch( ErrorNumber ) - { - case DSErr_Warning : - case DSErr_Error : - ErrorString = DirectSoundDrv_ErrorString( ErrorCode ); - break; - - case DSErr_Ok : - ErrorString = "DirectSound ok."; - break; - - case DSErr_Uninitialised: - ErrorString = "DirectSound uninitialised."; - break; - - case DSErr_DirectSoundCreate: - ErrorString = "DirectSound error: DirectSoundCreate failed."; - break; - - case DSErr_SetCooperativeLevel: - ErrorString = "DirectSound error: SetCooperativeLevel failed."; - break; - - case DSErr_CreateSoundBuffer: - ErrorString = "DirectSound error: primary CreateSoundBuffer failed."; - break; - - case DSErr_CreateSoundBufferSecondary: - ErrorString = "DirectSound error: secondary CreateSoundBuffer failed."; - break; - - case DSErr_SetFormat: - ErrorString = "DirectSound error: primary buffer SetFormat failed."; - break; - - case DSErr_SetFormatSecondary: - ErrorString = "DirectSound error: secondary buffer SetFormat failed."; - break; - - case DSErr_Notify: - ErrorString = "DirectSound error: failed querying secondary buffer for notify interface."; - break; - - case DSErr_NotifyEvents: - ErrorString = "DirectSound error: failed creating notify events."; - break; - - case DSErr_SetNotificationPositions: - ErrorString = "DirectSound error: failed setting notification positions."; - break; - - case DSErr_Play: - ErrorString = "DirectSound error: primary buffer Play failed."; - break; - - case DSErr_PlaySecondary: - ErrorString = "DirectSound error: secondary buffer Play failed."; - break; - - case DSErr_CreateThread: - ErrorString = "DirectSound error: failed creating mix thread."; - break; - - case DSErr_CreateMutex: - ErrorString = "DirectSound error: failed creating mix mutex."; - break; - - default: - ErrorString = "Unknown DirectSound error code."; - break; - } - - return ErrorString; - -} - - -static void TeardownDSound(HRESULT err) -{ - if (FAILED(err)) { - if (MV_Printf) - MV_Printf( "Dying error: %x\n", (uint32_t) err); - } - - if (lpdsnotify) IDirectSoundNotify_Release(lpdsnotify); - if (notifyPositions[0].hEventNotify) CloseHandle(notifyPositions[0].hEventNotify); - if (notifyPositions[1].hEventNotify) CloseHandle(notifyPositions[1].hEventNotify); - if (notifyPositions[2].hEventNotify) CloseHandle(notifyPositions[2].hEventNotify); - if (mutex) CloseHandle(mutex); - if (lpdsbsec) IDirectSoundBuffer_Release(lpdsbsec); - if (lpdsbprimary) IDirectSoundBuffer_Release(lpdsbprimary); - if (lpds) IDirectSound_Release(lpds); - notifyPositions[0].hEventNotify = - notifyPositions[1].hEventNotify = - notifyPositions[2].hEventNotify = 0; - mutex = 0; - lpdsnotify = 0; - lpdsbsec = 0; - lpdsbprimary = 0; - lpds = 0; -} - -int32_t DirectSoundDrv_PCM_Init(int32_t *mixrate, int32_t *numchannels, int32_t *samplebits, void * initdata) -{ - HRESULT err; - DSBUFFERDESC bufdesc; - WAVEFORMATEX wfex; - - if (Initialised) { - DirectSoundDrv_PCM_Shutdown(); - } - - err = DirectSoundCreate(0, &lpds, 0); - if (FAILED( err )) { - ErrorCode = DSErr_DirectSoundCreate; - return DSErr_Error; - } - - err = IDirectSound_SetCooperativeLevel(lpds, (HWND) initdata, DSSCL_PRIORITY); - if (FAILED( err )) { - TeardownDSound(err); - ErrorCode = DSErr_SetCooperativeLevel; - return DSErr_Error; - } - - memset(&bufdesc, 0, sizeof(DSBUFFERDESC)); - bufdesc.dwSize = sizeof(DSBUFFERDESC); - bufdesc.dwFlags = DSBCAPS_LOCSOFTWARE | - DSBCAPS_PRIMARYBUFFER | - DSBCAPS_GETCURRENTPOSITION2 | - DSBCAPS_STICKYFOCUS ; - - err = IDirectSound_CreateSoundBuffer(lpds, &bufdesc, &lpdsbprimary, 0); - if (FAILED( err )) { - TeardownDSound(err); - ErrorCode = DSErr_CreateSoundBuffer; - return DSErr_Error; - } - - memset(&wfex, 0, sizeof(WAVEFORMATEX)); - wfex.wFormatTag = WAVE_FORMAT_PCM; - wfex.nChannels = *numchannels; - wfex.nSamplesPerSec = *mixrate; - wfex.wBitsPerSample = *samplebits; - wfex.nBlockAlign = wfex.nChannels * wfex.wBitsPerSample / 8; - wfex.nAvgBytesPerSec = wfex.nSamplesPerSec * wfex.nBlockAlign; - - err = IDirectSoundBuffer_SetFormat(lpdsbprimary, &wfex); - if (FAILED( err )) { - TeardownDSound(err); - ErrorCode = DSErr_SetFormat; - return DSErr_Error; - } - - bufdesc.dwFlags = DSBCAPS_LOCSOFTWARE | - DSBCAPS_CTRLPOSITIONNOTIFY | - DSBCAPS_GETCURRENTPOSITION2 | - DSBCAPS_STICKYFOCUS ; - bufdesc.dwBufferBytes = wfex.nBlockAlign * 2560 * 2; - bufdesc.lpwfxFormat = &wfex; - - err = IDirectSound_CreateSoundBuffer(lpds, &bufdesc, &lpdsbsec, 0); - if (FAILED( err )) { - TeardownDSound(err); - ErrorCode = DSErr_SetFormatSecondary; - return DSErr_Error; - } - - err = IDirectSoundBuffer_QueryInterface(lpdsbsec, &IID_IDirectSoundNotify, - (LPVOID *) &lpdsnotify); - if (FAILED( err )) { - TeardownDSound(err); - ErrorCode = DSErr_Notify; - return DSErr_Error; - } - - notifyPositions[0].dwOffset = 0; - notifyPositions[0].hEventNotify = CreateEvent(NULL, FALSE, FALSE, NULL); - notifyPositions[1].dwOffset = bufdesc.dwBufferBytes / 2; - notifyPositions[1].hEventNotify = CreateEvent(NULL, FALSE, FALSE, NULL); - notifyPositions[2].dwOffset = DSBPN_OFFSETSTOP; - notifyPositions[2].hEventNotify = CreateEvent(NULL, FALSE, FALSE, NULL); - if (!notifyPositions[0].hEventNotify || - !notifyPositions[1].hEventNotify || - !notifyPositions[2].hEventNotify) { - TeardownDSound(DS_OK); - ErrorCode = DSErr_NotifyEvents; - return DSErr_Error; - } - - err = IDirectSoundNotify_SetNotificationPositions(lpdsnotify, 3, notifyPositions); - if (FAILED( err )) { - TeardownDSound(err); - ErrorCode = DSErr_SetNotificationPositions; - return DSErr_Error; - } - - err = IDirectSoundBuffer_Play(lpdsbprimary, 0, 0, DSBPLAY_LOOPING); - if (FAILED( err )) { - TeardownDSound(err); - ErrorCode = DSErr_Play; - return DSErr_Error; - } - - mutex = CreateMutex(0, FALSE, 0); - if (!mutex) { - TeardownDSound(DS_OK); - ErrorCode = DSErr_CreateMutex; - return DSErr_Error; - } - - Initialised = 1; - -// initprintf("DirectSound Init: yay\n"); - - return DSErr_Ok; -} - -void DirectSoundDrv_PCM_Shutdown(void) -{ - if (!Initialised) { - return; - } - - DirectSoundDrv_PCM_StopPlayback(); - - TeardownDSound(DS_OK); - - Initialised = 0; -} - -int32_t DirectSoundDrv_PCM_BeginPlayback(char *BufferStart, int32_t BufferSize, - int32_t NumDivisions, void ( *CallBackFunc )( void ) ) -{ - HRESULT err; - - if (!Initialised) { - ErrorCode = DSErr_Uninitialised; - return DSErr_Error; - } - - DirectSoundDrv_PCM_StopPlayback(); - - MixBuffer = BufferStart; - MixBufferSize = BufferSize; - MixBufferCount = NumDivisions; - MixBufferCurrent = 0; - MixBufferUsed = 0; - MixCallBack = CallBackFunc; - - // prime the buffer - FillBuffer(0); - - mixThread = CreateThread(NULL, 0, fillDataThread, 0, 0, 0); - if (!mixThread) { - ErrorCode = DSErr_CreateThread; - return DSErr_Error; - } - - SetThreadPriority(mixThread, THREAD_PRIORITY_ABOVE_NORMAL); - - err = IDirectSoundBuffer_Play(lpdsbsec, 0, 0, DSBPLAY_LOOPING); - if (FAILED( err )) { - ErrorCode = DSErr_PlaySecondary; - return DSErr_Error; - } - - Playing = 1; - - return DSErr_Ok; -} - -void DirectSoundDrv_PCM_StopPlayback(void) -{ - if (!Playing) { - return; - } - - IDirectSoundBuffer_Stop(lpdsbsec); - IDirectSoundBuffer_SetCurrentPosition(lpdsbsec, 0); - - Playing = 0; -} - -void DirectSoundDrv_PCM_Lock(void) -{ - DWORD err; - - err = WaitForSingleObject(mutex, INFINITE); - if (err != WAIT_OBJECT_0) { - if (MV_Printf) - MV_Printf( "DirectSound lock: wfso %d\n", (int32_t) err); - } -} - -void DirectSoundDrv_PCM_Unlock(void) -{ - ReleaseMutex(mutex); -} diff --git a/polymer-perf/eduke32/source/jaudiolib/src/driver_directsound.h b/polymer-perf/eduke32/source/jaudiolib/src/driver_directsound.h deleted file mode 100644 index 9d7d50737..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/driver_directsound.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - Copyright (C) 2009 Jonathon Fowler - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - */ - -#include "inttypes.h" - -int32_t DirectSoundDrv_GetError(void); -const char *DirectSoundDrv_ErrorString( int32_t ErrorNumber ); -int32_t DirectSoundDrv_PCM_Init(int32_t *mixrate, int32_t *numchannels, int32_t *samplebits, void * initdata); -void DirectSoundDrv_PCM_Shutdown(void); -int32_t DirectSoundDrv_PCM_BeginPlayback(char *BufferStart, int32_t BufferSize, - int32_t NumDivisions, void ( *CallBackFunc )( void ) ); -void DirectSoundDrv_PCM_StopPlayback(void); -void DirectSoundDrv_PCM_Lock(void); -void DirectSoundDrv_PCM_Unlock(void); diff --git a/polymer-perf/eduke32/source/jaudiolib/src/driver_nosound.c b/polymer-perf/eduke32/source/jaudiolib/src/driver_nosound.c deleted file mode 100644 index 638f8d5c5..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/driver_nosound.c +++ /dev/null @@ -1,76 +0,0 @@ -/* - Copyright (C) 2009 Jonathon Fowler - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - */ - -/** - * Stub driver for no output - */ - -#include "inttypes.h" - -#ifndef UNREFERENCED_PARAMETER -# define UNREFERENCED_PARAMETER(x) x=x -#endif - - -int32_t NoSoundDrv_GetError(void) -{ - return 0; -} - -const char *NoSoundDrv_ErrorString( int32_t ErrorNumber ) -{ - UNREFERENCED_PARAMETER(ErrorNumber); - return "No sound, Ok."; -} - -int32_t NoSoundDrv_PCM_Init(int32_t *mixrate, int32_t *numchannels, int32_t *samplebits, void * initdata) -{ - UNREFERENCED_PARAMETER(mixrate); - UNREFERENCED_PARAMETER(numchannels); - UNREFERENCED_PARAMETER(samplebits); - UNREFERENCED_PARAMETER(initdata); - return 0; -} - -void NoSoundDrv_PCM_Shutdown(void) -{ -} - -int32_t NoSoundDrv_PCM_BeginPlayback(char *BufferStart, int32_t BufferSize, - int32_t NumDivisions, void ( *CallBackFunc )( void ) ) -{ - UNREFERENCED_PARAMETER(BufferStart); - UNREFERENCED_PARAMETER(BufferSize); - UNREFERENCED_PARAMETER(NumDivisions); - UNREFERENCED_PARAMETER(CallBackFunc); - return 0; -} - -void NoSoundDrv_PCM_StopPlayback(void) -{ -} - -void NoSoundDrv_PCM_Lock(void) -{ -} - -void NoSoundDrv_PCM_Unlock(void) -{ -} diff --git a/polymer-perf/eduke32/source/jaudiolib/src/driver_nosound.h b/polymer-perf/eduke32/source/jaudiolib/src/driver_nosound.h deleted file mode 100644 index 5555cbfc7..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/driver_nosound.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - Copyright (C) 2009 Jonathon Fowler - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - */ - - -int NoSoundDrv_GetError(void); -const char *NoSoundDrv_ErrorString( int ErrorNumber ); -int NoSoundDrv_PCM_Init(int *mixrate, int *numchannels, int *samplebits, void * initdata); -void NoSoundDrv_PCM_Shutdown(void); -int NoSoundDrv_PCM_BeginPlayback(char *BufferStart, int BufferSize, - int NumDivisions, void ( *CallBackFunc )( void ) ); -void NoSoundDrv_PCM_StopPlayback(void); -void NoSoundDrv_PCM_Lock(void); -void NoSoundDrv_PCM_Unlock(void); diff --git a/polymer-perf/eduke32/source/jaudiolib/src/driver_sdl.c b/polymer-perf/eduke32/source/jaudiolib/src/driver_sdl.c deleted file mode 100644 index 07940053d..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/driver_sdl.c +++ /dev/null @@ -1,279 +0,0 @@ -/* - Copyright (C) 2009 Jonathon Fowler - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - */ - -/** - * libSDL output driver for MultiVoc - */ - - -#include -#if defined(SDL_FRAMEWORK) -# include -#else -# include -#endif -#include -#include "driver_sdl.h" - -#ifndef UNREFERENCED_PARAMETER -#define UNREFERENCED_PARAMETER(P) (P)=(P) -#endif - -enum { - SDLErr_Warning = -2, - SDLErr_Error = -1, - SDLErr_Ok = 0, - SDLErr_Uninitialised, - SDLErr_InitSubSystem, - SDLErr_OpenAudio -}; - -static int32_t ErrorCode = SDLErr_Ok; -static int32_t Initialised = 0; -static int32_t Playing = 0; -// static int32_t StartedSDL = -1; - -static char *MixBuffer = 0; -static int32_t MixBufferSize = 0; -static int32_t MixBufferCount = 0; -static int32_t MixBufferCurrent = 0; -static int32_t MixBufferUsed = 0; -static void ( *MixCallBack )( void ) = 0; - -static Mix_Chunk *DummyChunk = NULL; -static uint8_t *DummyBuffer = NULL; -static int32_t InterruptsDisabled = 0; -static SDL_mutex *EffectFence; - -static void fillData(int32_t chan, void *ptr, int32_t remaining, void *udata) -{ - int32_t len; - char *sptr; - - UNREFERENCED_PARAMETER(chan); - UNREFERENCED_PARAMETER(udata); - - if (!MixBuffer || !MixCallBack) - return; - - SDL_LockMutex(EffectFence); - - while (remaining > 0) { - if (MixBufferUsed == MixBufferSize) { - MixCallBack(); - - MixBufferUsed = 0; - MixBufferCurrent++; - if (MixBufferCurrent >= MixBufferCount) { - MixBufferCurrent -= MixBufferCount; - } - } - - while (remaining > 0 && MixBufferUsed < MixBufferSize) { - sptr = MixBuffer + (MixBufferCurrent * MixBufferSize) + MixBufferUsed; - - len = MixBufferSize - MixBufferUsed; - if (remaining < len) { - len = remaining; - } - - memcpy(ptr, sptr, len); - - ptr += len; - MixBufferUsed += len; - remaining -= len; - } - } - - SDL_UnlockMutex(EffectFence); -} - - -int32_t SDLDrv_GetError(void) -{ - return ErrorCode; -} - -const char *SDLDrv_ErrorString( int32_t ErrorNumber ) -{ - const char *ErrorString; - - switch( ErrorNumber ) { - case SDLErr_Warning : - case SDLErr_Error : - ErrorString = SDLDrv_ErrorString( ErrorCode ); - break; - - case SDLErr_Ok : - ErrorString = "SDL Audio ok."; - break; - - case SDLErr_Uninitialised: - ErrorString = "SDL Audio uninitialised."; - break; - - case SDLErr_InitSubSystem: - ErrorString = "SDL Audio: error in Init or InitSubSystem."; - break; - - case SDLErr_OpenAudio: - ErrorString = "SDL Audio: error in OpenAudio."; - break; - - default: - ErrorString = "Unknown SDL Audio error code."; - break; - } - - return ErrorString; -} - -int32_t SDLDrv_PCM_Init(int32_t *mixrate, int32_t *numchannels, int32_t *samplebits, void * initdata) -{ - int32_t err = 0; - int32_t chunksize; - uint16_t fmt; - - UNREFERENCED_PARAMETER(numchannels); - UNREFERENCED_PARAMETER(initdata); - - if (Initialised) { - SDLDrv_PCM_Shutdown(); - } - - chunksize = 512; - - if (*mixrate >= 16000) chunksize *= 2; - if (*mixrate >= 32000) chunksize *= 2; - - err = Mix_OpenAudio(*mixrate, (*samplebits == 8) ? AUDIO_U8 : AUDIO_S16SYS, *numchannels, chunksize); - - if (err < 0) { - ErrorCode = SDLErr_OpenAudio; - return SDLErr_Error; - } - - if (Mix_QuerySpec(mixrate, &fmt, numchannels)) - { - if (fmt == AUDIO_U8 || fmt == AUDIO_S8) *samplebits = 8; - else *samplebits = 16; - } - - //Mix_SetPostMix(fillData, NULL); - - EffectFence = SDL_CreateMutex(); - - // channel 0 and 1 are actual sounds - // dummy channel 2 runs our fillData() callback as an effect - Mix_RegisterEffect(2, fillData, NULL, NULL); - - DummyBuffer = (uint8_t *) malloc(chunksize); - memset(DummyBuffer, 0, chunksize); - - DummyChunk = Mix_QuickLoad_RAW(DummyBuffer, chunksize); - - Mix_PlayChannel(2, DummyChunk, -1); - - Initialised = 1; - - return SDLErr_Ok; -} - -void SDLDrv_PCM_Shutdown(void) -{ - if (!Initialised) - return; - else Mix_HaltChannel(-1); - - if (DummyChunk != NULL) - { - Mix_FreeChunk(DummyChunk); - DummyChunk = NULL; - } - - if (DummyBuffer != NULL) - { - free(DummyBuffer); - DummyBuffer = NULL; - } - - Mix_CloseAudio(); - - SDL_DestroyMutex(EffectFence); - - Initialised = 0; -} - -int32_t SDLDrv_PCM_BeginPlayback(char *BufferStart, int32_t BufferSize, - int32_t NumDivisions, void ( *CallBackFunc )( void ) ) -{ - if (!Initialised) { - ErrorCode = SDLErr_Uninitialised; - return SDLErr_Error; - } - - if (Playing) { - SDLDrv_PCM_StopPlayback(); - } - - MixBuffer = BufferStart; - MixBufferSize = BufferSize; - MixBufferCount = NumDivisions; - MixBufferCurrent = 0; - MixBufferUsed = 0; - MixCallBack = CallBackFunc; - - // prime the buffer - MixCallBack(); - - Mix_Resume(-1); - - Playing = 1; - - return SDLErr_Ok; -} - -void SDLDrv_PCM_StopPlayback(void) -{ - if (!Initialised || !Playing) { - return; - } - - Mix_Pause(-1); - - Playing = 0; -} - -void SDLDrv_PCM_Lock(void) -{ - if (InterruptsDisabled++) - return; - - SDL_LockMutex(EffectFence); -} - -void SDLDrv_PCM_Unlock(void) -{ - if (--InterruptsDisabled) - return; - - SDL_UnlockMutex(EffectFence); -} - diff --git a/polymer-perf/eduke32/source/jaudiolib/src/driver_sdl.h b/polymer-perf/eduke32/source/jaudiolib/src/driver_sdl.h deleted file mode 100644 index 9ea19e97d..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/driver_sdl.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - Copyright (C) 2009 Jonathon Fowler - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - */ - - -int32_t SDLDrv_GetError(void); -const char *SDLDrv_ErrorString( int32_t ErrorNumber ); -int32_t SDLDrv_PCM_Init(int32_t *mixrate, int32_t *numchannels, int32_t *samplebits, void * initdata); -void SDLDrv_PCM_Shutdown(void); -int32_t SDLDrv_PCM_BeginPlayback(char *BufferStart, int32_t BufferSize, - int32_t NumDivisions, void ( *CallBackFunc )( void ) ); -void SDLDrv_PCM_StopPlayback(void); -void SDLDrv_PCM_Lock(void); -void SDLDrv_PCM_Unlock(void); diff --git a/polymer-perf/eduke32/source/jaudiolib/src/drivers.c b/polymer-perf/eduke32/source/jaudiolib/src/drivers.c deleted file mode 100644 index 7b1e645b4..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/drivers.c +++ /dev/null @@ -1,154 +0,0 @@ -/* - Copyright (C) 2009 Jonathon Fowler - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - */ - -/** - * Abstraction layer for hiding the various supported sound devices - * behind a common and opaque interface called on by MultiVoc. - */ - -#include "drivers.h" - -#include "driver_nosound.h" - -#ifdef HAVE_SDL -# include "driver_sdl.h" -#endif - -#ifdef WIN32 -# include "driver_directsound.h" -#endif - -int32_t ASS_SoundDriver = -1; - -#define UNSUPPORTED { 0,0,0,0,0,0,0,0, }, - -static struct { - int32_t (* GetError)(void); - const char * (* ErrorString)(int32_t); - int32_t (* Init)(int32_t *, int32_t *, int32_t *, void *); - void (* Shutdown)(void); - int32_t (* BeginPlayback)(char *, int32_t, int32_t, void ( * )(void) ); - void (* StopPlayback)(void); - void (* Lock)(void); - void (* Unlock)(void); -} SoundDrivers[ASS_NumSoundCards] = { - - // Everyone gets the "no sound" driver - { - NoSoundDrv_GetError, - NoSoundDrv_ErrorString, - NoSoundDrv_PCM_Init, - NoSoundDrv_PCM_Shutdown, - NoSoundDrv_PCM_BeginPlayback, - NoSoundDrv_PCM_StopPlayback, - NoSoundDrv_PCM_Lock, - NoSoundDrv_PCM_Unlock, - }, - - // Simple DirectMedia Layer - #ifdef HAVE_SDL - { - SDLDrv_GetError, - SDLDrv_ErrorString, - SDLDrv_PCM_Init, - SDLDrv_PCM_Shutdown, - SDLDrv_PCM_BeginPlayback, - SDLDrv_PCM_StopPlayback, - SDLDrv_PCM_Lock, - SDLDrv_PCM_Unlock, - }, - #else - UNSUPPORTED - #endif - - // Windows DirectSound - #ifdef WIN32 - { - DirectSoundDrv_GetError, - DirectSoundDrv_ErrorString, - DirectSoundDrv_PCM_Init, - DirectSoundDrv_PCM_Shutdown, - DirectSoundDrv_PCM_BeginPlayback, - DirectSoundDrv_PCM_StopPlayback, - DirectSoundDrv_PCM_Lock, - DirectSoundDrv_PCM_Unlock, - }, - #else - UNSUPPORTED - #endif -}; - - -int32_t SoundDriver_IsSupported(int32_t driver) -{ - return (SoundDrivers[driver].GetError != 0); -} - - -int32_t SoundDriver_GetError(void) -{ - if (!SoundDriver_IsSupported(ASS_SoundDriver)) { - return -1; - } - return SoundDrivers[ASS_SoundDriver].GetError(); -} - -const char * SoundDriver_ErrorString( int32_t ErrorNumber ) -{ - if (ASS_SoundDriver < 0 || ASS_SoundDriver >= ASS_NumSoundCards) { - return "No sound driver selected."; - } - if (!SoundDriver_IsSupported(ASS_SoundDriver)) { - return "Unsupported sound driver selected."; - } - return SoundDrivers[ASS_SoundDriver].ErrorString(ErrorNumber); -} - -int32_t SoundDriver_Init(int32_t *mixrate, int32_t *numchannels, int32_t *samplebits, void * initdata) -{ - return SoundDrivers[ASS_SoundDriver].Init(mixrate, numchannels, samplebits, initdata); -} - -void SoundDriver_Shutdown(void) -{ - SoundDrivers[ASS_SoundDriver].Shutdown(); -} - -int32_t SoundDriver_BeginPlayback(char *BufferStart, int32_t BufferSize, - int32_t NumDivisions, void ( *CallBackFunc )( void ) ) -{ - return SoundDrivers[ASS_SoundDriver].BeginPlayback(BufferStart, - BufferSize, NumDivisions, CallBackFunc); -} - -void SoundDriver_StopPlayback(void) -{ - SoundDrivers[ASS_SoundDriver].StopPlayback(); -} - -void SoundDriver_Lock(void) -{ - SoundDrivers[ASS_SoundDriver].Lock(); -} - -void SoundDriver_Unlock(void) -{ - SoundDrivers[ASS_SoundDriver].Unlock(); -} diff --git a/polymer-perf/eduke32/source/jaudiolib/src/drivers.h b/polymer-perf/eduke32/source/jaudiolib/src/drivers.h deleted file mode 100644 index bc0bd3b39..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/drivers.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - Copyright (C) 2009 Jonathon Fowler - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - */ - -#ifndef DRIVERS_H -#define DRIVERS_H - -#include "inttypes.h" -#include "sndcards.h" - -extern int32_t ASS_SoundDriver; - -int32_t SoundDriver_IsSupported(int32_t driver); - -int32_t SoundDriver_GetError(void); -const char * SoundDriver_ErrorString( int32_t ErrorNumber ); -int32_t SoundDriver_Init(int32_t *mixrate, int32_t *numchannels, int32_t *samplebits, void * initdata); -void SoundDriver_Shutdown(void); -int32_t SoundDriver_BeginPlayback( char *BufferStart, - int32_t BufferSize, int32_t NumDivisions, - void ( *CallBackFunc )( void ) ); -void SoundDriver_StopPlayback(void); -void SoundDriver_Lock(void); -void SoundDriver_Unlock(void); - -#endif diff --git a/polymer-perf/eduke32/source/jaudiolib/src/fx_man.c b/polymer-perf/eduke32/source/jaudiolib/src/fx_man.c deleted file mode 100644 index f57b0e8f7..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/fx_man.c +++ /dev/null @@ -1,1075 +0,0 @@ -/* -Copyright (C) 1994-1995 Apogee Software, Ltd. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -/********************************************************************** - module: FX_MAN.C - - author: James R. Dose - date: March 17, 1994 - - Device independant sound effect routines. - - (c) Copyright 1994 James R. Dose. All Rights Reserved. -**********************************************************************/ - -#include -#include -#include -#include "sndcards.h" -#include "drivers.h" -#include "multivoc.h" -#include "fx_man.h" - -#ifdef __POWERPC__ -static inline uint16_t SWAP16(uint16_t s) -{ - return (s >> 8) | (s << 8); -} - -static inline uint32_t SWAP32(uint32_t s) -{ - return (s >> 24) | (s << 24) | ((s&0xff00) << 8) | ((s & 0xff0000) >> 8); -} - -#define LITTLE16 SWAP16 -#define LITTLE32 SWAP32 -#else -#define LITTLE16 -#define LITTLE32 -#endif - -#define TRUE ( 1 == 1 ) -#define FALSE ( !TRUE ) - -int32_t FX_ErrorCode = FX_Ok; -int32_t FX_Installed = FALSE; - -#define FX_SetErrorCode( status ) \ - FX_ErrorCode = ( status ); - - -/*--------------------------------------------------------------------- - Function: FX_ErrorString - - Returns a pointer to the error message associated with an error - number. A -1 returns a pointer the current error. ----------------------------------------------------------------------*/ - -const char *FX_ErrorString -( - int32_t ErrorNumber -) - -{ - const char *ErrorString; - - switch (ErrorNumber) - { - case FX_Warning : - case FX_Error : - ErrorString = FX_ErrorString(FX_ErrorCode); - break; - - case FX_Ok : - ErrorString = "Fx ok."; - break; - - case FX_ASSVersion : - ErrorString = "Apogee Sound System Version " ASS_VERSION_STRING " " - "Programmed by Jim Dose\n" - "(c) Copyright 1995 James R. Dose. All Rights Reserved.\n"; - break; - - case FX_SoundCardError : - ErrorString = SoundDriver_ErrorString(SoundDriver_GetError()); - break; - - case FX_InvalidCard : - ErrorString = "Invalid Sound Fx device."; - break; - - case FX_MultiVocError : - ErrorString = MV_ErrorString(MV_Error); - break; - - default : - ErrorString = "Unknown Fx error code."; - break; - } - - return(ErrorString); -} - - -/*--------------------------------------------------------------------- - Function: FX_Init - - Selects which sound device to use. ----------------------------------------------------------------------*/ - -int32_t FX_Init -( - int32_t SoundCard, - int32_t numvoices, - int32_t numchannels, - int32_t samplebits, - unsigned mixrate, - void * initdata -) - -{ - int32_t status; - int32_t devicestatus; - - if (FX_Installed) - { - FX_Shutdown(); - } - - if (SoundCard == ASS_AutoDetect) - { -#if defined WIN32 - SoundCard = ASS_DirectSound; -#elif defined HAVE_SDL - SoundCard = ASS_SDL; -#else - SoundCard = ASS_NoSound; -#endif - } - - if (SoundCard < 0 || SoundCard >= ASS_NumSoundCards) - { - FX_SetErrorCode(FX_InvalidCard); - status = FX_Error; - return status; - } - - if (SoundDriver_IsSupported(SoundCard) == 0) - { - // unsupported cards fall back to no sound - SoundCard = ASS_NoSound; - } - - status = FX_Ok; - devicestatus = MV_Init(SoundCard, mixrate, numvoices, numchannels, samplebits, initdata); - if (devicestatus != MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - status = FX_Error; - } - - if (status == FX_Ok) - { - FX_Installed = TRUE; - } - - return(status); -} - - -/*--------------------------------------------------------------------- - Function: FX_Shutdown - - Terminates use of sound device. ----------------------------------------------------------------------*/ - -int32_t FX_Shutdown -( - void -) - -{ - int32_t status; - - if (!FX_Installed) - { - return(FX_Ok); - } - - status = MV_Shutdown(); - if (status != MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - status = FX_Error; - } - - FX_Installed = FALSE; - - return(status); -} - - -/*--------------------------------------------------------------------- - Function: FX_SetCallback - - Sets the function to call when a voice is done. ----------------------------------------------------------------------*/ - -int32_t FX_SetCallBack -( - void (*function)(uint32_t) -) - -{ - int32_t status; - - status = FX_Ok; - - MV_SetCallBack(function); - - return(status); -} - - -/*--------------------------------------------------------------------- - Function: FX_SetVolume - - Sets the volume of the current sound device. ----------------------------------------------------------------------*/ - -void FX_SetVolume -( - int32_t volume -) - -{ - MV_SetVolume(volume); -} - - -/*--------------------------------------------------------------------- - Function: FX_GetVolume - - Returns the volume of the current sound device. ----------------------------------------------------------------------*/ - -int32_t FX_GetVolume -( - void -) - -{ - int32_t volume; - - volume = MV_GetVolume(); - - return(volume); -} - - -/*--------------------------------------------------------------------- - Function: FX_SetReverseStereo - - Set the orientation of the left and right channels. ----------------------------------------------------------------------*/ - -void FX_SetReverseStereo -( - int32_t setting -) - -{ - MV_SetReverseStereo(setting); -} - - -/*--------------------------------------------------------------------- - Function: FX_GetReverseStereo - - Returns the orientation of the left and right channels. ----------------------------------------------------------------------*/ - -int32_t FX_GetReverseStereo -( - void -) - -{ - return MV_GetReverseStereo(); -} - - -/*--------------------------------------------------------------------- - Function: FX_SetReverb - - Sets the reverb level. ----------------------------------------------------------------------*/ - -void FX_SetReverb -( - int32_t reverb -) - -{ - MV_SetReverb(reverb); -} - - -/*--------------------------------------------------------------------- - Function: FX_SetFastReverb - - Sets the reverb level. ----------------------------------------------------------------------*/ - -void FX_SetFastReverb -( - int32_t reverb -) - -{ - MV_SetFastReverb(reverb); -} - - -/*--------------------------------------------------------------------- - Function: FX_GetMaxReverbDelay - - Returns the maximum delay time for reverb. ----------------------------------------------------------------------*/ - -int32_t FX_GetMaxReverbDelay -( - void -) - -{ - return MV_GetMaxReverbDelay(); -} - - -/*--------------------------------------------------------------------- - Function: FX_GetReverbDelay - - Returns the current delay time for reverb. ----------------------------------------------------------------------*/ - -int32_t FX_GetReverbDelay -( - void -) - -{ - return MV_GetReverbDelay(); -} - - -/*--------------------------------------------------------------------- - Function: FX_SetReverbDelay - - Sets the delay level of reverb to add to mix. ----------------------------------------------------------------------*/ - -void FX_SetReverbDelay -( - int32_t delay -) - -{ - MV_SetReverbDelay(delay); -} - - -/*--------------------------------------------------------------------- - Function: FX_VoiceAvailable - - Checks if a voice can be play at the specified priority. ----------------------------------------------------------------------*/ - -int32_t FX_VoiceAvailable -( - int32_t priority -) - -{ - return MV_VoiceAvailable(priority); -} - -/*--------------------------------------------------------------------- -Function: FX_PauseVoice - -Stops the voice associated with the specified handle from looping -without stoping the sound. ----------------------------------------------------------------------*/ - -int32_t FX_PauseVoice -( - int32_t handle, - int32_t pause -) - -{ - int32_t status; - - status = MV_PauseVoice(handle, pause); - if (status == MV_Error) - { - FX_SetErrorCode(FX_MultiVocError); - status = FX_Warning; - } - - return(status); -} - - -/*--------------------------------------------------------------------- - Function: FX_EndLooping - - Stops the voice associated with the specified handle from looping - without stoping the sound. ----------------------------------------------------------------------*/ - -int32_t FX_EndLooping -( - int32_t handle -) - -{ - int32_t status; - - status = MV_EndLooping(handle); - if (status == MV_Error) - { - FX_SetErrorCode(FX_MultiVocError); - status = FX_Warning; - } - - return(status); -} - -/*--------------------------------------------------------------------- - Function: FX_SetPan - - Sets the stereo and mono volume level of the voice associated - with the specified handle. ----------------------------------------------------------------------*/ - -int32_t FX_SetPan -( - int32_t handle, - int32_t vol, - int32_t left, - int32_t right -) - -{ - int32_t status; - - status = MV_SetPan(handle, vol, left, right); - if (status == MV_Error) - { - FX_SetErrorCode(FX_MultiVocError); - status = FX_Warning; - } - - return(status); -} - - -/*--------------------------------------------------------------------- - Function: FX_SetPitch - - Sets the pitch of the voice associated with the specified handle. ----------------------------------------------------------------------*/ - -int32_t FX_SetPitch -( - int32_t handle, - int32_t pitchoffset -) - -{ - int32_t status; - - status = MV_SetPitch(handle, pitchoffset); - if (status == MV_Error) - { - FX_SetErrorCode(FX_MultiVocError); - status = FX_Warning; - } - - return(status); -} - - -/*--------------------------------------------------------------------- - Function: FX_SetFrequency - - Sets the frequency of the voice associated with the specified handle. ----------------------------------------------------------------------*/ - -int32_t FX_SetFrequency -( - int32_t handle, - int32_t frequency -) - -{ - int32_t status; - - status = MV_SetFrequency(handle, frequency); - if (status == MV_Error) - { - FX_SetErrorCode(FX_MultiVocError); - status = FX_Warning; - } - - return(status); -} - - -/*--------------------------------------------------------------------- - Function: FX_PlayVOC - - Begin playback of sound data with the given volume and priority. ----------------------------------------------------------------------*/ - -int32_t FX_PlayVOC -( - char *ptr, - uint32_t ptrlength, - int32_t pitchoffset, - int32_t vol, - int32_t left, - int32_t right, - int32_t priority, - uint32_t callbackval -) - -{ - int32_t handle; - - handle = MV_PlayVOC(ptr, ptrlength, pitchoffset, vol, left, right, - priority, callbackval); - if (handle < MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - handle = FX_Warning; - } - - return(handle); -} - - -/*--------------------------------------------------------------------- - Function: FX_PlayLoopedVOC - - Begin playback of sound data with the given volume and priority. ----------------------------------------------------------------------*/ - -int32_t FX_PlayLoopedVOC -( - char *ptr, - uint32_t ptrlength, - int32_t loopstart, - int32_t loopend, - int32_t pitchoffset, - int32_t vol, - int32_t left, - int32_t right, - int32_t priority, - uint32_t callbackval -) - -{ - int32_t handle; - - handle = MV_PlayLoopedVOC(ptr, ptrlength, loopstart, loopend, pitchoffset, - vol, left, right, priority, callbackval); - if (handle < MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - handle = FX_Warning; - } - - return(handle); -} - - -/*--------------------------------------------------------------------- - Function: FX_PlayWAV - - Begin playback of sound data with the given volume and priority. ----------------------------------------------------------------------*/ - -int32_t FX_PlayWAV -( - char *ptr, - uint32_t ptrlength, - int32_t pitchoffset, - int32_t vol, - int32_t left, - int32_t right, - int32_t priority, - uint32_t callbackval -) - -{ - int32_t handle; - - handle = MV_PlayWAV(ptr, ptrlength, pitchoffset, vol, left, right, - priority, callbackval); - if (handle < MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - handle = FX_Warning; - } - - return(handle); -} - - -/*--------------------------------------------------------------------- - Function: FX_PlayWAV - - Begin playback of sound data with the given volume and priority. ----------------------------------------------------------------------*/ - -int32_t FX_PlayLoopedWAV -( - char *ptr, - uint32_t ptrlength, - int32_t loopstart, - int32_t loopend, - int32_t pitchoffset, - int32_t vol, - int32_t left, - int32_t right, - int32_t priority, - uint32_t callbackval -) - -{ - int32_t handle; - - handle = MV_PlayLoopedWAV(ptr, ptrlength, loopstart, loopend, - pitchoffset, vol, left, right, priority, callbackval); - if (handle < MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - handle = FX_Warning; - } - - return(handle); -} - - -/*--------------------------------------------------------------------- - Function: FX_PlayVOC3D - - Begin playback of sound data at specified angle and distance - from listener. ----------------------------------------------------------------------*/ - -int32_t FX_PlayVOC3D -( - char *ptr, - uint32_t ptrlength, - int32_t pitchoffset, - int32_t angle, - int32_t distance, - int32_t priority, - uint32_t callbackval -) - -{ - int32_t handle; - - handle = MV_PlayVOC3D(ptr, ptrlength, pitchoffset, angle, distance, - priority, callbackval); - if (handle < MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - handle = FX_Warning; - } - - return(handle); -} - - -/*--------------------------------------------------------------------- - Function: FX_PlayWAV3D - - Begin playback of sound data at specified angle and distance - from listener. ----------------------------------------------------------------------*/ - -int32_t FX_PlayWAV3D -( - char *ptr, - uint32_t ptrlength, - int32_t pitchoffset, - int32_t angle, - int32_t distance, - int32_t priority, - uint32_t callbackval -) - -{ - int32_t handle; - - handle = MV_PlayWAV3D(ptr, ptrlength, pitchoffset, angle, distance, - priority, callbackval); - if (handle < MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - handle = FX_Warning; - } - - return(handle); -} - - -/*--------------------------------------------------------------------- - Function: FX_PlayRaw - - Begin playback of raw sound data with the given volume and priority. ----------------------------------------------------------------------*/ - -int32_t FX_PlayRaw -( - char *ptr, - uint32_t length, - unsigned rate, - int32_t pitchoffset, - int32_t vol, - int32_t left, - int32_t right, - int32_t priority, - uint32_t callbackval -) - -{ - int32_t handle; - - handle = MV_PlayRaw(ptr, length, rate, pitchoffset, - vol, left, right, priority, callbackval); - if (handle < MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - handle = FX_Warning; - } - - return(handle); -} - - -/*--------------------------------------------------------------------- - Function: FX_PlayLoopedRaw - - Begin playback of raw sound data with the given volume and priority. ----------------------------------------------------------------------*/ - -int32_t FX_PlayLoopedRaw -( - char *ptr, - uint32_t length, - char *loopstart, - char *loopend, - unsigned rate, - int32_t pitchoffset, - int32_t vol, - int32_t left, - int32_t right, - int32_t priority, - uint32_t callbackval -) - -{ - int32_t handle; - - handle = MV_PlayLoopedRaw(ptr, length, loopstart, loopend, - rate, pitchoffset, vol, left, right, priority, callbackval); - if (handle < MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - handle = FX_Warning; - } - - return(handle); -} - - -/*--------------------------------------------------------------------- - Function: FX_Pan3D - - Set the angle and distance from the listener of the voice associated - with the specified handle. ----------------------------------------------------------------------*/ - -int32_t FX_Pan3D(int32_t handle,int32_t angle,int32_t distance) -{ - int32_t status; - - status = MV_Pan3D(handle, angle, distance); - if (status != MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - status = FX_Warning; - } - - return(status); -} - - -/*--------------------------------------------------------------------- - Function: FX_SoundActive - - Tests if the specified sound is currently playing. ----------------------------------------------------------------------*/ - -int32_t FX_SoundActive(int32_t handle) -{ - return(MV_VoicePlaying(handle)); -} - - -/*--------------------------------------------------------------------- - Function: FX_SoundsPlaying - - Reports the number of voices playing. ----------------------------------------------------------------------*/ - -int32_t FX_SoundsPlaying(void) -{ - return(MV_VoicesPlaying()); -} - - -/*--------------------------------------------------------------------- - Function: FX_StopSound - - Halts playback of a specific voice ----------------------------------------------------------------------*/ - -int32_t FX_StopSound(int32_t handle) -{ - int32_t status; - - status = MV_Kill(handle); - if (status != MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - return(FX_Warning); - } - - return(FX_Ok); -} - - -/*--------------------------------------------------------------------- - Function: FX_StopAllSounds - - Halts playback of all sounds. ----------------------------------------------------------------------*/ - -int32_t FX_StopAllSounds -( - void -) - -{ - int32_t status; - - status = MV_KillAllVoices(); - if (status != MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - return(FX_Warning); - } - - return(FX_Ok); -} - - -/*--------------------------------------------------------------------- - Function: FX_StartDemandFeedPlayback - - Plays a digitized sound from a user controlled buffering system. ----------------------------------------------------------------------*/ - -int32_t FX_StartDemandFeedPlayback -( - void (*function)(char **ptr, uint32_t *length), - int32_t rate, - int32_t pitchoffset, - int32_t vol, - int32_t left, - int32_t right, - int32_t priority, - uint32_t callbackval -) - -{ - int32_t handle; - - handle = MV_StartDemandFeedPlayback(function, rate, - pitchoffset, vol, left, right, priority, callbackval); - if (handle < MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - handle = FX_Warning; - } - - return(handle); -} - - -/*--------------------------------------------------------------------- - Function: FX_PlayAuto - - Play a sound, autodetecting the format. ----------------------------------------------------------------------*/ -int32_t FX_PlayAuto(char *ptr, uint32_t length, int32_t pitchoffset, int32_t vol, - int32_t left, int32_t right, int32_t priority, uint32_t callbackval) -{ - int32_t handle = -1; - - switch (*(int32_t *)ptr) - { - case 'C'+('r'<<8)+('e'<<16)+('a'<<24): - handle = MV_PlayVOC(ptr, length, pitchoffset, vol, left, right, priority, callbackval); - break; - case 'R'+('I'<<8)+('F'<<16)+('F'<<24): - handle = MV_PlayWAV(ptr, length, pitchoffset, vol, left, right, priority, callbackval); - break; - case 'O'+('g'<<8)+('g'<<16)+('S'<<24): - handle = MV_PlayVorbis(ptr, length, pitchoffset, vol, left, right, priority, callbackval); - break; - default: - switch (*(int32_t *)(ptr + 8)) - { - case 'W'+('A'<<8)+('V'<<16)+('E'<<24): - handle = MV_PlayWAV(ptr, length, pitchoffset, vol, left, right, priority, callbackval); - break; - } - break; - } - - if (handle <= MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - handle = FX_Warning; - } - - return handle; -} - -int32_t FX_SetPrintf(void (*function)(const char *, ...)) -{ - MV_SetPrintf(function); - - return FX_Ok; -} - - -/*--------------------------------------------------------------------- - Function: FX_PlayLoopedAuto - - Play a looped sound, autodetecting the format. ----------------------------------------------------------------------*/ -int32_t FX_PlayLoopedAuto(char *ptr, uint32_t length, int32_t loopstart, int32_t loopend, - int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, int32_t priority, - uint32_t callbackval) -{ - int32_t handle = -1; - printf("FX_PlayLoopedAuto %X\n",*(int32_t *)ptr); - switch (*(int32_t *)ptr) - { - case LITTLE32('C'+('r'<<8)+('e'<<16)+('a'<<24)): - handle = MV_PlayLoopedVOC(ptr, length, loopstart, loopend, pitchoffset, vol, left, right, priority, callbackval); - break; - case LITTLE32('R'+('I'<<8)+('F'<<16)+('F'<<24)): - handle = MV_PlayLoopedWAV(ptr, length, loopstart, loopend, pitchoffset, vol, left, right, priority, callbackval); - break; - case LITTLE32('O'+('g'<<8)+('g'<<16)+('S'<<24)): - handle = MV_PlayLoopedVorbis(ptr, length, loopstart, loopend, pitchoffset, vol, left, right, priority, callbackval); - break; - default: - switch (*(int32_t *)(ptr + 8)) - { - case LITTLE32('W'+('A'<<8)+('V'<<16)+('E'<<24)): - handle = MV_PlayLoopedWAV(ptr, length, loopstart, loopend, pitchoffset, vol, left, right, priority, callbackval); - break; - } - break; - } - - - if (handle <= MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - handle = FX_Warning; - } - - return handle; -} - -/*--------------------------------------------------------------------- - Function: FX_PlayAuto3D - - Play a positioned sound, autodetecting the format. ----------------------------------------------------------------------*/ -int32_t FX_PlayAuto3D(char *ptr, uint32_t length, int32_t pitchoffset, int32_t angle, - int32_t distance, int32_t priority, uint32_t callbackval) -{ - int32_t handle = -1; - - switch (*(int32_t *)ptr) - { - case LITTLE32('C'+('r'<<8)+('e'<<16)+('a'<<24)): // Crea - handle = MV_PlayVOC3D(ptr, length, pitchoffset, angle, distance, priority, callbackval); - break; - case LITTLE32('R'+('I'<<8)+('F'<<16)+('F'<<24)): // RIFF - handle = MV_PlayWAV3D(ptr, length, pitchoffset, angle, distance, priority, callbackval); - break; - case LITTLE32('O'+('g'<<8)+('g'<<16)+('S'<<24)): // OggS - handle = MV_PlayVorbis3D(ptr, length, pitchoffset, angle, distance, priority, callbackval); - break; - default: - switch (*(int32_t *)(ptr + 8)) - { - case LITTLE32('W'+('A'<<8)+('V'<<16)+('E'<<24)): // WAVE - handle = MV_PlayWAV3D(ptr, length, pitchoffset, angle, distance, priority, callbackval); - break; - } - break; - } - - if (handle <= MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - handle = FX_Warning; - } - - return handle; -} - -int32_t FX_SetVoiceCallback(int32_t handle, uint32_t callbackval) -{ - int32_t status; - - status = MV_SetVoiceCallback(handle, callbackval); - if (status != MV_Ok) - { - FX_SetErrorCode(FX_MultiVocError); - return(FX_Warning); - } - - return(FX_Ok); -} diff --git a/polymer-perf/eduke32/source/jaudiolib/src/linklist.h b/polymer-perf/eduke32/source/jaudiolib/src/linklist.h deleted file mode 100644 index e4ebd8ad5..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/linklist.h +++ /dev/null @@ -1,118 +0,0 @@ -/* -Copyright (C) 1994-1995 Apogee Software, Ltd. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -#ifndef __linklist_h -#define __linklist_h -#ifdef __cplusplus -extern "C" { -#endif - - -#define NewNode(type) ((type*)Bmalloc(sizeof(type))) - - -#define LL_CreateNewLinkedList(rootnode,type,next,prev) \ - { \ - (rootnode) = NewNode(type); \ - (rootnode)->prev = (rootnode); \ - (rootnode)->next = (rootnode); \ - } - - - -#define LL_AddNode(rootnode, newnode, next, prev) \ - { \ - (newnode)->next = (rootnode); \ - (newnode)->prev = (rootnode)->prev; \ - (rootnode)->prev->next = (newnode); \ - (rootnode)->prev = (newnode); \ - } - -#define LL_TransferList(oldroot,newroot,next,prev) \ - { \ - if ((oldroot)->prev != (oldroot)) \ - { \ - (oldroot)->prev->next = (newroot); \ - (oldroot)->next->prev = (newroot)->prev; \ - (newroot)->prev->next = (oldroot)->next; \ - (newroot)->prev = (oldroot)->prev; \ - (oldroot)->next = (oldroot); \ - (oldroot)->prev = (oldroot); \ - } \ - } - -#define LL_ReverseList(root,type,next,prev) \ - { \ - type *newend,*trav,*tprev; \ - \ - newend = (root)->next; \ - for(trav = (root)->prev; trav != newend; trav = tprev) \ - { \ - tprev = trav->prev; \ - LL_MoveNode(trav,newend,next,prev); \ - } \ - } - - -#define LL_RemoveNode(node,next,prev) \ - { \ - (node)->prev->next = (node)->next; \ - (node)->next->prev = (node)->prev; \ - (node)->next = (node); \ - (node)->prev = (node); \ - } - - -#define LL_SortedInsertion(rootnode,insertnode,next,prev,type,sortparm) \ - { \ - type *hoya; \ - \ - hoya = (rootnode)->next; \ - while((hoya != (rootnode)) && ((insertnode)->sortparm > hoya->sortparm)) \ - { \ - hoya = hoya->next; \ - } \ - LL_AddNode(hoya,(insertnode),next,prev); \ - } - -#define LL_MoveNode(node,newroot,next,prev) \ - { \ - LL_RemoveNode((node),next,prev); \ - LL_AddNode((newroot),(node),next,prev); \ - } - -#define LL_ListEmpty(list,next,prev) \ - ( \ - ((list)->next == (list)) && \ - ((list)->prev == (list)) \ - ) - -#define LL_Free(list) Bfree(list) -#define LL_Reset(list,next,prev) (list)->next = (list)->prev = (list) -#define LL_New LL_CreateNewLinkedList -#define LL_Remove LL_RemoveNode -#define LL_Add LL_AddNode -#define LL_Empty LL_ListEmpty -#define LL_Move LL_MoveNode - - -#ifdef __cplusplus -}; -#endif -#endif diff --git a/polymer-perf/eduke32/source/jaudiolib/src/ll_man.h b/polymer-perf/eduke32/source/jaudiolib/src/ll_man.h deleted file mode 100644 index 0fb891ae1..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/ll_man.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -Copyright (C) 1994-1995 Apogee Software, Ltd. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -/********************************************************************** - module: LL_MAN.H - - author: James R. Dose - date: February 4, 1994 - - Public header for LL_MAN.C. Linked list management routines. - - (c) Copyright 1994 James R. Dose. All Rights Reserved. -**********************************************************************/ - -#ifndef __LL_MAN_H -#define __LL_MAN_H - -enum LL_Errors - { - LL_Warning = -2, - LL_Error = -1, - LL_Ok = 0 - }; - -typedef struct list - { - void *start; - void *end; - } list; - -void LL_AddNode( char *node, char **head, char **tail, int32_t next, int32_t prev ); -void LL_RemoveNode( char *node, char **head, char **tail, int32_t next, int32_t prev ); -void LL_UnlockMemory( void ); -int32_t LL_LockMemory( void ); - -#define LL_AddToHead( type, listhead, node ) \ - LL_AddNode( ( char * )( node ), \ - ( char ** )&( ( listhead )->start ), \ - ( char ** )&( ( listhead )->end ), \ - ( int32_t )&( ( type * ) 0 )->next, \ - ( int32_t )&( ( type * ) 0 )->prev ) - -#define LL_AddToTail( type, listhead, node ) \ - LL_AddNode( ( char * )( node ), \ - ( char ** )&( ( listhead )->end ), \ - ( char ** )&( ( listhead )->start ), \ - ( int32_t )&( ( type * ) 0 )->prev, \ - ( int32_t )&( ( type * ) 0 )->next ) - -#define LL_Remove( type, listhead, node ) \ - LL_RemoveNode( ( char * )( node ), \ - ( char ** )&( ( listhead )->start ), \ - ( char ** )&( ( listhead )->end ), \ - ( int32_t )&( ( type * ) 0 )->next, \ - ( int32_t )&( ( type * ) 0 )->prev ) - -#define LL_NextNode( node ) ( ( node )->next ) -#define LL_PreviousNode( node ) ( ( node )->prev ) - -#endif diff --git a/polymer-perf/eduke32/source/jaudiolib/src/mix.c b/polymer-perf/eduke32/source/jaudiolib/src/mix.c deleted file mode 100644 index 82ee3f214..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/mix.c +++ /dev/null @@ -1,353 +0,0 @@ -/* - Copyright (C) 2009 Jonathon Fowler - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - */ - -#include "_multivc.h" - -extern char *MV_HarshClipTable; -extern char *MV_MixDestination; // pointer to the next output sample -extern uint32_t MV_MixPosition; // return value of where the source pointer got to -extern int16_t *MV_LeftVolume; -extern int16_t *MV_RightVolume; -extern int32_t MV_SampleSize; -extern int32_t MV_RightChannelOffset; - -#ifdef __POWERPC__ -# define BIGENDIAN -#endif - -void ClearBuffer_DW( void *ptr, unsigned data, int32_t length ) -{ - unsigned *ptrdw = ptr; - while (length--) { - *(ptrdw++) = data; - } -} - -/* - JBF: - - position = offset of starting sample in start - rate = resampling increment - start = sound data - length = count of samples to mix - */ - -// 8-bit mono source, 8-bit mono output -void MV_Mix8BitMono( uint32_t position, uint32_t rate, - char *start, uint32_t length ) -{ - uint8_t *source = (uint8_t *) start; - uint8_t *dest = (uint8_t *) MV_MixDestination; - int32_t sample0; - - while (length--) { - sample0 = source[position >> 16]; - position += rate; - - sample0 = MV_LeftVolume[sample0] + *dest; - sample0 = MV_HarshClipTable[sample0 + 128]; - - *dest = sample0 & 255; - - dest += MV_SampleSize; - } - - MV_MixPosition = position; - MV_MixDestination = (char *) dest; -} - -// 8-bit mono source, 8-bit stereo output -void MV_Mix8BitStereo( uint32_t position, uint32_t rate, - char *start, uint32_t length ) -{ - uint8_t *source = (uint8_t *) start; - uint8_t *dest = (uint8_t *) MV_MixDestination; - int32_t sample0, sample1; - - while (length--) { - sample0 = source[position >> 16]; - sample1 = sample0; - position += rate; - - sample0 = MV_LeftVolume[sample0] + *dest; - sample1 = MV_RightVolume[sample1] + *(dest + MV_RightChannelOffset); - sample0 = MV_HarshClipTable[sample0 + 128]; - sample1 = MV_HarshClipTable[sample1 + 128]; - - *dest = sample0 & 255; - *(dest + MV_RightChannelOffset) = sample1 & 255; - - dest += MV_SampleSize; - } - - MV_MixPosition = position; - MV_MixDestination = (char *) dest; -} - -// 8-bit mono source, 16-bit mono output -void MV_Mix16BitMono( uint32_t position, uint32_t rate, - char *start, uint32_t length ) -{ - uint8_t *source = (uint8_t *) start; - int16_t *dest = (int16_t *) MV_MixDestination; - int32_t sample0; - - while (length--) { - sample0 = source[position >> 16]; - position += rate; - - sample0 = MV_LeftVolume[sample0] + *dest; - if (sample0 < -32768) sample0 = -32768; - else if (sample0 > 32767) sample0 = 32767; - - *dest = (int16_t) sample0; - - dest += MV_SampleSize / 2; - } - - MV_MixPosition = position; - MV_MixDestination = (char *) dest; -} - -// 8-bit mono source, 16-bit stereo output -void MV_Mix16BitStereo( uint32_t position, uint32_t rate, - char *start, uint32_t length ) -{ - uint8_t *source = (uint8_t *) start; - int16_t *dest = (int16_t *) MV_MixDestination; - int32_t sample0, sample1; - - while (length--) { - sample0 = source[position >> 16]; - sample1 = sample0; - position += rate; - - sample0 = MV_LeftVolume[sample0] + *dest; - sample1 = MV_RightVolume[sample1] + *(dest + MV_RightChannelOffset / 2); - if (sample0 < -32768) sample0 = -32768; - else if (sample0 > 32767) sample0 = 32767; - if (sample1 < -32768) sample1 = -32768; - else if (sample1 > 32767) sample1 = 32767; - - *dest = (int16_t) sample0; - *(dest + MV_RightChannelOffset/2) = (int16_t) sample1; - - dest += MV_SampleSize / 2; - } - - MV_MixPosition = position; - MV_MixDestination = (char *) dest; -} - -// 16-bit mono source, 16-bit mono output -void MV_Mix16BitMono16( uint32_t position, uint32_t rate, - char *start, uint32_t length ) -{ - uint16_t *source = (uint16_t *) start; - int16_t *dest = (int16_t *) MV_MixDestination; - int32_t sample0l, sample0h, sample0; - - while (length--) { - sample0 = source[position >> 16]; -#ifdef BIGENDIAN - sample0l = sample0 >> 8; - sample0h = (sample0 & 255) ^ 128; -#else - sample0l = sample0 & 255; - sample0h = (sample0 >> 8) ^ 128; -#endif - position += rate; - - sample0l = MV_LeftVolume[sample0l] >> 8; - sample0h = MV_LeftVolume[sample0h]; - sample0 = sample0l + sample0h + 128 + *dest; - if (sample0 < -32768) sample0 = -32768; - else if (sample0 > 32767) sample0 = 32767; - - *dest = (int16_t) sample0; - - dest += MV_SampleSize / 2; - } - - MV_MixPosition = position; - MV_MixDestination = (char *) dest; -} - -// 16-bit mono source, 8-bit mono output -void MV_Mix8BitMono16( uint32_t position, uint32_t rate, - char *start, uint32_t length ) -{ - int8_t *source = (int8_t *) start + 1; - uint8_t *dest = (uint8_t *) MV_MixDestination; - int32_t sample0; - - while (length--) { - sample0 = source[(position >> 16) << 1]; - position += rate; - - sample0 = MV_LeftVolume[sample0 + 128] + *dest; - sample0 = MV_HarshClipTable[sample0 + 128]; - - *dest = sample0 & 255; - - dest += MV_SampleSize; - } - - MV_MixPosition = position; - MV_MixDestination = (char *) dest; -} - -// 16-bit mono source, 8-bit stereo output -void MV_Mix8BitStereo16( uint32_t position, uint32_t rate, - char *start, uint32_t length ) -{ - int8_t *source = (int8_t *) start + 1; - uint8_t *dest = (uint8_t *) MV_MixDestination; - int32_t sample0, sample1; - - while (length--) { - sample0 = source[(position >> 16) << 1]; - sample1 = sample0; - position += rate; - - sample0 = MV_LeftVolume[sample0 + 128] + *dest; - sample1 = MV_RightVolume[sample1 + 128] + *(dest + MV_RightChannelOffset); - sample0 = MV_HarshClipTable[sample0 + 128]; - sample1 = MV_HarshClipTable[sample1 + 128]; - - *dest = sample0 & 255; - *(dest + MV_RightChannelOffset) = sample1 & 255; - - dest += MV_SampleSize; - } - - MV_MixPosition = position; - MV_MixDestination = (char *) dest; -} - -// 16-bit mono source, 16-bit stereo output -void MV_Mix16BitStereo16( uint32_t position, uint32_t rate, - char *start, uint32_t length ) -{ - uint16_t *source = (uint16_t *) start; - int16_t *dest = (int16_t *) MV_MixDestination; - int32_t sample0l, sample0h, sample0; - int32_t sample1l, sample1h, sample1; - - while (length--) { - sample0 = source[position >> 16]; -#ifdef BIGENDIAN - sample0l = sample0 >> 8; - sample0h = (sample0 & 255) ^ 128; -#else - sample0l = sample0 & 255; - sample0h = (sample0 >> 8) ^ 128; -#endif - sample1l = sample0l; - sample1h = sample0h; - position += rate; - - sample0l = MV_LeftVolume[sample0l] >> 8; - sample0h = MV_LeftVolume[sample0h]; - sample1l = MV_RightVolume[sample1l] >> 8; - sample1h = MV_RightVolume[sample1h]; - sample0 = sample0l + sample0h + 128 + *dest; - sample1 = sample1l + sample1h + 128 + *(dest + MV_RightChannelOffset/2); - if (sample0 < -32768) sample0 = -32768; - else if (sample0 > 32767) sample0 = 32767; - if (sample1 < -32768) sample1 = -32768; - else if (sample1 > 32767) sample1 = 32767; - - *dest = (int16_t) sample0; - *(dest + MV_RightChannelOffset/2) = (int16_t) sample1; - - dest += MV_SampleSize / 2; - } - - MV_MixPosition = position; - MV_MixDestination = (char *) dest; -} - -void MV_16BitReverb( char *src, char *dest, VOLUME16 *volume, int32_t count ) -{ - uint16_t * input = (uint16_t *) src; - int16_t * output = (int16_t *) dest; - int16_t sample0l, sample0h, sample0; - - do { - sample0 = *input; -#ifdef BIGENDIAN - sample0l = sample0 >> 8; - sample0h = (sample0 & 255) ^ 128; -#else - sample0l = sample0 & 255; - sample0h = (sample0 >> 8) ^ 128; -#endif - - sample0l = ((int16_t *) volume)[sample0l] >> 8; - sample0h = ((int16_t *) volume)[sample0h]; - *output = (int16_t) (sample0l + sample0h + 128); - - input++; - output++; - } while (--count > 0); -} - -void MV_8BitReverb( int8_t *src, int8_t *dest, VOLUME16 *volume, int32_t count ) -{ - uint8_t * input = (uint8_t *) src; - uint8_t * output = (uint8_t *) dest; - - do { - *output = ((int16_t *) volume)[*input] + 128; - - input++; - output++; - } while (--count > 0); -} - -void MV_16BitReverbFast( char *src, char *dest, int32_t count, int32_t shift ) -{ - int16_t * input = (int16_t *) src; - int16_t * output = (int16_t *) dest; - - do { - *output = *input >> shift; - - input++; - output++; - } while (--count > 0); -} - -void MV_8BitReverbFast( int8_t *src, int8_t *dest, int32_t count, int32_t shift ) -{ - uint8_t sample0, c; - - c = 128 - (128 >> shift); - - do { - sample0 = *((uint8_t *) src) >> shift; - *dest = sample0 + c + ((sample0 ^ 128) >> 7); - - src++; - dest++; - } while (--count > 0); -} - diff --git a/polymer-perf/eduke32/source/jaudiolib/src/mixst.c b/polymer-perf/eduke32/source/jaudiolib/src/mixst.c deleted file mode 100644 index e9ea69893..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/mixst.c +++ /dev/null @@ -1,297 +0,0 @@ -/* - Copyright (C) 2009 Jonathon Fowler - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - */ - -#include "_multivc.h" - -extern char *MV_HarshClipTable; -extern char *MV_MixDestination; // pointer to the next output sample -extern uint32_t MV_MixPosition; // return value of where the source pointer got to -extern int16_t *MV_LeftVolume; -extern int16_t *MV_RightVolume; -extern int32_t MV_SampleSize; -extern int32_t MV_RightChannelOffset; - -#ifdef __POWERPC__ -# define BIGENDIAN -#endif - -/* - JBF: - - position = offset of starting sample in start - rate = resampling increment - start = sound data - length = count of samples to mix - */ - -// 8-bit stereo source, 8-bit mono output -void MV_Mix8BitMono8Stereo( uint32_t position, uint32_t rate, - char *start, uint32_t length ) -{ - uint8_t *source = (uint8_t *) start; - uint8_t *dest = (uint8_t *) MV_MixDestination; - int32_t sample0, sample1; - - while (length--) { - sample0 = source[(position >> 16) << 1]; - sample1 = source[((position >> 16) << 1) + 1]; - position += rate; - - sample0 = (MV_LeftVolume[sample0] + MV_LeftVolume[sample1]) / 2 + *dest; - sample0 = MV_HarshClipTable[sample0 + 128]; - - *dest = sample0 & 255; - - dest += MV_SampleSize; - } - - MV_MixPosition = position; - MV_MixDestination = (char *) dest; -} - -// 8-bit stereo source, 8-bit stereo output -void MV_Mix8BitStereo8Stereo( uint32_t position, uint32_t rate, - char *start, uint32_t length ) -{ - uint8_t *source = (uint8_t *) start; - uint8_t *dest = (uint8_t *) MV_MixDestination; - int32_t sample0, sample1; - - while (length--) { - sample0 = source[(position >> 16) << 1]; - sample1 = source[((position >> 16) << 1) + 1]; - position += rate; - - sample0 = MV_LeftVolume[sample0] + *dest; - sample1 = MV_RightVolume[sample1] + *(dest + MV_RightChannelOffset); - sample0 = MV_HarshClipTable[sample0 + 128]; - sample1 = MV_HarshClipTable[sample1 + 128]; - - *dest = sample0 & 255; - *(dest + MV_RightChannelOffset) = sample1 & 255; - - dest += MV_SampleSize; - } - - MV_MixPosition = position; - MV_MixDestination = (char *) dest; -} - -// 8-bit stereo source, 16-bit mono output -void MV_Mix16BitMono8Stereo( uint32_t position, uint32_t rate, - char *start, uint32_t length ) -{ - uint8_t *source = (uint8_t *) start; - int16_t *dest = (int16_t *) MV_MixDestination; - int32_t sample0, sample1; - - while (length--) { - sample0 = source[(position >> 16) << 1]; - sample1 = source[((position >> 16) << 1) + 1]; - position += rate; - - sample0 = (MV_LeftVolume[sample0] + MV_LeftVolume[sample1]) / 2 + *dest; - if (sample0 < -32768) sample0 = -32768; - else if (sample0 > 32767) sample0 = 32767; - - *dest = (int16_t) sample0; - - dest += MV_SampleSize / 2; - } - - MV_MixPosition = position; - MV_MixDestination = (char *) dest; -} - -// 8-bit stereo source, 16-bit stereo output -void MV_Mix16BitStereo8Stereo( uint32_t position, uint32_t rate, - char *start, uint32_t length ) -{ - uint8_t *source = (uint8_t *) start; - int16_t *dest = (int16_t *) MV_MixDestination; - int32_t sample0, sample1; - - while (length--) { - sample0 = source[(position >> 16) << 1]; - sample1 = source[((position >> 16) << 1) + 1]; - position += rate; - - sample0 = MV_LeftVolume[sample0] + *dest; - sample1 = MV_RightVolume[sample1] + *(dest + MV_RightChannelOffset / 2); - if (sample0 < -32768) sample0 = -32768; - else if (sample0 > 32767) sample0 = 32767; - if (sample1 < -32768) sample1 = -32768; - else if (sample1 > 32767) sample1 = 32767; - - *dest = (int16_t) sample0; - *(dest + MV_RightChannelOffset/2) = (int16_t) sample1; - - dest += MV_SampleSize / 2; - } - - MV_MixPosition = position; - MV_MixDestination = (char *) dest; -} - -// 16-bit stereo source, 16-bit mono output -void MV_Mix16BitMono16Stereo( uint32_t position, uint32_t rate, - char *start, uint32_t length ) -{ - uint16_t *source = (uint16_t *) start; - int16_t *dest = (int16_t *) MV_MixDestination; - int32_t sample0l, sample0h, sample0; - int32_t sample1l, sample1h, sample1; - - while (length--) { - sample0 = source[(position >> 16) << 1]; - sample1 = source[((position >> 16) << 1) + 1]; -#ifdef BIGENDIAN - sample0l = sample0 >> 8; - sample0h = (sample0 & 255) ^ 128; - sample1l = sample1 >> 8; - sample1h = (sample1 & 255) ^ 128; -#else - sample0l = sample0 & 255; - sample0h = (sample0 >> 8) ^ 128; - sample1l = sample1 & 255; - sample1h = (sample1 >> 8) ^ 128; -#endif - position += rate; - - sample0l = MV_LeftVolume[sample0l] >> 8; - sample0h = MV_LeftVolume[sample0h]; - sample0 = sample0l + sample0h + 128; - sample1l = MV_LeftVolume[sample1l] >> 8; - sample1h = MV_LeftVolume[sample1h]; - sample1 = sample1l + sample1h + 128; - - sample0 = (sample0 + sample1) / 2 + *dest; - if (sample0 < -32768) sample0 = -32768; - else if (sample0 > 32767) sample0 = 32767; - - *dest = (int16_t) sample0; - - dest += MV_SampleSize / 2; - } - - MV_MixPosition = position; - MV_MixDestination = (char *) dest; -} - -// 16-bit stereo source, 8-bit mono output -void MV_Mix8BitMono16Stereo( uint32_t position, uint32_t rate, - char *start, uint32_t length ) -{ - int8_t *source = (int8_t *) start + 1; - uint8_t *dest = (uint8_t *) MV_MixDestination; - int32_t sample0, sample1; - - while (length--) { - sample0 = source[(position >> 16) << 2]; - sample1 = source[((position >> 16) << 2) + 2]; - position += rate; - - sample0 = MV_LeftVolume[sample0 + 128]; - sample1 = MV_LeftVolume[sample1 + 128]; - sample0 = (sample0 + sample1) / 2 + *dest; - sample0 = MV_HarshClipTable[sample0 + 128]; - - *dest = sample0 & 255; - - dest += MV_SampleSize; - } - - MV_MixPosition = position; - MV_MixDestination = (char *) dest; -} - -// 16-bit stereo source, 8-bit stereo output -void MV_Mix8BitStereo16Stereo( uint32_t position, uint32_t rate, - char *start, uint32_t length ) -{ - int8_t *source = (int8_t *) start + 1; - uint8_t *dest = (uint8_t *) MV_MixDestination; - int32_t sample0, sample1; - - while (length--) { - sample0 = source[(position >> 16) << 2]; - sample1 = source[((position >> 16) << 2) + 2]; - position += rate; - - sample0 = MV_LeftVolume[sample0 + 128] + *dest; - sample1 = MV_RightVolume[sample1 + 128] + *(dest + MV_RightChannelOffset); - sample0 = MV_HarshClipTable[sample0 + 128]; - sample1 = MV_HarshClipTable[sample1 + 128]; - - *dest = sample0 & 255; - *(dest + MV_RightChannelOffset) = sample1 & 255; - - dest += MV_SampleSize; - } - - MV_MixPosition = position; - MV_MixDestination = (char *) dest; -} - -// 16-bit stereo source, 16-bit stereo output -void MV_Mix16BitStereo16Stereo( uint32_t position, uint32_t rate, - char *start, uint32_t length ) -{ - uint16_t *source = (uint16_t *) start; - int16_t *dest = (int16_t *) MV_MixDestination; - int32_t sample0l, sample0h, sample0; - int32_t sample1l, sample1h, sample1; - - while (length--) { - sample0 = source[(position >> 16) << 1]; - sample1 = source[((position >> 16) << 1) + 1]; -#ifdef BIGENDIAN - sample0l = sample0 >> 8; - sample0h = (sample0 & 255) ^ 128; - sample1l = sample1 >> 8; - sample1h = (sample1 & 255) ^ 128; -#else - sample0l = sample0 & 255; - sample0h = (sample0 >> 8) ^ 128; - sample1l = sample1 & 255; - sample1h = (sample1 >> 8) ^ 128; -#endif - position += rate; - - sample0l = MV_LeftVolume[sample0l] >> 8; - sample0h = MV_LeftVolume[sample0h]; - sample1l = MV_RightVolume[sample1l] >> 8; - sample1h = MV_RightVolume[sample1h]; - sample0 = sample0l + sample0h + 128 + *dest; - sample1 = sample1l + sample1h + 128 + *(dest + MV_RightChannelOffset/2); - if (sample0 < -32768) sample0 = -32768; - else if (sample0 > 32767) sample0 = 32767; - if (sample1 < -32768) sample1 = -32768; - else if (sample1 > 32767) sample1 = 32767; - - *dest = (int16_t) sample0; - *(dest + MV_RightChannelOffset/2) = (int16_t) sample1; - - dest += MV_SampleSize / 2; - } - - MV_MixPosition = position; - MV_MixDestination = (char *) dest; -} diff --git a/polymer-perf/eduke32/source/jaudiolib/src/multivoc.c b/polymer-perf/eduke32/source/jaudiolib/src/multivoc.c deleted file mode 100644 index bf1ec3e77..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/multivoc.c +++ /dev/null @@ -1,2765 +0,0 @@ -/* -Copyright (C) 1994-1995 Apogee Software, Ltd. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -/********************************************************************** - module: MULTIVOC.C - - author: James R. Dose - date: December 20, 1993 - - Routines to provide multichannel digitized sound playback for - Sound Blaster compatible sound cards. - - (c) Copyright 1993 James R. Dose. All Rights Reserved. -**********************************************************************/ - -#include -#include -#include -#include -#include -#include "linklist.h" -#include "sndcards.h" -#include "drivers.h" -#include "pitch.h" -#include "multivoc.h" -#include "_multivc.h" - -#ifdef _MSC_VER -#define inline __inline -#endif - -#ifdef __POWERPC__ -#define LITTLE16 SWAP16 -#define LITTLE32 SWAP32 -#else -#define LITTLE16 -#define LITTLE32 -#endif - -static void MV_Mix( VoiceNode *voice, int32_t buffer ); -static void MV_StopVoice( VoiceNode *voice ); -static void MV_ServiceVoc( void ); - -static playbackstatus MV_GetNextVOCBlock( VoiceNode *voice ); -static playbackstatus MV_GetNextDemandFeedBlock( VoiceNode *voice ); -static playbackstatus MV_GetNextRawBlock( VoiceNode *voice ); -static playbackstatus MV_GetNextWAVBlock( VoiceNode *voice ); - -static VoiceNode *MV_GetVoice( int32_t handle ); - -static int16_t *MV_GetVolumeTable( int32_t vol ); - -static void MV_SetVoicePitch( VoiceNode *voice, uint32_t rate, int32_t pitchoffset ); -static void MV_CalcVolume( int32_t MaxLevel ); -static void MV_CalcPanTable( void ); - -static inline uint16_t SWAP16(uint16_t s) -{ - return (s >> 8) | (s << 8); -} - -static inline uint32_t SWAP32(uint32_t s) -{ - return (s >> 24) | (s << 24) | ((s&0xff00) << 8) | ((s & 0xff0000) >> 8); -} - -#ifndef min -#define min(x,y) ((x) < (y) ? (x) : (y)) -#endif -#ifndef max -#define max(x,y) ((x) > (y) ? (x) : (y)) -#endif - -#define RoundFixed( fixedval, bits ) \ - ( \ - ( \ - (fixedval) + ( 1 << ( (bits) - 1 ) )\ - ) >> (bits) \ - ) - -#define IS_QUIET( ptr ) ( ( void * )( ptr ) == ( void * )&MV_VolumeTable[ 0 ] ) - -static int32_t MV_ReverbLevel; -static int32_t MV_ReverbDelay; -static VOLUME16 *MV_ReverbTable = NULL; - -//static int16_t MV_VolumeTable[ MV_MaxVolume + 1 ][ 256 ]; -static int16_t MV_VolumeTable[ 255 + 1 ][ 256 ]; - -//static Pan MV_PanTable[ MV_NumPanPositions ][ MV_MaxVolume + 1 ]; -Pan MV_PanTable[ MV_NumPanPositions ][ 255 + 1 ]; - -int32_t MV_Installed = FALSE; -static int32_t MV_TotalVolume = MV_MaxTotalVolume; -static int32_t MV_MaxVoices = 1; - -static int32_t MV_BufferSize = MixBufferSize; -static int32_t MV_BufferLength; - -static int32_t MV_NumberOfBuffers = NumberOfBuffers; - -static int32_t MV_MixMode = MONO_8BIT; -static int32_t MV_Channels = 1; -static int32_t MV_Bits = 8; - -static int32_t MV_Silence = SILENCE_8BIT; -static int32_t MV_SwapLeftRight = FALSE; - -static int32_t MV_RequestedMixRate; -int32_t MV_MixRate; - -static int32_t MV_BuffShift; - -static int32_t MV_TotalMemory; - -static int32_t MV_BufferEmpty[ NumberOfBuffers ]; -char *MV_MixBuffer[ NumberOfBuffers + 1 ]; - -static VoiceNode *MV_Voices = NULL; - -static volatile VoiceNode VoiceList; -static volatile VoiceNode VoicePool; - -static int32_t MV_MixPage = 0; -static int32_t MV_VoiceHandle = MV_MinVoiceHandle; - -void (*MV_Printf)(const char *fmt, ...) = NULL; -static void (*MV_CallBackFunc)(uint32_t) = NULL; -static void (*MV_MixFunction)(VoiceNode *voice, int32_t buffer); - -int32_t MV_MaxVolume = 255; - -char *MV_HarshClipTable; -char *MV_MixDestination; -int16_t *MV_LeftVolume; -int16_t *MV_RightVolume; -int32_t MV_SampleSize = 1; -int32_t MV_RightChannelOffset; - -uint32_t MV_MixPosition; - -int32_t MV_ErrorCode = MV_Ok; - -static int32_t lockdepth = 0; - -static inline void DisableInterrupts(void) -{ - if (lockdepth++ > 0) - return; - SoundDriver_Lock(); - return; -} - -static inline void RestoreInterrupts(void) -{ - if (--lockdepth > 0) - return; - SoundDriver_Unlock(); -} - - -/*--------------------------------------------------------------------- - Function: MV_ErrorString - - Returns a pointer to the error message associated with an error - number. A -1 returns a pointer the current error. ----------------------------------------------------------------------*/ - -const char *MV_ErrorString(int32_t ErrorNumber) -{ - switch (ErrorNumber) - { - case MV_Warning : - case MV_Error : - return MV_ErrorString(MV_ErrorCode); - - case MV_Ok : - return "Multivoc ok."; - - case MV_UnsupportedCard : - return "Selected sound card is not supported by Multivoc."; - - case MV_NotInstalled : - return "Multivoc not installed."; - - case MV_DriverError : - return SoundDriver_ErrorString(SoundDriver_GetError()); - - case MV_NoVoices : - return "No free voices available to Multivoc."; - - case MV_NoMem : - return "Out of memory in Multivoc."; - - case MV_VoiceNotFound : - return "No voice with matching handle found."; - - case MV_InvalidVOCFile : - return "Invalid VOC file passed in to Multivoc."; - - case MV_InvalidWAVFile : - return "Invalid WAV file passed in to Multivoc."; - - case MV_InvalidVorbisFile : - return "Invalid OggVorbis file passed in to Multivoc."; - - case MV_InvalidMixMode : - return "Invalid mix mode request in Multivoc."; - - default : - return "Unknown Multivoc error code."; - } -} - - -/*--------------------------------------------------------------------- - Function: MV_Mix - - Mixes the sound into the buffer. ----------------------------------------------------------------------*/ - -static void MV_Mix(VoiceNode *voice,int32_t buffer) -{ - char *start; - int32_t length; - int32_t voclength; - uint32_t position; - uint32_t rate; - uint32_t FixedPointBufferSize; - - /* cheap fix for a crash under 64-bit linux --\ - v */ - if (voice->length == 0 && (!voice->GetSound || voice->GetSound(voice) != KeepPlaying)) - return; - - length = MixBufferSize; - FixedPointBufferSize = voice->FixedPointBufferSize; - - MV_MixDestination = MV_MixBuffer[ buffer ]; - MV_LeftVolume = voice->LeftVolume; - MV_RightVolume = voice->RightVolume; - - if ((MV_Channels == 2) && (IS_QUIET(MV_LeftVolume))) - { - MV_LeftVolume = MV_RightVolume; - MV_MixDestination += MV_RightChannelOffset; - } - - // Add this voice to the mix - while (length > 0) - { - start = voice->sound; - rate = voice->RateScale; - position = voice->position; - - // Check if the last sample in this buffer would be - // beyond the length of the sample block - if ((position + FixedPointBufferSize) >= voice->length) - { - if (position < voice->length) - { - voclength = (voice->length - position + rate - voice->channels) / rate; - } - else - { - voice->GetSound(voice); - return; - } - } - else - voclength = length; - - if (voice->mix) - voice->mix(position, rate, start, voclength); - - voice->position = MV_MixPosition; - - length -= voclength; - - if (voice->position >= voice->length) - { - // Get the next block of sound - if (voice->GetSound(voice) != KeepPlaying) - return; - - if (length > (voice->channels - 1)) - { - // Get the position of the last sample in the buffer - FixedPointBufferSize = voice->RateScale * (length - voice->channels); - } - } - } -} - - -/*--------------------------------------------------------------------- - Function: MV_PlayVoice - - Adds a voice to the play list. ----------------------------------------------------------------------*/ - -void MV_PlayVoice(VoiceNode *voice) -{ - DisableInterrupts(); - LL_SortedInsertion(&VoiceList, voice, prev, next, VoiceNode, priority); - RestoreInterrupts(); -} - - -/*--------------------------------------------------------------------- - Function: MV_StopVoice - - Removes the voice from the play list and adds it to the free list. ----------------------------------------------------------------------*/ - -void MV_StopVoice(VoiceNode *voice) -{ - DisableInterrupts(); - - // move the voice from the play list to the free list - LL_Remove(voice, next, prev); - LL_Add((VoiceNode*) &VoicePool, voice, next, prev); - - RestoreInterrupts(); - - if (voice->wavetype == Vorbis) - MV_ReleaseVorbisVoice(voice); - - voice->handle = 0; -} - - -/*--------------------------------------------------------------------- - Function: MV_ServiceVoc - - Starts playback of the waiting buffer and mixes the next one. - - JBF: no synchronisation happens inside MV_ServiceVoc nor the - supporting functions it calls. This would cause a deadlock - between the mixer thread in the driver vs the nested - locking in the user-space functions of MultiVoc. The call - to MV_ServiceVoc is synchronised in the driver. - - Known functions called by MV_ServiceVoc and its helpers: - MV_Mix (and its MV_Mix*bit* workers) - MV_GetNextVOCBlock - MV_GetNextWAVBlock - MV_SetVoiceMixMode ----------------------------------------------------------------------*/ -void MV_ServiceVoc(void) -{ - VoiceNode *voice; - VoiceNode *next; - //int32_t flags; - int32_t iter; - - // Toggle which buffer we'll mix next - if (++MV_MixPage >= MV_NumberOfBuffers) - MV_MixPage -= MV_NumberOfBuffers; - - if (MV_ReverbLevel == 0) - { - // Initialize buffer - //Commented out so that the buffer is always cleared. - //This is so the guys at Echo Speech can mix into the - //buffer even when no sounds are playing. - if (!MV_BufferEmpty[MV_MixPage]) - { - ClearBuffer_DW(MV_MixBuffer[ MV_MixPage ], MV_Silence, MV_BufferSize >> 2); - MV_BufferEmpty[ MV_MixPage ] = TRUE; - } - } - else - { - char *end; - char *source; - char *dest; - int32_t count; - int32_t length; - - end = MV_MixBuffer[ 0 ] + MV_BufferLength;; - dest = MV_MixBuffer[ MV_MixPage ]; - source = MV_MixBuffer[ MV_MixPage ] - MV_ReverbDelay; - - if (source < MV_MixBuffer[ 0 ]) - source += MV_BufferLength; - - length = MV_BufferSize; - while (length > 0) - { - count = length; - if (source + count > end) - count = end - source; - - if (MV_Bits == 16) - { - if (MV_ReverbTable != NULL) - MV_16BitReverb(source, dest, MV_ReverbTable, count / 2); - else - MV_16BitReverbFast(source, dest, count / 2, MV_ReverbLevel); - } - else - { - if (MV_ReverbTable != NULL) - MV_8BitReverb((int8_t *) source, (int8_t *) dest, MV_ReverbTable, count); - else - MV_8BitReverbFast((int8_t *) source, (int8_t *) dest, count, MV_ReverbLevel); - } - - // if we go through the loop again, it means that we've wrapped around the buffer - source = MV_MixBuffer[ 0 ]; - dest += count; - length -= count; - } - } - - // Play any waiting voices - //DisableInterrupts(); - - if (!VoiceList.next || (voice = VoiceList.next) == &VoiceList) - return; - - iter = 0; - - do - { - next = voice->next; - iter++; - - if (iter > MV_MaxVoices && MV_Printf) - MV_Printf("more iterations than voices! iter: %d\n",iter); - - if (voice->Paused) - continue; - - MV_BufferEmpty[ MV_MixPage ] = FALSE; - - MV_MixFunction(voice, MV_MixPage); - - // Is this voice done? - if (!voice->Playing) - { - //JBF: prevent a deadlock caused by MV_StopVoice grabbing the mutex again - //MV_StopVoice( voice ); - LL_Remove(voice, next, prev); - LL_Add((VoiceNode*) &VoicePool, voice, next, prev); - - if (voice->wavetype == Vorbis) - MV_ReleaseVorbisVoice(voice); - - voice->handle = 0; - - if (MV_CallBackFunc) - MV_CallBackFunc(voice->callbackval); - } - } - while ((voice = next) != &VoiceList); - - //RestoreInterrupts(); -} - - -/*--------------------------------------------------------------------- - Function: MV_GetNextVOCBlock - - Interpret the information of a VOC format sound file. ----------------------------------------------------------------------*/ - -playbackstatus MV_GetNextVOCBlock(VoiceNode *voice) -{ - uint8_t *ptr; - int32_t blocktype; - int32_t lastblocktype; - uint32_t blocklength; - uint32_t samplespeed; - uint32_t tc = 0; - int32_t packtype; - int32_t voicemode; - int32_t done; - unsigned BitsPerSample; - unsigned Channels; - unsigned Format; - - if (voice->BlockLength > 0) - { - voice->position -= voice->length; - voice->sound += (voice->length >> 16) * (voice->channels * voice->bits / 8); - voice->length = min(voice->BlockLength, 0x8000); - voice->BlockLength -= voice->length; - voice->length <<= 16; - return(KeepPlaying); - } - - ptr = (uint8_t *)voice->NextBlock; - - voice->Playing = TRUE; - voice->Paused = FALSE; - - voicemode = 0; - lastblocktype = 0; - packtype = 0; - - done = FALSE; - - do - { - // Stop playing if we get a NULL pointer - if (ptr == NULL) - { - voice->Playing = FALSE; - done = TRUE; - break; - } - - blocktype = (int32_t)*ptr; - blocklength = LITTLE32(*(uint32_t *)(ptr + 1)) & 0x00ffffff; - ptr += 4; - - switch (blocktype) - { - case 0 : - // End of data - if ((voice->LoopStart == NULL) || - ((intptr_t) voice->LoopStart >= ((intptr_t) ptr - 4))) - { - voice->Playing = FALSE; - done = TRUE; - } - else - { - voice->NextBlock = voice->LoopStart; - voice->BlockLength = 0; - voice->position = 0; - return MV_GetNextVOCBlock(voice); - } - break; - - case 1 : - // Sound data block - voice->bits = 8; - voice->channels = voicemode + 1; - if (lastblocktype != 8) - { - tc = (uint32_t)*ptr << 8; - packtype = *(ptr + 1); - } - - ptr += 2; - blocklength -= 2; - - samplespeed = 256000000L / (voice->channels * (65536 - tc)); - - // Skip packed or stereo data - if ((packtype != 0) || (voicemode != 0 && voicemode != 1)) - { - ptr += blocklength; - } - else - { - done = TRUE; - } - voicemode = 0; - break; - - case 2 : - // Sound continuation block - samplespeed = voice->SamplingRate; - done = TRUE; - break; - - case 3 : - // Silence - // Not implimented. - ptr += blocklength; - break; - - case 4 : - // Marker - // Not implimented. - ptr += blocklength; - break; - - case 5 : - // ASCII string - // Not implimented. - ptr += blocklength; - break; - - case 6 : - // Repeat begin - if (voice->LoopEnd == NULL) - { - voice->LoopCount = LITTLE16(*(uint16_t *)ptr); - voice->LoopStart = (char *)((intptr_t) ptr + blocklength); - } - ptr += blocklength; - break; - - case 7 : - // Repeat end - ptr += blocklength; - if (lastblocktype == 6) - { - voice->LoopCount = 0; - } - else - { - if ((voice->LoopCount > 0) && (voice->LoopStart != NULL)) - { - ptr = (uint8_t *) voice->LoopStart; - if (voice->LoopCount < 0xffff) - { - voice->LoopCount--; - if (voice->LoopCount == 0) - { - voice->LoopStart = NULL; - } - } - } - } - break; - - case 8 : - // Extended block - voice->bits = 8; - voice->channels = 1; - tc = LITTLE16(*(uint16_t *)ptr); - packtype = *(ptr + 2); - voicemode = *(ptr + 3); - ptr += blocklength; - break; - - case 9 : - // New sound data block - samplespeed = LITTLE32(*(uint32_t *)ptr); - BitsPerSample = (unsigned)*(ptr + 4); - Channels = (unsigned)*(ptr + 5); - Format = (unsigned)LITTLE16(*(uint16_t *)(ptr + 6)); - - if ((BitsPerSample == 8) && (Channels == 1 || Channels == 2) && - (Format == VOC_8BIT)) - { - ptr += 12; - blocklength -= 12; - voice->bits = 8; - voice->channels = Channels; - done = TRUE; - } - else if ((BitsPerSample == 16) && (Channels == 1 || Channels == 2) && - (Format == VOC_16BIT)) - { - ptr += 12; - blocklength -= 12; - voice->bits = 16; - voice->channels = Channels; - done = TRUE; - } - else - { - ptr += blocklength; - } - break; - - default : - // Unknown data. Probably not a VOC file. - voice->Playing = FALSE; - done = TRUE; - break; - } - - lastblocktype = blocktype; - } - while (!done); - - if (voice->Playing) - { - voice->NextBlock = (char *)ptr + blocklength; - voice->sound = (char *)ptr; - - voice->SamplingRate = samplespeed; - voice->RateScale = (voice->SamplingRate * voice->PitchScale) / MV_MixRate; - - // Multiply by MixBufferSize - 1 - voice->FixedPointBufferSize = (voice->RateScale * MixBufferSize) - - voice->RateScale; - - if (voice->LoopEnd != NULL) - { - if (blocklength > (uint32_t)voice->LoopEnd) - blocklength = (uint32_t)voice->LoopEnd; - else - voice->LoopEnd = (char *)blocklength; - - voice->LoopStart = voice->sound + (uint32_t)voice->LoopStart; - voice->LoopEnd = voice->sound + (uint32_t)voice->LoopEnd; - voice->LoopSize = voice->LoopEnd - voice->LoopStart; - } - - if (voice->bits == 16) - blocklength /= 2; - - if (voice->channels == 2) - blocklength /= 2; - - voice->position = 0; - voice->length = min(blocklength, 0x8000); - voice->BlockLength = blocklength - voice->length; - voice->length <<= 16; - - MV_SetVoiceMixMode(voice); - - return(KeepPlaying); - } - - return(NoMoreData); -} - - -/*--------------------------------------------------------------------- - Function: MV_GetNextDemandFeedBlock - - Controls playback of demand fed data. ----------------------------------------------------------------------*/ - -playbackstatus MV_GetNextDemandFeedBlock(VoiceNode *voice) -{ - if (voice->BlockLength > 0) - { - voice->position -= voice->length; - voice->sound += voice->length >> 16; - voice->length = min(voice->BlockLength, 0x8000); - voice->BlockLength -= voice->length; - voice->length <<= 16; - - return(KeepPlaying); - } - - if (voice->DemandFeed == NULL) - return(NoMoreData); - - voice->position = 0; - (voice->DemandFeed)(&voice->sound, &voice->BlockLength); - voice->length = min(voice->BlockLength, 0x8000); - voice->BlockLength -= voice->length; - voice->length <<= 16; - - return((voice->length > 0) && (voice->sound != NULL) ? KeepPlaying : NoMoreData); -} - - -/*--------------------------------------------------------------------- - Function: MV_GetNextRawBlock - - Controls playback of demand fed data. ----------------------------------------------------------------------*/ - -playbackstatus MV_GetNextRawBlock(VoiceNode *voice) -{ - if (voice->BlockLength <= 0) - { - if (voice->LoopStart == NULL) - { - voice->Playing = FALSE; - return(NoMoreData); - } - - voice->BlockLength = voice->LoopSize; - voice->NextBlock = voice->LoopStart; - voice->length = 0; - voice->position = 0; - } - - voice->sound = voice->NextBlock; - voice->position -= voice->length; - voice->length = min(voice->BlockLength, 0x8000); - voice->NextBlock += voice->length * (voice->channels * voice->bits / 8); - voice->BlockLength -= voice->length; - voice->length <<= 16; - - return(KeepPlaying); -} - - -/*--------------------------------------------------------------------- - Function: MV_GetNextWAVBlock - - Controls playback of demand fed data. ----------------------------------------------------------------------*/ - -playbackstatus MV_GetNextWAVBlock(VoiceNode *voice) -{ - if (voice->BlockLength <= 0) - { - if (voice->LoopStart == NULL) - { - voice->Playing = FALSE; - return(NoMoreData); - } - - voice->BlockLength = voice->LoopSize; - voice->NextBlock = voice->LoopStart; - voice->length = 0; - voice->position = 0; - } - - voice->sound = voice->NextBlock; - voice->position -= voice->length; - voice->length = min(voice->BlockLength, 0x8000); - voice->NextBlock += voice->length * (voice->channels * voice->bits / 8); - voice->BlockLength -= voice->length; - voice->length <<= 16; - - return(KeepPlaying); -} - - -/*--------------------------------------------------------------------- - Function: MV_GetVoice - - Locates the voice with the specified handle. ----------------------------------------------------------------------*/ - -VoiceNode *MV_GetVoice(int32_t handle) -{ - VoiceNode *voice; - - if (handle < MV_MinVoiceHandle || handle > MV_MaxVoices) - { - if (MV_Printf) - MV_Printf("MV_GetVoice(): bad handle (%d)!\n", handle); - return NULL; - } - - DisableInterrupts(); - - for (voice = VoiceList.next; voice != &VoiceList; voice = voice->next) - { - if (handle == voice->handle) - { - RestoreInterrupts(); - return voice; - } - } - - RestoreInterrupts(); - MV_SetErrorCode(MV_VoiceNotFound); - return NULL; -} - - -/*--------------------------------------------------------------------- - Function: MV_VoicePlaying - - Checks if the voice associated with the specified handle is - playing. ----------------------------------------------------------------------*/ - -int32_t MV_VoicePlaying(int32_t handle) -{ - if (!MV_Installed) - { - MV_SetErrorCode(MV_NotInstalled); - return(FALSE); - } - - return MV_GetVoice(handle) ? TRUE : FALSE; -} - - -/*--------------------------------------------------------------------- - Function: MV_KillAllVoices - - Stops output of all currently active voices. ----------------------------------------------------------------------*/ - -int32_t MV_KillAllVoices(void) -{ - VoiceNode * voice; - - if (!MV_Installed) - { - MV_SetErrorCode(MV_NotInstalled); - return(MV_Error); - } - - DisableInterrupts(); - - if (&VoiceList == VoiceList.next) - { - RestoreInterrupts(); - return(MV_Ok); - } - - voice = VoiceList.prev; - - // Remove all the voices from the list - while (voice != &VoiceList) - { - if (voice->priority == MV_MUSIC_PRIORITY) - { - voice = voice->prev; - continue; - } - - MV_Kill(voice->handle); - voice = VoiceList.prev; - } - - RestoreInterrupts(); - - return(MV_Ok); -} - - -/*--------------------------------------------------------------------- - Function: MV_Kill - - Stops output of the voice associated with the specified handle. ----------------------------------------------------------------------*/ - -int32_t MV_Kill(int32_t handle) -{ - VoiceNode *voice; - uint32_t callbackval; - - if (!MV_Installed) - { - MV_SetErrorCode(MV_NotInstalled); - return(MV_Error); - } - - DisableInterrupts(); - - if ((voice = MV_GetVoice(handle)) == NULL) - { - RestoreInterrupts(); - MV_SetErrorCode(MV_VoiceNotFound); - return(MV_Error); - } - - callbackval = voice->callbackval; - - MV_StopVoice(voice); - - RestoreInterrupts(); - - if (MV_CallBackFunc) - MV_CallBackFunc(callbackval); - - return(MV_Ok); -} - - -/*--------------------------------------------------------------------- - Function: MV_VoicesPlaying - - Determines the number of currently active voices. ----------------------------------------------------------------------*/ - -int32_t MV_VoicesPlaying(void) -{ - VoiceNode *voice; - int32_t NumVoices = 0; - - if (!MV_Installed) - { - MV_SetErrorCode(MV_NotInstalled); - return(0); - } - - DisableInterrupts(); - - for (voice = VoiceList.next; voice != &VoiceList; voice = voice->next) - NumVoices++; - - RestoreInterrupts(); - - return(NumVoices); -} - - -/*--------------------------------------------------------------------- - Function: MV_AllocVoice - - Retrieve an inactive or lower priority voice for output. ----------------------------------------------------------------------*/ - -VoiceNode *MV_AllocVoice(int32_t priority) -{ - VoiceNode *voice; - VoiceNode *node; - - DisableInterrupts(); - - // Check if we have any free voices - if (LL_Empty(&VoicePool, next, prev)) - { - // check if we have a higher priority than a voice that is playing. - for (voice = node = VoiceList.next; node != &VoiceList; node = node->next) - { - if (node->priority < voice->priority) - voice = node; - } - - if (priority >= voice->priority && voice != &VoiceList && voice->handle >= MV_MinVoiceHandle) - MV_Kill(voice->handle); - - if (LL_Empty(&VoicePool, next, prev)) - { - // No free voices - RestoreInterrupts(); - return NULL; - } - } - - voice = VoicePool.next; - LL_Remove(voice, next, prev); - RestoreInterrupts(); - - MV_VoiceHandle = MV_MinVoiceHandle; - - // Find a free voice handle - do - { - if (++MV_VoiceHandle < MV_MinVoiceHandle || MV_VoiceHandle > MV_MaxVoices) - MV_VoiceHandle = MV_MinVoiceHandle; - } - while (MV_VoicePlaying(MV_VoiceHandle)); - - voice->handle = MV_VoiceHandle; - - return voice; -} - - -/*--------------------------------------------------------------------- - Function: MV_VoiceAvailable - - Checks if a voice can be played at the specified priority. ----------------------------------------------------------------------*/ - -int32_t MV_VoiceAvailable(int32_t priority) -{ - VoiceNode *voice; - VoiceNode *node; - - // Check if we have any free voices - if (!LL_Empty(&VoicePool, next, prev)) - return TRUE; - - DisableInterrupts(); - - // check if we have a higher priority than a voice that is playing. - for (voice = node = VoiceList.next; node != &VoiceList; node = node->next) - { - if (node->priority < voice->priority) - voice = node; - } - - if ((voice == &VoiceList) || (priority < voice->priority)) - { - RestoreInterrupts(); - return FALSE; - } - - RestoreInterrupts(); - return TRUE; -} - - -/*--------------------------------------------------------------------- - Function: MV_SetVoicePitch - - Sets the pitch for the specified voice. ----------------------------------------------------------------------*/ - -void MV_SetVoicePitch -( - VoiceNode *voice, - uint32_t rate, - int32_t pitchoffset -) - -{ - voice->SamplingRate = rate; - voice->PitchScale = PITCH_GetScale(pitchoffset); - voice->RateScale = (rate * voice->PitchScale) / MV_MixRate; - - // Multiply by MixBufferSize - 1 - voice->FixedPointBufferSize = (voice->RateScale * MixBufferSize) - - voice->RateScale; -} - - -/*--------------------------------------------------------------------- - Function: MV_SetPitch - - Sets the pitch for the voice associated with the specified handle. ----------------------------------------------------------------------*/ - -int32_t MV_SetPitch -( - int32_t handle, - int32_t pitchoffset -) - -{ - VoiceNode *voice; - - if (!MV_Installed) - { - MV_SetErrorCode(MV_NotInstalled); - return(MV_Error); - } - - voice = MV_GetVoice(handle); - if (voice == NULL) - { - MV_SetErrorCode(MV_VoiceNotFound); - return(MV_Error); - } - - MV_SetVoicePitch(voice, voice->SamplingRate, pitchoffset); - - return(MV_Ok); -} - - -/*--------------------------------------------------------------------- - Function: MV_SetFrequency - - Sets the frequency for the voice associated with the specified handle. ----------------------------------------------------------------------*/ - -int32_t MV_SetFrequency -( - int32_t handle, - int32_t frequency -) - -{ - VoiceNode *voice; - - if (!MV_Installed) - { - MV_SetErrorCode(MV_NotInstalled); - return(MV_Error); - } - - voice = MV_GetVoice(handle); - if (voice == NULL) - { - MV_SetErrorCode(MV_VoiceNotFound); - return(MV_Error); - } - - MV_SetVoicePitch(voice, frequency, 0); - - return(MV_Ok); -} - - -/*--------------------------------------------------------------------- - Function: MV_GetVolumeTable - - Returns a pointer to the volume table associated with the specified - volume. ----------------------------------------------------------------------*/ - -static int16_t *MV_GetVolumeTable -( - int32_t vol -) - -{ - int32_t volume; - int16_t *table; - - volume = MIX_VOLUME(vol); - - table = (int16_t *) &MV_VolumeTable[ volume ]; - - return(table); -} - - -/*--------------------------------------------------------------------- - Function: MV_SetVoiceMixMode - - Selects which method should be used to mix the voice. - - 8Bit 16Bit 8Bit 16Bit | 8Bit 16Bit 8Bit 16Bit | - Mono Mono Ster Ster | Mono Mono Ster Ster | Mixer - Out Out Out Out | In In In In | ---------------------------+---------------------------+------------- - X | X | Mix8BitMono16 - X | X | Mix8BitMono - X | X | Mix8BitStereo16 - X | X | Mix8BitStereo - X | X | Mix16BitMono16 - X | X | Mix16BitMono - X | X | Mix16BitStereo16 - X | X | Mix16BitStereo ---------------------------+---------------------------+------------- - X | X | Mix16BitStereo16Stereo - X | X | Mix16BitStereo8Stereo - X | X | Mix8BitStereo16Stereo - X | X | Mix8BitStereo8Stereo - X | X | Mix16BitMono16Stereo - X | X | Mix16BitMono8Stereo - X | X | Mix8BitMono16Stereo - X | X | Mix8BitMono8Stereo - ----------------------------------------------------------------------*/ - -void MV_SetVoiceMixMode -( - VoiceNode *voice -) - -{ - //int32_t flags; - int32_t test; - - //DisableInterrupts(); - - test = T_DEFAULT; - if (MV_Bits == 8) - { - test |= T_8BITS; - } - - if (MV_Channels == 1) - { - test |= T_MONO; - } - else - { - if (IS_QUIET(voice->RightVolume)) - { - test |= T_RIGHTQUIET; - } - else if (IS_QUIET(voice->LeftVolume)) - { - test |= T_LEFTQUIET; - } - } - - if (voice->bits == 16) - { - test |= T_16BITSOURCE; - } - - if (voice->channels == 2) - { - test |= T_STEREOSOURCE; - test &= ~(T_RIGHTQUIET | T_LEFTQUIET); - } - - switch (test) - { - case T_8BITS | T_MONO | T_16BITSOURCE : - voice->mix = MV_Mix8BitMono16; - break; - - case T_8BITS | T_MONO : - voice->mix = MV_Mix8BitMono; - break; - - case T_8BITS | T_16BITSOURCE | T_LEFTQUIET : - MV_LeftVolume = MV_RightVolume; - voice->mix = MV_Mix8BitMono16; - break; - - case T_8BITS | T_LEFTQUIET : - MV_LeftVolume = MV_RightVolume; - voice->mix = MV_Mix8BitMono; - break; - - case T_8BITS | T_16BITSOURCE | T_RIGHTQUIET : - voice->mix = MV_Mix8BitMono16; - break; - - case T_8BITS | T_RIGHTQUIET : - voice->mix = MV_Mix8BitMono; - break; - - case T_8BITS | T_16BITSOURCE : - voice->mix = MV_Mix8BitStereo16; - break; - - case T_8BITS : - voice->mix = MV_Mix8BitStereo; - break; - - case T_MONO | T_16BITSOURCE : - voice->mix = MV_Mix16BitMono16; - break; - - case T_MONO : - voice->mix = MV_Mix16BitMono; - break; - - case T_16BITSOURCE | T_LEFTQUIET : - MV_LeftVolume = MV_RightVolume; - voice->mix = MV_Mix16BitMono16; - break; - - case T_LEFTQUIET : - MV_LeftVolume = MV_RightVolume; - voice->mix = MV_Mix16BitMono; - break; - - case T_16BITSOURCE | T_RIGHTQUIET : - voice->mix = MV_Mix16BitMono16; - break; - - case T_RIGHTQUIET : - voice->mix = MV_Mix16BitMono; - break; - - case T_16BITSOURCE : - voice->mix = MV_Mix16BitStereo16; - break; - - case T_SIXTEENBIT_STEREO : - voice->mix = MV_Mix16BitStereo; - break; - - case T_16BITSOURCE | T_STEREOSOURCE: - voice->mix = MV_Mix16BitStereo16Stereo; - break; - - case T_16BITSOURCE | T_STEREOSOURCE | T_8BITS: - voice->mix = MV_Mix8BitStereo16Stereo; - break; - - case T_16BITSOURCE | T_STEREOSOURCE | T_MONO: - voice->mix = MV_Mix16BitMono16Stereo; - break; - - case T_16BITSOURCE | T_STEREOSOURCE | T_8BITS | T_MONO: - voice->mix = MV_Mix8BitMono16Stereo; - break; - - case T_STEREOSOURCE: - voice->mix = MV_Mix16BitStereo8Stereo; - break; - - case T_STEREOSOURCE | T_8BITS: - voice->mix = MV_Mix8BitStereo8Stereo; - break; - - case T_STEREOSOURCE | T_MONO: - voice->mix = MV_Mix16BitMono8Stereo; - break; - - case T_STEREOSOURCE | T_8BITS | T_MONO: - voice->mix = MV_Mix8BitMono8Stereo; - break; - - default : - voice->mix = 0; - } - - //RestoreInterrupts( flags ); -} - - -/*--------------------------------------------------------------------- - Function: MV_SetVoiceVolume - - Sets the stereo and mono volume level of the voice associated - with the specified handle. ----------------------------------------------------------------------*/ - -void MV_SetVoiceVolume -( - VoiceNode *voice, - int32_t vol, - int32_t left, - int32_t right -) - -{ - if (MV_Channels == 1) - { - left = vol; - right = vol; - } - - if (MV_SwapLeftRight) - { - // SBPro uses reversed panning - voice->LeftVolume = MV_GetVolumeTable(right); - voice->RightVolume = MV_GetVolumeTable(left); - } - else - { - voice->LeftVolume = MV_GetVolumeTable(left); - voice->RightVolume = MV_GetVolumeTable(right); - } - - MV_SetVoiceMixMode(voice); -} - -/*--------------------------------------------------------------------- -Function: MV_PauseVoice - -Pauses the voice associated with the specified handle -without stoping the sound. ----------------------------------------------------------------------*/ - -int32_t MV_PauseVoice -( - int32_t handle, - int32_t pause -) - -{ - VoiceNode *voice; - - if (!MV_Installed) - { - MV_SetErrorCode(MV_NotInstalled); - return(MV_Error); - } - - DisableInterrupts(); - - voice = MV_GetVoice(handle); - if (voice == NULL) - { - RestoreInterrupts(); - MV_SetErrorCode(MV_VoiceNotFound); - return(MV_Warning); - } - - voice->Paused = pause; - - RestoreInterrupts(); - - return(MV_Ok); -} - - -/*--------------------------------------------------------------------- - Function: MV_EndLooping - - Stops the voice associated with the specified handle from looping - without stoping the sound. ----------------------------------------------------------------------*/ - -int32_t MV_EndLooping -( - int32_t handle -) - -{ - VoiceNode *voice; - - if (!MV_Installed) - { - MV_SetErrorCode(MV_NotInstalled); - return(MV_Error); - } - - DisableInterrupts(); - - voice = MV_GetVoice(handle); - if (voice == NULL) - { - RestoreInterrupts(); - MV_SetErrorCode(MV_VoiceNotFound); - return(MV_Warning); - } - - voice->LoopCount = 0; - voice->LoopStart = NULL; - voice->LoopEnd = NULL; - - RestoreInterrupts(); - - return(MV_Ok); -} - - -/*--------------------------------------------------------------------- - Function: MV_SetPan - - Sets the stereo and mono volume level of the voice associated - with the specified handle. ----------------------------------------------------------------------*/ - -int32_t MV_SetPan -( - int32_t handle, - int32_t vol, - int32_t left, - int32_t right -) - -{ - VoiceNode *voice; - - if (!MV_Installed) - { - MV_SetErrorCode(MV_NotInstalled); - return(MV_Error); - } - - voice = MV_GetVoice(handle); - if (voice == NULL) - { - MV_SetErrorCode(MV_VoiceNotFound); - return(MV_Warning); - } - - MV_SetVoiceVolume(voice, vol, left, right); - - return(MV_Ok); -} - - -/*--------------------------------------------------------------------- - Function: MV_Pan3D - - Set the angle and distance from the listener of the voice associated - with the specified handle. ----------------------------------------------------------------------*/ - -int32_t MV_Pan3D -( - int32_t handle, - int32_t angle, - int32_t distance -) - -{ - int32_t left; - int32_t right; - int32_t mid; - int32_t volume; - int32_t status; - - if (distance < 0) - { - distance = -distance; - angle += MV_NumPanPositions / 2; - } - - volume = MIX_VOLUME(distance); - - // Ensure angle is within 0 - 31 - angle &= MV_MaxPanPosition; - - left = MV_PanTable[ angle ][ volume ].left; - right = MV_PanTable[ angle ][ volume ].right; - mid = max(0, 255 - distance); - - status = MV_SetPan(handle, mid, left, right); - - return(status); -} - - -/*--------------------------------------------------------------------- - Function: MV_SetReverb - - Sets the level of reverb to add to mix. ----------------------------------------------------------------------*/ - -void MV_SetReverb -( - int32_t reverb -) - -{ - MV_ReverbLevel = MIX_VOLUME(reverb); - MV_ReverbTable = &MV_VolumeTable[ MV_ReverbLevel ]; -} - - -/*--------------------------------------------------------------------- - Function: MV_SetFastReverb - - Sets the level of reverb to add to mix. ----------------------------------------------------------------------*/ - -void MV_SetFastReverb -( - int32_t reverb -) - -{ - MV_ReverbLevel = max(0, min(16, reverb)); - MV_ReverbTable = NULL; -} - - -/*--------------------------------------------------------------------- - Function: MV_GetMaxReverbDelay - - Returns the maximum delay time for reverb. ----------------------------------------------------------------------*/ - -int32_t MV_GetMaxReverbDelay -( - void -) - -{ - int32_t maxdelay; - - maxdelay = MixBufferSize * MV_NumberOfBuffers; - - return maxdelay; -} - - -/*--------------------------------------------------------------------- - Function: MV_GetReverbDelay - - Returns the current delay time for reverb. ----------------------------------------------------------------------*/ - -int32_t MV_GetReverbDelay -( - void -) - -{ - return MV_ReverbDelay / MV_SampleSize; -} - - -/*--------------------------------------------------------------------- - Function: MV_SetReverbDelay - - Sets the delay level of reverb to add to mix. ----------------------------------------------------------------------*/ - -void MV_SetReverbDelay -( - int32_t delay -) - -{ - int32_t maxdelay; - - maxdelay = MV_GetMaxReverbDelay(); - MV_ReverbDelay = max(MixBufferSize, min(delay, maxdelay)); - MV_ReverbDelay *= MV_SampleSize; -} - - -/*--------------------------------------------------------------------- - Function: MV_SetMixMode - - Prepares Multivoc to play stereo of mono digitized sounds. ----------------------------------------------------------------------*/ - -int32_t MV_SetMixMode -( - int32_t numchannels, - int32_t samplebits -) - -{ - int32_t mode; - - if (!MV_Installed) - { - MV_SetErrorCode(MV_NotInstalled); - return(MV_Error); - } - - mode = 0; - if (numchannels == 2) - { - mode |= STEREO; - } - if (samplebits == 16) - { - mode |= SIXTEEN_BIT; - } - - MV_MixMode = mode; - - MV_Channels = 1; - if (MV_MixMode & STEREO) - { - MV_Channels = 2; - } - - MV_Bits = 8; - if (MV_MixMode & SIXTEEN_BIT) - { - MV_Bits = 16; - } - - MV_BuffShift = 7 + MV_Channels; - MV_SampleSize = sizeof(MONO8) * MV_Channels; - - if (MV_Bits == 8) - { - MV_Silence = SILENCE_8BIT; - } - else - { - MV_Silence = SILENCE_16BIT; - MV_BuffShift += 1; - MV_SampleSize *= 2; - } - - MV_BufferSize = MixBufferSize * MV_SampleSize; - MV_NumberOfBuffers = TotalBufferSize / MV_BufferSize; - MV_BufferLength = TotalBufferSize; - - MV_RightChannelOffset = MV_SampleSize / 2; - - return(MV_Ok); -} - - -/*--------------------------------------------------------------------- - Function: MV_StartPlayback - - Starts the sound playback engine. ----------------------------------------------------------------------*/ - -int32_t MV_StartPlayback -( - void -) - -{ - int32_t status; - int32_t buffer; - - // Initialize the buffers - ClearBuffer_DW(MV_MixBuffer[ 0 ], MV_Silence, TotalBufferSize >> 2); - for (buffer = 0; buffer < MV_NumberOfBuffers; buffer++) - { - MV_BufferEmpty[ buffer ] = TRUE; - } - - // Set the mix buffer variables - MV_MixPage = 1; - - MV_MixFunction = MV_Mix; - -//JIM -// MV_MixRate = MV_RequestedMixRate; -// return( MV_Ok ); - - // Start playback - status = SoundDriver_BeginPlayback(MV_MixBuffer[0], MV_BufferSize, - MV_NumberOfBuffers, MV_ServiceVoc); - if (status != MV_Ok) - { - MV_SetErrorCode(MV_DriverError); - return MV_Error; - } - - MV_MixRate = MV_RequestedMixRate; - - return(MV_Ok); -} - - -/*--------------------------------------------------------------------- - Function: MV_StopPlayback - - Stops the sound playback engine. ----------------------------------------------------------------------*/ - -void MV_StopPlayback -( - void -) - -{ - VoiceNode *voice; - VoiceNode *next; - - // Stop sound playback - SoundDriver_StopPlayback(); - - // Make sure all callbacks are done. - DisableInterrupts(); - - for (voice = VoiceList.next; voice != &VoiceList; voice = next) - { - next = voice->next; - - MV_StopVoice(voice); - - if (MV_CallBackFunc) - MV_CallBackFunc(voice->callbackval); - } - - RestoreInterrupts(); -} - - -/*--------------------------------------------------------------------- - Function: MV_StartDemandFeedPlayback - - Plays a digitized sound from a user controlled buffering system. ----------------------------------------------------------------------*/ - -int32_t MV_StartDemandFeedPlayback -( - void (*function)(char **ptr, uint32_t *length), - int32_t rate, - int32_t pitchoffset, - int32_t vol, - int32_t left, - int32_t right, - int32_t priority, - uint32_t callbackval -) - -{ - VoiceNode *voice; - - if (!MV_Installed) - { - MV_SetErrorCode(MV_NotInstalled); - return(MV_Error); - } - - // Request a voice from the voice pool - voice = MV_AllocVoice(priority); - if (voice == NULL) - { - MV_SetErrorCode(MV_NoVoices); - return(MV_Error); - } - - voice->wavetype = DemandFeed; - voice->bits = 8; - voice->channels = 1; - voice->GetSound = MV_GetNextDemandFeedBlock; - voice->NextBlock = NULL; - voice->DemandFeed = function; - voice->LoopStart = NULL; - voice->LoopCount = 0; - voice->BlockLength = 0; - voice->position = 0; - voice->sound = NULL; - voice->length = 0; - voice->BlockLength = 0; - voice->Playing = TRUE; - voice->next = NULL; - voice->prev = NULL; - voice->priority = priority; - voice->callbackval = callbackval; - - MV_SetVoicePitch(voice, rate, pitchoffset); - MV_SetVoiceVolume(voice, vol, left, right); - MV_PlayVoice(voice); - - return(voice->handle); -} - - -/*--------------------------------------------------------------------- - Function: MV_PlayRaw - - Begin playback of sound data with the given sound levels and - priority. ----------------------------------------------------------------------*/ - -int32_t MV_PlayRaw -( - char *ptr, - uint32_t length, - unsigned rate, - int32_t pitchoffset, - int32_t vol, - int32_t left, - int32_t right, - int32_t priority, - uint32_t callbackval -) - -{ - int32_t status; - - status = MV_PlayLoopedRaw(ptr, length, NULL, NULL, rate, pitchoffset, - vol, left, right, priority, callbackval); - - return(status); -} - - -/*--------------------------------------------------------------------- - Function: MV_PlayLoopedRaw - - Begin playback of sound data with the given sound levels and - priority. ----------------------------------------------------------------------*/ - -int32_t MV_PlayLoopedRaw -( - char *ptr, - uint32_t length, - char *loopstart, - char *loopend, - unsigned rate, - int32_t pitchoffset, - int32_t vol, - int32_t left, - int32_t right, - int32_t priority, - uint32_t callbackval -) - -{ - VoiceNode *voice; - - if (!MV_Installed) - { - MV_SetErrorCode(MV_NotInstalled); - return(MV_Error); - } - - // Request a voice from the voice pool - voice = MV_AllocVoice(priority); - if (voice == NULL) - { - MV_SetErrorCode(MV_NoVoices); - return(MV_Error); - } - - voice->wavetype = Raw; - voice->bits = 8; - voice->channels = 1; - voice->GetSound = MV_GetNextRawBlock; - voice->Playing = TRUE; - voice->NextBlock = ptr; - voice->position = 0; - voice->BlockLength = length; - voice->length = 0; - voice->next = NULL; - voice->prev = NULL; - voice->priority = priority; - voice->callbackval = callbackval; - voice->LoopStart = loopstart; - voice->LoopEnd = loopend; - voice->LoopSize = (voice->LoopEnd - voice->LoopStart) + 1; - - MV_SetVoicePitch(voice, rate, pitchoffset); - MV_SetVoiceVolume(voice, vol, left, right); - MV_PlayVoice(voice); - - return(voice->handle); -} - - -/*--------------------------------------------------------------------- - Function: MV_PlayWAV - - Begin playback of sound data with the given sound levels and - priority. ----------------------------------------------------------------------*/ - -int32_t MV_PlayWAV -( - char *ptr, - uint32_t length, - int32_t pitchoffset, - int32_t vol, - int32_t left, - int32_t right, - int32_t priority, - uint32_t callbackval -) - -{ - int32_t status; - - status = MV_PlayLoopedWAV(ptr, length, -1, -1, pitchoffset, vol, left, right, - priority, callbackval); - - return(status); -} - - -/*--------------------------------------------------------------------- - Function: MV_PlayWAV3D - - Begin playback of sound data at specified angle and distance - from listener. ----------------------------------------------------------------------*/ - -int32_t MV_PlayWAV3D -( - char *ptr, - uint32_t length, - int32_t pitchoffset, - int32_t angle, - int32_t distance, - int32_t priority, - uint32_t callbackval -) - -{ - int32_t left; - int32_t right; - int32_t mid; - int32_t volume; - int32_t status; - - if (!MV_Installed) - { - MV_SetErrorCode(MV_NotInstalled); - return(MV_Error); - } - - if (distance < 0) - { - distance = -distance; - angle += MV_NumPanPositions / 2; - } - - volume = MIX_VOLUME(distance); - - // Ensure angle is within 0 - 31 - angle &= MV_MaxPanPosition; - - left = MV_PanTable[ angle ][ volume ].left; - right = MV_PanTable[ angle ][ volume ].right; - mid = max(0, 255 - distance); - - status = MV_PlayWAV(ptr, length, pitchoffset, mid, left, right, priority, - callbackval); - - return(status); -} - - -/*--------------------------------------------------------------------- - Function: MV_PlayLoopedWAV - - Begin playback of sound data with the given sound levels and - priority. ----------------------------------------------------------------------*/ - -int32_t MV_PlayLoopedWAV -( - char *ptr, - uint32_t ptrlength, - int32_t loopstart, - int32_t loopend, - int32_t pitchoffset, - int32_t vol, - int32_t left, - int32_t right, - int32_t priority, - uint32_t callbackval -) - -{ - riff_header riff; - format_header format; - data_header data; - VoiceNode *voice; - int32_t length; - - UNREFERENCED_PARAMETER(ptrlength); - UNREFERENCED_PARAMETER(loopend); - - if (!MV_Installed) - { - MV_SetErrorCode(MV_NotInstalled); - return(MV_Error); - } - - memcpy(&riff, ptr, sizeof(riff_header)); - riff.file_size = LITTLE32(riff.file_size); - riff.format_size = LITTLE32(riff.format_size); - - if ((memcmp(riff.RIFF, "RIFF", 4) != 0) || - (memcmp(riff.WAVE, "WAVE", 4) != 0) || - (memcmp(riff.fmt, "fmt ", 4) != 0)) - { - MV_SetErrorCode(MV_InvalidWAVFile); - return(MV_Error); - } - - memcpy(&format, ptr + sizeof(riff_header), sizeof(format_header)); - format.wFormatTag = LITTLE16(format.wFormatTag); - format.nChannels = LITTLE16(format.nChannels); - format.nSamplesPerSec = LITTLE32(format.nSamplesPerSec); - format.nAvgBytesPerSec = LITTLE32(format.nAvgBytesPerSec); - format.nBlockAlign = LITTLE16(format.nBlockAlign); - format.nBitsPerSample = LITTLE16(format.nBitsPerSample); - - memcpy(&data, ptr + sizeof(riff_header) + riff.format_size, sizeof(data_header)); - data.size = LITTLE32(data.size); - - // Check if it's PCM data. - if (format.wFormatTag != 1) - { - MV_SetErrorCode(MV_InvalidWAVFile); - return(MV_Error); - } - - if (format.nChannels != 1 && format.nChannels != 2) - { - MV_SetErrorCode(MV_InvalidWAVFile); - return(MV_Error); - } - - if ((format.nBitsPerSample != 8) && - (format.nBitsPerSample != 16)) - { - MV_SetErrorCode(MV_InvalidWAVFile); - return(MV_Error); - } - - if (memcmp(data.DATA, "data", 4) != 0) - { - MV_SetErrorCode(MV_InvalidWAVFile); - return(MV_Error); - } - - // Request a voice from the voice pool - voice = MV_AllocVoice(priority); - if (voice == NULL) - { - MV_SetErrorCode(MV_NoVoices); - return(MV_Error); - } - - voice->wavetype = WAV; - voice->bits = format.nBitsPerSample; - voice->channels = format.nChannels; - voice->GetSound = MV_GetNextWAVBlock; - - length = data.size; - if (voice->bits == 16) - { - data.size &= ~1; - length /= 2; - } - if (voice->channels == 2) - { - data.size &= ~1; - length /= 2; - } - - voice->Playing = TRUE; - voice->Paused = FALSE; - voice->DemandFeed = NULL; - voice->LoopStart = NULL; - voice->LoopCount = 0; - voice->position = 0; - voice->length = 0; - voice->BlockLength = length; - voice->NextBlock = (char *)((intptr_t) ptr + sizeof(riff_header) + riff.format_size + sizeof(data_header)); - voice->next = NULL; - voice->prev = NULL; - voice->priority = priority; - voice->callbackval = callbackval; - voice->LoopStart = loopstart >= 0 ? voice->NextBlock : NULL; - voice->LoopEnd = NULL; - voice->LoopSize = length; - - MV_SetVoicePitch(voice, format.nSamplesPerSec, pitchoffset); - MV_SetVoiceVolume(voice, vol, left, right); - MV_PlayVoice(voice); - - return(voice->handle); -} - - -/*--------------------------------------------------------------------- - Function: MV_PlayVOC3D - - Begin playback of sound data at specified angle and distance - from listener. ----------------------------------------------------------------------*/ - -int32_t MV_PlayVOC3D -( - char *ptr, - uint32_t ptrlength, - int32_t pitchoffset, - int32_t angle, - int32_t distance, - int32_t priority, - uint32_t callbackval -) - -{ - int32_t left; - int32_t right; - int32_t mid; - int32_t volume; - int32_t status; - - if (!MV_Installed) - { - MV_SetErrorCode(MV_NotInstalled); - return(MV_Error); - } - - if (distance < 0) - { - distance = -distance; - angle += MV_NumPanPositions / 2; - } - - volume = MIX_VOLUME(distance); - - // Ensure angle is within 0 - 31 - angle &= MV_MaxPanPosition; - - left = MV_PanTable[ angle ][ volume ].left; - right = MV_PanTable[ angle ][ volume ].right; - mid = max(0, 255 - distance); - - status = MV_PlayVOC(ptr, ptrlength, pitchoffset, mid, left, right, priority, - callbackval); - - return(status); -} - - -/*--------------------------------------------------------------------- - Function: MV_PlayVOC - - Begin playback of sound data with the given sound levels and - priority. ----------------------------------------------------------------------*/ - -int32_t MV_PlayVOC -( - char *ptr, - uint32_t ptrlength, - int32_t pitchoffset, - int32_t vol, - int32_t left, - int32_t right, - int32_t priority, - uint32_t callbackval -) - -{ - int32_t status; - - status = MV_PlayLoopedVOC(ptr, ptrlength, -1, -1, pitchoffset, vol, left, right, - priority, callbackval); - - return(status); -} - - -/*--------------------------------------------------------------------- - Function: MV_PlayLoopedVOC - - Begin playback of sound data with the given sound levels and - priority. ----------------------------------------------------------------------*/ - -int32_t MV_PlayLoopedVOC -( - char *ptr, - uint32_t ptrlength, - int32_t loopstart, - int32_t loopend, - int32_t pitchoffset, - int32_t vol, - int32_t left, - int32_t right, - int32_t priority, - uint32_t callbackval -) - -{ - VoiceNode *voice; - int32_t status; - - UNREFERENCED_PARAMETER(ptrlength); - - if (!MV_Installed) - { - MV_SetErrorCode(MV_NotInstalled); - return(MV_Error); - } - - // Make sure it's a valid VOC file. - status = memcmp(ptr, "Creative Voice File", 19); - if (status != 0) - { - MV_SetErrorCode(MV_InvalidVOCFile); - return(MV_Error); - } - - // Request a voice from the voice pool - voice = MV_AllocVoice(priority); - if (voice == NULL) - { - MV_SetErrorCode(MV_NoVoices); - return(MV_Error); - } - - voice->wavetype = VOC; - voice->bits = 8; - voice->channels = 1; - voice->GetSound = MV_GetNextVOCBlock; - voice->NextBlock = ptr + LITTLE16(*(uint16_t *)(ptr + 0x14)); - voice->DemandFeed = NULL; - voice->LoopStart = NULL; - voice->LoopCount = 0; - voice->BlockLength = 0; - voice->PitchScale = PITCH_GetScale(pitchoffset); - voice->length = 0; - voice->next = NULL; - voice->prev = NULL; - voice->priority = priority; - voice->callbackval = callbackval; - voice->LoopStart = loopstart >= 0 ? voice->NextBlock : 0; - voice->LoopEnd = 0; - voice->LoopSize = loopend - loopstart + 1; - - if (loopstart < 0) - { - voice->LoopStart = NULL; - voice->LoopEnd = NULL; - } - - MV_SetVoiceVolume(voice, vol, left, right); - MV_PlayVoice(voice); - - return(voice->handle); -} - - -/*--------------------------------------------------------------------- - Function: MV_CreateVolumeTable - - Create the table used to convert sound data to a specific volume - level. ----------------------------------------------------------------------*/ - -void MV_CreateVolumeTable -( - int32_t index, - int32_t volume, - int32_t MaxVolume -) - -{ - int32_t val; - int32_t level; - int32_t i; - - level = (volume * MaxVolume) / MV_MaxTotalVolume; - if (MV_Bits == 16) - { - for (i = 0; i < 65536; i += 256) - { - val = i - 0x8000; - val *= level; - val /= MV_MaxVolume; - MV_VolumeTable[ index ][ i / 256 ] = val; - } - } - else - { - for (i = 0; i < 256; i++) - { - val = i - 0x80; - val *= level; - val /= MV_MaxVolume; - MV_VolumeTable[ volume ][ i ] = val; - } - } -} - - -/*--------------------------------------------------------------------- - Function: MV_CalcVolume - - Create the table used to convert sound data to a specific volume - level. ----------------------------------------------------------------------*/ - -void MV_CalcVolume -( - int32_t MaxVolume -) - -{ - int32_t volume; - - for (volume = 0; volume < 128; volume++) - { - MV_HarshClipTable[ volume ] = 0; - MV_HarshClipTable[ volume + 384 ] = 255; - } - for (volume = 0; volume < 256; volume++) - { - MV_HarshClipTable[ volume + 128 ] = volume; - } - - // For each volume level, create a translation table with the - // appropriate volume calculated. - for (volume = 0; volume <= MV_MaxVolume; volume++) - { - MV_CreateVolumeTable(volume, volume, MaxVolume); - } -} - - -/*--------------------------------------------------------------------- - Function: MV_CalcPanTable - - Create the table used to determine the stereo volume level of - a sound located at a specific angle and distance from the listener. ----------------------------------------------------------------------*/ - -void MV_CalcPanTable -( - void -) - -{ - int32_t level; - int32_t angle; - int32_t distance; - int32_t HalfAngle; - int32_t ramp; - - HalfAngle = (MV_NumPanPositions / 2); - - for (distance = 0; distance <= MV_MaxVolume; distance++) - { - level = (255 * (MV_MaxVolume - distance)) / MV_MaxVolume; - for (angle = 0; angle <= HalfAngle / 2; angle++) - { - ramp = level - ((level * angle) / - (MV_NumPanPositions / 4)); - - MV_PanTable[ angle ][ distance ].left = ramp; - MV_PanTable[ HalfAngle - angle ][ distance ].left = ramp; - MV_PanTable[ HalfAngle + angle ][ distance ].left = level; - MV_PanTable[ MV_MaxPanPosition - angle ][ distance ].left = level; - - MV_PanTable[ angle ][ distance ].right = level; - MV_PanTable[ HalfAngle - angle ][ distance ].right = level; - MV_PanTable[ HalfAngle + angle ][ distance ].right = ramp; - MV_PanTable[ MV_MaxPanPosition - angle ][ distance ].right = ramp; - } - } -} - - -/*--------------------------------------------------------------------- - Function: MV_SetVolume - - Sets the volume of digitized sound playback. ----------------------------------------------------------------------*/ - -void MV_SetVolume -( - int32_t volume -) - -{ - volume = max(0, volume); - volume = min(volume, MV_MaxTotalVolume); - - MV_TotalVolume = volume; - - // Calculate volume table - MV_CalcVolume(volume); -} - - -/*--------------------------------------------------------------------- - Function: MV_GetVolume - - Returns the volume of digitized sound playback. ----------------------------------------------------------------------*/ - -int32_t MV_GetVolume -( - void -) - -{ - return(MV_TotalVolume); -} - - -/*--------------------------------------------------------------------- - Function: MV_SetCallBack - - Set the function to call when a voice stops. ----------------------------------------------------------------------*/ - -void MV_SetCallBack -( - void (*function)(uint32_t) -) - -{ - MV_CallBackFunc = function; -} - - -/*--------------------------------------------------------------------- - Function: MV_SetReverseStereo - - Set the orientation of the left and right channels. ----------------------------------------------------------------------*/ - -void MV_SetReverseStereo -( - int32_t setting -) - -{ - MV_SwapLeftRight = setting; -} - - -/*--------------------------------------------------------------------- - Function: MV_GetReverseStereo - - Returns the orientation of the left and right channels. ----------------------------------------------------------------------*/ - -int32_t MV_GetReverseStereo -( - void -) - -{ - return(MV_SwapLeftRight); -} - - -/*--------------------------------------------------------------------- - Function: MV_Init - - Perform the initialization of variables and memory used by - Multivoc. ----------------------------------------------------------------------*/ - -int32_t MV_Init -( - int32_t soundcard, - int32_t MixRate, - int32_t Voices, - int32_t numchannels, - int32_t samplebits, - void * initdata -) - -{ - char *ptr; - int32_t status; - int32_t buffer; - int32_t index; - - if (MV_Installed) - { - MV_Shutdown(); - } - - MV_SetErrorCode(MV_Ok); - - MV_TotalMemory = Voices * sizeof(VoiceNode) + sizeof(HARSH_CLIP_TABLE_8) + TotalBufferSize; - ptr = (char *) calloc(1, MV_TotalMemory); - if (!ptr) - { - MV_SetErrorCode(MV_NoMem); - return(MV_Error); - } - - MV_Voices = (VoiceNode *)ptr; - ptr += Voices * sizeof(VoiceNode); - - MV_HarshClipTable = ptr; - ptr += sizeof(HARSH_CLIP_TABLE_8); - - // Set number of voices before calculating volume table - MV_MaxVoices = Voices; - - LL_Reset((VoiceNode*) &VoiceList, next, prev); - LL_Reset((VoiceNode*) &VoicePool, next, prev); - - for (index = 0; index < Voices; index++) - { - LL_Add((VoiceNode*) &VoicePool, &MV_Voices[ index ], next, prev); - } - - MV_SetReverseStereo(FALSE); - - ASS_SoundDriver = soundcard; - - // Initialize the sound card - status = SoundDriver_Init(&MixRate, &numchannels, &samplebits, initdata); - if (status != MV_Ok) - { - MV_SetErrorCode(MV_DriverError); - } - - if (MV_ErrorCode != MV_Ok) - { - status = MV_ErrorCode; - - free(MV_Voices); - MV_Voices = NULL; - MV_HarshClipTable = NULL; - MV_TotalMemory = 0; - - MV_SetErrorCode(status); - return(MV_Error); - } - - MV_Installed = TRUE; - MV_CallBackFunc = NULL; - MV_ReverbLevel = 0; - MV_ReverbTable = NULL; - - // Set the sampling rate - MV_RequestedMixRate = MixRate; - - // Set Mixer to play stereo digitized sound - MV_SetMixMode(numchannels, samplebits); - MV_ReverbDelay = MV_BufferSize * 3; - - // Make sure we don't cross a physical page - MV_MixBuffer[ MV_NumberOfBuffers ] = ptr; - for (buffer = 0; buffer < MV_NumberOfBuffers; buffer++) - { - MV_MixBuffer[ buffer ] = ptr; - ptr += MV_BufferSize; - } - - // Calculate pan table - MV_CalcPanTable(); - - MV_SetVolume(MV_MaxTotalVolume); - - // Start the playback engine - status = MV_StartPlayback(); - if (status != MV_Ok) - { - // Preserve error code while we shutdown. - status = MV_ErrorCode; - MV_Shutdown(); - MV_SetErrorCode(status); - return(MV_Error); - } - - return(MV_Ok); -} - - -/*--------------------------------------------------------------------- - Function: MV_Shutdown - - Restore any resources allocated by Multivoc back to the system. ----------------------------------------------------------------------*/ - -int32_t MV_Shutdown -( - void -) - -{ - int32_t buffer; - - if (!MV_Installed) - { - return(MV_Ok); - } - - MV_KillAllVoices(); - - MV_Installed = FALSE; - - // Stop the sound playback engine - MV_StopPlayback(); - - // Shutdown the sound card - SoundDriver_Shutdown(); - - // Free any voices we allocated - free(MV_Voices); - MV_Voices = NULL; - MV_TotalMemory = 0; - - LL_Reset((VoiceNode*) &VoiceList, next, prev); - LL_Reset((VoiceNode*) &VoicePool, next, prev); - - MV_MaxVoices = 1; - - // Release the descriptor from our mix buffer - for (buffer = 0; buffer < NumberOfBuffers; buffer++) - { - MV_MixBuffer[ buffer ] = NULL; - } - - return(MV_Ok); -} - -int32_t MV_SetVoiceCallback(int32_t handle, uint32_t callbackval) -{ - VoiceNode *voice; - - if (!MV_Installed) - { - MV_SetErrorCode(MV_NotInstalled); - return(MV_Error); - } - - DisableInterrupts(); - - if ((voice = MV_GetVoice(handle)) == NULL) - { - RestoreInterrupts(); - MV_SetErrorCode(MV_VoiceNotFound); - return(MV_Error); - } - - voice->callbackval = callbackval; - - RestoreInterrupts(); - - return(MV_Ok); -} - -void MV_SetPrintf(void (*function)(const char *, ...)) -{ - MV_Printf = function; -} - - -// vim:ts=3:expandtab: diff --git a/polymer-perf/eduke32/source/jaudiolib/src/multivoc.h b/polymer-perf/eduke32/source/jaudiolib/src/multivoc.h deleted file mode 100644 index e4794c7e8..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/multivoc.h +++ /dev/null @@ -1,124 +0,0 @@ -/* -Copyright (C) 1994-1995 Apogee Software, Ltd. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -/********************************************************************** - file: MULTIVOC.H - - author: James R. Dose - date: December 20, 1993 - - Public header for MULTIVOC.C - - (c) Copyright 1993 James R. Dose. All Rights Reserved. -**********************************************************************/ - -#ifndef __MULTIVOC_H -#define __MULTIVOC_H - -#ifndef UNREFERENCED_PARAMETER -#define UNREFERENCED_PARAMETER(x) x=x -#endif - -#define MV_MinVoiceHandle 1 - -extern int32_t MV_ErrorCode; - -enum MV_Errors - { - MV_Warning = -2, - MV_Error = -1, - MV_Ok = 0, - MV_UnsupportedCard, - MV_NotInstalled, - MV_DriverError, - MV_NoVoices, - MV_NoMem, - MV_VoiceNotFound, - MV_InvalidVOCFile, - MV_InvalidWAVFile, - MV_InvalidVorbisFile, - MV_InvalidMixMode, - MV_NullRecordFunction - }; - -void (*MV_Printf)(const char *fmt, ...); -const char *MV_ErrorString( int32_t ErrorNumber ); -int32_t MV_VoicePlaying( int32_t handle ); -int32_t MV_KillAllVoices( void ); -int32_t MV_Kill( int32_t handle ); -int32_t MV_VoicesPlaying( void ); -int32_t MV_VoiceAvailable( int32_t priority ); -int32_t MV_SetPitch( int32_t handle, int32_t pitchoffset ); -int32_t MV_SetFrequency( int32_t handle, int32_t frequency ); -int32_t MV_PauseVoice( int32_t handle, int32_t pause ); -int32_t MV_EndLooping( int32_t handle ); -int32_t MV_SetPan( int32_t handle, int32_t vol, int32_t left, int32_t right ); -int32_t MV_Pan3D( int32_t handle, int32_t angle, int32_t distance ); -void MV_SetReverb( int32_t reverb ); -void MV_SetFastReverb( int32_t reverb ); -int32_t MV_GetMaxReverbDelay( void ); -int32_t MV_GetReverbDelay( void ); -void MV_SetReverbDelay( int32_t delay ); -int32_t MV_SetMixMode( int32_t numchannels, int32_t samplebits ); -int32_t MV_StartPlayback( void ); -void MV_StopPlayback( void ); -int32_t MV_StartDemandFeedPlayback( void ( *function )( char **ptr, uint32_t *length ), - int32_t rate, int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, - int32_t priority, uint32_t callbackval ); -int32_t MV_PlayRaw( char *ptr, uint32_t length, - unsigned rate, int32_t pitchoffset, int32_t vol, int32_t left, - int32_t right, int32_t priority, uint32_t callbackval ); -int32_t MV_PlayLoopedRaw( char *ptr, uint32_t length, - char *loopstart, char *loopend, unsigned rate, int32_t pitchoffset, - int32_t vol, int32_t left, int32_t right, int32_t priority, - uint32_t callbackval ); -int32_t MV_PlayWAV( char *ptr, uint32_t length, int32_t pitchoffset, int32_t vol, int32_t left, - int32_t right, int32_t priority, uint32_t callbackval ); -int32_t MV_PlayWAV3D( char *ptr, uint32_t length, int32_t pitchoffset, int32_t angle, int32_t distance, - int32_t priority, uint32_t callbackval ); -int32_t MV_PlayLoopedWAV( char *ptr, uint32_t length, int32_t loopstart, int32_t loopend, - int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, int32_t priority, - uint32_t callbackval ); -int32_t MV_PlayVOC3D( char *ptr, uint32_t length, int32_t pitchoffset, int32_t angle, int32_t distance, - int32_t priority, uint32_t callbackval ); -int32_t MV_PlayVOC( char *ptr, uint32_t length, int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, - int32_t priority, uint32_t callbackval ); -int32_t MV_PlayLoopedVOC( char *ptr, uint32_t length, int32_t loopstart, int32_t loopend, - int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, int32_t priority, - uint32_t callbackval ); -int32_t MV_PlayVorbis3D( char *ptr, uint32_t length, int32_t pitchoffset, int32_t angle, int32_t distance, - int32_t priority, uint32_t callbackval ); -int32_t MV_PlayVorbis( char *ptr, uint32_t length, int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, - int32_t priority, uint32_t callbackval ); -int32_t MV_PlayLoopedVorbis( char *ptr, uint32_t length, int32_t loopstart, int32_t loopend, - int32_t pitchoffset, int32_t vol, int32_t left, int32_t right, int32_t priority, - uint32_t callbackval ); -void MV_CreateVolumeTable( int32_t index, int32_t volume, int32_t MaxVolume ); -void MV_SetVolume( int32_t volume ); -int32_t MV_GetVolume( void ); -void MV_SetCallBack( void ( *function )( uint32_t ) ); -void MV_SetReverseStereo( int32_t setting ); -int32_t MV_GetReverseStereo( void ); -int32_t MV_Init( int32_t soundcard, int32_t MixRate, int32_t Voices, int32_t numchannels, - int32_t samplebits, void * initdata ); -int32_t MV_Shutdown( void ); -int32_t MV_SetVoiceCallback(int32_t handle, uint32_t callbackval); -void MV_SetPrintf(void (*function)(const char *fmt, ...)); - -#endif diff --git a/polymer-perf/eduke32/source/jaudiolib/src/pitch.c b/polymer-perf/eduke32/source/jaudiolib/src/pitch.c deleted file mode 100644 index 786fed04a..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/pitch.c +++ /dev/null @@ -1,112 +0,0 @@ -/* -Copyright (C) 1994-1995 Apogee Software, Ltd. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -/********************************************************************** - module: PITCH.C - - author: James R. Dose - date: June 14, 1993 - - Routines for pitch scaling. - - (c) Copyright 1993 James R. Dose. All Rights Reserved. -**********************************************************************/ - -#include -#include -#include "pitch.h" - -#define MAXDETUNE 50 - -static uint32_t PitchTable[ 12 ][ MAXDETUNE ]; -static int32_t PITCH_Installed = 0; - - -/*--------------------------------------------------------------------- - Function: PITCH_Init - - Initializes pitch table. ----------------------------------------------------------------------*/ - - -void PITCH_Init(void) -{ - int32_t note; - int32_t detune; - - if (!PITCH_Installed) - { - for (note = 0; note < 12; note++) - { - for (detune = 0; detune < MAXDETUNE; detune++) - { - PitchTable[ note ][ detune ] = 0x10000 * - pow(2, (note * MAXDETUNE + detune) / (12.0 * MAXDETUNE)); - } - } - - PITCH_Installed = 1; - } -} - - -/*--------------------------------------------------------------------- - Function: PITCH_GetScale - - Returns a fixed-point value to scale number the specified amount. ----------------------------------------------------------------------*/ - -uint32_t PITCH_GetScale(int32_t pitchoffset) -{ - uint32_t scale; - int32_t octaveshift; - int32_t noteshift; - int32_t note; - int32_t detune; - - if ( !PITCH_Installed ) - PITCH_Init(); - - if (pitchoffset == 0) - return(PitchTable[ 0 ][ 0 ]); - - noteshift = pitchoffset % 1200; - if (noteshift < 0) - noteshift += 1200; - - note = noteshift / 100; - detune = (noteshift % 100) / (100 / MAXDETUNE); - octaveshift = (pitchoffset - noteshift) / 1200; - - if (detune < 0) - { - detune += (100 / MAXDETUNE); - note--; - if (note < 0) - { - note += 12; - octaveshift--; - } - } - - scale = PitchTable[ note ][ detune ]; - - return (octaveshift < 0) ? (scale >> -octaveshift) : (scale <<= octaveshift); -} - diff --git a/polymer-perf/eduke32/source/jaudiolib/src/pitch.h b/polymer-perf/eduke32/source/jaudiolib/src/pitch.h deleted file mode 100644 index 8bead2435..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/pitch.h +++ /dev/null @@ -1,47 +0,0 @@ -/* -Copyright (C) 1994-1995 Apogee Software, Ltd. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -/********************************************************************** - module: PITCH.H - - author: James R. Dose - date: June 14, 1994 - - Public header for PITCH.C - - (c) Copyright 1994 James R. Dose. All Rights Reserved. -**********************************************************************/ - -#ifndef __PITCH_H -#define __PITCH_H - -#include "inttypes.h" - -enum PITCH_ERRORS - { - PITCH_Warning = -2, - PITCH_Error = -1, - PITCH_Ok = 0, - }; - -//void PITCH_Init( void ); -uint32_t PITCH_GetScale( int32_t pitchoffset ); -void PITCH_UnlockMemory( void ); -int32_t PITCH_LockMemory( void ); -#endif diff --git a/polymer-perf/eduke32/source/jaudiolib/src/vorbis.c b/polymer-perf/eduke32/source/jaudiolib/src/vorbis.c deleted file mode 100644 index 0115e1857..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/src/vorbis.c +++ /dev/null @@ -1,423 +0,0 @@ -/* - Copyright (C) 2009 Jonathon Fowler - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - */ - -/** - * OggVorbis source support for MultiVoc - */ - -#ifdef HAVE_VORBIS - -#define OV_EXCLUDE_STATIC_CALLBACKS - -#ifdef __APPLE__ -# include -#else -# include "vorbis/vorbisfile.h" -#endif - -#include -#include -#include -#ifndef _MSC_VER -#include -#endif -#include -#include "pitch.h" -#include "multivoc.h" -#include "_multivc.h" - -#ifndef min -#define min(x,y) ((x) < (y) ? (x) : (y)) -#endif -#ifndef max -#define max(x,y) ((x) > (y) ? (x) : (y)) -#endif - -#define BLOCKSIZE 0x8000 - -typedef struct { - void * ptr; - size_t length; - size_t pos; - - OggVorbis_File vf; - - char block[BLOCKSIZE]; - int32_t lastbitstream; -} vorbis_data; - - -static size_t read_vorbis(void * ptr, size_t size, size_t nmemb, void * datasource) -{ - vorbis_data * vorb = (vorbis_data *) datasource; - size_t nread = 0; - size_t bytes; - - errno = 0; - - if (vorb->length == vorb->pos) { - return 0; - } - - for (; nmemb > 0; nmemb--, nread++) { - bytes = vorb->length - vorb->pos; - if (size < bytes) { - bytes = size; - } - - memcpy(ptr, (uint8_t *)vorb->ptr + vorb->pos, bytes); - vorb->pos += bytes; - ptr = (uint8_t *)ptr + bytes; - - if (vorb->length == vorb->pos) { - nread++; - break; - } - } - - return nread; -} - - -static int32_t seek_vorbis(void * datasource, ogg_int64_t offset, int32_t whence) -{ - vorbis_data * vorb = (vorbis_data *) datasource; - - switch (whence) { - case SEEK_SET: vorb->pos = 0; break; - case SEEK_CUR: break; - case SEEK_END: vorb->pos = vorb->length; break; - } - - vorb->pos += offset; - - if (vorb->pos > vorb->length) { - vorb->pos = vorb->length; - } - - return vorb->pos; -} - -static int32_t close_vorbis(void * datasource) -{ - UNREFERENCED_PARAMETER(datasource); - return 0; -} - -static long tell_vorbis(void * datasource) -{ - vorbis_data * vorb = (vorbis_data *) datasource; - - return vorb->pos; -} - -static ov_callbacks vorbis_callbacks = { - read_vorbis, - seek_vorbis, - close_vorbis, - tell_vorbis -}; - - -/*--------------------------------------------------------------------- -Function: MV_GetNextVorbisBlock - -Controls playback of OggVorbis data ----------------------------------------------------------------------*/ - -static playbackstatus MV_GetNextVorbisBlock -( - VoiceNode *voice - ) - -{ - vorbis_data * vd = (vorbis_data *) voice->extra; - int32_t bytes, bytesread; - int32_t bitstream, err; - - voice->Playing = TRUE; - - bytesread = 0; - do { - bytes = ov_read(&vd->vf, vd->block + bytesread, BLOCKSIZE - bytesread, 0, 2, 1, &bitstream); - //fprintf(stderr, "ov_read = %d\n", bytes); - if (bytes > 0) { bytesread += bytes; continue; } - else if (bytes == OV_HOLE) continue; - else if (bytes == 0) { - if (voice->LoopStart) { - err = ov_pcm_seek_page(&vd->vf, 0); - if (err != 0) { - MV_Printf("MV_GetNextVorbisBlock ov_pcm_seek_page_lap: err %d\n", err); - } else { - continue; - } - } else { - break; - } - } else if (bytes < 0) { - MV_Printf("MV_GetNextVorbisBlock ov_read: err %d\n", bytes); - voice->Playing = FALSE; - return NoMoreData; - } - } while (bytesread < BLOCKSIZE); - - if (bytesread == 0) { - voice->Playing = FALSE; - return NoMoreData; - } - - if (bitstream != vd->lastbitstream) { - vorbis_info * vi = 0; - - vi = ov_info(&vd->vf, -1); - if (!vi || (vi->channels != 1 && vi->channels != 2)) { - voice->Playing = FALSE; - return NoMoreData; - } - - voice->channels = vi->channels; - voice->SamplingRate = vi->rate; - voice->RateScale = ( voice->SamplingRate * voice->PitchScale ) / MV_MixRate; - voice->FixedPointBufferSize = ( voice->RateScale * MixBufferSize ) - voice->RateScale; - MV_SetVoiceMixMode( voice ); - vd->lastbitstream = bitstream; - } - - bytesread /= 2 * voice->channels; - - voice->position = 0; - voice->sound = vd->block; - voice->BlockLength = 0; - voice->length = bytesread << 16; - - return( KeepPlaying ); -} - - -/*--------------------------------------------------------------------- -Function: MV_PlayVorbis3D - -Begin playback of sound data at specified angle and distance -from listener. ----------------------------------------------------------------------*/ - -int32_t MV_PlayVorbis3D -( - char *ptr, - uint32_t ptrlength, - int32_t pitchoffset, - int32_t angle, - int32_t distance, - int32_t priority, - uint32_t callbackval - ) - -{ - int32_t left; - int32_t right; - int32_t mid; - int32_t volume; - int32_t status; - - if ( !MV_Installed ) - { - MV_SetErrorCode( MV_NotInstalled ); - return( MV_Error ); - } - - if ( distance < 0 ) - { - distance = -distance; - angle += MV_NumPanPositions / 2; - } - - volume = MIX_VOLUME( distance ); - - // Ensure angle is within 0 - 31 - angle &= MV_MaxPanPosition; - - left = MV_PanTable[ angle ][ volume ].left; - right = MV_PanTable[ angle ][ volume ].right; - mid = max( 0, 255 - distance ); - - status = MV_PlayVorbis( ptr, ptrlength, pitchoffset, mid, left, right, priority, - callbackval ); - - return( status ); -} - - -/*--------------------------------------------------------------------- -Function: MV_PlayVorbis - -Begin playback of sound data with the given sound levels and -priority. ----------------------------------------------------------------------*/ - -int32_t MV_PlayVorbis -( - char *ptr, - uint32_t ptrlength, - int32_t pitchoffset, - int32_t vol, - int32_t left, - int32_t right, - int32_t priority, - uint32_t callbackval - ) - -{ - int32_t status; - - status = MV_PlayLoopedVorbis( ptr, ptrlength, -1, -1, pitchoffset, vol, left, right, - priority, callbackval ); - - return( status ); -} - - -/*--------------------------------------------------------------------- -Function: MV_PlayLoopedVorbis - -Begin playback of sound data with the given sound levels and -priority. ----------------------------------------------------------------------*/ - -int32_t MV_PlayLoopedVorbis -( - char *ptr, - uint32_t ptrlength, - int32_t loopstart, - int32_t loopend, - int32_t pitchoffset, - int32_t vol, - int32_t left, - int32_t right, - int32_t priority, - uint32_t callbackval - ) - -{ - VoiceNode *voice; - int32_t status; - vorbis_data * vd = 0; - vorbis_info * vi = 0; - - UNREFERENCED_PARAMETER(loopend); - - if ( !MV_Installed ) - { - MV_SetErrorCode( MV_NotInstalled ); - return( MV_Error ); - } - - vd = (vorbis_data *) malloc( sizeof(vorbis_data) ); - if (!vd) { - MV_SetErrorCode( MV_InvalidVorbisFile ); - return MV_Error; - } - - memset(vd, 0, sizeof(vorbis_data)); - vd->ptr = ptr; - vd->pos = 0; - vd->length = ptrlength; - vd->lastbitstream = -1; - - status = ov_open_callbacks((void *) vd, &vd->vf, 0, 0, vorbis_callbacks); - if (status < 0) { - MV_Printf("MV_PlayLoopedVorbis: err %d\n", status); - MV_SetErrorCode( MV_InvalidVorbisFile ); - return MV_Error; - } - - vi = ov_info(&vd->vf, 0); - if (!vi) { - ov_clear(&vd->vf); - free(vd); - MV_SetErrorCode( MV_InvalidVorbisFile ); - return MV_Error; - } - - if (vi->channels != 1 && vi->channels != 2) { - ov_clear(&vd->vf); - free(vd); - MV_SetErrorCode( MV_InvalidVorbisFile ); - return MV_Error; - } - - // Request a voice from the voice pool - voice = MV_AllocVoice( priority ); - if ( voice == NULL ) - { - ov_clear(&vd->vf); - free(vd); - MV_SetErrorCode( MV_NoVoices ); - return( MV_Error ); - } - - voice->wavetype = Vorbis; - voice->bits = 16; - voice->channels = vi->channels; - voice->extra = (void *) vd; - voice->GetSound = MV_GetNextVorbisBlock; - voice->NextBlock = vd->block; - voice->DemandFeed = NULL; - voice->LoopCount = 0; - voice->BlockLength = 0; - voice->PitchScale = PITCH_GetScale( pitchoffset ); - voice->length = 0; - voice->next = NULL; - voice->prev = NULL; - voice->priority = priority; - voice->callbackval = callbackval; - voice->LoopStart = (char *) (loopstart >= 0 ? TRUE : FALSE); - voice->LoopEnd = 0; - voice->LoopSize = 0; - voice->Playing = TRUE; - voice->Paused = FALSE; - - voice->SamplingRate = vi->rate; - voice->RateScale = ( voice->SamplingRate * voice->PitchScale ) / MV_MixRate; - voice->FixedPointBufferSize = ( voice->RateScale * MixBufferSize ) - - voice->RateScale; - MV_SetVoiceMixMode( voice ); - - MV_SetVoiceVolume( voice, vol, left, right ); - MV_PlayVoice( voice ); - - return( voice->handle ); -} - - -void MV_ReleaseVorbisVoice( VoiceNode * voice ) -{ - vorbis_data * vd = (vorbis_data *) voice->extra; - - if (voice->wavetype != Vorbis) { - return; - } - - ov_clear(&vd->vf); - free(vd); - - voice->extra = 0; -} - -#endif //HAVE_VORBIS diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/README.txt b/polymer-perf/eduke32/source/jaudiolib/third-party/README.txt deleted file mode 100644 index 3dbfa6736..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/third-party/README.txt +++ /dev/null @@ -1,13 +0,0 @@ -OS X frameworks compiled from the sources contained in the Max audio ripper -application by Stephen Booth. - - http://svn.sbooth.org/max/trunk/Frameworks/ogg/ - http://svn.sbooth.org/max/trunk/Frameworks/vorbis/ - http://sbooth.org/Max/ - - -MinGW binaries compiled from vanilla Xiph.org libogg-1.1.4 and libvorbis-1.2.3 -on MinGW GCC 3.4.5. - - http://xiph.org/downloads/ - diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/config_types.h b/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/config_types.h deleted file mode 100644 index 327ef0b33..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/config_types.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __CONFIG_TYPES_H__ -#define __CONFIG_TYPES_H__ - -/* these are filled in by configure */ -typedef short ogg_int16_t; -typedef unsigned short ogg_uint16_t; -typedef int ogg_int32_t; -typedef unsigned int ogg_uint32_t; -typedef long long ogg_int64_t; - -#endif diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/ogg.h b/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/ogg.h deleted file mode 100644 index ae0cfd534..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/ogg.h +++ /dev/null @@ -1,208 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: toplevel libogg include - last mod: $Id: ogg.h 16051 2009-05-27 05:00:06Z xiphmont $ - - ********************************************************************/ -#ifndef _OGG_H -#define _OGG_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -typedef struct { - void *iov_base; - size_t iov_len; -} ogg_iovec_t; - -typedef struct { - long endbyte; - int endbit; - - unsigned char *buffer; - unsigned char *ptr; - long storage; -} oggpack_buffer; - -/* ogg_page is used to encapsulate the data in one Ogg bitstream page *****/ - -typedef struct { - unsigned char *header; - long header_len; - unsigned char *body; - long body_len; -} ogg_page; - -/* ogg_stream_state contains the current encode/decode state of a logical - Ogg bitstream **********************************************************/ - -typedef struct { - unsigned char *body_data; /* bytes from packet bodies */ - long body_storage; /* storage elements allocated */ - long body_fill; /* elements stored; fill mark */ - long body_returned; /* elements of fill returned */ - - - int *lacing_vals; /* The values that will go to the segment table */ - ogg_int64_t *granule_vals; /* granulepos values for headers. Not compact - this way, but it is simple coupled to the - lacing fifo */ - long lacing_storage; - long lacing_fill; - long lacing_packet; - long lacing_returned; - - unsigned char header[282]; /* working space for header encode */ - int header_fill; - - int e_o_s; /* set when we have buffered the last packet in the - logical bitstream */ - int b_o_s; /* set after we've written the initial page - of a logical bitstream */ - long serialno; - long pageno; - ogg_int64_t packetno; /* sequence number for decode; the framing - knows where there's a hole in the data, - but we need coupling so that the codec - (which is in a seperate abstraction - layer) also knows about the gap */ - ogg_int64_t granulepos; - -} ogg_stream_state; - -/* ogg_packet is used to encapsulate the data and metadata belonging - to a single raw Ogg/Vorbis packet *************************************/ - -typedef struct { - unsigned char *packet; - long bytes; - long b_o_s; - long e_o_s; - - ogg_int64_t granulepos; - - ogg_int64_t packetno; /* sequence number for decode; the framing - knows where there's a hole in the data, - but we need coupling so that the codec - (which is in a seperate abstraction - layer) also knows about the gap */ -} ogg_packet; - -typedef struct { - unsigned char *data; - int storage; - int fill; - int returned; - - int unsynced; - int headerbytes; - int bodybytes; -} ogg_sync_state; - -/* Ogg BITSTREAM PRIMITIVES: bitstream ************************/ - -extern void oggpack_writeinit(oggpack_buffer *b); -extern int oggpack_writecheck(oggpack_buffer *b); -extern void oggpack_writetrunc(oggpack_buffer *b,long bits); -extern void oggpack_writealign(oggpack_buffer *b); -extern void oggpack_writecopy(oggpack_buffer *b,void *source,long bits); -extern void oggpack_reset(oggpack_buffer *b); -extern void oggpack_writeclear(oggpack_buffer *b); -extern void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes); -extern void oggpack_write(oggpack_buffer *b,unsigned long value,int bits); -extern long oggpack_look(oggpack_buffer *b,int bits); -extern long oggpack_look1(oggpack_buffer *b); -extern void oggpack_adv(oggpack_buffer *b,int bits); -extern void oggpack_adv1(oggpack_buffer *b); -extern long oggpack_read(oggpack_buffer *b,int bits); -extern long oggpack_read1(oggpack_buffer *b); -extern long oggpack_bytes(oggpack_buffer *b); -extern long oggpack_bits(oggpack_buffer *b); -extern unsigned char *oggpack_get_buffer(oggpack_buffer *b); - -extern void oggpackB_writeinit(oggpack_buffer *b); -extern int oggpackB_writecheck(oggpack_buffer *b); -extern void oggpackB_writetrunc(oggpack_buffer *b,long bits); -extern void oggpackB_writealign(oggpack_buffer *b); -extern void oggpackB_writecopy(oggpack_buffer *b,void *source,long bits); -extern void oggpackB_reset(oggpack_buffer *b); -extern void oggpackB_writeclear(oggpack_buffer *b); -extern void oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes); -extern void oggpackB_write(oggpack_buffer *b,unsigned long value,int bits); -extern long oggpackB_look(oggpack_buffer *b,int bits); -extern long oggpackB_look1(oggpack_buffer *b); -extern void oggpackB_adv(oggpack_buffer *b,int bits); -extern void oggpackB_adv1(oggpack_buffer *b); -extern long oggpackB_read(oggpack_buffer *b,int bits); -extern long oggpackB_read1(oggpack_buffer *b); -extern long oggpackB_bytes(oggpack_buffer *b); -extern long oggpackB_bits(oggpack_buffer *b); -extern unsigned char *oggpackB_get_buffer(oggpack_buffer *b); - -/* Ogg BITSTREAM PRIMITIVES: encoding **************************/ - -extern int ogg_stream_packetin(ogg_stream_state *os, ogg_packet *op); -extern int ogg_stream_iovecin(ogg_stream_state *os, ogg_iovec_t *iov, - int count, long e_o_s, ogg_int64_t granulepos); -extern int ogg_stream_pageout(ogg_stream_state *os, ogg_page *og); -extern int ogg_stream_flush(ogg_stream_state *os, ogg_page *og); - -/* Ogg BITSTREAM PRIMITIVES: decoding **************************/ - -extern int ogg_sync_init(ogg_sync_state *oy); -extern int ogg_sync_clear(ogg_sync_state *oy); -extern int ogg_sync_reset(ogg_sync_state *oy); -extern int ogg_sync_destroy(ogg_sync_state *oy); -extern int ogg_sync_check(ogg_sync_state *oy); - -extern char *ogg_sync_buffer(ogg_sync_state *oy, long size); -extern int ogg_sync_wrote(ogg_sync_state *oy, long bytes); -extern long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og); -extern int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og); -extern int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og); -extern int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op); -extern int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op); - -/* Ogg BITSTREAM PRIMITIVES: general ***************************/ - -extern int ogg_stream_init(ogg_stream_state *os,int serialno); -extern int ogg_stream_clear(ogg_stream_state *os); -extern int ogg_stream_reset(ogg_stream_state *os); -extern int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno); -extern int ogg_stream_destroy(ogg_stream_state *os); -extern int ogg_stream_check(ogg_stream_state *os); -extern int ogg_stream_eos(ogg_stream_state *os); - -extern void ogg_page_checksum_set(ogg_page *og); - -extern int ogg_page_version(const ogg_page *og); -extern int ogg_page_continued(const ogg_page *og); -extern int ogg_page_bos(const ogg_page *og); -extern int ogg_page_eos(const ogg_page *og); -extern ogg_int64_t ogg_page_granulepos(const ogg_page *og); -extern int ogg_page_serialno(const ogg_page *og); -extern long ogg_page_pageno(const ogg_page *og); -extern int ogg_page_packets(const ogg_page *og); - -extern void ogg_packet_clear(ogg_packet *op); - - -#ifdef __cplusplus -} -#endif - -#endif /* _OGG_H */ diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/os_types.h b/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/os_types.h deleted file mode 100644 index f6f8b3818..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/ogg/os_types.h +++ /dev/null @@ -1,148 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: #ifdef jail to whip a few platforms into the UNIX ideal. - last mod: $Id: os_types.h 16649 2009-10-25 00:49:58Z ds $ - - ********************************************************************/ -#ifndef _OS_TYPES_H -#define _OS_TYPES_H - -/* make it easy on the folks that want to compile the libs with a - different malloc than stdlib */ -#define _ogg_malloc malloc -#define _ogg_calloc calloc -#define _ogg_realloc realloc -#define _ogg_free free - -#if defined(_WIN32) - -# if defined(__CYGWIN__) -# include - typedef int16_t ogg_int16_t; - typedef uint16_t ogg_uint16_t; - typedef int32_t ogg_int32_t; - typedef uint32_t ogg_uint32_t; - typedef int64_t ogg_int64_t; - typedef uint64_t ogg_uint64_t; -# elif defined(__MINGW32__) -# include - typedef short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long ogg_int64_t; - typedef unsigned long long ogg_uint64_t; -# elif defined(__MWERKS__) - typedef long long ogg_int64_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef short ogg_int16_t; - typedef unsigned short ogg_uint16_t; -# else - /* MSVC/Borland */ - typedef __int64 ogg_int64_t; - typedef __int32 ogg_int32_t; - typedef unsigned __int32 ogg_uint32_t; - typedef __int16 ogg_int16_t; - typedef unsigned __int16 ogg_uint16_t; -# endif - -#elif defined(__MACOS__) - -# include - typedef SInt16 ogg_int16_t; - typedef UInt16 ogg_uint16_t; - typedef SInt32 ogg_int32_t; - typedef UInt32 ogg_uint32_t; - typedef SInt64 ogg_int64_t; - -#elif (defined(__APPLE__) && defined(__MACH__)) /* MacOS X Framework build */ - -# include - typedef int16_t ogg_int16_t; - typedef u_int16_t ogg_uint16_t; - typedef int32_t ogg_int32_t; - typedef u_int32_t ogg_uint32_t; - typedef int64_t ogg_int64_t; - -#elif defined(__HAIKU__) - - /* Haiku */ -# include - typedef short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long ogg_int64_t; - -#elif defined(__BEOS__) - - /* Be */ -# include - typedef int16_t ogg_int16_t; - typedef u_int16_t ogg_uint16_t; - typedef int32_t ogg_int32_t; - typedef u_int32_t ogg_uint32_t; - typedef int64_t ogg_int64_t; - -#elif defined (__EMX__) - - /* OS/2 GCC */ - typedef short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long ogg_int64_t; - -#elif defined (DJGPP) - - /* DJGPP */ - typedef short ogg_int16_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long ogg_int64_t; - -#elif defined(R5900) - - /* PS2 EE */ - typedef long ogg_int64_t; - typedef int ogg_int32_t; - typedef unsigned ogg_uint32_t; - typedef short ogg_int16_t; - -#elif defined(__SYMBIAN32__) - - /* Symbian GCC */ - typedef signed short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef signed int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long int ogg_int64_t; - -#elif defined(__TMS320C6X__) - - /* TI C64x compiler */ - typedef signed short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef signed int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long int ogg_int64_t; - -#else - -# include -# include - -#endif - -#endif /* _OS_TYPES_H */ diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/vorbis/codec.h b/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/vorbis/codec.h deleted file mode 100644 index 999aa3351..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/vorbis/codec.h +++ /dev/null @@ -1,243 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - - ******************************************************************** - - function: libvorbis codec headers - last mod: $Id: codec.h 17021 2010-03-24 09:29:41Z xiphmont $ - - ********************************************************************/ - -#ifndef _vorbis_codec_h_ -#define _vorbis_codec_h_ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -#include - -typedef struct vorbis_info{ - int version; - int channels; - long rate; - - /* The below bitrate declarations are *hints*. - Combinations of the three values carry the following implications: - - all three set to the same value: - implies a fixed rate bitstream - only nominal set: - implies a VBR stream that averages the nominal bitrate. No hard - upper/lower limit - upper and or lower set: - implies a VBR bitstream that obeys the bitrate limits. nominal - may also be set to give a nominal rate. - none set: - the coder does not care to speculate. - */ - - long bitrate_upper; - long bitrate_nominal; - long bitrate_lower; - long bitrate_window; - - void *codec_setup; -} vorbis_info; - -/* vorbis_dsp_state buffers the current vorbis audio - analysis/synthesis state. The DSP state belongs to a specific - logical bitstream ****************************************************/ -typedef struct vorbis_dsp_state{ - int analysisp; - vorbis_info *vi; - - float **pcm; - float **pcmret; - int pcm_storage; - int pcm_current; - int pcm_returned; - - int preextrapolate; - int eofflag; - - long lW; - long W; - long nW; - long centerW; - - ogg_int64_t granulepos; - ogg_int64_t sequence; - - ogg_int64_t glue_bits; - ogg_int64_t time_bits; - ogg_int64_t floor_bits; - ogg_int64_t res_bits; - - void *backend_state; -} vorbis_dsp_state; - -typedef struct vorbis_block{ - /* necessary stream state for linking to the framing abstraction */ - float **pcm; /* this is a pointer into local storage */ - oggpack_buffer opb; - - long lW; - long W; - long nW; - int pcmend; - int mode; - - int eofflag; - ogg_int64_t granulepos; - ogg_int64_t sequence; - vorbis_dsp_state *vd; /* For read-only access of configuration */ - - /* local storage to avoid remallocing; it's up to the mapping to - structure it */ - void *localstore; - long localtop; - long localalloc; - long totaluse; - struct alloc_chain *reap; - - /* bitmetrics for the frame */ - long glue_bits; - long time_bits; - long floor_bits; - long res_bits; - - void *internal; - -} vorbis_block; - -/* vorbis_block is a single block of data to be processed as part of -the analysis/synthesis stream; it belongs to a specific logical -bitstream, but is independent from other vorbis_blocks belonging to -that logical bitstream. *************************************************/ - -struct alloc_chain{ - void *ptr; - struct alloc_chain *next; -}; - -/* vorbis_info contains all the setup information specific to the - specific compression/decompression mode in progress (eg, - psychoacoustic settings, channel setup, options, codebook - etc). vorbis_info and substructures are in backends.h. -*********************************************************************/ - -/* the comments are not part of vorbis_info so that vorbis_info can be - static storage */ -typedef struct vorbis_comment{ - /* unlimited user comment fields. libvorbis writes 'libvorbis' - whatever vendor is set to in encode */ - char **user_comments; - int *comment_lengths; - int comments; - char *vendor; - -} vorbis_comment; - - -/* libvorbis encodes in two abstraction layers; first we perform DSP - and produce a packet (see docs/analysis.txt). The packet is then - coded into a framed OggSquish bitstream by the second layer (see - docs/framing.txt). Decode is the reverse process; we sync/frame - the bitstream and extract individual packets, then decode the - packet back into PCM audio. - - The extra framing/packetizing is used in streaming formats, such as - files. Over the net (such as with UDP), the framing and - packetization aren't necessary as they're provided by the transport - and the streaming layer is not used */ - -/* Vorbis PRIMITIVES: general ***************************************/ - -extern void vorbis_info_init(vorbis_info *vi); -extern void vorbis_info_clear(vorbis_info *vi); -extern int vorbis_info_blocksize(vorbis_info *vi,int zo); -extern void vorbis_comment_init(vorbis_comment *vc); -extern void vorbis_comment_add(vorbis_comment *vc, const char *comment); -extern void vorbis_comment_add_tag(vorbis_comment *vc, - const char *tag, const char *contents); -extern char *vorbis_comment_query(vorbis_comment *vc, const char *tag, int count); -extern int vorbis_comment_query_count(vorbis_comment *vc, const char *tag); -extern void vorbis_comment_clear(vorbis_comment *vc); - -extern int vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb); -extern int vorbis_block_clear(vorbis_block *vb); -extern void vorbis_dsp_clear(vorbis_dsp_state *v); -extern double vorbis_granule_time(vorbis_dsp_state *v, - ogg_int64_t granulepos); - -extern const char *vorbis_version_string(void); - -/* Vorbis PRIMITIVES: analysis/DSP layer ****************************/ - -extern int vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi); -extern int vorbis_commentheader_out(vorbis_comment *vc, ogg_packet *op); -extern int vorbis_analysis_headerout(vorbis_dsp_state *v, - vorbis_comment *vc, - ogg_packet *op, - ogg_packet *op_comm, - ogg_packet *op_code); -extern float **vorbis_analysis_buffer(vorbis_dsp_state *v,int vals); -extern int vorbis_analysis_wrote(vorbis_dsp_state *v,int vals); -extern int vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb); -extern int vorbis_analysis(vorbis_block *vb,ogg_packet *op); - -extern int vorbis_bitrate_addblock(vorbis_block *vb); -extern int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd, - ogg_packet *op); - -/* Vorbis PRIMITIVES: synthesis layer *******************************/ -extern int vorbis_synthesis_idheader(ogg_packet *op); -extern int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc, - ogg_packet *op); - -extern int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi); -extern int vorbis_synthesis_restart(vorbis_dsp_state *v); -extern int vorbis_synthesis(vorbis_block *vb,ogg_packet *op); -extern int vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op); -extern int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb); -extern int vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm); -extern int vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm); -extern int vorbis_synthesis_read(vorbis_dsp_state *v,int samples); -extern long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op); - -extern int vorbis_synthesis_halfrate(vorbis_info *v,int flag); -extern int vorbis_synthesis_halfrate_p(vorbis_info *v); - -/* Vorbis ERRORS and return codes ***********************************/ - -#define OV_FALSE -1 -#define OV_EOF -2 -#define OV_HOLE -3 - -#define OV_EREAD -128 -#define OV_EFAULT -129 -#define OV_EIMPL -130 -#define OV_EINVAL -131 -#define OV_ENOTVORBIS -132 -#define OV_EBADHEADER -133 -#define OV_EVERSION -134 -#define OV_ENOTAUDIO -135 -#define OV_EBADPACKET -136 -#define OV_EBADLINK -137 -#define OV_ENOSEEK -138 - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif - diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/vorbis/vorbisfile.h b/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/vorbis/vorbisfile.h deleted file mode 100644 index a865cd097..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/include/vorbis/vorbisfile.h +++ /dev/null @@ -1,206 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: stdio-based convenience library for opening/seeking/decoding - last mod: $Id: vorbisfile.h 17021 2010-03-24 09:29:41Z xiphmont $ - - ********************************************************************/ - -#ifndef _OV_FILE_H_ -#define _OV_FILE_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -#include -#include "codec.h" - -/* The function prototypes for the callbacks are basically the same as for - * the stdio functions fread, fseek, fclose, ftell. - * The one difference is that the FILE * arguments have been replaced with - * a void * - this is to be used as a pointer to whatever internal data these - * functions might need. In the stdio case, it's just a FILE * cast to a void * - * - * If you use other functions, check the docs for these functions and return - * the right values. For seek_func(), you *MUST* return -1 if the stream is - * unseekable - */ -typedef struct { - size_t (*read_func) (void *ptr, size_t size, size_t nmemb, void *datasource); - int (*seek_func) (void *datasource, ogg_int64_t offset, int whence); - int (*close_func) (void *datasource); - long (*tell_func) (void *datasource); -} ov_callbacks; - -#ifndef OV_EXCLUDE_STATIC_CALLBACKS - -/* a few sets of convenient callbacks, especially for use under - * Windows where ov_open_callbacks() should always be used instead of - * ov_open() to avoid problems with incompatible crt.o version linking - * issues. */ - -static int _ov_header_fseek_wrap(FILE *f,ogg_int64_t off,int whence){ - if(f==NULL)return(-1); - -#ifdef __MINGW32__ - return fseeko64(f,off,whence); -#elif defined (_WIN32) - return _fseeki64(f,off,whence); -#else - return fseek(f,off,whence); -#endif -} - -/* These structs below (OV_CALLBACKS_DEFAULT etc) are defined here as - * static data. That means that every file which includes this header - * will get its own copy of these structs whether it uses them or - * not unless it #defines OV_EXCLUDE_STATIC_CALLBACKS. - * These static symbols are essential on platforms such as Windows on - * which several different versions of stdio support may be linked to - * by different DLLs, and we need to be certain we know which one - * we're using (the same one as the main application). - */ - -static ov_callbacks OV_CALLBACKS_DEFAULT = { - (size_t (*)(void *, size_t, size_t, void *)) fread, - (int (*)(void *, ogg_int64_t, int)) _ov_header_fseek_wrap, - (int (*)(void *)) fclose, - (long (*)(void *)) ftell -}; - -static ov_callbacks OV_CALLBACKS_NOCLOSE = { - (size_t (*)(void *, size_t, size_t, void *)) fread, - (int (*)(void *, ogg_int64_t, int)) _ov_header_fseek_wrap, - (int (*)(void *)) NULL, - (long (*)(void *)) ftell -}; - -static ov_callbacks OV_CALLBACKS_STREAMONLY = { - (size_t (*)(void *, size_t, size_t, void *)) fread, - (int (*)(void *, ogg_int64_t, int)) NULL, - (int (*)(void *)) fclose, - (long (*)(void *)) NULL -}; - -static ov_callbacks OV_CALLBACKS_STREAMONLY_NOCLOSE = { - (size_t (*)(void *, size_t, size_t, void *)) fread, - (int (*)(void *, ogg_int64_t, int)) NULL, - (int (*)(void *)) NULL, - (long (*)(void *)) NULL -}; - -#endif - -#define NOTOPEN 0 -#define PARTOPEN 1 -#define OPENED 2 -#define STREAMSET 3 -#define INITSET 4 - -typedef struct OggVorbis_File { - void *datasource; /* Pointer to a FILE *, etc. */ - int seekable; - ogg_int64_t offset; - ogg_int64_t end; - ogg_sync_state oy; - - /* If the FILE handle isn't seekable (eg, a pipe), only the current - stream appears */ - int links; - ogg_int64_t *offsets; - ogg_int64_t *dataoffsets; - long *serialnos; - ogg_int64_t *pcmlengths; /* overloaded to maintain binary - compatibility; x2 size, stores both - beginning and end values */ - vorbis_info *vi; - vorbis_comment *vc; - - /* Decoding working state local storage */ - ogg_int64_t pcm_offset; - int ready_state; - long current_serialno; - int current_link; - - double bittrack; - double samptrack; - - ogg_stream_state os; /* take physical pages, weld into a logical - stream of packets */ - vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */ - vorbis_block vb; /* local working space for packet->PCM decode */ - - ov_callbacks callbacks; - -} OggVorbis_File; - - -extern int ov_clear(OggVorbis_File *vf); -extern int ov_fopen(char *path,OggVorbis_File *vf); -extern int ov_open(FILE *f,OggVorbis_File *vf,char *initial,long ibytes); -extern int ov_open_callbacks(void *datasource, OggVorbis_File *vf, - char *initial, long ibytes, ov_callbacks callbacks); - -extern int ov_test(FILE *f,OggVorbis_File *vf,char *initial,long ibytes); -extern int ov_test_callbacks(void *datasource, OggVorbis_File *vf, - char *initial, long ibytes, ov_callbacks callbacks); -extern int ov_test_open(OggVorbis_File *vf); - -extern long ov_bitrate(OggVorbis_File *vf,int i); -extern long ov_bitrate_instant(OggVorbis_File *vf); -extern long ov_streams(OggVorbis_File *vf); -extern long ov_seekable(OggVorbis_File *vf); -extern long ov_serialnumber(OggVorbis_File *vf,int i); - -extern ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i); -extern ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i); -extern double ov_time_total(OggVorbis_File *vf,int i); - -extern int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_time_seek(OggVorbis_File *vf,double pos); -extern int ov_time_seek_page(OggVorbis_File *vf,double pos); - -extern int ov_raw_seek_lap(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_pcm_seek_lap(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_pcm_seek_page_lap(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_time_seek_lap(OggVorbis_File *vf,double pos); -extern int ov_time_seek_page_lap(OggVorbis_File *vf,double pos); - -extern ogg_int64_t ov_raw_tell(OggVorbis_File *vf); -extern ogg_int64_t ov_pcm_tell(OggVorbis_File *vf); -extern double ov_time_tell(OggVorbis_File *vf); - -extern vorbis_info *ov_info(OggVorbis_File *vf,int link); -extern vorbis_comment *ov_comment(OggVorbis_File *vf,int link); - -extern long ov_read_float(OggVorbis_File *vf,float ***pcm_channels,int samples, - int *bitstream); -extern long ov_read_filter(OggVorbis_File *vf,char *buffer,int length, - int bigendianp,int word,int sgned,int *bitstream, - void (*filter)(float **pcm,long channels,long samples,void *filter_param),void *filter_param); -extern long ov_read(OggVorbis_File *vf,char *buffer,int length, - int bigendianp,int word,int sgned,int *bitstream); -extern int ov_crosslap(OggVorbis_File *vf1,OggVorbis_File *vf2); - -extern int ov_halfrate(OggVorbis_File *vf,int flag); -extern int ov_halfrate_p(OggVorbis_File *vf); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif - diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/lib/libogg.a b/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/lib/libogg.a deleted file mode 100644 index b994dd5edf4a3e9713c77ecf3168633f3d865c19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51492 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%0D*L7fZg5;BPaducQsDxQY13yy+|tX@ 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 Yt(X_Sb$TMj5AhCjQ+U>_ne#mV4=PXgga7~l diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/lib/libvorbisfile.a b/polymer-perf/eduke32/source/jaudiolib/third-party/mingw32/lib/libvorbisfile.a deleted file mode 100644 index d569345099a004f562b82a25f5db600348dd89ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28858 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 - -typedef struct { - long endbyte; - int endbit; - - unsigned char *buffer; - unsigned char *ptr; - long storage; -} oggpack_buffer; - -/* ogg_page is used to encapsulate the data in one Ogg bitstream page *****/ - -typedef struct { - unsigned char *header; - long header_len; - unsigned char *body; - long body_len; -} ogg_page; - -/* ogg_stream_state contains the current encode/decode state of a logical - Ogg bitstream **********************************************************/ - -typedef struct { - unsigned char *body_data; /* bytes from packet bodies */ - long body_storage; /* storage elements allocated */ - long body_fill; /* elements stored; fill mark */ - long body_returned; /* elements of fill returned */ - - - int *lacing_vals; /* The values that will go to the segment table */ - ogg_int64_t *granule_vals; /* granulepos values for headers. Not compact - this way, but it is simple coupled to the - lacing fifo */ - long lacing_storage; - long lacing_fill; - long lacing_packet; - long lacing_returned; - - unsigned char header[282]; /* working space for header encode */ - int header_fill; - - int e_o_s; /* set when we have buffered the last packet in the - logical bitstream */ - int b_o_s; /* set after we've written the initial page - of a logical bitstream */ - long serialno; - long pageno; - ogg_int64_t packetno; /* sequence number for decode; the framing - knows where there's a hole in the data, - but we need coupling so that the codec - (which is in a seperate abstraction - layer) also knows about the gap */ - ogg_int64_t granulepos; - -} ogg_stream_state; - -/* ogg_packet is used to encapsulate the data and metadata belonging - to a single raw Ogg/Vorbis packet *************************************/ - -typedef struct { - unsigned char *packet; - long bytes; - long b_o_s; - long e_o_s; - - ogg_int64_t granulepos; - - ogg_int64_t packetno; /* sequence number for decode; the framing - knows where there's a hole in the data, - but we need coupling so that the codec - (which is in a seperate abstraction - layer) also knows about the gap */ -} ogg_packet; - -typedef struct { - unsigned char *data; - int storage; - int fill; - int returned; - - int unsynced; - int headerbytes; - int bodybytes; -} ogg_sync_state; - -/* Ogg BITSTREAM PRIMITIVES: bitstream ************************/ - -extern void oggpack_writeinit(oggpack_buffer *b); -extern void oggpack_writetrunc(oggpack_buffer *b,long bits); -extern void oggpack_writealign(oggpack_buffer *b); -extern void oggpack_writecopy(oggpack_buffer *b,void *source,long bits); -extern void oggpack_reset(oggpack_buffer *b); -extern void oggpack_writeclear(oggpack_buffer *b); -extern void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes); -extern void oggpack_write(oggpack_buffer *b,unsigned long value,int bits); -extern long oggpack_look(oggpack_buffer *b,int bits); -extern long oggpack_look1(oggpack_buffer *b); -extern void oggpack_adv(oggpack_buffer *b,int bits); -extern void oggpack_adv1(oggpack_buffer *b); -extern long oggpack_read(oggpack_buffer *b,int bits); -extern long oggpack_read1(oggpack_buffer *b); -extern long oggpack_bytes(oggpack_buffer *b); -extern long oggpack_bits(oggpack_buffer *b); -extern unsigned char *oggpack_get_buffer(oggpack_buffer *b); - -extern void oggpackB_writeinit(oggpack_buffer *b); -extern void oggpackB_writetrunc(oggpack_buffer *b,long bits); -extern void oggpackB_writealign(oggpack_buffer *b); -extern void oggpackB_writecopy(oggpack_buffer *b,void *source,long bits); -extern void oggpackB_reset(oggpack_buffer *b); -extern void oggpackB_writeclear(oggpack_buffer *b); -extern void oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes); -extern void oggpackB_write(oggpack_buffer *b,unsigned long value,int bits); -extern long oggpackB_look(oggpack_buffer *b,int bits); -extern long oggpackB_look1(oggpack_buffer *b); -extern void oggpackB_adv(oggpack_buffer *b,int bits); -extern void oggpackB_adv1(oggpack_buffer *b); -extern long oggpackB_read(oggpack_buffer *b,int bits); -extern long oggpackB_read1(oggpack_buffer *b); -extern long oggpackB_bytes(oggpack_buffer *b); -extern long oggpackB_bits(oggpack_buffer *b); -extern unsigned char *oggpackB_get_buffer(oggpack_buffer *b); - -/* Ogg BITSTREAM PRIMITIVES: encoding **************************/ - -extern int ogg_stream_packetin(ogg_stream_state *os, ogg_packet *op); -extern int ogg_stream_pageout(ogg_stream_state *os, ogg_page *og); -extern int ogg_stream_flush(ogg_stream_state *os, ogg_page *og); - -/* Ogg BITSTREAM PRIMITIVES: decoding **************************/ - -extern int ogg_sync_init(ogg_sync_state *oy); -extern int ogg_sync_clear(ogg_sync_state *oy); -extern int ogg_sync_reset(ogg_sync_state *oy); -extern int ogg_sync_destroy(ogg_sync_state *oy); - -extern char *ogg_sync_buffer(ogg_sync_state *oy, long size); -extern int ogg_sync_wrote(ogg_sync_state *oy, long bytes); -extern long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og); -extern int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og); -extern int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og); -extern int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op); -extern int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op); - -/* Ogg BITSTREAM PRIMITIVES: general ***************************/ - -extern int ogg_stream_init(ogg_stream_state *os,int serialno); -extern int ogg_stream_clear(ogg_stream_state *os); -extern int ogg_stream_reset(ogg_stream_state *os); -extern int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno); -extern int ogg_stream_destroy(ogg_stream_state *os); -extern int ogg_stream_eos(ogg_stream_state *os); - -extern void ogg_page_checksum_set(ogg_page *og); - -extern int ogg_page_version(ogg_page *og); -extern int ogg_page_continued(ogg_page *og); -extern int ogg_page_bos(ogg_page *og); -extern int ogg_page_eos(ogg_page *og); -extern ogg_int64_t ogg_page_granulepos(ogg_page *og); -extern int ogg_page_serialno(ogg_page *og); -extern long ogg_page_pageno(ogg_page *og); -extern int ogg_page_packets(ogg_page *og); - -extern void ogg_packet_clear(ogg_packet *op); - - -#ifdef __cplusplus -} -#endif - -#endif /* _OGG_H */ - - - - - - diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Headers/os_types.h b/polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Headers/os_types.h deleted file mode 100644 index 32dcb8bff..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Headers/os_types.h +++ /dev/null @@ -1,127 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: #ifdef jail to whip a few platforms into the UNIX ideal. - last mod: $Id: os_types.h 7524 2004-08-11 04:20:36Z conrad $ - - ********************************************************************/ -#ifndef _OS_TYPES_H -#define _OS_TYPES_H - -/* make it easy on the folks that want to compile the libs with a - different malloc than stdlib */ -#define _ogg_malloc malloc -#define _ogg_calloc calloc -#define _ogg_realloc realloc -#define _ogg_free free - -#if defined(_WIN32) - -# if defined(__CYGWIN__) -# include <_G_config.h> - typedef _G_int64_t ogg_int64_t; - typedef _G_int32_t ogg_int32_t; - typedef _G_uint32_t ogg_uint32_t; - typedef _G_int16_t ogg_int16_t; - typedef _G_uint16_t ogg_uint16_t; -# elif defined(__MINGW32__) - typedef short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long ogg_int64_t; - typedef unsigned long long ogg_uint64_t; -# elif defined(__MWERKS__) - typedef long long ogg_int64_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef short ogg_int16_t; - typedef unsigned short ogg_uint16_t; -# else - /* MSVC/Borland */ - typedef __int64 ogg_int64_t; - typedef __int32 ogg_int32_t; - typedef unsigned __int32 ogg_uint32_t; - typedef __int16 ogg_int16_t; - typedef unsigned __int16 ogg_uint16_t; -# endif - -#elif defined(__MACOS__) - -# include - typedef SInt16 ogg_int16_t; - typedef UInt16 ogg_uint16_t; - typedef SInt32 ogg_int32_t; - typedef UInt32 ogg_uint32_t; - typedef SInt64 ogg_int64_t; - -#elif defined(__MACOSX__) /* MacOS X Framework build */ - -# include - typedef int16_t ogg_int16_t; - typedef u_int16_t ogg_uint16_t; - typedef int32_t ogg_int32_t; - typedef u_int32_t ogg_uint32_t; - typedef int64_t ogg_int64_t; - -#elif defined(__BEOS__) - - /* Be */ -# include - typedef int16_t ogg_int16_t; - typedef u_int16_t ogg_uint16_t; - typedef int32_t ogg_int32_t; - typedef u_int32_t ogg_uint32_t; - typedef int64_t ogg_int64_t; - -#elif defined (__EMX__) - - /* OS/2 GCC */ - typedef short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long ogg_int64_t; - -#elif defined (DJGPP) - - /* DJGPP */ - typedef short ogg_int16_t; - typedef int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long ogg_int64_t; - -#elif defined(R5900) - - /* PS2 EE */ - typedef long ogg_int64_t; - typedef int ogg_int32_t; - typedef unsigned ogg_uint32_t; - typedef short ogg_int16_t; - -#elif defined(__SYMBIAN32__) - - /* Symbian GCC */ - typedef signed short ogg_int16_t; - typedef unsigned short ogg_uint16_t; - typedef signed int ogg_int32_t; - typedef unsigned int ogg_uint32_t; - typedef long long int ogg_int64_t; - -#else - -# include -# include - -#endif - -#endif /* _OS_TYPES_H */ diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Resources/English.lproj/InfoPlist.strings b/polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Resources/English.lproj/InfoPlist.strings deleted file mode 100644 index 7080cf949924e8817cb2121399f078b287079883..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmW-ZOAf&R6h+Utt7r@xK@3d9$bMd*s%ZBv=Kme5Fyy^_xDn;J8+CjLwb{$gz->i_@% diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Resources/Info.plist b/polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index 4b6c1a8d5..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - ogg - CFBundleIdentifier - com.yourcompany.yourcocoaframework - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ogg - CFBundlePackageType - FMWK - CFBundleSignature - ???? - CFBundleVersion - 1.0 - - diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/ogg b/polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/A/ogg deleted file mode 100755 index 9e4a0555ee6d103601b65cca98f52fe64a0b2c4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48348 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 diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/Current b/polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/Current deleted file mode 120000 index 8c7e5a667..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/ogg b/polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/ogg deleted file mode 120000 index aa84ee717..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/third-party/ogg.framework/ogg +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/ogg \ No newline at end of file diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Headers b/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Headers deleted file mode 120000 index a177d2a6b..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Resources b/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Resources deleted file mode 120000 index 953ee36f3..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/codec.h b/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/codec.h deleted file mode 100644 index 03f29bf36..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/codec.h +++ /dev/null @@ -1,240 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - - ******************************************************************** - - function: libvorbis codec headers - last mod: $Id: codec.h 7485 2004-08-05 14:54:23Z thomasvs $ - - ********************************************************************/ - -#ifndef _vorbis_codec_h_ -#define _vorbis_codec_h_ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -#include - -typedef struct vorbis_info{ - int version; - int channels; - long rate; - - /* The below bitrate declarations are *hints*. - Combinations of the three values carry the following implications: - - all three set to the same value: - implies a fixed rate bitstream - only nominal set: - implies a VBR stream that averages the nominal bitrate. No hard - upper/lower limit - upper and or lower set: - implies a VBR bitstream that obeys the bitrate limits. nominal - may also be set to give a nominal rate. - none set: - the coder does not care to speculate. - */ - - long bitrate_upper; - long bitrate_nominal; - long bitrate_lower; - long bitrate_window; - - void *codec_setup; -} vorbis_info; - -/* vorbis_dsp_state buffers the current vorbis audio - analysis/synthesis state. The DSP state belongs to a specific - logical bitstream ****************************************************/ -typedef struct vorbis_dsp_state{ - int analysisp; - vorbis_info *vi; - - float **pcm; - float **pcmret; - int pcm_storage; - int pcm_current; - int pcm_returned; - - int preextrapolate; - int eofflag; - - long lW; - long W; - long nW; - long centerW; - - ogg_int64_t granulepos; - ogg_int64_t sequence; - - ogg_int64_t glue_bits; - ogg_int64_t time_bits; - ogg_int64_t floor_bits; - ogg_int64_t res_bits; - - void *backend_state; -} vorbis_dsp_state; - -typedef struct vorbis_block{ - /* necessary stream state for linking to the framing abstraction */ - float **pcm; /* this is a pointer into local storage */ - oggpack_buffer opb; - - long lW; - long W; - long nW; - int pcmend; - int mode; - - int eofflag; - ogg_int64_t granulepos; - ogg_int64_t sequence; - vorbis_dsp_state *vd; /* For read-only access of configuration */ - - /* local storage to avoid remallocing; it's up to the mapping to - structure it */ - void *localstore; - long localtop; - long localalloc; - long totaluse; - struct alloc_chain *reap; - - /* bitmetrics for the frame */ - long glue_bits; - long time_bits; - long floor_bits; - long res_bits; - - void *internal; - -} vorbis_block; - -/* vorbis_block is a single block of data to be processed as part of -the analysis/synthesis stream; it belongs to a specific logical -bitstream, but is independant from other vorbis_blocks belonging to -that logical bitstream. *************************************************/ - -struct alloc_chain{ - void *ptr; - struct alloc_chain *next; -}; - -/* vorbis_info contains all the setup information specific to the - specific compression/decompression mode in progress (eg, - psychoacoustic settings, channel setup, options, codebook - etc). vorbis_info and substructures are in backends.h. -*********************************************************************/ - -/* the comments are not part of vorbis_info so that vorbis_info can be - static storage */ -typedef struct vorbis_comment{ - /* unlimited user comment fields. libvorbis writes 'libvorbis' - whatever vendor is set to in encode */ - char **user_comments; - int *comment_lengths; - int comments; - char *vendor; - -} vorbis_comment; - - -/* libvorbis encodes in two abstraction layers; first we perform DSP - and produce a packet (see docs/analysis.txt). The packet is then - coded into a framed OggSquish bitstream by the second layer (see - docs/framing.txt). Decode is the reverse process; we sync/frame - the bitstream and extract individual packets, then decode the - packet back into PCM audio. - - The extra framing/packetizing is used in streaming formats, such as - files. Over the net (such as with UDP), the framing and - packetization aren't necessary as they're provided by the transport - and the streaming layer is not used */ - -/* Vorbis PRIMITIVES: general ***************************************/ - -extern void vorbis_info_init(vorbis_info *vi); -extern void vorbis_info_clear(vorbis_info *vi); -extern int vorbis_info_blocksize(vorbis_info *vi,int zo); -extern void vorbis_comment_init(vorbis_comment *vc); -extern void vorbis_comment_add(vorbis_comment *vc, char *comment); -extern void vorbis_comment_add_tag(vorbis_comment *vc, - char *tag, char *contents); -extern char *vorbis_comment_query(vorbis_comment *vc, char *tag, int count); -extern int vorbis_comment_query_count(vorbis_comment *vc, char *tag); -extern void vorbis_comment_clear(vorbis_comment *vc); - -extern int vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb); -extern int vorbis_block_clear(vorbis_block *vb); -extern void vorbis_dsp_clear(vorbis_dsp_state *v); -extern double vorbis_granule_time(vorbis_dsp_state *v, - ogg_int64_t granulepos); - -/* Vorbis PRIMITIVES: analysis/DSP layer ****************************/ - -extern int vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi); -extern int vorbis_commentheader_out(vorbis_comment *vc, ogg_packet *op); -extern int vorbis_analysis_headerout(vorbis_dsp_state *v, - vorbis_comment *vc, - ogg_packet *op, - ogg_packet *op_comm, - ogg_packet *op_code); -extern float **vorbis_analysis_buffer(vorbis_dsp_state *v,int vals); -extern int vorbis_analysis_wrote(vorbis_dsp_state *v,int vals); -extern int vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb); -extern int vorbis_analysis(vorbis_block *vb,ogg_packet *op); - -extern int vorbis_bitrate_addblock(vorbis_block *vb); -extern int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd, - ogg_packet *op); - -/* Vorbis PRIMITIVES: synthesis layer *******************************/ -extern int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc, - ogg_packet *op); - -extern int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi); -extern int vorbis_synthesis_restart(vorbis_dsp_state *v); -extern int vorbis_synthesis(vorbis_block *vb,ogg_packet *op); -extern int vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op); -extern int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb); -extern int vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm); -extern int vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm); -extern int vorbis_synthesis_read(vorbis_dsp_state *v,int samples); -extern long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op); - -extern int vorbis_synthesis_halfrate(vorbis_info *v,int flag); -extern int vorbis_synthesis_halfrate_p(vorbis_info *v); - -/* Vorbis ERRORS and return codes ***********************************/ - -#define OV_FALSE -1 -#define OV_EOF -2 -#define OV_HOLE -3 - -#define OV_EREAD -128 -#define OV_EFAULT -129 -#define OV_EIMPL -130 -#define OV_EINVAL -131 -#define OV_ENOTVORBIS -132 -#define OV_EBADHEADER -133 -#define OV_EVERSION -134 -#define OV_ENOTAUDIO -135 -#define OV_EBADPACKET -136 -#define OV_EBADLINK -137 -#define OV_ENOSEEK -138 - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif - diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/vorbisenc.h b/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/vorbisenc.h deleted file mode 100644 index a60081ac9..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/vorbisenc.h +++ /dev/null @@ -1,112 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: vorbis encode-engine setup - last mod: $Id: vorbisenc.h 7485 2004-08-05 14:54:23Z thomasvs $ - - ********************************************************************/ - -#ifndef _OV_ENC_H_ -#define _OV_ENC_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -#include "codec.h" - -extern int vorbis_encode_init(vorbis_info *vi, - long channels, - long rate, - - long max_bitrate, - long nominal_bitrate, - long min_bitrate); - -extern int vorbis_encode_setup_managed(vorbis_info *vi, - long channels, - long rate, - - long max_bitrate, - long nominal_bitrate, - long min_bitrate); - -extern int vorbis_encode_setup_vbr(vorbis_info *vi, - long channels, - long rate, - - float quality /* quality level from 0. (lo) to 1. (hi) */ - ); - -extern int vorbis_encode_init_vbr(vorbis_info *vi, - long channels, - long rate, - - float base_quality /* quality level from 0. (lo) to 1. (hi) */ - ); - -extern int vorbis_encode_setup_init(vorbis_info *vi); - -extern int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg); - - /* deprecated rate management supported only for compatability */ -#define OV_ECTL_RATEMANAGE_GET 0x10 -#define OV_ECTL_RATEMANAGE_SET 0x11 -#define OV_ECTL_RATEMANAGE_AVG 0x12 -#define OV_ECTL_RATEMANAGE_HARD 0x13 - -struct ovectl_ratemanage_arg { - int management_active; - - long bitrate_hard_min; - long bitrate_hard_max; - double bitrate_hard_window; - - long bitrate_av_lo; - long bitrate_av_hi; - double bitrate_av_window; - double bitrate_av_window_center; -}; - - - /* new rate setup */ -#define OV_ECTL_RATEMANAGE2_GET 0x14 -#define OV_ECTL_RATEMANAGE2_SET 0x15 - -struct ovectl_ratemanage2_arg { - int management_active; - - long bitrate_limit_min_kbps; - long bitrate_limit_max_kbps; - long bitrate_limit_reservoir_bits; - double bitrate_limit_reservoir_bias; - - long bitrate_average_kbps; - double bitrate_average_damping; -}; - - - -#define OV_ECTL_LOWPASS_GET 0x20 -#define OV_ECTL_LOWPASS_SET 0x21 - -#define OV_ECTL_IBLOCK_GET 0x30 -#define OV_ECTL_IBLOCK_SET 0x31 - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif - - diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/vorbisfile.h b/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/vorbisfile.h deleted file mode 100644 index 259fa89b6..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Headers/vorbisfile.h +++ /dev/null @@ -1,143 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 * - * by the XIPHOPHORUS Company http://www.xiph.org/ * - * * - ******************************************************************** - - function: stdio-based convenience library for opening/seeking/decoding - last mod: $Id: vorbisfile.h 7485 2004-08-05 14:54:23Z thomasvs $ - - ********************************************************************/ - -#ifndef _OV_FILE_H_ -#define _OV_FILE_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -#include -#include "codec.h" - -/* The function prototypes for the callbacks are basically the same as for - * the stdio functions fread, fseek, fclose, ftell. - * The one difference is that the FILE * arguments have been replaced with - * a void * - this is to be used as a pointer to whatever internal data these - * functions might need. In the stdio case, it's just a FILE * cast to a void * - * - * If you use other functions, check the docs for these functions and return - * the right values. For seek_func(), you *MUST* return -1 if the stream is - * unseekable - */ -typedef struct { - size_t (*read_func) (void *ptr, size_t size, size_t nmemb, void *datasource); - int (*seek_func) (void *datasource, ogg_int64_t offset, int whence); - int (*close_func) (void *datasource); - long (*tell_func) (void *datasource); -} ov_callbacks; - -#define NOTOPEN 0 -#define PARTOPEN 1 -#define OPENED 2 -#define STREAMSET 3 -#define INITSET 4 - -typedef struct OggVorbis_File { - void *datasource; /* Pointer to a FILE *, etc. */ - int seekable; - ogg_int64_t offset; - ogg_int64_t end; - ogg_sync_state oy; - - /* If the FILE handle isn't seekable (eg, a pipe), only the current - stream appears */ - int links; - ogg_int64_t *offsets; - ogg_int64_t *dataoffsets; - long *serialnos; - ogg_int64_t *pcmlengths; /* overloaded to maintain binary - compatability; x2 size, stores both - beginning and end values */ - vorbis_info *vi; - vorbis_comment *vc; - - /* Decoding working state local storage */ - ogg_int64_t pcm_offset; - int ready_state; - long current_serialno; - int current_link; - - double bittrack; - double samptrack; - - ogg_stream_state os; /* take physical pages, weld into a logical - stream of packets */ - vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */ - vorbis_block vb; /* local working space for packet->PCM decode */ - - ov_callbacks callbacks; - -} OggVorbis_File; - -extern int ov_clear(OggVorbis_File *vf); -extern int ov_open(FILE *f,OggVorbis_File *vf,char *initial,long ibytes); -extern int ov_open_callbacks(void *datasource, OggVorbis_File *vf, - char *initial, long ibytes, ov_callbacks callbacks); - -extern int ov_test(FILE *f,OggVorbis_File *vf,char *initial,long ibytes); -extern int ov_test_callbacks(void *datasource, OggVorbis_File *vf, - char *initial, long ibytes, ov_callbacks callbacks); -extern int ov_test_open(OggVorbis_File *vf); - -extern long ov_bitrate(OggVorbis_File *vf,int i); -extern long ov_bitrate_instant(OggVorbis_File *vf); -extern long ov_streams(OggVorbis_File *vf); -extern long ov_seekable(OggVorbis_File *vf); -extern long ov_serialnumber(OggVorbis_File *vf,int i); - -extern ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i); -extern ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i); -extern double ov_time_total(OggVorbis_File *vf,int i); - -extern int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_time_seek(OggVorbis_File *vf,double pos); -extern int ov_time_seek_page(OggVorbis_File *vf,double pos); - -extern int ov_raw_seek_lap(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_pcm_seek_lap(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_pcm_seek_page_lap(OggVorbis_File *vf,ogg_int64_t pos); -extern int ov_time_seek_lap(OggVorbis_File *vf,double pos); -extern int ov_time_seek_page_lap(OggVorbis_File *vf,double pos); - -extern ogg_int64_t ov_raw_tell(OggVorbis_File *vf); -extern ogg_int64_t ov_pcm_tell(OggVorbis_File *vf); -extern double ov_time_tell(OggVorbis_File *vf); - -extern vorbis_info *ov_info(OggVorbis_File *vf,int link); -extern vorbis_comment *ov_comment(OggVorbis_File *vf,int link); - -extern long ov_read_float(OggVorbis_File *vf,float ***pcm_channels,int samples, - int *bitstream); -extern long ov_read(OggVorbis_File *vf,char *buffer,int length, - int bigendianp,int word,int sgned,int *bitstream); -extern int ov_crosslap(OggVorbis_File *vf1,OggVorbis_File *vf2); - -extern int ov_halfrate(OggVorbis_File *vf,int flag); -extern int ov_halfrate_p(OggVorbis_File *vf); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif - - diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Resources/English.lproj/InfoPlist.strings b/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Resources/English.lproj/InfoPlist.strings deleted file mode 100644 index 7080cf949924e8817cb2121399f078b287079883..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmW-ZOAf&R6h+Utt7r@xK@3d9$bMd*s%ZBv=Kme5Fyy^_xDn;J8+CjLwb{$gz->i_@% diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Resources/Info.plist b/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index e73b193b3..000000000 --- a/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - vorbis - CFBundleIdentifier - com.yourcompany.yourcocoaframework - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - vorbis - CFBundlePackageType - FMWK - CFBundleSignature - ???? - CFBundleVersion - 1.0 - - diff --git a/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/vorbis b/polymer-perf/eduke32/source/jaudiolib/third-party/vorbis.framework/Versions/A/vorbis deleted file mode 100755 index 64b37e759a1d882b8646b0c1c81b4773a22c0b50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2639520 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 z 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⪚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

s9zta>>!BG~A#Rn&AIIZn(dGtXpX`h89sDUHD$ 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%0AHMn(g0lN=`t zfwbn_M$$jHQY>S>Z8lfMtw3k)V~KqBqnZ%uuXmy6Qa*=#ADJfyyKBK|@vOjBf?5MQ z`QqvAsPjcd@r`Te&Rw|t;cq|x{q<{~{PFtL^XJaJ_vbq$_ih#ze_uOPU(;n9o}Tdq zrroZNH^f;MA-7|Htr6(eg0Mo}ms0(7TP#NvDZf(ouneB`=P$eMa4?~Z{5R<$%;6SX zZ;cH#V!$&_J^4G1i~qWyun3qVyA^7YcbccgXcR>Sg@t$S6z~zM_=m+M6ts|Qgg)}P zYybz|W9YCevzB*B`sc^;tPKB1$Vay9PdB}8L2$6!VQQ4R4!}zKWNMVZ1 zuZcC3MOe;bP6ePPaG|SB{{?{(!J8~4O*4WaNl8s~8C)9VKxIf%GQkbG2>uy*EikEl zGh#4cI%!)0@n?O+moTQ}@!=I=8tT>gS;*IgX%b;g#^&z9zc4H0Y5P#1IRTn>G;&oD zXK5##5-cI6V46XvqR1t#lG-!4i*}Tei>n0hwgKHQN6|5lkG?{*E<{+s3}TGvl|rxr_TS%>A(i>~L60G&yFQ~d*D z-kAmHiMa*J$q>OXIoDW%slG}|O70hxmR+H<78HyPwGA(A_5rn$;d{yQ_+1MzY6#a% zuAM?Hl$A)b-YvWfoY712jBBT{ZxE>?@ICA+jqXnyZWGSU=&|oBKgC1IX#ha+ zH}YSBKb?w<8{t@((R%-`;=>AcDBS}|^$AHEQ3%_S;g|%V8QlU44;jTXMW*E*mUJ}; zJj6S#?g3z#>W#gR_(*FyhnC#tJ^t~QW)urLt`)R*;w|%YRG}lKnIhX4v}O^^XEe!W zLn!j6Tz&c;X~&b5;urk@pB@|NtL$ziaG!`u>M{VwF(^MaOAR^A`$lQ`$iP+?4wjj9 zNBcX`z=BM>%+Uur5l}L2A<0MJZ8RGtPGPHKW=a(2z>`bcL;*qbRp$X+A&;3S{PFGg zR!4^Dk28%vL7ooPwjvrp!9h3lJ8dspDj$_q*Oqq;y94vd<+tgD&QS?Gc*gia!1||uX?5u;_xRyCY_vmW_5>%PRD^aK8M|Xe}!XB z4rByV`hPe`Hb0u9YZrY1mN#}=+IM3!KuWjS!COij84%l(u35 zhTL^(qi}lcDjOIyek6DRKO~++EYENdC`z;UKC)YY2k3&Q6#p#2Ml*30ugM(Xxx=Yw z0*fTu;g=?wZwlOx;G2NwhJ7znoPQfI7gap?@XROA zUw!l8hu1&Ne^^}dvfX|6%%zK0iwkZQ+`D;qh*aCuUVJ6sw!g5HKOwML@|Y?^H2KmJ z4Af($O{VyA;hmB*SBsuB_j;G%G$%v4ITZ^H_B?-D)>PRNhz4Dbo_Wdnvzde4S(k%3Ju`Td61xD&)SCT3SEuxi*zv8F#vumt5_= z&dEroHLpWiC8{kzoml_4c42mEI<#PWc>DU@&e2cp`8O7hc9y57$k82n^5y0}aWP4C zwU$7K$n1TLZ&BI$GO)lP1s_S+XSX(S9Ax)CG@A*zx-L`~Szj7M(GLJ=gxY~}O^KIN zm8F$lv`XkQaMWlez^X^cXLm2shG}t$qA@BeDIMWBN=C%CIJkn~*CB;s151C&JGjAkOIsffuYv&qYlr^P7R!MDT$qns1SYfSyQw3DBY{_-%j>S6Yopi-fBFK#IBBq4@jh}qXFXGvD1VibWs;8CC%OAa{xKZqbgg`4f(T@#h zW7Q+F`JQAS{nf)K4<8iYE6C5kb5|-4avTAE`lG_~Mu*>YIscLHN;Ej)=xBUiW2x`( zMC0Mm#$aCF{mKTP%qhkN$@<`1n>V6ZHkr!0FUe_VAddNGkd)pFmpq;$(K?YjNXGVK zUp1z7eZ$V>jYSj@cQjpfYWR@I&nkje#mij99mI_(We5GgeYouZ3@Iy&{$_J6#E2~r#&}UU8U+<~Tk^~p|#0gCOH)X`; zjwGU-?MNV;G_O&_5p~8X0YYd!t?!|)A_U@&p|_AR;$%t~=`FiCr@tEuT9kQg&s#?G zrsDvN(<|N~=quW+PFG+pMe;8b;qV7(Fl3=D}rY$^B%_-Rh;STuqQ;Df5YgaC_d#U81HD+x`+>&HUH_U1K{augAqf zf*o24IURDIpk1Sd%RvG>i;GI0b-RXU=9U*i-s#!!Lc}{VWPRZZtOkM;&Z#kL83A%e z0#${DFyd)?P?&!gh5lYC6*0wk@8n~m7T(4=kG69AX5Q7}y0*8oxByeTKe8sT&Aa+v zwX{=r{-V(yT3Ooi?Rvm8U0Slf#bTV07N&diDDL zS}L8Gr7stLxKuiJ_xtUDt-sgppQ6iJ?}%sIn*U|n64{!>a*TpOmh%Svh*(3`*RY#V zR5Z4TIZ4Ufv_rb$bKq@*X-O!FDU;-MNQ#~iFa5-be5OhE0484E;}2jJ~K>1)8>X);Tb;Y!SNSX?On;~A+Kc&Yt|3 z&AVRK*kzx^W3aV-liG^a*%2$MQb*Iv-nLfM@r|CmQ+I8z$52ZUP_QVpwPGrCyMm%Nr@)_6tv^#$=l?o2IoO2W=9ZX(-4b6c+xEc=)^-%>@an4H@QqHD* zQwO0>s@5m%Lj$yR7^Mw{B+B&}c$4|g{=8GB()h?5F);&(xPkxP)foYPByJw8I5fQsyp`XrGr9Y!)< z5hj#!#d;K+`CNjHBO%e(*Egi5fd?b%@JlLU$d9y40`~@XdQ@1+C@x3Wg|dUxIt22| z@RLC>wH#KMb9s@dEp^4ov*N)b`RpwBOsRV&vqaV-SDO>g=MU41V}VU`$=8g{s1-!t z@8pbh{^BXWAQU7~zpIzoqhBkFKL>t2F_$M_Iu(Z5qw6RTIvC$1bCB?l^^_MCTkMXp z`M~H@oY<$7E^`@XnbPh04~P3Ce9GKDIEcP^^yn!pAy0;)^g1FL!9TUm73p+lqVSYw ze4ibgLgWjS5B!?*8^O*+@=V_V9x6kS!zVpN)YMk~{q+yeo;mk!US6}JG6%T4{!B12xjJ#PXsY|m z^JlMp{>7hvxOuZs%6UQlo!j}hZ|DE;MIO}oy(|lWF!cjtus%D|13^w(o7HN!!DzES ze(IY7n~!cPc){=v9GB)jdTvM1!wYJaQoJ`+B;%y^)QL=XNM@_Ks4J7Obzw zHWR6pFV9B~l51*qiX$&fi-VPg-dn|Yt~c+o)*{#BaY<~UjqpUbU2C|OY_tK%XC}Uh zCZY*wgegN3*1@()cF<6y9Pf2k;x^BR=CVho>57HPEOlnSp z;DsSi!))LQOn*A~YmFw0N)l~lF&sv15(qg}2f7#ie?*FW%` zck~BkQ=um7c$xHeZ1PRbt%4WUK9Aqy4Ta;BBjgNO_K^_IBGvi+M6g-GGKY&VACy;= zJSnq`hojUdh3Drs*obS^`;PI$$4kbk@9Rto-Ke zx$}2I>b9ol_Gy|`q_)E0P|p_^KmPLf-#)tW$Im|f^2QI}=NI0|zm?6ueEY_yXKp=d z8zPG@&i8p2yD$+NwYGOPxAnfw_Whr2uZ9DW&d+Xj`sSjTO-c~VzL!^Pb%J;Nd`aDi zn18?(MOmWc7Q^spz2$W*m0I;rdnvAshIhA0Ym=!3e_|`_9Sf#C@7_%8vTARpNG#z7 z?$7?w612BGGZ6~DjUCJ4(UW_F`oN}CcTys9Yy$_bo-^=>raOK`=e5R!8k3cK7a$Wh|t zIIe%u2?*56)sd0(aXa{gB_&?Parg6DSljZ_x9ZvEX~PPSaR`@nHTV39-DT7fORD(rQ98Me2`ab*(-fhC0=q>yd(O(XQy?DSq z?9YbojlyO*HuR>?;dBhUM!Or@zPw)1vA&b!>nJX>x0{Hrk$u!x^4Mzc?{#_|ZPm9w zJ$LHNdtcqS@!ic^-+%Y*xx9iJtCQA>q+BGAQ_acvvfKK)tG?Ue7#wg6cDD>~c(0Z8 zje6(MEYZ9V(x>t&pTCLV;!_tm%$2aKe?qa%y=|%x$QQ1(vo5E%L*B*Y!33nHv-8RA z#5&ESy}tEB-;HWo+a>Wkf{6JT323eg?`ZQxIF=8Y=CBCD&)>stLXZ#0t( zPEGs63D{Kq;pn>0IxuXlT*1?eVR?Z>6tOFq=%3z@?-{WOezNp!5$Rm^@HYZ5KsJ(` ziIMa0Bj`WYb2cTmD%kNpY786jr=%6**nq2nMvo$~2A!l~q1+(hxmRqi5T_}12dez% zrV~aKWy$sAN|=N)C||>oIRfVNi1Xtx6=U+^GRZAl7g-Oua22qp|C%YrwaEi1DTOoU15e1j??Z!l$$E*~9O`&K=aBq8^PV%{ zl*fb*+R9(r-#VxL0oZ<2Q^rvYY}K#qZxlbq_EyE@!QtZbva-7c4@)}z@l-q*lvM=M znPFy<7^HIxs95IY`Uc7Y&K&OAYG3sYIK+R=6=-Dym3CoXw&YZ&& zg{wLk@{Ny;+G-vZ-}vO*yPtpk{r5M%`6e%~vfJvWBW@=7P+q>+Waq2bjZJo&4O-ZN zS8eW&(;W~=OtI>2rs4isJ9Jf4y&ZM_*Y&?kTJo4fN1!G+U6i@UH+{U~>BivY7gtMJ` z--Dr3&yLbdWXzAP(ts^M1UlsQ%uTi}9UpK;#atkVF!xv{8ZZ^qC1uFp#u}yXC#EP! z2SYdDXf9C)#Ja%-chJ___+;$$`k_L1a zk+)xhIE45+1}V8$8ESOCD1S^QYoC9A^P3x|&OdtV@P%Wz7URjUNVQ6C z&G$A|*L7ICyD7^Uc>T66?^Iu-#p;bfYqOQyi{|CEzVyXHxC_2eySNowd$%K`G};6N zI_ZPXJiAJS0R`52*Th_SGn@Vcml2OF#dngu*KG)hRD65xk9n1$!0Ki!<*lEHx$O>L zYR}sILxM<3GCH>y#+k>(q*uQ>J#)0-9&$QyFfIgULaQMPMVu`w!nj~fc>^$)M@&*x z@{n*Ky2)AQq0yU-3a+#zrB314mgQ#@@^_`GAkQVuc?S$D-F5G`IBa`=C&qqj?LOABB~?M6fk%>v9xoJ zJ95J$O64=eY6jUSD{wV>We{sO++BvQ0{Oq zX4C)U!PYk6igaP#gu+46NOl%|D-oKYD4T@#U?}U!?%zB3l#((3?@!l6XV#Ldsd%3? z5erPu?d;h*{vEW+dx_=wdF*9UzbHTM$-9}}3yqHq4hA>Y7Jb3B1^;4rq+^r24miOc z6Nxdv3Y0KXkXiA46mY3)dIN2j%_Jo?2s~984_`%qrr;j+13g70p6Kib<%oB%q<#P_ zxXPtP*;ZtpJj?9fHK3>%RVq$&Tyk7T&E<{AV|+l5j!g2it;E^}(-4JxVctLEo0$oq zy3BYyQ=Y)Wyw5wkyp~i-~6%4Ed7gx80#2s)^~ zgzhchEBEdAy1BxkLp5~93k5z@lp>@BEyGW({nY6u|?$ZGK z=$`?)GIBm{X{xWQF_k(bVTn9d$fl!FDJ5tBM8-+s?c%Zr#U*8}6|X&R@6<>aT?y1u z!{MBqr-k$U^vqmvDiw{BzNfrAG+wnRicAiqUpBw$ZhwyOrtx&I?ZZ>;!4Y?8Z9BA?P9CkDeKa>iiQn&)8{U>vPz%3wdc2d+1-yQs0~kg zLjg}b?S8rCZ4RU(!Nt_>l-JPf?_thK63llxMyhx2Rct zq^zGn@Gm)@Bs{p4A(J_bP4+ff8cR!Fh72DNorTTkisoZkN{P{g&^>1d7%J0tYd@m& zBo|9I#Bt^~jc6iObVkRKq9j3ek%8@|jG(6qDbL-%N4Sza!grs&F0%~LBf(Mkq_!<% z{jkq5j`=>%YPTE;ZbhcaGc{SMU#q`&QZPhfj5wVB5S@cZZExL^-f8FavYKhvfZaae z7#YK(wU*3-RqNkvuDCl|TcELQ>x2ZEMoA9KOP6~p7+t<`eK< zDI3_&TNLczD$MSE&$w~G^v)(J?OG)?mI4C`iV5_R}aIX3fNkH_nis*R{dBk^DH z&R}DPF_8oQ`N&E%{x__T+!b!izlP6s2{~bz(*n@1O@6?+GBWpR21>Z9f5mDSDT)EyE$BkosC zjjhd%%`dvUZM3O$28ZmU&WY7%d!sK2iSdZPvDNPIu0ay8d+g84Yx7S#`^Q#6E#l6Z z_g)w>()2qiIHW-wS=*4N9moGhxoq<#)d{dC;|aTk&{4{}3R}ZE!SPiZpQlT3$fZ~P zUP^=FQLj6d9vwY;cE+7a1n4I?yNTao*$*q#&JI8W%BTTk9|~2x0E-$sp6S2wd`LDQ z5-P;`ahZEzWFpsyK-^PVWOncW7Pw^wm{~xxPBp`0)N{u|Xk#zZ!A_{tCL9k>iTVb! zE=Y!n(UnTI7@cwO9&VvCClVWrGgDJuuaC+^pKoT$2le38xHlNYYl0Foi^C@tzedHX z><#5uW}p1}q>+q@+o{VjuJ7#qZ-}wu z7JP6&zofRg&*hsQb@n`aRQ4nk$UXmTi(08l1VI=*$BSlxvAlHy5x^?#30NH2P3f+3neI7gBP zQw`BbmwR_N?3o;&TusHGteTPL&A@1ElnsbpDxV0Zqflp5IlSJaQHe+pt@(WfD_a`S zvo*>$n)PW;ehOV1ltWYrq!lJ2VM#NGtpk5`=ZDtD3 z6C3d)A^iBu{}jLk?Ip+fYkTE`u7vGgH|h+bt&{!WEG#O+J(JuP`s zS>9mx&UoC8y0WsW=JpP2Uw?b&;MC0QgtNoau@POAV8WVDe-54LTsY)&PfUf@mIB`C zfURxNF*4L<4@6V(VXI>>z7ty)?b-2GGiLpUzo(_KzP7rlt)soWgSLLKCEG^)ku|Bk zJ4ZXNCTf+U8}TjD%QUwzYMX?!>q!+xXj0J1!aBE7R4r@!cq;JdS(2-EbO_{`Da zOp$}CWXUaN-u`|n&KeFE<-y)2RSh^)zN4sVH#9XJao%{{I1z~MZjE`j;_=kM=ECHd zYmtik*vw=MY?F+sk&(KgN0qAJw=gLk46cgKjs7T>Gv#kcy+G8<3Fil=HUOu#JI_gOHyiTXSK~PI@qDnFfov8AAy?B(7}1v# z3e8(bJ5f9ld}1^J>`KrlF{vEb(?DH3WxzZuhY2xTsl}jNnheh zgYzLKpEM3J9~)VX7{~lGa7OFURj5-g#U+@ZdS8_COb0$7e_j2)IG;{}8^oX+=Ojlv z{^|H)y0;7A4YL1*4|7WPnM!=xKb4(R;>kT~(axip&~=oOVU=8dT~uLtQ1--9a;LcH zfy3+dxO!eym6ll=TV7kO^=)tLBVN~_wYJ%pri2`kl-d0g@^gN9d3Jm*8jI3uamHR} zor8t!!|P2Bcg<(-T{~~ziEUClMI`=5BJ$f?kqO(&+KM_$ZS(Wywhr1a_4ixb`zFH5 ziHpbS2{Xfa=@SzRPS5SxPu&d%UH0ZFd>u&W<-ELs#Jcz*BJOeg>mpjD&?buVDXHzf z-LFi4sh4O3sHGIDd_d=7t5Kgb%sBdCo9uA6F zU?ytJMWcv-2cwNJ2r5Q4Dun{3c=zPCVq!rW4AGsyt=tk+H7#dGN=h?1R;WjSMsv{! z(N_Z&lfy4jYfxy=_MxlXj9vFCnQ;yEk0$t_`|@?S|>>bnY*(vr<{sl`$yP>g}Lihy~gPqf6D z{ZNv%jntFexj)YB$-Cwab~WplHj@zHShUVl@{Mu7A6?Qvr9|vvqMh1|eG=bD#8(rM zjuV%k=8mR>#)^x`J3MPDFn@jogN{(Hh>fxURsN7E`RabLrS);SzMtBZpoAu@J?3~a0a&U1c{2-h6 z{@H6c&z$+8#@Kh5{-AYxcE-M+E8)`2rCthl)q3K7rt&a|A)*dGXe8g2&LwKEm zI!$zCXzi}OZDIv*`ZiKe%O_U%e0gVFL?*X);)|Xjd9|FLjYP_1knJlblBotSQonHt zk~v6y7U>CG>fUy2r-0kAANB>vGaa)zXCle1xtXcp7W#5>VP*=Lr`7}h4QbHaenDJf z+=x7007Sh=qni^_VGGKN1#0;n6tGeJ*AP4zc7%_ z)x{$^7yzmdi|Da;E?@H9O?!?k0wXpnog{U7&Eln@_hCRNi(Shc&((XJN*&28EiG-RKzLQU+pNQ$;Jh!ew6Yjp!t5uUg)W615AP^JZ1jiVaG7EfV!wGTA{{<3~^g~)3;8_*m zz|rAeYUiK8*nVhwZiAA}$l}`e?&k7BU}YQKd^Z*fETiGB`8)~f@Qj0g^lMO{IG=>D zTzWtsfEej6_%n&5a_B8F_2Av6xLNR0`2p=2*oHyRDWzt+pRvc#r1U;}8N3l%TB8O! zoBplDI@pg)JBR71I_Vkn!Sou5E|W!`jeU+-r!bqG;HYmDx0DLGCZ{H+eZIiVBz}}& zXaS#9cK$5Yd@CEr$y2edpCC}gT+pcu6m&v)NYo`7SaCzpjdm0+6EKy%$Y#PVPk6_8 z+ECm15AiQ=D`!QYn&7wo%g)q3QfWvSVXq8;=Z!q{`dsQF{um%jJ1FTs+QO(STmwhd z+Nf)j+9ahzno=%+Bo|{&`A6|amEW?~kWE5v_q{8nWffHvXtvqj3}I_Z?(0I0ji8es zUBbC7K@ORTxC1lAmr6tffw?J-{Hx*;iW*}-j z^!Q287@k4DRSEas5+tOzVq|6T&v|+6(T%0>a%ef8T9^v&?l_+n)^z)k^3i}lk&xk& z`uB0dtQ)b#-uq7oOVOsRvZ3i^7Y(!>eH~pr&OmT-EPzruKOdZ1TG_->N=2e6M%2Gd zgZ1Amudh=QVe?RJ{I+2x87AnwLkbB3{13F~g=92+7_4++q#@=RSbe5s2b5ARJV0@G z=PR`Ky*Uq5ZAdZDxgB2#Es%ze2v0>9Dc4WMW;_WTQ5t>85oBx*ilCdha>A#FP*h9? zQYq&8M_^o_0Ogzmg-K!@4670usijDeS-gKy=vDcH)aDqE^n_`M8wZUEtw;1_uoStR zBrCY5Jnm@%Xr{^OT6}}FN8Bu=S#Bj2MT7xhu)YwR9`^BA?i}3(4l2D{j81LaBZbKP> zCd4E^h8i-eVV^mHCao~XH$FQ0K=?P}TMzon%@YFnn)y0p&SlQU$p5Y5n{)6<<`RTH zq>Yd-^7ws8#F~cI4r|XK^e4z|vuY?+_q=K_Ve!e7)R9r5U)&|74|1gsI0o;RRJPSU zD1T7=wBljq^TAQiD48XlPfALkJ%8QSP}8KI(j)HhT$`IERql-4b&SiQK}T&tZF|R{ z4;H?as6VtB@wftu^JCT#4{1IVQ?o?h(F{|`@6`=GnT!mTK6z9^qlD7Obu|qwFFI{~ zbS`PPxv*%_E{P@2c>PQa_E-u<;u6By)W0QON0!M!)Hm)PvULYhVrWA}z6GsL4Py{2 zJco17oEV!z?>+_aoD_mQIw-0LNd!Gg=1b27NWxGzc32@cqth#*&AGCb*ullOIqO>| z+Yk^FYL{7t0u3kBE{7H?Bzh%9%CKF@>!ySaNo@&eU@T%3nwv|^pY;0zE{x|pM!p+S zj{%8jA&HL!9o#Q})VSjQBl9Vh+E`nipBkGO8yOyWGce+r8u!fN@}okXP0bhdqd4IghJ*VI{h@d5+)%u9Ix~1G!_EB@)91&VWiw zh>>$#$R#QNpqlHH%rpevIkd2csj3kS&5tmx?<-YHR-s-`M-zbU`^!E`e-{;*}{y{X7L~77?7NbGkg?Fhks{YJ5sbWpR0VNvY*k_t2NnQb*Jej5;draC5Hu>MUb(jA6|Ks;+g|iJ-Q%O96AYTy z>xsxAvP}zidV^6@lZ3Qt2gmlIXsv?y5f{T0uq4tugyaY?Ev;h*hs0?E0ryIU3QCZTgPQ`i-spYvu@qvM5*qA3X?3z%bs0gZE68 zm6QiWzEL?G2z=0ItH6GcMidSRqf zod3vL0T1W8KNN7h?#3fKH96@Ta@czvPS2#<^AP0tpW3%$-a3ovqvg~3m%-|Qm zNfIkssWQ$JLs6bR8cY2$No19>`A@3h6hOHTlJrJ-*B1o4g0(@qq_@!*mo#OVg(tCx4@85rDvDDPHwp;t0XJT zWn-t6Sp1uwo)Oo;U}d9Ky#$i8j-EbSdwZMJ*olteamPq98C~*BEI<}8JhPGrvvR)0 zmqljP0!qnF>Wd_e2-jeQd3E>J*LNDqOCLR;ANI3q2spcYI@@0NIvHN)_|Kl-g;k-r z9g9TaC`@mKqv=C}GE_$%tj{g4N3zbW?VHzKj*&jcs6#1?Lw2WsdFYGoL@0*1-=^DP z0__>pQCX-FPVcO5?te*Ccs~-tb0}Wy)M_j|7R{h&uqv|_X_yl}&%!zZe+>sIu{&4D zi9k$am>T{Fd9f8eV@t_GlUBl8q)+qIM41oX;b@3^2~N4l3!Y|Dv~LtO5?;0PfUyOc?JkdI|9h*rl!C3v5%=^N#cGcGt(1;l+H3c19AL!t63>p{7Nnw)S z=GR30)gMP^PT%{bWtCNRjZMw3x<=eX+nNV52oz}g zIdhTDcKNsR^KTbq3Qe8y-T!hT!3{h2{d;9KjgLwz%1cVBU%c+@9rk#}9NjOTJ*lXB z(b3u7+3y(fQJm>0Xd~FYvp)K)u;e~xy<1#XSKDEC`KJe0Vrz?UEt?yD=fFg0X_i`u zo(}uah{qSASIO>=Td|GEYH}soSNi3(&q~V+itjyq^7N^tvALd<2=_WjyyhF24!vvd4+h(TZ zJPUv1nVjnokj*jz zrYB(5ak;W%ACFH>PZE;%dP)193*tBlQ^vDI4%zlQsE(jp(^fH^98`ddVJDJ{P%dg+ zFaNn>VO~HL&A0&!-%e)WuYjCFJ;F4b9?Lx~>_WlDc7nI5T$7yEia>Z=drPSh=5Y1t zCH}|^)x$aX=8na4K9v_n=g}z@eixH1XVYhzc{&BZY;n9flC_@gXnWq;@NOLqI~p1r z>s#8py9RY0Q6zl?0Z;zTo3}&+f!r>lrua@_5o-6t?ER;rbiG?zTv1V4TXv`5Sw*AW zH8Sp*8gp3T2C{U}`;RKN-XRaw{QZ?tA_mc+k^=GyAD0&9KYCX7(mFQdnMvT&tN&wU zE#P?Rq`=G9+S=*BS?doiZ>qh`kMIevL7KhpYJB|pg_6>u(t`W2{0`_1T>hp7BYFcPK-I6PEnm?+7om#Ufhm#c;Us#OAHgNm~e3KqnPo{^y zx;ltAZPGmzp!Nq+2^oki%m`7oPm@_lbSO%*QGAK$@QKxhB}6qN3nhhdU>qb#FbGm2 z1e*B(9;~p)tGLevh!oI?BXWwT3iIpFH7hX$&lw?y4N^K)Wc|Kn3kZhMvjb8ouEQFR1;M-lJEdcs3sC*Ws0l3?c-mm`t27zsDIUbE_uBDW=k_y$EFDSP;dE4`7+!H>0Rg~%swIgJi!`4QslCNw4ox>8`|Bpi54tPV@E0TdBQgv9v}X#-q(*g zW$ySn%o=EGrs%x-)3nh{Gdj!h(I@OFu$yb+V$4dXSIh(i|0SHf%FjRpIJLb+7eLiz zLBqa7??{XRMLf?)dS`FunOd;|sMiV$?i3W^Ik~UwKxi}{KPWDJ_OR$d{i6=&=;#f51ZK$Q!O$Xd1Q_=9q3cV7Nqm9)~ui83ZQ{UFm)Y$cQJmg#3TAu5S#`?5jkR^0`k#}r*jhB|w?F*o>di;_-xU{@Jfh8Hg{7vct=00Z z@r{#aYYrD_w9~;AY{Xp6) z$D_ipK%NHTy3LH=>GaxqcJ~x2xK>UjtTJ)9_mbnLKoV`7GE4?T&{ve(SdkiKBljdh zVZ#vuvf5;G*4|N9RbJ81V5zrcEC0dL&^MyoN+&IjRM;^z;>N2@Qq&p@yLeJb4&2<1 z2dAAwBhJyWDX(V|-?-239iKFLuR%!7Ba14tOYUA_0z*Wvsl|*kq8abRi6k@xw}Oz? zev=(#&@F9R&N;zLc;a%E8fZYsJ3ouXlME1(hRTjVv7KV(isc*STB2WT1G|7kS)5l? z2f-_*jrqr0RJrTeJm4ZX? zxd3^?t(!l5_kH%}sr=iSf(wPfT3mv;HX_IOKQ6idxa8jB2Y-AyF%xk0zHWr(82+`^ z*Hx9-#{c-D6IWdz4e>oQq1}Fz|_c_@{tusL&w0f-#Iqe z)ipXk6<%AOpFz}6diH=I-AZ_M#n*lPi|hA`@7%g`_xpzri%Al&)YLz(X?*>bF44A; zL5F+Fzmy>IydGY}nUG$dUfkVJZIHr+%*IJVD!(isll}&&a-4Lk^k>O+0wK|zt+A1@ zA^YICYs@ zYxJN19ft&IMB2tW4rX#A_(UuZ@|_9zfFsw0SE?=WRy(`A+<*ZpxkqG^T{6&DA~mCV zjlFgkoNW}kRw&UyOi%(yfxIiw4s;jFdyL2LecAI;0a+P6rW)BxHfP z@%W%#s3ric2zr`=$0{w8s5Ea1l6t|1RG|yx+KgYGFfV|z`j_B{HgAAEBh@8i^a4cv4>eu(H0b+dj578Hx_s25e2!D{mS*ZHuANQTKqotzlp$ z9Q99%wEoAf1VOa5<@JqF-{)69EBfk-kH5;#FS+r}gJ-q%RhG8;r;WYCBlg!eDi~bT zOElz#>?*VdU*PgIO;zz#AME1^j%`MlH}G?idIg(F8vT7Gk-+b_mBg(<{?Ok3_R8Es zV8Hrz#O)6(MwgCv}iY^kC1Uqfk0 z+rXfs8l=wv|kTJOT3HfHy(N*v3XAv`nts-hM(H_Q}=7r39`-O@^Gt zjl&#yy}mL%_;z^6MbvsB8$9Eii6o8>Dh?-x{h`%$G?%!uKY7UfQK*OfL#7Ri`c7zM za#b*3?Ds;}c0UnMgN5`4mTk%eD~(UYBu#MJH3+ElT#X*Z<;FW2NNFcH%@tHq{PTB` zRn!?#TnXoR%J-(R>}hpHWu2vxHULj6f3h4`{asyG&)Z?A%Q-weXzR3+vM@A3HuC)J zTqL@t$~5(8iFjT8Z=GYP=A#4&W+*z-HnYLmSwBI_2+0jZ7E)lG_7ntkP1TL!PF$1J z205I~FaL5OrcBP0VeH)8n>j`yVJ#N~JTW|T8B-^~lQdV7%6~870r)4mC(>i^p$f!o zmMdZh;l{Bp2m(lfHdn5X?B_JdcmOU$>z5B%7O~2&BJ!C=+4NF4==V|sJ9Lp^oI!^R zUjsfHwVu>W$jh9Exd$!fX6A?UH?c4a3h!nM&K9aR{-@%P@0XO<(~0`-gT~e#*W`?6 z%-L&eE-o!6N4)Yj_r8vv4}AU<*nY_77##L4;u#+Gl7NRYP6DEWipq#O zgu5BfqfiZ)={y2e+|P%xyUStpnA2WW>cF1xOa04$NnR@8K2<$~V5U43qS(dP=>cL@(wom&SF; z8;2Qelwx64yvK%bP1BYFBzj z;guquM-doem|9|>uWf%>2&Ad!D28&C$wp}rin)_!mPvSzkOdMfJp3DOJpcNphZ{7Uihwp#5naw|Q8%r`I_E5 zZT0Q1Tk6IZhw56oUN}OeYuZ}dnqQAN+=?vkZv7}>OI&y}v9_|{ti5sL(@U4He)!&n zYu`Vn_u3P#xw^R0KGgTRwF_1+s2~u{L2o#b+FbH@!n8dE*qdvt(Xq7^6!G*XEvmP- zV_`T1kx@Hn$5iX2P&gr2mWmRU&zs7W9Te+bc)*e$M4<1DEID6{%)5Ksp+!%a96eey zUBJ=JJQ0Q2?*XGwEv153zHrGHLO8o4i41s+nTEWf6pgLeHoKRj#}u+n9FSBzu?-$+ z3*%MPqJMn!Ck#70=;?^N&C*y^QEA{@U8y@ui)D-KkLqV~UMK7UO*1zs9A>0>Zpw zF6uk*ck&}a%1fmOf>fy-lBK+6^74(C$_D?Mi^40P3C$AT(m;&F)hB`;GepT&Oc#?h zLa^POinDQCY5bDTlIzH1<3s${a1VRwOgd0b6@i(DCGEdwVbR+}N7Lz&wwkJ^PakJX zEPd1vqbTX7B+m)tF_w!kb^ zUh-+(h-+%vGtlv(t@3F}5#6C4l#v`>udJ;4$5pHQlG&(qe+z_Wnkp)rUN;W~qt2$5 z#3(e;8uu@+E=T9Qi&Rvud%erc3cBwmAYY3_VjCnIrDA$Z zX?1=IBSnOXxJvG1_kI(Pm=IlbU1~TnAmtn#U=|kc(VPllPa`=L_pl*7^6S z8}oCs3mfZn%uDXBIc<&s=LA7a*CnB|M{Lc_ z6eNuLC)zBnZH5=mU~wUk`F z`0jh>u73FWx5bZ3q2a>&{e8u&?(Viu9FL<@3yZ;}*|9K97#7DSBWlx1O2*u{4=R%6 zY9zI_vJ_=yNJVD+VOa0CSsAv_wQ1NJizK$U5B3sJ)FZ*+)rJQM!*dG`>Z1!v4v~hC z*}DQx`N1L-$Wct7nL7H7#IO-kf&^j>KexEF`S7n5tI+@$J4c0L033yy!x5Rufu2kf zW+IjExzYzM#K%WB*oSEAyuG=#(xPs)&uAc1!5^@OV6U1aA@Qiw;6{o3 zLZl2iU!u{UGq~*pPylWcN2HmYH50(h1vwMn7wWYUb3spdG`Zy`cxTnnWf5T4ocbWQ zozhe?>Rnk`PD`hf(+?k6vJID>)5f8%Yn@4Oc;YUkQVneczaY@QeLHjKG+jrsxBoNn zF20L5MO>JbEtU5lJ}R$yJ^)dE0G=;v70HLl_q#=p%FC-?_Ye2fd~apXZ%RUcN`xzhT-bQ#v;MG z()Z53r&dE>-?;mrtm+Bwn#!;1i2QeScJ&X91?E)&x3IaDhz#JxV@xnXbhz6KrkV`wGU6!loRMkw^cv~@*CCKXlwDhD)fLmk=6O| z4|0+*HNa2W?_g=HY^rXkM zY;SroK#qcQgv3|)N)}euNU;i!4!)u4dT?0&!U+$VRd`tzmKOuQS#cK-yu$x&VmovI zq-CWF;LdS%z}L9y%rwriunENI=Em$)#gXuK&EPI4j|~>}@U#3aAkCnY$x8{bdCo_g z$|wxEA9Ng&V&z^pLR~9@$p<0!PBSY#)f~$`;U2N8e2h8-84Efj_IU0bat)F$o+UX$ce%`^MT$A_)lq; z5z%fehnE+^Dzx43PlwjwRGtsVASX;xV!XB#Pi^n-#^NHzhcSk@&i-C9wt1Q~+3fzW zaF|iWn4<6psdnPbMwXBZc=VOIv631Ln)DWsDeV;147*a<+eVH9SKtgo2{RybppH4b zCU={RaS^RZF~adIL6yxIJ9MAOYsgVo*Ho)UT(xyIv@4RS1i+ErC@}CFc-zK@&92yX153Gswt#=^7z5!@@G$}if??;Z66#PPG)>I<}U$EYU513f$WP+6kew`pPG5jbxp;r^a2QgPqNl4RoCrZ-&zeS3zJFGTUfqco4G3K|JIx zw`amV;hDg;3|xW{nRF`JY0=E#RB9UnH*x>S)>ZnWbPOzBgPEUlwMM332Kb_xpn0)w zkdqgPnW2JJ7ZTde&K_h9Il z4LC9z0qx9vI$0KHim)pS5!@FG6pI(CGX;MvDsRT7FM06vQ7cS4vsCpt+brb|9z1;V z&xyp1Fmoi4uk0bwX(cOKEy11ebJ4zDfbX@qsQmZT|IyC!qsnX-@N;vxU8bCVwc;6xxXCc`uWhcw-yKFwvutd7hsPEoTU)_EB$9$% zZI4h7k;=U!2^x&;r7dNoQ%fA%{DLG|BYD+b3W?0k2BWLa5;S>2LwU!aumR`AZezUQmN-0E zlzq~oOrYv))me#b1of%Ps;uRI0o(jOrR;<@ckShsubiXn6)D>WT?TiO z(Fkx*B+0Bl8Ji+xQ3q!M@T643c>9bR!)-H4jA_whfXD-&RX|5KMyOZeu+FCS!E7w= z$#GUrK~ogLapgahFxRa6B`~jZ>m6u**jEOyF4!EEWdW3vl*smZgfBHS(yl5i8I?nR zD3Li{22+ERJ3}N{euh38`QNdtt8?^G&dvS zbfPae)oNU%dLgF|pyWyX4VTWc0}5AXMO`uKnwXtm*}{ziSfO#FoMD>+98?XA$kak; zC9v;@oK1)5aTrK0_`^|JD=Cp^^Z^oKh6-eHFev%`|JbM6gpiV z@?Qh<3xVD)Yp?yS1Jlzr;hFSKPAE48AL49w?jl^s1THr>x6a}_k~MLx6e?YH4s|k` ze?hqrbYealKOfr}4Mgv%qVku0@L~Mx`+}?BOk5MmY%){i>_=ea;y=jipT!z=BEYqg zVnKlZCzNFQz~woSYfvG_3(9=ZnQ|5NI;DuRqodvs@rIuynZX^=^OwR^D8T;KZYm3`bdR8`z$AL(+eho4vUyyEuCbJX&FF8U315R(yH{RRd{kr-2tGeHxzHs5(xevdipXSY*#djXG{P0nm zeP|fY6X%d~(rveUqOq;m48Cs!(T10p|AgCzdyxWn`~&d2#eKFnbBimRp(!|(S7234 zM8q^nq2$^If|^nlx&)?Im)2tcz)Q4m_6d82I?9V1TWX)bviI5Sw%J)vB)#AxvXjeq z1(EClKah05OnOCWim0N>LJ@uuAeqCz;v;%*m^^`BV8W1qXl}TEkNzJX(y7^C= zjX{~0?s2bYDiE3v^tM}Vy}jfl509XiPkKE58J|BGCQ21no?v{FcEzdV)H&=8nGr-O zbCvoh3FnfVxv01#wGpidZ6GA&fEpx~2^)(#=gH8fa*9X}YX_kbf1jDT{1axushJ%{ zvo;4LRIfXgrL(k&^yH+na?52U9v}Wr`xvpzfw^rQjk#vd!ERiQ7L+T@AW7`t%f1np zGbk|ss}_CKv_9Ubj$Z7t2U#cyeqUKW@Z36%zYpeBIaI>zQ9kL?`{r z(M3daEE0pCes60HFw3`295uBQS%|Fv0jW(r*-UhO6XtF<3pxjE-5pj(-%MyUwC#Jl zdVpJn8=5`12BQc?h{7S+sbnIeWZ)gd6)XXr8=I3EJ!eS<@; z<}90zly|^WQUpFV7{E9cxW|mDF0(RVd~;Bq$iXjY^CW*rcti#&nosC0q?dBb5CsJwH5&RI;a!KR$2Qbw>25K04fI=G>+#qYda$-X zTiZ?D{g9)k=RE;eU0YK}b6u^;V#~X6`;xTCdK{cU zXFX0FUZXX~O62(=4)%FZ;acoq2Q69F5La)rVTK$g{C+q|KHt#^SAh$2@BCyZx`nE( zc%?*C*hWf0@8#KFqqjJj+$D@}{Tsc5Qe zY-p&*PS@Ag8XNiFWURw%S5?yrx3Q+WzE)eDSJt36HdVCPXP1IrS7&RVxp%;Z((=Ug z^b`Vt6qSuOby^45VB1Df8*{ozlFj?+`j!ZNi=mcY#RmlBzvg{GHL@z=R6{BvP(d0+ zxz?PpsP2e=D^ch#%vL#RqHcuxd73;=Y%PGKYFGhHq=N~5@L74Lu=`TG%v-WNG3hbO zQkWxIOLgp2mJ_6_^k)j)3cy%yp_+(jgmU=h<-*PRYux=F@2cjB%p5rrp3Y&ZP2&%F zdjf&{{w5jk>=+oI7z%-K#e`)Wc?EIqWa-yZL7C88rO+&q^M8|=&jRHVEXgY*SEw&4 zDyv{r9e)2z2gaG+u$8((O{t-|)zs3~)z(m6Jx${=aYw{01>wh@`Zi-(1u6_4N0+`v z*KF+`^HT2T80cs+nmXA4&0u?1{SyPGUn%p%)q%P^?F~*>aV2XTD2V8{7~kE!_u`kA z@88~g@HF$)hqqVXS?qS#unKz(ScYbyVK2F-Lt8r-YMZs+J?HX9*2BIDmp_7z+D_O- ztywUN&$F`XU)L+9nIqcT(RVwJda5cPV~>gLCekNKXntdKzqb5Xn zfCx7(^*PsrKD~(4a*;k?{4-1P>1-YSoEr#_80s5|%^Jz-8td!1!%$;v;Fhtmv8qa& zU)jizm@LCCBmzfTEw+I{D*W6Y&-BbZvOMA7cynv_fVCg_yU}s+uqm&m=}02{-7+z4 zk<}H#!}VjyTH%IJmabp~y73kWFH2vX1Sch^`S0NhDPb2sSz-JxiyplIxa*6TgnRQZ0#d32#eD z4nN3PW@~gM`r7h}rh$OV>z$r+v{oDIWecxERj0O@_%y1)b}dG+@C*A=6q5L*UmaNFNznT&*Y!qc;hmplJ3Ju+l< z`rPhdIOvu#{TopR&?G{+ul?-!%~b1mi`92D!n3?>5S&nr{^mR2gE&~4oGmE3nPg>aXgf2 zsRRsVe<;e9J27e)B(F`*lknLEy6yxUD5zu-2)J47h2D+m_2EDzi&b3>LB53XN@K#9 zsQvr8`ue)snmVjF(5}^%x0V+5HCDA*I@>y|vynM-H+$?}i_Mwv{E5&t9eyISW)qJ0 zkgea!js(n4C46`N6ilxy1MLXgX;F!|A-cHuN0PKr)KG;UO2gy>Vqg<2@t_3`hs5M% zvhvLraFfj)jhAUe72ZL37htK?NRY~tWizOf@e=bB^;dbNfST9IJ>swn8&w2O1lr>8 z$X{x5s9H9OZ%bjlz*%Ab%l?%oDbm*El_V<4aI!cnYc((R zd8es6YiwZ4!%NDm^ws71rq=eZHf`BlEC}WQ^7Ka)*^PPodz*Cy#nt^J8SGtM1H)EJ z!gg=S+*Dg{vJQ^8NFZ;m4w>p&Ex!)4*>}Ql8zXo!-&3ls#FRDF8=KnAH5qqqKKS{k zCl7wQ`|L&f%dg&AsA%Z!9;61#WO4<=JFA4U_fV3YvW-}ri*pWlAmFu+xn={AosGc! z_<(yM5(~H&muQ_3L5XjDpS@!QF|z$5yl6b}*y^k=e3QObCwo`AP7|^BMCb$h3S+Om z%^HA5i|WbA!FpKyaQsc6EIFEsoeezjlfB*T)u@C(*g}e9D+@km=8t05aj)685=R#! z4{FY0hj^{=on2(PKRpzaE@Uowky?)N%g_9JeM7AwQT;W}i7`=s4Kps-|EK!8YGZ4Q zv7yOOqN_I)w`w)@9ju+rgWkZnxo@!FN{fmK1gI7zQ?NeY*WS}Vs1T1epLEf@8aGBl z-Bcuzx;>_lRU&%8T?yh7eHPm&`#76sq zu<9};2o*}hXNHPDc}Pjc%8MBBgFZ35r3HCN^^|DK4P;$4B#{XJHC$qyjS-EL}cGh1xquKCqyc$(&Z-J`$4 zTE;ZdZ?L=95wKSlKpL-WWx+PK4K}9Vy!+$L8+V@EdH&;1FK#?E5UlSdo@gI#H`=|+ z+YuNh>Cm-YM^DbajOmP)D>pW0Ojx z5LLdto#h$d>U#u)0O14*~TGEXkzI{JFBVOjet?EuoTs!Y6XDz zV(b&+M|4M}SV&k9$+N%1NDIRRAQ0yhEm|()IXXI^8V`jw>*s963%Ojx9!b3^gkLgE zJ{=BetJT&L|3ng&h!{YIrOiuS0|;+4c2?6Jpt!WLO5faA(`N3pSX>hW1NJcy&>i91MgH^bHa9CZgh*oAXh~5Zc__AWa4@9>)vC3)wPJNyMotP?0z}Qvg+E zG~i93EGI6=7fUa|`rXCJ#tbq8OADR_!a{;dfuUrBXc8>XmdOI}B<9EK6nfQbarb#p zYEUKmCvT}DD*R3rETt9#3E3n;vuKWTY*|C(+0W%h>i?HBQj>yr;#p{$uotf=$Jm4tgc#D z+cRn(AFx@P@ERM8hH8{jYS95|qK4gMsx2Nl^etT^PG7UxBr5orJcqhgF_B)Xg%aMOL%sqmK4OGrKhu#?t!-H;Ba9^j=qtYOMPu)XIER! z?d#usbMN8ZXHT9#esK4l$vQIH-w%bqyRmN~xVACpTHc68cl{JCTB zJE0U^#CHy`(yYcZN8+OFr(D{^NxigMkU2pcgBKs@)FmRSMYo# z&ZD@v%7qcU%VGYSypdP@COZUqE%j;YN$etU>0>=*WWNxkFZe-Qp>JqzYN4=ZbZ}p) z9q{|roVZE|FriCo|3h&J|BFyUrduoSc~16+4{SZNb4x08l?~``clUO*jXJF@tu6JY zwrT=eTm#${fZ5*GP;A~28GmfxtCPdcslLAU@)8n8ncC`h358hOJIoe}_M1Apd-{gi z4@SdNHnY__*w>rvsWEqTnHqb>M=6%|j_9&qYa30?EvDwihL)c8yr<6}-Fx`x@zb=l z*Duqn`-rIzj@X?2O=d?RwCT48*Va}dfpLT%Li1yzvwp902u(ty5&|>Rj{fn5$SQ#q z&!~5G4JkMb+TKziyt)b6k0^!MTAlN*Jc~wl&d08L*nGxjjgvdaY(B%fVPT=fV~DKo z(v+JknX)>`GaOV%gSa@D zwUfjDNs{+?KfF$0B6}K^gY$#Y5<^`>BeC#0Hl4N5s|?k(38SW|wXLbCXLg$6CqneF}Gk&=JoH+4uaOwdwTPw^;b2u!PHCkP+uy`Cw57eHG4J`KTlbzmfBO8{lXMKa&ED6~8euls+<~>J zelJ_BZ9lAwsl}y9Tu|3opJi;!?pvClb~$XL9vbz9f-a<$S0ITJ9^MX4`j^9qEF+7# zx)S!!EdD97xb>*k7JYbl%rOnZ=ZLZ>0tER>qNgXfKsU3OKt1BstT(dd6Ovwv>GW4G zTA(VAi3g$ZB%s7~!6ZM#l;WE&4&-0InbGd(9bH18RK;piFQFl`s6_}~d4~346b}zo!``SF44nY+r9rX9ufjwS!e&kbZQySW^n1EsZr*)q29d4aCtq zOf8)~mcIVp9zpuBGeGqw=*I!CE&4S_XC&F*kHXaW=(ugTx-ef;s&6nhH#M1>jg96W zQ*BvB`s-IO(w;nh`?}U*b&d>=j*RzrnBmI$98-bt$~s6Np9}^OJ8_NM`#X^;oLck} zZ*Z>shmkRWd0@Moy_k7dbB!&OfVv&ehwE8lFgoTB7wFqiL+o^M%@H`I1@nqAW z+#RfX;;V8xk|eZuRD)tHI=Yq;X-VY%UqlphvNeYC^4iAMnvw=!ZFi8AL?X>%bvq;< zV;crf!xPRiv(d7G((p-aY1Y-0T?P7k+MC};&kY2M$=sAxgaerWL0njEdMRcVSeMP>T>#ul!x$;1R|YctkWmuU+Mv=v&t#X2@j z4{+PC#SGCF_|he5#Xmka!9FYKciSD4BbGrlA^h{U5%=W40PXs~!Js3!6j)qCVr4hv zCgQjrCE>rb8Vt?5Xa52fX@9iZyK}O;unj%rIPOV*`%u5MN>4(vkO#5Ik?`b%?Iz^9 zMEtgjn-D8udx;_&-X=Rzal2t_$#aAl&H&%#PO;J=S0(0Kf*2@5ovPr)DWyHqPM7;Z z`uX{x-Jq|Af%4h#U#cl|AivoFry2E_`i8pJta~{GZ|hC%MqQ<;xxTW-)Y@pCn4kB! zq^Q;z2;+F~Eq0+)FvPre;`oig+3`%G8A~^*<>fUg<3nQo@b@GKNCu^tR;t2I;6sIu zI&q~M#R;i%6_|+5pcr>m5_5U+7qA0t0Pjfh3-4K1T^WM^sdHSU-Rgi*L(vop^4lh~S36njVQ(8DQ!@IwP%W5aQX zLgB%miStkej+X?&`I%ya3BqJvs)AmX$`l}`GVUpS3xNczK2ac)M8aXzlYRB-_3O7D zWa?YY9umj$ad^t_1jceRbwF;Z>2ZZLB;;B7Qyyao1?S%j@!)< zAMna0o=8(-;)#S>650PXR|}8a*iu{F-aG1Bj{0D<4Ix2;vW&}ZA8}Gr;&TmKOp~bh z?5!fX-dEGw-qw!zYikGQxucVQIvw4;7K^#dGBh~Q*E<4RsJA2!LRV(S^G9#=zcw}* zS(EpFCl2weRGoQSjE z=?iad%?!8}0$yaBJ?N9U$3|=eWCo~fo*r=pBMUQ_caJ|rb*$fd! zp7uWn@2jKj)9agiv)wDQjqJVQn(Pbh>`I?1+I{b(@Ic7;?B?nI1`?v;%ifFcZ|@$T z(hwc@1Ki@4@BqwNvE&3G_az3yCB&4=!)nkkE|4aqN)(F&@d}p(uK>LqacnNOTgwdW zI1Sa8hMPzaqK497Ow=U}xe!6wl%3X9cxh6=b7x)h#U1}Z#pRy|e9?J1maFTqH zs(et;2Sxv&PM(tnSAsY`5;8@5Z8xucb?w@XJ8AC=+ozYdsNf^S`UT@D2+EN`8uJ8h zp#q@zKeE%5M^eU@$5|^x!%B%03No1zGF?*7;vH4YM($9``_zRhM@PB*YMCLXE=K%o z?9SP3wn+q#IzxjvpYY1Z0+m8sdkwhP3~aLxLUS%rjF?^^g5tMZt;3_EV+lvnb$_I1V1#|tEbZ** zQxXo+frSv#SFt1HwZRsd5-!D$r6dRrg%iGD02cwgMX5qzb&>NY%5F4Gj3sHd4^bM z5Q(B@>M;%=yGtqH=cW{IN@holxXKWHp@8wwwev&2&GcPEjiJueGef6od1rByc(Tl_ z%M0z-B2tjhelMdW)m}s@pI2k zQ|a1Pzloa8PB`SX!RoAM=bE3Ho|gV0J2PKHIa_l(?h2xWRr>A;-$?1Jw6`yxJh=b( zm-jhY?|;qsn4O;X;@NwxzP_cQuDAG?tXvVZ&CJa&hB-hQq_MN3tFx`m+|gt0dXY9h zH0bv`?DnxS%ODQ@sBO*{3Qd|>wdb58V{SUxd#47i5bg#>Ca0Xk{f=O0+SWTdAcVG*1o)03$DkOu zg5l??{Ld$%#muOQjV2j%gj-ECoeq}bZi~eMr19O@(e}1*R3(rrFOviaakPs&Bw*w@ zDaepJlJ3QcvwvYugj!1URAP!83P0Iz5;3o?udfBw#*CXUb&Vx@i$$yLHdE)V(bYDz zn+H6BP{=pw7#?*_FGV&(PK(7hO!CLU28B)gsMGD4qrx8Z9bSx(w*u3LD$|)fMOlss zC7%f}h`b1Y$UWjyNorFPHG*{s)d{R2$6gW?RbB`y7N0A=V1E47*I!?|d+VDA&ombF z4rqhRI4QpXw@i?%;*BKYg~1}B8yMsyP?g=4UMECmcoJWn#b*h=D8$QTlAxb>;g5Ks zoPfMu{gl7eX>-Ej7u`%G58cL+{DR-1@gU1z?dYMrKrV#zxEKE=kxXcBfNb$n653n1 z=aTc3jL^SO34u7u$1L$t8X8;L2Z!jpI$-V}9q6BQx!rBe6Yj}b-#niAxTC7^h^pc3 zMelG=cM}MI|33Z2y>IS5eDvt2C(qKd3ac9G>#MYdRl_s(%2&_RUjOp!r$-N8ynX-b zm$z3kFEj3Bmsjda%JkJntNwj%`kO?${#_Qbh{Z?&)YLT9p`}kurq$G)dE3<2>kYX^ z>`3(W58EdOyPb2(Ysc+ffN`|pcG+J_gn=w3BP-uH;!-fNxg+unQX0#Bf*2-%Tpe6Wk>lim@<%FZetDJ) zn}q<(S{)We04~+_c;q$YJn`QMu^4l1{#;-v($$(wrHF*pw_@In-NVDwG=)R+Q{(nA zyJvYLJZ$PRRJVuUygiubeLU^ucCrV5+?UyI85Z>M+UY}6^q&(v8+NrPZq zegSW(q{dsJ+)Qku+|Scqa+A-KzzH~)uxB#4W4KD2-R$u%1tBB49G-x8;pBL4Z#_6|ZEUSA%6s?o zlP7n-zyJ8&?YlqTd2s*XlNYaE=M-vdtPb;sC(mB~{7c%;&z?Si`1skg$B%#I#!s(a zAkp%%$Y5+U>oeb{r@cyl`#w82Gh17s)05&RzSv-DZ>er?ue$faW_Copl=?XB10z)X zv{`-O)t#wclvcw*2Rqw&-|QPozP)aCcshNgqF!yVR{pbu&N1vpC!litX7bTzyc z-wQ;x0^a{TkG@LS?hH)~4?l{oMM8`A_8^gQ+D{SwgFhHml5EOlolqZeU!Vq~774 z+)CM?%jAx^us~N_nD@s58bj69nc6L8YfKmu>N#SD@XV7}F0QK}dFh2VQJU213Al)3 zt^x1l`pFNKmFw!vz1@S>W}|hq#@NxGSCHFmpM{9!au1V4cKa4%$Ga!7XlS&lqOLk8 z{rQjg?tXvs=AB#jA3T2W^p~{P&mKQ`R@P!Net35O@zZCI9zA{b)00P!E+1aG_m}&3 zuYG;<*3BEYo@5s38hQ-rZ_-}Ac$xM#<9&LD2C1$pwx*x!o>kYkv@|}u*EM7d1nh7P zPz@g*pBcAIF0XAYj@o^ptu^PUE8+b&(~!N~v##+m*Zl0*Fp>1}-hKz2erM@|8e9oY zu@{Z3FGo%eSJt=v?!TLyrxBJv2D9U)k^_w`+tUXKyc?M{byH!x{|GoSRF99{o%s5YAr=IyHEz|I>$YgDA8KQ0O?)GNv z4uvA*RSBmpIim z;4bu(ho^`8$CAcjIuLRo(nvG5ILj*_PGR9KB1p2K4{N zl!z!yU9i(na-MkC<0j7UUI|mVC_1PJedm`zJrY&CALxDUyDL zPzpYNC@uT-L)v?-p}eBj1T(L(rq%G~&Fi$E9zJ-P{wh5qBZpSwa3BpNNk|ouMQwUf z>K-1R_c+}Fuf;q{Xxw9;4+Yn}{eJk=KIhad;!g`so7?A~9(U8+V~TZrX1K@hUm^yI zAj9UyvOlyJ+k!9+cQ77xJ$KH9!V5D?3%ds-0S*a;?@zAmwmG)gV_~VGRv(B_QHJRr z2~FjZ&>|v6mI3sPXRd@nE(ABJx-gkmru1&Bx#e~STA zt^@Nxgg}ojzlG3W>pqw@Yb#E<$8UczQ)*HS4?rN zwcqKV_R+yE;e6omPFZ?~M@H!yHbK2U+(Z(gZi<+LiSTupnN$iTj*`besAY=)kKkH9 z+HY(@L7HqNQT0+M#W~9a7t78m%5C)rP!yCY+$!r2?w(yp=HMcEO6Y^7)9oA|8Z)*N z>D@rPpEi*)5**`yfc>u(b4;OIYGhNmWfAzScE7X%;stVMsUPaMEHz9ECdzMwuDBW? zUFtVD?=w#o!jIZ~jqXWxJvD?xG2pOTyr|@>la<5B^hTUDd59w)- zpa1+Ox2iDf{cEkkWO4b%O5VMH@$kv>H+k>hW};zR%1*b^pktq)Evuj-N@4Efy!0P` z&eG(UH&h#qO_0Iz(_g*#>F)PGKKTVD(QNwFYD=YsCUuX^gwl;!FKKS*ogSNTdF(yb z5nsqR>IyAKmdD+Zt%KER?DWcNWZsG2GDE$_?ELJcchT>(*ieUdPeW)~3ok9Lk?7xy zkPc!GIsG-xZYU8bp5LMUw=^M)A2?jg&zh0Qg_}zxeEopYSJz#xy{M%Lk$f9x9Tnzd z!isq0_%-ZWi5ZF;Bly7JiL0n05~=Mdiz?{iIHWZ`Ny(WQa=8o&WEArgW|YZwcHysu z+h0Z)rm}*0PWq^hlxU*%rS|r{55*m%}}6 z>*=$Njwf7yL|7cD{gI*332Zyut>sk;^Y>%P{qJdQ1>z;H51k%lQNboBn>smGp+AB@ z0l1v7`s92fo}eZ?=^golGgm*AgTrUKJo^h=HJ*;KPT<%f8oW-3ZiWul(v5|bvBG>x zNk!o=#Zu=usd=EVERLS!=rQXm5) zwLo)8xBLH!B351=nu(y*`Ef(9~!jUHcG3qd73@Bw^%7b|V{9b;fu6 z|7l_-NE=G8PfE&w1m3sZ9L(q;c(ae7T>K;&6ZerZlgm$$Saeeq_?337@xf|afTTVu|8isVFBPH$r^TXdO`_mbaff7B()s~K+41t2TFi0_FVxO z59Kz#i>!EjcrnGo-xYrbEQ3$Z0tZV@PZdC&-DW*R$B7kKhE!&UM9}ZZQ{`ZkH`Rt*)%Tu}Etg z>hGoNkFlam@QrEWe}%TVgji>hmhQGCc=x~Ne0X#J=EHZ{2-d>gqhG|^Z|*<7dE@3I zcC7Carqhte(pFZHlj`U&b@iJx2Fu9g%+P>$-fJ_DkNegZ>=TQtn?a|C@WY08ik@td z2u0D<7frcl7UtZN5+GLUqHD;?N;pId94Hg9?a(qBaHp|QzIzfLZ*Vn)uH3q`tvo#s z4~&%b(_UgXzO!*0kD!&JF1f&zUMy%89&B%tI}$?!MHey&HJ-2t&e*t$i;2H0SVBif zTo+Ng6enGTA(H1mGDGltaDd3G$^;TW36oFE?))2h?*KgnC@#_$R+du=!;ZC%nNC*e z$u}CE2H)LaF_u?XnwyHyZ7pwasxnwRtm8A3`2?s|blH)v=@agvDDY$VCF)K!DUD@A zD|DYFe{`5QM$eS`XS!M`L47PN=LWS>#U90ZP&-Tztm>fQ-KK!aFUCQt^3_b`ahWlE zhCeX-RRV#}#gU{}$1c@^C%nxm8hN;JDS81JAb=~*xIi0(s@i2`dL>bW44gu@Odj=C zSPT{&L>EOE^_ncg>^Vd{Am#BWI})=ZU|Z;5v4pkDWW9(q_YR?!CyOnk%mg9?mAZW& zxQPc}DpVL)jCk&nR7z+*=Tm7UL`E1XnvC>n0`%k@>g*&(3ax*f?2^kxlx7^kA=I{(SJu`y_rE((0v^hv0q{as6wA)iBKb)& zrvhi-`z4?v=f`$hTnNdkVt?_m#XP5Ri&x6pAiEFQ!YlSZkd+TYt+z6%_)L5{Uy~;TOUiMptc@1(3o~!PZLEck;G*FjXb5c zm3x_2{4qDbyy`WT(r?~rH5sHhbLgsq+nrgEc0H{}Q#R{{WL{BWu#TEF+A&AwyN1rn z+=kZXPAYz>Ux(PiwW}y&Dissm)DW#HEGcH4cv4h|YUs1?pJaZ_gA`odU~bF&@!7rG zH}Am}Kq~#iW#(TBD(NbrZ)oeJx4ACEI5Oj(wArQtK0B1J;EvDYf|!_yBzOLolZeYJ zwkt9-84mc^H_<9&Y8v%juiNcGYbz32r8FTz+u=QSt;AkVqDfzY5CwKtmg%W-u)B`{ z^5O2r%yK-wzZHqaWAUv`%r6&E#{F~`-ADS*l6j(R0{5R5DMve7hhm%2%ab6b+C5>6 zlBd!IkRXgK&(bAXc6`apKXdJX40~Hi>0p>-nuv82$l=1|Ty9ors|1*sCUJg7tsE8$h%OHzq6VO-6QZcA*BZ z28B=rF!D9oSveVbOhnPWL7agv6$oPdzz%tH=E3iY*|7>J z+z{53y{-zpmvKlo(Du^0nkp7qT`fwW)lfWZs$j#lW?f4!Z7i)YwicBlzeTB?-dJrO z9;qpS``A4^;`C03!oEqT4OWF^0LNuQsXUKj;_388=h^UTB653kPwYA+7(kuCQS#y* zGw#dDrSK(t?8}SaD@=hkxs(3_#4pk<0(6OzC`1BmiMxKExPT%-51iN$pPvtgu8_=M zRobk=h6$M*vVj*EW1V@Fh6b0XxN>q2XK_#NW#=pd1yuuc&aH&#Pf7qRf%FW^rUcm~ zY%eG94ZqdN@jjf~x5>jny-rsZVke4bFAR>@W}k(IkK@N*TFP;*km~TA$YzsSN|asd zp!BBXFC^@q|2gkU{%@L6yqOPFPJjGBN1?0_nWBaJf!iN3%GtEeD$rIn40^3lfJ=zP z=$b99MS0a_uim9Sd;PlJ+GsR1P;5$Gu$(H@!XkqDtRoWgR3w~VfxoseC-cr%-(=UtOg;a&&z+9`UVi(`PgO z=V*v#6tSb|R0u-i&PH@4;Bh-FEqx9@U`H`8SPnae3;v75)Q>-%Mk0HRJkgm01hvkN z0s9eGNp`A0gDW7Wgi9(04QdI0O5TPj8{0ow_QfDdu#&FB+`_EO{P-_&srPoyB0?0X zDrc*X1A{DALv=l-yt&}|^FpJh$S_b=+}u!IS5;LFz1g6*)RcF2nTCd~Lqk(xu4c~x&N@_eR<}g(8g=38(QBK#o4YvD2~+^sO-hkH{`H00`B8nQtffTXWs^wi z{)~X89sbU_l+Uqa8J>2HKSB3&oJMRW z%Me}VPh^J4xC@>+VUBkdW`N*1QTCnE;i8!`nNk3agre|v1=5MkTe*T}!E_?)-%&t{ zNEZU3#d#kK^#_ILM=V_RFxOY7ljhj%dyWne8Dn5Al% zWGQkdn_OKiePD?O@sRY0ktgEM&kh62!W5y2;o5@NX&IHK>eNph9L@I;M3LcTz#wM* z-O<(xF3b4|$y7n;37SUqSQf6A7&*1%;>9YDRpx=B)d{+cwS3QXJDTHCq@Mm{_4j!D@OihNLZ=aHFPUA-A)Hd9?h>Hlq& z{^bqDnktHybb3(JPYGIpZHC+V7SXFD~dHm+8>Gv%b+=<<22-OIRN*iO0r7ipFKa}f9)Nj ziscoRr~s4+6^3ZbRiJ)>-*|n=IVO~dyTBMl(QpwiE2P4LK@}ex^jtOmTGlUw8xUsge@;C z$^Y=`(StP7Rb|zUM(v~TzrX+UPp|M*(lg#=WoH*smr+w!-)ic#_EZ&`T%jem-Rbc~ zHfILhp707nO8)H=pP;P{?y1?{{t@>giJboK zj#kv3DZ@Y^fD&9QMC*j-+8iA9<(Dh#2$CJpU=-h66d%Qus<##_t5d^Uk+bHuGQWzJ zB2W5Pa1DfII$XSxJ(z}U0ka$<8XFm{fflE*c=wYf;ijgR| zreZF?<^2wg7pyy9*-CfuLl#})uA(iP$o%)>v}D02rx{#P{)e=T-17Q12)RxAqP()~ zr$0Z_G+7WSs%vhoG1e0~tbuw>Z69GX9o?UFH$lBh*8+MnOj<-|KEA&5O}Sy@yYqzkc^FgB@u`HtmlpQQBy1>9AN^%NrdCnIrRn2-i~I==93Q!rWXSdLWsR z)AP;18ZE}-+mIS}4)#Mci{VAkPV<)SHJteU?M=~H+#)h3Sw9_Y z>?}`>P&LxtR-0a=L$7euxhHK!Ni;?q#}l1>zU3u~Q>QEndW zuY~40o{T0xH<5h@E?Djdny?_hh>$MA=gF)~&C`O?f>NBC%&d>J0L?Cjfr{m>Z*S{r ztZQs(MmCT>bX1Kc^uJRJh_pzoptUoa|JZnKsjMhvWrYPF(;oczI!D8Ub=7GvpF^BU zd-Ikybsw?|(NV9X5U;CC3YeOj$Adxl_$*!FcebX7J(1YD9|lxZA_=Ewv6XdF6^F4c z3WDP&BrjGHk%wzEDUJ~yk*DB)?^17pJoy1T$+P6y3-K$(#$i^aOCpuVv5n=(9BL`M z(j5^~r!FJIe0HDL3u`^Tvk=C{e~L$fYm_0un^CqsDWq(2kP=4`6D8}Y*dRfZM3o_t z{R$9d2H*#PB}vlDMB*|ihe7N=_&EG@HeaA^(4x{WR7c62Hq=$tRu|p7m7hmcrn;@Z zqDoT(amG+==&I?pHCqR%C`EwM($PQV_c>uan_-68kc}E1A0M((kA&p;!crg*d<^Gp zSF$hUx;O{<;$$TE2-vvwITdGQK_fAlnht8#@-XnD!K?zi!0Z9V;v$3~A1A&Oa=KTK z__SX#Kuj3YHQ(_q=9f1+iT!1FZEg%oNp^a5#|V{~W45k-7HM0*bJF9QU0Fv#Z0qnd z+BdxRlWYWNlEDm+Ayqx-7^=^zgj;L~?<7U0!l*~02xEVFIAk!CmlPIIF8<;<#ZzshV7*=$Oc7i**{>g37sX_#-eT=Iba10J+>KYA#BnI#kZ6#I% zVHAokPXg0nRf(z=Vc1A=C9u}08;Xfk)J6ffL@j{#<;B01_Y#DwNHYgdO$R&+jsV`6 zd$po)y4m?)=$n;AKegic(VV0xL*sn&8wohRl@XV_ zu6&XPvnt4BzKpJV zsd^l4)Kpj}oaV9NU*5GiCc^F~8QqmlQ_CAW>%j%dZV>b(cAJRbf))%WnMH!`tBU)= zR#=YBcuH3nxfT~cFm62MWblg~UH<(-$Rse(JCQZ?xS-!L$TImZZV1c)`uDWgl5AXM zIl-2~f(s3;;xOd0D@7XsqfY2WL;|kRvH3PS0f?eYmzM00JotO|q@_hAW##&s+UEAo zE=y-eN5cHA#f(NvEBH3nC2DU|PlMo^^4j$kmv}EpzONBj6rVj={Exz*$GVs1Wxlxg z)BEhAkJXy{PtzbnzR5^W&&bIqB-7YB=3QLd+*u7xPEky>5g2!emx4Qc+x{tU?097* z8eOHrOLB57nTh!0!>!$YVs&)L!hZ2n>LSi|{ad6onFq2vB!3yl%(B)#VZ}a=hwU4S z&RIGU5$C2o$$y?72rA*>%GMGZ3JtG*@agS+K%uZ#C95LaJZ`|s5fAvT?> zpkyteRSD56wIKhEtk4)y@ml0UsV_;PV!-g>6X&I3NJCAPwUyH7Q%W}2new|@|M5xs z$6{?gD*jk6qph`!`dSS4nAz0ZYi)<`;hGp6p7Qy=MuzA8R5|tR9AQ?%SxeUb(;vevbw|Q-T zqUrapQ!cZ(K}f;lWo1spzd507itQK6j9exeQr=a(b5P3}eMV(KhFfgA81--Q)hiJS zDPuE}EV+YXGjUmCLwnC)%ASj2819)wEaP|a(aUA;C|(7&oEi-c9f-tM=O=To5KpHY zQT|sN(4Nfx>SNaDk6$ApK)vao@?Z;yjCx6_OqFV6(K|cZx_WvOJwKSc+Dzz#iYP3W zyt+D3dzIe_{ST5p;_V2mvwq;DC!yQqOTh^I<1$Tl+JgtL-)0x-UO!2Dnf^w~Ix@0K z+WVbz3e7oF9Q zEKzXfP#B5Zi!1EM4%fW%q0r7L#1C0UW$SiEO+gAP@+&o2xMXLlCy{JkRfGz<{-{KQVNpA0-m7o^V`s&(8h{*?+QTD54UB!^&}{ zd`^CnbWib$zY<y2c3BjuY9nM2j)f{OQ_7peBLPj zC!4LKLtaR*NARu;x-2b; zGr4>zyXvc)ZsPO-u1hKkqd4ndTy$~MNgG|oU%$YA$;Ntf@MMD-mkluDB#JcFB5d5I)}eBXor zg3GQce)Ht#C$ICWik?0B=~?2%?X--{no;juAnXsW?I+@oXv&NPC}FF^W0LR$tXSk? z^i|o!Zc`e7jiIvOG>(KV&NM|?;z1KV!x;cc!WuF#h>t1g#x5PK`6I_%(PN3XU&Nye^YaU9F%BiJE$R{*g1k;l(m=E7IatWXzxZu+2NX; z{Dnr(v_=(LPs%Y6PYL&&H|7N8?bUzzA@iHH4g`s_a8u?gL&gVH_L@@`9bV#ue?Uce z!_z++WS#pmr-_PuMyFimez7_y;zP!^-h{mleNMai`zu954tAy8bvLh9Pf#^ws(ez| z=a`;$xo4N7hbKGX)s0O!VdR=o>^`BpCW%fNJx)cwg*qv>IBywQDZL=oFWXglQ2cfL z!_$)=_K=2@q@MUc^2C2-^C2B6Pmb?Mu@~uf0wPj}gz3JC?*g|xKmR;0nR|^5s(3Gn zoXhO1l%7h`G^zP}vE~v$scL|M)MPUE^mO+~2W^_Pw3%9^KZB8|dR=XzCRu&EMg`4C zkycbxRwXL0K{PJYUY7p7Vw4rbxgqRRS@8P7y|g^-yQh!tKlwTBU1rG;4e-1R3%-Tz zMEpi!*E`j$BnL0*3 z3k6914_VMg!;YI<8{7I3gn`a{6O{lMocl+YC*LxSW#=ITG&XaRqLfZ5!brhnfBviQ zk@6dqLoDU`sp1s$?9Ku4*~#X7zj|12saQnW@Fq^bI@7 zzQ9en1k*R*$s$ab^BYPG5XpXV{^iE9X+isb5Fu@qnFwfy8I>T z5;a$8fR?CD)_f=ay}^T%^`(t1dXLb&7VIIIxEfwuAaj$5|16z1WlDn%0XFCrgM^<9 zp4oH=np2S!srKPEl`J~4&oMPQg%3sZ*6 zp33ntUpQ0jjJPWTYL?PZXH&W=>@{9EOKOz`ofezTSYLMkLuGqWi_Nv*4{aVEpuZGa zU~tAKJPG@sN6>L`JKf>PTwpCU?;5vRyL&8nC!HbXB{;ox-m(B zhtDORnEKC_QwX=J5{h$^6;JT<LNG`F<8y1Bc(6^*Qhw)QwJ zWLo$3F;TpWnqVn&eEC2wfGilwsZzr&<{M=H)t%z@+2Ps`^C47SFhoal6r)fSgT3_=_dV9fV#dEY@)1m~!B;hUtCUar#NmIw1cYm$ZE7T`Ril8(Fx z0DpucF1@oD*xs)84t#K2aN=KVHnH3S^1IL#tLe54%=J|wy{`Qis#TdyLX>3tSx}@c z8|f>#`{SF;kMEw`d7K7$Yrr?9MMuOAM2r@k9 zd5VIK8+vIrOVYcj8fa~#c6c# z;g$TUV<`lZNx_t1aHVXNLW|Qqw=*QP^Ig|S`22D&w7a$7-H}xjo`#q{ib8p|;2SGQ zdw9w6ic*rwi?pn&=nUV+9|6^sBXJOtm z6CkHO-d@nGF*v5cMR@m!p!d=K=8D(WFSM0$9(E3oF77P)BkPgClw*L7Vdfq(MaEj% zyxI`&`i}KK5ROFmB!HMWm6n5Q=@#~Z><<{4zedHS*EFuL>UAY3S8Vgol4IeF0Su`j z1afh%*Jp=pegtYn4*dboR8PRJFhgSN+eh)E&8>s@;abxFA&5X=o35tD)H?=A-fnF* zHuXC?t;6l+jv`%$Cmdd0UR_&R*(9yHwt>$cL-LhQt&9mCAO}|7hmb1yB1~{{lgle4 zI8H=WsZv;{9!o$b4gL_=Aj@_Vv30Z#Ite0jA$Y0Skof7{Iy^p-Ljv^@)qm?UH>sfh z6|(<%*XV8`@MgQ2ll=IV+`QC$T~G*1z2tAoppT*`g?_mi>1R4?S@Fb?D>9iV`jjwv z%~vV^mkZ2LWH?b%GNHE}aITv=L2t`EqKB1Yfy+{H(jw7SWw}6+R-f74@zJtf} zX~X3`Jda0x(LnH6Efu&l#LNJ^at2k*kXI_;uvAKy2Pr?k0%9(Ki?1Clea1fM-|~BxqMNIJk7KkS9(rd-a|7x=z5Ns({b7s{BHE(c@T=s-DXhyJIYqC7=OXgjm*Soi-igrMwWR1FIi+`M!_#Cb1;y?XVKP6o12^Yroxn6n$C*uMhsfd`pAm(WD8d}+MBTc zZrJ6T^3lC%PuL~0ssrQH9zn*4vypK5mo?{>j91F30=T%mluF~U;TL`{Q{jT)2uzGl zM(|dkkP|qRmy)38!vX(=*}c>FzSkZg%C+*}!n7QYEKK&48?dasErYJ9Uh~-W^hjS* zUgq<6)+c>+IIl98m~!=0*5!w_SXc1@LA$D#(*SD)@EkmsWbRGS4)k+! z@K!XR^KMAk97~=k{tNMK#OmmeW^5t@FRox;fBygh+8%R9M@wS^1TM^Zvg!($|EdnK zU$3d7T`~7vuVU@cmlv`JV0TM_2Y_e#Xf)b3@6o~bRDU+LzO-)A0kt z>YrcVU2xIrG=|QBf7(81?d@u9q*~b6+SSwd{UB1KXiqIir5zW}n@DnD0nWeU1}L`u?-o zzI5CZ!RlQs{vmaQ!BXpaxDn}C{LI@9P85hj{!=A#LR=9-Xz}=p2jF~?H+3JxA#E$R zo{(41j|zF~OIW5i*tIO;Tw#atGuv!4x_)ln{p>b7(`C;};p}^UFr+ALuoW6U>pQ1W zn+RjR0RFuZFDDnrR$>=!LT-I71kk1)C+fW@$b?8I3rN+; zMT_K6P`E_7*yHn>s#L#_BdL(ryLl*ZOjs6?Z!zj44@0yarpOD_@428CpY3Gk&-+LF zI6{O&s}4q&CR>M%>_DNBk12cS_t$DimN!O!XjxiVfkz32eeUp9Cgt+O%05o z5Yd%@ZE0$fov*45P1%C0JT35d`uLT_&x&HUu1=}H*7&-a)j2HJ#wGOT$f#aI8l!W3 zaR>VH-4{ArTk=}T)|xjE;_NKO>=-x9_BZ(!P4gu!x|RB(d(6L(t`XL}tTzO`!Oi_# zDs@<}-S?$?TAGK`hx?xPNW|%NFE6h~5(kGnNoODv^(=YtN7_eEA_?r5_e$73ET`y> zU1YmqPRV}0v$d-$4V=FHU1>1rURw)#+|0`)(5~!!i|yb}RwfDPWoJ@bjB{o)d84Ki zsg~q=lJqI%VE*hMj^g&I0HAo&Vs_`)KpqR&1LAyfluc!hBy;h_KZ~i939SuOdNtNa5yBP=TrZ!_iNKmpIQ6q;L;xRmEbLlR{E6d*1qi3AdV|4NNtLYv}IUT5_mV73$C_4qzd zj^S3x+@GrtBHwltT+AKq!KS>8udYV6x3h)Aa#q=FGoBTK<#p&y_W31K_vn;q)@kdk zY^!YW&Oht)MB|vth`$cSe%xz|Ztd(zp)avba5IJ>w5!USoE(U;rJBxVpKe~<>M+|n z-S+AmWT{-O%*%K64v&Bw9Qf&|aW2fcE3#p?#MJMo|gg_Un8;%J8G^gmU&rAPCGUb0J&FO|*r0A0xKgPHk+&7?yi@J9VCY zIC|)@t_D_d*kq=Y&Gb8syO@jQvYB0(n%T{=x;epA!CAS+1rnDe2h+}LEIB;4I%8fr zKFcmmOe`OePof?#^x@IbmTx&FxmgVj$!qeVye$NRe40&!@=v@sBt>EroO}9+&wwz1 z(DLO{0Si+>Tb*>C+m@}oXxGnAO}JIG)OE}**ddT38}^aLQHyywz@!Hl8Y!5BCqG&~ z*0BHSYq66#J39_jiVK%+`xzOG_jo}ge@ zAd?EKexVGp9S~GPn@keEd?3#cEs2I(^%E|c_Hr`5C58t)A)d0}gwF*$aAl|GIjd_w zjURFD000%+&F%g(eM;IEJLyCu;P(ccZRSVD}LCd&C+SQLblR&=39!2JkyY)kc z84uM0L0_ygK48=VNrW_gz~Zu$h+uy%Y8CJ|NuIsWNDxJ%LQ_-vKt&39kQqAj?u0ltl^8#J| z>vV(Aw}Z*iCpIXJf2pmicvR8u3aoloV4GYi{R>Y#c?98?3oh-&hq?zmaM)Xu#&}xS zSlu7NocuU#pM&BcJWr1gwzjgF_~v>r$lyS33)6<}bUYRbMWPY2`|vo@>dQx5!9*+v zay(=|-Olzi-UN0*Zz4Kp?=uzs{`UUyej%*6nJ!3!M1T(y0=%WCnc24P*~7EVh2`)b z<7?^gk{?p%XeYdEi>s|Asqu>#va}fP>X9xIX!TA|Z-jGcuM+oi*cXJE7Ig3*sUakj zVcjS+5NV#m61-F>L~-EKR%$VDwJ)srd;wNen(d2$&<4*ye5WN!#X?_lJ#a+GzvIt< zRx^{n7%ei!J$BP!uhYVk)}H<$W&9Q^7|rtwE^mlXg|R$lvpQEJ{~>tgy9uCTxsa!m zMd%7-Bhb|n1I5|VhXg-$=i6QGDVg`=`awB_x*!}v>h!~-&1p}ZE$V1vvVOa5b$#nG zz8RUVy}fui43FhsdDG=uvJYx?<3^irWw_I1oOZgW^e$@R4csqTsD?#kG_q=UM4`X< zY5aV(Ocrw^-UuKU7ou)ur!Y_zVOS3oj!Y=W8|!ET7aDJ%p=$3L?hnz6;7Q1;Be{Lw zd!v2T46%pwyHTmTP>o~-Y+k6iMhi%y9R~6I$xlQ&Qb1y#n*dEY+Ce515gkI6<0jJH z*4f+Fhn>p6AX~LYh6fR6DZSUh>oQM4X6Ij({tx?ldwP1idU|`hdt|i~BhaNxL35wI zI&XYKo`+?rtn7BjA~-wadppxh-!~FmTHgp{ayzVC$#6W{EeXWqKF3Njmy7yVf@$I2 z$ihddAa19jHGh;q+1t(TutIJd)dS7zeH!rFmWsjT!446!waF~R9{0hHl6$thla>*F z)JEX+?KF>hQkc{{$nx5f(;$Ay3TSMTuCdOU+;Q09X3zO4WrBxy;qBW*!0Fu0)6U_G zC0s-%Pz+v~3gb;uW4{Pu^MC??k-S$DJ`jKhQ15h57-0g%?B~E=zb32>4Rx(8H4US* zP+ZF%4=ZV$Hjm=JikTR1JlI;M)g<0{5cvtrnSOpaH!cf1cq03IyQv5eW@@CbS3fyD z{kd^;98~P`1UHh>t0_)F$W?-wC>>zh}KbBD@g|EG~t@YXRS=&a&t- z)V%2%n-45Czv!8q@B=<23I}4{@ z2zw@s3ug$l3u=RXV=F#DH5JcazE{^ggd`9;J6_-$1*>DG*Cu{`O7l&CIyhaHbdkTG zKbOwE^0buMAmEECr4_|(L3%(E+e9})3c&YOg0!orj}?DP-$w-aAf3)WSQbKV&%SU>x_)MaSZN zdymz*;&Dc{cTe}jw!n5KwPF)~ni2ft{Ycom;8>$6LfJ+-kIK>(yc;6eAu|bt>P^}E zjr7h?_#YgeXPT?~ZP_E7s8VYSeiHxgPOcz3OaSUzcyK{CaM=5u3v0Pk(3Ot2pRDwS zdLk2wQRkRGa{4x48g%WS=F-7=6a|OZGHde&4>2m)Myx{#0=`LBaPfWojR+_n|B^>Y z-71+<|mi*{Lqiw$|7eK z#jj8pr#D4Su0}PF%tLcP5Y+EPP%h6v?omz`4vu5V;{2fFya3%q#o+qCLtD8hrV6~e9HOD%>cZsAqT6bpG1m&WEjIz-T2ooqGWedw zf8Zd}hKJ%@T|tfUTPWJd-)zriV+y4x3H*|@?}6yoC1V58QH~Sn%JZ8=-3qC^3Ua$1 zDfo4AxG>+qm5#3Nd{?1c=_(~%v(>Uo>Hb|8tsutt$<|#gM3kkty*hw=e?QoTb)&sq z9oM_iYc-=cLWS7acwUc7UUj{Jz4Sg@5tmykEeke(EY0D45Vf0aPNy{>yCve;?MPq| zW2Uvq)>F+sSNzHx%7U$5R}{hm@i_d%IgPw>1NqjU%{!1N%k%{sL2@A*SdL z|Ajl@E$f>z8F8RE+}_Cq*v+v9;MCc1jsg@4EF^oK9{G)9p5uJR@0xKP9;eq_PB}<( ztFuGn5duS+Z-lW#w;C++UH{HMaFTP5153owO5Q2JuE2A_1Q&=*<@is;wc1f7>L?Nq zbK5d6TuAl4Zh2L&qph(Z_Ne&!ZU9#OvD7wwZ-q6?@<8%fl7Hp5)BMSM#}4MbnQ~1e z*^Kx84(Z%&9_s2HHCsQMo55ogWfu6Hf=5mRHFe9S7fy=8V7XI>9*OfyqGtfZ2$;en zOSB?jo1!+EyK|q>Ln&QEpp$1BQ@y9zzISx8$FdOrtYHdM)AfjKH%kWCqVpFN<6-w| zFcR=av%Cu%0aMGM(;slyu>mwSeEEaUz7&j)e%JsnB4J!)In15p)=P22 zHOcH&z`qoj`)SxY0jstJ{McS&d7Ni`m;TG)f^lPU)U~#ba|!^N;5bXS{6Xijlds&k z?W`>N)5`vDN$dLuyD9I0HXtjQGk7U(Wp=j#q%o^*cDHc)Uk?d%9-2A1EUwAB+u6XJ zZO(&+SK1nIA)rEeX{izegR_a_qlDYx-=&>5X9pP^9{G$$^KwoiLdXxkl1SmjB+Ny_ zga(f96`GEJpgp9VJy)|O=@9%ZWrVzE)Kg$`K9Wk~mo-^znXj^my@J@rgly|lG9!MAt{?51chOb_XXC+9w7D;Zq- zjD67;N+1;BnW-uszFRr{SgwX&ayjymdPazm1zUv97!;I?`-O24hwL1MiyU3*koQ;v5Y(zb}X!^e`J-T>mp@FuuI7ydFh!6^U=>c6<%x6DtACVtgL^ zboHI?1r(9?>JHn=`r5jUHFE z2HKiU?L#xm*MO$Bw(jo1ftVDjEINnVC7)w!2)-6&E&CIp5w8mt7kXUi6@341NJwDB-Zm|v&29UO4&Tvl3LFq@{uac5wrDqzjm?itC)l$@#2vBj=tVPo2_79_rT1q9Hj(`ggP*l-^k`g7YGFAAeLVi6-tp;;4{on5b4r% zyeO2pa(s{Pg4-d?!DD;a)=>)t8*3V?Urw@9%)aDwxK|1D2>TxsaS*H8)rUrvSQNc5 zPhL6uEI4ZkgxDq-S&uNuvA>;&`5hBO17qedQRLd#=wfw{1Ck8HGR9iGF(u5^ijM{_&l_yOJ7CC`XWFvD@>g1o2horZOS$j{gZW?-PSn(oAA9$* zn^8Oy!>P?gc3TQhkrje8c~c;b*$0Z<5NU2Z5d;S=>7U+vPq%xtv&UcsXkIz|Pus}E zSznaNrLxDzV0`h#CtDJd+cB?$cJ_h4-55LDnizHYg1ZOd;RbD+gW6Y=TB6`rH%DER zv%e_kD1sUF?chZRj1WA61tfA%BAotjdMvthd|Bl>?4Y1-a;L+0A=$=ehn5n&!3zGX6I1$cmn}OV3GD^Q9muuPmPQi zKAFZB-G(JPFoNWuRt1vG5!Om7C$3LXBgok!Xh@y{k4o=T#a-B`@DFl%#pL=Y88RW- z{=Z-oB3?ZZ@X%gr>$HPAJxiqZaGDYGt(~~v;e4?cM?Z;#W|O~BZ^RRC(+=}eXk#N9 zLon={?HcBuo^0xzBjQ62hu7x~c^oYChGRytz!0pwMp7)OKUJCu42KqLgOAmimv!fdDk(xX_XB`m$&`1e8ZuF6c!v`{2L; zIK6-1ovx(6x1_g6>3ZJT@kSIi;-SG~HNV1ehvn<9&0hQ#f}2+~Q>>s$l680DYqmL8 zD3J!WoU?dnqTlL|lGYIHm;aCD=!f285)Tsq8YSadv92ZPHe@u(!r;wb>V4?iFvyw;W{Q5*_j4XrzRwiihOO zWmfd`#A7gff<$~U6ia5eh?UGHsnR$$UOHu&XTzvXvA(yk8j;}w`FWxy{OB;}i$^P{oAUBolD80DynaX+_I30!kWuu+@BD*FwiU<414L2B|@RYy)*&v!Ro3bg~%_peIVy;EHX0z?#UJEqj~#ZnHhGm-C`39*Xa0*c3q62!NGr z!+)|B2wX!_Db5S=fqL*0%c}X0U6uxZ8u1_7*d0fgN(H_Wvl8!;(|Sw=@Cn)$yzLI;E8iu4J z^&m6Ie8uln-jtM*3)_Aysn^ZAT?{jY*CR*{gQ4K^NSF1`um+S^>CITe)76IoHzM;` z)WJq?_8D)k`~CA4#+=-%POEhxz+OyeAjtQw1y-nM@%v+az`vh4;z=j-svME(Zd~;; zIIQy5PBU(Uwh^nV%3D?S+Bf)I4KqwK*fvsYgKhW+qc4# zno{$`q>du+$ZrWartE9+og>(}WZcu(Vh+S5)tf>NEaFrlPKaT_w}sP>B?yXjDj)C{2^@hi zqI{hv*r(~`xE8o z5vC|p2s3J0?iT2Hi_VG>F6*Gl>M2ofZ)f5x0GT#kX6-yCMT+%9Hq|X+X+vt}LL{Ga zcM8cOHzt=QKDj&%iFx&|{AWq(qzO5?)G(Lwh+vnSpva~2Oi*<)P8D+Z{`l>yAq?MU z*&`JWhC%@>=GSaSTfzA!t9@-F8Q+WqCiJ3=55Xk`?91R%lt;0E1F?hIiYV3P_Q9(z zlHpdIitk1Ufo^akkyEKqF0gQX1*cXnNC;8^kA(M!peyfLPR-IwUw0&?A?lO4U*5gaP zCEgQugK^l1vlI4jswgTJ3@@#2B$J$;Yre?#$tmrlOop!iE^?Y(VXByQ&Uszy>1=#$ z(P@vqjjz2(9VGFEN(wqmGu7gu#bO_K?rpmnIa_f0!dMXI@;sDx&=Q?7E(FrYr6YYs9uz zOzT8MQ-ZNk{jX#(Jy^Z7TP4-|>6?zQQFl16zc{KNA=V3IbxrSkbd`F0#n->RJ&!uz zGBz%N8Aba)>R;Bpc=V*I#}t{le6_WIOuxQ=o}21)+k2)0DbU90-ol{6IALE8uWxX; z@pkVelB;fijIfPH)_j57$=k#ItpqX<{-26xsHp&zdjZQb8`0NSW(^J`1Mg>dg28Zn z8#%!CwzB`wJK57RWDXr2XJS#%WEOm%!!7jaXtTEy^@-kviR0qKCX;t}Bj)JSzILp| z(#*&M^HIDK(Ws@OBdRptg6Gu$+-qb4-2G#gA>KmE2VtLHrorhr>!!`Flso&Ibli4V~xNd}QugfZU*4B9=OfZOI^y1>0cKOq$5ZHUM~jBz$-1b+H$d6QsL}y{;A_f#TMyjfn#Dz66oRw!&6fGn3F3`Mo_ zg^YOeujG6o-k~LFApy||^pX5%VXQEEZCnKE11w?DDgBD>lCHn6uSe{>7SZ?tFZkZ3 z-R6yMr)Wh41Cc;fCYv`lx0T$lcQ>OM(jRW+ahpAqqL=9RhPRTj!cHMt$lTi9-`ghp z`3(=-Hl4sUKj1j|fX zG2EnMq*lbm{3ssXQk@d*>Z%cmBh~)rV;KxB-WUReg_Job*uUjgky#JkwE(S#`q~kT zfi1#w6sQOrovYMqY?;BS>K_s8s#C9WZpdA9dN?;U>-4R%p>B;h0nDYbbdN^7j@fV6 zQD-(9W|-n(sAtx}*tXyveyMTtORAFrVl|FsO}hLm4_n}B@g0)@mm7iKDaMH_xyfX& zG@n(DVS{#3slY&A<=0nkH|Wgf_QsA;yLWjNVfAvrZLt4&E$EteGP~!uvwkG7x$c>= z1+(}xr0`>B*$(!X1bo2l4f?gT3F7g&R;W$B~x@-pTARXpRK zz_Uwbss=hx{T(w#GH}F*8*F@C-C2F1p@97aKDZ5HlXy*hyGZvq2toNUp5FGR6CnUf zM?_!5`1qBv(a|wx7fIdEimqXA?(FT-gu^ms4Q41z&r=N*dOheR6xt@BQ3vejvh!n(P&|{}+@zEVy6l@L z$GH?!hm@k(Eh-zViBq#ij`Wmh{zxhR2S7cu%M7mQMQ~7{MIp7CysnTcpL$&UR-;At*g=7U}w6+M@|2bvdztjqd!%wgsnkLT@w~Cro1Rg8Z3* zKdz>b2T=)9k-^r2h<7D7s@Po2IwiCPWJ#3B)@!0%aDqfRNuAq7h~ND!E^5_ccyURi zdC)sK^}1`qYBnvnoy(rpHS3VQ%pVSU++JUR6$IY3aMW!vEytvU+C`C(+DekRX&{As zUUo&zPYjJ&oRqaT+Y-+pzM({~WZ3*CH>GlX{fJ=&-ZHT}E7qwc#g=pd8;h%e7cQQo zlkWBDLCn-Wpr5tdj}SAGWklrjs|r?Ah)*I>UdH~nvWMl5!RicxDpjS`mFNYEebXyM zxp491^9$@EJy)Gps7u*xgfF5D2i4T(>o2o*0^=5#blsQYQ8a}68RMf&W$0yc6b6Ry zC!-g1m(?Kee%DcG|6g4_-NZUACC=+=m`zpbRa<#ibE&0k%(;Dh6rY@RjGO(j46OHF z_oKcy-P6n7C?Z$rCrtPELS~E8m)g!HaODcE3~Rl7Hk-)qFpP!6Cl)M62aDVmQfOx4 z$?VSctUr{*H36_2_Ggq_K_sc-W=vW={HJ~Nv+`PUaO7|c^i2;MS3SB1ZT3TZr9QS` z80wxgvF6R=4{c)JC|`=Y4r?|B`9RzvewC<}iVwF10!PN82^5JF-ZBD40iwJ|q=N^f zGn8jX;Z>c!z=Crdbt*8^WFw2RR5FfHmMot|wO#vE*- zgP#p>zL5WtDJ6b!lT7}NooKTd#+Yg}PE1Uj=bSX312{0aDb;86kKDfe;@=K;;@+`&-?GEpL4@Db8e6VCFxoAX7RU0k(;FNa zwLe&1^}82bOP&SGtTP<;uUH*;73{#49^`gXnN&0y+Y~Qjw~*?d$=*>&CcBL_k}x+) z^y^r9n^icH3`jkP84;)zZ*BE%ld&SE`y{N9NArZ#y<7qj4|cq>X6xJ`5zfEJZF%zk z^D@=|u?PtJd>qHGJt!ly6XKOs`O17XGe-G}D-z};a%AZx(kgvN4!7m#RVj6_BNuuBvRwZ6}>~QJYHV zNt_2zCa^ZovbUn9!5*uJ)#D@zBd)V3oI*NWMed7HL- zm_mlqK;Dsx1n>=odf5`=T}CmiKKpRr++uf&DYv6-8?!bl`cEfxM*X0}7x2dD0Yc0Z zJoxPXd~{K`Z5lKZK?0ja62JmonX{zsyDluhXam9NgwXMKd_dfBlK?&iEC59Wdeeeb z_PT3cq1V+1%`P{*DCqWlseUf+;! z{Nh!kwiW6geIvkpXn2@8Bn*lO_`v~6(B6v@6q>Y{6U*_c{RAP zx4pfeOKyg&gKpIi{UEo8RSE5-lasVo~GJ>YNGaCk%rVU7b2TOPQB~iNp?ECM`}W zhzU_S0wm1O@p|G_Cn#iG9zgyt(qQ2Yql_ZLr31p(s4;!Kw=ESfY#rZC&Xhiqv$63_ zeM8%rX__6y2IJH$-A*Rb!YVdDI47UW?gtg;B&Q~A_7xw^$uP%!oVBV{psD0WaOG1d zi=fvw*55xk&f8!xPFt5DTHdj}0t*cav-~N>p4=mxM0_l5BXA0Cr-y{UBuS|?)n}oc zev8m~`Bhby1%r5&Q(F!7cfWa7R@rZu8mN11nx9_^2E0D!@*jO`DD*IunX+1@&0gLX zFK+8^$uubBw=(I?O}w=dumyJG%!1uA%}nRV7FRGDhL~9=x0Anlkxn=f3rE+<_$kbc znf>Q70M}fKpb~*qoGjF)8nH*>QQFBMH z_ib%7;wgr+ zlBiZmiAOsggFBfdDM%x|-tROS1Mw|^2#6qa33J~#8;zx?+doX(4R)|#HkHCn;VkJ6 zSq4Xgqd#^zkBntwp4DOfV7IZCNn6t_3pqU@oTAXN7u}SJYJ!Hq76&=?4Up*O$QMpp zRed9Z6{_&h!a8#+@I`_EFl}H+jpIll4BkHEED}?;qoK2|zNX)3FwagIrm(ezPh1Iv zk#}*KKjXOeJ8l&M;rw_FK4H;EaUkF}p1?yeg?RwEd!^v`luFb)KiaF46fpp%H0VhMCjUv4Q<5?zpvdBc(dq8`dPM)#YrW29nPm^c zl)?D=>b<5f9(9{0p5Glb8|S^Oe_HW;6xr~tcvcr?rbdUSt*|=_zO-`qwXjmT-Bdcs z6>eqN(;bb6oKxm`t9jBgKVu0fp~Bh~ka#qK=ZkXsy_CqDa{JjdasZJS7hhVrE?!*0 zB?P;KJQsICK7k_b|HmAD{HW}~{d=yI26-PVE4#%8%mW9ZRw3}@f91-?5WAR`zmx;$W$!B3|6ig7dy%URwNR!E} z#KBR`vdO)<#{wPX;NZK%uyeS_Y+hLP*#p}QtlNx6hX*E(=EQL>ck1cux9TcQTbsJ( zF=Iz-$E&u9{w_Tr#q3;mtkQ!@rSamGtr>@BN4Esy%4;qtMc$91e(~KoqA7tQ@}4Ph zBPtLV9V1!&@IaI~0=NWj6K;hwYc(U$jSb^drYXgIb7ofP6=z^0B>)R}A&{K<7Ep2g zcib1Q9*bmZ^y-`0?B+%~#nwE=VH457e{kBD(Sf_nLpogkDEkc)GY;#RWHHZT})@*f+pMo`(|HHYRtDI{k+$ufFANTi~8qStKgZTSEVDBGiEa z&^#u0Ke+Ue058iwxWy`{;XK`o7fMIQ_&qez%iR;i-O$yt|J!v%p zUGON{iCBA#3#;B`hsB*fIe+VCL!EPuC0$J4=Z<%s_O*$pmhI?ZOK(Rl8+(n@?H$7d zJwu}=$NWNME0stBc@Y`xy@l%FSXF)JNrlC=CVY^Wmz%0h{()2Dqg=O^2=Q*@;%A_XT1Gi9NBd6 z6#;T)D4IwhK;C7j2hs6%D*SuloP>&dzx~WVDNq zOP-b~aN_S1;}9wLA3&sl!Y=@TmCEPAvK(xwG?w1F1c<9VV~XU4IYLol#_wq zr9Kvq0u%@$zfmVJ<+=Px&L{c8)7*sC=60HN)3f>>eY4&%W3mSVw$7?=OYfC`al2fr zeQ@W6Vdm9O?UN6dqZ{kvox>(Znk)m8Zl5o*!Bl%L!Qcq~Nr^3Fb-Un~{kOZBIP)P6 zmt(q5H}76ui-eT*FAy6iDUYP)ltO1;oz{rImD^Fg&5Jo)$V?euDNY!vzz}7zra1U7 zxV`jwIXko-KKxtR6>>Srypr9BB~{h*{c*Y=saE~WwA_Wtmym*x;q~v~>w?~kUnE{B zG(qKsdZy{1R`@0J`;DJqven+%OJolY4pU|h^XCB6cu7x((*9W|rd&*3%jy@wCAAD+ z!_4rAO3fvKN8Ds3vU2)AS3J~w^{SVUO)vC`bn_9%prJmTuan68%+-*KBzKol}a%<%Rb2W+R??8>5tX^Yb>}KRh12W=L&W+iRPuwbhk_gUoFrG3yxA z+ZOGMZl^aESr3O8{9ts0cTWTbq#RyNHnem!z1Ep$O}IACI=oT#_ioAoFIt2QCUGJx5E}64B)91B zV`dPH;T$LXOfGP@;r+Uo{`++w(}a$ zX8Q=v)$Ua~f`SnP4Yk;i3GeDOa9cl^y2f@5;(|RSbf@_&3>rTU9D_pbAuI+~;cxH7a{p zQb&yEf#bjMEG%9GoTD3f)7cG~lGhamZVZWf1<`q57rDDdgQLrD1eZXg6Wj8Ag1-U! zlEGzPBV6TA{P5ame|UrvRfmn2evFMP-Lq@H@Lr&`Vd!;Fzuvy((b^)6$<^JSPo|h1 zSK|MWg=>u^r~#SDTJtkQw_sh3M5)4jAqJjL;A3;S=6$9q2x&f)y}^We++i_$Hx^h) z5g6?B=h(rrw(3VhDr+uI_un3SUUtRf`tBBOd&^7hh_12XHPcQ_JqGWJb%OU|E3_QV z#M7u4nbTliDVd@s20>7t5gAP1N_xTAO7f$;S187hJ`m1C4Ra~)$eRTD{{`j8esq~p zr2+^JH@$&8Z5lC?!7Wx7g(NBumF`RkN~MVvPi-T+BGIPo$W_8ZLP$9#6|agwNO+l# zHl?+W3unM#Vu^)mdScS37;eq3${b=bzU7PA=E1e)PsO)cJ#4r(32t(^s_j0zhc<*u zC1Usjj&9o zUKleRb2rk2H@k*qYEVdV0JvNfHzDnxbFQD$kINK5F0udDv(oD4&&8KTdCZmx3#V!>Z69ZpTv-vBBI5K*L*uotL-t#3dT(6~}_fl8AK6kjWTXc5p!-jc> z+lE48-nqOI@U6NW3$)l`c#Ldq?{EKw4yoYK1E?sK2{}B9&X4Q-QLD)sObyO>Sd^Pi z!^LFD;NmEO`9*aw+1FB6+4iQkWuUw6ImZ;92E%i+vu4zEOk~HhF?<`a-`*!N(Vk{p zmAI9dfDaHx3k<2ET9UXN{`uoiBt1%pQwA&e=U+nV>^C&2vdp!f148{^K5b)ti{3(m zb8aaV4bu_14C%ia4=ce!@vH45>nnE2p1JPlXug*YUB+KFgI$1cAyW)}_?@$Nixn zZeRSqt#_nn*f!Ge^_Oj)HM`y8G+36FENvA}ek%K3qq%Uqrsj&~;eQ*Ovdp+<`^?@Y z+j`Vyum{!`2dCFknXMQy+)OG<`bOjo9>?+`8C?tbSDp4bj~8p5fOPR$<%&*)F#sX` z@fZQ4M^nt|Vf0aSnI@7|TP}ejXEfLNQ+RPf;d%1+jh8}qBSJxg_3W|iwtd7bh3e5l zT(crEPjsJEmNG)Y1Vv+>mL>qC{sMZHcQx?f1i8wssH{q%MnkOsra|&I=FT16=v45s zP@|g}3SBP@A=_4%I8~#Wa*_bAeOL3ox_yiICgedw|FxP8q_ve#9z3n6ecjT9U-5*& zG;gxmj4a5p+9qd~{Gp(C!8&iZTO6}3wH7ChjU6hOT*lbaXBae2Q?U4#7wpbCyL)kI z)$Lwgmu7Hk?~=e%3?dpK6Su`BiiYWe)es2JI-PSt1QHv&xo!TBUkl(olRi92-o4}A z_vjm+QC(16)HhVWsA+C#YU>=9_7U~(l(-VofCnj7Wnh*=&EfRMQ zbA^2@2$Gx0-CPE2x$d=_?5;&O;>id{RG8)jwYS=3c)Ok5+6a?z==UK9E#7acL(MNB z@RkHLud+nBn!W#e_E8PCTI$@sgg48YA3b`iV8UOZV_&E)khkv$8YYhuhoY~-4GuV= z4iy z%>sJHlNY?~)N33anF}#uyN*ksXNeWBR%XE_j8^A@eUardt|hddQ5Np){41#<$9_0m zFVa+?hli(!+kSwbGqWGfMV*0VuPqddrI4L-3+%9!@@(f$X+EL=_V**m&fI(B^ z>&jPsqa$oGad?cA-evTRS$Mo$CPs?AC^Wz?R^Yz~YgJ}K78nsq?~X6Y@lSt6dMujb zcSnyTo5m^g`z6*c2mB5vL z9-njP;xhWt&DbVh3-sZ@U2GTHVeS#D^UWPO5jjXcfDq>ciE7E%{KoDHK`XKWp@10v z=OaKyOUzpSO*bD01q*(!9_*<4t6 zi7Hc&_#fmRpo!1vEw0Zp7y5=_P{t+*am2M~3`JYm)z(6M1G|Y|xtB_+Du3n!rRpEZ z;QSzd7&jJ391VGSSvgKeqLS?H?;jf1Phuc_(KKV7S7sHCplB8`y$b8Jl#HU3>%y>bumiD!mZ+s+xtzdjFey6+BDri^iH~WfhH0Wi>h^H)De~>(m7BbJeqfy5*xS zB#w+Kz}ZTYmH;_dbyqSiq(%(IWC>80W(%K?kVkfVdKYLyZ7Qi30L^G0!J4Pn)Lo-( zY}M8^x0_e|erA8y*4D$DyvG}{7-m&|C2+&z#gQb9-7j>s~qg_9-Vj2 z%-ZJ$OzWw5XxY2A#tDRC6E#Kl#?Cg-N*dBhCf;`PyWeeZMONsRicd!f#V8)!*ewWa zB&h?*bP#u@9Q$$DR%*X2>LG6$#jJ9gL(S%NLF6f{9OB<1h?>o4Pf)ePbI*`_<|-S0<2Dk z^ci->e27gf7{YY5y}8QK%WNreoX3E%l0}OJb*sg{)=5Z9e7~#|5dO66e)*G%7f;#W z+SS<$%9)&+ot-dDT4!f0GbYx}g8uW&D!$o zH*S~zpf|nJv72bTbJphbO!JC&4vsf{d*g>kH#C}SbuS*=Eq?>NvRS4k?Z|%<%Y>|d z)kld;u7>5wq3gu$i4=ksjw%xno{5I=javM$7vt@~> zq;bYh^T)o0`CD`5vFO>EOE)!aG}tLe|9W<*UZ96qkSi5eWcuf+1i4Tp><)TgjWUU~ zni?SriDR;JiBysw2}*$yXGcX9-a{nyT9(ghR7LG)YOlTlXrfL<{1V*)P?VmlB=BC$ zS=!qQEmy>iku4Wh?`jR3_gv*nsi`C#uJPb zqAiJ3CcVv8x5Go44D?G-N$l@s0f6?FNjJ8`_^ppmQ^W@mfM>UpDM~Q$=^X#GyhYp4 zaPJOX-^Z0G!Cq+F`UjzPaGJMS-Rqb_$77r80U=(b9s(oq`jegu=bwQ*cvr|W#I-Oe zG%Hn*LWs+Ta_L>-=~+1WKOwW}+3~g?AH&-m2O3G<+U8mCs2dS=fW>qEKu9RUxOi2> z)>h$plB8w?;f!YsBO*{6>|{y2QNv&n>kClsT$j76L#^Sr}OZkV5+Hkena(y*J6 z%aQL>uZ#AkjCa7QvwKYNlZa{y=Xc4E;P2z(E$i*8B^u2SgZcsOPfr_Lkk1(aXu~bq zsm0}0>*LQFXSH89wtf6y!2IOO$M1ckx%hq0h{0(yPAc{nYg=1u^HwB~%=?7JLLsOnR%$sf0r$=PCh3|eCboq) zA+8H#?+>JfDW5J@hJ1xmOVFdBMPvni()b~uLAH%O7M;z`_SUPd zElrT#gtk&uBKYUef{s);MB*mS!QcY*>*&+Jl;5zKF1!2FgNNLEHLN3T>lx6GNpo+G zeZLdq#;IxJlw$gRb{+(>6bQpTnQfDA>a{JeP$p_S`v&MQjUxJCh``F+uP1mb!uuS? z?^6PtWi>gxpbsAG<&tZ`+|g|Rx^J0gpHXjweDMYonRFIa3dj%j?VX2Pyh*mPe|n@ z+n)Y}1|3iU?uJ+q>ah6lZ*x?^>_NnU!qw2w@=DL>%JK>xiMTZ=zHfuz@VGQJ(c^_8 zSWra*ArA5+_6-=M$c;gWs_oH|&rP@y%kSpPaD8o#|Pzp%&?>z$|XnD|GWu_IvNVR5ag}R_VGrs=vP9g|er$Yhgj( za$9SI<0-pTHm0j+Yx%rl#A4Pyef70Q^KorUm(?~lOk;m}BepVOoOM$mhtWk+;qUJx zVsW_e9Hq5{IJYNz&HVwNXNA`kP9V9%yTCh@jMDq0R1Q&t#CORM!jPyLTJ`8&_P&Wqp`;#{d9{H4>Qyws3s>10Zg ziEfako%~6gM^G}wp~9zxIFWG(rGZ`Ijh~2cmO*<7b_z_1b$luEU03lI>Q>!{*b7H{ z9$>>NMJm}sm6)c>(nMNHJgQRl13yeqPaRQTgZWYAi)ZEc9}rt*Egv;Z z&eF*?E7R9a6F2}O2j;)Upc47oVwg3LwAWU``qVaPJJ^RYqBl;PtY8}3!s2T1>N+D+ zY*X3USKctuZh)_KIUKBipa@)J7e1@*RZ}k^J-V z&&Y{r*b8kafLA$sPtvd8VZ`FFeEX$mhx1KM-7|_)abH?Np|`5|z5;E7O1X*BaD`zS zl&)oJH!(QjjNfN@;WeHJ4&Ar`8 zY+!Ac-P_#^h2ipL7&Vu|Ak>c$*IIOQLw0Ad`ethbM^h{lq5(K@S@|T9jSPao<-QaB z386jK^!iq9W&IjX*l&6U5N=_-z0M4JO8o(Rrt610y+F$+dvC6lr$>L|4vQ`^j=jjp3{Cp3|1y9$jhHpHZ?Ugw)Zh? zJw81N8K9VNPaAYg)>j87xrU-5283Kyi3O>XY&hr7#bv=!xde|mWD z$Gb0Hy?$BUV(f1>7%gU8dz_2dlzN%3LG!dh(t)ERDrR8JUN)ov6Y?q+7LX#8H-3izU_zT-c~$j!<@<vxm+W@`5fbHWbFbi9waJ_g{JF`xUOh%!NN}K4Kwv0y=eojfKLc{%Aa#LCCz5j$rP*9qqbX zUH;8?Uw?P+-uGqLCsj1)>RXr$(@o5nSz%?hui{h(6XV_76|o4p@eIke52JFXe14BT46>2KvY94imfpLj1V4_jk7i2-N8xXT2I0F;e|wUPF1sL*xCb^iBEE&WsVTYwcFVkV z)}S}9rdeNIIJ!(BK+Z3=Rt3JJk7P_t7$7E=Pya-TaJZkC`~K658qMX8uQU#Im*3To zG?ZV|T>7$J_kpI#Z<(|9-}|XGMTfDg~TS&iL?xB7BGv@CegT(RZ=&?NmTQg z>I!5kLXWF*_Z5!xueCSuZuXp=8(O=&*)^p$e^ilMG0N+TvzQ7XL?}AKTB)M+tfuOt zi%Hd|RNe#-^B0v3Cw~)}rJ`#k2TLEnlo@5|wkx8g1&Yhm<^>$&6z%6CMnP2tR3XGA z&bx?ql^HK(z(E#IfNN_1AE{V5JqU6Yk#l-5G$)iKd<-C_ipFL|WyRAck7T^=?vFp- zzH_hqMMYH|aQk%|h-+YY(lRqWWwp)%L9F&AG4bzj)^_8%sC_E_Fy#*)Rn|4P_S5m7 zoH3aI*?(cen=vWy>_!~VKDAWOrh?P$xa;;zSQo*n0P^t(1(p`}L4Nui&%SOa7*;gaR{-M3Ql%L# z^JhOFT@^A;tq7TWqvCvDzy-0y(u{+B<)Co*nA9%Voaj3}Su>hw#G(s!u~8gt$Lgxj zzaCoOWWS2vX`%3*nXxV5A?JZ+CNm<&feU4PM&#d`)4xA?oA9ApSY*Qt{eI@frp7GG zaMw(KPLB@Fh?G_2kfq#zlGN2`XFd%hRHXOCsDiIQ|0h0V_BGz8(Gczzul=FAx8=?c z&CT^M3IC64^gn7Yz;+o1>gx1{7ax?5PPx7FrUw?gAjeT7m!z1$nYtPKQ z-e_M~VreA<-8*=#W|BBJ$C-Q}+|%1xbedRc!5w_*S)hCZmt_xkxd9>^shFNd*IB`> zu3hG;-pPhHbZid2@#aWhd*JMRwncUl+D?HotZ){9DEYh&QsYG>O%|o@rtBF9l?Y?U zZ&ZaB89*k~VLeE?c?^gcfRM2t0$ttusZ?E4scUsE;*@-@q4F#dua!c}uiF?&Q}H-S z9MVugdAkhqly(s1gt=0GOQltKXl5)V^ODX#mBN=FBcvn=pW{PzXR!^MZtLSmW%uv> zc;~0G2ag_8n}Ybo$pT(*Vsgf80*~|iv|-%P&Eq%Jw)bf3pWM6uR#P3x# zpe4|Yv>u>bkT2Pikv5snf&P$6OBS-K2MgVs{Luqul4KFfVaRH6k<5`PEU{8)3B`sV zbBqlcVED!n~HhJqycFdbYaV7di*ypma;vwL3 zi4CYhZ(K^q=%)Mvx~PPYl%QA9jb(Sm&m*tye3c9;>>NshrOJ1j?=F4yu;O*=)6c)Y zQ_R-1Iy~>7 zy_M=qlGSP6pH+S=pd5@+Qwvz(K9JZX@Jpp3Nk_j}bV9EH&VSqV3U3w646&GyK&OG< zE|Ty!fOI}$F!NUgI&QY=1^^uC_#tA@1!TgKD_`*$l_!rWOglUz1+HkuRh^9T{G(@2 z9^Sii=ck{_o;-V8{*v3{WwX+HySWQjBH1N6G|=1GK>^TEUHR;BMQvkqbK|qhM~|vm zjnSbqNbeFW!KJ^r7VP3C=~-k+XefmkFS~uP@cr-p@a^L#W##RYSeMWcMWtjkOj#W) ztn!7a?%}b}U&oWXTlOXp)c0R}@%7#Er_X9wP^}#ldm26N_ZHI(mP8)!($XqJWzhuc zE}*|ye~X6jL%@g{RamtALMFbG?Z}`Skg*8N8E!aG_DT+z+%CSIz zLx+1-WvV`&g{kx#Mr2Ldykl_%bHrufw?8QOJe?J`{NSw^gZ>V`-uNm{0bkh|HV#1y zCnl|)z^cPG#{{Us;LiT?gO4xD-S;!h{UHrqfR8j?F9Q!CFk~wE6sM+&o0m%z&9|2? zU3%K5y?OD+dyTCRE?utB*AwIhyX*0nPy5;YwqR!P!aeqf={dv9;_B+0&NwwWWiaS< z+6Du8V43kCyJZ2fat0auZf=VZFG*#T)E(;4&B$6bvxOpgE#!53ahMOO7PlgaNFugP z@XxY%LxLPOQ^>(AWwIx(Ot&g_Bz@tp@h-ueFay{B4>W6owY&6y{s!SN=>SbXf4LbI5p z`~l#k;s^4?zUJY0L_)-Kf-5_tj=@pDad`Bb7^rAO)1W{ z!N>-LxMzZyh7see1ru|Qo26wsowu+Xh$dOwvrS2Gh+YW;ioJBef!oxo_-VCL!&$8=Rc%NBVD& zxq8T4mVk*x01}~;NP;n$NT!)RL^ny#Cr$6xO{x!4r82#|D~?W?kJ7lVggw6WKHMrV zpMWWG?T#2b#w=0CoKm%6Bsg#Dw;1d?Avdja()k@d5vVxdw9L9`+l zB@!`&;}2n1gc^T&0VJ;=%~E9~d{k0JWvZ!_iTpy{MIHz>?R$(kycT0;>_25a919Rz zSx8<=;}aC~M#Cn=3-|)PtA7ZS$PuFAe}U;lFH&_vpM2g>--IlrC_jhSsUd$q!|UZy z#r+??`Tl#-`n?Aa%9QdyK88oLx{O-~zSjMr$Gw%R>DltHv# z5~&U1p2kb}rPBYGsCNO0``@yB%eN*bF@I0aKabO~b2>>Uoe)eUVH5nTg;PtPZAOtcCy=1n3XwdoQVud2+C8 zVsZTI$i(av{wibRU3I0cou5W1hFyIlQwYQ-=Rw?CyW2|)oRa04cVl{-&OM_KlV9-( zom=v_e_3Nhd5bN>tE)J5k1cO+Y#quKz<054oUSKP?&sOPO2fOmufM;yZlz-X)I);ISv6pQWD36;{tN#4|8gg zIXNNv*|UdFo@+E!t^(jAmh@V}@U%-yjx(c|_gelnBh^~kI<~ewksTCr|5@zQxR`_* zRwHw>zXez}wRZJ(ebU~lX_4&2(8~JC+CtNVN6(|~J$Uf=L2O)-)#{)X=5SWEb-rw3 zlW%t?Cj=44XSQsvYKHt&v<66o0R+`X9*rTK{|J!EmW{&4mkuGkNv0}5JtuL>`a~9M zxkfNkfo}Os<8zWJx>fSv*qi$Hj-Fm>Jj%8 zzOHW9SM@wsmS(;hu?JcKQb7tCQUGD6&;xnH$gq^oxwODsL>C}n zZ=@zQ^3-%Mt|sU1m8i&j=^;Vk!6Ek^T1uTIg@tv^A14OuY>fk`#R~ccCkJ}Qr~BW( zADf$>mDXl-c(AL*HATJHGr)hznj2&8z3r{t9Tc(~8%Tr~HCIg=bQkM7tQwb=(OJ%N z?XIn?Z>%$SKIR&AZzEiR&F8=o!m1s7``BN3r>{9^vOAo#)|*yTGeef+Kt?BswPGs% z424Q2oPnp{I#9u0h*hVux|FYMZO#ICofG9KHPS4VS$Bk$jO@Z@=XPSc0? z&6KdsjrA{_tsg(2*_Au;1RWQKXc;D2U1_?1<5^71y}S2gQqmF=;m?gE|4$08 z(;r)-@bLZW=VIZwK!54@zzt#@nHcKs_`rIh{;zN=LqK)BJE!O87ZFs-81CEQ-_YS= z%&EVtr+0{)jt0OzKIH1@=|`6~=KAoiv98IrqP3#1n>ZUG#$|ru+a9Z_sEm0H_y>Y} zRd(_!IDBg(okcMbXQq3>ktWmq$9}0rL4J|u^q6~(5v`^%L6k%Q@>F9T}S#8JwIOYObm8nVg-RUZ7vQhZVx!#yV>!x9Qx@%`L7{HUEcA zG{f`D%j+}jTcL>y>5HAn!TMPhcJ42XR1)vZ*sJPPl}JP05d6Rf-nSA5g-EZ5SBVkL23p+A2Q0=~c_dhHSjaEf?bRkV^YA|S{J zp*m3U%UQuRk&mAng#2IR;$e&OQHzaI0Oc`{BCcGGxc%ti!^bg%u{YsUp80&1oQEGhh2Y)%|hlNl9k3VIkGa`*nTM4N;C ziqI$dsnvb`y#<(B5$w|wL!Tx$+|4b^do0OWUBaPxZt&e(7f(O7NToxpOOJ&}kWj}V z1B(pE#FgdQsU@uC7ulG_HYD5{SD0nN-)mqNg^N};@jpn*)61TNQDU}y&F8*WZnu?| zI%{D8T0Sd7oRj2b)TnsB$!wc81988@-@(p7eW~q}Zb5=GlSdKGJxoM(!bB3XA+?O6yldsC)DMAlvPi zcoy+DO5q%p%%f-X+B4lG>kn}w1KMJ&`094==qaWXm2#>fC_4tVrx)~Qz z)&@|SraXzd6LlvfC^RfGDk?JKX4KQCw<061M&5ax@Ta8AT>h1IZnnxA7KXVn-K&g_ zX&S7{O?{e}8S^|LskpQAZEI8G+a|QUZ^VOl_Ybnc2Nzg;%b1T`UUuc&c^d!d>GS9q zrd`?7m|Id^Uf0t6suW9%+BfnI!L|zfRV}Lu)r2ML6iLZ7RVZIf-;W5RK?H}+p91E> zFTT_3>UpXJ1fwgfqb2v8-cnQPkhK{a=1`Lq1TRj8&q4Ri1giHS9H2TkCV9&UjWO?Z zm{i12ict2Z1JB+cmx=ApzTqjhSJQ5p7^c@mziW}TB_CTGUiHjE%z5Zic~7p0;^g&g zP2=(V11NsuBFt6J@tntdORg8zL|drG^v95(h+vb+FF4&%lVLIi28G;x5}m?Y*5VwS zYpKUpQQuyd!X-F6`jxTPsl~1NmfBGaCFp9w^)P%$Dc#@mMHaTKI@sTrMren5W$J|) zH?0Y}qEoVsS>va7`2iHmMGJa*czAmAU~>zXE>NHDoHO5gWtJn)KH*ymueRCCN-L}D zp~l+xyx^7p6X<`i&_2;=HoZ6Eo)!{P-ao3kyv}KZ{Mo`+ZnNvcJ-| z9-e>~Unx>kd0sUr@2BsC&4pfqw7Dt;{v*&`P{nLcNkbbLZ%&eAF)3Ms01iTmIVC{-VErlH|wZA(wLI!`Vd8g$wv{sU1ij~Cv5`21c}9MIpK%fM1$g)RSu zv%0eKRa0FfnZ2{iHOjp03iHH)qOfuIWFCv;PJjz;W67+Tm5Y#q-;e^$X#)8;6#+8S9x(CMH%kxuT`r2Q=Y9CoYL~!mqzDXNO4}Y{iA=_r9^9z7L^>zs> zjH8_tWj8yM&G&ln676e) zGUO7OA9PlZZmzQofmeW;%JS^+N7tms{djtEg>g>C!?(9M$XjcRvh!M8;7Vf0=Zf1s zJF~((A8)UDxBjrIfxcx-J-KXj+L1ATAHwoA*Y?G?ex=rCFRyaEc-`FI{bAH6m9XUd zaw9uqBarz9tKN(#SEz9XP;sj0gfGbtBsntzp$WF!0Oe^fbN69lLY2Ur4ztBC{_2R(pUQn-`oc&1v&=ZWT+hc`olLvKZdTnWE% z|G|^HH*VazfA8Ki^Pf`EGxVt`=F}8xaiznOUf<7Zmg@3qhb=9m?1j}FpO6bx(%e|X zh~7(QBQ~0SJ%HeWPl%#E4^Pgzks56cq~CiM{p5K<8kb;tVw$bI#QCzMrm^WwOC8!% zDn<60jZC^1m)A92C+C|RWN9Oel!*Dsw@H!iIq}mhJc2nKDhS_Gjp&o(J=(u!Fpq5M z)xkh;1CMQ_TVu;CSRXH0`LOJ5v%B3h9L~nL@hP~^bqscPA4|WmyWxgE#8OK*7b*J0 zVDCrQ_#$fb$-(YcXLaYa1ht-%JI2XTh;Pp=qQDjGRh08n-9tUk@yT|lDY!YwW4aPh znSV2-*x%%Dt*mh5dQHECMutDLm}86E``#cpY|JT)b;R_IxW`>1WAn%n*f7!6_yuxm z8Sn80Hy-gzlcTD}mzQP+CsqMqEV4m`1HkgG#IE8~LrP~g#Tx!ui)-uL0Fw*&yi=vF zEly7^>}bMNgZLh=cjrwRveW!N&)U@&WO8`xYUUif2Ts7}|0k21($CG8a9<`3%YD;+ zPR8^R-4r8x83q7FtLFfYeu& zmh+&kWxr2F>)~OgRlF)(#4=B!n|ZDx<1hsXpnI{c@DbX<7r=-Q1j>ja-1&20j+qGeJOuQix9>fA z6r22~6pJP1{)4EyH^U-gbFKDrYl0nFRy%#!>f+Smvf><60k*2zy2dw6_`p=vp$lLl z*)@a;YluN{4bh?tnIEo>x*wO2ke+W%N;SjU7ZlXIZfUMAM|8lvWUmVmKN^V&m= zyAVPIsmM9qvH~1LjR88eKa>Wj#u7q!Cz1T^2&IdxG)dLI(?}RZt^kI<_??j<>0Kxm zA8+oyed4@r+(Yg0q&7Yu;8c(0-rt~Cn6m&oorE1Mt#O{D}ZZIF8?mz={#>OuQKw+WH4(8<}uUNzukEXc~$~a;qSV1Yh`TW%{I7%+=sN zj3QVgHy=h3Kpreokmr$&+^X`Uy>lfvC`8aa>QPKwZ1mlSiT^b{Bk9qN z$S29E&qBkW#90ao5~6dOyZTz4RWGXx>=m_+T(;&FR8=*$H#arb*VeRlw|?wIQb&Vk zkaZqxn_60iELa>aiHc57JGcBHH7%QcV5K!wKy@#jj{264k90pi4=IZ-U)~n~O@tEL zRH2^JJBn#ix`y1u8WK^8CgZ(|IVkC4?BqEf=%r-;a&)jy6DOE=fy^(W(!*$|zEt@6 z`_AO&v3a&-LL@RC!mZC(@FN0aXKQ<7?n__K$F^Q}P$3p!6G?9uYY2>Dw6C?s`F?tz z$Gf51f=5@Gu)ny2iMoQDFfsT}{sc}Pue<8afu;a(xnE>{e%6)n3}^KVhrK>Y&^+w% z(})L|Si!^Kl-pZ}{?y;q;ToBk9O&#Co*Mte7}G4tnf4SlB^HKAAa;>4?`+SEuYUUm z!Lz%y$-vhB>eAZg7JDZKhPjrO=cbSwEzL}R8NrZXN$#x6%Lu%-xNR z`#2Po*a{s5>u0Tv9X$gbZWgH+EU3hZG8OVmp|Rpi3gR9|38={SCk7RbCVnZ%yt(Ra z5~d1zf1=!Dr4tV(CdN`&j-`D<0DA+D!?t*`uSx(WY%M%bHF|Cf;jU0wY6Ne9&Jt1< z!}XKUhA}7S7jpvqaD^+7_Dg<>UcsGQAMT#WXK;sRw1cYGAiBM%bxkZy*QnkfwaUd9 zO-)HtWtwP)Yq=e9^Y)#n2hZXY6XN2N(jFySGOcNrEE+>u7IQ{inl&xKY;XU7-+Ya; zrm(W1wmjcv$ttaB@U#Rqy{c~P>GFQ~kA3|^p9h&19~r~pb`6KswY9$7r_a)@<~SI6 zOHy`me#y)7;?kO0XT{4`t(XY|R47yz*RPR&2^#UxYWiqQIYb#)aqOk@$=)E6B?$>c z{Nq=wJmG-9;jjSXAsC{sCV8_>MYprE_0QwK!sLjCD&cqW9fX6Fr z#edq-HqY&ig)w7gEe@q{7jqaD^mO48xv{n|GyJikwE7b~qFx&)ic3b3?Pl#EFV2W; z9Cj7sM!g(%w9#2%2?@M=%THh>=BCN-vAr6c;Anc{HC+n~2n@QBr!bU6WrsyX2V9%s7Mhi|Cz~DTxs>@6xPa*QQo3r|pf+P5uP2Y%R0e1y$mN z*ZmmKvbH`y>Ka0z&j=SM0JyVsBoL+Xl!&c+UK9zFBy53$U>sx0fz^PNz5{W%)luo20^dFXBd&K zB2YsJDgXZ?SKlV0m72jPAQi?c*dU}Ir0&9VY0?R11-woXFTl7c z!2CZg0sL+;D%&%I$$`C0qfSPO%L-|bNph;!{JW$CnWcjs;-jA<u@y8QT1k zp3YWv#x3l**6j4egyfQ@78G4?8>(KuZmcUU%*)IvL+$kjZoIOz6_&e~ZrQ-lm%-uB z!!v7mP`T&5YY*sLMy>>RH`B!w|zrm2%q8pcr{=UKKwH-#s zCSC2$vX%+p6Ih=cMM?YQWY4`V1Vn|VW2j9FY-1#+A8+;*M+8JWp5H{baxEa=;U922 zE&q8g%WoR&fgV$MP)N-4o5__8ZB?-^-ZBu^+Q&{@S3!K;@E6yo$%W~zH~lk9?y*s3 zmRZ}0*lm4d8wC}96P~@qEu1+!mxD5Zo zrkWGB(0EQqYz{|$^EaPoA)?_$L%nnHY`U(kcc5z=vAN+Z$Im{jX><=Hf`0pzsjjuHnDJejtJx=eOLe7fmArph$uKGY?H7 z5W|Mar-@rY5QDn_66N2E1Ig4yg&uogp*Y4r8*CA3wnrov=B5>TCko+e?KO;3QDFwh1d;4Jwj7w5X%=08? zLvvdv{@_jMOv=j(0O7TbubN&{WLEbLFx*c|atJ^%G>8-I3NE*(RrcPe!p0|M0^z7C zGqWfVirA-HT2=qL=2hzlICgOPTp)tzqvP}MkqQ}Q>fe4R(Li_@T^)j&jwbA!V244D zC^eF!B|E_b;NZBs0TvkUc~$oE(<)~|z(ZGo@8teIiyx&A;6Z6+8rQf2f(?!{_sTju+B*6^ z^)yt!>D1utIM3ILw{KtT*g8xIy(jN#;MS^pW7oTvMB{bcy}Yoh5qs^CbkqEFxkhFd zXAvE4A~*QVc%GXbH9K33w;>HBn)mfGNAggWcCwf41m0wCf9K?Es^MMlkZVTVpcZrd z#8E$z46UdzfO58~H^NqQiI=#;w~f0W3Qgc6HyA7dZD#~CO`BS0 z9!#yKJ)F5{6&((Jv3l{;mqH=>!6)%f4EJd<(aWA3J7GNI}^hYh*q)vQ&-9FUplj_waQZjDV`V|}-F{usy= zh0`&fOuu>46FDSpJl}{e6`Dlxu>qnP7ACBW^(hEa{HXGN;8`nT94j^=R>Q-FYLSr& zSy4selXbunEpBi39GlM=I@;K}zR%WZqxRfzPmB#?C9~*V`|BkL6W2%AtkildQv;pO z;@6YVf3PHaXhD%fW+z3}1W=_iziuRIe6+SV_NJW}MP$c6g%iBy7o64{eba)hFuJV1 zsWI0Z6@J?i7nf}>VW~%RXQM3{UxL;T1MJ@F?df{ghs)j53%pV(SJeKIjaBVlV1-3k{89!Q+`)3b?^ z@?zVYBly2-UhVcd`{8zt5B!KP7h^UBHEkYG-etHwGCY}=uV&W|zw;(h zo_AfW3_o$yzu4MYSm-Uf3c{w%2|U3Y%UEtG&IU=ZdYp(GQ4~-z@=`?w66gN>;Ykl> zODGj&swc&VFCF%a5iD*|NsIy|32nLAtPimT{ZB>{i+`&;V$4YiPokop#L$RLFk6co zTiXy^w>CAstS!nYtbSEn>3sbP>%hhj%r|^Nr9A+9Jqekt;GSMwT%9O1XEKJLkeZPV zVuPJ`IE%6RuY6To?QEq>h&XCAaGdYTH!YD>k6yLdxh6Hm){>05=YtgDm@XTZ6SoL3 zvO8#3ut2g~&Vv%Pv8og0AL;c_?h#&`?KuJ3&LCgG<0}lrK@}csEg@Rk-VWS9#1aLc za+I_4Gvf@=xHqtkq9HgtB18uo$U1_z zzpqW~PWQzlk+tO}0kHofI3+qJH7mhCFo#L1myX(k&=6}=Lvew#BG*#c@;BBPWW;@R z!}{7?-F0sVFpy+kX?U!^PrEj;Uz}Uq-obSVyIIeHd4FTk?Oq|!q392G*XAe2zp}S# zcoezM7REJm6SQSHv77Tllh_352pX1TM0F<_hl8#);AH^dQx$u1}-R903BZqhdUW(jQ|b9S~^6Ffb=*mp9xhQ$g*chT>RY+a~P<}$7u z)Z-#deu9M5*hKdtV8WH*PrBv_330;Q%LFyb6c4k^q-9dKzmd01NglH)*<%iu^pH5F zmL%4LxL{y&ys7^)DV?ZKjDPm*$%Ffk&}YS_6xV=BgiKyH)|5M{8XBC=S55Vmg%z)$ z0Eb3~2hoy`&CJd$%rCAiP>a#MEKW5)qwixu*v`KqJJZfEOHmPa7S5J;U04wfeZ3Bg zvcSZQxIV&`;HKtb#kCRMg4YsV3kB$HzA1R#6IACXVaFm2h;1WrqvOAT;7Z&?wybar zI)%DZ*qx(8+%wTkb6tSs+abCaaEls|2U~Pgrbb8M(9n8#mjkDVN0-@c6t=PWwX3?K zX=n|P+NXRvM9Z*Kyyf1U=*}{kifc2HBfO@&ejy>IyD`?n3QI<5 zJz9n;q*uAkjV~)5)pc3r9e>+e)zaDjrSH@55Sq$&9WGbryZ$K(NO^9c*r@DMuz%PBrM>}w6`kjVCE%Om*`|JZ_!bOSRykl zzbq;)wbi&izN<)Qectt!@@86SU2fl>HMB_=$CD6}B%LXd`I9BEwo^Ncc|Z*|5-l~K zk&B7N%*%WW$#_P-PV=M&&@Qo{5=WZi&AUcgWg^0eJ_1kz@~bHSWZJ3op|q``eE*zW zibKUJ2ZpRoYA*2DAEMkYL!rX{htje#;#t`oN?brjO&tPS#&g8;6;OyVF>NRWVMY9T zIo{-Ozz2tvY|S#cq@U0`=jKq_maN_)C;ti3Tg(lti7^V7m>BmcBJApwn~$Ew$EW8x z8X9TMziE8iSY25I%zjy4=Pb)Dtic*_Xke(HDfh`~rX!b-$nt$z-ssPOaWQ9PWhGm3 zYz5ZTOk0h!5UTJMt>8AMfkwVw8UH#yvj)^A6oJM@_=*()M|;>}Ks*Y^o}v--Cl1dU zX;TGBNF95>n~pt4{+Qn2Bq-{QIL6zYIA;dO_&Q_5BsM|{I7&%`RM>xt^gai|(C+{K z06cN9Lc?Z!cw9?A*{!fVKRP^5>*E`vy(6uaW$lw%PW3x9~bW}xXwmcPk#K2Ek1oN@Frk5EB=>>(QmBpp@j?RaT z^{iv=?CvCCcXp#<=w(xtdwvE13JXz|wszNsTi&|nw|?#=@ltj+@sL2BOlxKfdJ+w? zn>jt#@H9f?t@TCs^cd-S+Kmz)l@)ZhN`W6|2Tk@ehs{#hH{+WLpPCq~Eq&F}+5M^K zh#Tx&m7<3^WK)_qF~|)1wBp4U`Wwd117ZIZyv;)=0;`-Co|~=6B-ipABW%8mztF%i zECc)rS(3gc9YXL&HjqWA8U%wQ7RWe2%(llGp&>Vo<@5Dwd*|hZ^L93%UZ;l|RZCH% z>Z0-QwLejiqcSXEMxxAtZnj9Jr33+-5n}uz%GDVqV;fU$!YAMo=svuRjJAymNxvlX zPs15n?$93on(Tw0lNv>}0U^%@F7vaf$gtqx8~2_)jg5}YwH3TzAgHmax~8V_-CJjM zEmH9UTV)%qckl3Xl+{{{L$Y3hlU?3+w-<};u_z^EF-U5o{pu*f-J+zZ@{N`P4u+BB zr?s+EmY4p-j&y>z$cHKem2DM3r(j}!s>AL%d1Ua&sG0wo+_{hjhQ$HBl85($b{z}`LpN%Kqk~m$mkFlyfTt!Z~@y@zZs2K#eh4f_Lnbq=dWo%rD-?oSS|Pigh%- zush1j>zW#?lcS&9vp5`?K`D*C;=iwQmNirtH+HtXZG6|=^}e+SzXA$Gx<(W8G?eCD zbskgzES z{7>+Id3xe1C}yxR*!ggj)HFuy*bl zNE|dSOm46r-na)}9Ffh;}994JkY+G463haLCmwcOE}}_~==5 zs;#)Zirqr5>KfYGYO88%nwqMzbL(4snGE|1fjzE0u&9#JIG~7K{9I$p&a*Nll*Rm8 zp+sjT9LCzxqRK{%DffmA+1ItyPjizT0oxTzI64+~5nulP~ zvc0;xSnV~11>8w}7L!-^uFjuPhR_>#i|Z=OofR)?8sF3wr^Myhiye1^tbZzCKhw)P zM`aW1fV4B^O+{)!&%EZ#mSzVgAphNyUp@msj8)`2@I41d`?MRWe_=k@A-24_zc}=< zy@NH)$fZ`-=Z2ZPqjRuN7j{>xdpXUl>00M5Ew$4kyvEFn17pAjR&6wI;DoPe_RmO7 z_gb%$sfjg$SJELOSP2tfWV-F@_WiV7R(u*`mxSn<`r9&i^QQbl&Qm0lrAf(5w83?F zY$4Q_nzDy*mU&N>G2V93%#q=22=XUcPe5l&5ttul^csm=E8kb;J zw-M|Tnxl>n4<~POOQ`V@kfo=3l39It&hiyXM({L_&*ur}<^VwwUs51mDwses%mxtx zMiHrfGbAM9YVcL2gJWXYd7GA9Qo}YwXI*Q9lT9Qa-V|hJ<+tEHGCIU$IxcBbhI+@l zd=~^VT+8xuh(aqu_!386epy+8y|m6*S>4pp<#qi!f*s1JdzXk5^iYBoCO#oPG@`ET ztauKkRx_31kP4^Xw%!NxekrS~tWY{C8#*ex6;Dsd1S@Xn3=Ih5%rUpjl+>boaiYeY zmX)D@B1>~DxsGB67%Cl(n%Au#m=Ev`-awHzv8KUZN;2}N>N}$N=f&`X@5fDrH?w9q zHUl%zZW2uxknoK>KlXzFKauw=A34-GJ^ZZ!2u?W|zO&zdANaU^G?5(~7<4-(x9e@g z_}sD2cXsl(>KqcS-*~>Am3eJ}N7OY&bOT(MroK*ZYr1WJZ)v!-wqseR^D*m$CS4 zQ8UTI#5zoaIXPJx4VVh%G%vG~NYD7*-*SSCcSAdHGBz!&g z00O+wQ)FViAsiBryj?;Lr-o#NLew|7T>hK94%FTV#|`F@5cdb|ds8ndycNo{9M2Pc z=3t7c zKGz^)1am8R2my%I(xa6arg&9OhQ_|g-lVUiLv=|WN_s>?lGfvqw)YZu!X6+D0T?kB zl#cvGi=Vg#q71$d!#B@aSN;6U&}c{3958KcM$v^wuE?)zIYCf$z23O*;gk7tc<1mS$$& zsO9Kqy7D~dmdTWq6cl(fB^vGDmE5{gTR}eT(VN$`HIBlvlHC6%tI)>ojiz_)PP?iju(v0_k3ZDXm*L&{$5O}H|FP7)|Xedw@KaDLoBTAZGfV8))pp*#+J7C=0>_& zy1&Q)V2j4&JZO89VpEt)wp-!)KlmW9jQfm|N+j zfjJaHXj@65TGaqu;ZH?(X227J;#RZeh5=8&yT3&^{Fy@BYlc|?a?>01WCn315aAwZ zaX!y${k;LlRb=rr%H#@X0KFkd0rL>xdMCL(Uk+Hj1S5Bs6nly;flnZ|nY^?^rvy@h zs$p{lj}@*I-71umMw}xXk;5}x^&nB%35h=wLY2VLYNaH5l0vB%B?vT|e+qe%zr9Iz z&1G^R;$z|-ga!wPBDRmXbN_iFC<_o>-tfA%qO7zqyZmkUyPi=DnCWti;VchpH8CZR zaJ=IYGpvp|)6*%6i}SKI&BRNWK-lT1?r3lC{j1)OJrJ`KjK&^n%F!r%Kmut0$c~^5 zf}L-a59^1^L^1GL`CHJ$@B0xhgbH&?rStEXz&VD>PY1)Gng772vhcyzT|RERKYsRu z<<$@e2g?JWUd85?1+=(#jy*mlvKz;{m_*?L#K6TEE%&t*njh0^-aX%L*w*rw)|dD} zoSdE?-y<&?yI*w#>4^T|)#z2~F#b5&obIcRK|bRyKFn79g5P z+nf7rq266r1h3JKSzef3*rhKy(f_`)r=Oh#d*62G!*6-^eh(kX{{fvU;`$rbCce}8 zmh246HE=#bQucOQ*&Fyz7!vs+MDD{DKa{yN$Cs~%hb>u|0pylf=V(d{C;FqOniLo{g{N* zvL=u>n7^>}&HL^z!=Le6?;oF`WC%OM zPE_abOzfb(Hi-Ss{4Qlb5h}dx{T?O|E=iLn3Ver;NtR+h7&a$-1eMjQl(VhIZTMV` z>V7}j#kGkQP`u;(^qvuH)Odn8^RK@&Br*Jr)O&CLyKwWt?ATBYQ~krkOYXhRm0hsM zI_mMEk8SNe!&7sxXY(_oU)^}o?eA=_O?B7Se3(BZQxh!mk;4G=S0-)tNZE>MgU$xN ze`zQ%)1dhygx}Ri!KO!5A;C{>1qI%{A03;gwbhjcESspShSGoWH-!nYHokYI`0zRM zlbo%M<(>FBw7hb);l(~MIX~Gy#&)UA6^0PJYyU|Lau2n(lg+g3%w59ec4K#KX=;R_ zq0Z5%^>06pS>DAZ16jFwfLhD2XXL#9IK}SaaB;NVR~KIY>cc2|+o>T5?LQm1+vK^P zMO<^uLuBxih%SPG^X6X`PeEy?(AF5c5rIBXIPq#2vZ+!8hWOG#DJGR9&1OWSY0{6v zTo{>|>?~M=6v~@P-Mf1uq38wMf*gf88D($Yqma|k z&E)hr0A*@o;`1Z`g}um#=G-&GZwsLwr|^|rifEBz1co$Xdr(2YkA(j2e0jyI=HLnC%*Tk>$;AjoEj}+$8JxBkb3BUO1O?7!R9^g;u zu?Jc0kJ6fBOdD*H%Rx@MU4exwFVaiTzVo)@Kv@lvuR_^Ju~*%)$1A@U0{Mz zAD~h}Cule+D+ka6z>Xyl>GtX2WgOn*@gswi(|;q-&(6ZL2oWH$(k&W2G#x}H=^G#{ zQqF^6W+Tq+w6HbKlSxZ`KL@CaGW%DW&}7IDfChjlN1r(|EuGl&AKbAJeql}=V)7h z)g=O_&Iu9?NvH~Yv$58ba3zt-k?_?EB%D3zfd=P&P73$uWqMMcOWmzQk;KPiBLf11 z1O0*`A4c5_iM(~|Mpy)^3Cms-<>g!RUcT?Aaf1h|cjPZ+?KcfIJU+8X)sM^)ZRVGE zb`E@Io;8u3YK)4)4;4CIR8+NGd*99XWn^q@c#plCXS5E>U#QHH?p)M&qJCfIv& zRW+xSBs5@9p3reLmQ#_`53mT{#s5!nuN}xi+y#85_vEGrU;Mep{r%}N&X$4c;jWg( zuBm}f)5A><`WPJkH2UcS1>G|1%;&!hx<1r9>+nJ!o`9XlymDfB2X)f#*2X(4N?S&E zc|=?~i|CJc=1(~ds z>;bE3Zm}g;oed4S$w`F;dZxRlMpS1iU^Ho(X$G(j{Wx`-FXcOga+D#2u0C2QgR}E_x1bu0ULKzB)P# zc~RnlO_U$OvmSFGJcSf^ei*=N*P4N)^{Ffpq}xL3^=4erz?p!Mh9NbA4CVlyBM0X+ zFo+{!P;f}3iMJ>aJ`miG3rZ2lNOoD_+#H(kgm~eIX}T@^0-+!xp;!b?=d@Fm3o&Elqb-WU@rXoSARW$}A|iWoOvS zUz9oDT!B9M*gY_e^TC9BM`JW6{zMGxjm46vuR`LXpQAF)r%^Ik3YsTu3ftYMB1E1o zdXGYrIP@oPOOEnDH5JI6v%u#g_wWv<&9Vj#P(!K*WzdHH@#9UkOgv zhu)4xXvk<1|3R$JpUTQKuFK;b2nQl4ratg~|HWiyw?bR)nX^DTw3{E`vUrkAF zL5Z{IVfc-N7oEk=Orb?s3NT6F9_<@pMb`A{ChnQz^DFqT;h^H#i;&qO=xlvse|u?y z(WXi7R49viHgGgu+dcnw$q4d2HcxQAkApc0_;GDt+k_`){o0&bL%Rsk*m*=c*Mgoa zT<{{QX|`w{ms~2@pRrN?Hy|8NohS7YbRA*uA%TN?WrUN?6>myDGlw7^Bxq6z?7(aS zn^I9>3sBYwZ>Ug(ctxXKEMIQCPotcdvN<-EbTNH&*#k)7NgfVbpd4C&<(FVdjB`ko`_eHxWZX~tr1;eN8iveMwp|^fD`rC z4R}JJ1_*Zxp2$yA?4SA*de0@cSFcFT%6k~4A)$ZU^KM1bVZkN}V>Pmz@i7DF+#;Bd zPh1@vB(vjhJFMJVG>Vw-DxW8(O$uDmEG=bD? znKEE%a&#OQww<+sc@%*MTdUuoEJ@zrvV*NfH|wP31`d!yg+9ypBoIcKT~1rvhlXHr z&(-+$Rdoe!IoC?){xO+Q%6M>n=ZVMjXX2X`LLTo$kmDtvCH9W77A9Z{)yuI565GWT zcwxW<#?}?$2K|iE5AxekmWX*vq#LMd1Vy>JhBCnuf}dwEGw0n*pky`Mi1B8O(aoT0?&>G5H*`j<)gTWElV`LVtixW1*aWQ|>h z%!n4*vWu!3d{u!B@0lp`x~v0Z%X^267^sdEd1A~v>P^x)6p9k3`Y{)kCU&i0P1JwKnU^ffZD_91v8mngU|E?atnjs?GD$ z=pP5}k%^J)(1(vHG;iNAJ`S@3C*sxi6(v?haTr`bJM%OZ+uZ; zPO#LJC#U2Tm1bK?ORbNC?&M}ww{~`eJcg%chY@Fw%}h_PEbRbOu;ammK-+8*%T2fNLjEMz5V}@Kxoi%lD+gLSp zBpN(OVBF&k77tDoo|AIbX%`CriJuMulut4REEGY}l{oOm1dI!$3wMynp(oHzL9zV= zgx^F9E<9jFxzPiKC*u)l6y?&Vl%Pr@l$S1Yu+|9LG^BvpNj@RrEeMoW3ef+5qWum! zSm>7fbg)ocjtCwSWsZdqj-EGo(2c`2i|^|O8T}t><(w^@MmTf z`k4owp2M5{GyYJn5vH6p6T;|fPkmNe4*D?eAbgh#C~1nygV<--^uE{Yy7UG6zR4}V z5o$>UNXY6v{t3YTA40ccagEwiK_!PKL+lD%pti%mgZ&*W!vdu)&M#~b)CfO_XCvn$ zwmv)C>t7>MEwbIo>FJ@?&Vh+p z^fB(q{+3c}e#7vFLAmMZaRm_86nj!mQCiABcG)`-;0V5T-)s7-ut$Eu@kN##M;XnD z+?*HH&PRSvUer4BlFZbU^=zc=?9T=S_0&~5i<1-Zx3?A8a*N9D2H&(eTR%^@nq8kq zq-AwYF1gpH-hJ8FLGr~awcP{GBY!Th?H_J13(pdu`SGt)%LoH!WoF{uKGTgC$^RIe z0Eq0fgN{;c&DdUJy_!e%W~~_75)3$wmApludW^6p<`DK}K~;mhiE3Z|LnEqXse{7^ z;6y@wN_^x^@WuNQt_yq{ac#8bm0f>=r@b_AAoW=FkQqQgqc$|<`4g3% ze7d8Gc|IdjaSdaGX%0`tyQLBI<_8*TL8>({3&>yZLtSOGm7rie2BnBsxV&t6@oeW2 zPw7n!qaF~bMyf4IY&s%uZyF3Claw0LKTi+ieUiqK*X1cl!1G6{)r@HMN=Rg6XmH4t z8!?tNYeGa|$j!%b$$9z@uoQKU3~4d?$mh=!%Tp6 zc7wau+*s}(Aj;lGuBy>v4EQCyR+{JA2d(`hV0&^`hvsm1k3OgOyFXDKawvF8Lie8i z1JDGe$pj(C5PEfWV~1;CbbNBCr?Y1mSN~bY0Xpk)5^b$xt89EQE)<;|Ru(FIdrrfZ z!D*W>PuB$n+#$9DpFA*`Qj1H?vF4bh+jp6JPPma#Tiek7=Kb^oWD2w zrK>tWE$^WzAucd9?m=)+WKq+*PXmKE8&3{2H@4|!Rf;sdR-Jv!NMg;^`GWo2YvV}-c`XP&yIcila` zND837sXjp9rx8{RBoT2)j6_qAyzR~Zh1eDzRtOqz8N|j-Bg_?Q`5^G$f?NbdB5lHW zdg1DX8?~IS0VwXDhC{445(W7s+MOVM;?V|lQH!2q#GeLBND&)G924q1tL-QK9iEp+ zC#(TTUJMS68^e%f(cBS$KgV$b%2_*r$laPVLk18870Bh`wXz^9-Et0x2|1o&35J!| z>GN2ygCOA9?y0;j#}!LvNaMRzUERShLNZn`O5qI6u*Z z92@=gk!h0g$&nH8G~jyyasArH=JM=7LqT3%k-eadJ@JINJvaBdt+*1=d|T(hz^B2{ z+vN43-T>_m*UDF;49m;Z{EFlMpRfbf(`0AUVIF zC+$SY4TB4I7PFV@K8bv2}0NRhSTBVWCu2NpXnD&s^Ej`5JG}fw8qo zr~U1~98IxJcIOIXag2^w9JjW&dv^Y}&d3XeFrC!WfZ-m`1N^q(jY> zv-V7ALg9rDgpyAhkV3uxe}h~o30%yyAtc@#7piS$^mS5+9mFRPF~Y@2NrbDFXMdq8 zq{YYy`pv!ySmU)xL8Ye<1d>Rw;1W4p+zHQZJHs+rAJj|WxdAITh-B0(QqJ-x?-x6N zF)+kK%aPV=y?lW+48Va<(I@Uw1d5kR(v*h6H#N|JP0SR-oTU9s=Rb%y#1E#LlVa~; z-gEP67#?iaEc4xv;2V$A^R%AIlAKo9(%nBiJktNxH8MZLRvpIP$FR~^!!QZjcDS{S zgKNXZjysrFXS<(Y=%{UNZ+qX{&zKoI8-NtVoJqbG4J>(O) zoKdL!195-2KK-e^r5$+E@QVD+nnaeucMgmW4-5^ux|&~DQu5w>S=`a<6h?8I+H{HE&Pq`gxe%mp;yorL=uxF<1Ro$Qq;3$EkdvvUqxjWm? zj+WpAJM_aJ(I3y-xut{o=N zSUe@Cs{QTJj=o7i3p4(BugyMQYyNhm$^E zDVuW_kxd1yXI1882nOnyTq1i4>&8WGNk z{zkF8?Uc1;Y@A=G#&<7_y(_h`ClJF#TV{4%zK&$^Yj(xHZS5U36!;=NXuUJ# zE?dfTQG?(AmXyi30A@?<{$ZJufHwVUIxg5Nv1I1!z(-t-`}(J7>~k+GfSK3veZN9g z^=)HYB`Vqy9@Ln%`tgs)IJ@&cMLB`0%sV##OY)%uSs(tL1D}RRhk8EreELj3*45Wp zpJz@g?VDT`+m7OexillNjbkDbhPj?y?X7RlXErz}Dm}NdcL31NAw{F&p$Ehr#9vTy zsfai_{L?os6P3vx&++!s{0bVs!ymprKT~+rv%<#K3TJcY&_qvTt83&_-;_Yc{_f5m z##4;#F;NELy|p~Qw9Dh|uC8rp8`9P~_T$5oE4rRo2fDwvGL0Bk(2Xk#sCNBmqMY63 zOu)9iY0~H7HccN^}x#1UKm$R^09n2j;bg z%TAc)wz?>Bv7VSvtcEoN!+b8_m)JIPEQwn|8b~loDB{b$q^>;u9hH?Z-Jo-Nmpqvt zYrgZtRb^h>8U(Mwbrau4|HmF?BzD4Dy(JAO16Yc^C85Pes)yBN%pPQQp|N7EY;na1)Q~aO62q{;AA+W5L%|FwuU|0C&^1{XuszEx}EU?0CWPfe` zOMg#C^Xs~XH%-k$C|D)XQvO$=O7ya1eVd7O!Wp5rdPMN(bl8JW4!#LPD}mq9^}q_% z$^On(TCne1XgOgeH2S5lwe6$Fb-n*nS8H{)+14_QYuPurMWXzlBo_dra7qMlICgu> zs8wBUWzh+ZW2<}LHsNQE_YSx!jv0>UUqp=a57LX$f%P3bbXy@AI6Yc+ufSN#>)Gdu z2)~cX352v57vAM>&?n7QSqeM)WEslL^ zX=oqWG>#mH4}xf$_~!W_=vke1_PfP8d(n%^x>v8OI`@cjHR(l}V6@^<$0q^~T#>;b zgAzIo6verZOiOYFZYby>Gz1q^`UNm8N*~b=b~!mhvcZH{^rbOzv83@tvnL6Y1)_%Q zKw+!_cDznhmy%zzvwmh$#$R4%8Q^riYMb*BcU837Iw zCv|&L{yV1?L$uUnI-tpT560Y&48cb;N9HBri4zlYs%S6h2`Usp$a+s98s2xI!% zTHbv`By+v5>qEOUBeS}1X4SCo1UzXCrW_IwmouWnZE=9T_C#-EUC$goLF8{jcYjqJ zjU=>&d#svPoLN??{G9?`$MEdzXcHexN@8B&*`E3KeMeK%hfq^Qao51)^zhjHlmww|J2*kG;jYe?|;0MW1x8 z-2Dc@>^1u*#Kn7KFU7^MjFQTd($bq0maP0OWI|XP`5Dqf!)v+TEPq@Dy_qZ-%$A)X zt6(`bMx27QMWc9W(F?MO?o%P)D-10tDw4!XeV*GY1)vBq?{P4ZMx5&m zM}$T^jy6k9p8WhlRE)*Z)A!!h*ZS^5YisxW{;AKn3)09`%VBMKtR=&eXMF+rW3xxt zit&wgIO zmGwxvKMjsuw9u7H_0y2*0lNVv>YOCR#l(7Je9r@jZH57S44ebLEvQ(;XAq?VCi#k5 zWntPz-b{baj)&Y$bj$nR#|h9-vXVAF-U1)z`F^(i?`*ioT^pb+w&sF$_ZFIpJq}-q z&v8SVLcWBNnF}JF@P?_u#E_F`Ea~K5W^5AwEoX;|B|%yx!Y~zfP~uryIoLt`H_C-% z0Jy?C*&H7o9TOdWBfvj2^6tH;yHRo06f+EBLiEFcz?8bSkx5tgNDrG@dR!knKMfBK zj!iMiN{B9gEU+dN=ND#MGH#m-Ue*`q7dY#k^}UlU^D=hnU1S`&>={s1*S4bm;URg7 z6&q{N+uOXg&d4K%+5;b(oUdwM*1mdGTT|znS>0naOsSu-hA4){SXsSJUvHKEi%tqn zbiTbm_zgJlJ@j~YZR<$2s|RA{za8yu%n!Y9=^&tcSTp4s8XoTd*xbokw-1NU zx_o;>*XaC)obNS3zyFN~;^7oAJSZ>xko{%rI~1}6ATUY;N2nYDFd>wj{5;l}D2fCA zN$mAD#{6YbJ;3VR@S$exuwM=%l9yHTF$SMa2-2Dl{tYO2^M7YlYoduIm=;$O8yEB38yyi78y6cJ7l%5} z@R(u)W>yeD+8t=h4i#%cYd$aU-w0#T>x4atI{)8nm&N`esUnDF z%Hu0y+fLazVf?FNSaGk1l3+#p7|uN8oO#T&CF#`jR}`_{WQO76;-B0O3%Ppd{^JLaqGPCxZFWn#IWqjA9eV->BL_aY z-d8uhcXjs+e4UwN!Vi<+~b*T0S7p3d$R$9l&FGqWf+0yRL3lboTW1Go{nh^0NAM zE3#=k0=rwv?ap=#)V!NvQrsQEreh>44?TX6@6W<{93T?Y55OO4UeTC8B88m}bzHCn zA*^9T2<#s~{O|wBbMwcZcH!LhrU59FPFhwC<39? zdD?G#NC&>N2Hku77c6H!*q9#ZdRN~z!wPdTEu4EGkB1wGqpZyu$Wjv8aWBuVAH|sylQRoSD$7zLB2(*oz6@hb+FJFxndQ}eLlbit@M5JwaE>hXA3nT)Q&v!3 z=d5mW7QcM|Woc*6!%j=z(H{@@7$KWxM0s|8mCneJTO(owj-pBxDW}GJoO-l1GrI!| zM}R4(liCRGnf}(-Y)b9KH=o^u{rx>{wJ&O$-@z#kxah-|JL*1;y4mEmv`oijPnF?! zO$ReT#19_)_~88b4zQkhR@tkI;m7XeEUg_M3?zRS4#!`J*`4RKedfMSxTl6D4tRMa z{k81SD+v*%pyX#J|5$cw4UH}CEH3YIsxjb3SwPnRl@kRi#55dhQC62HhQ9QVySHeJ zp8xojPR-7)dZc7$C=nJv_1FkO?BBEVTXDBE`s&ybGr=HJV$2+VdO~dyr1ArH%x4Xg zURudClLdZSRO7XVWEn&5f(614m+?!Z8_CoyYYV*b!2s&$XVKB#m`K8#axp0lk0*`; zk3*2joc^cnI(QM3hgTEo zKDfS&4wfg?HS`SP&^^OCZub^f>NdN(`ij%C?DpU1usf&7?s!>OQP$S_c5G>r^bKJ6 ziIs@uxBRW|7OdaS*2Wej_L_SRZ;nr$Y-4DwaXL$#ubs}O=BAEGTp@v-2umbr-dJ%@ zsP!_svPI3f)iZzWISZh}4i1$>+@FUIJKmX{-2#-eL=BJ=cXYrO-?8pDjV)~-=-c%% zTh!-z|Ej9$ReNVA>Wi+v?uL>VE&X^ttj)7|>>G{>28oVEq%^QkwFH94-RHUR)X@A?^I-sCEJ3)$Y?Av&olap_? zWC!Lu`f*BQH!G)0ydV4!dMQA**XIi;$jKv>28k$x53^noLM1j7>O{1JctDj*8kWlK z2F>BkdrS$b)_XD{r9_}LDV$j6C%a;pELVF{w*dvBAau?z@GIgt=(~X0741}{BzJP` zT|S8%%c0=o6qx)JOp$x6-UAgT^W4jTATAOe2tpnlcAYTC+*R;ft@v~@IL*qG|E_bash0uhI)zafq767CQLI}Fc`4fnLv zIh`+Ss>;iq4Q*Ym4OKmEI(l2{7*~6Dde|X@} zJp?=gJ7goI^Yh~*()>4iCGO$Q<~Q`IyOCk^_4f94wbZGZ%c)vu5(~= zX=QFq-IW!Lop?CCRsjXi_dp#{)dq%`wA*KH7kK>tP zc`9y#j#UPDPAw)=$io0){XtYY`jYvH1;%frgW~_>aCv(0Go_1GoUq9c&PZ}^20eKN zB4QNmnll#TqOCzFP-d%9)#X`Ityha*e?b{B_7z9L3Ag9$&xF2@;Yvb2)S)0GuR|=H z)7LY^Pu@&$EHO{#kCqGwM#5~Vs>SGCCt86j^eGuYkBg6uiG6+=eeJno9F$^cOpG$| zSA7iuY;^1y1QJeGknyOd%*({MadikhpR=uj095Jf&5^IXL@p)-hF&RBc-p_nBfqO* zBS=nsmzIH8_zgqB0x*l0{l^Bj_d-qnfuQDWaTpV(TU*=iPyN%=V`G@}jk)SFd^y+oFJNT~!`sEhb?>w{dS5CNp$NWj#Gb^k zumhgG|FXTwVp6wzY=EeH)$|G^&Jwkzwyv)C{k?PaE!Q__!>=uEtZl5!jt;v%e005U z`@DPzHE}S|hCmBxmLZsf@gu@fh+jTA+H@})PBy|YzLS3uG}>LAa=mSAegC0*V8{g} z*!i)wzPjplO9zE!--nMM>x(Ozm`i8wsGkax=J+?rOLh7UFf3UXK`s!)>ld#noPI^A z+~e6DsBc;K`V9Oci&gJw2@bT2^Q(IY+v|HE93F&Uc9Y33$RFrZ+B!5jx9)Z`ILsx5 z2gJ9vPwk!WhFA!(txc9&^xGjEDFH;0z;l9+IK&Lk(Y?ny==;&;*3oWDk)t?YOAfB) z8)(+ysH|yeYez-JK1)!!e%`5Mt2JbXs>X{SOl%n;0K@>hK(pb1X$>Vh#o&qe_Smiw zu6%*wJT6Ww_j$DE*`?^1*o4FjpA#0j60jJw(otk;%m{B$FgYx!R52*#?i}6(l~oQ@ zVIEcDC8A!3NfeFRrBb7u3;zG_+#Xn9hdS|sS^^MYqgZ5+zexF=s#tQZbL$;$A)W(1 zlcuX2HFZD8rj{Ba3pRyoN^N_O^%vrt;58y#upAi*ogQE6_2i5EEoKySo(|CRTKPO?Xg zNW7D5NiYUOh=E8{q67&B0uiDT5k)~kQ4FXkRurX*P)h~x^i1z*Ykrx}`nlg3YX8SS zG3&d&&wAFgp0zyV`jbXqQ=!+_HrWkaK8^N)SbTcz9i^8VG=gEjz^`R6AgLVxS)5Gg zrzR0N^?18%uI>)I&ue!N5O~AOJ9}*0-P_$z)>F%WSR4;|I_*ZYYcL#}+Xbb3I*AMk zCnJJz1zts91r9(TFa7OgKaqG#X{h7M7cvix_|e{*^(n8tyMHJ=j-4M|VIbhOx7vI| z;Pg;mV7SNJ;-E!8H#-&@hNIuyc_&pQU#gHOq++ql;!9VtKRAM@Qzt}~FSkD{9~Zse z+4p2m^>O^JF6=m6Np4?QdvnTJ5Me<2-*V5={&@L8b#QYpu?nXz7DRA^$J^^MSC9cv z>`tHtX~%y0Cy_Zyp#kg2Cs!fU`{R9a901>(9PXYR^cc|zYAdU1Zz4I>8(P}h-L%<4 zC(7UH=KRj8tCctS=l*cao7`*xFqUi<&P@6p&I{*WrQFIDG4bBK|@#0!2}Ua-mOg4TqVWV zP$$ZHs1#~kjqo%b^J!{)^QlE(BECXItpX=_ORYdDLK$@sI8&1(z`ttlfqi&RfN`D3 zcKII$Nx29pL@UMatx{~UzLi2mT2}%@)T~|f_mZnbxO^K>5{Q=tIzmxn35LsIpr^PX zzu;MR*5mxV{8vrw)peHA`oQ3DY#cChc)H{rh|kZ&BZEUDOwmuxjsKTEkFf@H(&lT@ znvGQr4qqr7-;za(f>=e6krdgd+KoKeNsNWqjUDv%1p0j4-8dz%usAdpAD_c29yhn$ zx9bbh!J+V=ze8K_0;Z;o%V718oc-lpaAcn}_xTiqdU`voVgRNnAJa~6oW9>r%x&^F z2#8bqq<=xnf~EWRQrOcyz&P*t_(-tFOU87=*Z|9e?CA{jJ56SHi2tLjIe@+P3j8vr zaO{2}WJ%cquH>UDAH{hHKAUWw{CJz-``c#78yQ`b>0{^&iR>H6FK=g1H;#rAayFDN z7d|P+tmJ-{Ug~0=^Zov=j6^bVcl_o3jK>!V&uz=31|$lfMQ}ggERc|w9nJBTr`DQ7viva_CMsjGhrMSiLwf>QL}(<+mg zx>hD>!ehImf*edyB|%>hxwlevqf*LKVIYN8C#_?x$=`%w=MzDJGcW|ZqNv_gB=Y~i z!y{YKXj7g~95=F+n?#?i!nu>n2C}pAd%^cSV@!dx_zd#_rK+uBj7{Y|c~Y=CvZM;C z|I#@u;Tv#M>I=c&q-}^pf;>}@j0k1_mDat;Yc!>>DleaB7Z&H_6zOfYnqs}fwPoxql0}umq&JK(}eqVCLZ=Ryw=n;>FW)Rm6cX=XJ~X?NJFAr65x1S;`H6_ z(ZS9hV^|A}WQK9w`KxiT`~>vGy#YG3CS6u#E!Os@Cgo}{6B zy?t=B_h~2GWA>w3peo0y_Vjx>nF3D;cJPptyJ)pISa-#_nXiB!7$&~|{65GAC6qv= z#kZWJ(7CRL}{P!f@n z%OUo}J`I%0{sQ`yf20dSxtW#q^l5hPGtfAJ0viD^BBp>0GOHtq1n4bGC)MUrwLq9u zll0rQ?_=M=mwHP{V>X1iw?W_)e4`9&~3F~X8=-|$c`JulJLF|Hp!3geSp`PKH zc}CsVSeHE$iwwE!?Kqs3KE9VzT&ZvA@P_6YHWZb|T6ik4unY(ndsvBWOf-f0IK53U zugxr~Yt@Ji36GOBG`9b;GdJvU`3UBr!GOEN=Ja~qHj5RHDSvOT-{0f5THsb@V*?&n zH!Ec)SD1?dFZ_Y-x;ote%wd|BZlg?t(Obls^N>lk5|nBsN;#d^%W& zO)M|R=Z}O+ya+>|ijc$&(+P&$xNWe!5Z8;-4}g;hzQt>Nxf0HDJ*d(ZdN?Yv51sVx zeexsi0F~I`|9Pq>pN>2b%Gzpj@I{iip;<9sa&+_#hdu(q1%LmktGNzSGgg@r*YG2> zAair+(+DL3$H40 z0ZNgmmO%Pij)w&APAIF%9W!sjR9Fvan#zo-imI=bBzA!(jM)nrep%>u>9~K@eyxF$ zfnA|wB&|d3BM%gN9~J;MNTSCQg3}<4P?C80?}ezTk`^eujEcm$I5;qu<-kZoR;YRi z`7_ct;=%KsQA)A&G}ZYGwfInn)=1+5Qi$&}&7WnMv#=m1D~}ydhF7J{w(haTwWG-Q zcOttpL7&~_?Tz#)jticdcW>@aL`O#FXTrF%3;U@x)mD{v&aU#(DWB?K0#HrK{Og+? zb~KL1V$qO~`SsB7&`@YF49E$GV(hq^Us#z5`Ft*e$x`<^_YsWc1Lp9X+d~t4AmaDK z$Ipqbf!OTgE-y8KE#Y>ax=&8<`#Ij4pWOy{gT=9OQ%;^irXTGsjShONE zx7b(}+hQe%%4AHN<5zKD9bmum*aDXq;j>mOa+v*AG0H?h!RDf0@6V0 zceo!5_H@T47a&`cR18wK3Is~Qy~_t=c9fl!Qa-Q;LS({(HMY3Q>D8lY?w;Ua!0$zU^vddWRPdE(|`H7*%r8^O%;z`-VmGs?YnmTTY6&`!OeOg{S#eQnOENWuByAp5tiq}X%)V|u%nJ-h;W@F_>D-+i7p9ljTFdyLJ*Q9c0n?vZmJ96$we5;&k~wKYSAewLUtyf zX>!Tg8sHNnZxkJ9;>!y2i?qht7W??>ULr4}b9Eu=HaD32{2mMQsQ$VAqd%<2S=1UE z583e5q*~Fp)D*PO&Jlyuf5*!H)y??a_M7>sc#l6B`Ilgze=s=U3k*VK0D%MOK%%4L zFqyUZZQQnrRT>Tef{*)cy0Gkd~sLCX_ez^A5;f!qVWCk zH@yD43$dv^8F~Nv=?xa7?QhOT2i(qXuh*~i{KaW*mz}Z(8cJSoR~LS*E}N6`VLIyX za=E-de{f8E&ahZHI3$AiAu}*u*x7k|n8ecR4vxgMAlKN8%9sJlfHyK)Bjf+c8z6zt zA6Fx5o4BWJz|v;{%RirB`+YIGjX+FL%?V=&NDz*e?e$vw#LC(MB&2|C&^8@X%;i4) zUUYzx)gcH~^HG{rGCZApf01X&BTiGt7k1dya9wy8E-J1n;vVk@AU>Sn=ZCK5df}ui zq@O3*H#a*g=NX6s;H?g`sIPHpQu9baCv_O436-6sLuMH&SkEVY`DfsftgLK)WGOk{ zU(BObAd;bmP#W2k*&LPpCb}7DXA}*X&7wbgNYw(-e^e7Hk01aEJ%UsUOO*|* zXL>=JJ%lMFimEF7hI~#&)`}RfQDL&VUUrUf475ts&uW85(l&XVn5?W3T3kSP4P*K8 zv1w_^S4T%x@;B01>PF#l6hO#L5u>P=6&Du&gNP8(i~=mnlp`aP5>F~?YAUp1==G|w z?A6QCx=_gE3N*Q9CgTxjTZ^UJ(WtL(?wQ}-fA{;hiSaP@-2rb;pOcG*W2ChWMK|eR zqQYO_+)gYfR%YUqc+u!cpf?l<(nIeL^tfEz9=hiP@FK&?z+apWr=#L=-t(L%4}Q)m z&@{AkhG(!ThROy82mqNgxxGD;>)hJpLSAcfs49LwzDgS3Ux-B3PGGeIHd}|I%j@+xtnGGc2dmN8>>|XGq`MssZ#X`Ur93->++FVA#NslOc33HjD;FF+ zRt)PKJF-TS%8^cjxu56O>5iKV4^L=6YvcETL)BXKh= z&A0VV?vw9;@WkxVo2|I>xuIuf3nc?WS(#+|iqa4db5g;F59-9c48~*7_Kpilpb$?5 zSE~~)2KUWwJSO4L85j~Aucm9kK5WS>zXFt|kRXuHgeok(0%HP^BJ%HZd07EB z7NJZ@31pXq&l`9Lo3+vP+kpklw@*VWPG zY&F$aYVsdG&d<#%C@eKN2ZIYNFoQebMP@ZA79^W)v)vh9M9Co=lt4RYN6K;Pz2)88 zwej#g50JZ@a+A;pQ?OTLIxGqod%FuaOSi-3aJf57O|9UnE~}%v%Vzfsj7&|$LVdm- z#(BC!IJqn=FfmP{W?Xvj%|>Dgzg8)QciCvY$#!e}UZ-YQQXGy?&MeF)Hunhc)aPr& z_SE9^(A3reXoaLsP5EW>c3RFS&ZYA4fqYF=yqxr@as8v#z{D=wvcMt~B*e9dY+=}0 zoGh^Z0J}`FgplV5uED||4(RR4-`?#3SwQW_AMq_e_i_l~8EQpoXx7N+FTo1a0m*IK6kl+oe#ta&nSfN1U%km!1loXH*;|r&V zN?Z@txd>XR6lYn)1pKFflv{EP)uRYWB%I+F@Cvi_YIbL`M=<(jmPg2wKrgP8J;F~A z9;MX$yr3!ETiP7O)|XM-L8sGV)-{-BVj9^BntEZ$x1VxZ7rX>HNhRFxIKcv+I4llwyN z_V%$g_3h!?&CR!a1ohjkHMF9MKD*B|03d(2&w5p6_BYsD%;V*X-;U6uhq|0~;7 zrlt_J&rB~Rw;!!9&MmI2ZlTkx z^trXF%mToe!7M-_@Z(H^M@lzoXHsNV$k>kD092MaS=q^~?*!~TKaX)@hrlhD(FJm~ zY}}S+OA;upve{BEg1|Lo)LSY?C>$h-ngE6w5zQjl11v6cJ9vx>$`&9mbtYc`Q)_6j z#OqQ@%{smq@%f=0RguBtl!`mVHV-4TvAN=XMZXPV zkv<3<8NUdbKsfwX@KM86l*zjlfN`>tPw!+ud6LC@!z~u8DN!OkS$>J%q_-pbCytUt zHWNI^2r>J{pOdLcmQY?G*ecGdZWF|S7lADj?nLRiYgT$)?N_9S7o;dXF-10Ct_qA_&VL35BJ{0h_)K+UN zO^!flc6%-6b@pYGq$7*(4if;9;rRU0e9&A~TWyK$6K2~B@evmOdD_j*J#Jr@zrWLM zQ`%Fle>K}$Oic!s^)_`7>Q;-n)#jN2h3`u#FT5y!mD-&{^)?j<`DP z{^7CZ&2?q<%8D3~FD6!2l*F&=+ssF-jP^yq?E=rCSP)jrcryD(MnmpqBTg(G?O+zO ztH<4eXK16@+NL)+rQvFF4nR;0NNwQu4vGui_!ujRmsshJRd{rIi6CcQZf|$*fJ{z{ zm0i|}nek{i6dVi<^aX~-=TocKMxrtAwlL7r%1@(JbalDVeDn#mB6D(BCO#uSAME&_ zWIcS^6r4g-E@a_5*cH*%2m{C@5*hqhB(-~Qc6Ro*-!Nd!uEL{hJRcFD?FI}@iaw*R zwhBa``=)^<&jx#U&k(w-e~a)Rx~#}g1(5@;nJS}pB*dT5>nS=DeJb@jS{Er$%n)_66kap>+R*U#fL-3udy&(}UDOH6B zq;_VDW%m;eeM!Dmsp@YfQImct69r)aR%%6K$mWO2A0#vL*=uX~XYtJu6GXj1Jf@S{ zpQV;0eklj#L(2PMC1Eg{#BxT3RdA8=iBc@9hnwUpAcYIP$VWygASGy$T2zj)#5y*S#(~m_t*z6K3$L?#Cu8xY#3C!HJzeZjY;LxWZtNw(JI{o|`thDQ{K2S-eDv0Hs@jzwdA9VS-KS}pcYo6R2y z^>kVF`sS9_x;m4sRac{HarO4Y=Z7LgKJQR$d}d(|c4uaFdw+FmEH(w|1`+Ka;LgG` z+(R6A1^MsF{B%4TQi2x){lS5;YZF1EF}6p%L6UsBAeoi%`_G?He#;^Wbh)2?z%T9~ z5wE^{{c%~x$eWL%H2`&!ra@NOCvUg5Y067D%ajBKz}_AcPV{Pte6dk}k0x_{(AWS~ zMhSPT2GLKGeB*Fb46~~Bv&_?R#C~+yn(<@>TB~7B$WlS7tRH>7WXVmM)Vz_&v9g05le2!jW zZRVM5mQq`vj6mPSn#>+ zslHNEZ#UI9Si@^f)UGbBE^TZb9FGU3{KAfHBINa1Yjygz@cxI*FeIDH`9HRG%}!aY z17Vb#zvzfO6=c_BalN2zPPZsIyW~v8NrTzb9*jCScgXDW{`NtkWA5@j>abE zmJ+`vR%Es2OvE3ICva=tXZsn>DMve~`dCR48FaTb8e3bOx|+!nO&BCL zv4p9t(dp~Yq|bsu0|+TWy$!G# z90>LeUGBFxcg)hMMaL_`lP^CD3YP`+v~7gt29PuBbG$y{Z@hE)sjg>g7nU9iBAMSg zf#UxC@jiYh`)>t~h|v!kO6uez>_~6%$qwmdz1?2!HLxE~i~n|2T>~%ic~FN$v^r2?WU$iwNqaP0)Lj1tz=yi#t^}1k_kol@Y1W~Zs8cfCp3F1z6E7SfYALe*SvmN z@GLi1$)Zo6_4M(hCz8IOJx67QQ50DZ*H|uoNvPPHzJnGkajXx1?^N!7} zzdK=;VQC?;G11ZP9b4Nwc)K#_8|c*Q+2p0O*J*2!&te@>Tv6X_Yih9)->yz4+t}P5 z7yU$+cW`)cK-!tHv2d7vdMrK`i-pMJV-wRDQFtvjreemT1ATsaHUqr_NU+(qH1}T? zmpBGXOm2EZV+$)Q8{F%JIM5<7KQlQV9q@M=*=B0Cuv5VjU{tNgQdd>2tF6*DoAs|> zlv}%f9#8imD#K84WNtMvi~fB3=#&4{pXiEj8sqMI&H zHn=-GOL_8xfRkL(w(NPOG6S=c0#yXSIzIyYeDWS@1i6;3R%+Bgh<-{C@%ba+2_e~4 zsv6;l3{H?%p}}?E3P>Rq`5+uD(k)$1j!d%l7CcHl^F177Y1L|L$?)QhLXny-;QX?o zxz&uPX;ade-l$Ij)ucQYdEzBLlA!c+!-^WJ(n}KDpzp6dPo|UAI`dh%$Pp_`Ti1@? zp;=>>z~&~)qt+6MwZz)`=FVF%?(*_N%vN1c(2@W;ZjbZ_`n}d)jU59am#rrn3{P*V z#;1w-?b)`*@huGV=7)Q%Ey$D0%j(OEg@UZopkCL$exYf!I9TA@;plXsknQ&N_jY$W z-QF%oU%=(^blB{zCRd-&(;INN8BJzy*yo9OTRME*!?B3R?)G^7eg2+)mcs&M^wcqf58V&k~CYBbMD_%PKaIm(>6@r_kEH^_DC1aAx$2%wvs0oR@z0IXL`~#R^?!D4p zUDG+5c>5k32u3I90e!kcZ<8=5cPk%DKmG0aZ-EO~sN8vO2`|3?bcAPyAP@%FHdfa; zk4R1AVt{Rbvqd4fDO*Y)kEDybEC0YkhXAoFoyv0A`iFq9-7cDf(6QR^A;gt0|Lklx zw}{G6nm25jRs)LNChroBi=&l@24hJZz>y?EU(FhN;;R&@hId&%GuVScU|M`I}d5GvkQOlfANHPw>dY)mz07#r))RQ(Fx zv>=x+;^wRt0CIcqbTTEdOUu4!zE<4Uc(*q;R@S)<-@S*C+SpQ7{;;{Vu}d^8kGFnhDVIv1ad+9Np0hGDv0BoNps<|L#U zT3J$xHl2ous2Rh^SwL&Kpt0H^^DJ4Nr%L(=lFRpIwf{0Y7W~{-Nw~ltb4TPzD zD{ob3S^8&gYwz%fhJz}|R+1Nm8BG4rX>TK*RWweZ?@D-yh63Y_Kz>&uS(P7O+SIT`ZCFK=fM9Hzjj!@H*Pt$8^S@c(X z=^O}9b5h5NpbGgn%_9(ZW`#`p5T_!cqKvHlzs1{%B(0)!rS>`@&1zp6Q)_4-`zkep zT{tR&;6)XVeQi^wskOyqZd1$|mbTV!%x!I~2xu~bP5>-GavDqU?|crW<}y5q{2;KU zhbeiQHUJk+8HHsja-7~HTy-F#xFL`Kgt@^sgc$L?wXwFg1tCTBLb?&)A8=crj|W{h z{n3EMXd9%NHyTs7Ga1$=rYYYj1;-%F+-8%mw1N(A=__X7ie8j33`iT6udcD#2->!{ zwzaj|WlwdRy^YrpC*{`#1^09Evz|S>fA7le{O9-Y-oAR}wZUXInjHQ>$j+)%L%ZAQ zl4ONm@js8oXW~ zE1A@*tf{Lme4JNousiHdHZ2ePJ@`jNhT`kEXVJD<7qT6TIDsJ;JOHLI3g}>4$u;ID1yM5e!xj#3g`i{s$>*L^1T53Uf(qcM+4?G) zD}+$=e^g`+bx{pVh(E2Gip3OJY$8%Mcf|%)B3x=qVz?2AWmKK*8S7DHEd0Ba0m5@P zV9`tsX=*W>Tg_I*lCq^)zq8<`V==dxTg)vKmvuav=)MFdp*bXeK-ALImNN4o37j{j z{CB`P8Q0Tl*mN18#@WD%1{LSo@lS{QZ#LHOQ(^(q8Z8Grd}+zSxRHXk=BH;Kj)i*6 z?Ss+rnOGng9ZeiE0e`RonGub|=SBzpc9XGQQ;RSc)l0GF)r(?48EZQQY*jWkn^+}I zhsb0$po1^TFL-kQ{@w4dU%Gkkr>8&s_~ZQ>nU`-~O8cqP=O5~lksxBR9oJEP8~%Fu zAd<$T4dNO|tcQX__NHc=wKc@bdrHwMn7xsaaFD)xr@5iFjuBD2!PFH91?ZW!>QF_N zXliOJpFGH`G6R5I{X?MuQ$(cs$+g|h#kslp^|z3CET_u zMX~^VYKjr=6}tZW%F&+>@THxaoa1~hOiV1VZtdd^z0a035YZ_vvAblO?bLSa%{T0* z+gig0?_COZ{e0XR&iex0gBHc`4>)H_vZt%_Of-Ko2M-bv!E?Im5)1@IeuO|n4f1k{ z1G0Fk{2$9o3ZLguh(fSHl{|X%5Yjs*?>SkVqD*K(#EQZoN{2j&h*c6TFB0wc0BTP7AL(hb{!C^a1Qp+AB7=3?&17xJKcTPDtpKVyD4ERIi-ged zjj_qp+D0?P(q^?O_B30v{eiXJYH0^_QCl*ijA#~6L-LnDa~!BD5uspbl>xJ@X#N7- zSzcaRsjaXsAF<>V=?)AlIg8P57~}n2dS={`6qO0S!HDPZPdeH^+`)VL*U3<~JunuZ zoFqX8+|fhi7pIu=?9Sl`9_s5x;$dZ&t{xT>ppEDpNv5V2*Coz6U%$4x5g&|lZDU;pjL!ftV;J69@giK6jfaEE~-(yRCaD==Zv4DpeM9gWw7L z{Qmuy^%iTJ&D$U7>uNI6m7k?k!+L8L+q`|Vv9*udgP2wU^H)Ge>ho0^hVPGd;_b!8 zUwq*>#C|vwoo09rzHmI+=j-a9SXo)!*_xjk?vKt6wA$>Ks331%&gq_AQ>zysHM)}h z^||=O^h|taktKk5W$-U+i_>$7#hFPKzKo5|AZXv;<<(eQ-#K^>0TmkCIJ_uIS$L6j z$=1@jA(F|~CdF_Evog>%q0CrdeNRH)GfNN=|LsJmTQab`6P;iv}UBk4y z)Mx^)&!bt!6+US%O61oht1nY{0=Ffmzoi=k{o6#IrZq!qll>)%m=3a{iQ>>;#C$D- zEUmO%wy;Oo;pps2Ig<8N$E9|=jWKla$xZOCxJxv*P**k?I8;D%3e~fUXWTJVud*Ai zvixus8^@o{62U>0t!m?k=yp)6r(JT3cBiz=r5bPAQA#>-0=SGk?^;#EGU- zTV4DjpDN{PF6c17INLH589^S1sY&V&f7@Q1jFmphuWB^8x{GusZF#w_sbgRu5Cn<* zIuhye`9g?lM?!9+*4W~7shk00!=VA><2`P_$KFb7zZM%$U(Y~aFM1OP3fpJ-#pRW{ z(ubGt7wHVxAiDg1M`MM)Gc+?d4XX#LT3wl+U)_7Bj)$QVfyfhh!6=5H4THTSKZ9GeDBBa>mrGLmJajGSdwyZ zh`R}&Xl@?oZppjrTiAjxE-WuijYa7P#bPt7Th#2}5X?6YkG7X)#ug5lSY_(-Z#V{G zH=AU44iV05&V^1jN8fBDNMJF_)Q!`x;Os64v2jLZt8p!kk|it_hW5KCM2DE=XzrDY zU{+xElShvqKYIA^5g?nX1=2IkK|vQ+qzx%5k{U64C7k8v=g%qaRq8*wK7wUGs}EHw zuc{~nq@k^ml?>+~8}C74SN%t3jA8U@#eImlh6dq-(d;3vle){Q_ZlsDg1V{Mq?oU@ zS*;4{YC)>-v&cz0T_^q;kY-|`$ z;jNFjsej%qdJx|Kc(OAC^XuvHcXzuyU5+lBB1zUu&`VO}qE9px{+mNu>>EDb&vYtDjz_ z!QJP_v&V0#!MuVC&e{(mp~@Nz27OMCqocj0wx+J3m9d3x>Qy|i%!bN>{KD$GI!)g9 zcb^oqi?gxK+v8|>_KJ<1Bk+yE;n?&HwinC0h+r9kIJqFKACqW6XhwxUUHW`9+0z}2 z|A2Hi8lMXHh5bg>(`m|UOt!$x^en@gO0cxg>-F{adK-Saa`%TTm$JI2-W=iBy}JMI z-QMo*`doCNCxAa)VlnY%Yjts932WuWWolwT730n4HWmiFk_Ljst)u)8D5XZ3IDdzA+>miT^ zLr&sfjcgFPim$Jpli7k6&cG#4nV)MSZDVs%FX1gh6Otd7G0B`{Y-nl*T!XEFBEXQ0 zj!viIO6yiU>HMK9<;v)CcAdF0I_)Y(QS6s(=4P6oaygK@Azuom_fBO{3x!x!R^(Wl zdwa4E+{5v17f~xaP4|u%*_PQCESQc_EA8%VV^BpRN1n%?fUS$0YjZR6%GAG)0Y>mG zJ^q~haP&TKzl|Aj#MXP8i;!ZGkqB%BeKWt?=WaDMHq*J`IY7Va8f9DU^HMMh5|&zR z*=tRGn`bmJw}fe{$5#JHr^(LK)|I`smfm>yvO;ULU%8x<^(61ngF<~LqmkZ@duAH; zZ7n8iXIF23XKmi2!t$EZ8iyC&ut(|32=wrs_;)so2|m5f;v}-W?ABJkdDVrvPYNq) ziVL%Ty7xHmg+{BlI$Fzr&Z%<;l+Zu*)5W2S9*r+bjXhs|PcCLOZd1CT&uD!;*Ks0&7hDHSCgljq|p5{{3# zx~aBQ;Rp4kq!%aCs zToG!~DLlzF8Qzgh57z!~T5PcSUHanGcXVwa!AWg$1L!U^G?|)}rfY(hYo-3Oxl(~s{FWl%UF{b4ik;{5bzs2@dYn+fH5dc79W zqwcS4b*N+AK&2ECjScOiiS5;~$Uu)T?`FZ}+dmc70(8RLMbK#_uPRK1KV)b9l=CR7 zq`bPx+uLo`V~lFC>g!7i^d_4{Uyz&g68^l&+}te9PrIw5nX<%UW81q{XKcp>qQlnA zK&r0d+0Q@Re-0CzfB(kKdr$I9b>^nJmrwJx7A75hPG`42faQhwfUYGLu`${^NFII1 z{U+ZFQYa4It0Q5nckYKJ)ClN$y}BEB0k#be*u^jkE1#!Jah7wHc6RqhY?)~n9^~fR zqfBBP?THF%em1eUA}hG3h~d%UiPeSpXmpb8xQk263p3-x%rC{KSd^QEf3xDF454euQO&C=sMil_{gcs_!6DD~28TugX+)4s5t&Zq5tan0`ayd|b#wIYMH9 zB0(-Wo#$zSKUS<)+lg{oew{A&H5ac@H;p%+&#U;7UYT6F+wJZo&O19D)>c40y&XOt z)hlSK@@G_Egt)G%qVSdT`0yikVa%*zJg~S)JNS@DJyJegdruo0DiA~pi;{YK<&cEV zs@47NKdvsbXdZ%LKJIr7%(MUO)8V^`XO$}HMW5mrFVsgL-g7NbrP1vJ=e${tMUX8y z1w`0wHe@DECib(#>gaNfuKws^Vj|q_>3;mv{YTG=3bmn$d0gC%AE!MPETemHH|zd= zVPgxPmFVqm=Y6xjs-dp5JooFf+XAZujdE1M`M=dmiL zbG!fD&ej{`*hd)3eo5}nO!n3dZ)n%1!eMvOgPLdeAHNU>602`u0CJr%pzbb@*Y5O3 zB7KIeD>n)&nh+IkzdzYsP0&bKU*A}sogO2|SvDI8PmNMLL}Ig~b7Y9IaA1%ihtXG7 zZ*FjhzTNcErUcfNm3~`ZTi@8ivM9vrah64q$yH;aq@tuHGaNRGuRk=)Qzz1iZQzD< z4f#o$rLQ8c@c1VXkaXe8e>m@ki&8|~70CF-FVTBLd}k?7|M=wbV_KC^gN0DvLY33` z;)4*KT)yxF66@59w8XVF*HlD<*pU>H&JuSxXkAMr-MBS za@97CWG41XAKoWVu9512=xFhe4u3_L$1LL7GK_d&bej|L@$lGn$&Cg`R{D{_c6WBg zwuUaVMEs6)ptm8y!oI#()uWd)BP{e17~i;}X}4RyR8 zwdI;RW0TobZvf=zH5G^yX(Kfmm;$KR%DeI#X(X7K;(-=OZ>$ z8$Gb$Sy{yU`4o^W_mED{H5te`4|n>E^ea^mLK{+EL+%FNL~N}_yxJPdJU<^v+U}PG zzK~|WR;Sk>JWN%r=EfRS7oNb zSZrbmdo`D(@l|#~qh}0LsG~P4Gf|gbUwY+-y!&^aHRpVvm-llXW(Kq~^74urQi!=V zI3X0|J%6dG*5p2XaQ~;D;cyE}UsL=eg(RQ1+stj$YE6yCs#11fp;_dx>-EJYMW}E} z^Y5^kJncr#Oa1Lj*K;%tdhNrTwImU%%k4q_3OJE{f(g2fSb)witupRFF8Hz*ot|9$ z+q<=2mJ>szcUgH+R9aAG(3e;1TO9yL41Ye`ALBLRDgo525EQMx0O{o z1izfcJ_-uf?MQAvpUF(IFfGGoX;sYWEzJN#9RZaAj*)3DY-J^nqSOGJpD`Cepi9z+ zK4kg_jR$@U6}Mo-QCXoJM>t5NWBGG6m#qyrOkm%al*Qa&bwMO4RVqb~yy~XfASbDF zGf2~4KTuAqUy z|IR4vAi%86W<$l#mFwtAy3)PA3?^vL`u?fEkF4PL_Yv-}XuSFP7ly<<03Fae9&kv` z;PvnuKhyntqP!CQ)Z#u(Y3VhnXk~Hjly0;NWC(Or67Vn*|EhT;_Vnx$QI7wwBd8a2 z6YHC*O~d|i=)M#Bk?~nM2m8Bw{1FEPVGK?Vr|eFU??iVXXsNEpD%okW^aOhv(eY>v zuJ9Btva7M~R$X4Mt~WHXN&kF#G4AiSmsGo7KPbq5l5fznQsBuex?-<#bDrlv&H1(5 zXr|6Ce3~a#dIbf~a~?kWnVwwE{U+~b4x4A+}e`T zr+FAKY6`M*?p(CR%P;F%;&dKlm zlB|IkpUHo#tjYbSQV~eE&qYLK{Lz*;PN$AXH3XA?Z!`g;C>1vCSt~fj!rVFfFs`3(v{R;btJW0RZ9^ z3t=M45a71j$mIRG9C)L1qz*#L%&$m97;*luJXEPh1`D=1V`Basn)A5{aX=Ws!G6C_@xnv8uXwxNNTm%@SLEp`y~i-)vIz#31ab1|`^47C!PXLCE`zT~;BZAH z;>Dza-_aN`PxTL=biwM!Z1_Wojcw|?X!eW4Rf@L^sDk9_C6Ryf=;Uen(TuI6s@`ld z8!B`bZ>Sf02&1W0UuR=g2~DjI$H2sBm$t0vr($~`Jh~ot`8zasGwTD6jnien88KCp z%f-wRGiNRO>hjllIVE-fs?!?H4rjZ?P@40iP*aSkqWIaP``_PtP^zn@b}D{d!;D%x zOhlWrxxU$IHM4!(ptKfS>}@g_P+QY%sn^yU3Nmk(-@lliWpn7RT)3K7T3VsS)8F00 zU^3?7BO}owWd}~cJ-$2fk7C; z=umHXBoZ6xWj@Z*HynyDh;{Sq!aDPOOn8n4heyJJKwr0~KQe}*YkYELl`ZI^6P}tJ z9hqRL1LARUiT9abUQNu+v)Fs{_}kObIt0IF_9B^MA7n6-5I++}Kbfv1zqL_)sh1U* zQJ6f9a2!>cBy55z32AqYszpV~WLDLmLWwT;h6CQZ!rT(W zB1OXX;!rQ1hHU@ovOqGqP*_PPpuF;txPDr@y4}pb=_@LA+OlGr)#UY@Qdng+V$~RE z6It6xa|X?8#xE>pBi5!RrndIhHVT~PrndHWqgLNmb}29WVp^Wf+mN1d`$1NLrqW<_ z;C0c{LswQhtu($u!;H9*Wf!LzfN(Wy8%pj!C@s_)s*4avmSD++6=}P(qs7qX3HGzY zE!g9t`5FlNJIsa_X0S(R#X5ODvAut^%YMXOZxE};{*GpQaBO_o>lqA3lach1s1msp z3Jh_!W|LDl8L0!ttRU1%EUkSw{x+zq;|8>Jv>9iSiAl3a`SSHMszc0_?>Xr7x5#Xu zSWB?)lCg3@#)KyT;_v4+4H8pHb%9?}_b0KQ5*{5{fDEwZQHk;c%R>H`FJWHD+#Bni zGA?irYozC1oQ0PjrM_L=fuyo17@5D_4v#E+SoNKeJzUx*Q!{B490}JDqd#u z#)p%)SfrseqGy5_lnf2+_yM))WzxGOcNXN(qmxA)2g-gkVg43?8DSDYm>Fs|h#EOC zxXxl!e0sX&s;DZ_mgMEhIxT1=eVeP*YHcDBncF=cC&sX$PHly;s<~&Bb)0TfS9~N-Feku)@%VMY(8oj{QY47UcxjTJcXGa^Gewy?U&4wCQ!=u8q zw6>yAvv*nA?46d{3V2N?Goof1O)c#f#2s0VQmMO?KN8pGfeVy|Un%KSvdITINO1R_(hp?>dl@ZRoS&Ur#?Aj^)sd>YR&O$zt@WOrFS4|PW%OVc+C~gTT!4G|e2ew4 zEzK=(>d3|=F#<5)yaoKyq^nQWU8skNNYYQqz`6TOmtI%@weB{_o-kEiC7$Iy&(Fb9 z;vS5PtnLw8i6Z>r=#-+~Q;ShPmcSPz-EwybRbTnFLTs+!WiE-f5jymXN~>RFb(P?9 zMt*R@N)yaZ$fs4FRWNEPqd*)5mc!Pa>BXQ>I2_=Sg!q~98;&e(5CnBJij>Z8fah-S zdBNFx(cedue+{LnG5sZ!3TF(5hm+w;By#>Eq=Zw$|A@*-A{>JUw)M3+UG9<9J-nVs zd$7?_+j~p2U?ljD;wP0RtoS=rx7UkbpeMDXjd3+rFfT!PeqewGOw%*y8T7VE$`yIoewd zXeFJoNM~iC#@s)>vA?CRby;48KbejCogU0h$0E3zLdk?=FpeYa^Y-zYKrJ#F4L8=$ zlDiIDZ)9eg`M$-~qj7`g+e)q8*k-DY;j#s2k%s6Qvk;fik0(*NT(?_VP4roqB*3Co zfkL5iBV>1qDX_GLGyQ*uuap?lgVzu$9OcU7?C=n7|?5s~b~T#g@j2 zxF}Zu(r?;HithKaR2&LW$UoUn!EZo!BS`%+VNP{rvnd@nJ86CLQVVSkp%}eaq z9E!gnV)9L3AAx+t)ZO0~>aDr@{i7G& z>3*|L6NnCWy4?X+e{5njiu42y1L%Ndtsnk07(xgz7-aPGT6Zs&gl=rC7;pA|Pgk|K zugB%#va`0K&TO^PIqp!}(`cx?WYN354QjOw2igHVQ<|GQU#4Ho{6QD!xtVtJhf9}# zEYdR5j@5XKT5xW9Vj@0*wGj~ARb5<^pPhv-U|z&`PZp5L*)6;Ef z)Ee5=Fz<5thU}$fe>L&(|3k zL^dL&9ST+igCb^Pu1D?HFdLRKr0GTWmuk2uy%^(};aeUotI?2wAaWv|7ZoZPi33|m z=vgck&Ep%)YdsXiqIEFN zhDRpUC@-;-qMgZt0@|bk%Rw#g))Oqic`GIe@5P5lfD2AnXcCpv8y~)GJ-&P6`sFLt z4a2AJ&rX#OwE%Yj3)%eiV3sylID|5#qq+P=p3dQq zm@_lkJW<)|s(Pw5_YHMn+}YV-VZ?lDDoUW!B@aUP^>+WW$IqEXEAH+Kz?iZ~79JJf zA=D2(pv_=taKP8?c6FFrEC?jbkSF#|#q}RL9hB|%Hk00fql?$o?QCr7a%(PT+$ijd z)LqK_@iwFJrFw(KFfNNBfLmzI~8=3)%t`9^0VWE@{-S04q_ z$VfQU;q--u1DLXeL_{3&b<$-*eGp%em0gFM9tgscyJcFvuJ;J(rig7+oTB~_z`{nK zdeI9h zZSwLIa`|_RyD{MQ{Dtu6qS{5Nrog)svhtx}4P|{M#{=sL)hhGO$f7VO3m{! z^oEFxnC30Xh6rqYL@@K)wZN4?(^9oo5fsGL^Cy)`Z(*-bv$-8}OPfk2(u|Ni-q$DW zc;F(`VJMu8q{3(XOhr<|R|TI4M2SStA{PkoSaMW}T^uFSV+slVU+IDj^POd`eR_F$ ze&x+OR^c&NNPp(-9)&1TjVb2dn|Fuo{gc1ZBmKxO?bGD@??3RT_ot~~TISWvwEVe^ zH*k?BWbhxwr$^jOPVpj6beCSrxcT^1z04_*I21#n^kel#6FJq^+w1FgcA84E@^lt` z$@h0&6c)F3>Pjl=9R`E1Kho>6HyKQZ>So+0#GH6C%9-@_WcvL5eAV1k(Nyern4pm2 zDXoDn{Y(xGvF9O}j9rNi`iE$x_x34)|2W9XLB2KW1ch+p-7aT$XS3eu_Lkqxe4_JN z9%laZ)6LAwPb!<*UA~b7ja>Bfi_@sH5E*N7pFFsC=f|9ik`msrCitSc2mph z>l;l-s2ZEv0bN{CW;=#kycXpbZ|FwGM-zK*Xelw(%&gDM^z>M0u&*Z?M$+F<~K!G@2{b<%Ve(#4q$euQFXHFa@@S zl&)N4cYR9v26`CD17WP1kicdThoY7e6-r&E%+<7*l%}7AlBR`VLi@wOFKqjqw)3>P>DG_FIW#l}Nt@@(8!`TX<)HRum3ndOag<>7v}a#H0j#q9f_N?D66n z+|%2a>`xC2q=M<8@PCb@g+E1ZjF5V`-U(#+p~RJOW%R!v8|4Qm6A|I?$Y?k+wYV}n zzrK&+6Kia!k|S|l+NQ4$t8%!xgAO&5tPLDFJN+K}c`(cSkKACP9_RkfTs)z+H&Y+K zo>l|SsXEEIvIm!Tf`$T6^tgyUj(frmGz)$Kz=!E;M#_RNZ^{=>C<=yCwA& z-@wE+7uNnZTk44^zeSUC|IVGCA3sI;UR+U)sN)xOMwF}8W+QwJjf~oQDq3@0CAb}b zt={-p(UqJI#8+!Og!0kB?p7kPz@QI`-avmS-0ODO9o_)?qkMzNyZ_Ujn&LL@9^6hyP7rbBrTQVEm%pwcft?IDAAW9|SiaeZ}5g3C-5RgO?Hr6C422{%l{vX1Uxc!b0C-|iVWgLQN z=3SV8$88zyOKnnj^EYZn=u99E=k8J+XRfKaRcZScju1Qo=5~^-X=V2GD*dTI`am#~ zoJB44g}fXYiGESDHnnEtB7rU0IRkZs693CYoV~?kv9K?Ygjbx9hDZ@R%rrXme;{-jZ#+Icy`DL{wzK>3czb?sIzG4gUS0?l za-UYRr<+b#}GjMy0t9}g0M+|e65h5ti?ea$#=Ep`y zz+vO@;qjTNc`S|azU4<^Wfk+-#hGXjXJ;J!yIpqNh!`WKv({;^&d+)XASuuqI|H+O zVrsj$fpgq=e{=EEyH~FN{3NRY%{HC^I)mXC1aszg8@E4E#gn0mXx7)V22g8YGQKis zzHspeE8QYa8I;uVhr=zlaIs;RixI#Wu(!B^Y+Vk)Wd-{CeXKtmpBW!;bx`v9`y&&R z6t<(N%J=poFvGPK@Y3Jbx1;`YxqE!wg9A~x6PdST!-HrezkFlH1%@vKDWZr4Q#G<9 zjL_v5LPu9mzpy1~mZ~GwmNNfHe_UA8X7M1A*dkUn*mBAg5j!<6h<~_}o6Nb1AQAIg z*$M&_5iEjuTpo%z;2I&zX8@Q~$Tljq*~14QAGQ%H^T2k&- z?sUeX>#HkEOEmZ)w1p$37cShh4n*eJ9FBVP;4Kz+xD?rZf~;|H!J3}|)Bc_=GP;yX zVbV-=sM{Ur>2h`W!ef&Fe%2rEZ}|)cY#pmAYOslAqX~G_-W3SRWQWin+4u(nHw8uhfDCcXe~e=o2b zk`-3%f_%%A2x%Mip+o`SBdMs6CL`&*@T7CnI=#DO>;@a%VF==*WI`aVGI42YW*V{3 zlrr*@?KFws>pz26J|(WZ5&--d zy1DKBk-mcY} zo7$}%E@t(8OaZdUL~;FZWcet!J{Fq{x38|RVgQ4{W(7f^jFqj*Fcda~A$L!F1;e_C z$I?L6?u390xXhJs!uRqR-SAFrw4X+#i34vf8 z+6vmH^+aK1nWl#Eas1acwMKJiXrTE1^&IQa=psrrtO$R^+bz`RwKchTjhHWCv5MF4 zGFuFlTx&|`PdpndMabNHa$CHbB|{UdWN)Nis)=!m8Bf-BlF+~K zJ4zPtNt&ui6w7a!s7n_xb6F)1)yysMim5n3;_^LJF}c2}6@{(!I$=(IiChK09E9W- zU~p;Vrv}o=;}qs+0#Oh@B%>L?@UO5X$yiA=CXk$N-RO9nALB&$IFUX{4{ZVrI6Z~G zFim8J(W5>e^m%`mq0TJZI_TgFI>)q({7eN29yv*qpCt1?6TT;ZTT9DaT!;?GCUKlt z#k1mgcOe{2tZ{lGvm1!GPJfqpotE>kz!Pybax+n8QswCBH2#I{ka+9X8&C+E?RGQv zv>gVchl||n!4=j=57J_@G6i97f$wvnSrBmoZsfy}I}9if^tig*eFFhFQnpKQi7A6W zhlNp$M8;?5aTQ%z!JiImR~9{>7kR@-2z9e^{6E2LERGEi$LTmOF`LxdY=%K}ci9|X zM{`yF|I5?cz_giYX_}ug#v}oXDlT3|_=i_cGgb>IN3FkXM?|I+%5bW~A=cDj(v>9Ft7|j=oK3LoP++zVR3=vQ(bnUde z#LhG^G%?DgDMf$~YX|Vi=UT89uf;wV7kn9hG4iHYr>9c8ISfH~Uq?DIf1kIs z2NH7$sD})ibmvQGCP2g2p{&5b5*#H3mWhWJFO%RTa@dEpf_C~f_PvjrVVk;Bm zaCM2}60j0beyT7RlD@lm1Z?uS2T;Ldv-#rk;`|Z^jmyjD&n_<2*9t}twcn!6{_0gU z;NLrW_7dMi_jupnC>v60Be#AWE#=i#n`6}u4UqJUD4nBg*F-O>eDN;z{2qi(A zCuw{g>fpnEX<(2?UbodE8r&orD;i} zhZh$BQO1E0lGMrfB3a73?rNB0wMRj;b40&bvI+1A<2D215kj66$X=@JBc04g%N;f* zjLqaY9!lUT+5E^5y0Y$;l)kAa(!F5dfQA9Zp9p3U(lp>Qf%1bIOd-PG2X(u9YDiBm zKTL#^N9mF9Q3U&)SX7NE$B9T@EaIONvc>kcduGu)QBya%5&lMk{CgQLjr7~HqyOQ* z7JQHwOf7#(&L|m^xE^1`VyL~CYWE|NFTaiORcn1%khygpKD~Hz+K*>Sy8a=hUPe(| zqWdJz@QuyHzaY?=qin-g0%vR*{2K9-%jpnGF@2hIa%#-Mmu8j;1g^JNo@rv571tBD z>bkYUyI0q^KC5j5dfC>{7~uQO&gJ6t@;QDf-#ia{+&i&nufBZ4WfL(nX0E=B?)al} zXZ|EGKY+z6#&Uq}uIZ_P_GW9>xYxhxuv_X)1x00dQZpZ*ufYANe}aA*V4e-}?BCHk zjxcZx4Zw(kqTV1xCT>eVDtg@7@7$OvN-@-od1LUA-@N$}8;f|rvof{#WOHe5YS8Ln z)dNRhxv#AcyJT3pQx3<1+p}}DFQ7SCqHA%%<>Slp`mK9(Oylcy|B1vZ1|*OYfJSl9 z*LrjTT_mS-({q+P1nN)`zNB4}Bne$Yi4?4<(1ZX5(Hfl@P|E~XM5hRe zVXxc}72b84#~c<90NNNi*h7tB5*6z#YYJl31QRE?=10`PIV5rj!;W#u;nQg1*-X0B zl{ERHlgd<23SGHiDj(TkCbdSzxGO`Y27h0X%++9WFBvk(h#5Xo!jw6v{hR;as z+RGV>l{9Oh|tZx`~I63#{qK169#8?QwwV_8hzLvxn1+K zQl17Zowl)=m2FtGn{XR_-u-yD)UWOLO2o4Q|HTy@oEiC@^9R7PidXzE=u?H-Xutp^;O`rhcnplhmUQ#|P z6Se8C9G!)13mE=b)NsPg67i=-Q&C&VzyOJIzfyE{1{p`q{3OwY<4Vgfoc{v@Z`O=n zt}qs48!AnSaIRp?aN&e4Dm$jGKL#`=o=nN

h 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%0Au^n+4NYZz_=3Qyv~R4g37z6xrn3f06D4 zbj)_ePI`~#lDN>AWi9b1?qXm!||rc|oJ!(bv<2OWlNMUQ=OyPft@W>M)mA-xE?oSlRCz+Up-n+m%Ys zwQYSFdRfY3eZgGZ-W&QPenl^=^0EqZ zaF(i>g7W@*XX}*T$z)FiE5oWf0Cz_-7)BR8Mb+(|x4Rb*<)YMIS)O-1R|F7IF*C8Z z3o85eo^b3K4_Ddd=d+IO7^`AqT(y^AuM=gvi-w(4U%6xep$t&fTOU!N)VFtIYj^=W zevxY@Nt$&9VcmB9n{%m1i1sJ+rcGAgbI-Oj{+d`D{P&o8h6g#*%#f~A#NZ?A%)N+T;z_%)pE#J^q;eh2lWmk=TXsP z+rwAL+7|?2{Hzv!cm?t+)Wwl7Lf^=n_X@nyW;YFOUF z-rhc>_0K4x!}3(|XP4>?$=b)Jz92|vKt*ytizUEY7b^FrhkQ-|MbtA`nd{PmdUQ%BY1 zn>t*tsUA`__&mgKHO+kw^ZTu951VV@H}A9V3|F;qT3fv|RxMOh)kHn6TB)}DtFP** z#{B(+xf-e3aJ7wUt(x<9Bh`RUGu4tdEmb7fp5XrouGBN_8q%@>W2|Y$|0G3io>m>z zbE>O)LG@65RBzQ?C2=KMJ*A#e&#F!;fvc~pSGnF#y`o;^JGW}b_kbW&dwz4P&b02L zl1=+w>UsWtjy}4mUaG$usNPbq(aSS@V(70u&y)7?^#3&1yV0r#cX#E}nYPI)j=NrD z951S#e7c!yUHR=5dVHBNbmzWKX3Vkl*qZsZ;q#P=;`gVZM04gE$=IU!{V6`pp_I_0 z9ar1&Y0uMM;$L_A?xWs>!3<%P1Ngl=Pe?NNwB-I~%rKHqEBcL4Ptwoh{MC|P6Btt> zvuIR) zFF*UK_tZz=*}jHl{z8u%_^hYTS+w{>jbRLfa7Dh$X!`PVAn3@+7^-H{*C*WZA*Q)W z00gIVZ2^&*--3MljC(%h-$!Z=PoKiy(`Yk^Y_(&#Z;BbiRQ?*szmK^-h5M${$9p_! z2-imNd6#cKCPZ>7&zVB&nT%&4KfmVwPw06Jt;f;xbWCiM8T}-@g5!Di58SnqpEKz1 z6TXo#t>Uwd&lW!0nWGrYrqXsYEk2}QadA$fpKqYlEIg(ksCNu?-cf^@{b0r-Gn__$ zpYZo++D@T=sgk#VtAly+bVIEfru}&Cov7Xi(mH{8456v8izqjO$c09+r^GW)Al4r_}l{MUw)=x58;Xh62U3PmqX>J$8I%-?kl zN39E|ss_Dk(~EFEd176D7d|F)Zp^i&d>Zn%@VqvLUNJmd<{=b$ijlYb>Pcxe~w2}F=<8R?0Px8C8vnbt`UYgK*1M}QRR25Yn&K%BI<=m;uD21mqW=wSq zPpxHUSD#kR`L+q8YRElx82uBB;3-2(p-C)bN#v8n=M}?sd&B#>akUfNd;>+Gsi~s`#7VEU__7ctcK7}-cCL45E{#=P>+9d3RvfZQ1WqTSf8Il*E-x| ztvfk$>d>F`^eFRsP~E3W{^b*n4tcPetfd|QoA75=JZdZ;DfDqitLV2@tu*l|*f|^^uZm>t61!Ktv}gZuNRkK9hf6su#(nnyy?s zbxwf}6}#wveFQCHY0+2bU-r%}&`8VnllNe}W9sUcuApLb(t#Mf1 zefz{Wy~h@gWm*#$Zi{f=Qv)9rs&n$rPs7C(evb`~=j3GR)2K-`J?TvTeIfaDDd6oo zj?y6do*MY>D#*#3rN;E3N@aY)y)|*Ou#=Qdz5#ryQ_?-Pae?&F7q{VoNN{(mBoRgb zb%o<+Sv$PObxOy?yWP?E)Z~J4v~zdra!>c3$0gNb@IBp1TFtPg7U<@`tf4dP%6q-B z<~`nMiw_nD(|@HGNY0SNM)!Jaa!jXtx|PHQkHxx^?(tq{7hZ4Jta}@-qiIrH z(ZHyrd%BaTwDSHE6!%}rb&^=id%ZF4o^IsXCA!_?o%Vz-z7`tnzpN;r8?e-R_j+%V z+uh-w?j>R-G680KPdA@d&N_YE2_-!Frv9A;omBQ-aS``)>j`CR;J&9j2_LNT-)@W* zyU{U_3ljPLZ|}d8=f>Foa$~tZawAzK;=BCYodgs0Dksi9(vSFeO8U23_bYpxJIcD( zk?8JFL&W%h8tMU1U~%p)a`#E)Y!(;mcK?^#JGtFSp3Wnp6T1A{-3OJc8n<_-b_HCT zie3ug>`jI^ER^Hj*Cbf$KCy*v6(ddT(X~o{Pc|Z3aKyj2aaC)Vz_3i42CZYhC%2Yz z|67y&%2A<9hr}zuY@ELMTL_kSREmg<{y|z+`L~vPl|3qf@OB_?osuKtl$7D}i)qoU zMN~|^77bR=-qy+B1^$8JVL-#(@zUN_p;0F1L!)K|Ega1vT12m4ruLA87XKn!)}e7& zpQ~cHjLKIkCclL8XR; zoh&`sJ5`D2B<~v+L246+s#CsBOw2MoWwwZl&piXE=gF(gEe{5gQlV+B7QHZN8$L7I$kzpjtvKBktmMCsYEX z^Ho*^!rx<2iHX;No2dp1q-FfwTJ9q(E-sm-$#L#j0(2bd@l-J0%G zjwT85NwkdSc3)k9VxxB5P>$%>#K06W;@4rx_g=^jbGAt0RJmIxEb^GwfwtP>dt4_R zj9A~C72zp#(uEnN;5xO3#CBo*hQ};qEY6yJ-3i`gkbgUH2wAJr8sfWS-LJb?s>iR7 zCGVs9EFzT`5(7(<6#k9|-P}oxslvCsMSHinc6ZZX{$xIM)WhwLufy*7xCslj!O1ac zWOQnm$Sh<~jwE*{Qmm=SZ%I*TtLgrSenPO$cVN-RlX{^1E&?BP7VN7*pO^$@OiT}y zjr0e<)9qVO&9?Hz?xubbqE@d8%eXgtWf% z+@O7OJKFod?smta`+UvP${Wt|h#)0D3%q7>0u-qsu=+b2@8)ER;XYgMI9BC2dGY|7 zmgt)bS5lPqQweu(xQA1!lUvqC46oItvvP6@POqhDk4lo)PQ?iGy7PH^WShpuhqIJx zu^O+l8UYL`dwdM9gk}+UZ?+o=KdwV8PYY)yt~afen?>Y{kSY!BiG9L(T@AcwwZAip zKRKbB^aoy@&?%-`s-m)J4#|kzO?T4+91C3+B{Rky)1?vbD&g*Z5YrVxHhgEf*qGS9 zKyVJ{`QocqSt*1t(TAwNV5T~;7&^!{xO3_|IU#6Yt4n-*jT=g303fe9M3;c}edA~q zC++>%=k6qO?1kTb5IdDKTB#W>!vEb#*Oh(2CQ176H~TqM)fz%1 z?cE3B+eh%sdS@R(sH(6bbMm&MaFt0&Nc7Kun2x^g*aWBMqFFfg{;73P|JVq{Ly^Sedo%@+?fSr8kI91U(JbE#VXCYMTTIitck#Ol zE~BdGf~3XEnk6Q6XevoH{kQaBB~?l)ok?q3w4_q#kZ||rzi~cJS82(SIn7ECPShaL@R59+Pe`@42IaXbcQYW`7Idc;;A(nqIa#Cz!th-ZriJ-Z2-TbC}QCb!& z^?J7*X1ONGqf}CX+mV1&`A>~(y~uEDk3TvOCMoA>hbmdpj0Nh93ybQ|?e6V%D4+Nh zq`4}{*`b_CadGZwY30`-Atok4sWM%@1Hq!ArS0v))OM^c+m9dAq%m_;i%d+Cb`Jk$ zy@mNS{a%`NxLY#CbN8)kPgRr`FwIkHxbT;K|N;;zKeR_vm(RP33Od|jp7J!#= z`u2^DYbMXBBXH{BE*{pu(~a8}@4ERS3m72_t|xe7mi$9z9fI?@r-v;lEN ziU=)dq(X!=Ln|)|!Xd5}=Gb)FQQn0;F*b(82Q{PeShFy%7}ajbojsDCz!BM^MMMl; z+I}lWyhr)C9LVDob(7tpTqsHV3kvA9{BbI)+RDd3h~y6LK7^6`bDVYP(k;4NVAB(K zjFp~Cv}+O7%=DZ%hOR0w>T0?2S`%5J2`Va~KNPr_Q$TXvtYcuSY^8lKsvtQeV|ukv z{=Ji8s!3+IzrS<(4UcIN8WR~Np~mN@AJhed&J({E-9ox{MsbpoF-0*V(ue5d+Er}# zF;e=fCP=J_ugfY)E_AzM6MDxsb-R5L|yE+U#HXeheFMHDQn0cOC$b+&w z=V%^>&M0}~j^KnuSGw|JLBu5{xoi4!p!V+Mj=l47yqS8Xo3@T=U6ZHP)awVWfe_&0 zKW^vlken1#0|^BQuUm{f$rj;&^|nrC0mN$&Nm!daD=8+f9+3e_Ra8?rc0J##%2^MA zE$MC#vzJqmg)LOnHdZ}hBimJIZ#M-fm7Ed|$vNdtk|+6g>0OUWb*OP1vpsUPKE~#7 zM#RR&bYN$Mso)+1q9Z~{p3|UDLddB*Xh?>}@@$ZpZORoot7g>Vjii5!ajmBkqRrPq z_LnL#?k;b{C-u0ly5DChO`~)MrZb(y{{7bP-}>`i z-?jEkvWyt!9*niNk8RLI_QyAxDZ&J@7FAo*uV7t$3wG*~8^nL|-@@})&S!EnI)h|+ zHV!YjOhg~sHL%LH_Dt^X<;;q!Z1rD`{G>E3bDqWkr-_tsev8>f*Iil>UxmA!$m*cR zWDYAcTQB;50c%lG43=WB$-f-zzW^h|N4Dfm1bkxDeLJ*<6T?3QfrQ83vekM=vP06h zZLT$z!&t)~aq8FpV##|{qEWn?8?H-G$OlG6A7g?hbpwmow83(BlL5`T48mSQf>th=Akvrn8yVp--czfo$cnXaHYO~7OP`5NHktXd3#auq?B$vE;y(JZ3poH9AIkYCF{mq^MLAEJsH1 zXfPJW)}52O#1vj1m)CDk^}qb1$#ZZ>#gj;Ot} z#BI%&i_vkKCeD1vG={|osKuuE^6=IgXY7#xsF`MnWS+Xwi|lb9`g7d5T7EISBrq`Bdw@ z?2I{6Jk}x>_YdOhB3vs5)vj?Xt`nFvrF{D|wZ0N%fdLk8VkZU*OMh)X|Hh_U$HU0{ z0vUx^-8g!nNyk?+V`pn@=R9h$P|k;Obv+TMtV>ion&H!hoi{d5bY19^J=SlT%%u~H z_}9^b^Vk34+Oe;w6Opg-SO3C+Tn!^EcnVwheDLQ25U7Tnw4AR4T^%`HEoK zYv-m!FQ2ZrAbs`@wqUQ8za2aHTfRLYQI40JWcpYgm(2NVbE@ayb7{h=Rr5?5BcIqe zUusAQn^dyYrCiKgqjUnEE@T~@u5*S+I?oZ&{ng)dIdpa#18ZsA7>sA^CY^Tu|!=nhJdK~ObW`^rAUlZ=6C%jZZDJrUPE2c-K@!WP4J>M=g z0^CU>)brV2+r>Oz4S4p1$njsO;^@tSTKWA>RqFZqZa_b5Bbvl#q0sl9b@@2tDe-l4 zTzLvuO`j<~FuVHvUyh918o$B4c6C^@=oI>SUA=WFmlD$e2?c&w-5$?%<7<{Z|K3ON-3dI za(4O0LwzK2ldBznhtcGD!rzt4kN-jkoQq)M4=;>QDAkXevM87IytIC`Zw`7@*9TtOuzmwq(FHb9!-oMq9&WSPd>{=IU& z`3@s_F20d@1CG2{96+5Qi?Id@Iu`ZvxvGXEakh2B_xZzX;sSUFlhM>Tb(L=Ogm!AU z^$tJsOP&atayVSGF|FQ;otrU_szcm|{xbRlt33Ahp+MMYqS1)e$Gb*2kZif$bzY$= z^IsUu*GSjHS2X zxz+Rdd#>e;&Z7nXm7zNpvHy9yhNWJRBqPU*c6Rb87g3@-@N6bGcZFE+;jtw`@n$>~ ziG3F}tVuqR8C`#I?3s1<+`e}izGEz&u)=fJzf!W$5mx`D)W`5KF3MmjhqQCQ)Zz0K zZgv5R)_9Os89)7j7xSTXPNWdtN=Lep-Q^o*-rHz$%KCnfMN!aZtkv70+bNf9r#^I+ zXU7YaFrycKsoRo4S^9caH~0L3kg}8wwNC()5~SjeO~8ko=G!Mpck`t_d6rA*RxYY@ zkMZ?&MH1qt8{RSLn2=f|Ux+e$FvL8-?O3MnVv&ygoUZLGFiF+2v+a{$BNlsZVF%Hh zLop^<-_)+H(;DYZ=p;dOQ+Rqd9<|bO>sPozo?b~aMaAK+MY~x`_X(Y+0!&V;JBO-3 zjJ|g^RkF(M6QSxR$WwJh`T@)n7R`)esJ3Q=C;+8+N;i$K!3|ig>mbQrQA}Y5WjJs_ zBxE=hfcjEBj18CQ3GTZ$jzg%26S9jXlczY{DD-{Nb~>!fM^_tTERD0wY~Q(^n>W#3 za?TyPpv$t-$y8Sli2%!<)_NA-(3izuLPJWDj zjI>Y1ImH;-VxmcUjlXik zfL~a}W2&h~b`7zaykJTFX!H^^fHl-HFKV!y)z53SoEkiLm9}UREj;I z^aYASgSjgb7(>mKaigMrzf%3F;De4m+CDa$H0l5djSRwkSd;9#JZ8^WkQAEqb05r| z?}5&EYh}j)V({dPz}V{S=7ywy+k9)-1Y44hGVaW+w#`@jM;qklo9nkLlrM2GfXFDcDjU?~k9BmTn_66Nuvo~1@X-pS86Uhp zrbvDufwdj`d!y|4OB@_+UCKFoE`cX^k)ju4ng|a^coa{C%b7GoveV)4CXiXiTjLie z^kwk&3F|!F88VX(O;G$$f;}K5-LERB$ES@bbdr8fA)9stJ0H79?T$qFrWFWlB|by6 zZD)&RBQ>)EqO?U!#v2{HtDaqd)@G^&PN{OwFK(X-TRvN3uGLLeeofYS--S!^EAdQQ zeDu-??_iTd@d>t@Zt1^R#o%4s=qEY^I=vIf4^8H=_mmu>}k z`go7i_{)3);lcVi@oJtp#S8gmi)(H^=iYhpeT-YjxFc2DvGCJU#rJiEqa-5A=|YOm zzv?@;oIUO;R^N``$7V}RY(+2)UvrPW^Q3sm40!A4Y?GOnShUkV^BpnMmXrDjx3`mB z9TmB#`s^g}nY}PmE8pSxbzWnU09?ktvmbHn#()f$%EdU}o~5@Cj%Qs`cA4h6Q?aOp z3fk0}(^V%k$4aJn4Rpxvju#x#v=5fdGJqtl(y9c?jb-%oJ@mHnSFOAC>G*DBKzredHaf7aaD@w2G3v$gqZQ{9_$b1L(qe z!CQ&VZ1O%ka4_xhdKfP*V-l??w=yK|#c}bK3emV-;I5BIJo9dAG*7005f}e? zF~@_Jzct)-y5<<$pT-x)+0BovJv5+MA|Z(sSKnhTol9l0oQj0!-{yzN%l2jMEE7oX z*U05La67`+i07`ovVy74XR@jGp~$cRs5`Ou#e4IOJ1!Y(I+V>u24ylG|Lwie$Ze`V zGR6a^G_QY&0My8WeHc^6Hn7bkS-=|xW6SNs;s#Hr3&jtlB3 zqVFw6@;~mPc1!Le9@y4ynu9-oqEuPQ;#-aO{IPAdq)x_`8Oc4W$=&sPBOxztQD&A^ z4yjn4b@x?d+(ti!j=jxmdv?0GHyv{eV^4_h{BL+X?IS{qm`4@erKGD%uJ&JMvVCHl za_@4mor+RcWG=ho6dj#p2++lCHaMJ{jO+#*Gm_s=AdYK;FW%&MB>khIErvc4mu|k5 zwe2#sq~d#rDp0e}b-TZ20`Ef6QJmVC3j9XDjNx7+*1ge`?qKuU=CecG{`1miYr_0G8^Lih7vYUPXV+{7KktQ>|-9+<)bnO zc1}pn%~St-mQES!_^=FCb9x-5;NBSEAng(#zGxapW^F0JzF}F`av}&y5q7!BfV==9=og%6uU%7^G2V@ z6MUmf9_MNvuc6#)5J=jmAg1u;?C)6=oo}dL!1cSMi!c`GZ{bOn1Mf)ZLG7dYgzFYK z`n4y|u|4BSx!fmj()}s$HfTyWPK$f>-!ROHiiOF0un1=0dRPAO-Zo{}rpqtL&`F)a zU#>-ZrIMK=7)-f4m~Fd$8q0g*c1e2(bsd|bKvSZxL=Nnqa=8wkI|sr?Q3s8}&{u6U zz_b`xB!0xN(IfXi$I5H$)HkGcI_j>-Y7?pVY*rc1sm+Z`f4!w^(MTqS#z7Qj4(m8cVb7j1uTgX1*-g@-zQ{5s< zd@7k&O)I3p$Wo?NDtBoOUv493V*c<44_9v2pZ3TRZg#y138CRm9w4Cvfuyp1=Sb zem<=kKDbR)b>|)|=yU!gJH{pA6AVo95(M+xItgjRA+W^G2Bx~Ei0wMM4Y%oL{~NC4 zZhG9~(25NA4%%^=FF&2)_f}~9sQ%|@jHzZJV1={oGm$4I8Ln)&{%F@KYTP%f_vsm( z4gak-yvU}Nnxr>ixJ&|v^bEZtzKvZcyXc!Ifk6H09rw@`#fZg6@K0gHEpQP}XdywY znLgFFrY~@J3y#G>8I9aWEDN2vDeF4XALX$S!17`!h{ba5A+<+aitvs+!sbmbt|q{l zs^5Zq!I!vx3q%*khPX98@UBSj-L`31&|s!SRN$dNeMP5P27m0XH*jT#l`Ss<=9Xz8YWAF7aN_C&}&= z9x$NsKG!9YX}p2uMTYVT7i{_Hh0|_uyL)02)b7;M8ZV*w2H~f+2fUve{*;@?KHqzq z0Ownp2A{YrkE18bR6o$z32bMz&qmciIC7X38N1zYndrb}kWo)p&VIypmUuID@}yIk!AV}Ux4Ct@ z*?*1m_Q*>7k^MJl*(ZrZO}Bw3w!ii3%S=$_lkN|e!vsYFUt@VhPv0|q1G0v&ZIBVV zW^1G_JQzloEcQ~yneh>+9^wg-+N9Uo$eHGG7q#PYx3<33SRGn_`1nwr#p8>53W{W3Cnns0CC z`$$*lC+IHmYpxvR@!WFnKEF<4LbcJ8zu?n>{peVl>pfT>6asv14Z4jS*Zk+i#&5ef z4_wj-@iTy%z!e&$ko#?oIj55{&>V?PF6uF`6o9ATqYfl+R%1FjZO9N^UOj4ZJb)<%><1=DC(UzjDEC z;$;O&?sazs2*q_@6LS1TE;kNx24~>$_Mt!JMK?@zMu>Or`=~W~N1<+Ji_tzs7KA|D z%(?C&@dziQuJk6*p&Z}_PyLg4VH!06kbMwJi{(PQ9{vMPks?T>Y>bGdBl8u8xl&i8 zlA8HSN8W)+cjffQY_jo+dW_Az?ycv-yf^IoqhW|7R>>OaUCf8O+T9Vxbx=2hgpc!c zsPb0Z>F31UnVIvgF)l&KpV(g=)?@P>HE#3kq$L&?BPIs8iYm*M%1H>f56+GuVg4!^ zP{KH<5uU;xIf!qQ4t)XGpb09^(2@0zS-x?0k(Fm(m#(5^<()W)dLQi|%_bM(PUnW5Z=I^b{=(Ad5 zl`;!DmVd$FHZ0oH`nUJhCgviHR<$BMbS;r-4Qxqa(q(c4$f~Z~n}b-J;!PlWvz)dI z=lC3!SSO?-D2t@jeX7XskA+@^rJ%V+?{e05G#!!3*mD}>Jdf5PwQ>`5+&hsfTjg`K za5ehVJgF|SQsqR?dk+od_w_N2l_HVe;)|#8o#R=+BOS_H%Q(4-FW4q?s*xXgM_c`+ z60uO!icb93wqdyD(^>kTS&=Y2{{Hk4z>YjBu%< ziNP~GoO5j>eT31=MQSoZYAlhP^5%-A|N%sD?hkoBb z44zmnJHbBz95~1@rJMKPk@%KEVBzz+Auv`<1Ry^qrS^raNJk%87AptM#4vrlgh1A> z^Yi;wYx=CM19%dV6sI%#A(#zVSl?3nARkIc-Oh8yiyLADs=U8NI7_WD7VnKwKCcJd z1w+M~>lbI5^h0UzeA_ZELlqhe*R91_BCdHJQmT-~Wz&7|WQt_9TUp+s|6O8le|Kyq zA0MyIv(^|fFtN~sTZcy(8io1gS;*r@c!$B{gF4RN<5B0G=$E`p?@Zp#%)P4_RM;#2 z@pP$DwI)qmhE)4V#3`y3r%2@cdKSro^?yIkVkuKAF24!xi&3=j@raw!I5~Qf5#H8E3~hmKD!E zng-XycX%)siHK6QjGJAytYp9b%^pxCBQ|nDX}FUaKH)Sj{Yy#Jz0oRhVP3*|zwf`x zv+O-~#4}S^*5&RYgfr%Mpa-oBN~+G}${3n%z8^faSg@8k@dv-k%P{f#_s}#;CU5hL zo^qj=YZ2hkq8H#H`)dyQyaAc|9Z63`dLGg)T)yDh)|4NLXTAhbt}aV#PIiz*`$bxq{(WO6i^?N;^;=dJlKBv$imq zNe@+1BOkG+v?h)hlO?E54_1RX$$R2pT1+kzJV1XYTaYq5L)_=8oqP}d)&cleb7q1> z%07If(SE$+hXx^isb6H3+J6v@dFQf~47yHYN-Bi27W1RDNV1v}T%q@P2Igcw9K6W$ zWY*q~+lIno%<0Phn|OkYFeR?bPw?uTY|Y1`y-y!3Gm_@7R?zq`F?eu&(**ctDEG^@ zq1YwU*0C_TF~^x(Q>C}A{0Jux+fsRka^SPO!-IS zWr#72gBg7T3<|F?w??GqovM{H`o40aSk^LPQyeZvj7F>(tw<3DEloa=MsW^-%QTw)6t+U7UizB(dH<}!Z(*5wYc}NA--#K`I&+^0 z)VEULDr4S%$0x+twnJ4lyz~(IJ-x7C@i-+#C@yI7AlV39j=X@YPkk(&-W|{!Bt=C; zZE+sm7-*&U3gzrv-v-loeC6CHI1E&3gxaSeY>7|+#doSjE?=arp^<&_eVBn%+eIzx zQF0VT*~4v`a6IK)gmJ?F5qQ0YL^n^yX3oWR`AL)uW98Af>I6l4*2z>${$nwdb{@XS zgH^%2&f7~60nAyR4f_Tl<7qBkx}>fYWTYlh$p67Zi6-cG7Q{>&(J}II1)`rv@)bYZ zm(yez?+eGnlPV5iQ3u03Zbul`GrU0%$^7ZafbxOInZHb!>Pb2_V8vq0N{?~QU4)IMzf}llRtt6= zbcQ`?J&(Yb{JJqo#hc-Oh*PvFdNX2(z%sELEc~29py>p5ET+~qHa|Do~OLznA zluk52wUi7asa^|kq!_SO$J6GMyQN2i(i^0Ffi%w%HG15ahF7>T9YZo76l;bf>!Q+) z&i_H({k$>X{kC`poh(N`#I1p!=FK%S$=*+qTEZWocH3wEjJNTPbfu{#v={v{md8^c zB{mw`y>d9|t}0Z&X*BsVG(PL&8rHh*b2>e6PdqwBj;IQ25ZI}6PV$XJd{C71vy`nu zZ^clTQfL{bwV8IQecBs5N7xU>1cf+WXXk=5{j~3O&A0y3{M58q=K<0d5vuugeT zqf8T2CAhGOj-kM1AsYgUt)w5Os`3TRJcSG52w|5|ce!8gRptZk^4>fy^0E%?e`Z$* zLXrEF9+Wo`NT+AGbV&wJw${KGlg^5{OwRZt)M&JBl^$M$w}M^@et6 zGtH(nlnl zIcKVuqOD;T@yMpKnKG_72H5|5R&EY1miP_hVO}fjzoGE^;@?^+xf?g#ULDA19|rV_ zuOI|T#v#q^!vY{1x}S9$*(jGT)Gm&;I(%Qq+VQIQzqUeaRCCTsYq_y3swxK4kLk1F#P>H5NupYwo5hKpn)t zBgwu*jXQtTU$LiKV_<*Ftug8euBn-;v=2fm$Ij$N8Qdjv;<>T8uEYGl;;C4gSBq~U zg?G4=FPiVLlb(=W;&AhJe&At>qc;Kok%n*fl>1t!32xKSVL)`I^mPtGBZu!1uZLQL zz`539Q{t3(`zVN#vhu}`;FBF_p57)rcX?Zf`CF86pT380H6#qC-{H-9^Edz#Tv{q# ztWx_hxX%8CU0hibb>hCZwMJrZ4*;FS*x1qR{`z+s54I#Rt5(M1X-$`M4-KK|6{vun zJ8z+{`s9lF{Rlu!{?S$RUcYEWhrva|&BV8(Wm1dd?P$d3{NhJq9OEE7{tMmu`>Y~b zWq`-kdhHO6C`Tjb*h`pecaAi0Uk}qn!C2`hRbGp;!dSCNRr#x+fGir zDW2Zq{D%;!fvvsMu6x8%7x`%p6Lg^C*zk)Y&lCv;%algFt8!GJkW7buG)BcLfRy?F zAdgt?c?dCAk^ZC(^#5S98RwwH-;%+T#DY8+C#eG&kN2=0<;?dZ@w0n~r>Gm#;^G!} z`Ib&zJ^_R#YKCwAzN_-+)Du^(=Lx)Y?3WZje2O*lf7#IOz|c?^5`=r3Vs?iYOYc$u_sDc< zTpG}1N}0?hF-s&Zzb6&8L?<5+u4EEe4c~PM-qFmNdwunJ*FC9cLS;_;$&hdHPE-1@ zpkp!8K^i)3C(?Wu)C?3JZzvyi5P@t4fSe=q?ZacvlI4#ju-$d%g8A2FyQwdR!j;jB zPrHZlLLnC#DNL0(I-)V-qq{(L>$RP+qF+&YbHU2z+XwtiNXC6E{)+pO|Jm~bg1$$= zdJ}eU2cBjmks>oFb2^yJ(O&>+`N~wbmxdhE+uO&vF1~re`SN`t=1Fo3`UEt@^#@2q zC8a+C9l}5G9$8m2n=efAHr>s;rx2 z%`;@@T0>5cYg%jL+G@ew%aDnOhtz&D%t(m*NW;A)*6mhnfcqnMPO}ue^`v4_1-tSd zhPESc2WE_{GZv^+%hztrPvjKNWJ67HeV_6{>J>ofm4T5KbnFgaZT-kO@d0l^aph*m zGj^f>B0FcyKpFBkgkVBvqq9WUqLXPKm`}eYv|69IA@1JV$KkQ8ZTb=! z_cqXv@2Z6j4kx1t=x`o8U26>;zJp7~&^NB!(!6Q&6hjZmT(Nyb7YRn zPc%>H``|)PQR?4xlT?~Qp})&Hj)1((z0VH#(pTLJPwxl5ao0G~tH;}h`;YGVh7FXu6ib1pyja$2=Rmfa$$kP&Zy;Y`$;A2h_=| z?Yk>4P(Mh~nP*}@?zq5_eQ?G8z-`21EZYtdK)jpale)&V+ReRU9!4pdO*w)K5oo1< zU&QZzhG=fA_C73t;JmweY3vgJ(>&kv`on|jW-J1N6EhR1bYk4xHx}P=*YtWb@)6iE zG`=BY@SyYLBnNMi%HaeK@Cezb&p z<(NyQE!+FjwW2~j`$%S+cFZOx2Xc91KRLV@1tU`bp5Mp7d#I%&tx&=aHd^Uf2EM3; zjq;3pT?giJ4(XVCfGaNHqx!C&cCQ?9&-_tj@B>&;#;yXEdvW;td`jyl$r<$J`3B;= zQ|zV(x_==x$#8woqx(`Miti2Qk)69CRc)}pd;WvJAXp>MqW+xp{ECn!)jr~C3(wna zN}>x~8RcNgORYWJ!(o_L=k}fA+S97y%56r%f{f7r06^LPCGpLDN*@O#@qa)-ifOx` zZRW!;Sbb9kk)Ar83r@XFP~l#^C!DW(bN$uJ1j8nTdGJV?)hMg{Cn1&&m;Mb!zjR+b zJ}PETXKf)DW%QTtjqj;i!xVlb%UQe8orh*=^bA1K$!ZmW8tOgLaVdDX=b}saFD52r zAyXItV3^&cPRL9S=PSoJI`UEXuKSuiI+!TiWCX~NIwe>G=6t#2e}%v1_mu@hWDljC zKQEL^&Mmb(?%?+moqOvJfyDD~i9`T>BeUSr_|JJ~wtyaoaX%QB>WHo=eSbO%I4~khWCgCo-xehRZLD9NMiX+VIYMkI?2qis#UjhPtb0%9ZX145}yd6`* zAZovqo3pd!Y!1d@pKZ!0w#saj3JWUFs{CYD34j1CHHoIH1!~c~-ScC+&2xZ?viD16 z*7>aEBiz4^CIB-LGL+j?`75G*zYVV&Zo(*rZ8|a91Rw2~n3TorX7yi??2n8OG)DH% zJC-h&vVXQm@(%l6$QUvXv6~;a2V!KJ~xz>z_*JP@3jP z^HQ_EwTvfgYc~FDaI4fTjt#KPzvelpKY#SuT_)|CFU~px9QqGq&L@ z^Xx`8#i-#{@1a{jPeKpfDd(*8e3>0D+hGvbM7ccmE_-Mk$lPX|Wt0mv3A`BU5(ueg z!*zFlDv$KXibG@*V4r3Yl)S6=>bd3Saca^OXik&5;4BR*%O}(#R2w+e&k!*z5>)m? z^{5!7+SCOq&W@Zy&;q(!RE1cp{ChV&n6un5+dkJOz}$u#9r9214-xn**|Q34SNZFeE)?RS8nvvIRKT?+3r2K!$V=bgSLq zNzIjGBzewwz7n~{#c%BU;nJ%J+g|55GQaS(Xnjavg0oRWm^#}U5 z@#mh!42Zko%&}UN{Y+#sU?QFb!34($WrAR#(0>Q<^u25W&hgUwuZuaD2;n9v-A#gb z#k;`cF9L|?5)OGqy`++YD1o;}4=Tf?h}9@E2<5R0mE5;>XQ6Akg=Y_cf@va&Nt)n1 zM}*I@u#P%6ddQ%AvpXWz_)Q5M!%^94UZ(mSC~PEET9)aA0@j*1@Gd#|;=*0nl`?Qv ze5m|QcOLJ5;?EM8a#9k?(9W>9*@7U1gn@@D89b!Ktu59!be!NE&UO6$0^NJGsIh++ zPeaM;f0GA<1b_$PAg3L(ise$WR4P}d0W`dWbNJ2#h}|})=4>Y)S}*nPAX40i=G|m9t8ScS#M9|pMPjazX&d!>jNg%D>*k0f!NW1atkspL_mN*K+zIK$a= z;XeIVJW#TrzSCC0&OoE>m?=j|%gk_&T*sbSZf6;fmPZ2nBP%d{X|+Zbo=IPksB*g= zi)2vab|s7!Xkqu2SA^u`z|QkfNLk(1`a1J>hHGh=tb^WP6~B^nZ%JxPuU#k;+y1RB zd2DNmvUFu)oe~fOcl{KY44?T&zq}cGM;;%n>Ogo-zp%}-v-#@XV zV){b$96vHZ`Yp^iQk#*&N^fK&*;B=-?tft3TL|BD~xxwYkDhbRKS_pT1Hz^44o zf@)T)G$M;Ff?=vu$wpGN8d=2i3gY>j;e0K&Kyuiu=Ir8s=ehc$#cC=dbu~eS2|(Ep zH9!A@g2&tJs8HnCbg_q&)MuTdACP}n&7S-~jF(B!bRLhCDfA-M!g#54Ws&Oal3mS* z0iW3TBv0{~bK>9QN-Zbhmskqnk|$QBF4p6dsF|tcbJxUkz+aU> z__fWA;X7=tQ0M>XP=SK@E;w=%R@}TuG3vg`Q1zM{M_Wiqe}-!^L?4h+FZi|irVkCu z+t&zDrYE!=^HVf1@K2l+{Kl>|78J##4-kziGnBSig?z0GmD`Qma>2)g1gu4o3@JXRrg3=5-f;5Zg{2ED9n?nqO&0uA#3^%S8?2Gj7QRr z#Z7LwbU5hPAdZz=@T$GVrLk}q!LZ2|l<_uwNl2hIC-%RIC(QNlFBvh!997f$)O-9b z?Q7e}tSPW=Df}<-52M=9j_jptdvcX1K3-bM09dq)CR{3}gmapM#Ndn(*73#VK**|M z%%WG^4OEps+$aDMdQCb*Lcj4G8iztTZCK%lvE0i=h)4+XZ8bfVs|@oN{rl zpKx(s&9apvna>R~ztu{fG5J0IueUp z5jbWuMmN^&(Wkaa?U3xK_R4aetuY)md3^cNnAoIkM3pSirJMT{KyaWsX~74_1qLsn zH}HhfvG*m{xJIV`6{nqO#TTmfD};f#qui@m-!H{8oGZ6vEtA?}Sjv5a|_^YrSO z_0cIHs*aQcy6GKn*w*q#TvF<&;`3iicim4Onc!8fCel{2fDWV<4k`Iqy>XE+-RpOo z8x%5mW~{_j`9#c6KqjDc0_RsA$an*DMTFfSt4&H!;yZDD9-G6y(JE>o#T`&yT78RR za+5;$u@3+J8~$MwlF$w@8}C7)c;<1WxQ@ zS?QXV^_1)8(>3;{#&eQ9x`(1N@2302ZnE5F^Nu@kK@}38b^pmoq|lh}!YfUd@?n`e z%3~#!Q0)HG_qSt@_GOC}R;h~Cjmn0lnD5n;hB1J1qB=jEAagmiDJKA5Q99NKdOMIc zTlCbdX*7Ac6dU1*=6Iq`zEa5X$jHchG4R<4rXu|OER@S? zt!S_4zW|liUAsQ8A;ymKyEv>}eN`sPr_tX- zNXm*W&}6{KVYtl!_u_NaoM!y&Z}&)u`tMAPNJg>jcRzPa}Rb&K(HMtCV`C|b=hVlS;BHMXH{ze&pr0~y4Y4KI zRJML29pN{$D0KTs-WmgRh=FF(FyjLPDk~Nbpce*tPPI}Wv73AIC}8MmSKj&_H{;n} zc|t|?RI1~glZ{VJ5CqI?n~*K?KjYUQh|Q6hrFvvD+GAxAr^0tpj8WV$K_;5Ww|FGAxHg)cym6G9OQ6gt17A{H5NbR6QD-8iurwBO&|XNF&P0x4YhED)+$n0-V?A^5VTV> zuYm==B}iq>)CLLopp9#kjz-40eF;M6V9M&kFRxjJai~oiDhuIQFi7@1C*z03y%eJJ zO@BDQ6y_JR=+9#cO=f+VcVw; zHk&6X=z5aN85`3=>@a>0+$W>3^c@Q@0)RUL7q4^jE*(d4efjTBv!-1rC<}nF;uMJZ z3O#=hs8EV#fG_UpwG|AbyZs*t%pUQvYksK};uf*HIcOERd4B#dj+0vENtMctdj|s4 z;+bzuU6;co@UrB1)3fBT>>}83AUPqYsG33L*1VE5qNt~3erx$LEQBk+wiTfw( zu>t9_ZT!?OEbb2rT653+Be7Uuh;3@{t=epj+iap_TBW}w0s>Dl8~BI=5la^#JSXTx zPJOf#?Yk?1Z2VdG%B7`O=Rv4EqdD9{pR;Ww>ww%FeV_~fiA@=w>zU$iodpNIE5~l7 zSODi4W<*|Sf1`pMhvp1B70$?jO;UkZDB)+h zzGMXNE#)IIcM|e)*Ju7o*Hg;MT%1Q1>04r$SQ`4v=NL6(zNYG-< z{fTZK3sO$+pfTZHcLn=4jC16P+m2UDF8Y7ZP83K>up-lpjYJ~R{@d=IU00{&$$4<3 zq?MXjNK6J%AZ2*IEC`Iq#r8gT*irhEgi#_CI08s``bw(N?YAqsrf`4&q84QZsH08Zm8i# z*L2|2(OfP38=^_HqLZO=!2t|ScYlNIMq=byT$B64uS#HtM&Osa$*8LIe%^Wky#P2W zT_F9FNsigmmkF*=re{pqSCwr%{cul}*bh&Zemr(>gg>)0{ z23w$Y!v5Z~5`B)pf*=@*S*G+SQMhnfVDP9jgJ}s+5vcxgE;MvX9vxne`Kg&`(Jd)2 zLWEMi?>RAI{r4qraV@k8^3F#5FwT=dpUd*lvZTEXvx|i;k#+y))&n$x+0UR(ctKZ} z`|-nZ6V<=!zbU~9>;n9&t+&L*-GbpU6sDi}AEg7Auetdm#Sawb;Jbf^u%23(a17-= zN~}^)>(s|KEm&5CAPO|lg6#fN>WtcwTYXOrf5k$%|2l;MG@;yPIDr zuOyr#i;#BR%e-;Le7->@?^70?LXnhGP;)7f0e9&1$*G-!KT4A&uJwZURImKKcmfeB zhwke;zx})n<;A^rm@GsGIy8n@P*SI|m*h?9oQ>=!N)oyDDQWKRh;njLXd+0Z>PUf{ zo7|hO3~d~F3kfvt>Rz}zicZ&5Dxr4G7(}c5q?9If;7y*Hh;E;GZre@WsBM6#`Kg2A zAzg4^B1#sFCB4)x0DHcCm5D;~KD--7?BT=y8g8E0vrk{HB@ z*0mcUFkzWTw!Hguo}8!ZPLY5N1QDm3ERi-ixyCXGa%wMQ?B^8VW|@7|cm^^{lIlyn zEM55csIWBP++)kei?Dlbufn@hV2EncfG&nY-w%_cMN<_(G&Ub4@78Nu?rI_;eAOlneI8hzTJniR~&UwWaD#nxch%9!J$ZDQJZy+CaQz?BjpdpGqmy2tGEjt1BL9Q zloIS49asIM=>@(l5>2<{>t6-Vy#}L1b8-SrLfg}LGqsXE{t2SB67Y|MYxfd7L~No( zqW~Ap6HC&I`wy)5GYLND?hRTI+bKg%rDNR5g1my3oD1Hm^aLk?mK+KX^}-;xrOp9Vedg zzUjE`0WumC*;4lC31-xqbn_??D}h^E&baI6pFE$96LpS#=XPwJZMt`FkA109RntEc zV?4nx6md}Ghit7Dpa(k| zA68`iacR0kUudJR%q$>6A6X%uMR8bUCm9=+il6LH7M`YS*a>%wjOWVcK5*+>TTm#z z#pyHD2ms=D7EZVdLUKMY$n5|<+^*z{)h{V?s%@`bJ`xh9vdj*tv zR`woJe?+MUH{?0Gb*`vhfI6jdsjV^A(w7 z{0v9g!CvsE8#k0s7-6#xFSy*k#Tp%Zf69yLMKhL$a*I`afzn5j)cnXq){uR?PomnRAFf70@JcXjfaEtEm z;3r~oqV#bKm@*SfNq^chf2$&5%5TasLQS|-L#6C2GE&fw192$H^%M66)W+0q=zZoy zViA+U)lqk_RgGQOKJ!-il3*6$A}!%YZ@KRI zjmt&!N(xw}x9nKObc8Wl{QSw!RWg_YWoRgwDgo{FZHL_<*B!#zZhw8_Z04qJoVFyd z;RX$x2wr1Zeq64FbXm#f_xBBs0HQ&yF&4T{s!-YeGeNk=Z?=S*2R|wx)Z%;Eq+DNv ziN;U!R;vt0>xc#|s^A>W3PNN?wFq7bCDo7WNHfR4`{L7_ug7?C& zn#Ao@B`;}mPdA7*BtPY@cR=XboZQ;d*|no^ktB8~PYXJN5@=d4@Z9KIYT5uLtSO|P zyE-`IEnE@)4um7Yqu_>9HbziZF1#g=QjSWwS025epYKwX;NGO*JHt*%Wd3C)HutPt z&?F$v7BiRa5+0;UMJORDQWQ?nbg*nL#UTm8f&RhAXs%=W{&C3;cw@wO2FUV6{P&IW?>8Cw8YBs3S;j-7~ zQkkjC%R0zt1mG9D!9<$*jCgWu`ClS7`-bUbV4k0lTI_Er&3fJ>4d#JiXzbDi-)A!=^y6& zm=pl|d-N6Z6GpK38}V~p&-Ba7z*U#O z-?QFFtYnLXDOMaAg9xi)26!+n z336qY{p@y0@0C|>vNTUzP+3B8kU&VpG6YCaqB?yQRuafam*fBzf;5GPWno3r7GN6% zLdLLz8-Y*n?~-&EEGL>j$gU4GJ_ijo`k>O^f8JI+QMD(OCUWoOKjchQl#WV%gd>Vj z@i_UWT)DKW;+SKWHFuMP{Q$3S^pd{R>wvOg7|O8lmSwy6f1{$zE`WicC76&LqDj|W z6M-uHYu{Tg$bP4F@vywGenl1ui^t+6t&B2yN1-AIq282JDb7S6Jz-P*0b!7x!a+#l z2|(UOL{b)I$z{%nd&jdr!#&}(X$0x}70ZiV!j1GtRRz8I?5nis3W15R^~wB6z+D+( z!X#C#G!Ias5rGf0X>>xg02Q&QsrVP$#zVgkq$nB&@IpLjXRzO)oN6zq?2gJU>G-T z!X^cTfxxRVUHdAIu)K|a);1g1Jc*oStd5zH^zeu^Lgw9H5@M=MgD&Q#yWf>{VC#+o z&A#Oz(tDa`OP@pSE_KOF39;++zxO-oJdK~mx!lG;innEbgEJYE{K%U>NRP+gBW680 zONd1RmY63#XH)1Y2kzuVt7ph@LRpZD zJY=>)DrRLVj{%>G&hfFCVKV>DQV@ND!codKBge-PcaE*0R%WZk>Hn=3Zatba-FO zdngwfsOw5h8d5G?m!7ms)PSdS$=a<8e?gkmcWpHxxeP`M_4pK-?=9P`&^d@=V7-W0 zj<=->>(iNgw49%}$?qeTJyWDHveA`a#rrTK1!}`w6AgS$y@<|%WF(%D`4raPTXFa} z0})_<&CaBe8+yuSOYR;%Z6T8cL@42j%Py)xR)`riYf&l;{2KA$rP1cTXN}ul(~ccY zWr^aGu6@g&i1{aRBLRg;NuO9zKw%?GiosmwMuNzWrdn!sLBaFfq9psZ;nh7o@-fOX zybDVcr7EY!{p(G%PCz5quv0%H-Z#w)$CDZx_^tSe;N)mEb8o}R&2W_>$z_Np4Sl@> zQaElmc`uqp9>rs3Eeo)9S<41RE@67r{#s}Nwx1tvu7HaKHtEWY^yk+!-O+p-Bbej! zi3Fg5Di6P|Wl_$L9XUvy8C<99c1 zbBRvOa10B1%HI@BDuPN7M$-oyssGc~+VP4{D#@qaQ|=yLtLq%5J{O)2?HVHV`NbSa_ zU(pG~FSS+?2&(88k)^4kd-L3=+b}qfbNS8aOMMw4bb8W)fp~jos}5fUGDfed@Ew)Y zTp_oDdRjb-=jPtoPnxyNN7DGT3S1PrYj7dSfN|p&5B(tOiqNcATG$cNLb1nXE0fS8 z$rQHpSY;Y=os*~CzT0{adMD?tU?L4MX@oV>RG5q#FC%)Hn0SNT-EyH0mfS-HwEEH& zaE%LO)X2M3_{&0-I(ON+1v+46ZoY_$SJ+)UFw@DQhHI|9XM=^7ksf^h2LUmQG->c< zX0c)=y$Oa1eoS}M;;6_zKAGcxa#MC>2Hc&u5dp0p;WH(YK)mv2()rfn9}gkg zNK0w_zz@>BD*lP;A}V^Z>xvq;afq(y#2v#j_d5c-Bf@I8F0~}XH-nuhrOV=(t_C>r z{7!NhZ|YY_0_$87g?A3OR4;~`Z(-UQ@_-UUq|#Gg(m2aAV3)t(hXUPzH<>!>SKH+B zq_XqR{vgjk3Qd=JG*vpKl5m|C*_N3;#clHHm1Vyh>n|?V|PY% zC&+6o^~$MXc?xyk66GkO@m7j`xuN2iGmT;|w3rrF(^;FLx<|vszxzRy zS2$ZFNm7KwJ{F=hDm`^`ySsHLej5V0X_oRsT)q@vcmTn?j^0=!+k*s87bX6zq`1S> z%xXVMN@NSm_|XG6K*rQD1i1Ajt%Hp+%x2$UVhI)Jkr{HRq!A@K{I~5AfH@n(i&s?M z`AYV=TRJo8odh!zd{@xekE5`@VcuY6^O#&a?`{{l&CM`ewOu3zjS3Z9vI)#}^P~nc z0aC~RfGr~>(a1x@N`yKwF!y4;|I$8ng&$rT{DdCFMhGrFB>XU{yo8nSu47XvJTymK z_tkIcks;`kPD{4)NkGaZ5P6q=k?$BLdlsD)Ezkl>uAwaEiF)=U7Q|Xa7zRc$dzqyS zkHg4VK5M>CQtyd2A&f!23`_Br6wloKLYF@ntCc?Fp%k)l;J|HU(AT7U7~ZgztjI{l zk_FjCuEZP}TiJv2k!R;K1DL^OR7*>9oh6l_t<+vteM0y1bh&If_*ClR=gUjVbHAs@ zU*ySrq9^sz^etj~&(O{Z3`|d|wt~N?nS=nI9TvaBTJVb!RUW}CFht?>*mhB+<$0w7nRz^D0nJK zkLgUgLfRVUF6jZKkN|V~Ns|J_e+v}uf3{yzFo z+k~8K4;4lNeUYDZ!7w>82+hnnk2atG2m@u3e^!t+mzi2pu%QIfuM`k3{$rHy*vK@E z`cGauGyCEUPNY$M9!AQjv!Gkq&%~2C`Zyc8@8p^yUBOHaHJ2;VsM?D%TrMizptB-YnizZ@ zhL-eVTuXdESLpu^XRd@$ENn>D-T)E^L;53oF`Ei)@PIq~g6_x?F?rx0IZ7bm;pHE&EjS`$k);!;c-?k;2C0v+tX5Wnl zf&v4MV`*W`USuJ6sejTw4gLzLB;tK?ik@7V=4F!jk$iVHo2Rk9nu|<*f=<9!+KPJO ziC!T6E}4AYU15V^+92Q(Nf+w;WE{sr*IMT4`4TsBvST*@#*BGE#Khp;kr#pst9j-E zl?(96C~gK!abhigH^{mBCb*GG0f0_AkA`aCa=D*FNTluq*z3z}bF0%g7s;Hf|yWoz79& zHbkOAS?Q<}e0Svtm=VWbWE*g(;onFt1l>={?c4P$tTX=J;q^1ypJP|C4zly(mTccD zpYCmJ2cog+cY#vNHHHSE>YJ$ocSC-#XX@yv)K#KDS*Jjat2rpM#NYuglr{}E!gD+q zpUM40X(zJdE$PU(LQ|BV^fr{+P}?4D`2wn4C#$r^esI|UIInF%N=@WP>au=B4^)No zEX4TaxTYK=g-z>!e4U&FJxFnCd(u80580rf(5Rn77!KW{PD2cN?iHUvgI*sQ3^(=j}+ zz0pV?3DLgMjjcN;;&3-coAOwzL@AqJ81SVX1>YLj4QkL1zV7uScDqQRnS+wa<_val>^csSEdiL!!90BO6@&HF;Onk8Kz?rR44ExZPvxbFXyBK zxEOagD*Jb`45UgURe!jGZcJD6Bkek$`%&Z5fW~d8gPqYMp{KT96+YG|ZpO$isQnkp zWQ}dijaW-lACd$w=Eky`sLd3s*b3k$k&=%pP1_xnVNvvH; z0Oesa*xs63>N)Z!>ApnZc~_KY()xs5-yhV+R5}@k1Sz3*!|W(BdcH^;K1OCPa1HE> z;xJziyNOG!l9g(K z^O(s}9OLEB^Ap6a{jIL{_f09HRv17i;Q_27lG)tYkYM9v(|s}RXu|`o6rlYX0@ILD zChuxCl}?pK{jgS)`nq%RWp?yiN&wD(k+llynZyYa;B#lA(kg| zRUIQ7o3`79eGh#Qf}!$ycyHC8;Z}B}xlHLiN`;1Kqk313So~|=k|&nt8W>^XTqA_~ zHG(9pgr4rk=xZN|ryRxE@rBv5%rv$JP`=Y?zOc3T?C#^|zvbL0!znAKYPpzlsvFXz)mKYrl-dL&(-^YwsoKT|Ig8pEGw$&dB$I3 zjPchPV~jDz7$b}@LI@#*5C?G(LI@#*5JCuHj4>gUQ2gudFYE2?x8L5b%X)izdwaVs zOS`V?&AK#Avn)3^x9hSl&C;|>vn=b<+}te9k~GU)*LBYK^&BU&64>o+6P?d_&gb)d zp1<$sc_Pe&H!-6kn%mzZ#_%^kW;akCc|3kxsF{X_vC53|Tva+yzV4uvDsJ#zXXiua zs66@@W`AOz_#OHg1m&@zb)p}>?kJZU#1JjU71zG_503HlH5oEt zAYeE$4h~^_aUWlCVtgGn?J1P$u(d7M3SjIJ{g@?}5SpuDis!V<-tsxS`BB+UB5xw# z*v4XY9Z%X$Oy?rHhA}Pq>CY6=$PIE~+fWoHVOCv*a|~??;jgyR!}LUn(tUxu>0Or{ zYh*peJwRRhrSBoAQl*Q%dDZHgQx#qsIh%fq1N39Zfc{ zQ0iBJ$lYW50VawDx2Ow}{AW~H8&#S)GWr*GLsY3DG1{#9z68JmNUO-OKYwuw@<-Bj zsM=UK%1q729EZ+1(vPB|s7H926zJyh)GW6I=^skuy(%OLR?-EzlIp`6ARhTZSXvFV z(i)M*L%Z<#dP{KO%mlZ(048CJ#J#euhpPc+<3H9uLyCHybhab3rkS!;<>zITE#%cL zJ98eELOOx-mdB7#PW7a7c@D#7Y*bx)4ZL}sqfQNfOr3Sm&30!oIi~|Twdhyp^LCzi z|DtpCgmbbK~6MIPv1B%<7nxdl+oe-W+Rd5#_CQtdTA5%B@^ zO%x$asQaVMSXZ=FHrX>IwT6MQM%IpS2*nZ(%-mIZVDzzb&WOl>_Ib!dpX%SGsx{v% z8}ShUL8JK^GL{mM%)=jk&#u4@{X7ez^7=v;@BjFR6XD`;Tf|^2XPl#ccS4q@v?b#mjWYP_GXzqfN)li01T<6I% z(8CV*bRo{0^J^NF&9YTdRv74l>s~#5jo7Kqzby{pRHQ`v)MRjy>9fyrdkB_=I4OUs zuC!c|2LT<#X7YIsr%@qPNocLA&VpekMZ41R#baP`Bff>{vf5 z0`yFxi1Ub5a*1M~ip2Q9Axe5c@|bi?Kpy);!y~awJ_r1N+wSLIcA~O){QRy_FbIP! zp8hlTMKw8)&IynnY>UE*^n%@zNmozgp(;dyE$)$7D`sJa_t1iW5Tk*4rQ2>^TX$#>0ETBOv4qMZ`$zj9U!U_t#<|7EV8|2x>!zZG zT87cyA{Q|`;UgG6M8Se*B99a_mI^2YLdWa&Cdx)tbEJ0K+|2Ne5V+W#pUJ5(cm|2LN^uzMSG9um^ z0)K^kA^sA~m7poYUF2_gm4exvy`)e6!nVphj4_nV0`KY~3LANmi3Ku4EQ1JAty0i4 znO0aBspk>Q=e{NxK(?xypNBY9nA-hY#J$W#t8>2;eE@WaxSZozyTP|hDK#!I2Gjm1V;Jwc3i}Di?oggtSg-qU6J1>i`o*%K9fFQEsMSz_oJ{H}r0loG}!Q~R_TIR3tD)7m`>9E{cUH8h-NzKC|f*Y+nyjb1OCMD79fSVC^%u_ljk52P z8%)>AIABJtfKow)+9X0G{6mxsPZF#7CE3+-ljG@v4$4D_!+rex6^fu78Z{t%s>OW% zloP2BCp-qpzoocmI!M}2E@on zyr#V4@bqnq7(sIZViJ7PyjFkwf_xOCttCxbljfys&KF25;3>V+%iq_u8Zy`o4P_J~ zkRgT;-+Zr8@8Phu@dBEsSh@S=e{-!~q5P$T1bx0h1p%RSL>p~J2YX%Hk)au*fic{ZqMM^x@OI@(kX{N^)5mbCA$?2tZsW~ z&zHb*owLDyb2c?D)vyndJxK)lB1A!m71o5r{`!rwUW6i}fSTLgi_q!#MXxR{9m}zi|doLZDt`#_E zqlhgp@iw{$Sj!As%zX*ckC}Ef;8elxyB1t9pbtc;jG~DEVRuuls1;C6w2$ejeUqe;hc1K z9evy*9B~h1>m=9f&awT}Zesr z?;Gb&aaX94ysO)cIx)NedZR!MRbkfmITnx68s>VBV(BI@tU#n{e-b~@S*5a2-&oPkKQq4yIHz5`arL*ZM+K9+mSu1?;=S~fB(*__h5(7 zO`z(_mZQT7kQ)BlyQpK{UQY7%6mKuUPRH+dT(8G&PbDmv2 z#+x0YDW(LA;3bR(c2wx*t#eKi@pXJwN)F+C$^Q7x>wk<@Q*FYghKbeTwx}wrEqent z!&YCptpzkn2tF^2T~SK>apiL-8m*p&w!9 z5iaTIWe&}xsIN8!E96kS+kHh9P9|w{X;*J)x~$2So&H&Z;Ju#@@Jd zByZz^HcJH*fgc&7Pk=cqh#1ZvE#a>f6KcxQ+tRS+SzhRM6~I;cX05+%huUQ}?$x-+Ha zl=+ddoi1IgP7~2TIs|LN4)1dux=mNak2&N!AWt26;m+w$8~3EMaTclvv06)No@&ZE zh^JG-NZ`au!ytP3cW&v~3a6xIBqHCe6$Bb=f1_GZ`JL|vE$Xrj#Dnn*(8l=}gbgmSSLmnuKn~EVi zyn?hU-KC5;-eH7N@WisiE;WZ_*_!!ppw0`~T%29a<;iVyX0KJTvR+1Wh-WIj9RY-O zDHE8#rUuRlaCv-7;p+s!Am=@2_p@tjtLz>k>1%4O0g}}`PJ{DO$r{n+^T*C%)Hi&Em(Otz+eix0!!!A7y?xr@% zLaQ4|moVB`QXDh6$BeU^KQY(q+YF2b3_gkxxy) z`SdRLj^jdL5i4nie;h#un|aSa&qfpJ9*Il6c9*{6vh7u@cT=1vAr10U7|bENg?$BW zMGmom6>EalD9Feu@r)Fsf2D>Y881)>!cZ4&!t&5Es_1F08i;8{m2s4GtEb0#2u$v1 zH#$!GB|iElBzj904S%39at;wxA~LHq63=v@yECTaU`_b?<5aSh?<$?+^1$@@HRsrs zTMx-RBXdyVXjw(V(G(KB(N`Zvyp9!0gd;s5nkB>fI2Qit6j1FP+9_rvY0A@aS{q;P zHt|IkX@Y|Dn7Tj_Gh;339%{I*>g<)5c;zW~Q z$2>D`OY zAvYcR5UWA|%}=>tAetQ*$;9K)B#tMyMU3q&(*78o1b(6M=K7WA+*(`7#HoBt5A4@3 zuGVJJJsA|Adv~!agN&{{oL+H`n1`veqHHfW0Q{F4s^k`#fSSm?x#QR8=*O#I8z%K- zn=X-|a+OW&i8M8guLW(eD0^sq9rNY+@Q5Dv^O#ql_z_8C^Hj1chSZBREx!Pw$wwxI z9~*I>QYbY9UP_Oc!pH6QhO>A=<35H}!6}L+>q~d3`VUbknpKCMu_k()UUt|I;@1hb zo`vEBx*@n-tzqrbVb<*W1f>?4SPC|@Zoq!720lVQG1ROKE9=T-IIl9#?!*$&XyT_T z%V!GH1aTvMdY}`)A--t?USQW7nKq^E~ z)7^Eb(TH=j7WznhOux#OMvozfj1hVIUNJ&>5=ru7z4_-*lB(07Eo=G zBlvGNbLGnOe`na1X>0%wLu;!&W?#SvC9z zY+POH1jWxMgu76WXP~T}y~g(kVvd|!K+f&%!>dS?A?;I#Fy$y|tT0eK>#8zOx8n7o zZ81C7w+PsW0D%z+{qx@lGpk@jxVG<+l2OylNjeB#&I5VV;Zx$oXQ*Gq?fzVJT5h$H zpY0ZULt>}X)E|>|zEvDJ%6`s48RG4lQs`Yv;mB#n%ZEwt_6Bjw!A(&HTc+^1OvtRH$&K7_lmIf@A>=abQ$m zt;B>uDzH=F-(>Csw-~65Q-pijO#GJPTB0==opwJ#g%WkSjtTC2%z2MsGt{l$V%O#& z4&FNee@$bG4lw5-9@OgWD4{_9&{C#@A0w%HwfyuJg$b%`YHBH<+Ap5u(v#^z*Jx%* ztsZ%!2kBd}lb>^`kk@%=nD-E9!J~dLQT)J3wWGk|Pq7 zNqnTI9TM_RB7jjgB1y`#iPf`vMV zn?%IHcpY-!`09&uivar*HZf)+QHApg8G=>_vO)iExxLrXO~{D8vubDO^GaUe*kZT5 zewsnoOwBOH>X!iW@R82OKCU{=_k1bZ@1**#=(Yur7+`|8k_U$cnOp!2>Awop>P_cF z6wDzd)m+Y0sm@2@Kz5ALLfCNt>UjD~aGlOF@z|+F?rcA37T%(RyOP&fDwmIcBA%h> z&g&Z8><0kglqG;^`tp-c=e3>Lwo~q`@xJY)d4PiEglWzENxsX?a&^t!lm=93>trmU_JsbB3KDJM8Vw@bGQV;^ksV8BAd9~Cp2<`T zrW+o)0bG@thdC|3{Fv;`HRsA#(mkz5dx8&qYRs~j=_(`_o)xp=4n5r3sh^3_72}{7 z%Ffyw#I-%X3TS_sf|k7-T4$h@Ck6a-&rD?uDwk3ScfO0C7c_|49Dz&?cwy&4h~|;F zhcCeM+Le!1yU#(%`s1dvaRf*V25kTTpg4G^G4#kQ#BmYJXx}Z04snq{-1(hbH@9Ph zVKFK2j$8q!&P&i<<$Z1i-Nyb~2!GBe--l|ze$t4Hm~2!9oHkOxuIRY1sVodETI?6Q z0ke3XaeQ?59Ew)#8gyRKT095rQD-maymLS+T-3{=GTfLUU?Y~1A)F4PM)G*-dgb!O z8@9-O2SDmQa zipVMu7U`#A0Q1Rg0o#ILJ>|v?Zk(~O0{kUdYEsN%EW1T7`!Q&p^^*lhg!(1JpCm9; zvA9rD@Mnt&&?Xry6`5x{@~>bUVDeG2(@wKt=Q)6Wh0dx=9m(bEG^*0+_8l9SwCv~^ zws1S2A0^AkEnl#s0miV_3q(VG63>tq_?`F$B2BAm@1fX&?V^#xH>LWjB+A`cNyzVKd4p!FoPq9 z;N3v3hRRLMzAN59Egr|mLV5Q#>N=Dym4U};7d8WPM0@6HS}?b5@=03gJq*jft7u+2 zL>bOebm4wFa?Pr2H?Q2-)z7^yFOIP_HB6@tjh+!wrzXjtN1x<~4550@pRos$odrlD_km}RXau=TBBq>Q&PRHO=Y#5Cw#Jzh2Qyk^IVTd%D)MJ=UFqYH37Nlvd6P|# zv=_7-5*MM1S#C`3;Ewf<-o)5{VD804zq5YJaZbhT`5$u8Z>tNZIcy}VcQ!>A1O!!s zY8E~N_v)fUEhVHOi0ah+b{uq$aYKO!o4Xxn2lsz6Mo39h9NJgR-^fm`Dz`+E^(wQ_ ze#{waO#7}_ho~XG-o^^Y7%;*Ue+4AC$%mRrPJvWY}fQ+NvChw zbk;>ooVmT`M@X~~lnuf(=^UY^&gU*|tnXo=*NCFdzClLYtQSC00$Sl^SfycFWS}@v zWlO$2ZS=e&o`FRwgH;Mi^d@%MgBRA;;qeO_YaiEwqsfQ(yFo%)1NAvbGWtg$q*S~r zMk~s{&5$YQ8eHLSu_=gz78K=XcG9kFfKfth-NBo;5Je*Zj6>X4iVudQucC$SAbo~) zSX8E=5kI3GYbWb%P6Tm-?PNw#Psk?3zGrB`%&EmHYL!jp3K_n08>c4I@o zhome6tX`@a)|| z%tRPfLtD!_r^91sd*N=5E?C|jC@+}K`W5HK3dYO43U-nuo!U0izrdW&H3>|EU(PY0 zSUZd3Wqz&mE+%Qer!EUs6z_8K?Lelt#VnPhJgC|AkWOW?T63l>XyOm2ar7~YEM4D3 zsMPcX5`7*F8Bmw z>ej9w1j|S8xPq%&S_EtD3R>#j3+Z0Gl%%Hid{lPy*T!hE6`V}>WMc5N5M)vi79*WJ zu~`fpPfu(ox~a>qBK#gdb8chxGT)I-b=}fWh;S9(T|bdTo+LQLvy@nJH4O*A`GZL< z@SGPJS6H=0K*A3cc7e`ebmdl^uYLPG0~TR74HGk0E;VVzC&&X=?3s2H5FZlLMDkbi zAR4%qnB-_(r1l6;X4x%#V<;qN&lC|Wo|H5j(tnb_WBu_s^`GW!GET7C7$TMHn2uf+ z^cv}3Iw6u;zhuirlL*pqA~tsm8Bdf;N7Z>p1>v+*ML2-qxzU<-^Bnl`_bZ#1g7 z5mqs+QyvsZi=8Dih<+=|htXlbgAbq0WsCQIh)**`IX>bf3K(!k2;RAgWk%jX{76J#7Lj4x;qh7S+ByaJO$e<=nHjBlN{x&d0q`!K z=(P1~@%PwZ76$U%v@OPZTeRB4P9efOE1TjzGIRm^PQStQmn%p+ojB;{ZfZsO+;7+# zDRPJCAm-)c5?Tp1&DZc5Mv&|;q*ou7k%O2Wq#tK-JVz)p?Qz4lKr20@pjMv~UpCvXXBNrGsY z?gBBDZFGT#qtf*Ao#G?7h{D3&(R4aCuW7*wS!Eptpnil8%gO95Ecm{_UZCsBKid~x}c;rd45@w^BCs5+Y{2g+f_c0EIppG$A+PvdN5?9oy=LKO% z|0s}vo_I3P7#Zw@Y@ytaEPtCoIIUPUWse;)i?T$KvJEmz57+T|Ml;4^zd{b`8qsPG z$DqmQ30T6NQVZxCfgGXAB{)!HBlbW13=#&=Uk5}_@nfaizyD(8$do)$Bmy%$XO1kw zgp;HZCNoO|ND-Q0G}+!_wK4&8I&EbIF-TM*R~p6~7#TGoJVwRQ1ZB@#yMIVJMx=M4 zG|zBN-Fo&ch-4ZAir**J+;NCRNCAY$UFjvfZ$)OYGs1*$_RE9oD?EM=sAvMWQ61b-$HjI!4tSiQvNOR8=` z)=_C%E|kaSKwn508PS4ue2J7b83jv1T$5ZLh7lc>h0t8bghYo#`+G>?V`O}xY?KM; z(5VWgTkiUWm?5dnx7W!X;yY1M^Hc0ah)f<4T`eOr2Fgku*)o~H(i~2vRY@z(EpO-M zxt{5-bsR|EqAdr(2$*o1NeyNyHjkjZCV^Ys&66gU7o}<}nIhAD4eO8Fvw<%+z(OH%Yo=ALV2*SU*_&=A#>kxt zO?^5l4EF#v1^=i&+ReUh@!UIHM2^11)DU}+FsD$2O3Bz zXbiq_A1yiJEk5#6Xj`;}352^>hiYT=aJ-&Wq3Z6?7@wz-sXsHM5zZUv<&i`WV(*ES zqch>ZkXmDpkZk43=oKh4E@BS&oHy1kh4Ytz-eGo@i;BYgn(%sUP7vN(o9A(R9)HjB~vE;)=Y+ zF?teNjAnt?nYwuM^wp5sPa6AN!*J>4j5yQL6UcuXYn}|eRftM2SWvV_(GKLH<(|{~ z8E104fH*NDunc8p+HaXHKFpvMC-Wn?a2VHMs#N|68%|B2ZFb~MUSJg(yVT zrXXG#wpRkTutiitge#W85F2P`q^5~5u<>hs(-b4p08a=8IMZ}A#*YDmn+Gm*e~@lEA5D$iDG zQ`z@jbWH5uv0Yka6+cFvAvnI?*%k$<*X5gI!?$Q^w&uh{_~#=W-7drwwyl1*VUH`# zf!NLM2Z+mE6=}0YiORuws6P(>}u)QE;_Lt(1m$b9>Y|rU7GTy;M%4IXiQ_@jcS~GaN z7xNlHGI!K3tYWZQh8>3rVr2F&5LMTOKIcj2_=~kwB0Fo3aAV~Zk?)n&n~Ek1@G(nV zQ*2GF16ny~`NWe-fzj0m{6Cn*uh`lI-cFE>`{wNj=U|`a+Goj{dtPwB7?>pnQNF35 z@a&W#u2R<}NCoGUfhReyaNr7KDv$%cjy!X4aKU*arZ(4~!BF^aZajY3$s^>P4Vsei z>Sknj+e-=U_06C}uuQub3o!OHuQVnv;0pK0ck)8|x02O_MN8M@f1i7X?;y<2|9b5= z<%Sb@$Z=xP?K13K=9P97IT>EZf$Iz$Ut8a8QL6uu$jx7=KSW>W_7}g6c~+iA(qwV$ zNbxB+z!;hODKQj^Z{Vn|X@q@u0pYTZMi{E4KOL8yx1DdUzZ~y#*3M~gOD-s; ziE6`jyPO`(>B&=FqLIO)oUOBQ{!KaCJd2j59qO;FKCVjDPJGA}Uz3Lp? zyY~ZjOB*Vd`oG(@=Wk(l!LOk~WVQC15bb{yev6|az``12551HC*lFs)cdmc>LeK7Z zIUYC+);+4t-d=Zh@CS4`=Isb;wi~k!?^w=w**Ut2)OIVLh=)umvBva3Wp1^c;w zT$XYvLDO2JK)~Ilp$KKT9v(?liJfVqC#hT)AJXNj!ypvT>q|V<(E{fR_ z{AG9ak;XBNMWnIm+;C2ymO_*U6o|gi;A%x3HAj;Xm3Rv80+LRh|8(~i=~%>T+jFiT zEP!+KN*7$0ue(Iq_Y#GyE2(>^v6}eD7}p8e!65{pf&v~d!|ThTpAiN?$CVH+lX*`z zU;98j*;yaEfo~`w6f|<$Sl_WJ-~D!>CU!M7K|~zeH&w|FrYgd8ExgEi>gtZl)1||X z^V}rzAbtvVr%Ut0E@`oL(%u$tQfY!V%1o@rX)#8_M529Y+IT%5fhgiN)d46d8CBJV zvoe6oStjC2FTQn7ah0pBuv; zLml2b@)tsC!f>K3=?y(qJEyokRlKC7$4rHE1OU`#MfC<<*6k<1KiD1|-mP@PhRNL9SDH<10Y@H`qo8`6y zOzc>^WAWj7FKWzSnhY&p;Cy;cJdrZ7C~tA7d*=YBNw%<)VPI)#QQfj8-|P+7NB9b1 z6gX9HIUJrOj6d3k(25-@|OmS|w_8EFs$@;`mU*|m1fiGQWePyciGQpSZg z=EHnPGpFD!O1+H1D)H;I4&O9}h&CdT53D&5hEIURPeK$y5!z4HN=eA}`xu*5N@$wf z7fv>ck-%;2GNC0Cs2bXWD`xw z0PHy6k>F6OmLAfoRRD(=ufB;9(rde1;$9{>5~V!=Gc-==UGwMkpO5G`DoFzk@1=Qo zZ7P+Ewv+d!7@28qe#s`e`mu6kH@>_{*~U2VZ0e}9Ed(;N@(SgKqVWAq^@}^1`M9y~ zG^0v5^)xkf&LC|>GNV0Yj2?`dWX-a2|K~O>xMVWEIR<)U~!yOOIw@Mm} z>_^^qI6KLI>X>e5r7^~XUGw!R?ymcpn5g$rT)>GjXA_nBN90^gbpwd)!Q|xG-3c*% zt7yk4WTkhG(U0c|SA}?s;b2i*;Jy%7NpUFZn)~Kis_dK7cn?x)aw!i?+ZW+4WJC!b zqyT@-xV(Zv6I#;H6#c|HHa?YG>o4`KYY1iPwuAs+aiJv%JT_}j>R^Gp`QG=CZNxWX zwF01Q?F!caG{k1qiNt3J)}$YikOmes`Qxo0dQ=OFH7kUB@2 zl3yga(bZu7cW2qZ95%+yyxDJS|jyDc4vc$Q($_{Fm znbCscHKV9U&)5LTZ=;@UCv6`_9UC?E5wG-g4={$p^eq%-ky3P6)Mg_cc6NI&T_Hcy zAN1^eodX~K^w(T7nq?dIAm!6K>K6r-h~)naJ7E7^x+3xzLBqjA7#d^;dSEwdV+af~ z-l6^FKNfR_*8U%HF@3FExz?K{gcm1{r#oYqRH1f)IoDL|WEUse&?#aaS0%Uvv(qm= zmRksi%i(ESHF~Tf31+&L;itBW>&RnmgNPVDxz4n3&-$m%uQXE0HlHJx2W+gLi)r#6 zV1+W+P7{740wSooykn%4rGqZ1Lz(?d0`tvD>8fiwlwKFvnosN1@uVEjnX`|7EZ-QR zSTdgjaG0Wzh~iDu&;sM;n=Ntfi8U%jc-N6HpvqhZ=0Iocea>ZqMS<=p*CS14rpOO_ z{s@7_w5C0MAuhq}zqc`xqC0842KY%&2%wKSnqI)n3HW-(quKm&Hq}QSthokd-iP7P zmsn+vGcvlz$)*j84gsKntOVzA-U>IQhgm#yGun<~qp(I3W_Do)PC2`F=BCow>o|v@ zv$8V$(n)zB)+pOmzfBE+RSLRojQKvv-Af<{6Xk|nja?&7(M9~(YRw}-qS}lW6Qgb?pzuR906#2+zmrO``oUIlNcpc*)ZY6E7fArDRUZ~9b~d**ir zesa$?F-EGPz$%~v#uR3&zlwx~$7q+Tk);AH8(>F^x(#+|E(ac%>%xuh2xj^inW#QQ z-~Y%1p-M5x$R#B5+S=2kw~(%I7+ z$DAft2iTC6`ZY~&K~7;3OC?<%I7#huo=Ofi=FaXM_$z!VnZL?|y-}2yYy7D{39|W{ z!y}TG5`UPB*r&n?Yo7DuZgF1ei2lpa~@e@Oi^xQlucls6q$l2 zAx}D=Nb_x^39UZl622TA))F{_kyc^ix_lxJhUw`@tSOyItM^ErL!mO&QYMi=jg1z| zL5Vf3azLj)d3@!>CK28!Y&~$devXupqs_}aGv6nI-tQ9cc%s+lrwK0kITIuG&S4Z5Wq>*Y?@S(gaNwAE$8J}#kj$QiY_I$NidDX| z33^$#HsQeo&c>BK4sZj!hU8nHaltf6u_WJ_88@U;`QUXH_vkAm@+r z;9xkNC`vS%LCi333L3`BG(sf$ZRe+EQ4n<8$M&WNa&`0Vj%{Q|+TOklm||u8@oNmz zAbNJ=Gm2Kc6Db+QD`jeHwt5_;c>^*ez+yx#jq(T)w~?j7#6f-|a2`>dJ*eGNbWKQ4jt>8S3{}diL#Xntdr=7YJI^^ zG#dbL4|04$(#|L;VxDXxhMh?mL~pf26X?2Miqu+|b$9d4LZ82YIcZVm`3JtCoVWDF zh-zB{Gr@y*uEgu|jr@DubbUW}-I4T>7e52m<^}gyOc7hF+Vl_a!phC4sL@X=`kg3zT#c_KryR9&iBRGPnX$C)#--{7#+@%8Fi$j>P z58WZ;-^JL&u=5ASddXQk{iw70&?B#jy!jdMmk$3-eyP8xr9p1X0KkieRVG`I&xVGV zstoq|1!fE#8H}!$)>wObTi6f}RD2B!{T7Z8A;qH%gk*^gwTj|qZn*s;R*n18b3!mu zy88CJ=knkHC456^+b2C-Qrq{lJLJ6~4?IbX#+Db?oj#d7g?Tiv_8H>y8&MP;%NC?q ztYVVa3fNT91$GKE$~P<9=?Tug>Q|YM^|V8Kz(=_}3ph=GMV3mWK8<~es8iJiw!<0n zBol*p%attn1ape`52y(>bVrWM@5sS!5*irQ3&j7X)ETh@cM1J5j{Rb(A4X6O&;KSrN4I5%i*78v-NdOe@W>Yi}i7QEUf7cZv9l znXg?VLyQt0&VmC1$JNYd)-bs93s>1+K4K(}@9#ps`ChZPX-^*2a}G3>q))^@2_=aU zGNRerwnrwr?p}zOQI{t+oag_jIz$!uBmgrXQK+0{o>U2)2NY!z{_H|aorQpjQj-p* zLQBrdm{2|tJ@s@XJMM=J5(M5*G#dsx?FG4)H{XE*rzAaZLBd&V5$>0%T&4rs5)_(l zYN?kvFjs@c*#!zUj4UTizm&LCKZF2HcYDW}VL*t2nq^KV3)VmqA^LElPLuS`O1^n+ zg-(Do**K*Srd2Cj2f2LaWIh+$e6^BFnnX_6oEVOzoqX~#G=0QcaTHM zW`kHN&`C^`&2L?S&wLGMmz3++mH;jmiCg=r@&v9iLlyxOF-CwVT*;9S@;I$izZ1_; zYKapa3>P*VnGntN!R-qToDb10O$rWq==^u&9ZS)N$I zPrPl6Xs;2zrgcURfs|ltQtIel&TzZK}F!yov1$LKGP;2vj^qrcz zd!{Q$L-RHArMQrfInMc*mSyMJ-0Z|LMb-q1^sJN==F}kW0Ah4f=o_CNR){!c3FR$@EmvPSB z#yL_jji(XQkkgbmCV$uD~;jRLpX7I`vJRkdn)XBt9uJ#m%s*v0=xLb}2O{@_iP_iV3CoELBk zh1_q&*iJIppO5xa16&w%=-rKKtWeb;Q%`b781)L8zJ2Nc56^|WShY$SEGc^9kzOI2 zO7cD7ysXPh4_C`Sw*ws(BTmtUF%&H4B7U)m^|ZEKL~ zSGV%sWz6B?B4`magArrmc~Xkt%Oq!+cnYgpX_WXWjG-HJzYg|lG>pvx z<{moFlCVJ{N&SHyI0&isHNS^^)X}1h?u1!W>}Dby_{v?Bd1A1BPuEdxs7;@cjtn~p zcwHy9nUU@chNsD#wQBovFJWo{=?r1BVbkvX!d=KW(dr&gE}bR#b(8_P#&rBP@O8$o zrzg+RHCG7mc}r!xF!i&x{rf(Dj&LRCs;<|xu0*?m%urXWMAt^3Xu1^B4t45!eC88f zhhlDXqLk0IFY~Vw%nrrNt+0$}nb4nEhB!6^lYXTmKtufKMoZ= zT%#sw+@)-6;tG!wQJx#N@Hx!!|AZG9PnQhp;{=50*hMRa!}ol}wuZ^>^$MkgjNEz( zugC=iB^X-FkM)(~mc>)~ z_NQK!4vs#BH~`1(BSm_RXFuaYsK3;}`X12!cI=iypF_=iA2nyu$Dg_nbc~cEt#XAX z7b`+Cu~h8;dE0k=kBB>Wm|qjVp5--&`U9-}33grwwKQ{*Nc@1`ekFf$!tASZMo3t-Me_UUl;wBEXBQ!{^Nan7~PZ1yG+Ib!@%k}gy=--EjwRhKt zAgpEV2>*6hUHmIsicXDTDKTk;2+5mb^fLjACzIJ+gD3ma`XoO1T>8ETvG+SB*({Oq z>+%yZ7N-8dbG|_=zJgW*yIs|O!xe6S?nR-OdX*=;`HNJB!pwbmE^x1f#3iRv#p|Du z;UrC?r2AdojMesRPw(&fFC9U=MK=L#Rw5glHoA6lQF}o1bC^p#8~bpyG=Xm$=S3;d7uNfLK{DA5@f8d-=?sQ zZoFZ;*1pcairI7=OlFUjpyS_L;%Q}zOo|-S@)Vg#TED`}j45UXaLF&+k2ChGmF0wq z0qY+gHA0=C|une#<#{H3)bzICYyFuBCHZ+jzC+>dv_boqj^J8f)v-^`f8Fst1 zU*BVD*bPc{<`wLzIBXy1~tj+Al!Uyvij3fF?OhNH2(?YKVPKyo2>E$bWV0C>EYh*PiMS+8`3GZ*I%Vs!ac-rQxLe-Sh999eN!8$%dz@kHa;WEkIrabRbw zI8JQ*m^w9#vRNTk<9nL>u~B2K{MdbKnFlH(AeTrSdh5J68bG;_IJRv@LIN)>fT< zr0a^>HT5yfbqt0wW6igA?4MbuL@gnm5kY){bXT{cBdXYm`JumPWI)~aCh>;QVxEA6 z|CtR1C_C9dun4hpn%3sS_bo`5TwTyhZ=&KbAFI(I8f5tDB#?4tUDVgB0R)0fMp{9S z>k4amLsvw64Ht7v$-RfdM7DHUnQOG3qqTs8vhziY@kXU~i?3D>&L*2E(>RI8bgA`Q zx)gE4soH%D(KqF?o?fhsV~b%x%Nt)%7JWh5f8#@ChO+=H@j9&4L`s#Bhh0LxDNos)X2@SpZndyfkAs4k$Qg2bN#4djg*Tbm(f_@Np(6~ybbwvnNcD3$Z!UzW3ZyBQ>mp_ev1K0+%fp@%#JUHnt zgHNe*A&lqfVXkX<%Ee)ocXxN>pTv{O(Zul=3L6N1C>`;#Ws?oVB3;yMVv1Rt-bt7s z^*+!18r#Iqrte#TnF&{vm1z$%2li)lAz8(98u}8gM`J`^xtyi6%v(W-RqiaJ6$|$* zLRUO@5$nLWiRnd7A*D|jT-`*(Qq-tMV}U1?wDS&pFGrIU-j z3DQqB{cRr*bn$bv+U||^MxMmNIG7VTv-EcytEXI@darFebOn3M0dc`lvSsA}s}}U^jD$%${dj zqnum6A+x)nQs(b_d?HUq{=dW+X6htl^ReFIW+xBnKfzK*obihDM)oo2lm1_}y?QrP zelEwbmwwIj=0L1U;@p^-{eTSwFYPo52%dV3R~p^(_dS=<_Fpo4f`1wVh!3MeXD2yF zdq;-++;G0757qMbJp`FNWS@|uo6O32@{rT9wm}qY&#T{3SvP0b+MoI^61IfWJciR+ zaUUcTfGJVx{Xl%rUhown3%gWcRI_EKgKq8WZjPitgM|ir`QT%1J!8R68nJG zPotynt?nQE7RRaK_t>T-3+g3b-N|O2O5a5|uL0tVO z*=D4ERUrr#_x%bTKAe33;x?Y5rwdgJ^KYq$!I<0H&S%850GHp8|3J!}&mXh~blR1U~`g2^a%^e9rG*I`X`;aiWY5wdX>`U7;}9 zzQVV;-+b2KO`bPu1HWMbqYKSsk_^cGMz1WJV>EJaA=W&>JRS1d-`+U|=YlvdV+b4- z&v2eE|2Y)!JaVb_8@Rw%JA2}kx$_-;o~HZvJ|Ac@i&I0?RjdmZfMJyahAtK(X!7px zLbeRTib@Y4v5xbO3KLqzmqWj9BjdZ`jaEgfwBE>vZ*h`HPi@yq4@O$@+YOXAO`7IU zsY-mrMQP3*(uJ}hoDm{h-}9{amU2199&JK(;BTuzYV#B;`GRQdQXgy@&AJOc>@KwX z5T9js=X2%ubx>)9=*+xC0sI;kAx~JNzh+YleZ-Ytb{sC7aMuaxI_u6MxY-!1+`GyH zaf|4<(1br%F7(~fqnRtYYoJ$L9X;_O0YJffp{h&6>f{}{QB<^Vebjd)5MC$+WP3K! zLp|xwVWGYcm5#|QqpIPw%!jzX;-jhIQBBxht-Paa&=hoQjqiwmF~Ujn$A6K-*!v&y zPb2Iq=kkY|QgRXW7=Yo|9H(+n7bvtZ@Qi5q1`~hOeZKgi{ERDuX2!+*P$SBGf`kvK zKVlrvnT*n$0MipVe=IpWXu5tZCf+ULw(<j?(-s7wru z*K>%odsZm8!@6PZLgY*3=wd*+Qtle=>@;k?-uaJs1UZ(k&75p|7}+p|hd&1RfSxo2 zgpaD#!-WRIc^HO93zr7q!>m5e-wh*vwqCtkg5ga-t(~jquwk&<=GTOT429QXeZ)?B zbt0M8l8);Nh@aW^1)h;W)LxJQW*+qWbO4??Udw_Y_0!+Yib!&YE}>J2U`nG9`j{n< zT_e9~qv2`sXM_A1wxKRSx{@3Yky65PxynQA+DGyZY=gM#E)#-O8jS8(`wIUk9cifL zBUcGDNCvMu&DHF*D|t!O8I|xGjYo{Yh!hRnS)p3IcZJRrkDFuJCF(7Rw)EMp5H7EF zC@NN~ss3N<3fQ>HLKFb$R(j@gh@Y*!{6`7ohzzOK)}(rq=n$4!i%1TgJqa(S04}`) zFQ}WL8P(#zZ{1~3-^Kn@ZRKL?YgISP!baLHyVlS-$gi{dh3)o zgsBD%Ht?@2Xtstm&t{J(3}<^RGkQ>|Lb`8a8PD)-N5s?r(D;XKyYy|@7OWMEeL#uJ zsoWaNDC5|*A#Hi@VuYvmvy88oL#U90*XHFbD%G;>tNf#M&X+SX4)0KxjF?Ojw2Fe= zuF>m(s)W!_H1u>=-``n*>B(EC{(q$d%{n96A%$z|Q>YqS;HE`Kek@cB7A)c%#v)A* z_5D;)pT6hu&R&=K{ZTUQETF+S`b}xypt0jz#tRy^jKKVMZuZU!#hLaMp5zl?R7u$x zDx|@0{~>|LwXJp?Tl>|^&}QcCB28m_!RbY8+OsU^IeqrA-KxiCbcVc2 zpu0xVQ)1557ceM1(nD(wZ+-{Jg~QU>g()?0j^U#J!{&RbMbDC*p-v@!mSDDb)NyWY zd{-9)u4~8cT~J#_dN_?v(E;5Q+WHQP-&uW%z=9mt<$PRLa^vv#Ojef@3X0|0cllz| zXXmQztNk6DkioHRlwv(U761Dp&&K2ek#xez%KE591=-Lsd|&Ca78tj^?z03z$g&nV;;TY|n^V+B8KXC$0_QGs`~!Qis?S}8 zuv_{ZeY?n%0h0u?at>+XS(Bu0Iju`9Mzn7|`UJs4teE^)ByP+djE=a($6^o^a&cs2 z92t3zWLU=%JN4?d`18610*x%z))N1RBtQ-k*ZPXgn~vjNd4j4pR#Aj!5pE1W?E5|B z8^>@SfUUi#t9Xa&d7U=ZzD!2}45=)D`(&K}m6F9P?mAikNLa`S#DA}st_N30ZamNC zd#oC0y{#pl1QLLCFew#qXXF%D`SOpQ;m_F+<-!s=QQPD}%1t*s<@*=pozY9G>Yg;mxbM2#~D2k3~k@MP3K0?b*1}^Do>LnQC9;3Cg^(i_(L1`w^pB z*DsU#pyRl%VGfW-hn0%G=OLscqftxe>_5YxGOi-(?wLN0Bie(v^EC%UTUch1P(-!o zb5b4JQOna?ik(;N-vZ4?3(rA-(UWL@{O<)fPD|>3#FYak>AXfE$3ETxFOow)&(28i zclEhS>AvR>@aeDlblRdl{8UV1>wN8IMYG#L~_;pp2=Zse@&8$%KM=Ia`sMN*Q^FgSWD*Jcat)XzW7J(c>C+WMQ~RXYeGnb;h@Zv z=+wG~sGoxV>zahHEds=gOj=yQozMwI8I~B-`1oBG`xZ&NURXkd{GBu&ON~t>ElO)T zFCyIz3Jnvk%Nx8FcFWn3I}7oSS1%x48K|+f(k}7EwUR*>0vsMq%UpuYFSA!EW{}J4 zR9^lVPaZBJ@?6xFK5^f|MV@)|0$H=J9KAxf)>Fy~l0h1<;7mN0u%v5_s+Z1F&bf82 zf)QA!j3c6JfcjtV?$vWyRjZ_q@~`M$<{xEAXX;u|VUW{z9LdMNwA?AztM2 z8z0k^fJ*$Kd$1;tVxW#nU4X%KoLb_gahkXM2vwcwLjEOi4{{gDfP1=~XFov9ZGGwg zPY!{BBuOdl5%YcL@|o-U*m9m8YUW(JQqfm>)-FAN^8Tmjs3HH4y*H1Kvd;2N$Wee&7Ucd@lvX6dMfUCqeUSW#w+1o$~LKEB?d#Qlmzm-|4i31pFET5 z&<7-NSs~a}cmQ0%NujTgNi>DTm2!IaA(izg(^QYKtMg^0I*=$frfh@9(Zfxg-JlpA zOgSYAhD5mT_(~mk;ZH3($RzglPs83r5-8h*RaP03{*m14A(c`50oVDdb+5N5awqJw z3ma%~m2#xsL(UTWH;)-eUpS=txw~3EJD)k?QIkgxr3P#QKC6wWNQZ&YwtnqSs&qb3 zgIf-SGI^A7*Qo3c?{GSL5boykQ;L}BsMt-XScPXV#?N;C=%G|<#i!lhZqYx=N4Nm_ zbuiyDxsdS4DOJb(K@)H&qwitxwmSTc%9+AE_A*H^l1dc6+oA?W*k+vK3e#+X6KA<` zGDWhuYIx4<&bYv$v9d!}B^*R|e+l80S(ibi+Fn-67{l&GyQ%{=JK#}j@qJ&bDi(+o zNoj5aLgS)}uMc~Bbvvh8$K{~f+4nfGeCE?7@3iO-+5qaa9roS7PGwGZuH!x2^=fx#=Ud~fgqyRb1DW8hU!Wfz!059PVWpg;no@TWrNPY6h z)Pao_@TIy*MTu@}7Rpf;iE_s^7Q(ZuI)yme9`XObOS^kM-RF2(YDen5aOUe*?=vHm~ zMlH*g{(|aW{?2KDMrJ&9;2me;$dgjku>)!N9B#puealkq;;Ml3$Q`yRxe5!3`VLpz zpONAfDK*Zk3hp|lZ2JcMnH9GU>h|m<(xI-P#*uxjY_5`mdY zeM#(KG*xz(&DOH@>;aK@Te&mTU$TvTepZ~n1?Nv&qsG1ea0=X!In4nE@vQ&jECh^Op4%{H2%1>B+KZ{^2W6iEIOten%vc1&5Nr;oE3%- z$nA1p(baAh%bEaPya6UIs08LJu^^ z8j)S(Cu1*D;8RpdRQ$seUikE~DdFr=7=Br!?5{$^-^kSM2^Z^++irzn%wwj9}DYin%^i`)4qRY9#lFdD~_l4{%Z<(oK=Dz9q4wR4ZagiycZ_q&+snj_uhiQcrxQk|ZIK>(S$W+9v7ZrNy#E zCJm90)zVE0?*%yutC*nz0%9{Uw#CR5cNc!=u@k3zbcq~4C2(Rk!D9GisjTv|p* z#NT%lg)%BhLVPAgwC1l!yv&7@gF6!~{xQi9xj*XCVi^&o%1X6v70h;KX5BJmQ5OKnahL>G68#+BV|QLsO(CLzMe zX8sxx717cGgTvZ;MrI^#IE&-{9+&O`G~EH9b191TvpwnBOK#(Esl-yq0dU6WFbM+) zle|DVKDwl3Kw?iQtwOC;>2txD1z)0kW%hK(z1_8V^gSaZ9Lwul8ZFp&S-Et-YNtiF zs5QjTs8Ts+mfn6yu4)f^lUSn2J2-HhEd{m}b=JOEQ2Bw3x~{ zP8FH)u*qGz(fHdOl#0cTJ}m|ASIXXF(V>2;h+fN%!*@$KW8v(al$v@^0(%hx^|4Cp z7neBn@Vkr~;ve8>DSLsC1F-v@Pc2?etR&JV)=9XBzc?Y)6ib{%ncQ`zdhIh>M`AH| z1RNTTM{~K3p!up1uxUO#4e%ux<7=raofuj#jt5mDV^ah`+PZNl97}7ww7U~*W9u5* zXUOH)>D{@YhJ!!N>ywFCcNDMhp}U0Rez|Tn*&wnD+{BNo?orce)hTAiHtkOm_21gz zCN?=7E-v6YEA2zJPPF)$78Tl6*SX*sP6LB4HvNHIm7QebGJ20I10Th=N*@WcQ~4+P zG^;Bo3NZJUaG)#&$)uU_?oT(X4y@%E_Z+psCm=2reImMoP`dQe-gpbFs<=2$5$eSW zzS5`}iEHGdeBa25#DxRJ^13|Ltg?luH4Vfjq5Yqy%J6?;>=y~=-O8@WQV!fZ*@Ggo zh~_&6h9(v1E@urd?3nvh8W+fsCgaRGY|d#1m-M-x3ex+tWI5I>^*n^%11Gx~3%_Gz zKm(9co}AjbPy=S*PBTeQqRxJMM(oyUr>foeP)A0WwyJc@z;;4WD)$IhX`F|~>kv{$ zbkv*&n^mzKT6qFcA*EAK7B8T5=A`~APNpdnue;XgUA2i0VZ`&s^Gk^af0v5`=u;#f z^X_a`&uW!cP z)QiAll8S4Z)wWrswVx(Q09kVCJKKQqLt;Bc;>L4i&zRkb-phC7bb3$W`YELjX8nwD zn0%`KPVl`>olAzalWPz!%==cfo`+@9WZl!A8%Ic#)R&-3TvfgTR z?9x8@S~U8RaoS?wW}hX^Dkf08>)dx_+gTKKVyk6zA<31c3VbAPiou=}G0%A7FKkH^J;dqQQm zFYT!aO$Uh2yX*&Dpcpqd+f3jv~3o(13vv&1oy{aA&jH@R#>n zhF#1ew8KmKi4T=*G!|UR!ADCr5nF-w2>Mn=r*J%mLIm@$xEP^2&7nTAf*q&7`u&8S zs&`8)1s4h8crRv7jVO6j+B&;GqKMO>y6o6 zBvz3FxNXAptKfvP_suWp{|Gv0T4pJyr)?Vi5kibx7g}7b=QY;;z60OQ)R8s)B`}(# z5p0`|Ih<(q=jL^J1ihJPL5(Sj3Zswo<19q;zPzc(ob=N7eC&LK@igBP4%`*uQ(B-+h_MJ4r|b z!HBG(31@$4O1m9aJy}2^VjaQZb;L|%_9=$!=*T-pP82R3i+Q_(T)T+r^}WB{bt=B~XUF^dcik@FmH9H~^%)wQ|DS z8v%8Zst}1ny0`QKsF5^w&1)dq$y?o=X>{De_jqc7I?h^-ZQDAT9~y16aDRJ`*buJ0 zg#N>SXi){n1N&U$6wCT;v?@pkboJ<1$Ii5JQfX1(pIO2=Vvc~s`$_MbqBUDz4Mh=PcL5{6h+2bv`b5_vE(KQ1XH`O9$?56Y(+lkT0>_=n}X(J;jOj=}M zj_NkZA-k;Egh=u8I|zdoCeTXb2x@x^%yiv>dTr+pml&Wi64lsznR{CnO{G0QA?I$Z zpoLkSN&-1CmzU<|41t6=Y!ZFf+Wj3%-CboXU2IqNn9qB1`jB0&SamNUG&QR~3g{q4 z$RzA*8f`e9zpX_vK|6rR_W6L2!OlmZKml3b3LJ`PrwzwomV982?2(I2Ng1SP7bJE* zKHMSkuZ_=))~421Xbhpm9EY z?J-Bi$n67bDKppvs7A(FON)#SZYSi{a(E;S&n+X^uPp3;f?XEVzTvEOIso6u~#MPE~` z^P|P?A)4xlP1ZSd~&o+V^iIYKvV@h(kmy{YUywRnsqOOk&IfEU$% z)2!q&m}QoOMFeO?O-R4kEdqEMwue)^|`u$9xda0d{hSrjMGYd>Je?y+=OP!y6HC zw(!8FuetjO0eT3|2GWUW;oPQnFO*7=wVwbZm@*g8fbyCOaZa`^cswK4sg1kuxDHM8 z)>LG*SXJY4e>&mk(fA9Dq^S(H4W_lYYxpdC{D7f)KGJM7l!AxEB5C2c`CEq5p=qc@ zKqA?j7Ji5WL&B$`@N%0>EI#1jX2mzDjJ9KPdZ>29od1Tg3;d3UVBwLw>Ae5Z9uC{xl3TWYv>~F05S@Il!qb7D~O$-n5~!`QR)41%Dmk-H!Fg7gRr+w{c-4*g+HTFTe!Dui7NCLF}@t9sA{|7 z`x0xEUGus*KK_tu-46JKqNf!*dm7rO#*>B=BqFMpQPyn$Cj6tYaM^atzc0O3VX~r3 z`(xs6L_x~T85Hl=W=KT)mWCsTji(s2)Urcmw{5DOlvzg&(oJa&OgRXHrQcUpp)&Hk z1t`RXJ7U~Eh9=P}vozlnvri;yzE5SgSmv`lk7K&skm7;u@*>(HxOpb=>0Q+zv&WL} z>)N8)bfRPC5b+%Wmt)5WuFohfc4NW{|4C{J50sklyOlLne-I_njAAnBchC2=Y=z-+ zH)mARtT(qmS9djUG?D^i6PmMVUwGJ2pd_coz6M>wy2=Mv|_?`uGP=DZgtnu*uW ziN@j_@IZX#MsvQRDr^-mG0Q40)jX*(2Ytteh29|sEFS&me_vA#a9nefwymow!4Lye zD2W^+#KYFM!K;MB4`hVl zHVUQ0A&{fE#0m>XG>yXs{3q3FT+enKw2t{1;S0vE$ssFsqvVnL?hv=j;M+oL7~Ebo z&I_GoX)>9sc8U~Sc1%g^uAfIEcxqJN9;DV$@n{FG?X(}~i>Ws@edR+srnxRO-D+;Y*D?#8y=|q>a6j%G1XJjlXX!@RWshMPb8ZN*@2|n-lwt# z38O&%nZKrDTeQ0zMtxbe?qErra6If}NQWikiW5K4#oj-mdUn^GOaPc5%4+q54pELc zl}FxWCJ5A`#fveLIHO0AV7B7OLsGwKr9U8>KyRa1>l;yVSf@g;Wr+O=@hc9t3ljwL zaW@)&kL!j5!FU>|(lB~EiZTAjAbdr1R)N`5Ow=VuB?WIL3G6sAr#)yq0gIJ!yk%*V z@F6390FLMEf@tU{3hsp_o>dtGyxtsA_8_*%>)f7n37zwM(oin+2b#<^cA1g3Tc1_2(?u1?Np{w=@>+Cyjw=++wSV zng@)mSf0vrsCZxd!Dfw-&!8*mTGNQwZZtYZJ1dMdVOby;S`>EDxrDztreQ1T@+~G# z|6x?KjDl!sFXVfb@hetE+CgbYxj$@q6}%unE9+lpu~1!@!q-$zH#TdI@S*mk#bPP_ z%BzL@GMcUcfBtJ95BFvgV|g?*xbtC5_Yz|0AnO^ZDJgBmr7f^XcP}W74TH@mv#*MI z!B_s~fthcr>sa_aA!V64^2DCQ{$Y_eQiEk^!PTV8BG4hhg-aULGN z3TY`OEdgV&4#cA$!|r3|8900Mz~#5NBSa&a9+%;uI5!&Yz^kw;ty3GePf3BhdkN-V zjs?URQ!aVHY#rkJiH*Pt)Q9r76<#Vwixh0GZ;JZR*0r5tiou*67G8 zaHCw9|8gUdPO4j^hl(+urG%9XHl>MnrC4&>^(8hUuCW)_3Nth<27o=t3oT+I@pox{ zUhy3e^BLoB<9O4}=s=0+!~&tp*pmnpGC`!ZiE_)aiob6eNaJQ2+;}AnpUAZi!dQ;M zBo9EI76q5I5%vCJr_UJIg?p*4?C}^No6N#uKNeTC|c6d&14M(Jc=a#?R6b&NX_YXQ&Mv6Y&d7 z;2ME$obM9k6e%4zBpUey|F_`dXxuNYUFa)ydf};P`~&)xa8)k6whg=+&jEwy1}Ixe z__S58>i4uFs-~Mat+Z?R(@aCeJdCE`?8JmwNU>Rs9nKp+3&XU9l};D}Z=%DJDTRAJ z$bS3{^*u)g(b!Xpz^>AGRNh2jJ{X|jkENn_T&N8KfV#3{nWWT+4^j@&oRh>)IVBT` z*;JD)PO#p62#O)SRZamLnPp+v(eA2ef6;@QR|WbBvk9<0%WWO@{#dC<9|JpzbkU&K zK5?+%GUEk~w!jiP{#p@E4E_XtAb-H;!hhrKGTnk(FIG!J4pcs>6c0ydcCENxbJ68u zVvLQF#k?nej%CJ+fOW&@qRP5Ip*YUf)g4jY{n{y906%LoH?f;&mKpV1Hiio=yoIm8 zZ%8t|ZZwkrHjcD#Y1;t+N1GNoPQ|Y(~ZDdc~YGq^;z^UTE?%Hag}#o%Jgj6cahB_2ZS{}6yU9U_Z`zo0H#3AdAAiz+4% z^5O)%fg{W0&@g#wKBDy7U?qThPnDP3aSz3n|1+EsDpJv`$aeN=S+CrVY_m>o?Et0T z7xb**Rqq?wuC{{B3rf57AZi7%_YLIX@7TQf4)XFt+2l#o21eMoA5y^w;I4SMPu~f( zK;)dZmSh&N5e3A;Zw1L?aoW_Z6F6B)FiMeY!-(&vhL6P}0N&3}s+#ZA!zOn`JUVc2 z35SftNOxgP2$^c18&RDKqT1_}{WBarR?wp~>Xf8XP3j`i3lS_wX08}7E|hzOWDclV ztk0_yLuW7@QHUZE-GsLyy(7_{IOpw{nLFA_4MFG^3jSJU^fF4@k_74x6g+|GLD7hs zYOp&+&CC84sO@ZnZXed3r7&ihXbJmqkg<}Z1Pr`{L-RzHWLeBmbV$gw)0q}k zyrf$9j&%Z_fV9Jm{u$~4C(5!!d;F(*TuCMdEpiYSqY2|P#5~pW>lRgT@e{IHVtEe3(xO5q_OJn&KT&O?~Jg0V;+uE8H^9<26|0E@LZ%fH?1j%@1P&kpxys7B1OqpAR+|*SRw* zVk_3Zgoz6eH;f_d+MI)z_8_M1G9F;Ncyr*knF7&YRj>{gJzUxs|6R-*Guk_~FW3+4 z%MS5y%kU3Io@?$llGG3>{fg4BtF+7#u$6FoOkfr_`%3=T{2f|`fKaq8*sEG*lmv9g zC`^cY``lP@0pZ~XE#;l;=PhGsUq#UDHtH?D8U`vl1)IMM%N2V=*gPtwNDqZQz!AnY zo|D}&DwyKhZetr}1-$rH;M<3?N#fByVT=sdVQlC@I7WVnc;NN-DM!;u-GxVvB-!uG$WX?g72nkrA>9C1?m_!gVS0FlS}7 z!(bfGHxC*%Z_d*#ioSw6ZtkUI>n@yClA(b<`sEy;9Czh)EJ0kOt$t!~wv+M4+cpoa z5Pd_r_W~C{V+E*6oz)O$*L@V_m>0*pWQJ9VGZL3H(-(LB%POsR)O<*Afm!kzUyw+* zb1tDr{+=8%Q0=17B|x=pd{Qe=Zs5R1{%aA)Q2 zUofV542I;BQMnHxM8(nz-Y6FD3B=tioR1D2l|98E#bPXJ|1b6xkv=5;i17x@E6S29 z)*-z|NzB>#k35tqS|bQhU_yj|gh)w;=Ft|S=%sZjVUNFMv+OMbjkJ@JGYHLU!2%_&D;jV-c18yu@a75aEY5K)Z~E9{8Kb zQp_V*Eu)j0Eg99Grnu_yxLT~NyIdG2=5sNEKp}Y@Rq>E^)h!zRE%%8Uojb&yHr``4 zqT$EX5|vRx7zu8BDVyC7F2ccQYyewY6eNVX^l9Tm=@8SzSg!9E8c<67zPy)8;|#JAXd5v1X;0{KcGAdWvB5SJH0 zCTcOZRV=^LqDzXT4KX7x(HWXD3M7DUD;BQIPJpktI~Ms6{g&n;lC!qUT`h_}1n`W7 zwLf7n0HCynnk}b6ybCJdW?(=@J9ZhIz{0VS{?1~e103^PRKZa*e;iMN`LumF-2lz?EdW~1$U^lZY9Kj*@}A!M4(8U*dg9^0i5=epr7WgY!{h;B7^fx^5Dwj zhe6h0X!6*#e6&Gvw@z65L;}mKgG>E654ucFDG}tFZgya;TRQIN0kbmt7l>;K1l`u+ z!Gu*Y+yNM)dY`fi+XjTc0&~Z?<|F2A>9e0lfNy&DGJl`a(;~6ivi7_vs~DI3sGM4h z5yKm4&(eutXg;V)Oq1eucXvj_wmsI=$=GROqv0@P<2>M{1=4aO$O#y*AO=ns8<7ZF zN`~g`s5-kle0a(8379U%Z2SS%)0w^d^)H1^th1NRJCXo0#fX8Hl&1B}j|8qX|Na5k z`+@I2xw!ThpZfp*GqN-Hjj6VaFX^gu>6~I2KzFf{!ST+SnN8;9mOV`Gh(hfqF}^s0 zxj?STfZhC=m2kIcJYC`xQ4YytUv|0Ua4q)FE~;0=fWz2gZN=@~eA?y-ckAhnL9=mg zErKIPF0W%F1R{DHLahJg-)>QMd{MD)jN?Ga(#uD}%JmiJ(@7ps`O!kz!~vW7TqkMknt z$0_~^kJ@6YF^}Xk?#tJQQ_$TMvF$)3SOgk|rh19Lyk*Bp9)NW(9xVWe6Y^jmTvC#G z*JV#}l-O_GTw?y&V#jtZQz@HjbLVAGK8IBk2o?_?1U-w-gOj%cjW2EY1x&F>mYBP= zdr$Uk?jiOrqJ?KwPhowRKL3*X8F8qhBg19I*+FMNu{cvdQUzT8{43ai!~^jzo4AKS z+e<41O|~b>C==i!PIyuqUjEG6C{e@`bts4t){$jGUwK`)WAO7UJo>)M&cOyv|B!$J zJmQ+4>{G&uE^YY(oWDlAxbGox7l>jaw|-Gjm9@KIRc$KNr1*1Kxw9Cn1>zpYNF`t> zihM=^Rhr|#6&g6K933sq65CviwALhB)OrZ+ytF5T3Uw(KJDb@_z~ZG}b2c{?)g*!> z;(hfB-xGt=6|vbJ|7an74}n!htHCvn2Itb8eP7nThO_4q6pEK4)66H3Steh~d=~ z#|B=)Nc@4zo=cFUP^qqDWnhyECu_|@4uP>tEMWia%L`PgOx*Ov`D}uZd0Z~oPH(3M z=C>2qXv+x#5^~uoR_FtU9epM$LZIanb=cg7Nc=r+H0+b%Vi4}7&ycUe(VtFH3tKcg zxQ(O4HlWP~qfOJ(vh6s$EkO|0=^0UMOo29+R`wupMB#k>(8#oNqL_dyZbZ5Kv4@qT zBp!E0w2x#biO$wXu+F8m5lhFTXkjvpOujWxPYJlNQ zyc$r?MLWsG!STpImIo^>RP)J|>*#_gV=oYS6_4i#Ub(!xw*2tdmI2AjNg`+G16O{? z0noBzo9uJ(ZYV|9d_|R_gy7UO{E5kSgLOzvC*ZMyQzep6s+LZ2cv_O{L*b_2TYy@hZdvIn;V_ z54Q60sgG~{-~A5oY>1bk0(>@HjZ$SCl^?Aps=-7C}v%-?H?{aC~Al^k+huIA%nm~WN72Rpz6D1$pOcs`0t z`$_B+ui+#7BmVQ}`TKbi-~EOFf#31_CA^~Vst@^j3(xYOc>e_P1`R3!(%wNB_;Wn- z6nW&Hr|ip^9-iX$Tk3pe_KFpD)4+#2wnik}lmw4uV{DiOa=}UYr?e3?g*ZJ#d zo_L0zgOvFML(oC|nV<95TRi_PtD!uxeRwVuBopv=R3R!c3+kS0(l;4Z^WSVWdZ3_R7v5mD&vfa$zV{HG+_Mf)RwtHeu>Hc; z%GTDFZnN9$_()TX>gTlCjoNzfS8M9*LEHak`&atV%l1#Uf8<>OeJ!z-(UUUU2xefo z4Q0-DldaUI^De|+G22K+wty#YqmQ@J(-L}AY#U`8&)8=(^2xRc{qoZL5j=5^ZJBK) zzbEqD|6+_K^!Pt)PTCquxuLcp^x4H2qST&m8$b{Lo}bRlPX~JVGu!{L{SE(1{{}P0 z5tJXsj8CAwD0P;P=q)@1TljE&ANb{=5(Bk;AXM@zMN&XP>rq z%Rzk2Z$XhSQsNc%QP%=?_MOzaguQ*Auk;Tl)S8wEj5% z%MO$C&�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 z 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 z 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�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�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 diff --git a/polymer-perf/eduke32/psd/game3.psd b/polymer-perf/eduke32/psd/game3.psd deleted file mode 100644 index dc6eaefe9f10168e72a96e382d6e1295e59ec4f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2920684 zcmeFa2|yFa+XuY6;Xb`@CEgdBa9;`{w;)nLQ4uwU01-$q35a;0^}bMOkrpgc!J-I? zf+z}tv|ud?6%kRicprEd0R@tL&ukJ1immkD_j~`}_h!TH&d%}7%rn1vj@{YCe5QvN zhGUYAf?@a|2>N4c7=+OlU~WFsWww$Md7(Otz%T-SWZYOXu9u_MpWDZsnRhFDKmKEO z`regf+8C5J{p)EqkzovGFiSvP#tLL}rjL4ku4ojM?LU2#kI8KM>@Yi45ZgJ5$MTAD z_hv=~GcEi_*;s2#i?oak4GU!n7}Utn5Dwoma{4HSKX)0+62d5&Hi}AS5d=>kWs4H1 z^JjZd?YKM^)p)AmRKqDux~UP>#AvFKiJ_^Xu|Cz1PB*8~&1gpSDF)`228Naf=2Yo6 z%31?L(|G;?mY(*G(hA{f`luj*Ak30RTe))O)Rjh4xx7G{frW(yjc!OYG@JrCrtnvB z1dPZj9R6qt5g8qO7N5yuhY8qR4i(X5EaQd?rjHthD(cvzJqrz+J-eeS4u2}ypq zC@qo^Ml+a7r-g>nx+}>Sc(OVh*=2i)+)#3e!WcY03$bhZC>g&x##Az7(@2I}vOC*D z_R-wj)X~_)(b&N3bA9}zTxVkt>mgu+sl%Dg7jSv2TzmU0#~NXC3f*{$p}Dt#nWeG0CEaWa-OQ3smo<~j z^?4$EZh&AVgU7NBgo$M>5q2IyTmhFK#0{g`c^OlE*c^ZEO1_L<*8-m>%nV|10$Kjn zG+9Ae#K%RZ(a?Z}u)B_zB)01?%5eA5uuHPa2}Kzt5(#qgUmz_1T29GNStLI!?RYGP zfMpLm8VJ)V28L7U2Hpk+Fbb9?CR6Az954_c{FnwP zEq{i9@kLbR^L|8!><^dc&E>u|il# z0q{X_8PK|nhCkCXfXfSI2&@@lVIgcL15H?31jk>h@xo-7o<{4;`fsn>Vu$U2iwQW~4Vl%vyW z2Iwd)Dxdsu(FK29R6hCRqMaq@a@YcELuqXvMSon%9l904vS$af_)x~gRNv6V40dza zE%d=|)HgIUh8^O}jrC28=&&0=7~;*1^bIXc^^NET`bGxkuv_Sx7{YF32ysBij1D{G zHAB}XkPf?%v5}#bgRR3%3kL@yJ9`5Y3%a?ZgR!lJg{`>*9kSS)(k-M7@6s}9v;VcJ z%Zg-w1_vnRQyidJOAmG=D`dVs8)i2jX<8W6X|!%r-whpX8Pv(7W%*%0|R{n zLwy4yeFI~Cz%gVpFw+On8$w=~3NRC3l9<4J0l34=0Ki+>n_3td*jX5x7@1l)n%bJc z95QyWFtIZQYu((~)>Jx}T}JFLQ7*wgxM$!S(mI?&nHkYx*Zq$KI&t8~13k*DK$n7DJ>o!*GAq!f zU{{Yg(4))>bSc=?BM$T^vjSZTcJ+t@J<6;=mx5hA;y{lwE6}B2SC2T*qs$6)DcIE` z4)iFq0$mDr^@syK%B(<_f?Yl0K#wvj(4}Bkk2uhy%nEcV*wrHr^eD3eT?%&fhyy*! ztU#B7T|MGJk1{LJrC?W&IMAca3Un#h)gun{DDz*UOQZ93YZeFIv0e!;Q=_-BDK8~& zYGclD#^EPDlW%H|Bhz%qBYCh{k4fI|)+R5}o8KeIoP)bwQyR%@b@B)YoGdlI7kRDG z@lH8GwxEfOb;f7`0gw^`M-?&#m&W|~ePTz9AxUf@9A$Y-$e1aeF(l3RaE)PM7$)v^ zqdY~)-6o0ulQfbSh%|Z?o_im@;w6ip^}J;=xTOG|di zA)i5(AZ;4DR}r`19v1Th4?lX*o}(zyPku27ANnsUciWAY7B18!JE{ ze?3#c4V7GzpB%tE1A}Dg&@@bi4=)L_`13;C_;7`HsYjVigXli6tCANk_HwjU19{x= zur5(5T=I2i7AHIu%4j)wA?lJ>nBiKR5ia05u{bOqyeW!m$Iz?b(##r?%qRw>xP%5$ z;q*VFqGz8>*5r7cswU%xr!jt4oXuBShfM2<#H4!(>4@R;0j%@9aI>Z5g~e ziU_L7qPt{P590EoY(vns0|rXd2mv5{605b0D*!-!60Zrv9`tc` zaxP6k#K<{I*t{Xb5~-(4MuUXZa&}{LxCFpIlq2Awmp11wSV&c^0QjrJ`~#pfnEbHW zUXEytFnFPpir(y$P$G}O=H?p7=v|xQ>_Mf-~?)On18503jYG(Z4u!J z_!Kt?Z;4>DRzkQM!ec_hL)j2UvbJ9+ivg2S3CX!J0v0m}!gL60@w`3lAUq9Fr4=X_ zUM3e700JQ|X2%U%MUDw|0&^l2UO+RaIw zrLaDqyfsTkOAddTD3|ZAf@o|d>5X5JV}=j7+!@zdvNMi*5TrEdHOk)3xMkmC*y+s} zHt1Go+?W&$)7^w&d6jbg8G!I2_kj^Mi#ZiBv}60*3>`T?ACRkWDypyJjbp04WC~Le zs+sUYb2yL6M=x4Zr+f_Je_T+mS#s^rhp&*Zcr5s!2X!8xjLivz;pX_W$#12wIbGh1 zmZR_wi^)+yK?$xQ&^Jwl^;s8qgqrAL~DfQLFD2tLI1@9O)H}!cKnt48YPb9d9 zFr<^mE(c-{ToQaXsTMFhPj4zSoEIUr4>r+ly)g4DjinJQ~E{en$kU`H%cO9 zZRKIgla(!%U6ki52P&^r-lDuu`6uO5%B9NJl^-cLtEi|9P#LdcrsAx!KxMhgYL#6o zKd2m6DOS0v@<63YRaJGc>SWdFs&iBssshz5s^6<-surnMsXkJDucoP{r)H?;sJ2jz zqxQAhKD7+B^J-OUPt@Afd#R6Aw^W~_?ytT|eUEyY`dRf#^+)P$8of2fYfRVh)>y8w zLE}4(V;ZFzw>26yH8n?RT4;Wy$<|!2`JHCA=C7LfG(Twd(VC=Xr?p5cTq{N^U8`8@ zrdFf2w)Qyf8QKfA1==y%N3?&|{zLn{PG6m=Ixaf?I?*~wI(a%(IMque z(%q+BrSu)$*RC(K@5a7qeM|d3>Zj6gd_R|d%lqx@m({PL-<$q@`WyG3 z*FUm*1+upj}5FE*fMD7pc#W$gLVu$ zKIraFQdpds5c$e`}l%rGb zO&u`RZR*!kPfvYC8$(-2i=|zpiRdQu5PBND&Y+LMEQ7BN&Kmq_ILVM{m}FROq;2GA z6m4|I=&kW&W0rBUaji*Tli4O)O-f9Jre>x*(_^O3%*L24HQR4?!@Qrlhxsn^UoDg^ zW?DpB6j*$)G_@31p0s>zHN`5}D#PmOwDHqe)6%9rm_BMcWBQNN?^;u>ms+P--?bTO z!>~DMbAQI@8U8bVn(@STqV00qOxss8=`(pVPt9zxv$R`lS8PwQce3AMU*XWlVXi}> z!yk^L90MJXI=*o-aa!$E?5ynU>KyBQ!)3S&)8&ZEn^|VF*3SCHRm;`OHPQ9H+ax!h z+u7N~>{+wFnSI-RtUJg3^c-xC%baiK-0>LivBKlrS1Mn5e3kUoV^0ImHJ%r}`g$$# z%J6FTp6R{EyKe4;x#4q5=IPE`H1Ei~79V?`IG?-oY4g|4FJCZZ0eiujg{lkZE&OR= zldpqsyziq$CX2Q#s_`4|7wLCt@sPzKiwl?NE@3RmS*pC$XKBXLcE%jWK}ORumu35x zy$tDqZS>iAcGK`p>o+~v?6mpl7M(4; zEjPAWZ9T9}X&ZZ6#df3Z-)|S~@Za&s#W4Xf6?;tgB=1$( z%h_8KYZH4ou6JBi+=Fjsf0Oqu_1hiazKdTHe`%lbz5@vw3E>HMzjOQU%=cry-}`-g zVo>7sq?t*__Yd2@eSgaj{y$VD&qzLYVEBQZ2U=6uDYZX3{g`)f+`)aRDyb2vkJIL* zT|8ud=*Uk)e%kqyFrAZr_ps;TUyhg^Ig&9fW6x3IX!y}*nTs-i&$7=tb8O17ACC_> zzB3!k4$p2lvGhdEN!ODlIp#UXa>wTGKh^itjyybXRocTbqYh~3g)#caSuV1a1TT^>u(T%&c{b!Xon!~Qr} zKe7J!UDLaT_w4UozVCIv?g8_`^N0M0?T=@|*c@9=+wg75}-bad2b$JL7jHO&(2uG>0~~wd{C5`2FDz z<{vJ$`m{c2TiLGK{+)25@T|yHbXy!M7L&e4KhhdN#=t1@8d=a-KLQTOp0I#D1@=q~ z3tkV#$zyB~hKp;(cd=fx99im=^g3s3mr@A;&9BhrGi4p%h%#VVf{5 zH8nMLH7#{@t=^g%n!Wq$YH8{AAJn&R|Gs?(_0}Rc=}B_&@e$Y7)YR6|?xmyCtDlaJ zPCsag3J_;jxvX6nX?N^MxqgHG%ROuJ{ zj2B?lR zDXD@+qz?3Vm}@Fv-S23^=UXtovkBr`m==Ysvo~gg9o@NebMrKIS=u+V?Z5F-A9Lcs zuMTbFhRwNoc*E`MOGLKwjvHkDaxs*-dUJo57rH-HHtt;#x^H-8#Iw5*Z3#|$wA`30 zhU)C0GQR!I{?}g?G~6D2$jr{&YEQhIP3#V%s!HKcM@6;A#n`9}%1vjs@V6yQy;plq zSl`r3w|SdH6&w-maeiM_+5YwD6=&COyy<9lzQ2zc+v}ZsZ-UXZRV}Wy7u!-_*lu`c zp?fst@-W(0MMuASxApy`_UOZB{B{Y;#8{$De#HEn`%adrw%rWUU>QL=&gFa;8mhoXG6yS8aZ{pdulH$)o-rs-Ttdn{&jD`{<;Yfe$%aJ zMuU&9T~}xws}s%%Hw(GgbTj_cz7sF*JUhJb#k7FaFTZPHaHy1oJ>jF~49z-QYtd_SfeJ?q4&?cz7b-@0)8UZ#Vl`*#^^&*PZwK zuya_u>$Jd;&!~M&!!MSE`Cn9D@o?8J+jqbE^xpI8O#$D@?d;DE5!KHVox{UxtKK+O z2?wp<1=IJKSgrii??+#uFGW?14Y?fh^B$jDho7C)WLD(c9b!z?NPP9s?(u!~MB|RP zZW;OTQ54nW?5)V*>xK8X@499pF{X%EJ?B{<+KM%X?YiR;IW zU+P-3*6;a}1#j0KU*KpqBii%A+V2-9hx(k@!#}|KsYV!EQttQ6|Lmw z+`I4Q9G!os?{nQ*4TCOcoSXD(Uc1wd{lLnX>jb)$sOCZt@j*#$yoQqtU7cuh1U4ZwReX; z6gtu#-xJn~=1gz;=6UpWozx~9v$S`M$}B5wzrBBd#|!4R;G?W?FTYbc5jCe9eQ55? zhE>7a!@b^)UUJ2+^2WfWO>+*Lh5xv#?9RHe7RJ-Bu=8>P4>3*ah9)+1+Do5QTzzF7 z=#cs*BlCQi7(2&5Ke;z8Xt>jH(Y^YzFw=RqdtH~l-@a(b^VZp0BM*OHd-rj>ddpPn znFUVI5852HX`O$2{{43kx3*qh_&zK!T3l6ODafc4-Z(1yamUwHN4~B&;AM4gM7Fhc z(#U{4)@ug3?0E#NemgwCCUfzggKL8u{ESl9UAp+py~!nfS58xeBi2GeKv z-g@_>lSxamo=2w&2Od8BK)AGFx><@|#%aIp^Gv>LW)6IGJ$C16eg8|ZG+m=ws^xYy~II~#18CZB%x!@S#~qcu_C*Ka%%JYSx1a!i8htp%$K z=biO^m;5+$agd#!f%zMCO;s;i)v)Lm_t&&n4=<>%-qNQ@*KH|t=AvHr`|f%ArXXNt z&ElQW?~C+&p8qPwCSTjUd)JHc1~0R3U2q-lxBC0M`XApNZ4MERZw%i5TM)EVWW*|uP6E6HJ=`};jFLiI;*Tp^{%wlYlkjy zeEqxcixc64mOL=rF!%c#YZqT(ne{zqq;q2JyhJf(ckZP-XEf(sbCmDCfo>I-p5}|O zQ?2WUpEk|&-NR|1wN2km%erxL|E)>+-`3BqJ!keJ@4%DEe#d-j&Q5IIC&n@hjRqN> z`Q!4M4bSWjMBjYXw03&^JwH}bQHlP#$c@SNU!85TuP+}lSbh5VpD&q@UiQ_|cNNq0 zjL#fowpC8KzV3|B?Q-i6@xNP+Xb;X}93O~Py;*5lx!}R-wX=L*(N>>clz)T4Y8o%x zs&U#c!Zi=OGjh|F<5O)M&L>4g-xxT%Y3Fkt?xJTa1#PYFRw4OWp{tr6nqK`%C%79IQ8L*6;IhCOD?-)BGK zHxIAdQ{Fh862-kKI=1I1M`eFO`QYZf3*3g+t93$Oo+>)Hdhl-FhUTJot`%Y|_+3%^ z@#F0^#~SK0f3O=pJlFs1=?y;?h0Gr^r>MR?uT3xKL+RtihoT$$nDbW0?n}ORKUow* zWr#7e)}yLsd+NT+U(Nh_+9I2*Ca3Y~>qgi(T?QOf7ymLf)Z5}GwPR;SA2@jZ@a4Sx zqC-Q~+V5SgY?(Xc#FXPBww65}a@1-oo2i>Wkh3ZBsr6XF`}*~-H}9e`|77a>KQO7!Vu`lzIanU;@~(N_sgu@uYnNvn z&j~+%q{ZKB=}t$hGS@{m_a`46Rao>kVd@;cfmurfnDtw37lf1#4NO~cG<;vwj2q9- zwg>op)0)@9jGpe)cs?QR)U(#QrkyJH7IPPu4Y1k~wNJVB?b{RIzH8ckHArXcfb)N9uBVp$7R+so5&4R-ndhb+t>H!0zt1dh zST!oIK6dV|$b)MQ7wlcJa&E&wo6zLsM?Y+?diKmaFJnF9a4-CK-RGPZ%Tn6UyS3IQ zpSboRx`OdO*sAPP|TFifD)#CI=)_0YiPOk zx^4HK(<0i<<~{F%LuRcSV=&`QS?_`zn+f+;wNJ|o+n7MTzyG15x$gA-Td#>uJ@St^ z-4u0szzx?wSFpohpZMccXs*}F%(CB`L(jGk@ZHnA`tZA(?T_|N-u=Ajfmy#ZkA;3^ zSF#G<(n5JQapj?xPKz9ZyCC#H|MSn%lHqdWWT_D?!l<9n^Pe8EoZBvaFJ z-{+xCuj*Up+CA4@(0XM<{B=L~c@YLjCl#GAda>^O@Zp@z&tmM* zp@k2rZoJ;DCgFwAUaj@-ZneK1HvfLK>yC3Pbo36i7QGwZ@ODDzu24KnXNsZK*U=WM z#;3hjZa6dGT;Hj;wf6c2Og?R_?GiLiyZ#Ana?{bb?cP5bwah3qcRM4-jyy}yd!NM^ z6y{u0;4#dmM(7`@C$6b4{k2W?`fvJ2Z>=~R$~}JRabn#9F?Kp+*}Wf;V*&m~r{*b!nDYboH{kZ7V%e$|ruL?WU zes#nXz&NlKJ2qal>rH>6^@>`7PH) zJ3pMdHl(O*@q`_(pG|kzt(35^{P3yYt#_{N^CBX@T(v>hrLws7;@q3@t)nMX##CQi zJ0=uONm7U{O39TmQtZbi@d0D?e_pME{ z+bzG{v0l1I=B5TGS+HK-*8OvMA!lvKo|^-Gg4f=(&=1CYF}7akCkYe3-M?#Fc`wV~ zYy!(^A2QcGBUDM+uflYa@BjUw`z~@XE*yd&hJa2@3jrKd38X1 zC&u>IW;ce-x&Ft=8-6~w zRvaB$-Dda4@|C9&JnM!u+)3E>x}Muu^cI|%>uVAxwe^4R9TG9u*ehYpdgZJ`UvKf9 z-x9Ub^z_Md(bwjmU3_H2&gv7p7wB7AC=EZ(j7dH;$GTqFpZne+eb2}XhGS?Wf?6Nk zyh4u&q6{Cu!$+O-w$N^Pe&zAQUw!xZVK3h~9zWGh3O#9>pLHqgN>1PL!KVHU|L6vL z%|=nKAZB~Qcb0j65nr+N51mdloc}iPNCEe3($tlWp<+zuSj@&7XIGtkmBje%P^k+yhXZsh zw5R*}_ZKcnwB9#iR^$`WJga2gq~1kU!us!hgpAhm8cf>S@3X9}(EwEu7_+AqY*kv8k#t%jB9^J0E0&t3mS^g~+m^muA5a?;O7$~RqIvsrl^-q6c&Brq zy5ZcBn&qpG98>=8SoXjh1^e1E59Rsfi|VhQs%$oDAJup~*Q+h{^(5WE@n=ULZw#!A zZe7w6veDWmsC>>7<_A|%u=w|DtyvD->4VRIqg^*R?xMX#{0)!LeFM#&wI0u@diO$% z?e>X!;{1HA%@pC1LyxVmGB5mk@l?f>pcQp_XZ>3Ba>UrRERWXjuUq;p=y2lIVjc_+_o4s4-)b;5n7I2=-uiJQg zx{b@J{MRD>JC`4BylJGXusFXCdS$gqm7>$Xwmz_`bzt?QjXSTmhWZ|LA1U84f{^QHACL~!SRk)N^6GF4ik%3h6d&*o!>dQA^PC5Z*Kiu z8j!lgWW@PlZZ=Vs7iO&Zo{cX#7#-bq{=C_d(v-TGDMvPEuK3;R8C#4w@ah-0>iS;F zC}>xWs%B;jQ?&{jt-g=@Em8Lf)AWU~>F762JAeB9)|(TSTc(6p+qkYed)jqRRcQFu zwxXZQpzUexLi>`dBV*pFa4> zzEOs|XL)U!eWUzh?}m2;+!>b!+xfaOUiPY05kxc>9E-kwx@Bu?dxFb1+c&rezSP%j zpxIOzC||dG_$s{iXMRL&eR^|rTVTt;(a&{l3X49B4SFb#do6Kzc*S3w^kP0h;Nd214oj#!sfyeN4EoYF7Uwp3~Ltn*S3riLZL0%Oc9zMbuN9&><2zhz8?hM zL1QY>NgLIRHn_)1@_{^~vC&OI(YRJ9gTr?5bo4~YDBhN1kCr9fg}oQb06T2b|qcb}^Hz6uKLXa*+#}X5O1TPIB!8EDT>Z!x~*lHXz*nvM3oP@}aXM zzsve3Xb(@i+)7G?@5qz22Q8hF)#zr&k!v^Vt0$LS^ra@NpXAGrz8SByXaE>MZT-?iKrt5`g$0W4|=TLlFXy^w%NSW&3H2`*#c&eZ1oi8#B&VkvL=m;fdU$+D2u~b){%9#Kb0z7 zO@+-2;mk%EyaEJhr42SGj49}*Rv^akmy%b2mK%h{Dl{$N3~~X2_@cHNdF(0xyJ{^4Bco?7>M!j=;lLRt?H zm;oz)Wt+U71ikK!;ywLCsN^|<$490K3S+h*ft-$uE*8+TrDO(lm=nMkbk#y0903&) zNQ>2(7sctYV2DMi0J+WM37E3@VtNMJV0{B=kAXD>Ci5=Hri!kap`=bzMa967Mp6EJ ze^`J_zQ#aEOdPn1gq<{Z;7o2PXJ|Nd3onvINs6=ov*O&q5LEjl*gIn z{=FXugG%M&*pgC{|E?5tQNGwRRs)V3tclqmZ2UgK}X46usH#!Unrft4(0@N<*!5dVQ8*& zq=zs=5PgZjmX_fMg`zr~VaLfj!uc}az!>5>ZF)8I?;+8D+Cn*DSBF-zc;4`TYmm`t zTebG-)D06TWIF;Pd10t*@fr!FhRoEzxP&DCEkh!$wksjQR)Zf(bm}`nO8^Jd|l?~|G1Z8 zXYWtGzVkUt^B;RDLoi3c6Y@<0;mF0p!C&zQl%d-k)X#V@BwG|7%m21_)x9Q?^H@Ie z3_s@;bgzTSLH^flR_&rSEhO3w{(bT1v}GSOuIxEs3@EFFOc-?i->p5L zJdad$?5aK2i?^8H)cUp9&d7YjFpH0%XNGk0a4NDK2aH9% z?Y!5gN=G?h>#6o6|39_l9-q<-lES~GJzaQCAKl|aF;Imzs^;(S@gXA-wl9>}?4>H} zQFhom?uUhn?@MAZxO4dF{je^2*|S)d6>|z%=`FjjH`Bq}0VR0wX1bxXU2v%Mj$MdKnh2N| zk4ZKNDTc0Yg;!7*x=je+=yFRF-2i2PiNJ>+o4mD&GGKPR2&(i3wt81Oc03OOWFYAv z_XJsfWD)5B30e8Lzb`#wMrV0h=^4mShV2VVdq{GkV@GM!Q`o+s^n6K9bnGa-U-z9URLq}=k zIKcJ=rMY*>oaoS5x--s&6DEZ_-0pYj$ohXy)0UUNd5s(u)N$l);zb~#Gu)Tz(0f3DO!ETui_*G#3g-@wL{VB7J=*D2 zV_s2I=`%sli72CV`!bC#%Z<)5jV>Q2)99UXB!3ll{(q&N@4d<^2tIpIi{_PND|$RJ zcfjiVGi^YCqRr;#uSUd`r@WFG3o};i+mti?ohiKS-NhpHj&wtaMAk9p9Vw7Kxz&KT zzZr0kjSqK0(0w-}vK)E{4qr}i;<5ex;bnO#^1H+#I?@kjU~_mJfoyi5FiJxv5IQ5v zOqOQLA=7ji9041?-@)K}1u@9GVd~_ULOA}cNV$ip8V;O5HirfOyq+QON4M5Si8VB) zP18`PNfX#ifrdJYfEaj}pUZ;~d8tlA^r#a=;%<7UJrS~5Tcc7Q3?3tp#|R7Z4Ci!~ zm42lF;!xEPFC{9M-z$j4g1S4C)M?UEq@W;^sdO>}l;Uy2;L9Xz7GDw}X`-|Z9VeQt z|8ls!Nd6!Du9R&f*?g)m)nF=}N{1bt{iLMlFMtFTiFQdO*)vK1)M?NMTONmMB>!JK)j-lVb($la#}~lIOjs^3uyF4l+9*r%5-@mzPoo_; z{+~vY|B8DiD}c*mbs>R19AO&(`awR{7QU$CyecdRgtvf274X7YvMM`b{e8GRe=l|v zi)t!M^Wd>0$yCFRC@x>{aU6Uyg3n^Yf0>VvX6IAQW%(Dvw_~VArk!0RYk@YRZ%z18 zr^0F@a_o$ZWP_(pbA!*1uz09{l1#FJ>>NzMs8a}Zr!$X)N*5HU(@?M7SPV2(p_-09 zNTbjlCK(vjY0eBZs{*M3j1YbYb7qF~7<@(`gU9X~@5<)zxxwLcc>ajZvc5XN_jgvI zfkmH80f&qyUr2&KDFC5q|30cooFizvu{eQ(ASuA92GSWobK%e8vSBGq2#ds`WU7<% z@(ZVV=Nu+`ESs;i&Ul$%=$KQo{(iyi>!kAK)L}Al(F~G}0J?Gx zKE4DZ;L`+e9(-U2A+DqKs9IMRkAouRtChudWSq(1vqAu8UP0`DF7gBQ-wv$9PMRo2 zmc27}E=V38qR_S9UIHFFm?a2;?{x(Rbxm?(2QmcVJQlx8%j`R&yUrVF1MS&77L)v# zOo#OI=7)!N6A!=ogkFfD?bN&AS;mA zB#Y9J+2g_q;6j9i#gZ8Q98PD;XkJ0wl_;ZJ6uKm5rGdF*UXbNvlgZFfF0zBuGMy|p zfSsc!&s;Q$WN#$hlPBE;7yppx@Qd^P3(lLQ(p72#j`1q24Cp$q_@FBazQ~*vg!X&nltnEHL_%ahGuya;P zBm&JYh#le&pK+3yGctPy(2FR@agemR;4^+?B~ocZLtXpG0#m1brY7iCXI--CB4IpA z;&Ox8Qr#(SGQ@fWaRpp{5H}3^`OyUWq$H!1+KMoPM)=TOh5okx)%bUA!5nL<546$*Qk-hkclA&B{ zCH5xdk};+uAdQfoI#G)v&<>E`!^gjvEPFW|DsN*GIXXMhw%hWw{1(p}-c zELw2N#e(5JtuweWJj@>%_v$ovE@@$+f^?ith_%Ez^fvJj@ldgz7^k~Rjr7g*t@IfBkMvafA$mIf z2>oaJ1NtNS6Z$K96TO+9MBk6uU?Z_b6EQz*EvAo6#Vj$ak(80@*g>%}l`d-&n761! z)Iro?Vl{d{v6a}Du143OYteP+y|6_SFkfu7_>ou%OBGYGbb22#MN-n0#R?+}_NR`O z#K?>|Y5$-?eUv~lyr+!w0tN_?Tz^0WHISk(SZFNXxi`7Rf~KAeK8w z1u)Z)HPY#)(mE14d}6u8u5lj?KnLU9fyq45;SPb@gP!pGWG1Tov##++j(mLWk_8*}eUA;$|$H%@SXpGNz zj8YNjXIxNKkfSvB%Kr zEGl!!WH2HfCW$LdI!_YAOlpHkT%wO0rS9FNF3jriR%G1jxc5N&oNGku-Z4UYRo*Qk ztC2ZCoz=)L*%tAtJE2ybz0G#MmIA1yLE)XSo*{bqIK&8k!A_9 z#XF5PDbu?;Ku}fp?hoxF=LdB6$F2|DNs@Pbq$Awb>FG3@k^LfXIFsgw%rrqg?&9eD zN5npLZ>01;a&E{DkRnV@pnT%jbnn%GAqsaXnV{r4IV?qkGaEi(>K-1t49w{c8y)1W zD}x`z_Gd`%#L?{83??$DnIM-WKIcdCkGz}k8MDhC%qlkdVqg%6bQY;SBOxSRJtq$OvjjHGGHx-B7%{WL!q0U;nXBo)97Bs4TMdoB}hTW|z2105VD za)!tx{O1I;!a5g&Q=zcV71nvTuIlGJ5QTM)90U+-=wZ%B&v+Epx!ltnnZ2p7&bvOu zP*~^EC!7lFTy}rF!_-$;=YM5^lFw4U#KJ|kv%)%;pz43sI=8kaR{^2dOC+m-lvYYs z&!Ba9>L^V5*wV!|oe_|#hEiq!-Ufxq2ZZvgks*^VO7H;3BMd#uj38fKgJ{{-@1x{7 z;MS4fYLI1svj)oJ$%O?wvVUVlt_?ytWb1+Cazl_@dnS1U5Uu`Jg*&zKtC1w>op1V) z|GVnHdj;jwr5TShx~!lq4tO{}5MJ+_5i;Z3iv9bJK|jaAPKEt3?Dmosl$z)Z3mAn! zV+%*Lg0kcNNy&FfCbXj*uzmRoN(cM!V3v`gVg;pyaf%g`|M%W6mad?@ER~r6guh)u z$=lMC6_je^eXDSI2#Nj!9$IzzzrK1BsfSNjPk!k6>Pd7*uCr%~m6Kf`gps~$#|`A3 zF921noJ78V*C${Q@psR_Ad6z<H;JBTe7pivv2IeaZt}B>O(nN!-MNZ&lQ3`ogEg3nb(5WM;VITlqIcvv z-nRP!k5RF1lGIy@b(4~J&J^n=NsEqLum@sUv2GG(hhp8NV%?;dV%?!`5K71lYdXzcD=7z*ngR)fgBFsFE{3Ee?Mo`~YDCbHmN0CO=s<=>V$;JJ;!aylQe3%Ku-!YSP1ITv_+4COK5us!4Kb6)b)o z1Oe$6p4G@NJi`%|Ji!rGO{&R#cM^Sa5}zh5_T{T4CI276>=Q1_|91+rzy12B?teem zpG@~#^{flmrM&7q;h2u%r{I8s0}2i(IH2Hwf&>58IIuyyK^zM^I^L6>6;}#QC@`Uz z4+_bkkctvrpwI{kjiAs73XP!92nvm$&#+h6-({(1r?asL+NA zZK%+O3T>#+h6-({(1r?asL+NAZK%+O3T>#+h6-({(1r?asL+NAZK%+O3T>#+h6-({ z(1r?asL+NAZK%+O3T>#+h6-({(1r?asL+Q0TiOuAi4DXOBAAFExWrrtEhn6aiNrW! zAu)rX6L!Qj!h{%3&?yj-*~cqRQCj82-J$o4<$xG z+q5A(7Fs$OLQp&22K{Y@-inESklF{@HUdi1p{-Ma#xN+a3q5{?zrpMAI{ZHV6n~9B zhITy#{N3Tp-TFuNXq*#4kiC{LVnyarosCM;_5#z}_}u4YZ912wwy3n@!G}Am~4m3Jmxyfi@##FM)n6A!k?sqy|77i=0FDFyChYA5DO(<6s;Hz<3XY z(NQBPFy0>k)sOL?@l$vSUWDi2S@=o(IG&B?;AhFuaXb^^;_==1K71#>3*Uxs#kb(G z_#S*cz8a6fH$X}y%3v-e+RMK@ECkM{I=pz zxF62Im*8uGN+ceH`{SYbGJH864XL|;Qa*kHzknCwxp2+^+UMb%gP*}KL+Ap25kHNW z!Lbb5m;#hHLzz8rT!)9@f%trU4(^P*;P$vLJ{Na_-!yzC?upOCgP{fn?g903Z~?v% z+Ory3cL=B)f||0S|G7}xVW|Ba{7yst<-nJ6{2E@3R{@{iAXxzOQ3+;?7R=cpfag9S zHQI?@z|&zcYGZ-VMlcJ^P_l<|V|5;&TJJhcPairT>fDZ3cj>jfBegCoMDFU0sm zXf?41T7l|c5A$&&oHxNdjRc9k0`Sa*^sga|BsiKIzRL}Mdtk1kKI|q-ZG^aO zFdMc(Y!dMk^dXkiBikXj0P30t{QL?iB7K1L&uI7=!*2%cbAac=U?$LETvVamM$p%R zFis<3Oozi5(Lm<)1^KH7KYic;6SRvR%u7QUC3`q8hF*<=GDv5-z^n{~+B`r$&4gqX!x~Yv>W1j(joWr?+a`(`7P~7ZE;cqUHYR3Qd~9rd zLR@@2Tqh(XrlqB(2~)*sL(?-;Q_|BClak>tDK0)GF+MppH8~|cJta9sm^umq8Ce-= znHg}*$jVI5OixWqgFQ1VJ109kCnq;ASCoxsWfB>wsiG8dk|Y3@dFd5te=^5toWeluIvND!+6|RE}4aiz?d7g%#p* zrHaam@=NdGTwYO*VyncJ?NwN%sH(j}RE|}MAf!}XQ&m+-sj9B25mw>VRibKf6;>gv z#wy=KZmg=kny9I+7S$+MSHZdFLp4?fiLi^Slu=QX2E|&dRjVqi%FCffVY#SsP(?X( ztS~<-X;)N$x7EZUIvN^k8hwXQ$7_t&H?^>yIn%+_*-7NAh9s;?LFUjzOQIL z#gF0dFJg;9LxhHkxO$;nUKF3dCVIo>ZM$OQ;uGTGF9F6dE*>rt5)(xUSfVINlt?5c zB5tSjPD@YE%zyz(&(6%s1+M26wiT%51FsR6fmy;5tW;R0223vlb^%i=)vGEhD{E@1 ztEy{7HR8Hq^>^y(YHRE2?$q9?ufKEePEB1^1@NydCw8d`{u&#kZR#DBly|ABrnc_R zo!Yv`PhY-$-PqjP(xTSV+S)E|Z*OgH5G%#**tT(lC>mcACECzupaY^r^|+Y$S5;Fm4T73YZy zbn^2MPjYkf3yKQ>eZo>vv35ZrpfWG7pb+p`Sd73YCIKiap_G=CmbR9)0OqhV(It@- zb)r%N;@iq3xFY~}qB7wnqO2UwB0w1hfezp$2Ry9u&nhthQXODeQ2}_XA^}9HtU{=3 z>HwRlTB)X*gqtdY8;nX#d$q6%t8NEeqO+)`rCNyuny_L3z#T>gp}wRbHzRRd#8P*Y z(S3D9YD(I@`wttfIac4q!pg?V+R4?~LF6oUS9W!G_w?}*&DZpuKi?N2Er87q5H0V= z4GrZk2c$(rM6TJedE>TSfUkH_9F`!A6UXCm32lk(Ny0=dNti-O1(u64#F;7?Sy^b> z3-hpiVS!q4A>t=YPzoFYWE7aOaMCRWu0Z?Bp~ICG(C+qXyr!=Gj<{AC@Ksk|FRIgo z?pBqT78j(g@$CN!>pyxve^+|JrD{OnJwRgp9S>jA_j%GH1C>>@Jf|>|`m64T`gM?eg01{nL z68!JaImxA=rH=6oPDPCnup8c!_3gg}71#;_E{N20{+WyUJ!#rXhfd zE3^^7DuLhCO}pe+vjT5OxTE7$o3Tr1&CH)?Td!(hP~Ts%l{kR^3)3 zt`=26bx4i^ZiSZyl$93dWu?ZfS?*~)w!g9xhAXS-^d2@sY4k+8iG|3TnCa{)a>krQ z9uwR>0BQ5*!=JCO-%>ytKy5joEEIk`eq>}sL=+6)wjD9;v6T3@m{?&P1qLKu2=eSb zNHPp2FP7GxshN=pFw4ow2hIXx0c(XA$yYJh#-$+k2~Z$yB`OGKWo5vR{vd&21_7vQ z?|^(l!t4$Ng!LMAm6a8j3Uf0Oc&4wgL25PuJJRyXDynMh0BQC2>hC>%`n2Ko+t;E- zys<^ps@&4t+}Pg!LQDl!x^Y8vR21mZjhjIX$AB7*1w~4VvN*tYtsGFB*{GA58Ay(SQbp1%8_rod zxp2xzR|3?gKmnz61UXS!uk?&;5^y;nun=4FM7b2CT1Ca}CB2FZAR;%fP?7@Lv=tC1 zE|dy0VVM%JNrE|5fE8R^0?>&7aH6sgQqZ-QipxMUmf@Gm+Ap=26Qt@?23P_5L;yP2 zD;ukHDp3T;A4mYWA-!6S!1lhH09`7qZU&%{DiW|J16q5v3V;hqHDNUcorOq;)$1fH_~^rG6ydM9VQyq2f?6ZwNn<&yR?TTC;f@s3Fjvpg{p_aWNp~+T-xV z1Yx2$3B*NGD%d$NqeWoBq^FBAm9mhrB9s8HfPxGbaiJ2DaAogde(IJ%3t?^o2f)4n zE{LjBYe01Z;E;^Fr+KHYy1c9)J2jqbqx=ff?d{Ev%_=AZ%?XgJt*sY56g^e}>Gtw% zW3#wfy`{Ce@oi%xXwjEqYTPa`;MPP&A>bkP38>o<6B7&a3=}9b;Q)0Bi3tgD2`NcQ zDaoJ(+fxUF`bT@(oaylbf59Bg`5Ek_|~a5^jJp zP^y4KKwBz~EIn~bFR6F~lMhe{rd=*bv0MzWhUevr5T;7-;sO!G5e0?$Ap7#cpeq2| zO;oG|=3Gh1`%)D-n+@~Tnp+4DIk;;qAHQBBh8{q+GWKcERtg)86I?MU%U;Y;A%SkRR#_lJJHYr zWS#O%Cjg$S$V2E!@%Hid5&8C6%3y$;Th3k%f{x4MqJxmH5*f8-!-gHZT4V6I__kPa zj5wAO10y3$>;*O(3>`UoNYSKcND!Bk*Pg3^<~7OD!eUjVTS3f$p^Mm9F1kcO6I+p_ zhjvTw28a{g(X78yTU}m~owAGPI^rd!Hq2u~Vs;sbLt(8-4Onvz8=eB-p1y2&-Prh6 z+)Ok!H@CsHAK{gZK7S2*q9x=M6s$dfHfrXL~)wP_>4RW=UkOz1#jJZMtrOneMvfGGs-Ln;6=H7x@GnVFU;%oXOSfjtU>4WK4U2mP8M zPFE#uH9#Da^%Qd2K>!EYn68|a2_6GXJ0XcUN&!eWVWAqJsu;Nu1t0Q71)@R>cA~ft z)PcAd`#j#>l2~g4yfu}HOT}QQT`Ct|f`OL64(U@;qyauE!2_tQY6XC`RS;mUkiGx_ z4XbQJV5@jfVv9r~Qm{2u!WyC$U<0rd!LB0JJV+D@Yg!RDf#$%f3Q~QS!Pu1+=4YoR zY+LRF(oFdSxb_-4y^&L(Z)j>^Wo~fw2afpa3ft z7a)#_08qdLm{Fo~kpJbqVRC^`uY_p?x)XF_U2Xdv)#~!%jJU}8v=^BAOzyVy+_Gvw zoTwJ&PMylVhc6o*);|Pz%h~o!?1OpMA1Z_=8K~5+*0x8MKa83~=h!e+v_DoEKZh?A*c*vFlh=Xo{ zxJm>2KZpDiWh)`QnJG-yhB*Xc4RDo_0j{YKPzCvgsamKM5X~fgRD>!eG`+xX9Z(4P zDJdz;0|x*!Wjs zg98A{!^0h6N`nNHzdzfb%@!`#1m7|gyi8sM7-OPHtu-4qZrm0Fj@k|ws`eNHZWM@O z2=FsSiFg7+6=)RDBw!SSumU4F8_Q|WMTRo+`|}D45G%#Nv%(S(Rjnl&$Y)2|5lM1{ zFfdyOfR9-R)>u7Q_F$XURhQ%>tyyZS46@23U~^(tF?f}tI;>Vy*Q*xX&wCFa-@9|~ z@ypk5!4?xYYc@8wv^O`l0K{6_UyD`22LQt?dV?rR1MYC_iUqGFHa<=SnsH!!+^)Dp zu=5kqlt@lVO93GZ4rH<@$pEw=XvoCGghWu0i2yCI+maGfQW6nX5CoAR&d3C92!C+1 z0$fW{TJ`a5WpZ2`~ZY65MLmq@O;pR;u3XmE&*`h zUls@mBX;^rE)9zystwc@-!d z6$)ZcpFVq9`>ei!Li5E7VApJ781(66p?LkE0}8lVfvLCMVf;1IYQ zB;Pp06a>nT?pTpT4uZop7xls%h1k-<;)=7JT6C7PxLDT%YwPZM7P>|lu%&{z5Dubj z5X2=3@MthZGoBA607?e$dy)0|;m`G@CstlzGr4hX1OC5f@49=gZt-jT2M5#vCsH#m zQkUMu#l>afM>k_+urJkF=E=G_u81ttnh3wfJ zFh;QnQFE5B!~MY%7+YC`jzRs4);EFy!aVN;GQ~02m`xbVfVDdCe{hDD;Zkhcz{(At zh0a2D;Dj9Dm^h|%xD~chFknDjw2EN%mS{ix_8c&{n?7Dm=(z=22v9I~l(NX#wioJ~ z4q!@quqz^#A@oVgN@u%}obrudiJ<{DQ8#`gwdsbg1=p75CQ&XLAC=`?SRQYFNq%8z z+5M_&=sifPe^v+2YJAb$)a1N$-~P{U-o9@ke8I8AvOawzetl|f?@&G2*{eTLZ=c@! zNsaDc){uz)@Mv=UHjJ4+*#xOY7dII~7q+uxFS-lXqO&480lg3MTA<~i_HeC*lKlUb zf+fW-8E zgX(bu9WoqPU78u|ZADcr@d`3|H}VTgR1j7_dh!Gk^{mcm@HUe3njKiV_wBou4@j!t z3o*b($N@1OT|lP07Y(8pnX;f)L1+k>e2^@H8Zl8cMlKnqOq}GRCL@wT z5_|&c=mxXN-njgae;nK6{Y=MG*!lm6Y9kQ2h`= zy|%87AmcRTH8#O;UcPz-l$>|&doLUZHT|Q9X!9xSGg#{EXmdLLiH~iqz)3PdKdQCF zYN9-)w7{gM&iLf?EZ5({d}{GFFSW@|h7i!?p!8n{Plf7|!57hg`&>$9`V^W&4_+~cE@ zQ?$>M^GlGml0OFIC3k`>@b3)fqtgzfm??`wVw}l5B_y;c75?^=J86xl6mB4EQ=n;L zB01@f-w~+DGXzhFi-?UF&D?^sock^K%+Didy0aEcC{vjXC`}j58c|(DNM)X?joEq9 z8kGjplf?B*aT^l$sxKXtC~8;TZ@{|#4Oqmc^>y%*LH+jkxN-wO27l!zs_lT46GU*Q z`uzqg&*oNwSo8~6Q5{EQNe3b!E2%(pj`Hb1Zd8haCB9CH8;bzh@Mc5UL zdx+#mN2mLH$9vIud?$XAI6soQzLOW>zSGl-Bl6dYYc1U#9UdfsAt?0{pOjOjUpjDP zA90B=WKVb|$DOepF&k ztARzJmcC10hBDvzohl1Arl-UGnN+r0NkY!=kP%%5MqAr(9XiVi!NnmuS&_dGZjuP& zD!F`A?h!RzT(odF4c`e|1;Pu3)x3YW>up_S;V;1DhaB?PeL5@ji))|4Y^dfNow!<+>dib;dKeWSt4G zA0c=lHE#qs$-ef&HOVI8kSnVj>r@PZ)Or>X8n6UY0WTCMAn_K!Q2vFfHBtTpOH;kC z9-LbLTvYp}ePC*lI1X2inr;h7Iiz$yf)T6I-;eHHrq0g~`O&e7=A8CgFEdbX(8h$DdMdK5*5iR1GJ>(tl2BDV#$0po-CyNJzDfisd};uT)vX-&q99*W$vdHnc^Q=9o%$*SIM$RS-dqf@^EI+<_YzI|u66uxZ{2QqP{t-VzQ z+4=Ynrl@LFeclB(MiUyKBte6Ned_YW?J;l9WdfFYXYrOHKI$S!H{o@r3y`niyP;SE zfI^5Eo&eXAN=`bQ!F)<|J=cw8|8QGl(WzDNq@`n(crOruN<)g?5eLZxryUDb|5IJ_3Vo3ty zD7-BNHoW8}z(lTcO~>apL z(}fkA+gE9e0YihrKT}Z1Ymlzmc_@q-CS-@zDONc}07{Xwex*xd@fGdhuZTMi`RY9S ziv%3$iB#h1k*JPRdBua0=)JtY{3(L#Xwp5OU%;DzPu~5ULYf@F2SvKJ_AzwlS)Ia; zQFKI|U%q?=d3N6Bz2lPt5H*$4O0Vr>*83LqK%mlm*M7URo2F^+0CpouzbbLLTBUpV z^m4%j77N9jk!p?nJ3GIKjF`{MqBkJ4N`_7bv-O07bU;)=NG;2vr8d?5rsCAfzW<`F ze`02F%?bPi;E7R&Q-{NK_K!~Ekyto(>bmfqgTo`_>5~h`b=>@fdl(Hy!@)@WoaDF~y>C9sVqy41yNsX1|j#DatK+Bw{Usqz6-)TVN#Y^mK)YABFHt&X;{;aO874&^HeU@lBvKMVbRVJa&$l<3#i2+c0U0Koh1nCw{yYSX)_` z8ftsHqV}ss_N?L%Qm9hG&a6K3MA-&8~Y82dHov9ya6MrPk;E> z!uM}qzk7?QLkaeo>Z=Wo1L=e!k2)g`4islfy>!Bh#8;D|q?65{qp7kbWUsAV!!^c* zMg2+H=>%_yD2pWX5(LtGkXI&ab!C2}y}sx#)<5SxZ|fhQURYTR$d^Jp!?ZgfH+u&s z=h5KG%GQ3$JwGIG#ZS&pskYqw)5vCk2(`Kxh{X?6zq;1t_rq}H?ymMW!X(VTUl5mE zU_j%JWf4i#)vz%xO-*4&NpUL~o22NXli>$Rs?Dd#St87i- zUZTXDoxYm$P;_zK5R|6T58b((^h+YY%5oBVoLaR|o}tOyj86iP*u<8cwROD+8xoom zpd_87e#gjp04tb?F!ARqoNbCKJ~#>|#$S@bOJqfUmi6cxK2$uppu-^*Nk~Q&R1{Iy zwg7;IgKNr0A74DV>jN8}yleF9D@aF=fW#uLYYopoJ=3RJgsZ4Roj`A-Y3=QDMpUCZc?&EU(DBu!x&SnipPe4&*vydmfwnpzq>1uJZzvZ##FV>Cx<}Tt1_ONx>Oaw>VZmDTi zV1zrmIFE#fCztmr#t#6^(ZyxbwcVSiXR+u;I1~*9!W-d(v-8x2dvjzE#|U7S&854C z-WT02$S*N)93*6`lLb8ZyJz#~moz-;j1`Sf$do_{ML5(06j1DmEWTDqN%`%`6wj4< zN!iFmlN_Ehk%YKm&t{uii9o7?+~p2#3mNhyEoG`jlY-CqATgvQk`qoE`e1~Sl#%sv zH>jz|z+5*9CDMc`4q!9?Di??owu0vvEG2aDjlFq|bR}U_0R^mFf{+xw0s0XF%bBUP zFGx596K*c0(FJfxJC3CJ$+mP`Jjl=&$iUk2%vjHd=QV|AAjWsCu%rUs3u35~>{_pC zCA^Yulcy2+=5`ZF2w?CIc1$>VPs#nkeRtz^Gfjur6yydmpCQ6`+tn=X?ZLJq^XsVc zJR-0W(iMlD`J03jRpP{XE?87iE+2a}OI}pMiM@{7kMi0H=BtESTV4TQ!ylhfB4w4m z9q{8AbizJzkFc`$gSuM0!C1~twq^#p{A;A5P$(AM*gH+SuA6nV7mr1dMq@dMgVE4N z1X#I6^cT9jJEdY1O>jjiU8bYpetgb93zd944foZZU2z+G>sn-UV|8h2u>H-`iahY*%X?T{djEdaL-6vX zmiJm32b9)umKV6tnw5j_qP={nuYnHspf~SZoOf9SoR<=b8+|WCXj+^Pw?D#$TdA75 z`+5gqEqbB#vRb6_YpN2s#Sbu6i_D!vXbj56jX-Oge{*nGVwlm%jP7k(M=O-psmV?n?aA$2~>Gbq6aUR?J z;UGT!uBU%#d}t{U+SobRKaNIrVld;wv-49M6Xei954Zs`PS>?=I4`h4r@^{8o~_Qu zD7d!A-N{TqKW>jXBkt%8gPk$@2cz^nr)K=gi9F$j9vg9o*pc*m4V^WWl1Pg}&1{Zf z0ZeA*vgiDM0?zELt;Q#mcX4r6W^iyK&YP9S%Sw`~2;Tv)fva#m2`#V{XG1TMvW>c$ z7p5l2pve52K=U6+5}u&M7x7w&c}deXNb=Vwbo|0i{KPhG$)r3M;$KJWV}$F5Y6?7tfn0uR#h{ zGCrg5k)U3|THdt)o7XR2y=bg!kZOZpTYUxUZul>0NfvF906a4)H`Gx^j+nVk{UCk| zD>NNJ^_LfxaAIJYQi8sXBtcZg{<=XU%s)9c*!#J@=x3{_;$`RX+k6x>*4S& zOlIG9zeAVlr9kTJk+TeKn?NI=j6rlQ48NI#M|2ry+@pf2M0%fE4obDOo5pw=ShXi) z2q5cDQV~t5Vc^W<0vQuQ6hbg@&q|!J=krKSi=w(*IqrrCP@Vr5LQG*sNm-Rs zeI2|!rX->+qSNHmT{n6RkP%>BI?X0Oxy_GXLRtV!%UeLy)Cd`_Qw!4=u0On2$qm=# zs+H4PEpPq+(!BsoYR1PUg-=-$tGYNuXGA!y$cE9{Gwz%R3m$X#2~_q#7&GRICzlp&}oRh#v~?dqHeBv!*3-nS5JNJuJ)y1Kbci7d{@ZN(L(Y0($Bt?D4Z zKRKDje2(mL7V6da(ieCqWApT>pqKFm^>?&1KQ8>)%FnNF9iCcP3vO=HUc$qb+RdP) z?O=ZR0|>$QaIm%$US11Dr#Jl3lg+KuN!T3}W-*vC}!}*aM+E(@3h;#&McC#srkXv?llY4)_`*3o2d^*1onVemmo0?rbIFAK) z!*i>_7~13y>f_AM_F?^-T%KK8TMlgQ;6**y3de(C+btU$=v8<@uI}mS>^8o7gxztt z7uB(n5n8}?LJTc=SiDRf&giX?;ql?IZ&rMQ%mk&hGgSnYp@2f9oFV}eQV~~3J2ySF_dnPP5=lg&t=aRR-FJ zPHcmvOsYtV1#82G*BDC;tXI7QtX=B+O1EOTBb*3j8*v7K=HF05#f?uj{Xt{cBp-V- z3z!Kij=nO4kpe??7JLR6(aF3Jcc$YV$rLw8ZC^rqJW&cQFa5s=)SCGajcw>=CPkb` z{#FDvWNpbm)bXaSg1_dC{E~anpPGk{A3uDoq~_G+)f=k~XnTRDxfI&`9Hv9?LO2#b ze)sm(D}qy7?`eIuDL+WNm#M`+O;Lhv$(b#Xj6r3NlR$JC zTHslv1Gu60qw~w_L9P}gJ(Abnp0k@NPiktf z99?Gr@bLKTd}(!kWojcitT0-tW2bGx(kitk$^-)LGU7*IitDI9qutvYN&c}Y=W_(3Cx9q<0Jhtu8xxa zc=$NwIYA4V2RJEs5xNknoVh#%8q(GbU?ZJp8xIc8Un(F!vHVGFJmood@WIx zbIB>SulWqhV9Z|yFKTuJFOOy-aXK?Mlx|GfvIc@E)MA6Ht8b{nWAGo`p$L{n)^(_5 zNTJJQIZ1!ljGalACQzo%r`%pZi;Ra8Cn_6io}rwkn+&y<$1C+$e963(`i3ug`+Tb#qhwGsCWwHC3&>c3!zJ|K;^N0M;tbq}&2$Wxzo-i>`0kdeM;QdBKei zPikP`&$GlJmuG$fhu2cR>D^GdPY!go)ZhQfx>3_Qy09DwAXlW_f%cxYOCF4;jer?I z&N=%2JaxLgys#Zw*bL6kY#koqpWj%RnqFO5{~>a)!(htz{Pf%=`0}qVFNC(YHv=mR z3)5>rY_J~#3A&)unbCvxGiVKA(PqHOWWG$C^#rgRBV$-?hX#Px@bCb!%o!<>P(I2P z!~=O z+;82k(?Fr1CUA*E>x0~)(4}y4(`T5qT3&)0UP3^H7zC`8G#RWFe(de93SdOEE2cNn zk~2F%;fdnjYzXSAReMCo9`me3z2H`cd++Q=4aSW%NXVWi>ht|3}@kdID7~ zjEY?O>Lt1Jc|Euy)Tz>IkS47f@8wHo(>~(W=;-b@3K1L&9%2-Eid%&!r3lefg5u4bXL001-J@D!odp}l8k8P&+IjX zAuxqE127pKfC)&U3YtYQ(}bu74m5p?36)!t0EVm&sJR{S$%U#&&S`Anv+niFkM?6yDhiVai%q4xc-24)UYo zRY#}On~y_@n4}y?-)#I#2h08-X>6GiPi(GLKTD(4k!zGC~AGWzFp2Su+k`o2F!5( zpa-b7OG$fN^J=&ewar3K5~OrPuMS+26Kw!RY*K49s?6}^+UTD12mDAaS>!-JGXb>%o z@z@dNGejk#R0e{QGwAE5CDPxQ?9U%SndiYh{nU(uxalzgafu+6VQvy2Xu#WkFQ^fJ zx@HUU$I+WOe3&kJ()1|9r*p==~uH*?p zvXRmBaFpzThOzG&G`TodjcWrGc|vH{>9#Xprp-TbO>GNHy5Fk_P(04639T*04j}o? zW(G)NN^w)JWjbk5#&{UMVDuHwDx4~96H98|TCoZk;eI7D(Q>1aQWP=MJ-{&(SYMnT z?RxjD!uz9j!(D({sC_7}8z~p%=ARFZOBe9#qvle8{g!j3V{n9eRiLqqU<$jzkO|unm&}Y+6fM$h`uQGn1_%e0F+rLeunE zC6q*vm#MtETACge!=;{l?3k&Mydk!= zvmJ~cA03{Y93CD3q4JgG^@YIR&ieLV@E~>Rx)*Wz?L&c$)%D0BSjz$^3Q+JVy2H*u zrb=38IA?T-Vv*=WkSb?jQ7$4Z2Rs<~^)VxdCV?*7$Au$w6@e;xY0@D`aq66L#W2Z8 zyj8k$778S*C<`h&p?4>VT6pCR@k&j5Wo}imvU*)CJ#7XeP<^5MiW%0QzoCh z9I7HsPBc%5N;_9Ulw|K*S%i4qAQ8-!sagb1&Q=n08Qp(8t?LU@gKaNs3XiQHJOw4C zcOTF(dHj@~Ni6|NlhmS64UJBd`@(H3c`n_mp}y|PFZV=(jztRA6mRb^K`xc{Jv z2+0Cse5-bQZ5m5f@?CJHSdp%yGuZ z49rZT`m||S(aVNTeGMg$uY5p@`{7f;B)IYf!+$38rGA4JP1`_FlRcW+cQ$Vs9RjEk zzx1A-`EgBF)LO^v{%YEW29ZwU~&aw9jSHehF3 zTbaiQQ2!wB*t%oM1ps4z{FvbNmYh?8?mh755%EmH)No5v+?m+C)-(la5^oTyj(6x-l<4dIJ3f`fhYfl}R8Mj-S;y z<2PxQX}(Oge`iPQo2PewvI-09KMqdJFJrr>M5ZSfCtxLT-#hUnDntArP80X+?EGja z5{$-UhtcT%*)gN~XQ!8kJE8Kx>Q*osS=io;UTp5pY;T?(hXPxh>l;f;Ynywgm#2k; zJv|-m9heq~L0x?VeSJ9e-BEWW%S0?z_b@z`gY~FSLyTQEQz%wm0g$;lLL&$deOb!&H_<|$}LnnN>bJ@~IHPVr*(8jDR7o3gK01lxEw0`N& z<1_+v%*T zN|!(_CL*zPX_?+Gj2Fo<2O&a)Yhv^U%{7c<7+G1S^Zv!d957b%wsT~5ag{4`6W^o8 zU#}F+lBf;N?mrl7$^M~Gb#Zwbk1!UrwYRfH+YYROv-6Wkc`&pc3N5Wic2m3VMd0)x zl?r2xix33Du>%G}ZVuAS>i}n%2ZWtIruRMCr{YmpFBek@@)p7ZA5Dv%|^mN@(G2y+5o{vKQZ12QjMX|l@N z`nq`qUr*0L5V}+yI$KO3qGa`>&&wnun5Geg{x&)tUW8X>BC^5{|31K{G6x+VWyR$6xV zURf#AXZI@~J$gtst#819@(NV}Lt8scxUZi{WVkpl-F$NC*1{Zpb~#P4q0rq!-We$v z9@MBsciX4;?_NKz$~m!adul%njL$5sZXna~w4_nR0nU|%R2h#}#Rq7Z*hnPK4t5Z+ zcJ_Hlgk4-m6oSXQTjl7c`u8z~=cBgvoh)Dq*n0rq*5i4!dW(&zkJ_Zz;Hfhd8 z5061Jzyds+84oJ(449zYg=bORa_!LQLw?sZB3eQT6$;X@KxJm?K#f2{s9MZaDZLcyJqx=(|X zbIWq>%Q+C+iK@P%Sz{A!X!e<~WAAwxD?2=PPD@xhbF#k^i7^!v+uV$wU!KIG0A;0o zB@~aGU2LB2UPe#$mJZG$`@6Bd?fvtEgCl@34t;Xj&YL8tX zpF}Pv5CRw0zjeDHC2_by~>vzLv;66 zkJ#JDF)KHcfB_aKf(iPz9Cnm9-1F^kB6oqggdUTXH*~IfQQ9kKk z3vC9^5=T^x(aqy?Nc_S64tqo{67KoY{%#qyoE)D@Z0+q`ND2a(v67R}Fc(aWF#b5u zPgLseO5%W0esh7?_i~+g(~u@cadq%pBjaO~BV0$ay^-9YMPTYC9LgB{VN`~nqaKjL z=I5luX>p+GCpiB6X>s?oy%c(hi;|a&=#*N_;xn(Fpk@ZtkoN@xmaC(^N$&AP5Zf zq5t5U9~;XZ85-(o|MccXZ3VO_@5zV0$$137HJA~)W^5<1mjRfPD@juTULQ}8Z?@}OM$7YO6 zQkpFA0XrIb1wqbCCa@Cwp0$iAn`Hu$5->Yq!kzJfA+Y7l7xSBRIuQ-DbwHa%^ntM} z7FjG6rvsA&b*ewyVCxd5))QLVhGwqbi-^&WK@#16CfdiWztg5IAu6F5#sk>nAbk_# z6FE(x$ij-CjYR3C3ucWZ(9vMEt=ata{Mik3Oi2VQi&H}#@9HZH4P?9p>?X3Sb7}+` zjVwCPa~so<2Quw6xb?Tt4b(QKXsfQgS6r0mwJgW;zx(po3s`jb{(T4)LKKi`Xl|y5 zEF(9AMH&h*?nxnrVbDdoEJ#eyREBtH#K^}u})51pfn8@$sC8NpSEv*Z!bk09|1~s z4`31-y6Vp0qtoq^jM>}g^yfgO!55Bg<`1De_--}3nD)O3FKpU{C$rB(%Re-chErQP zZu%BKQaU5n5L7?~mE6^0UOL9;vH~nOL6EW-8k6)V$(M9iFjmTgV4QN=UGWVvhybCh z|3BFL$w0+nzR_dm*UU03B8(wHcypsJMOT^xY3iN=jCe!+PbWCREr~-awWYNlIGMwt z_2q>rMx~#W`GlE556()h@4yH}Cx!e(aIqR~_%l4ZF^d$29qyS^pU3Cgn#zij!aVPl z^}qV^3ySY*T3iY0uSICuELwPadA)s4iizlaBzAaofF{n|VjNh7GBx{QxBU_N+{V-pa3Bh5Y6US;t`z1I zDCW?m1U0C%^s@D%LLZ!(^Kc@ z+HQ>Jw6e0fgN9bVv^>AO>_=odz(jDqIyw_U^xlV4hr4l7quI=<*L&)kM@sCf=6DU$M znIbgKOg;!vV+5p7sKaD(L|=%iGx)bHcB8q|UV;lhq44st>%lm1S=H?agH_?VKOw@rjGgl<78qR89k_0MOKt#%;Wn`gK$T1@KMd;7` z;Lk`xRQaOMblOB`bZhKvOzwkeRQnt6C>|SL}b+uEIqxLNXhb;9Xqlq<*&+jxgsAEfemiDbGvZpl< z?iLl~Tw0G9t(?1!pZn42mYG0v11yB2nMiNPtY@@M*!fBccD0vdsPWOs`MGoH zrV1}F*r0d9nDh<{xr4jAt25Vat$W-5@eucF(nLX4DjeM3xnR+#bA7z)6gHn3atH zV-9CF_S+PV#owTWqHVa10S%*!bggX-Q2UF3n2d8&XL34GoPisA;g+E_3P!5w0hP&F zc^EO#8`W^b3&0YP_0*bH#PDuw3*ov<0c;ZuhED$uKdhn(pVJ}vzXYAMp7;$qxG0eg z#b~I{O+pfkenZVQt)G%+2&2I{U{m&|@wUZx*V)0iwlF=~-O~85)bk&fO_4>NRO3|V ziKnRF4`^8G*+j;w_kxv%2IpCx>MSI~2SlG=t^2Ikrg?%>04_`~jiEL6exmkh*q;3u zyqv^g+SWxB4h*BQTNB4wS0`#q>!)`aFRFb%THhDdz3U#Enq5K~r2QDsg@KL(6PCIj zBUh=G5@0N%&<_xsb5j|y{^k7ah>>VUMmET6;hCB8xuK!4p{~*P(b)N=d$=+iJ~)92 z?Zsj^*|&D05pP#VdmDhc*{)4lz@o3K8_VSYEwr(G?U`k88o&r1tpDUwlFt^2%k9Zd zmr}ibsop}fAZc6~im*a-CI676V8c{XH<6{Oq0}j)y@T3?tve?jj?f0hmF?+lvKvrA zA|fQ^3LoSwr7bDY3OXt6r(}#V$wz1n9$i_HJOMU%Xvvg7^2^^Kgyz0PLog!R`+uVi zBIRgftnnE|)B_{HD1J~uffxWmI6=_S=!m_Yry5G6hY!DFgkqdP6U<#-oSo|b)LeV7 z;E=ddK(~y*Qbj*P{vme1c(iiZ;W!4BPPb^1)z_J2Wwo?hs|hQ4U#$Ci1;rH=^jsf3 zf&IQ<-#SxjfTXhr13l?!dS;F|OPaog`o&=jLxa62xa^8~|Muk*tK`_a?yG+Bsdv=R z4j8r|lYmY7Rk?>I6?JzqMSicqi0H59;Mh6OxJaZN_Xb<*&QA_cVw;G`TPssz71}<9ldf*Nw-BlW^y$M83(|6M(v(Ly{uL+Ghp|agW>|zBFDi{F$OR0u!GoE4 zR6r9(DA6q`~WSw188nx0WQGn5pzebKEb##i^ z_^YrAp%9W___z46X?9nm76Xlxahd7w4~;Ppk}^Ni*!1GcI%|``zDFAPb@6fiZ%22)#aFoQ)m|?4Y(jxl7>CVb1(&DC$46%ev8_-n zzUUt;e+Scg*VeHbo?}w}IJE1g&f@W-gMG5rR%kmC&OmxewEn~ARzh1>M=wq?tK+6lOT-T47YB#1I=t{vjOB#B7$CVM$tZwiNob+1?j$VY zM?ngHdvuKRXY=qpvf?lAZhYR{^!n}CjDIznx;ThZI2|2H@Y~zl-eNti$uFPn)*GMN zTH9%ucN0En?Du1O%|K9e26IH02o})V?ri9-;zmyb#JF9GDm@TiyVnaDVc~*51J9DG z8-x_i1DVp8JuZ^#lzFs$L(~7@M&*%9Cn4p>XRdSu{gqiooW-5brI4ma1s4G)SnQBs zgcoeVONo^mB6CuMA-3Gs*OF{$&BPrkAi+ z!U=1A866s;QGhNd?VHYuJksM*IX=Iuug-HU22(v1kLzE)`OwurGDXe1&Q;Gq)`A4)KI80mtI7X#vx#;t%j4 zN%?130E7sWXHY`+F)-1vE9*cPysCi2L(CQqyktgf*?^QF=4PqxVGD~RsZDKhB$vO% z3J5VMVI=kw7cehIVm+m@EM>1@3`{sm441`gNd5w8)Y+&rib)DGvXBWu_aH7%7qg-lp-%cP?<%8- zH5AayalmTv>104qQtUg_61u-dPzD#^IT0pKZkLu)$W4mlAYi&!jDj6Qv(S`PLGcz9;PTN z5#T@_LnW^eY*Kgrd^-%+9 zz>&>$f*AHnUIbbTSDIA8d1=O2&0=+yic&XgQxryLB9B9g!Y>FO#Aj@ljlpzT^5X{o zAFv|(ml{TF`>}#QvDcp{75*(RX_G30V-j$2&;u0Pj9LgA3F8q|P?0YuSBBGp&e!#o z1%I-xQ5zE*?vaqH9@|gdXW2Mung}YmXk6%v-E>pjR&%b89zUcyzE{Ya!+-JS6+w#4 zGH_Z2H1a#G9~wv2K-CH@tb@+TBk(7&(H+a26NO z(*gUiF`k*|7>i$Vy{kBOu+i`Z(_nk-P&mdylhBq_rKQB>IcqJ?j^e=Pvix*^YqjTd zbM@n<_KE4CZ8jDjoL?TJ=I+L5NN%hYs4&M0(e{bPC`k!nwzogU$c{6TLq6(5e8w}_ zo&Os=00~8L!l=4wbX1Duf(}xsMh>U(T$`9+=&V_qfLF-y-5DFYg8Q9-F*W&5%y}z6 zVFQ_*oS9;}o^L=Ah!B%u<%{TyVib!(7rt_YSq864ddS&)WsqTm4%;9jNsmbS+g}mE z`X^quMCd=mAssQ!2o+xpEEGs&^kee|Cv-`CGv3pJv{_=oKWeg!=TBBSN1)`(>|(eE zo8C2FW3mjv0?!nn$W@k6Uz&>NvHQ@AVp|MHsrKY>B-uSQ6M0P=LB(4gK=y&t2N2Hr zo6pVxb|#jWXZ_>D9nFc4FgM)u@_9@9STHmfLtooHrBpuJ zLwbpXL(BJR7oyU%wSP8Ea&iSO7=|~7=w#{uo)P}cgbJtUhSH4@*wS>C=5wZK?QgN; zpW!Mr*<}!wP%^F|L4^efiT=34h#@2TMA%3|UKm|9j7G;3a4MNV!FbN}ZP*IgieKTM zAUzp4pqbd;95UbLBD8C6l`sJqeg}k7M|uSHoCK55plR^`HK8I63_E=oRPbl!B>oyL zkXVgY0ya`urW7_JY7#OQC`msORh_B*3KYadjDk(7B}{_zlS3V^*x|k}kQB0j5MPUU z>@y_?5!mM()P%#BFWJD{^n%Y=Vn7L=V*Ke<_sfb|CHBu8vBU1d>PKR~xYXIa0ZJHu zK`>^p%XQ8o5! zXc>1@!amW1(BW0}!ec_xKFK&fF&0B zE|F30sS|=b=P+ro2I8vRLXkY<0~Z7b$De~$57R!E zMuLWPp~$d)5n3ZbmN#>pkQ&WPtkf{}Pv)~U|G-pf;y=OU5~!SggUDCxoFcJi(oab_ zjga8Cd}2!CQ|t!XylhT2iD3#hlkjF!i*e$SXxz;kus}kPjKCb>)%YO)e^^<*{K6u- z%1(6#=y2-tHT*(7Ow6bkTWu;~ltBeCqS`a&sj%BUtfI4A=sCBtJ!wM>zxGEOgfCyd zky6iSD7q#yR$OI^OWFm8zT5u#?uB(}-7c_#@ML$}GAwt~GEMCudA1U{{ImA5#Mz#96G7vAYv5KiuEim>+rj zx}|?+C$=<)moaj9c8H5gX)6|4b~_7DU%`jWcKCoX^^#nYgZVU*DS<>g#67@=90%OQ zJcN^;o@93!K_zWJ9Ub9sZV2EoH=(v+uLcbyzmYYcIJ3~a<(Xigme);h} zKAhoCANmJpwzd_P*5*P7JNuZPSa`Y<4VEI$bF@<%Q>e6(A(^<;S>>d}ezz#*6V6m6KgOS`87y**>Y*8phVnI)5;&1)B9I`=rj|UM{>e<0ar&AQ z0nF|z(6Vn(B1ZqO0KyKz;OMGDMXo|J(GgL;MG|3z6{R$DsA*(B$l&EpvQQgMb~BvN z{%uXM2qV{+g<4;mo9zGCP?Nu}y@I~HLTRr~wXa5<8zwU)q^W30J^ul`m@vX{W&>Lc zP+$opHC2_QnVes&>v=_NB;>Rjvos_1y2Nb3#R;ouJSAP8qXY)p>V03VE32%k@l#h1 z3?zL{2QTEzJU&B+2+s)YYu-MekqU?i@xTNUJD#(z3?pK114Nz?pFE1?n-cdva5Aqbb39&F#v1RW7BIp7!x9Efk-?WD58*Q(;;B& z$drMPT7>D9!9pw$7~}ZROa9Rk4YEvz;t4ve*KpP(+KDt-#g{A|$O<_GHp`!yDkn;4 zVJXv_G9~lQU*9;BRUwmcTo#yWxG-Bvin5YD=`z>pnZkO&>SVB?kvn(B?AIXS$cP|x zka1Y@kfMw+@K~Xp{|T~SqeTur?$%!iz!-0={;J{RS46U5s?TtF3^xW+07}Fq3&7Z3I^eXu*%mSb#x` z^E`u%JPCR^h$IaK_?f^;Ei+HlGo_Td`Ce5skDfgxpwPr|-rRZH^6?|b`!Ux6TKwk1 z80~sh@r#wT%6wJLt^GQ5kx5t$nz7Dt2HvV(xrQNVKhjkIDEPT|sBqm~pYn{jNMg58 zp2-uAQclt2JKEWrUkA98Y*8K4Fi2vYV_b|G? zzPY=-o{cSqP=Zv_c}G414eV-sptk{dH_x0kY4C5?~6CdoHW z&p+@Hm8~B)%QQg|7cPNAc?Kh#*87XrI#c;dJ-my|LQx(6^>pYlECiFv}wfqYIR%B13`Kj8|TffKr>RqXu!Dcr!Wpx%px7zLnuCC@e;J z$HG)4J2$pBntMjF*Q`<@O&yK#GH|H~Lvx44O?e6~)m4=h6-AUf|LB3=5L}RAU%l4a z6y#WJx1Fp^gqqJ6aInn z7uakQU&uOU=Z+H49%Ob8+}xxQc$gMQQkQ$X8)F=3l)o2*sKyV`(H0lON9E^BT_fWh zoINu))IT!2POSsg+=Amq18c$P?&i&|PC=S=Q&csY-bE+LrBOMEeuj}7X43V8X<`dD zX6GQ>MGIegK@7v0DZs;bUEPVELdcegI3a`7B7#C5@|x}15<$}IwX=bh&Xu3B7#zvu zk(^C*li=f*bRtgy^mp2yG^dt|`l|A==Y9BjfJ_3+6fxAN)I&*#u=Z^*E-kc5Y(151 z06+*h39!RB38Cg!Zb?b|XW}U#BQFrXub?hjJX+UiE)p4HtNOw^{(&e%`Z064MwaEy z8_HBX2o(iW6D?#r4B_P-1s)TB3K)OmzszJ3({IloAhLPAJ|a+Vsrtd@I2xz+mbSvF zG@>d}T|`6Zd5W=1mq1isXFtnhS4B-t^@IBrB?O^s1ts^Y8Ggf?^0vi!?|!(&vSe(O z{i+@moX30LR-dXNS@z`BXL^HNZA$i>us(_%AN$Jk8U-_$vSr*uVWT91*l=EzKxFUc z04T&(z-8~yH3U$HrvxI~y>r1%myy}o$ys*D>`_Lu!#}Wjk}7vs@LrFN4-EKw+lLp$ zdP1R#om_V)HU5Sp7qq$|0c_!0Svtplm995BROiAh@* zCSAEbw=lJc(-T9KoOF&dJ1jG}NLXn(ah?0kQ&iqU;Wp!wY_a3m}#^f=nQ1Dv$o zU*SlwIwL$efrQyIaHji0#H_UV1|BXq&v9gP03`87^ac?QMCB?bnU!MTMvDk!t#h`n z@t@gPBN(;6t}XqOCD;@e=a*7T*HkeDAn~N$uFDl(01Y~d4PZFhvGKMFY?aemA;1c{ zDrS__Ma;`7z5lTGNdsLW;pWpV?GaE5QMTl zN<6mB-`2mSH(^s{kVINr0h|Z>1;7C&W05 zv)-L;1)fMc_z-@GQ;E$~_&VJY78B2o_p*Be&DPDy$S*3*D0@(8S33_2!Heo>&8?{) zMDEhCt@9!WNuL^<3fpl%wd@}vun^{ zrXP3Qy(~tFD4S5~?(FVO_YHjP9-UlbF&wf!lWj-)fraw%w)fqG!#$tdTKK$#%6D`U zT!Q8>k-NHmcofa-f(tvHW$+vsn9OEyjfqILL%0PRo$Xzz&YR@4E-@ZJr641pQ>N5A zTYi5fJk{Jc2F!W@lc)gy_;_-{%jiP-aBz2=rQPry2oI_Z0mp-e&sH2Rmf6`U_A$-g z(VP}9$Fw$7fFAQkjG`IIX{pX43xfzU+UlRD8XL8fAOl>o4QzmqjzyE-|1T!2$a<^Q zCck3u*I6{_uI!J5AR5&olb2+<^eWU$j%nFUYImjf^W*!!067{3F`SqZoIxZolz=IJ zZyJe8VB*bB#RZ-;mVwL-fE2?T`cY4b~*cd1~Y4H+kSTsC2G1OMan7@^Czq;CRqKyV+V@~us|DXI{${4rH_dCCUn{4Jlj*iaMe=a!> z$ENzM^sLW~(fc25QzN1;Z;M*oryH^|p?g~Z|CkN;>MsF`G{o`=18;@5h-0~sR60clF&8KgQH-yr=_8)=uei>A2`J(H_5HG(FIZ)Y?o~g226KM< z;gehf42q15u{^>%Io{Xu=ts+QukL?&`;os(zwyA(wdZBys>GAT6*~pbVL>IPlwECG z!EeEvPQ3jVdL-an84&Gjj8Wa9g2ejLz~|cb9{+4$pN4_$dKvsbij~hT2NxICrn>Ol zjLfaacEjPFXdD*4xw)|z-iwD_%)cFWmj|GLhfEP1yRY1sDOqA^7XMR`RE@mtEu07qsgvon!F`ISk{HI<+Q$A+sm z5f_ox)-Tb^=B03^Z-XKQAfk}Mv#S`R1Zy$(Ar=igO3nqg1AqI6|AWAGRe0 zIY`4l(DwStUAS?UC#OiIdAVkVs;aa!3CLi(MG+=#@mZ&cnEhL&&FpK3F+-fGw<;^{ z-K#(Vs;aEKTj2TCD)Z!*RX%zOcHX@IWH!2~ufztu(ZTLl%!OnYKYR7@u@=3d_95b6 zpwc9X2!gIodT{I>(N4e^EI7*en4+XwA(DpeU9S=RbUI@$yWNn0k51213HR1v#7~Ih zIP$Fnj(auTN0h?t^5|xGVti$~tE+!>WO`{c7F=H4x!8+R{71sEy}fWIFOb9&p6ugCf$DzGXev1R9P%UyPcQYe0#tclPXct)pC9#!V(QFiCpD-OGY+WMbgs z&~8e|W{1fxS7|GK-nWBMDg$bK1qIfc8>lbx4n1m?xB&~D@aZxN@K>gMOzHwQDf1hd zKnc$LRVE{~{JBusYr`rx1)%htk>nq(WJY1j65L?NcIX<)8|OugcD;XIUG#5OwvWyt zmDPj)4Z#@ROIHDThy8yltpp%ilxYB&(;A!ApF|I&UcY~@jOl%Zz^VuLigE0g=9N`F zd_u=s_Lp`J0+N}Vqs97Ln^_m)ee|-mtDhB(th#0-U`l7t@P-6NrNs+Abxl>)`UYf2 z$qFZ_#(}-2YER+kF4RN`?>jMhVayrRiaxtrvm>LEiyOh+L)uS7pM-mMd{)jNMGMQrFy3>XMwJ;!wuk=FP*N! zbP;BlPZubI_#}Jy2h4;?swZcdv0sqEx`@%cAV{0)l)fk)iK=FC9on#R+xUb#;ZEK) zM`n$UAsh0{O|{N&65}sx>q{(%r{|CXtn^Vk0GLG4o-&%)sKuI-HM6oDy{8h3K;-Bk zBSGZvQ1pwY^OHs^l#KkXXqQXmZvZ4&*#sXaoNZzfAIzqt^pu+ENHJ?IA0CYcPDwZ0 zDcR|zbg8Zd2eYr^=NTeSRj3(T)O2EQ4suY-oB; zoBN06Z~K^^J*lBaXI7S@X78gfSKKYa;rqR>`2NEuxT#*Z5Q>-!z)3}D?|G*~fU`>L zKa;>7(O1TLM6q*dWla2|<03kiRG+ℑ+$NU}}Wk^?|x7ogt&TgDJB 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